{"version":3,"sources":["app.js","dateSelector/dateSelector.js","core/core.ajax.js","contactUs/contactUs.js","documents/documents.js","header/header.js","home/home.js","login/login.js","pages/pages.js","paperwork/paperwork.js","reportSettings/reportSettings.js","account/payments/Payments.js","account/profile/profile.js","account/reports/reports.js","documents/account/account.js","fuelCards/cards/fuelCardsCards.js","fuelCards/prices/fuelCardsPrices.js","fuelCards/transactions/fuelCardsTransactions.js","orders/ordering/orders.js","orders/pricing/odPricing.js","httpService.js","core/core.constants.js","core/core.enums.js","core/core.error.js","core/core.objects.js","core/core.security.js","directives/core.directives.js","directives/pdi.ng.extensions.js","directives/pdi.ng.validate.js","Services/services.paymentAccounts.js","filters/core.filters.js","providers/core.providers.js","Services/services.browser.js","Services/services.bulkFuelPriceNotices.js","Services/services.contactUs.js","Services/services.customers.js","Services/services.documents.js","Services/services.edoc.js","Services/services.encrypt.js","Services/services.fuelCards.js","Services/services.globalizations.js","Services/services.home.js","Services/services.localizations.js","Services/services.logging.js","Services/services.orders.js","Services/services.pages.js","Services/services.paperwork.js","Services/services.paperworkDealerForms.js","Services/services.paperworkDeliveries.js","Services/services.paperworkMeters.js","Services/services.paperworkReports.js","Services/services.paperworkTanks.js","Services/services.payments.js","Services/services.profile.js","Services/services.reporting.js","Services/services.reports.js","Services/services.userAccounts.js","Services/services.warehousePriceNotices.js"],"names":["angular","module","config","$routeProvider","$httpProvider","$locationProvider","templateProvider","hashPrefix","when","templateUrl","getTemplate","controller","resolve","localStrings","localizationSvc","getCachedLocalizationsContainer","otherwise","interceptors","push","factory","$rootScope","$q","$injector","request","headers","loginInfo","userIsImpersonated","userId","userKey","userType","impersonatorUserId","impersonatorUserKey","impersonatorUserType","showLoader","response","get","pendingRequests","length","isAuthenticated","responseError","status","data","ExceptionMessage","match","notifier","show","getLocalizedString","reject","$scope","$http","Authentication","WebUserSvc","$location","WebFunctionGroups","WebFunctions","$window","BrowserService","WebProfileService","$timeout","$filter","encryptData","WebFunctionModules","PaymentService","PaperworkService","LoggingService","EdocService","localDateRangeStrings","openNewWindow","url","window","open","initialize","appInfo","profile","webUser","paperwork","fuelCards","userLoaded","profileKey","customText","backgroundImage","syscfg","isUndefinedOrNullOrEmpty","password","impersonationAccessGuid","undefined","path","search","indexOf","applySystemSettings","getLoggedInWebUserToken","logout","getAuthenticationToken","userToken","sessionExpired","clearInfo","goTo","amplify","store","rememberMe","locationInfo","functionGroup","webFunctions","menuLocation","subMenuLocation","sideMenu","sideMenuData","applyAction","then","Configuration","softwareVersion","SoftwareVersion","ContactUsText","poweredByPdiText","PoweredByPdiText","countryInfo","Country","passwordComplexity","PasswordComplexity","LandingLogoImage","LandingBannerImage","UseGoogleAnalytics","GoogleAnalyticsKey","isBlank","ga","applySystemSettingsSiteDisabled","initializeSiteDisabled","applySelectedProfile","getWebUser","CurrentWebProfile","Key","setProfileColor","PrimaryColor","authorizationIndex","getCurrentAuthorization","CurrentAuthorization","WebAuthorizations","MenuBackgroundImage","checkForAppliedProfile","setSubMenu","value","location","pendingNav","subMenu","setWebProfile","WebProfile","setSystemConfiguration","checkCurrentUserPermissions","contact","CustomerContact","CustomerContactWebFunctions","x","hasModuleAccess","checkCurrentCustomerModules","i","WebFnKey","Selected","checkCurrentUserPermission","AllWebFunctions","currentCustomer","Customer","isBulkFuel","BulkFuelCustomer","isCardLock","CardLockCustomer","isRetail","RetailCustomer","isWholesale","WholesaleCustomer","isWebEft","WebPmtEFTGrpKey","checkWebFunctionModules","openEdocByRefNo","type","key","refNo","custKey","renderEdocByRefNo","JSON","stringify","EdocDetailsKey","Type","RefNo","CustKey","edoc","createUrl","openEdoc","edocKey","renderEdoc","openEdocEmail","senderAddress","encrypt","encodeURIComponent","openAttachment","attachmentGuid","getWebProfileMessage","messageKey","$on","event","next","current","unLockPayments","CustContKey","EmailAddress","unockInvoices","batch","submitPaperworkCmdParms","SiteKey","PaperworkDate","urlFormatDate","SubmitPaperwork","PreviouslySubmitted","previous","rejection","aDate","ignoreIe","browser","getBrowserType","aDate2","Date","Object","prototype","toString","call","substr","parse","replace","isNaN","getTime","getFullYear","getMonth","slice","getDate","formatDate","formatDateTime","addDaysToDate","date","days","result","setDate","successEventListener","opResults","HasWarnings","forEach","Warnings","item","failedEventListener","_accountLockError","HasErrors","Errors","lockedAccount","errorEventListener","obj","errors","Stacktrace","StackTrace","logErrors","console","log","setFocusOnReady","elemID","setTimeout","$apply","$","focus","paymentsEnabled","WebPaymentsEnabled","UsesWebEFT","CustWebPaymentSettings","CurrentProfileTerms","AddandEditWebPaymentAccounts","AddandEditWebPayments","ActiveAccountCount","execOnReady","func","resetDirtyFlags","form","$setPristine","removeClass","resizeKendoGrid","grid","count","offset","widowHeight","innerHeight","setOptions","height","scrollable","initializeDateSelector","dateSelector","displaySelector","selection","startDate","startMin","startMax","endDate","endMin","endMax","numOfDays","maxNumOfDays","options","name","valid","overrideDefaults","hideAllDays","disabled","dateSelectorInitialized","localizationFilesListener","localizationFilesInitialized","$watch","setCachedLocalizations","modalifier","display","title","text","showConfirm","closeBtnTxt","confirmBtnTxt","hide","showSetupError","showSavedError","showNoResults","page","confirm","fnYes","fnNo","confirmYes","isUndefined","confirmNo","directive","restrict","require","link","scope","element","attrs","$formatters","modelValue","Number","$parsers","viewValue","getAttrTextFromNodeMap","attr","attributes","getNamedItem","ApiServiceSettings","settings","this","method","params","responseType","skipValidations","ApiServiceOperationResult","Success","SuccessMsg","SucessMessage","ErrorTitle","ErrorMessages","WarningMessages","IsRedirect","RedirectUrl","Data","$provide","constant","templates","initDateSelector","onChange","validateStartAndEndDate","today","year","month","getDay","parseInt","ContactUs","Message","ct","st","m","ContactUsSubject","SubjectText","ContactUsMessage","CustomerContactKey","showContactUsModal","message","CommentContexts","showErrorBox","loadContactUsContext","$parent","sendMessage","toNumber","validateMessage","saveMessage","MessageSent","$routeParams","$anchorScroll","menu","SiteLayout","HeaderMenu","Name","header","SubMenu","ParentKey","sub","SideMenu","side","setSiteMenuLocation","val","menuObject","subMenuObject","menuText","subMenuText","documentService","getDocuments","ref","desc","start","end","docType","contKey","listDocuments","RefDateFormatted","RefDate","kendo","documentsGridInit","documents","documentsGrid","documentsGridOptions","autoBind","change","e","dataItem","select","Guid","columns","field","width","class","filterable","cell","operator","showOperators","template","dataSource","DataSource","editable","mode","extra","navigatable","pageable","selectable","sortable","ds","documentsGridDS","read","minDate","thisMenu","find","SourceType","SourceKey","documentType","referenceNumber","description","showAccounts","showUserOpt","setMenuLocation","setSubMenuLocation","checkUserMenuSecurity","securityGroup","setNewCurrentAuthorization","index","retrieveSelectedProfile","Id","$broadcast","showAccountList","editUser","changePassword","showUserOptions","headerTimer","subMenuWaiter","menuKey","barWidth","document","getElementById","clientWidth","acctWidth","style","overflowX","startIndex","endIndex","menuLength","setMenuVisibility","maxMenuWidth","currentMenuWidth","menuItem","visible","moveMenuLeft","moveMenuRight","originalWhen","globalResolves","resolveWebUser","_user","route","extend","ajax","homeService","globalizationSvc","modalInfo","curArticle","toggleModal","modalHeader","modalContent","content","shown","updatePageInfo","loadHomePageInformation","PageInfo","formatArticles","formatCurrencies","accountChangeListener","showLastCreditNotification","DispType","HomeInfo","LastCreditNotification","emailPopUp","EdocDtlKey","AttachGUID","showAccountSummary","ViewCreditInformation","DisplayPastDueMsgAt","CrStatus","AccountNeedingVerificationv","showRecentActivity","homeInfo","ScheduledPayment","Amount","PendingEft","PostedEft","LastInvoice","CustomerActivity","LastRcptAmt","LastStmtAmt","CustomerPriceNotice","EdocDetails","DtlKey","getArticle","dir","Announcements","Text","trim","unescapeHTML","lastInv","lastStmt","lastEft","lastPmnt","pendEft","nextSchPmnt","acctBalance","AccountBalance","unbilledActivity","UnshippedBalance","creditLimit","CrLimitTotal","availableCred","AvailableCredit","AmountDisplay","formatCurrency","LastStmtAmtDisplay","LastRcptAmtDisplay","AccountBalanceDisplay","UnshippedBalanceDisplay","CrLimitTotalDisplay","AvailableCreditDisplay","validatorSvc","constantLists","showLogin","showProfileSelector","showForgotPassword","initializeLogin","clearValidationScopes","impersonationGuid","automatedLogin","getRememberMe","checkForAutomatedLogin","authenticateUser","executeValidations","error","passwordExpired","passwordDays","setRememberMe","login","user","token","Token","expires","timeout","validatePasswordComplexity","errorList","retrieveWebUser","err","webUserKey","Answer2","Answer","_webProfileCount","WebProfiles","loadSelectedProfile","getWebUserProfile","showForgotMyPassword","addScopeToValidate","submitForgotMyPassword","processForgotMyPassword","signup","displayControls","Timestamp","AnswerClear","GUID","Password","PasswordClear","Question","QuestionClear","Reset","Validated","controls","confirmPassword","question","answer","confirmAnswer","secretQuestions","instance","getWebUserForSignup","sendWebUser","signupWebUser","clearErrors","clearAllValidations","resetPassword","displayTitle","displayQuestion","displayPassword","displayButton","buttonText","getWebUserForPasswordReset","sendAnswer","verifyWebUserSecretQuestionAnswer","setNewPassword","resetWebUserPassword","submitInfo","webUserToUpdate","customMessage","submitPassword","OldPassword","pageInfo","oldPassword","success","userAccountService","resultMessage","cont","unsubscribeContact","Successful","Unsubscibed","initializePage","controllerAs","filter","input","PagesService","ctrl","Context","Pages","Tokens","ViewCustomPages","getWebProfileSiteLayout","customPagesMenuNode","MenuNodes","$sce","$interval","reloadInterval","selectedPage","conf","selectedIndex","pages","foundPage","retrieveToken","getAccessToken","AccessToken","MenuNode","ClientAuthMethod","trustAsResourceUrl","PageURL","access_token","msg","AuthMethods","Header","req","Authorization","frame","querySelector","contentWindow","write","close","failed","URL","glue","includes","token_type","expires_in","failure","isSelected","retval","PaperworkReportsService","PaperworkEntry","context","reports","reviewPaperwork","loaded","unposted","getPaperworkContext","paperworkSites","PaperworkSites","selectedSite","SelectedSiteKey","lockPaperworkAfterDru","LockPaperworkAfterDru","calculatedPriceToPriorDaysPriceVariance","CalculatedPriceToPriorDaysPriceVariance","calculatedPriceToCapturedRetailPriceVariance","CalculatedPriceToCapturedRetailPriceVariance","netSalesDollarsToCapturedRetailPriceNetUnitsVariance","NetSalesDollarsToCapturedRetailPriceNetUnitsVariance","setSiteDescByKey","showEnterPaperworkMenuItem","CanEnterPaperwork","getPaperworkReports","PaperworkReports","paperworkReports","site","selectedSiteObj","setupNav","retailWarningMessage","averageWarningMessage","setupAppNavigation","apps","app","MenuCode","deliveries","meters","tanks","DealerFormVersionKey","forms","AppKey","openNewPaperworkBatch","OpenPaperworkBatch","PaperworkBatch","PaperworkApps","PaperworkForm","siteInfo","PaperworkSiteInfo","paperworkKey","pwLoadedListener","viewOnly","navPg","menuCode","$$path","resolveCurrentPageMenuCode","getSinglePath","reportingService","$root","reportSettings","reportKey","inventorySummary","reportType","setSiteAndDate","NextPaperworkDate","unwrapReportSettings","loadOptions","wrapReportSettings","saveOptions","setNextPaperworkDate","getNextPaperworkDate","sender","sitekey","paperworkDate","args","format","ValidatePaperworkSiteDateForContact","qs","exportReport","renderReport","localizeReports","sort","compareDisplayNames","report","DisplayName","a","b","localeCompare","isFirstPage","isLastPage","HistoryLimit","maxDate","FutureLimit","getRouterPath","SubmitStatus","paperworkHistoryGrid","paperworkHistoryGridOptions","paperworkHistoryGridInit","paperworkHistoryGridDS","selectedReviewSite","viewPaperworkHistory","reviewLoaded","noRecordsFound","allEntry","InvtyCOGSDate","FuelCOGSDate","getPaperworkBatchesByDate","each","PaperworkDateFormatted","TotalFuelSales","loadPaperwork","isEntry","PaperworkMetersService","showRetailPrice","showEndingDollar","showNetDollars","showEndingUnits","showNetUnits","showAvgPrice","showBeginMeters","metersLoaded","kInputOptions","culture","getLocale","decimals","spinners","MaxUnits","scopesToValidate","metersEditable","OpenPaperworkBatchByKey","res","firstLastPage","nextApp","loadMeters","navigateToPage","pwSubMenu","meterIndex","gridColEditorInput","container","fieldName","required","kendoNumericTextBox","appendTo","gridColNumber","cellIndex","rowIndex","meterGridColIsEditable","model","DollarsEndingState","DollarsNetState","UnitsEndingState","UnitsNetState","FuelPositionUnitReading","FuelPositionDollarReading","onGridKeydown","keyCode","keys","TAB","focusNextEditableCell","initializeMetersGrid","metersGridDS","schema","id","fields","DispenserNo","FuelPositionNo","ProductDescription","RtlPrice","EndAmount","NetAmount","EndUnits","NetUnits","CalcPrice","metersGridOptions","data-field","editor","headerTemplate","hidden","dataBinding","parent","dataBound","setupMetersRows","edit","$input","addClass","prop","currentCell","tbody","children","gridInputCellOnBlur","retailChange","endAmountChange","netAmountChange","endUnitsChange","netUnitsChange","row","col","$col","setupGridColumnValidationNotificationUI","setupMetersGridColumns","some","meter","metersGrid","hideColumn","widget","on","calculatePageTotals","qtip","position","adjust","y","classes","processGridColumnValidationNotification","$row","errorMessages","warningMessages","idx","hasErrors","hasWarnings","messageList","append","warningList","meterRowValidation","parms","calcTotalSales","isValid","uid","errorRtlPrice","warningRtlPrice","PriorCalcPrice","Math","abs","errorEndUnits","warningEndUnits","BeginUnits","errorEndAmount","warningEndAmount","BeginAmount","warningCalcPrice","validateMeters","newPWBatchLoadedListener","loadMetersForEntry","PCKey","PaperworkMeters","priceToleranceAmount","PriceToleranceAmount","ShowRetailPrice","ShowEndingDollar","ShowNetDollars","ShowEndingUnits","ShowNetUnits","ShowAvgPrice","ShowBeginMeters","DRUPosted","Status","PageStage","hasChanges","saveMeters","submit","submitPaperwork","fuelMetersAppInfo","HasData","IsRequired","HasBeenSubmitted","isPrevious","paperworkMeterHeader","metersForm","FuelMtrKey","SiteDesc","ProfCtrKey","PaperworkBatchKey","UserName","Ts","HeaderTimeStamp","copy","toJSON","updateMeters","savePaperworkMeters","netAmountCalc","calcPerUnit","CheckAveragePriceToRetail","CheckAveragePriceOverDay","calculateNetAmountFromEnd","calculateNetUnitsFromEnd","totalAmount","calculatePageAmountTotals","totalUnits","calculatePageUnitTotals","nextCell","eq","hasClass","nextAll","editCell","openBeginMeter","beginAmount","beginUnits","useBeginUnits","useBeginAmount","openPumpTest","TestAmount","TestUnits","saveModalValues","BeginAmountOverride","BeginUnitsOverride","PaperworkTanksService","tanksLoaded","postedReadingsExist","NewOSComments","postedTanks","loadTanks","tankIndex","min","partialUnitsEditor","kendoComboBox","partialUnits","dataTextField","dataValueField","selectionElement","selectedRow","selectedRowData","calculateTankValues","calculateWaterVolumeValues","_filterSource","getPartialDescFromValue","Value","PartialUnits","initializeTanksGrid","tanksGridDS","TankNo","ProductId","NoReading","LargeUnits","SmallUnits","Quantity","WaterSmallUnits","WaterPartialUnits","WaterQuantity","Temperature","NetQuantity","Electronic","Depth","tanksGridOptions","setupTankRows","tanksGrid","setupTankGridColumns","target","closest","set","checked","useLargeUnits","quantityOnly","trackWaterLevels","useTempCorrections","calculateVolumeForTemperature","modelRow","getByUid","depth","calculateTankDepth","metric","quantity","getVolumeFromTankChart","tankCharts","netQuantity","adjustVolumeForTemperature","tempCharts","calculateWaterDepth","getWaterVolumeFromTankChart","validateTankOverShort","referenceTank","hasWarning","UseOSWarnings","HasWarning","Min","Max","InventoryTankNo","tolerance","EndQty","OSWarningPct","OSWarningUnits","max","totalValue","calculateTankEndQuantity","tankCommentIsRequired","tank","inventoryTankNo","tankRowValidation","errorFuelQty","warningFuelQty","maxTankVolume","getMaxVolumeFromTankChart","validateTanks","refreshDataSource","PaperworkTanks","PostedPaperworkTanks","PartialUnitsList","Metric","QuantityOnly","UseLargeUnits","UseTempCorrections","TrackWaterLevels","TankCharts","TempCharts","OSComments","RequireOSComments","tanksEditable","tankCommentRequiredError","tankCommentValidation","tankCommentErrorOnBlur","tankCommentErrorOnFocus","savePaperworkTanks","showPostedReadings","popupTitle","gridOptions","el","kendoGrid","refresh","tanksForm","tankHeader","HeaderKey","StickType","FuelStkHdrKey","NewText","getPartialValue","PaperworkDeliveriesService","$compile","deliveriesList","fuelDelivery","AuthorizedVendors","AuthorizedTerminals","AuthorizedCarriers","FuelDeliveryFreight","VendKey","TrmnlKey","CarrierKey","deliveriesLoaded","deliveryFilteredTanks","currentView","changeView","view","freightModalFormDelegate","productValidation","errorDescription","newDeliveryProduct","getDeliveriesWithContext","hideModals","FuelDeliveriesList","NewDelivery","LiftDatetime","DelivDateTime","fuelDeliveriesCount","initializeDeliveriesGrid","productEditor","SiteTankProducts","Description","tankEditor","getFilteredTanksList","ProdKey","addDeliveryGridRow","$newRow","last","deliveriesGridColIsEditable","deliveryIsEditable","getProductByKey","prodKey","deliveriesGridDS","ProdId","ProdDesc","DelivGrossQty","DelivNetQty","SelectedTank","FuelDeliveryProducts","deliveriesGridOptions","setupDeliveryRows","deliveriesGrid","addDeliveryAction","setupDeliveriesGridColumns","setupDeliveryRow","deliveryRow","selectedProduct","totalRows","$lastRow","cancelRow","AllocFuelContKey","AllocFuelContDtlKey","AllocLastPostedFuelContDtlKey","BasedOnUnits","BOLAutoMatched","BOLDtlKey","BusEntKey","CalcExtCost","CalcFrtCost","CalcUnitCost","CnfrmDateTime","CnfrmStatus","CnfrmUserID","ContractOverride","CostOverride","CostPosted","CustLocKey","DestProdKey","DestSiteKey","DestType","ExternalRecID","FrtInInventory","FrtOverride","FrtPLAmt","FrtPLInInvAmt","FrtPLInInventory","FueldelProdFrtReconGrossQty","FueldelProdFrtReconNetQty","FrtReconUserID","FrtReconciled","FrtUnitCost","FrtVndInvKey","FrtVndInvPndKey","FuelContKey","FuelContDtlKey","FuelDelKey","InvcExtCost","InvcFrtCost","InvcFrtUnitCost","InvcGrossQty","InvcNetQty","InvcUnitCost","LastPostedFuelContDtlKey","OrdQty","OrigProdKey","OwnerOption","ReconUserID","Reconciled","TaxPLAmt","TaxPLInInvAmt","VndInvKey","VndInvPndKey","FuelDeliveryTanks","DelivQty","DelProdKey","Ethanol","InventoryCost","LastCost","LastDelivGrossQty","LastDelivNetQty","LastEthanol","LastOctane","LastQty","LastRVP","LastTankNo","Octane","RplCarrierKey","RplCostAssigned","RplTrmnlKey","RplVendKey","RVP","insert","editRow","ShowGrossUnits","deleteDeliveryProductRow","dataRow","remove","newValue","oldValue","vendKey","UsesSiteAuthorizedTerminals","getSiteFuelAuthorizedOrigins","trmnlKey","terminals","savePaperworkDelivery","validateDeliveries","isNewRow","appForm","EntryUserID","paperworkDeliveryHeader","FuelDelivery","deliveryProduct","FilteredTanksList","displayDeleteConfirmationModal","deleteConfirmationModalDeferred","defer","showDeleteConfirmationModal","promise","deleteDeliveryHandler","deliveryListItem","deletePaperworkDelivery","displayCommentsModalForm","showCommentsEntryModalForm","perLoadFreightModalFormDeferred","displayPerLoadFreightModalForm","fuelDeliveryFreight","showPerLoadFreightEntryModalForm","editPerLoadFreight","productKey","SiteTanks","siteTankProductLookup","SiteTankProductLookup","findAll","ProductKey","authorizedTank","TankProductKey","isDefined","delivery","deliveryGridRowValidation","errorNetQty","warningNetQty","errorGrossQty","warningGrossQty","Capacity","showErrorTooltip","deliveriesGridRowsCount","$gridActionFooter","$gridActionFooterRowMiddle","getStatusDescription","liftDateValidation","validationMessage","validationMessageWrn","validatorError","liftDateTime","validatorWarning","warningMsg","maxDateTime","minDateTime","validateLiftDate","pdi","ng","validate","PdiValidation","deliveryDateValidation","deliveryDateTime","validateDeliveryDate","viewDelivery","deliveryKey","getDelivery","editPerLoadFreightOkHandler","executeValidationsForScope","editPerLoadFreightCancelHandler","addDeliveryFreightRow","newFreightRow","CalcAmt","FrtRuleKey","InvcAmt","Override","validateFreightRow","freight","freightRuleValidation","PaperworkDealerFormsService","dealerFormsLoaded","formsEditable","kOptions","loadDealerForms","dealerForms","DealerForms","setupDisplayValues","Updated","updateDealerForms","setFocus","AllFieldsDisplay","AllFields","newObject","property","formatNumeric","saveDealerForms","Caption","DealerFormVersion","focusSet","Rows","DisplayOnly","IsCalculated","onDealerFormChange","DataIDValue","parseFloat","convertStringToNumber","CalcFields","calcField","Calcuations","calc","ResultTypeKey","TypeKey","CalcTypeKey","Operation","getReportFromSubMenu","getPaperworkReportSites","PaperworkReportSites","SubjectArea","intervalPromise","paperworkBatchKey","refreshLock","RefreshPaperworkLock","startLockInterval","stopLockInterval","cancel","pwLockListener","pwSubmitListener","currentPage","isView","menuOrder","findIndex","noKey","pathMode","ReportSettingsService","showSettingsBar","allowLoad","allowSave","allowExport","allowCsv","allowXml","allowPdf","allowExcel","exportReportData","initReportSettings","exportOptions","selectedExportOptions","saveSettingsName","showModalLoad","showModalSave","showModalConfirmSave","selectedKey","selectedReportContactKey","selectedDescription","canDelete","exportData","applyReportSettings","deleteReportSettings","saveReportSettings","getReportSettings","notify","returnedReportSettings","ReportSettings","ARWebSettings","saveSettings","loadSettings","saveConfirmReportSettings","selectKey","saveSettingsKey","fromJson","Options","apiService","deferred","apiSvcSettings","RptKey","execute","custContKey","recStatus","settingsKey","toJson","RecStatus","ReportKey","SettingsKey","executeAndNotifyOnSuccess","getTermsAndConditions","theTermsAndConditions","declineTerms","acceptTerms","agreeToTerms","acceptTermsAndConditions","CustomerWebPaymentSettings","paymentKey","invoicesGrid","invoicesGridOptions","invoicesGridInit","charge","DueDate1","create","InvoiceDate","Balance","invoicesGridDS","creditsGrid","creditsGridOptions","creditsGridInit","UnAppAmount","creditsGridDS","webPaymentLocked","paymentControlOptions","CurrentTerms","lockPayments","initializePart2","invoicesValueArr","invoiceWarning","webPayment","WebPaymentWithContext","CustomerScheduledPayment","PaymentType","InvoiceValues","selctedInvoicesValue","selctedInvoicesValueDisplay","setUpView","getPayment","lockInvoices","getScheduledPayments","HasPendingPayments","CustomerScheduledPayments","any","HasPendingBudgetPayments","selctedCreditsValue","totalInvoiceAmount","setPaymentType","lastStatementDate","LastStatementDate","isStatementCustomer","IsStatementCustomer","LastStatementAmount","HasUnpaidStatement","isBudgetCustomer","IsBudgetCustomer","isBBEnabled","IsBBEnabled","BudgetBalance","isInvoiceCustomer","IsOpenItemCustomer","Invoices","IsPrepaidCustomer","WebMinEFTDate","WebMaxEFTDate","PaymentDate","viewSetupComplete","theValue","theGrossValue","theDiscount","TermsDiscountDate","TermsDiscount","round","selctedInvoicesGrossValue","selctedInvoicesGrossValueDisplay","selctedInvoicesDiscountValue","selctedInvoicesDiscountValueDisplay","credit","selctedCreditsValueDisplay","totalInvoiceAmountDisplay","getCssClasses","ngModelController","$invalid","$dirty","$valid","showError","$error","setScheduledPaymentAmount","verifyPayment","dataItems","invoice","Credits","CreatedByCustContKey","LastModifiedByCustContKey","CustPmtAcctKey","CreditAmount","GrossAmount","DiscountAmount","CreditAmountDisplay","GrossAmountDisplay","DiscountAmountDisplay","amount","$cancelPromptToSave","paymentIsValid","elem","css","paymentDateValidation","_localStrings","liftDate","replacementParms","validatePaymentDate","invoicesLocked","delay","unlockInvoices","paymentType","checkAll","paymentsInfo","lastStmtAmt","budgetBalance","LastStatementAmountDisplay","BudgetAmountDisplay","isBudgetPayment","budgetBalanceChanged","confirmPayment","getBudgetPaymentContext","savePayment","changePayment","reCalculateCreditValues","paymentHistory","scheduled","processed","canceled","getScheduledPaymentHistoryContext","accounts","CustomerPaymentAccounts","scheduledPayments","pmntGrid","pmntGridOptions","pmntGridInit","payment","pmntGridDS","CustPmtAcctDescription","FormattedDate","StatusDescription","FormattedActivityDate","Created","predicate","reverse","cancelPaymentKey","cancelConfirm","selectedAccount","LastModifiedDateTime","FormattedCreatedDate","CreatedDateTime","CreatedByCustContEmailAddress","confirmCancelPayment","cancelPayment","lockData","Payments","lockPaymentsAndInvoices","CustomerKey","resetValues","paymentLockListener","invoiceLockListener","paymentUnlockListener","invoiceUnlockListener","$route","PaymentAccountService","acctGrid","acctGridOptions","acctGridInit","acctGridDS","WebPaymentAccounts","AccountStatusDesc","NextPaymentText","getPaymentAccountList","AccountLastActivity","FormattedPaymentDate","AccountNextPayment","AccountNextPaymentAmmount","editableAccount","paymentAccountKey","initializeEditAcount","AccountTypes","descr","WebPaymentAccount","AccountStatus","getPaymentAccount","AccountTypeDescr","AccountType","CustomerPaymentAccount","routingNumberIsValid","setAccountStatus","savePaymentAccount","verifyPaymentAccount","validateRoutingNumber","BankRoutingNo","verifyPaymentAccountOverride","routingNumberValidation","confirmDeactivate","confirmClose","no","acctInfo","confirmPaymentAccount","changePaymentAccount","AccountNoVerify","AccountNo","verifyAccount","webPaymentAccountKey","webPaymentAccountDesc","amt1","amount1","amt2","amount2","VerificationAmount1","VerificationAmount2","contactsGrid","contactsGridOptions","selectedRows","contactsGridInit","contactsGridDS","CustomerContacts","WebActive","ManageContactsAndSecurity","listContacts","FirstName","LastName","expandWFGrids","expand","showAccountFNs","showFuelFNs","showOrdersFNs","showPaperworkFNs","showCustomPagesFNs","wbfns","Disabled","textMessagePhoneNumbers","modalMultiSave","modalCopySecurity","copyContact","clearSecurity","modalResetPassword","verify","modalChangeEmail","hash","email","pendingSave","phoneTypes","clearButton","canResetPassword","EnforcePasswordComplexity","getNextPasswordResetDate","hideActiveCheckbox","hideWebActiveControl","contactKey","customerContactKey","editWebUser","AnswerClear2","copyUser","CopyContacts","loadContactContext","WebQuestionAnswer2","WebQuestionAnswer","TextAddressPhone","setAllWebFunctions","editUserForm","wbFns","saveContact","secretQuestion","$angular_scope","scopeValidationErrors","MatchingContactCount","saveContactOnly","ApplyToAll","save","saveAllContacts","EditorName","EditorEmailAddress","PhoneFormatted","Phone","AltPhoneFormatted","AltPhone","AltPhone2Formatted","AltPhone2","FAXFormatted","FAX","saveWebUser","reload","retrieveWebUserData","ID","setEditUserSelectedAuthorization","updateContactSecurity","currentContactWebFunctions","questionChanged","showChangeEmailModal","hideChangeEmailModal","saveChangeEmail","addUser","copyContacts","getBlankContact","createContact","validationsPassed","closeAddUser","customerService","contacts","primaryCreditContact","sendBalanceAlerts","SendBalanceAlerts","sendBalanceAlertText","balanceAlertThreshold","BalanceAlertThreshold","prepaidBalance","CrPrePaidBalance","balanceAlertThresholdDisplay","CreditContKey","num","saveAccountSettings","saveCustomerAccountSettings","settingsForm","currentCustomerId","auditLog","auditResults","auditLogGrid","auditLogGridOptions","auditLogGridInit","sideMenuLocation","includeAdds","includeChanges","includeDeletes","includeActions","subjectArea","changedBy","showContacts","subjectAreas","contactList","sortBy","unique","add","getWebAudits","WebAuditEntries","AudEntryDateTime","AccountActivity","invoices","reportTypeDetail","outstandingOnly","showReportDetail","transactionHistory","creditCardActivity","groupByDate","pending","setReport","tenNinetyNine","useDateRange","AccountReports","recentActivity","AccountPayments","unappliedPayments","statementsGrid","statementsGridOptions","StmtEdocKey","statementsGridInit","statementsGridDS","getStatements","stmt","StmtDateTime","notifications","types","fullName","Active","notificationsGrid","notificationsGridOptions","handleRowClick","notificationsGridInit","notificationsGridDS","getNotifications","note","NotcDate","EmailBody","trustAsHtml","NotcType","tenNinetyNineAdvice","yearsBack","adviceGrid","adviceGridOptions","Get1099AdviceList","DateTimeFormatted","DateTime","PmtYear","adviceGridInit","adviceGridDS","FuelCardsService","viewCards","modalEdit","modalPin","modalReissue","modalDeactivate","modalChangeCardNo","viewCardsGrid","viewCardsGridOptions","displayFuelCard","viewCardsGridInit","viewCardsGridDS","cards","getCards","cardFormat","cardNumber","active","expired","locked","cancelled","department","Cards","NumberMasked","Template","statusCodes","act","ActivationDate","exp","ExpirationDate","Sort","FuelCardsCards","FuelCardsTrans","FuelCardsPrices","stringFromCharacterEntity","getCardsContext","formats","CardFormats","embossingReasons","CardEmbossingReasons","deactivateReasons","CardDeactivationReasons","states","States","alertRules","CardAlertRules","CustomerCardTemplates","company","Company","getCardsDepartments","departments","Departments","getCustomerLocations","locations","Locations","saveCards","state","closeModal","card","cardDetails","CardInfos","Number_Formatted","Number_Masked","isValidForWebTemplate","PIN","Activation_Date","Expiration_Date","Cards_Issued","Emboss_Date","Emboss_Line_1","Emboss_Line_2","Emboss_Line_3","Export_To_Embosser","Marked_For_Export","Last_Emboss_Date","CardDeactRsn_Key","Deactivation_Date","HasTransactions","TimeStamp","securityOptions","allowPending","CardCFs","editCards","getCardDetails","ViewCardNumbers","CardDetails","origCardDetails","setSecurityOptions","displayModelPin","saveChangesPrompt","PIN1","PIN2","displayModelReissue","CardEmbRsn_Key","displayModelDeactReasons","toISOString","displayChangeCardNo","command","nextDate","CardFmt_Key","VisibleOnWeb","PhysicalCard","AutoNo","AllowPending","UseExpirationDates","DefaultLifetimeSelection","AllowDefaultByCustomer","Next_Exp_Date","keyLookup","list","isArray","readOnly","formTitle","viewCardNumber","displayCardNumber","canChangeCardNo","showVehicleInfo","showCardAuths","showProdSite","showTaxExemeptions","showEmbossingAlert","showChangePin","showReissue","reissueTitle","showDeactivate","showSaveTemplate","shipToLocation","cardType","cardStatus","deactivationReason","embossingReason","alertRule","EditCards","AllowEditAfterEmbossed","autoNo","maxCardNoLength","Mask","CardAlertRule_Key","Max_Trans_PerDay","AllowVehicleInfo","Auth_By_Product","Single_Site_Auth_Site_Key","CardTaxExs","showSave","AllowPIN","AddNewCards","CardDptKey","Vehicle_State_Key","cols","addFooterBar","addCardAction","stateList","kendoDropDownList","optionLabel","Code","addCardsGridOptions","nullable","validation","number","matches","addCardsGrid","vehicleID","licenseNo","defaultValue","update","destroy","createAt","messages","commands","canceledit","mobile","table","getAttribute","addRow","preventDefault","showCardNo","showPIN","showVehInfo","validateTemplates","templateKey","templateDropDown","saveChanges","templateDetails","clone","newCard","Cust_Key","SetExpirationDate","VehicleID","Vehicle_License_No","CardFmt_Allow_Pending","addCard","CardNumberValid","getCard","splice","myItem","AutoNoKey","locationsGrid","locationsGridOptions","selectLocation","locationsGridInit","locationsGridDS","results","selected","disableCtrls","LocIDFormat","LocIDLength","canAddorSave","ViewCards","pullLocations","unshift","addLocation","clearLocation","blankLocation","deleteLocation","pushLocation","saveLocation","loc","StateKey","State","saveCustomerLocations","locationsForm","updatePhone","departmentsGridReady","departmentsGrid","departmentsGridOptions","selectRow","deptKey","departmentsGridInit","departmentsGridDS","tableArray","html","FieldName","values","selDept","selVals","disableControls","pullDepartments","createObjects","hideCol1","hideCol2","hideCol3","hideCol4","hideCol5","Fields","Values","FieldNumber","CardDptFldKey","FieldValue","dept","makeTable","loadTable","deleteDept","pushDepartments","departmentForm","newDesc","saveCardsDepartments","n","cell2","cell4","deptName","cell1","cell1Key","cell1Value","cell2Key","cell2Value","cell3","cell3Key","cell3Value","cell4Key","cell4Value","cell5","cell5Key","cell5Value","formDisabled","pullFields","setFields","clickCancel","clickSave","pushFields","deptSetupForm","CPPriceNotices","lookupPrices","product","groupBy","sites","CustContCPSite_Site_Key","Site_Description","products","ProdAliasGrp_Key","ProdAliasGrp_Description","maxCPDays","getPriceNoticesSettings","CPPrcNtcRuleKey","PriceNoticesSettingsSites","concat","Site_Selected","PriceNoticesSettingsGroups","ProdAliasGrp_Selected","CPPriceRuleMaxDays","productsGrid","productsGridOptions","sitesGrid","sitesGridOptions","siteSearchGrid","siteSearchGridOptions","siteSearchGridInit","siteSearchGridDS","sitesGridInit","sitesGridDS","Site_Address1","Site_City","State_Code","Site_Zip","productsGridInit","productsGridDS","initPriceNoticesSettings","initModalSiteSelector","priceNoticesSettings","methods","allProducts","CustContCPProd_Key","CustContCPProd_CustCont_Key","ProdAliasGrp_ID","ts","refreshPriceNoticesSettings","PriceNoticesSettingsMethods","CompKey","modalSiteSelector","siteSearch","city","postal","limit","toManyResults","maxResults","showModalSiteSelector","retrieveSites","getSearchSites","SearchSites","checkAllProducts","disableNotices","EmailSelected","AltEmailSelected","PhoneTextSelected","addSites","CustContCPSite_Key","removeSite","savePriceNoticeSettings","hasProducts","hasSites","transactionAlerts","CardTransactions","transactionDetails","cardNoDesc","inclUnbilled","inclBilled","inclAdditionalInfo","viewCardNumbers","additionalInfoReportName","rptName","CPInvcRecapSumTaxesByInvcGrp","updateOptions","transactionSummary","invoiceNo","enableUnbilled","enableBilled","recap1","recap2","transactionByInvoice","getTaxAuthorities","taxAuthorities","TaxAuthorities","taxDetails","taxAuthKey","groupBy1","enableGroupBy1None","groupBy2","enableGroupBy2","groupBy3","enableGroupBy3","inclTransDetail","enableInclAdditionalInfo","taxSummary","transactionsAlerts","reportCount","refreshTransactionAlerts","transactionTaxRecap","showTaxRecap","canOpenAddOrders","CanAddEditWebOrders","ordersService","errorsDisplayed","enableButton","removeAttr","setButtonVisiblity","displayOrders","orderDetails","OrdStatusKey","reopenBtn","submitBtn","WOGSettings","SubmitOnHold","cancelBtn","hasAnyItems","keyProperty","tanksAndEquipment","addOrder","tankIDCol","cancelCommentModal","blankOrderHeaderObj","creditHoldMessage","getOrdersContext","buttonBar","PONumber","DeliveryDT","ordKey","getOrderDetails","OrderDetails","getLocationDetails","getOrderLocationInfo","ReqDelivDateTime","TanksAndEquipment","OrdDelivDirections","DeliveryDirections","equipment","TankNumber","OrderQty","EquipmentKey","hasAnyTanks","hasAnyEquipment","saveOrder","Command","OrdCreatedByContKey","saveOrderDetails","OrdKey","cancelCommentModalDialogClose","editOrders","shipTo","prevCustLocKey","hideTankAndEquipment","ordersGrid","ordersGridOptions","ordersEquipmentGridOptions","ordersGridInit","showIdCol","ordersGridDS","TankID","Product","capacity","is","rowData","getKendoNumericTextBox","MaxVolume","rowDataMaxVolume","showColumn","ordersEquipmentGridInit","ordersEquipmentGridDS","EquipmentID","EquipmentDescription","ordersEquipmentGrid","validateOrderDate","savedTankData","dataBetweenDateChanges","getOrderContext","getOrderCustomerLocations","MinDateTime","OrderLocations","HasValidTankOrEquipment","updateCustomerLocationData","l","loadExistingOrder","initialOrderCustLocKey","validOrderQtys","items","map","order","isInteger","qtyValidityStates","every","Boolean","isFinite","floor","orderQtyWarning","orderTotal","sum","OrdQtyParams","OrdMinQty","OrdMaxQty","validOrder","editForm","updateCustomerLocationDataLock","source","validTankOrEquipment","isEmpty","finalItems","s","existing","CustFuelTankKey","copyTankData","te","OrderEquipmentDetails","copyEquipmentData","t","p","blankOrderDetailsObj","all","requestedDT","suggestedDT","theWinner","temp","reqDelivDateTimeString","oldReqDelivDateTimeString","isString","oldReqDelivDateTime","reqDelivDateTime","toDateString","openOrders","DeliveryDate","getOpenOrders","OpenOrders","openOrder","orders","ViewOrderHistoryandPriceNotices","quotes","ordered","dispatched","delivered","billed","fuel","warehouse","noninventory","productSearchText","packageSearchText","orderInvoiceBOLSearchTerm","bulkFuelPriceNoticesService","bulkPricesGrid","bulkPricesGridOptions","bulkPricesGridInit","bulkPricesGridDS","bulkFuelPrices","loadBulkFuelPrices","EffDateTimeFormatted","EffDateTime","warehousePriceNoticesService","warehousePricesGrid","warehousePricesGridOptions","warehousePricesGridInit","warehousePricesGridDS","warehousePrices","loadWarehousePrices","post","Content-Type","service","NotificationService","webAPICall","notifyOnSuccess","suppressErrors","assign","handleSuccess","handleFailure","catch","handleError","executeAndNotifyOnSuccessAndSuppressErrors","executeAndSuppressErrors","All","BulkFuel","CardLock","Retail","Wholesale","CardAlerts","ViewNotificationsSenttoOtherContacts","AddAndEditBulkFuelOrders","Account","Orders","Paperwork","FuelCards","Comments","Documents","AccountAlerts","CustomPages","webFunction","customer","handle","HttpUtil","paymentInfo","sessionTimeout","$analytics","WebUserId","WebUserPassword","ImpersonationGuid","ImpersonatedUserId","ImpersonatedKey","ImpersonatedType","ImpersonatorUserId","ImpersonatorKey","ImpersonatorType","eventTrack","category","label","removeEmptySiteMenuEntries","WebUser","retrieveWebUserFromAPI","retrieveWebUserFromAPIWithToken","ProfileKey","retrieveSelectedProfileFromAPI","webUserId","quiet","isLogin","WebUserKey","IsLogin","date1_ms","PWCreatedDate","date2_ms","_token","_profile","closeDialog","closeText","autoClose","transclude","$eval","dialogStyle","$element","$attrs","hideModal","ngModelCtrl","transformedInput","$setViewValue","$render","ele","dynamic","contents","NUMBER_REGEXP","lastValidValue","precision","symbol","unFormatNumber","formatViewValue","decimalPlaces","$isEmpty","nStr","split","x1","x2","rgx","test","addCommas","toFixed","applyFormat","$modelValue","$viewValue","empty","$setValidity","bind","customAutofocus","at","tip","corner","$parse","passwordMeterScore","pwdValidLength","pwdHasLetter","pwdHasNumber","pwdHasSpecial","PasswordMinLength","PasswordMinUpperCase","PasswordMinNumbers","score","total","$pristine","currentValue","imageArray","stop","advance","slider","getPrevImage","pauseAutoAdvance","getNextImage","modelCtrl","inputValue","alphaNumeric","initializeWindowSize","maxHeight","body","scrollHeight","documentElement","offsetHeight","clientHeight","windowHeight","windowWidth","innerWidth","newHeight","oldHeight","replaceWith","onCloseFn","onCloseMessage","onbeforeunload","onLeaveIfFn","onLeaveMessage","$locationChangeStartUnbind","localizedString","confirmPopUpText","pnLocalizationCtrl","localizations","overlayContainer","mainContent","getElementsByClassName","setHeight","postRender","terminal","kendoDateFormat","formatForCulture","kendoTimeFormat","kendoDateTimeFormat","inputMaskDateFormat","inputMaskTimeFormat","inputMaskDateTimeFormat","dateFormat","timeFormat","dateTimeFormat","dateTimeFormatPatterns","ntbCtrl","widgetInstance","ui","inputmask","clearMaskOnLostFocus","toBoolean","v","$$lowercase","String","theString","arguments","regEx","RegExp","validatorParms","executionExplicit","processElementErrorNotification","validationAttr","hasError","propertyName","validationValidationMsg","kendoDropDwnElm","errFocusHdlr","errBlurHdlr","errClickHdlr","ngModel","join","toggle","currentElement","span","unbind","processElementWarningNotification","wrnFocusHdlr","wrnBlurHdlr","kendoDropDwnElm1","processValidationNotification","compile","output","validationErr","viewport","my","collision","screen","fixed","scopeValidationWarnings","validationWrn","processValidationsSummaryNotification","createElementValidationMessageError","validationMsg","validationMessageElement","clearBtnElm","siblings","after","createElementValidationMessageWarning","removeElementValidationMessage","$this","requiredMsgDefault","minLengthMsgDefault","maxLengthMsgDefault","valueRuleRngMsgDefault","valueRuleGtMsgDefault","valueRuleLtMsgDefault","pdiRequiredExecutionExplicitDefault","ptrnEmailMsgDefault","pdiMinLengthExecutionExplicitDefault","pdiMaxLengthExecutionExplicitDefault","pdiMaxLengthEnforceMaxConstraintDefault","pdiValueRuleRangeExecutionExplicitDefault","pdiValueRuleGreaterThanExecutionExplicitDefault","pdiValueRuleLessThanExecutionExplicitDefault","pdiEmailValidataionExecutionExplicitDefault","evaluateIfConditions","ifExpr","account","AccountNoMasked","PrenoteDate","RejectedEmailSent","VerificationDate","IsDefault","AccountNextPaymentKey","ScheduledPaymentCount","cs","$$childHead","$$nextSibling","scopeValidations","hadError","validatorResult","validator","validateErrors","validateWarnings","warnings","formModelWatchers","addScope","scopeID","$id","pdivalidation","pdiValidations","elementValue","expression","isObject","isFunction","priority","validations","addValidation","showValidationNotification","ctrlIndex","errorValidatorFn","warningValidatorFn","validationErrorMsg","validationWarningMsg","formModel","newScope","$new","appHtml","addFormModelWatcher","watchUnBinder","unBinderFn","ctrls","requiredValidationMsg","requiredValidationMsgWrn","requiredExecutionExplicit","requiredIfExpr","requiredIfExprWrn","minlengthValidationMsg","minlengthValidationMsgWrn","minlengthExecutionExplicit","pdiMinlength","minlengthIfExpr","minlengthIfExprWrn","ifConditions","maxlengthValidationMsg","maxlengthValidationMsgWrn","enforceMaxConstraint","enforcemaxconstraint","maxlengthIfExpr","pdiMaxlength","maxlengthExecutionExplicit","lowerLimit","upperLimit","valueRuleRngValidationMsg","valueRuleRngValidationMsgWrn","valueruleRngValidationMsg","valueruleRngValidationMsgWrn","rangeParms","pdiValueruleRange","valueruleRngExecutionExplicit","valueruleRngIfExpr","valueruleRngIfExprWrn","valueruleGtValidationMsg","valueruleGtValidationMsgWrn","valueruleGtExecutionExplicit","pdiValueruleGreaterthan","valueruleGtIfExpr","valueruleGtIfExprWrn","valueruleLtValidationMsg","valueruleLtValidationMsgWrn","valueruleLtExecutionExplicit","pdiValueruleLessthan","valueruleLtIfExpr","valueruleLtIfExprWrn","ptrnValidationMsg","pdiValueIsNumeric","pdiValueIsNumericMsg","pdiDateIsGreaterEqualToMsg","pdiDateIsGreaterEqualToMsgWrn","fromDate","pdiDateIsGreaterEqualToFromDate","thruDate","ptrnValidationMsgWrn","regExPattern","ptrnEmailValidationMsg","ptrnEmailValidationMsgWrn","prtnEmailExecutionExplicit","emails","matchElementValidationMsg","matchElementValidationMsgWrn","valueruleNgModelMatch","valueruleMatchElementValidationMsg","valueruleMatchElementValidationMsgWrn","valueruleMatchElementIfExpr","valueruleMatchElementIfExprWrn","tel","country","provider","$get","templateName","absurl","protocol","hostname","pathname","indexOfAppRel","toLowerCase","substring","userAgent","navigator","browsers","chrome","safari","firefox","ie","custLocKey","StartDate","EndDate","alertAmount","sendAlerts","executeAndNotify","PrimaryContactKey","AlertAmount","locType","LocationType","Location","custkey","beginDate","BeginDate","customerKey","ReferenceNumber","DocumentType","ContactKey","documetnList","cust","yb","YearsBack","EdocKey","parameters","Parameters","MimeType","blob","bytes","EdocStream","raw","atob","uint8Array","Uint8Array","charCodeAt","Blob","createBlob","file","createObjectURL","setDatesToNull","cardNumDesc","isActive","isExpired","isPending","isLocked","isCancelled","CardFormatKey","CardNumDesc","IsActive","IsExpired","IsPending","IsLocked","IsCancelled","Department","cardKey","canViewCardNumbers","CardKey","CanViewCardNumbers","compKey","CompanyKey","cardCF","Card","CardCF","getLookupPrices","daysBack","DaysBack","cpPriceNoticeRuleKey","CPPriceRuleKey","City","Zip","Limit","groups","Address1","Address2","County","PostalCode","Email","depts","vals","locale","language","toLocaleString","currency","dateString","_cachedLocalizations","setLocalizations","localizationFilesContainer","innerText","string","getStringFrom","r","doesNotExist","getCachedLocalizationsFor","rp","constructor","Array","replaceString","fromCharCode","str","localizationSvcFactory","moduleName","self","$onInit","requestedDeliveryDate","RequestedDeliveryDate","Comment","CustContName","CustContPhone","CustLocAddress","CustLocCity","CustLocDesc","CustLocState","CustLocZip","LangID","OrdDelivNotes","OrdNumber","OrdStatus","OrdType","OrdFuelKey","localCache","Cache","object","expiration","now","inserted","nodeKey","ignoreStatus","IgnoreStatus","siteKey","Unposted","PaperworkBatches","emailAddress","BatchKey","ReadOnly","batchKey","readonly","forEntry","ForEntry","RefreshLock","DealerFormsHeader","forViewOnly","vendorKey","deliveryHeader","DeliveryHeader","calculateNet","begin","diff","nMax","profitcenterKey","ProfitCenterKey","netUnits","rtlPrice","checkRetailPrice","checkAveragePrice","showRtlPrice","netAmounts","totalDollar","meterHeaders","PaperworkMeterHeader","reportName","ReportName","convertVolumeToSiteUnits","units","siteUOM","tankUOM","getVolume","UnitOfMeasure","MeasurementType","tankChart","TankTypeKey","convertLinearUnits","wholeNumber","decimalNumber","baseAmount","partialAmount","Volume","isMetric","WaterDepth","TmpChartKey","temperature","tempChart","conversionFactor","ConvFactor","qty","wQty","TmpChartUseNetQty","tankHeaders","PaperworkTankHeader","customerPaymentAccountKey","webPaymentAccount","routingNumber","webPaymentKey","WebPaymentKey","accountKey","AccountKey","Scheduled","Canceled","Processed","skipBroadcast","CmdSuccess","termsKey","LegalTermKey","getARCustWebSheet","styleSheets","setLandingColor","pcolor","landingClasses","profileClasses","resetStyle","cssOverrideStyle","attribute","classNames","pdiSheet","rules","cssRules","selectorText","ArWebProfile","WebProfileKey","retrieveWebProfileFromAPI","webProfileWithContext","WebProfileWithContext","sCfg","iniializeFromApi","LandingPrimaryColor","Timeout","webProfileKey","messageType","MessageType","ca","WebProfileMessage","retrieveWebProfileMessageFromAPI","includeEvents","nameEmail","IncludeAdds","IncludeChanges","IncludeDeletes","IncludeEvents","NameEmail","MaxRows","renderReportApi","ReportBytes","documentMode","msSaveBlob","Filename","blobUrl","filename","createElement","click","href","download","appendChild","parentNode","removeChild","top","padCharacter","revokeObjectURL","AltEmailAddress","AltExt","AltExt2","AltPhone2Type","AltPhoneType","AltSpdDial","AltSpdDial2","CnSalKey","CPPrcNtcAllProducts","CPPrcNtcChgByDateTime","CPPrcNtcChgByUser","CPPrcNtcSignupDateTime","CPPrcNtcSignupUser","CreatedBy","EmailAddressOrig","Ext","FAXExt","FAXSpdDial","FaxPrefix","Greeting","LastChgBy","Notes","PhoneType","ReceiveMarketingLetters","SpdDial","TextAddressTextMsgDomKey","Title","WebMustChgPwd","WebPWAccessSingleSite","WebPWAccessSiteKey","WebPwd","WebQuestionType","CustomerContactWebAlerts","ConfirmEmail","customerContact"],"mappings":"AAIAA,QAAAC,OAAA,cAAA,CACA,iBACA,mBACA,yBACA,UACA,YACA,cACA,UACA,WACA,SACA,UACA,mBACA,oBACA,mBACA,oBACA,0BACA,WACA,cACA,cACA,cACA,eACA,iBACA,mBACA,UACA,kBACA,eACA,aACA,iBACA,aACA,eACA,gBACA,mBACA,gCACA,mBACA,qBACA,qBACA,qBACA,gBACA,0BACA,kBACA,qBACA,2BACA,0BACA,+BACA,gCACA,4BACA,oBACA,2BACA,wBACA,iCACA,sBACA,qBACA,iBACA,mBACA,qBACA,gBACA,eACA,iBACA,cACA,iCAEAC,OAAA,CAAA,iBAAA,gBAAA,oBAAA,mBAAA,SAAAC,eAAAC,cAAAC,kBAAAC,kBAIAD,kBAAAE,WAAA,IAEAJ,eACAK,KAAA,IACA,CACAC,YAAAH,iBAAAI,YAAA,SACAC,WAAA,YACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,0BAKAP,KAAA,uCACA,CACAC,YAAA,oEACAE,WAAA,sBAGAK,UAAA,CACAP,YAAAH,iBAAAI,YAAA,QACAC,WAAA,WACAC,QAAA,CACAC,aAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,wBAMAX,cAAAa,aAAAC,KAAA,mBACAd,cAAAa,aAAAC,KAAA,sBAKAC,QAAA,kBAAA,CAAA,aAAA,KAAA,YAAA,kBAAA,SAAAC,WAAAC,GAAAC,UAAAR,iBAGA,MAAA,CAEAS,QAAA,SAAArB,QAkBA,OAfAA,OAAAsB,QAAAtB,OAAAsB,SAAA,GAGAJ,WAAAK,WAAAL,WAAAK,UAAAC,qBACAxB,OAAAsB,QAAA,uBAAAJ,WAAAK,UAAAE,OACAzB,OAAAsB,QAAA,wBAAAJ,WAAAK,UAAAG,QACA1B,OAAAsB,QAAA,yBAAAJ,WAAAK,UAAAI,SACA3B,OAAAsB,QAAA,+BAAAJ,WAAAK,UAAAK,mBACA5B,OAAAsB,QAAA,gCAAAJ,WAAAK,UAAAM,oBACA7B,OAAAsB,QAAA,iCAAAJ,WAAAK,UAAAO,sBAIAZ,WAAAa,YAAA,EAEA/B,QAAAmB,GAAAb,KAAAN,SAGAgC,SAAA,SAAAA,UAaA,OAVAZ,UAAAa,IAAA,SAIAC,gBAAAC,OAAA,IAAA,IAAAjB,WAAAkB,mBAGAlB,WAAAa,YAAA,GAGAC,UAAAb,GAAAb,KAAA0B,WAIAK,cAAA,SAAAL,UAEA,IAAArB,aAAAC,gBAAAC,gCAAA,mBAqBA,OAlBA,MAFAmB,SAAAM,SAGAN,SAAAO,KAAAC,kBAAAR,SAAAO,KAAAC,iBAAAC,MAAA,2BAEAT,SAAAO,KAAAC,iBAAAC,MAAA,mBACAvB,WAAAwB,SAAAC,KAAA,MAAAhC,aAAAiC,mBAAA,cAAA,YAAAjC,aAAAiC,mBAAA,sBAAA,SAEA1B,WAAAwB,SAAAC,KAAA,MAAAhC,aAAAiC,mBAAA,cAAA,YAAAjC,aAAAiC,mBAAA,yBAAA,UAGAZ,SAAAO,KAAAC,kBAAAR,SAAAO,KAAAC,iBAAAC,MAAA,oBAEAvB,WAAAwB,SAAAC,KAAAhC,aAAAiC,mBAAA,sBAAA,UAKA1B,WAAAa,YAAA,EAEAZ,GAAA0B,OAAAb,eAOAvB,WAAA,YAAA,CAAA,SAAA,QAAA,KAAA,aAAA,iBAAA,aAAA,YAAA,oBAAA,eAAA,UAAA,iBAAA,oBAAA,WAAA,UAAA,cAAA,qBAAA,iBAAA,mBAAA,kBAAA,iBAAA,cAAA,SAAAqC,OAAAC,MAAA5B,GAAAD,WAAA8B,eAAAC,WAAAC,UACAC,kBAAAC,mBAAAC,QAAAC,eAAAC,kBAAAC,SAAAC,QAAAC,YACAC,mBAAAC,eAAAC,iBAAAjD,gBAAAkD,eAAAC,0BAIA,IAAApD,aAAAC,gBAAAC,gCAAA,mBACAmD,sBAAApD,gBAAAC,gCAAA,4BAyQA,SAAAoD,cAAAC,KAEAC,OAAAC,KAAAF,IAAAvD,aAAAiC,mBAAA,kBAAA,kGA1QAE,OAAAuB,WAAA,WAEAvB,OAAAwB,QAAAxB,OAAAwB,SAAA,CACAC,QAAA,GACAC,QAAA,GACAC,UAAA,GACAC,UAAA,GACAC,YAAA,EACAC,YAAA,EACAC,WAAA,GACAC,gBAAA,GACAC,OAAA,IAGAjF,QAAAkF,yBAAA9D,WAAAK,aAEAL,WAAAK,UAAA,GACAL,WAAAK,UAAAE,OAAA,GACAP,WAAAK,UAAA0D,SAAA,GACA/D,WAAAK,UAAAG,SAAA,EACAR,WAAAK,UAAAI,SAAA,EACAT,WAAAK,UAAAC,oBAAA,EACAN,WAAAK,UAAAK,mBAAA,GACAV,WAAAK,UAAAM,qBAAA,EACAX,WAAAK,UAAAO,qBAAA,EACAZ,WAAAK,UAAA2D,6BAAAC,IAIA,IAAAjC,UAAAkC,OAAAC,OAAA,sDAEA,GAAAnC,UAAAkC,OAAAE,QAAA,eAGAxC,OAAAyC,sBAGAzC,OAAAwB,QAAAK,iBAAAQ,IAAArC,OAAAwB,QAAAE,cAEAW,IAAAlC,WAAAuC,2BACA1C,OAAA2C,WAKA3C,OAAA4C,uBAAA,WAEA,OAAA1C,eAAA2C,aAGA7C,OAAA2C,OAAA,WAEAvE,WAAA0E,gBAAA,EACA9C,OAAA+C,YACA/C,OAAAgD,KAAA,MAGAhD,OAAA+C,UAAA,WAEAE,QAAAC,MAAA,eAAA,MACAD,QAAAC,MAAA,YAAA,MACAD,QAAAC,MAAA,eAAA,MACAD,QAAAC,MAAA,cAAA,MACA9E,WAAAkB,iBAAA,EACAlB,WAAAK,UAAA,GACAL,WAAAK,UAAAE,OAAA,GACAP,WAAAK,UAAA0D,SAAA,GACA/D,WAAAK,UAAA0E,YAAA,EACAnD,OAAAoD,aAAA,GACApD,OAAAwB,QAAA,IAGAxB,OAAAqD,cAAAhD,kBACAL,OAAAsD,aAAAhD,mBACAN,OAAAoD,aAAA,CACAG,aAAA,EACAC,iBAAA,EACAC,SAAA,GACAC,aAAA,IAIA1D,OAAA2D,YAAA,aAMA3D,OAAAyC,oBAAA,WAEAhC,kBAAAc,aAAAqC,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAS,OAAAxC,KAAAoE,cACA7D,OAAAwB,QAAAsC,gBAAArE,KAAAsE,gBACA/D,OAAAwB,QAAAwC,cAAAvE,KAAAuE,cACAhE,OAAAwB,QAAAyC,iBAAAxE,KAAAyE,iBACAlE,OAAAwB,QAAA2C,YAAA1E,KAAA2E,QACApE,OAAAwB,QAAA6C,mBAAA5E,KAAA6E,mBAEAtE,OAAAwB,QAAAK,aAEA7B,OAAAwB,QAAA+C,iBAAA9E,KAAA8E,iBACAvE,OAAAwB,QAAAQ,gBAAAvC,KAAA+E,oBAGA,SAAAxE,OAAAwB,QAAAS,OAAAwC,oBAAAzE,OAAAwB,QAAAS,OAAAyC,mBAAAC,WAEAC,GAAA,SAAA5E,OAAAwB,QAAAS,OAAAyC,mBAAA,WAKA1E,OAAA6E,gCAAA,WAEApE,kBAAAqE,yBAAAlB,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAS,OAAAxC,KAAAoE,cACA7D,OAAAwB,QAAAsC,gBAAArE,KAAAsE,gBACA/D,OAAAwB,QAAAyC,iBAAAxE,KAAAyE,iBACAlE,OAAAwB,QAAA2C,YAAA1E,KAAA2E,QACApE,OAAAwB,QAAA6C,mBAAA5E,KAAA6E,mBACAtE,OAAAwB,QAAAK,aAEA7B,OAAAwB,QAAA+C,iBAAA9E,KAAA8E,iBACAvE,OAAAwB,QAAAQ,gBAAAvC,KAAA+E,uBAMAxE,OAAA+E,qBAAA,WACA/E,OAAAwB,QAAAE,QAAAvB,WAAA6E,aACAhI,QAAAkF,yBAAAlC,OAAAwB,QAAAE,WACA1E,QAAAkF,yBAAAlC,OAAAwB,QAAAE,QAAAuD,qBACAjF,OAAAwB,QAAAC,QAAAzB,OAAAwB,QAAAE,QAAAuD,kBACAjF,OAAAwB,QAAAM,WAAA9B,OAAAwB,QAAAE,QAAAuD,kBAAAC,IACAzE,kBAAA0E,gBAAAnF,OAAAwB,QAAAE,QAAAuD,kBAAAG,eAGApI,QAAAkF,yBAAAlC,OAAAwB,QAAA6D,sBACArF,OAAAwB,QAAA6D,mBAAAlF,WAAAmF,2BACAtI,QAAAkF,yBAAAlC,OAAAwB,QAAA6D,sBACArF,OAAAwB,QAAAE,QAAA6D,qBAAAvF,OAAAwB,QAAAE,QAAA8D,kBAAAxF,OAAAwB,QAAA6D,qBAEArF,OAAAwB,QAAAQ,gBAAAhC,OAAAwB,QAAAE,QAAA+D,oBACAzF,OAAAwB,QAAAK,YAAA,IAIA7B,OAAA0F,uBAAA,YACA1I,QAAAkF,yBAAAlC,OAAAwB,QAAAE,UACA1E,QAAAkF,yBAAAlC,OAAAwB,QAAAE,QAAAuD,oBACAjI,QAAAkF,yBAAAlC,OAAAwB,QAAAE,QAAA6D,wBACAvF,OAAA+E,wBAIA/E,OAAA2F,WAAA,SAAAC,MAAAC,UAEA7F,OAAAoD,aAAAM,aAAAoC,WAAApF,SAAA,WAEAV,OAAAoD,aAAAM,aAAAqC,QAAAH,MACA5F,OAAAoD,aAAAM,aAAAoC,gBAAAzD,GACA,IAGArC,OAAAgG,cAAA,SAAAlE,YAEA9B,OAAAwB,QAAAM,WAAAA,WACArB,kBAAAuF,cAAAlE,YAAA8B,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAC,QAAAhC,KAAAwG,cAIAjG,OAAAkG,uBAAA,WAEAzF,kBAAAyF,yBAAAtC,KAAA,SAAAnE,UAMAO,OAAAmG,4BAAA,SAAAP,MAAAQ,SAIA,GAFApG,OAAA0F,0BAEAU,QACA,CACA,IAAApG,OAAAwB,QAAAE,QAAA,OAAA,EACA,IAAA1B,OAAAwB,QAAAE,QAAA6D,qBAAA,OAAA,EACAa,QAAApG,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAGA,IADA,IAAA/C,aAAA8C,QAAAE,4BACAC,EAAA,EAAAA,EAAAX,MAAAvG,OAAAkH,IAIA,IAFA,IAAAC,gBAAAxG,OAAAyG,4BAAAb,MAAAW,IAEAG,EAAA,EAAAA,EAAApD,aAAAjE,OAAAqH,IAGA,GAAApD,aAAAoD,GAAAC,WAAAf,MAAAW,IACAC,iBAAAlD,aAAAoD,GAAAE,SACA,OAAA,EAEA,OAAA,GAGA5G,OAAA6G,2BAAA,SAAAjB,MAAAQ,SAIA,GAFApG,OAAA0F,0BAEAU,QACA,CACA,IAAApG,OAAAwB,QAAAE,QAAA,OAAA,EACA,IAAA1B,OAAAwB,QAAAE,QAAA6D,qBAAA,OAAA,EACAa,QAAApG,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAIA,IAAArG,OAAAyG,4BAAAb,OACA,OAAA,EAEA,GAAAQ,QAAAU,gBAAA,OAAA,EAGA,IADA,IAAAxD,aAAA8C,QAAAE,4BACAI,EAAA,EAAAA,EAAApD,aAAAjE,OAAAqH,IACA,GAAApD,aAAAoD,GAAAC,WAAAf,MAEA,OAAAtC,aAAAoD,GAAAE,SAEA,OAAA,GAGA5G,OAAAyG,4BAAA,SAAAb,OAEA,IAAAmB,gBAAA/G,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SACAC,WAAA,IAAAF,gBAAAG,iBACAC,WAAA,IAAAJ,gBAAAK,iBACAC,SAAA,IAAAN,gBAAAO,eACAC,YAAA,IAAAR,gBAAAS,kBACAC,SAAA,OAAAV,gBAAAW,iBAAA,IAAAX,gBAAAW,gBAGA,OAAA7G,mBAAA8G,wBAAA/B,MAAAqB,WAAAE,WAAAE,SAAAE,YAAAE,SAAAV,kBAGA/G,OAAA4H,gBAAA,SAAAC,KAAAC,IAAAC,MAAAC,SAUA/G,YAAAgH,kBAAAC,KAAAC,UARA,CACAC,eAAA,EACAC,KAAAR,KACA3C,IAAA4C,IACAQ,MAAAP,MACAQ,QAAAP,WAIApE,KAAA,SAAA4E,KACApH,IAAAH,YAAAwH,UAAAD,KACAnH,OAAAC,KAAAF,IAAA,SAAA,8DASApB,OAAA0I,SAAA,SAAAC,SAEA1H,YAAA2H,WAAAD,SACA/E,KAAA,SAAA4E,MACArH,cAAAF,YAAAwH,UAAAD,UAIAxI,OAAA6I,cAAA,SAAAF,QAAAG,eAEAA,eAAA,EAAAA,cAAAzJ,OAKAuB,YAAAmI,QAHA,kBAAAJ,QACA,iBAAAG,eAEAlF,KAAA,SAAAnE,MAGA0B,cADA,gCAAA6H,mBAAAvJ,MAAA,MAAAuJ,mBAAA9I,eAAA2C,gBAKA7C,OAAA0I,SAAAC,UAGA3I,OAAAiJ,eAAA,SAAAC,gBAGA/H,cADA,wBAAA+H,eAAA,MAAAF,mBAAA9I,eAAA2C,eAIA7C,OAAAmJ,qBAAA,SAAAC,YAEA,IAAAtH,WAAA9B,OAAAwB,SAAAxB,OAAAwB,QAAAM,WAAA9B,OAAAwB,QAAAM,WAAA,EAEArB,kBAAA0I,qBAAArH,WAAAsH,YAAAxF,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAO,WAAAtC,QAKAO,OAAAmJ,qBAAA,GAEAnJ,OAAAqJ,IAAA,uBAAA,SAAAC,MAAAC,KAAAC,0BAEA,EAAApJ,UAAAkC,OAAAC,OAAA,yEAGAvF,QAAAkF,yBAAAlC,OAAAwB,UACAxE,QAAAkF,yBAAA/B,WAAAuC,6BACA1C,OAAAgD,KAAA,KAGAhD,OAAA0F,yBAEA6D,MAAAC,yBAAAxJ,OAAAwB,QAAAE,UAEA6H,KAAA/G,QAAA,wBAAA,GACA+G,KAAA/G,QAAA,gBAAA,GACAgH,yBAAA,GAAAA,wBAAAhH,QAAA,gBACA1B,eAAA2I,eAAAzJ,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACA3J,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SACAzH,eAAA8I,cAAA5J,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACA3J,OAAAwB,QAAAE,QAAA6D,qBAAAgD,UAGAgB,KAAA/G,QAAA,kBAAA,GACA+G,KAAA/G,QAAA,uBAAA,GACA+G,KAAA/G,QAAA,4BAAA,GACA+G,KAAA/G,QAAA,6BAAA,GACA+G,KAAA/G,QAAA,oBAAA,GACAgH,yBAAA,GAAAA,wBAAAhH,QAAA,gBAEAxC,OAAAwB,QAAAG,WACA3B,OAAAwB,QAAAG,UAAAkI,QACAC,wBACA,CACAC,QAAA/J,OAAAwB,QAAAG,UAAAkI,MAAAE,QACAC,cAAAhK,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,GACAL,aAAA3J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACAO,iBAAA,EACAC,qBAAA,GAEApJ,iBAAAmJ,gBAAAJ,8BAIA9J,OAAAqJ,IAAA,oBAAA,SAAAC,MAAAE,QAAAY,SAAAC,WAMA,wCAJAA,WAKArK,OAAAgD,KAAA,UACAhD,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,sBAAA,UAKAE,OAAAJ,SAAAC,KAAA,eAAA,WAIAG,OAAAiK,cAAA,SAAAK,MAAAC,UAEA,GAAA,iBAAA,QAAAD,MAAA3F,UAAA,CAEA,IAAA6F,QAAAhK,eAAAiK,iBACAC,OAAA,IAAAC,KAcA,MAbA,kBAAAC,OAAAC,UAAAC,SAAAC,KAAAT,QAEAA,MAAAA,MAAAU,OAAA,EAAA,IACAN,OAAA,IAAAC,KAAAA,KAAAM,MAAAX,MAAAY,QAAA,KAAA,KAAAA,QAAA,KAAA,OACAC,MAAAT,OAAAU,aAEAV,OAAA,IAAAC,OAIAD,OAAAJ,MAGA,OAAAE,SAAAD,SAEAG,OAAAW,cAAA,KAAA,KAAAX,OAAAY,WAAA,IAAAC,OAAA,GAAA,KAAA,IAAAb,OAAAc,WAAAD,OAAA,IADA,KAAAb,OAAAY,WAAA,IAAAC,OAAA,GAAA,KAAA,IAAAb,OAAAc,WAAAD,OAAA,GAAA,IAAAb,OAAAW,gBAIArL,OAAAyL,WAAA,SAAAnB,OAEA,OAAA3J,QAAA,OAAAA,CAAA2J,MAAA,eAGAtK,OAAA0L,eAAA,SAAApB,OAEA,OAAA3J,QAAA,OAAAA,CAAA2J,MAAA,uBAGAtK,OAAA2L,cAAA,SAAAC,OAAAC,MAEAC,OAAA,IAAAnB,KAAAiB,QAEA,OADAE,OAAAC,QAAAD,OAAAN,UAAAK,MACAC,QAGAE,mBAAA5N,WAAAiL,IAAA,gBAAA,SAAAC,MAAA7J,MAEAO,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,WAEAL,KAAAwM,UAAAC,aAEAlP,QAAAmP,QAAA1M,KAAAwM,UAAAG,SAAA,SAAAC,MAEArM,OAAAJ,SAAAC,KAAAwM,KAAA,eAKArM,OAAAqJ,IAAA,WAAA2C,oBAEAM,mBAAAlO,WAAAiL,IAAA,eAAA,SAAAC,MAAA7J,MAEA,IAGA8M,kBAHA9M,KAAAwM,UAAAO,YAGAD,kBAAA1O,aAAAiC,mBAAA,oBAEA9C,QAAAmP,QAAA1M,KAAAwM,UAAAQ,OAAA,SAAAJ,OAEAA,OAAAE,kBACAvM,OAAA0M,cAGA1M,OAAAJ,UAHAC,KAAAwM,KAAA,YAOA5M,KAAAwM,UAAAC,aAEAlP,QAAAmP,QAAA1M,KAAAwM,UAAAG,SAAA,SAAAC,MAEArM,OAAAJ,SAAAC,KAAAwM,KAAA,eAKArM,OAAAqJ,IAAA,WAAAiD,oBAEAK,mBAAAvO,WAAAiL,IAAA,cAAA,SAAAuD,IAAAnN,QACAoN,OAAA,CAAAnN,iBAAAD,OAAAwM,UAAAvM,iBAAAoN,WAAArN,OAAAwM,UAAAc,YAEA/L,eAAAgM,UAAAH,QAAAjJ,KAAA,SAAAnE,MACAwN,QAAAC,IAAA,iEAIAlN,OAAAqJ,IAAA,WAAAsD,oBAEA3M,OAAAgD,KAAA,SAAAV,MAEAlC,UAAAkC,KAAAA,OAGAtC,OAAAmN,gBAAA,SAAAC,QAEAC,WAAA,WAEArN,OAAAsN,OAAA,WAEAC,EAAAH,QAAAI,WAEA,MAGAxN,OAAAyN,gBAAA,WAEA,OAAAzN,OAAAwB,QAAAE,QAAAuD,kBAAAyI,oBACA,MAAA1N,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAA2G,YACA,EAAA3N,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAC,sBACA7N,OAAA6G,2BAAA7G,OAAAsD,aAAAwK,+BACA9N,OAAA6G,2BAAA7G,OAAAsD,aAAAyK,wBAAA,EAAA/N,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAI,qBAGAhO,OAAAiO,YAAA,SAAAC,MAEAb,WAAA,WAEArN,OAAAsN,OAAAY,SACA,IAGAlO,OAAAmO,gBAAA,SAAAC,MAEA1N,SAAA,WAEA0N,KAAAC,eACAd,EAAA,YAAAe,YAAA,WACAf,EAAA,iBAAAe,YAAA,iBACA,IAGAtO,OAAAuO,gBAAA,SAAAC,KAAAC,MAAAC,aAEAC,YAAApB,EAAAlM,QAAAuN,cAAAF,YAGAC,YAFA,GAAAF,MAIAD,KAAAK,WAAA,CACAC,OAAAH,YACAI,YAAA,IAKAP,KAAAK,WAAA,CACAC,OAAA,UACAC,YAAA,KAKA/O,OAAAgP,uBAAA,WACAhP,OAAAiP,aAAA,CACAC,iBAAA,EACAC,UAAA,EACAC,UAAA,GACAC,SAAA,WACAC,SAAA,WACAC,QAAA,GACAC,OAAA,WACAC,OAAA,WACAC,UAAA,EACAC,aAAA,GACAC,QAAA,CACA,CAAAC,KAAA3O,sBAAApB,mBAAA,SAAA8F,MAAA,GACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,YAAA8F,MAAA,GACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,YAAA8F,MAAA,GACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,YAAA8F,MAAA,GACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,cAAA8F,MAAA,GACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,iBAAA8F,MAAA,GACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,kBAAA8F,MAAA,IACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,eAAA8F,MAAA,IACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,cAAA8F,MAAA,IACA,CAAAiK,KAAA3O,sBAAApB,mBAAA,WAAA8F,MAAA,KAEAkK,OAAA,EACAC,kBAAA,EACAC,aAAA,EACAC,UAAA,GAGAjQ,OAAAkQ,yBAAA,GAGAlQ,OAAAqJ,IAAA,qBAAA,WACA3I,SAAA,WAGA,IACAyP,0BADAnQ,OAAAoQ,+BACAD,0BAAAnQ,OAAAqQ,OAAA9C,EAAA,uCAAA7M,SAAA,WACAyP,4BACArS,gBAAAwS,yBACAtQ,OAAAoQ,8BAAA,IACA,GAAA,IAKApQ,OAAAkQ,yBACAlQ,OAAAgP,yBAGAhP,OAAAuQ,WAAA,CACAC,SAAA,EACAC,MAAA,GACAC,KAAA,GACAC,aAAA,EACAC,YAAA/S,aAAAiC,mBAAA,SACA+Q,cAAAhT,aAAAiC,mBAAA,OACAD,KAAA,SAAA4Q,MAAAC,MAEA1Q,OAAAuQ,WAAAE,MAAAA,MACAzQ,OAAAuQ,WAAAG,KAAAA,KACA1Q,OAAAuQ,WAAAI,aAAA,EACA3Q,OAAAuQ,WAAAC,SAAA,GAEAM,KAAA,WAEA9Q,OAAAuQ,WAAAC,SAAA,GAEAO,eAAA,WAEA/Q,OAAAuQ,WAAAE,MAAA5S,aAAAiC,mBAAA,kBACAE,OAAAuQ,WAAAG,KAAA7S,aAAAiC,mBAAA,sBAAA,QACAjC,aAAAiC,mBAAA,iBACAE,OAAAuQ,WAAAI,aAAA,EACA3Q,OAAAuQ,WAAAC,SAAA,GAEAQ,eAAA,WACAhR,OAAAuQ,WAAAE,MAAA5S,aAAAiC,mBAAA,kBACAE,OAAAuQ,WAAAG,KAAA7S,aAAAiC,mBAAA,yBAAA,QACAjC,aAAAiC,mBAAA,wBACAE,OAAAuQ,WAAAI,aAAA,EACA3Q,OAAAuQ,WAAAC,SAAA,GAEAS,cAAA,SAAAC,MAEAlR,OAAAuQ,WAAAE,MAAAS,KACAlR,OAAAuQ,WAAAG,KAAA7S,aAAAiC,mBAAA,qBACAE,OAAAuQ,WAAAI,aAAA,EACA3Q,OAAAuQ,WAAAC,SAAA,GAEAW,QAAA,SAAAT,KAAAU,MAAAC,KAAAZ,OAEAzQ,OAAAuQ,WAAAE,MAAAA,OAAA5S,aAAAiC,mBAAA,WACAE,OAAAuQ,WAAAK,YAAA/S,aAAAiC,mBAAA,MACAE,OAAAuQ,WAAAM,cAAAhT,aAAAiC,mBAAA,OACAE,OAAAuQ,WAAAG,KAAAA,KACA1Q,OAAAuQ,WAAAe,WAAA,WAEAtR,OAAAuQ,WAAAC,SAAA,EACAxT,QAAAuU,YAAAH,QACAA,SAEApR,OAAAuQ,WAAAiB,UAAA,WAEAxR,OAAAuQ,WAAAC,SAAA,EACAxT,QAAAuU,YAAAF,OACAA,QAEArR,OAAAuQ,WAAAI,aAAA,EACA3Q,OAAAuQ,WAAAC,SAAA,GAEAgB,UAAA,KACAF,WAAA,OAEA,QAGAG,UAAA,eAAA,CAAA,WACA,MAAA,CACAC,SAAA,IACAC,QAAA,UACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAApU,YACAA,WAAAqU,YAAA9T,KAAA,SAAA+T,YACA,OAAAC,OAAAD,cAEAtU,WAAAwU,SAAAjU,KAAA,SAAAkU,WACA,MAAA,GAAAA,iBC/0BA,IAAAC,uBAAA,SAAAP,QAAAQ,MAEA,OAAA/E,EAAA,IAAAuE,SAAA,GAAAS,WAAAC,aAAAF,MAAA1M,OCAA,SAAA6M,mBAAAC,UAEAC,KAAAvR,IAAAsR,SAAAtR,IACAuR,KAAAlT,KAAAiT,SAAAjT,KACAkT,KAAAC,OAAAF,SAAAE,OACAD,KAAAE,OAAAH,SAAAG,OACAF,KAAAG,aAAAJ,SAAAI,aACAH,KAAAd,MAAAa,SAAAb,MACAc,KAAAI,gBAAAL,SAAAK,kBAAA,EAEA,SAAAC,0BAAAvT,MAEAkT,KAAAM,QAAAxT,KAAAwT,QACAN,KAAAO,WAAAzT,KAAA0T,cACAR,KAAAS,WAAA3T,KAAA2T,WACAT,KAAAlG,OAAAhN,KAAA4T,eAAA,GACAV,KAAAvG,SAAA3M,KAAA6T,iBAAA,GACAX,KAAAnG,UAAA,EAAAmG,KAAAlG,OAAApN,OACAsT,KAAAzG,YAAA,EAAAyG,KAAAvG,SAAA/M,OACAsT,KAAAY,WAAA9T,KAAA8T,WACAZ,KAAAa,YAAA/T,KAAA+T,YACAb,KAAAc,KAAAhU,KAAAgU,KDlBAzW,QAAAC,OAAA,iBAAA,CAAA,iBACAC,OAAA,CAAA,WAAA,mBAAA,SAAAwW,SAAApW,kBACAoW,SAAAC,SAAA,YAAArW,qBAEAK,WAAA,mBAAA,CAAA,SAAA,SAAAqC,YAIAyR,UAAA,eAAA,CAAA,YAAA,SAAAmC,WAEA,MAAA,CACAlC,SAAA,IACAG,OAAA,EACAlU,WAAA,CAAA,SAAA,aAAA,UAAA,kBAAA,SAAAqC,OAAA5B,WAAAuC,QAAA7C,iBAEA,IAAAD,aAAAC,gBAAAC,gCAAA,4BACAiC,OAAA6T,iBAAA,WAGA7T,OAAAiP,eACAjP,OAAAiP,aAAA,IAIAjP,OAAAiP,aAAAW,QAAA,IACA,IAAA5P,OAAAiP,aAAAe,aACAhQ,OAAAiP,aAAAW,QAAA1R,KACA,CAAA2R,KAAAhS,aAAAiC,mBAAA,WAAA8F,MAAA,KAEA5F,OAAAiP,aAAAW,QAAA1R,KACA,CAAA2R,KAAAhS,aAAAiC,mBAAA,SAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,YAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,YAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,YAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,cAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,iBAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,kBAAA8F,MAAA,IACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,eAAA8F,MAAA,IACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,cAAA8F,MAAA,KAEA5F,OAAAiP,aAAAI,SAAA,WACArP,OAAAiP,aAAAK,SAAA,WACAtP,OAAAiP,aAAAO,OAAA,WACAxP,OAAAiP,aAAAQ,OAAA,WACAzP,OAAAiP,aAAAgB,UAAA,EACAjQ,OAAAiP,aAAAe,aAAA,EAGAhQ,OAAAiP,aAAAc,iBACA/P,OAAAiP,aAAAc,kBAAA,GAIA/P,OAAAiP,aAAAC,iBAAA,EACAlP,OAAAiP,aAAAE,UAAA,EACAnP,OAAAiP,aAAAG,UAAA,GACApP,OAAAiP,aAAAM,QAAA,GACAvP,OAAAiP,aAAAS,UAAA,EACA1P,OAAAiP,aAAAU,aAAA,GACA3P,OAAAiP,aAAAa,OAAA,GAEA9P,OAAA8T,YAGA9T,OAAA+T,wBAAA,WAEA/T,OAAAiP,aAAAa,MAAAnF,KAAAM,MAAAjL,OAAAiP,aAAAG,YAAAzE,KAAAM,MAAAjL,OAAAiP,aAAAM,SACAvP,OAAAiP,aAAAa,OAGA9P,OAAAJ,SAAAC,KAAAwS,uBAAA,uBAAA,oCAAA,UAIArS,OAAA8T,SAAA,WAEA,IAAAE,MAAA,IAAArJ,KACAsJ,MAAA,IAAAtJ,MAAAU,cAEA6I,OAAA,IAAAvJ,MAAAW,WACAM,MAAA,IAAAjB,MAAAa,UACAK,MAAA,IAAAlB,MAAAwJ,SAEA,OAAAC,SAAApU,OAAAiP,aAAAE,UAAA,KAEA,KAAA,EACA,KAAA,GACAnP,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAAqT,MAAA,cACAhU,OAAAiP,aAAAM,QAAAvP,OAAAiP,aAAAG,UACA,MACA,KAAA,EACApP,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAAtI,KAAA,GAAA,cACA5L,OAAAiP,aAAAM,QAAAvP,OAAAiP,aAAAG,UACA,MACA,KAAA,EACApP,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAAtI,KAAA,GAAA,cACA5L,OAAAiP,aAAAM,QAAAvP,OAAAiP,aAAAG,UACA,MACA,KAAA,EACApP,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAAtI,KAAAC,MAAA,cACA7L,OAAAiP,aAAAM,QAAA5O,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAAtI,KAAAC,KAAA,GAAA,cACA,MACA,KAAA,EACA7L,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAA,GAAA,cACAlU,OAAAiP,aAAAM,QAAA5O,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAA,EAAA,GAAA,cACA,MACA,KAAA,EACAlU,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAA,EAAA,GAAA,cACAjU,OAAAiP,aAAAM,QAAA5O,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAA,GAAA,IAAA,cACA,MACA,KAAA,EACAjU,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAAtI,KAAAC,KAAA,GAAA,cACA7L,OAAAiP,aAAAM,QAAA5O,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAAtI,KAAAC,KAAA,GAAA,cACA,MACA,KAAA,EACA7L,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAA,EAAA,GAAA,cACAlU,OAAAiP,aAAAM,QAAA5O,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAA,GAAA,cACA,MACA,KAAA,EACAlU,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAA,EAAA,EAAA,GAAA,cACAjU,OAAAiP,aAAAM,QAAA5O,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAA,EAAA,GAAA,IAAA,cACA,MACA,KAAA,EACA,KAAA,GACAjU,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAAtI,KAAA,GAAA,cACA5L,OAAAiP,aAAAM,QAAA5O,QAAA,OAAAA,CAAA,IAAAgK,KAAA,cACA,MACA,KAAA,GACA3K,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAAtI,KAAA,IAAA,cACA5L,OAAAiP,aAAAM,QAAA5O,QAAA,OAAAA,CAAA,IAAAgK,KAAA,cACA,MACA,KAAA,GACA3K,OAAAiP,aAAAS,UAAA1P,OAAAiP,aAAAS,UAAA1P,OAAAiP,aAAAU,aAAA3P,OAAAiP,aAAAU,aAAA3P,OAAAiP,aAAAS,UACA1P,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAA,IAAAgK,KAAAsJ,KAAAC,MAAAtI,KAAA5L,OAAAiP,aAAAS,UAAA,GAAA,cACA1P,OAAAiP,aAAAM,QAAA5O,QAAA,OAAAA,CAAA,IAAAgK,KAAA,cACA,MACA,KAAA,GACA3K,OAAAiP,aAAAG,UAAAzO,QAAA,OAAAA,CAAA,IAAAgK,KAAA,KAAA,EAAA,GAAA,cACA3K,OAAAiP,aAAAM,QAAA5O,QAAA,OAAAA,CAAA,IAAAgK,KAAA,KAAA,EAAA,GAAA,kBASAlN,YAAAmW,UAAAlW,YAAA,oBE9JAV,QAAAC,OAAA,cAAA,CAAA,aAAA,eAAA,oBAAA,oBACAU,WAAA,YAAA,CAAA,SAAA,YAAA,kBAAA,SAAAqC,OAAAqU,UAAAvW,iBAEA,IAAAD,aAAAC,gBAAAC,gCAAA,mBACA,SAAAuW,QAAAC,GAAAC,GAAAC,GAEA9B,KAAA+B,iBAAAH,IAAA,EACA5B,KAAAgC,YAAAH,IAAA,GACA7B,KAAAiC,iBAAAH,GAAA,GACA9B,KAAAkC,mBAAA7U,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAnB,KAAA,EAGAlF,OAAAwB,QAAAsT,oBAAA,EAEA9U,OAAAqQ,OAAA,6BAAA,WAEArQ,OAAAwB,QAAAsT,qBAEA9U,OAAA+U,QAAA,IAAAT,QAAAtU,OAAAgV,gBAAA,GAAAhV,OAAAgV,gBAAA,GAAA9P,IAAA,IACAlF,OAAAmJ,qBAAA,MAIAnJ,OAAAuB,WAAA,WAEAvB,OAAAgV,gBAAA,GACAhV,OAAAiV,cAAA,EAEAZ,UAAAa,uBAAAtR,KAAA,SAAAnE,MAEAO,OAAAgV,gBAAAvV,KAAAuV,mBAIAhV,OAAAmV,QAAAC,YAAA,YAkBA,WAEA,IAAAtF,OAAA,EAEA,EAAA9P,OAAAgV,gBAAA3V,QAAAW,OAAA+U,QAAAL,iBAAAW,WAAA,IAEAvF,OAAA,GAGA9P,OAAAgV,gBAAA3V,QAAA,GAAAW,OAAA+U,QAAAJ,YAAAhQ,YAEAmL,OAAA,GAGA9P,OAAA+U,QAAAH,iBAAAjQ,YAEAmL,OAAA,GAIA,OADA9P,OAAAiV,cAAAnF,MACAA,MApCAwF,IAGAjB,UAAAkB,YAAAvV,OAAA+U,SAAAnR,KACA,SAAAnE,MAEAA,KAAA+V,aAEAxV,OAAAwB,QAAAsT,oBAAA,EACA9U,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,eAAA,YAGAE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,kBAAA,eChDA9C,QAAAC,OAAA,cAAA,CAAA,aAAA,eAAA,oBAAA,oBACAC,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBAEAH,eAAAK,KAAA,oBACA,CACAC,YAAAH,iBAAAI,YAAA,OACAC,WAAA,iBAGAH,KAAA,yBACA,CACAC,YAAAH,iBAAAI,YAAA,OACAC,WAAA,iBAGAH,KAAA,0BACA,CACAC,YAAAH,iBAAAI,YAAA,OACAC,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,iCAMAJ,WAAA,uBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,gBAAA,UAAA,SAAAqC,OAAAC,MAAA5B,GAAAoX,aAAAC,cAAA/U,sBAGAX,OAAAuB,WAAA,WAEA,IAeAkC,SAfAzD,OAAAoD,aAAAM,aAAAqC,SAAA,IAAA/F,OAAAoD,aAAAM,aAAAqC,QAAA1G,UAEAsW,SAAAhV,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAA6D,qBAAAqQ,WAAAC,WAAA,CAAAC,KAAAL,aAAAM,SAAA,MAGA/V,OAAAoD,aAAAG,aAAAoS,SAAAzQ,MAEAa,SAAApF,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAA6D,qBAAAqQ,WAAAI,QAAA,CACAC,UAAAjW,OAAAoD,aAAAG,aACAuS,KAAAL,aAAAS,MACA,MAGAlW,OAAAoD,aAAAI,gBAAAuC,SAAAb,MAEAzB,SAAA9C,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAA6D,qBAAAqQ,WAAAO,SAAA,CACAF,UAAAjW,OAAAoD,aAAAI,gBACAsS,KAAAL,aAAAW,OACA,MAGApW,OAAAoD,aAAAM,aAAAqC,QAAAtC,SAAAyB,OAKAlF,OAAAqW,oBAAA,SAAAC,KAEAtW,OAAAoD,aAAAM,aAAAqC,QAAAuQ,QAGA3Y,WAAA,eAAA,CAAA,SAAA,QAAA,KAAA,eAAA,gBAAA,UAAA,YAAA,SAAAqC,OAAAC,MAAA5B,GAAAoX,aAAAC,cAAA/U,QAAAiT,wBAGA5T,OAAAoD,aAAAmT,WAAA,GACAvW,OAAAoD,aAAAoT,cAAA,GACAxW,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAK,SAAA,GACAzD,OAAAoD,aAAAqT,SAAAhB,aAAAM,OACA/V,OAAAoD,aAAAsT,YAAAjB,aAAAS,IACA,IAAAnQ,SAAA,GACA/F,OAAAoD,aAAAsT,aAUA3Q,SAAApF,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAA6D,qBAAAqQ,WAAAI,QAAA,CACAC,UAAAjW,OAAAoD,aAAAG,aACAuS,KAAA9V,OAAAoD,aAAAsT,cACA,MAGA1W,OAAAoD,aAAAI,gBAAAuC,SAAAb,MAdAa,SAAApF,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAA6D,qBAAAqQ,WAAAI,QAAA,CAAAC,UAAAjW,OAAAoD,aAAAG,eAAA,MAGAvD,OAAAoD,aAAAsT,YAAA3Q,SAAA+P,KACA9V,OAAAoD,aAAAI,gBAAAuC,SAAAb,KAcAlF,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,oBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,SAAA,IAAA/F,OAAAoD,aAAAM,aAAAqC,QAAA1G,UAEAoE,SAAA9C,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAA6D,qBAAAqQ,WAAAO,SAAA,CAAAF,UAAAjW,OAAAoD,aAAAI,kBAAA,KAGAxD,OAAAgD,KAAA,gCAGAS,WAEAzD,OAAAoD,aAAAM,aAAAqC,QAAAtC,SAAAyB,IACAlF,OAAAgD,KAAA,QAAAyS,aAAAM,OAAA,IAAA/V,OAAAoD,aAAAsT,YAAA,IAAAjT,SAAAqS,QAIA9V,OAAA6P,KAAA,eAGAlS,WAAA,mBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,gBAAA,UAAA,kBAAA,YAAA,eAAA,SAAAqC,OAAAC,MAAA5B,GAAAoX,aAAAC,cAAA/U,QAAAgW,gBAAA/C,UAAA/V,2BAoFA,SAAA+Y,aAAAC,IAAAC,KAAAC,MAAAC,IAAAhP,QAAAiP,QAAAC,SAEAP,gBAAAQ,cAAAN,IAAAC,KAAAC,MAAAC,IAAAhP,QAAAiP,QAAAC,SAAAtT,KAAA,SAAAnE,MAEA,IAAAA,KAAAJ,QAMArC,QAAAmP,QAAA1M,KAAA,SAAAqS,SAEAA,QAAAsF,iBAAA,wBAAAtF,QAAAuF,QAAA,KAAA1W,QAAA,OAAAA,CAAAmR,QAAAuF,QAAA,gBAGArX,OAAAsX,MAAAC,kBAAA9X,OATAO,OAAAuQ,WAAAU,cAAAjR,OAAAoD,aAAAoU,UAAA3H,QAtFA7P,OAAAsX,MAAA,GACAtX,OAAAsX,MAAAG,cAAA,GACAzX,OAAAsX,MAAAI,qBAAA,CACAC,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAC,SAAAnF,KAAAmF,SAAAnF,KAAAoF,SAAA,IACAD,SAAAE,MAMAhY,OAAAiJ,eAAA6O,SAAAE,MAEAhY,OAAAsN,UANAtN,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,aAAAjC,aAAAiC,mBAAA,8BAQAmY,QAAA,CACA,CACAC,MAAA,mBACAzH,MAAA5S,aAAAiC,mBAAA,iBACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,QACAzH,MAAA5S,aAAAiC,mBAAA,eACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,cACAzH,MAAA5S,aAAAiC,mBAAA,eACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+BACAN,MAAA,KAGAO,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAAC,kBAAA,SAAA4B,IAEAnZ,OAAAsX,MAAA8B,gBAAA,IAAA9B,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA0Z,KAGAnZ,OAAAsX,MAAA8B,gBAAAC,OACArZ,OAAAsX,MAAAG,cAAAiB,WAAAjZ,KAAAO,OAAAsX,MAAA8B,gBAAA3Z,SAsBAO,OAAAuB,WAAA,WAEAvB,OAAA0F,yBAGA,IAAA1F,OAAAoD,aAAAG,cAEAvD,OAAAgD,KAAA,gCAGAhD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,oBAEAsC,OAAAoD,aAAAqT,SAAAhB,aAAAM,OACA/V,OAAAoD,aAAAsT,YAAAjB,aAAAS,IACAlW,OAAAoD,aAAAoU,YAAAxX,OAAAoD,aAAAoU,UAAA,IACAxX,OAAAoD,aAAAoU,UAAA8B,QAAA,IAAA3O,KAAA,KAAA,EAAA,GACA3K,OAAAoD,aAAAoU,UAAA3H,KAAA4F,aAAAW,KAGA,IAAAmD,SAAAvZ,OAAAwB,QAAAE,QAAA6D,qBAAAqQ,WAAAO,SAAAqD,KAAA,CAAA1D,KAAA9V,OAAAoD,aAAAoU,UAAA3H,OACA0J,UAAA,IAAAA,SAAAE,YAEA7C,aACA,GACA,GACA,aACA,aACA5W,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAkC,QACAgR,SAAAG,UACA1Z,OAAAwB,QAAAE,QAAA6D,qBAAAmE,cAMA1J,OAAAmV,QAAAxR,YAAA,SAAAgW,cAEA/C,aAAA5W,OAAAoD,aAAAM,aAAA8T,UAAAoC,gBACA5Z,OAAAoD,aAAAM,aAAA8T,UAAAqC,YACA7Z,OAAAiP,aAAAG,UACApP,OAAAiP,aAAAM,QACAvP,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAkC,QACAoR,aACA3Z,OAAAwB,QAAAE,QAAA6D,qBAAAmE,iBAIA/L,WAAA,sBAAA,CAAA,SAAA,SAAAqC,qBAGAA,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAA8T,YAAAxX,OAAAoD,aAAAM,aAAA8T,UAAA,IACAxX,OAAAoD,aAAAM,aAAA8T,UAAAoC,gBAAA,GACA5Z,OAAAoD,aAAAM,aAAA8T,UAAAqC,YAAA,OChRA7c,QAAAC,OAAA,WAAA,CAAA,eACAU,WAAA,iBAAA,CAAA,SAAA,aAAA,aAAA,UAAA,WAAA,SAAAqC,OAAA5B,WAAA+B,WAAAQ,QAAAD,uBAGAV,OAAA8Z,cAAA,EACA9Z,OAAA+Z,aAAA,EACA/Z,OAAAoD,aAAAG,aAAAvD,OAAAoD,aAAAG,cAAA,EACAvD,OAAAoD,aAAAI,gBAAAxD,OAAAoD,aAAAI,kBAAA,EAEAxD,OAAAga,gBAAA,SAAAzW,cAEAvD,OAAAoD,aAAAG,aAAAA,aACAvD,OAAAoD,aAAAI,iBAAA,GAEAxD,OAAAia,mBAAA,SAAAzW,iBAEAxD,OAAAoD,aAAAI,gBAAAA,iBAEAxD,OAAAka,sBAAA,SAAAC,eAGA,OADAna,OAAA0F,2BACA1F,OAAAwB,QAAAE,YACA1B,OAAAwB,QAAAE,QAAA6D,yBACAvF,OAAAwB,QAAAE,QAAA6D,sBAEAvF,OAAAmG,4BAAAgU,kBAIAna,OAAAoa,2BAAA,SAAAC,OAEAra,OAAAwB,QAAA6D,mBAAAgV,MACApX,QAAAC,MAAA,cAAAlD,OAAAwB,QAAA6D,oBACArF,OAAA8Z,cAAA,EAEA3Z,WAAAma,wBAAAta,OAAAwB,QAAAE,QAAA6Y,GAAAva,OAAAwB,QAAAM,YAAA8B,KAAA,SAAAnE,MAEAwD,QAAAC,MAAA,eAAAlD,OAAAwB,QAAAM,YACA9B,OAAA+E,uBACA/E,OAAAwB,QAAAE,QAAA6D,qBAAAvF,OAAAwB,QAAAE,QAAA8D,kBAAAxF,OAAAwB,QAAA6D,oBACAjH,WAAAoc,WAAA,sBAAA,IACAxa,OAAAgD,KAAA,YAIAhD,OAAAya,gBAAA,WAEAza,OAAA+Z,aAAA,EACA/Z,OAAA8Z,cAAA9Z,OAAA8Z,cAGA9Z,OAAA0a,SAAA,WAEA1a,OAAA+Z,aAAA,EACA/Z,OAAAgD,KAAA,iCAGAhD,OAAA2a,eAAA,WAEA3a,OAAA+Z,aAAA,EACA/Z,OAAAgD,KAAA,mCAGAhD,OAAA4a,gBAAA,WAEA5a,OAAA8Z,cAAA,EACA9Z,OAAA+Z,aAAA/Z,OAAA+Z,aAGA/Z,OAAA6a,YAAA,GACA7a,OAAA8a,cAAA,SAAAC,SAEA,IAAAC,SAAAC,SAAAC,eAAA,eAAAC,YACAC,UAAAH,SAAAC,eAAA,gBAAAC,YACAF,SAAAC,eAAA,UAAAH,SAAAM,MAAAlD,MAAA6C,SAAAI,UAAA,GAAA,KACAH,SAAAC,eAAA,UAAAH,SAAAM,MAAAC,UAAA,SAEAtb,OAAAub,WAAA,EACAvb,OAAAwb,SAAA7a,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAA6D,qBAAAqQ,WAAAI,QAAA,CAAAC,UAAA8E,UAAA1b,OAAA,EACAW,OAAAyb,WAAA9a,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAA6D,qBAAAqQ,WAAAI,QAAA,CAAAC,UAAA8E,UAAA1b,OAAA,EAEAW,OAAA6a,YAAAna,SAAA,WAEAV,OAAA0b,kBAAAX,UACA,MAGA/a,OAAA0b,kBAAA,SAAAX,SAOA,IALA,IAAAhV,QAAApF,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAA6D,qBAAAqQ,WAAAI,QAAA,CAAAC,UAAA8E,UAGAY,aAFAV,SAAAC,eAAA,eAAAC,YACAF,SAAAC,eAAA,gBAAAC,YACA,GACAS,iBAAA,EACArV,EAAA,EAAAA,EAAAR,QAAA1G,OAAAkH,IACA,CACA,IAAAsV,SAAA9V,QAAAQ,GACAsV,SAAAC,SAAA,EACA9b,OAAAsN,SACA/G,EAAAvG,OAAAub,WAEAM,SAAAC,SAAA,GAGAF,kBAAAX,SAAAC,eAAAW,SAAA3W,KAAAiW,YAAA,GACAU,SAAAC,QAAAF,iBAAAD,aACAE,SAAAC,UACA9b,OAAAwb,SAAAjV,MAGAvG,OAAA+b,aAAA,SAAAhB,SAEA,IAAA/a,OAAAub,eAEAvb,OAAAub,WACAvb,OAAA0b,kBAAAX,WAEA/a,OAAAgc,cAAA,SAAAjB,SAEA/a,OAAAub,aAAAvb,OAAAyb,aAEAzb,OAAAub,YAAA,EACAvb,OAAA0b,kBAAAX,cC1HA/d,QAAAC,OAAA,SAAA,CAAA,YAAA,eACAC,OAAA,CAAA,iBAAA,SAAAC,gBACA,IAAA8e,aAAA9e,eAAAK,KACA0e,eAAA,CACAxa,QAAA,SAAAvB,WAAAM,mBACA,OAAAN,WAAAgc,iBAAAvY,KAAA,WACA,IAAAwY,MAAAjc,WAAA6E,aAKA,OAJAhI,QAAAkF,yBAAAka,QACApf,QAAAkF,yBAAAka,MAAAnX,oBACAxE,kBAAA0E,gBAAAiX,MAAAnX,kBAAAG,cAEAgX,UAIAjf,eAAAK,KAAA,SAAA8E,KAAA+Z,OAGA,OAFAA,MAAAze,QAAAye,MAAAze,UAAAye,MAAAze,QAAA,IACAZ,QAAAsf,OAAAD,MAAAze,QAAAse,gBACAD,aAAAlR,KAAA5N,eAAAmF,KAAA+Z,WAGAnf,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBAEAH,eAAAK,KAAA,QACA,CACAC,YAAAH,iBAAAI,YAAA,QACAC,WAAA,WACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,4BAMAJ,WAAA,WAAA,CAAA,SAAA,aAAA,OAAA,KAAA,cAAA,eAAA,YAAA,mBAAA,SAAAqC,OAAA5B,sBAAAme,KAAAle,GAAAme,YAAA3e,aAAAuC,UAAAqc,+BAGAzc,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,iBAAA,EACAxD,OAAAoD,aAAAK,SAAA,GACAzD,OAAA0c,UAAA,GACA1c,OAAA2c,WAAA,EACA3c,OAAA0F,yBAGAtF,UAAAmC,OAAA,oBAAA,MAEAvC,OAAA4c,YAAA,SAAAC,YAAAC,cAEA9c,OAAA0c,UAAA3G,OAAA8G,YACA7c,OAAA0c,UAAAK,QAAAD,aACA9c,OAAA0c,UAAAM,OAAAhd,OAAA0c,UAAAM,OAGAhd,OAAAid,eAAA,WAEAjd,OAAAwB,QAAAE,SAAA1B,OAAAwB,QAAAE,QAAA6D,qBACAiX,YAAAU,wBAAAld,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA9F,KAAA,SAAAnE,MAEAO,OAAAmd,SAAA1d,KACAO,OAAAod,iBACApd,OAAAqd,qBAIArd,OAAA2C,UAGA2a,sBAAAlf,sBAAAiL,IAAA,sBAAA,SAAAC,MAAA7J,MAEAO,OAAAid,mBAGAjd,OAAAqJ,IAAA,WAAAiU,uBAEAtd,OAAAid,iBAEAjd,OAAAud,2BAAA,SAAAlR,MAEA,IAAArP,QAAAkF,yBAAAmK,QAAArP,QAAAkF,yBAAAmK,KAAAmR,UAGA,OAAAxd,OAAAmd,SAAAM,SAAAC,uBAAAF,UACA,KAAA,EACAxd,OAAA2d,WAAAtR,KACArM,OAAA2d,WAAA9d,MAAA,EACA,MAEA,KAAA,EACA,KAAA,EACA,EAAAwM,KAAAuR,WAAA5d,OAAA0I,SAAA2D,KAAAuR,YAEA/L,MAAAjS,SAAAC,KAAAhC,aAAAiC,mBAAA,wBAAA,SACA,MAEA,KAAA,EACA,OAAAuM,KAAAwR,WAAA7d,OAAAiJ,eAAAoD,KAAAwR,YAEAhM,MAAAjS,SAAAC,KAAAhC,aAAAiC,mBAAA,0BAAA,WAMAE,OAAA8d,mBAAA,WAEA,QAAA9d,OAAA6G,2BAAA7G,OAAAsD,aAAAya,yBAGA,EAAA/d,OAAAmd,SAAAM,SAAAO,sBAAA,IAAAhe,OAAAmd,SAAAM,SAAAzW,SAAAiX,UACA,IAAAje,OAAAmd,SAAAM,SAAAzW,SAAAiX,UAAA,IAAAje,OAAAmd,SAAAM,SAAAzW,SAAAiX,UACA,IAAAje,OAAAmd,SAAAM,SAAAzW,SAAAiX,UAAA,IAAAje,OAAAmd,SAAAM,SAAAzW,SAAAiX,WAGAje,OAAA6G,2BAAA7G,OAAAsD,aAAAwK,+BAAA9N,OAAAmd,SAAAM,SAAAS,8BAGAle,OAAAme,mBAAA,WAEA,IAAAne,OAAAmd,SAAA,OAAA,EACA,IAAAnd,OAAAmd,SAAAM,SAAA,OAAA,EACA,IAAAW,SAAApe,OAAAmd,SAAAM,SAEA,SAAAW,SAAAC,kBAAA,EAAAD,SAAAC,iBAAAC,aACAF,SAAAG,YAAA,EAAAH,SAAAG,WAAAD,aACAF,SAAAI,WAAA,EAAAJ,SAAAI,UAAAF,aACAF,SAAAK,aAAA,EAAAL,SAAAK,YAAAH,aACAF,SAAAM,kBAAA,EAAAN,SAAAM,iBAAAC,kBACAP,SAAAM,kBAAA,EAAAN,SAAAM,iBAAAE,kBACAR,SAAAS,qBAAAT,SAAAS,oBAAAC,aAAA,EAAAV,SAAAS,oBAAAC,YAAAC,YACAX,SAAAV,wBAAA,EAAAU,SAAAV,uBAAAF,iBAIAxd,OAAAgf,WAAA,SAAAC,KAEA,OAAAA,KACA,IAAA,MACAjf,OAAA2c,WACA3c,OAAA2c,WAAA,IACA3c,OAAA2c,WAAA3c,OAAAmd,SAAAM,SAAAyB,cAAA7f,OAAA,GACA,MACA,IAAA,MACAW,OAAA2c,WACA3c,OAAA2c,aAAA3c,OAAAmd,SAAAM,SAAAyB,cAAA7f,SACAW,OAAA2c,WAAA,KAKA3c,OAAAod,eAAA,WAEApgB,QAAAkF,yBAAAlC,OAAAmd,SAAAM,WAAAzgB,QAAAkF,yBAAAlC,OAAAmd,SAAAM,SAAAyB,gBAGAliB,QAAAmP,QAAAnM,OAAAmd,SAAAM,SAAAyB,cAAA,SAAA7S,MAEAA,KAAA8S,KAAA9S,KAAA8S,KAAAC,OAAAC,eAAAnU,QAAA,WAAA,QAMAlL,OAAAqd,iBAAA,WAEA,IAAAe,SAAApe,OAAAmd,SAAAM,SAEA6B,QAAAlB,SAAAK,YAAAH,OACAiB,UAAA,EAAAnB,SAAAM,iBAAAE,YACAY,QAAApB,SAAAI,UAAAF,OACAmB,SAAArB,SAAAM,iBAAAC,YACAe,QAAAtB,SAAAG,WAAAD,OACAqB,YAAAvB,SAAAC,iBAAAC,OACAsB,YAAAxB,SAAApX,SAAA6Y,eACAC,iBAAA1B,SAAApX,SAAA+Y,iBACAC,YAAA5B,SAAApX,SAAAiZ,aACAC,cAAA9B,SAAApX,SAAAmZ,gBAEA/B,SAAAK,YAAA2B,cAAA3D,iBAAA4D,eAAAf,SACAlB,SAAAM,iBAAA4B,mBAAA7D,iBAAA4D,eAAAd,UACAnB,SAAAI,UAAA4B,cAAA3D,iBAAA4D,eAAAb,SACApB,SAAAM,iBAAA6B,mBAAA9D,iBAAA4D,eAAAZ,UACArB,SAAAG,WAAA6B,cAAA3D,iBAAA4D,eAAAX,SACAtB,SAAAC,iBAAA+B,cAAA3D,iBAAA4D,eAAAV,aACAvB,SAAApX,SAAAwZ,sBAAA/D,iBAAA4D,eAAAT,aACAxB,SAAApX,SAAAyZ,wBAAAhE,iBAAA4D,eAAAP,kBACA1B,SAAApX,SAAA0Z,oBAAAjE,iBAAA4D,eAAAL,aACA5B,SAAApX,SAAA2Z,uBAAAlE,iBAAA4D,eAAAH,mBC5LAljB,QAAAC,OAAA,UAAA,CACA,UACA,aACA,kBAEAC,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBAEAH,eACAK,KAAA,oBACA,CACAC,YAAAH,iBAAAI,YAAA,UACAC,WAAA,aACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,0BAIAP,KAAA,2BACA,CACAC,YAAAH,iBAAAI,YAAA,iBACAC,WAAA,oBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,0BAIAP,KAAA,oBACA,CACAC,YAAAH,iBAAAI,YAAA,uBACAC,WAAA,qBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,0BAIAP,KAAA,sBACA,CACAC,YAAAH,iBAAAI,YAAA,eACAC,WAAA,kBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,0BAIAP,KAAA,gBACA,CACAC,YAAAH,iBAAAI,YAAA,gBACAC,WAAA,wBAGAA,WAAA,YAAA,CAAA,SAAA,QAAA,KAAA,aAAA,WAAA,iBAAA,aAAA,oBAAA,eAAA,gBAAA,eAAA,YAAA,eAAA,SAAAqC,OAAAC,MAAA5B,GAAAD,WAAAsC,SAAAR,eAAAC,WAAAM,kBAAAmgB,aAAAC,cAAApL,aAAArV,UAAAvC,2BAGAmC,OAAA2C,SACA3C,OAAA8gB,WAAA,EACA9gB,OAAA+gB,qBAAA,EACA/gB,OAAAghB,oBAAA,EAEAhhB,OAAAihB,gBAAA,WAEAL,aAAAM,wBAEAlhB,OAAAyC,sBACAzC,OAAA8gB,WAAA,EAEArL,aAAA0L,oBACA/iB,WAAAK,UAAA2D,wBAAAqT,aAAA0L,kBACA/iB,WAAAK,UAAAC,oBAAA,EACAN,WAAAgjB,gBAAA,GAGAphB,OAAAqhB,iBAGArhB,OAAAshB,uBAAA,WACAljB,WAAAgjB,iBACAphB,OAAAvB,UAAAE,OAAAP,WAAAgjB,eAAAziB,QAAA,GACAqB,OAAAvB,UAAA0D,SAAA/D,WAAAgjB,eAAAjf,UAAA,GACAnC,OAAAuhB,mBACAnjB,WAAAgjB,oBAAA/e,IAIArC,OAAAuhB,iBAAA,YAGAnjB,WAAAgjB,gBAAAR,aAAAY,wBAGAxhB,OAAAyhB,MAAA,GACArjB,WAAAsjB,gBAAA,GACAtjB,WAAAujB,aAAA,GACA3hB,OAAA4hB,gBAGA5hB,OAAA0M,cAAAoE,OAGA5Q,eAAA2hB,MAAA7hB,OAAAvB,UAAAE,OAAAqB,OAAAvB,UAAA0D,SAAA/D,WAAAK,UAAA2D,yBAAAwB,KAAA,SAAAnE,OAGA,IAAAqiB,KAAAriB,MACAsiB,MAAAD,KAAAE,MACA/e,QAAAC,MAAA,eAAA6e,MAAA,CAAAE,QAAA7jB,WAAA8jB,UAEA/hB,WAAAgiB,2BAAAL,KAAA5c,IAAAlF,OAAAvB,UAAA0D,UAAA,GAAAyB,KAAA,SAAAwe,WACA,EAAAA,UAAA/iB,OAEAW,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,8BAAA,SAKAE,OAAAqiB,gBAAAP,KAAA5c,QAIA,SAAAod,KAEAtiB,OAAAyhB,MAAAa,QAIAtiB,OAAAqiB,gBAAA,SAAAE,YAEAriB,eAAAZ,mBAEAa,WAAAkiB,gBAAAE,YAAA3e,KAAA,SAAAnE,kBAEAA,iBAAA+iB,QAAA/iB,iBAAAgjB,OACAziB,OAAAwB,QAAAE,QAAAjC,iBAEAijB,iBAAA1iB,OAAAwB,QAAAE,QAAAihB,YAAAtjB,OACA,OAAA,IAAAqjB,kBACA1iB,OAAA8gB,WAAA,OACA9gB,OAAAuQ,WAAA1Q,KACAhC,aAAAiC,mBAAA,SACAjC,aAAAiC,mBAAA,kBAIA,EAAA4iB,kBACA1iB,OAAA8gB,WAAA,EACA9gB,OAAA+gB,qBAAA,OACA/gB,OAAAwB,QAAAM,WAAA9B,OAAAwB,QAAAE,QAAAihB,YAAA,GAAAzd,WAIA,IAAAwd,mBACA1iB,OAAAwB,QAAAM,WAAA9B,OAAAwB,QAAAE,QAAAihB,YAAA,GAAAzd,IACAlF,OAAA4iB,2BAOA5iB,OAAA4iB,oBAAA,YAEA5lB,QAAAkF,yBAAAlC,OAAAwB,QAAAM,aAAA9B,OAAAwB,QAAAM,WAAA,KACA9B,OAAAwB,QAAAM,WAAA3B,WAAA0iB,qBAGA1iB,WAAAma,wBAAAta,OAAAwB,QAAAE,QAAA6Y,GAAAva,OAAAwB,QAAAM,YAAA8B,KAAA,SAAAnE,MAEAwD,QAAAC,MAAA,cAAA/C,WAAAmF,2BAAA,GACArC,QAAAC,MAAA,eAAAlD,OAAAwB,QAAAM,YACA9B,OAAA+E,uBACA/E,OAAAgD,KAAA,YAIAhD,OAAA8iB,qBAAA,WAEAlC,aAAAM,wBACAN,aAAAmC,mBAAA/iB,QAEAA,OAAA8gB,WAAA9gB,OAAA8gB,UACA9gB,OAAAghB,oBAAAhhB,OAAAghB,oBAGAhhB,OAAAgjB,uBAAA,WAEApC,aAAAY,uBAGArhB,WAAA8iB,wBAAAjjB,OAAAvB,UAAAE,QAAAiF,KAAA,SAAAnE,MAEAA,KAAAwT,QACAjT,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,yBAAA,WAEAE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,uBAAA,WAEAE,OAAA8iB,yBAGA9iB,OAAA4hB,cAAA,WAEA5hB,OAAAvB,UAAA0E,WACAF,QAAAC,MAAA,eAAA9E,WAAAK,UAAAE,QAEAsE,QAAAC,MAAA,eAAA,OAGAlD,OAAAqhB,cAAA,WAEA,IAAAvV,OAAA7I,QAAAC,MAAA,gBACAlG,QAAAkF,yBAAA4J,SAEA1N,WAAAK,UAAAE,OAAA,GACAP,WAAAK,UAAA0E,YAAA,IAIA/E,WAAAK,UAAAE,OAAAmN,OACA1N,WAAAK,UAAA0E,YAAA,OAIAxF,WAAA,aAAA,CAAA,SAAA,aAAA,eAAA,aAAA,eAAA,gBAAA,eAAA,SAAAqC,OAAA5B,WAAAqX,aAAAtV,WAAAygB,aAAAC,cAAAhjB,2BAGAmC,OAAAuB,WAAA,WAEAqf,aAAAM,wBAGAlhB,OAAAyC,sBAEAzC,OAAAkjB,OAAA,CACAC,iBAAA,EACAzhB,QAAA,CACA0hB,UAAA,GACAX,OAAA,GACAY,YAAA,GACAC,KAAA,GACA/I,GAAA,GACArV,IAAA,GACAqe,SAAA,GACAC,cAAA,GACAC,SAAA,GACAC,cAAA,GACAC,MAAA,GACAC,UAAA,IAEAnC,MAAA,GACAoC,SAAA,CACA1hB,SAAA,GACA2hB,gBAAA,GACAC,SAAA,GACAC,OAAA,GACAC,cAAA,GACAnU,OAAA,EACAoU,gBAAArD,cAAAqD,kBAIAlkB,OAAAsX,MAAA,CAAA6M,SAAA,MAEAnkB,OAAAgF,cAGAhF,OAAAgF,WAAA,WAEAyQ,aAAAlX,SAEAyB,OAAAkjB,OAAAxhB,QAAA4hB,KAAA7N,aAAAlX,QACA4B,WAAAikB,oBAAApkB,OAAAkjB,OAAAxhB,SAAAkC,KACA,SAAAnE,MAEAzC,QAAAkF,yBAAAzC,KAAA8a,KAQAva,OAAAkjB,OAAAC,iBAAA,EACAnjB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,yBAAA,SACAE,OAAAgD,KAAA,OARAhD,OAAAkjB,OAAAxhB,QAAAjC,KACAO,OAAAkjB,OAAAC,iBAAA,OAcAnjB,OAAAsjB,KAAA,EACAtjB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,cAAA,SACAE,OAAAgD,KAAA,OAIAhD,OAAAqkB,YAAA,WAEAzD,aAAAY,uBAGAxhB,OAAAkjB,OAAAxhB,QAAA8hB,cAAAxjB,OAAAkjB,OAAAW,SAAA1hB,SACAnC,OAAAkjB,OAAAxhB,QAAAgiB,cAAA1jB,OAAAkjB,OAAAW,SAAAE,SACA/jB,OAAAkjB,OAAAxhB,QAAA2hB,YAAArjB,OAAAkjB,OAAAW,SAAAG,OAEA7jB,WAAAmkB,cAAAtkB,OAAAkjB,OAAAxhB,SAAAkC,KACA,SAAAnE,OAEA,IAAAA,KAAAmkB,YAEAxlB,WAAAgjB,eAAA,CAAAziB,OAAAc,KAAA8a,GAAApY,SAAAnC,OAAAkjB,OAAAW,SAAA1hB,UACAnC,OAAAgD,KAAA,OAGA,SAAAsf,KAEAtiB,OAAAkjB,OAAArW,OAAA,GAEA7P,QAAAmP,QAAAmW,IAAA,SAAAjW,MAEArM,OAAAJ,SAAAC,KAAAwM,KAAA,eAOArM,OAAAukB,YAAA,WAEA3D,aAAA4D,0BAGA7mB,WAAA,oBAAA,CAAA,SAAA,aAAA,eAAA,aAAA,eAAA,eAAA,SAAAqC,OAAA5B,WAAAqX,aAAAtV,WAAAygB,aAAA/iB,2BAGAmC,OAAAuB,WAAA,WAEAqf,aAAAM,wBAGAlhB,OAAAyC,sBAEAzC,OAAAykB,cAAA,CACAC,aAAA,GACAC,iBAAA,EACAC,iBAAA,EACAC,eAAA,EACAnjB,QAAA,CACA0hB,UAAA,GACAX,OAAA,GACAY,YAAA,GACAC,KAAA,GACA/I,GAAA,GACArV,IAAA,GACAqe,SAAA,GACAC,cAAA,GACAC,SAAA,GACAC,cAAA,GACAC,MAAA,GACAC,UAAA,IAEAnC,MAAA,GACAoC,SAAA,CACA1hB,SAAA,GACA2hB,gBAAA,GACAE,OAAA,GACAlU,OAAA,EACAgV,WAAA,WAIA9kB,OAAAgF,cAGAhF,OAAAgF,WAAA,WAEAyQ,aAAAlX,SAEAyB,OAAAykB,cAAA/iB,QAAA4hB,KAAA7N,aAAAlX,QACA4B,WAAA4kB,2BAAA/kB,OAAAykB,cAAA/iB,SAAAkC,KACA,SAAAnE,MAEAzC,QAAAkF,yBAAAzC,KAAA8a,KAaAva,OAAAykB,cAAAE,iBAAA,EACA3kB,OAAAykB,cAAAG,iBAAA,EACA5kB,OAAAykB,cAAAI,eAAA,EACA7kB,OAAAykB,cAAAC,aAAA7mB,aAAAiC,mBAAA,kBACAE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,SACAE,OAAAgD,KAAA,OAhBAhD,OAAAykB,cAAA/iB,QAAAjC,KACAO,OAAAykB,cAAAC,aAAA7mB,aAAAiC,mBAAA,2BACA,IAAA1B,WAAAsjB,kBAEA1hB,OAAAykB,cAAAC,aAAA7mB,aAAAiC,mBAAA,mBAAA,QAAAE,OAAAykB,cAAAC,cAEA1kB,OAAAykB,cAAAE,iBAAA,EACA3kB,OAAAykB,cAAAI,eAAA,OAgBA7kB,OAAAsjB,KAAA,EACAtjB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,cAAA,SACAE,OAAAgD,KAAA,OAIAhD,OAAAglB,WAAA,WAEAhlB,OAAAykB,cAAA/iB,QAAA2hB,YAAArjB,OAAAykB,cAAAZ,SAAAG,OACA7jB,WAAA8kB,kCAAAjlB,OAAAykB,cAAA/iB,SAAAkC,KACA,SAAAnE,MAEA,IAAAA,MAEAO,OAAAykB,cAAAE,iBAAA,EACA3kB,OAAAykB,cAAAC,aAAA7mB,aAAAiC,mBAAA,2BACAE,OAAAykB,cAAAZ,SAAAiB,WAAAjnB,aAAAiC,mBAAA,gBACAE,OAAAykB,cAAAG,iBAAA,GAIA5kB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,oBAAA,UAGA,SAAAwiB,SAOAtiB,OAAAklB,eAAA,WAEAllB,OAAAykB,cAAA/iB,QAAA8hB,cAAAxjB,OAAAykB,cAAAZ,SAAA1hB,SACAhC,WAAAglB,qBAAAnlB,OAAAykB,cAAA/iB,SAAAkC,KACA,SAAAnE,OAEA,IAAAA,KAAAmkB,YAEAxlB,WAAAgjB,eAAA,CAAAziB,OAAAc,KAAA8a,GAAApY,SAAAnC,OAAAykB,cAAAZ,SAAA1hB,UACAnC,OAAAgD,KAAA,OAGA,SAAAsf,KAEAtiB,OAAAykB,cAAA5X,OAAA,GAEA7P,QAAAmP,QAAAmW,IAAA,SAAAjW,MAEArM,OAAAJ,SAAAC,KAAAwM,KAAA,cAMArM,OAAAolB,WAAA,WAEAplB,OAAAykB,cAAAhD,MAAA,GAEAb,aAAAY,uBAGAxhB,OAAAykB,cAAAE,iBAEA3kB,OAAAglB,aAGAhlB,OAAAykB,cAAAG,iBAEA5kB,OAAAklB,mBAIAllB,OAAAukB,YAAA,WAEA3D,aAAA4D,0BAGA7mB,WAAA,qBAAA,CAAA,SAAA,aAAA,eAAA,aAAA,eAAA,oBAAA,eAAA,SAAAqC,OAAA5B,WAAAqX,aAAAtV,WAAAygB,aAAAngB,kBAAA5C,2BAGAmC,OAAAuiB,YAAA,EACAviB,OAAAqlB,gBAAA,GAEArlB,OAAAuB,WAAA,WAEA,IAAAO,WAAA9B,OAAAwB,SAAAxB,OAAAwB,QAAAM,WAAA9B,OAAAwB,QAAAM,WAAA,EAEArB,kBAAA0I,qBAAArH,WAAA,IAAA8B,KAAA,SAAAnE,MAEAO,OAAAslB,cAAA7lB,KAAAkF,UAAA9G,aAAAiC,mBAAA,sBAAAL,OAGAgW,aAAA3N,MAEA9H,OAAAqlB,gBAAA,CACAjC,UAAA,GACAX,OAAA,GACAY,YAAA,GACAC,KAAA,GACA/I,GAAA,GACArV,IAAAuQ,aAAA3N,IACAyb,SAAA,GACAC,cAAA,GACAC,SAAA,GACAC,cAAA,GACAC,MAAA,GACAC,UAAA,KAIAhD,aAAAM,yBAIAlhB,OAAAulB,eAAA,WAIA3E,aAAAY,sBAGAxhB,OAAAklB,kBAGAllB,OAAAklB,eAAA,WAEAllB,OAAAqlB,gBAAAG,YAAAxlB,OAAAwB,QAAAikB,SAAA5B,SAAA6B,YACA1lB,OAAAqlB,gBAAA7B,cAAAxjB,OAAAwB,QAAAikB,SAAA5B,SAAA1hB,SAEAhC,WAAAglB,qBAAAnlB,OAAAqlB,iBAAAzhB,KACA,SAAAnE,OAEAO,OAAAwB,QAAAikB,SAAAE,SAAA,KACAlmB,KAAAmkB,YAEAxlB,WAAAgjB,eAAA,CAAAziB,OAAAc,KAAA8a,GAAApY,SAAAnC,OAAAqlB,gBAAA7B,eACAxjB,OAAAgD,KAAA,OAGA,SAAAsf,KAEAtlB,QAAAmP,QAAAmW,IAAA,SAAAjW,MAEArM,OAAAJ,SAAAC,KAAAwM,KAAA,cAMArM,OAAAukB,YAAA,WAEA3D,aAAA4D,0BAGA7mB,WAAA,kBAAA,CAAA,SAAA,eAAA,eAAA,qBAAA,eAAA,SAAAqC,OAAAyV,aAAAmL,aAAAgF,mBAAA/nB,2BAIAmC,OAAAuB,WAAA,WAEAqf,aAAAM,wBAGAlhB,OAAAyC,sBAEAzC,OAAA6lB,cAAAhoB,aAAAiC,mBAAA,sBAEA2V,aAAAqQ,KAEAF,mBAAAG,mBAAAtQ,aAAAqQ,MAAAliB,KACA,SAAAnE,MAEAA,KAAAumB,aAAAvmB,KAAAwmB,YAEAjmB,OAAA6lB,cAAAhoB,aAAAiC,mBAAA,yBAIAE,OAAA6lB,cAAAhoB,aAAAiC,mBAAA,6BAGA,SAAAL,MAEAO,OAAA6lB,cAAAhoB,aAAAiC,mBAAA,+BAKAE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,yBAAA,SACAE,OAAAgD,KAAA,cAIArF,WAAA,mBAAA,CAAA,SAAA,UAAA,SAAAqC,OAAAO,sBAIAP,OAAAkmB,eAAA,WAEAlmB,OAAA6E,sCCnmBA7H,QAAAC,OAAA,UAAA,CAAA,eAAA,iBAAA,oBACAC,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBACAH,eACAK,KAAA,UACA,CACAC,YAAAH,iBAAAI,YAAA,SACAC,WAAA,kBACAwoB,aAAA,SAEA3oB,KAAA,qBACA,CACAC,YAAAH,iBAAAI,YAAA,eACAC,WAAA,wBACAwoB,aAAA,wBACAvoB,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,6BAMAqoB,OAAA,qBAAA,CAAA,UAAA,SAAA7lB,SACA,OAAA,SAAA8lB,OACA,OAAArd,mBAAAqd,WAGA1oB,WAAA,kBAAA,CAAA,SAAA,YAAA,eAAA,eAAA,SAAAqC,OAAA4T,UAAA0S,aAAAhmB,2BAEA,IAAAimB,KAAA5T,KACA4T,KAAAC,QAAA,CACAC,MAAA,GACAC,OAAA,IAGAH,KAAAhlB,WAAA,WACAvB,OAAA6G,2BAAAvG,aAAAqmB,kBACA3mB,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,iBACAsC,OAAAoD,aAAAM,eACA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA/F,OAAA0F,yBACA4gB,aAAAM,wBAAA5mB,OAAAwB,QAAAM,YAAA8B,KAAA,SAAA1E,UACA,IAEA2nB,oBAFA3nB,SAAA8mB,aAEAa,oBAAA3nB,SAAA0W,WAAAkR,UAAAV,OAAA,SAAA9P,IAAA+D,OACA,MAAA,iBAAA/D,IAAAR,OAEA9Y,QAAAkF,yBAAA2kB,sBAAA,IAAAA,oBAAAxnB,SACAknB,KAAAC,QAAAC,MAAAvnB,SAAA0W,WAAAkR,UAAAV,OAAA,SAAA9P,IAAA+D,OACA,OAAA/D,IAAAL,YAAA4Q,oBAAA,GAAA3hB,cAOAvH,WAAA,wBAAA,CAAA,SAAA,eAAA,eAAA,OAAA,eAAA,YAAA,QAAA,eAAA,aAAA,WAAA,YAAA,SAAAqC,OAAAyV,aAAA6Q,aAAAS,KAAAzmB,aAAAsT,UAAA3T,MAAApC,aAAAO,WAAAsC,SAAAsmB,wBAEA,IAAAT,KAAA5T,KACA4T,KAAAU,eAAA,EACAV,KAAAW,aAAA,GACAX,KAAAhlB,WAAA,SAAA4lB,MACAnnB,OAAA6G,2BAAAvG,aAAAqmB,kBACA3mB,OAAAgD,KAAA,SAGAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,iBACAsC,OAAAoD,aAAAM,eACA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACAugB,aAAAM,wBAAA5mB,OAAAwB,QAAAM,YAAA8B,KAAA,SAAA1E,WACA,IAEA2nB,oBAOA/e,IAEAsf,cAXAloB,UAAA8mB,aAEAa,oBAAA3nB,UAAA0W,WAAAkR,UAAAV,OAAA,SAAA9P,IAAA+D,OACA,MAAA,iBAAA/D,IAAAR,OAEA9Y,QAAAkF,yBAAA2kB,sBAAA,IAAAA,oBAAAxnB,SACAgoB,UAAAnoB,UAAA0W,WAAAkR,UAAAV,OAAA,SAAA9P,IAAA+D,OACA,OAAA/D,IAAAL,YAAA4Q,oBAAA,GAAA3hB,MAEA4C,IAAA2N,aAAA3N,IACA9K,QAAAkF,yBAAA4F,OACAsf,cAAA,EACAE,UAAAD,UAAAjB,OAAA,SAAA9P,IAAA+D,OACA,OAAA/D,IAAApR,IAAA4F,aAAAhD,MACAsf,cAAA/M,OACA,MAIArd,QAAAkF,yBAAAolB,YAAA,EAAAA,UAAAjoB,SACAknB,KAAAW,aAAAI,UAAA,GACAtnB,OAAAoD,aAAAM,aAAAqC,QAAAqhB,cASA,SAAAG,cAAAJ,MACAb,aAAAkB,eAAAxnB,OAAAwB,QAAAM,WAAAykB,KAAAW,aAAAhiB,KAAAtB,KACA,SAAA1E,UACA,GAAAA,UAAAA,SAAA8mB,YAAA9mB,SAAAuoB,YAAAxU,QAAA,CACA,GAAAjW,QAAAkF,yBAAAhD,SAAAwoB,SAAAC,kBAAA,CACA,IAAAvmB,IAAA2lB,KAAAa,mBAAArB,KAAAW,aAAAW,SACA7qB,QAAA8U,QAAA,sBAAAQ,KAAA,MAAAlR,UAGA,GAAApE,QAAAkF,yBAAAhD,SAAAuoB,YAAAK,cAsCA,CACAC,IAAAlqB,aAAAiC,mBAAA,qBAAAoL,QAAA,MAAAqb,KAAAW,aAAApR,MACA1X,WAAAwB,SAAAC,KAAAkoB,IAAA,cAvCA,OAAA7oB,SAAAwoB,SAAAC,kBACA,KAAAR,KAAAa,YAAAC,OACA,IAAAC,OAAA,CACAtV,OAAA,MACAxR,IAAAmlB,KAAAW,aAAAW,QACArpB,QAAA,CACA2pB,cAAA,UAAAjpB,SAAAuoB,YAAAK,eAGA7nB,MAAAioB,QAAAtkB,KACA,SAAA1E,OAEA,IACAO,KADA,KAAAP,MAAAM,QAAAN,MAAAM,OAAA,MACAC,KAAAP,MAAAO,MAAA,GACAP,MAAAO,OAAA,IAAAP,MAAAO,KAAA+C,QAAA,WACA/C,KAAAP,MAAAO,KAAAyL,QAAA,SAAA,qBAAAqb,KAAAW,aAAAW,QAAA,QAEAO,MAAAnN,SAAAoN,cAAA,uBAEAC,cAAArN,SAAA3Z,KAAA,YAAA,WACA8mB,MAAAE,cAAArN,SAAAsN,MAAA9oB,MACA2oB,MAAAE,cAAArN,SAAAuN,UAGA,SAAAC,QACA,IAAAV,IAAAlqB,aAAAiC,mBAAA,qBAAAoL,QAAA,MAAAqb,KAAAW,aAAApR,MACA1X,WAAAwB,SAAAC,KAAAkoB,IAAA,WAGA,MACA,KAAAZ,KAAAa,YAAAU,IACA,IAAAC,OAAApC,KAAAW,aAAAW,QAAAe,SAAA,KAAA,IAAA,IACA/V,OAAA8V,OAAA,gBAAA3f,mBAAA9J,SAAAuoB,YAAAK,cAAA,eAAA5oB,SAAAuoB,YAAAoB,WACA7rB,QAAA8U,QAAA,sBAAAQ,KAAA,MAAAyU,KAAAa,mBAAArB,KAAAW,aAAAW,QAAAhV,SAUA7V,QAAAkF,yBAAAhD,SAAAuoB,YAAAqB,aAAA9rB,QAAAkF,yBAAAhD,SAAAuoB,YAAAK,eACApnB,SAAA,WACA6mB,cAAAJ,OACA,IAAAjoB,SAAAuoB,YAAAqB,cAIA,SAAAC,SACA,IAAAhB,IAAAlqB,aAAAiC,mBAAA,qBAAAoL,QAAA,MAAAqb,KAAAW,aAAApR,MACA1X,WAAAwB,SAAAC,KAAAkoB,IAAA,WAtEAR,CAAAJ,gBA0EAxpB,WAAA,0BAAA,CAAA,SAAA,aAAA,eAAA,eAAA,SAAAqC,OAAA5B,WAAAqX,aAAA6Q,2BAEA,IAAAC,KAAA5T,KACA4T,KAAAC,QAAA,CACAC,MAAA,IAEAF,KAAAyC,WAAA,SAAA3O,OACA,IAAA4O,OAAAjpB,OAAAoD,aAAAM,aAAAqC,UAAAsU,MAIA,OAHA4O,SACA1C,KAAAW,aAAAX,KAAAC,QAAAC,MAAApM,QAEA4O,QAEA1C,KAAAhlB,WAAA,WACA+kB,aAAAM,wBAAA5mB,OAAAwB,QAAAM,YAAA8B,KAAA,SAAA1E,UACA,IAEA2nB,oBAFA3nB,SAAA8mB,aAEAa,oBAAA3nB,SAAA0W,WAAAkR,UAAAV,OAAA,SAAA9P,IAAA+D,OACA,MAAA,iBAAA/D,IAAAR,OAEA9Y,QAAAkF,yBAAA2kB,sBAAA,IAAAA,oBAAAxnB,SACAknB,KAAAC,QAAAC,MAAAvnB,SAAA0W,WAAAkR,UAAAV,OAAA,SAAA9P,IAAA+D,OACA,OAAA/D,IAAAL,YAAA4Q,oBAAA,GAAA3hB,cChMAlI,QAAAC,OAAA,cAAA,CAAA,iBACAC,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBAGAH,eACAK,KAAA,6BACA,CACAC,YAAAH,iBAAAI,YAAA,kBACAC,WAAA,0BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8BAIAP,KAAA,0CACA,CACAC,YAAAH,iBAAAI,YAAA,wBACAC,WAAA,qBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8BAIAP,KAAA,oDACA,CACAC,YAAAH,iBAAAI,YAAA,4BACAC,WAAA,+BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8BAIAP,KAAA,+CACA,CACAC,YAAAH,iBAAAI,YAAA,uBACAC,WAAA,0BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8BAIAP,KAAA,qDACA,CACAC,YAAAH,iBAAAI,YAAA,6BACAC,WAAA,kCAEAH,KAAA,6BACA,CACAC,YAAAH,iBAAAI,YAAA,mBACAC,WAAA,sBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8BAIAP,KAAA,qBACA,CACAC,YAAAH,iBAAAI,YAAA,oBACAC,WAAA,4BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8BAIAP,KAAA,iCACA,CACAC,YAAAH,iBAAAI,YAAA,oBACAC,WAAA,wBAEAH,KAAA,yCACA,CACAC,YAAAH,iBAAAI,YAAA,iBACAC,WAAA,qBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8BAIAP,KAAA,8CACA,CACAC,YAAAH,iBAAAI,YAAA,sBACAC,WAAA,0BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8BAIAP,KAAA,mDACA,CACAC,YAAAH,iBAAAI,YAAA,2BACAC,WAAA,+BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8BAIAP,KAAA,oDACA,CACAC,YAAAH,iBAAAI,YAAA,4BACAC,WAAA,kCAEAH,KAAA,8BACA,CACAC,YAAAH,iBAAAI,YAAA,oBACAC,WAAA,yBAEAH,KAAA,sDACA,CACAC,YAAAH,iBAAAI,YAAA,oBACAC,WAAA,4BAGAA,WAAA,8BAAA,CAAA,SAAA,mBAAA,0BAAA,eAAA,YAAA,SAAAqC,OAAAe,iBAAAmoB,wBAAA5oB,aAAAF,wBAGAJ,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA6oB,iBAEAnpB,OAAAgD,KAAA,SAGAhD,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAwB,QAAAG,UAAAynB,QAAAppB,OAAAwB,QAAAG,UAAAynB,SAAA,GACAppB,OAAAwB,QAAAG,UAAA0nB,QAAArpB,OAAAwB,QAAAG,UAAA0nB,SAAA,GACArpB,OAAAoD,aAAAM,aAAA4lB,gBAAA,GACAtpB,OAAAoD,aAAAM,aAAA4lB,gBAAAC,QAAA,EACAvpB,OAAAoD,aAAAM,aAAA4lB,gBAAAE,UAAA,EACAxpB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GAIAxG,QAAAkF,yBAAAlC,OAAAiP,eACAjP,OAAAgP,yBAGAhP,OAAAiP,aAAAc,kBAAA,EACA/P,OAAAiP,aAAAC,iBAAA,EACAlP,OAAAiP,aAAAU,aAAA,GACA3P,OAAAiP,aAAAE,UAAA,GAEApO,iBAAA0oB,oBAAAzpB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA,GAAA9F,KACA,SAAAnE,MACAO,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAAjqB,KAAAkqB,eACA3pB,OAAAwB,QAAAG,UAAAynB,QAAAQ,aAAAnqB,KAAAoqB,gBACA7pB,OAAAoD,aAAAM,aAAA4lB,gBAAAC,QAAA,EACAvpB,OAAAwB,QAAAG,UAAAynB,QAAAU,sBAAArqB,KAAAsqB,sBAEA/pB,OAAAwB,QAAAG,UAAAynB,QAAAY,wCAAAvqB,KAAAwqB,wCACAjqB,OAAAwB,QAAAG,UAAAynB,QAAAc,6CAAAzqB,KAAA0qB,6CACAnqB,OAAAwB,QAAAG,UAAAynB,QAAAgB,qDAAA3qB,KAAA4qB,qDACArqB,OAAAsqB,mBAEAtqB,OAAAoD,aAAAmnB,6BAAAvqB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,IACA1pB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,GAAAc,kBAGAxqB,OAAAoD,aAAAmnB,6BACAvqB,OAAAoD,aAAAM,aAAAqC,QAAA,IACA3F,UAAAkC,KAAA,gCAGA,SAAAggB,KACAtiB,OAAAoD,aAAAM,aAAA4lB,gBAAAC,QAAA,IAKAL,wBACAuB,oBAAAzqB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA,GACA9F,KAAA,SAAAnE,MACAA,KAAAumB,aAAAhpB,QAAAkF,yBAAAzC,KAAAirB,oBACA1qB,OAAAwB,QAAAG,UAAA0nB,QAAAsB,iBAAAlrB,KAAAirB,qBAMA1qB,OAAAsqB,iBAAA,WAEAttB,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,SAAAkB,KAAAvQ,OAEAuQ,KAAA7gB,UAAA/J,OAAAwB,QAAAG,UAAAynB,QAAAQ,eACA5pB,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAAD,YAIAjtB,WAAA,6BAAA,CAAA,SAAA,mBAAA,UAAA,eAAA,aAAA,kBAAA,WAAA,YAAA,SAAAqC,OAAAe,iBAAAJ,QAAAL,aAAAlC,WAAAN,iBAAAgtB,SAAA1qB,wBAGAvC,iBAAAC,iBAAAC,gCAAA,yBACAiC,OAAA+qB,qBAAAltB,iBAAAiC,mBAAA,sBACAE,OAAAgrB,sBAAAntB,iBAAAiC,mBAAA,uBACAE,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA6oB,iBAEAnpB,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAM,aAAA/B,UAAA,GACA3B,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,IAGAxD,OAAAirB,mBAAA,WAEAjuB,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAAupB,KAAA,SAAAC,IAAA9Q,OAEA,UAAA8Q,IAAAC,WAEAprB,OAAAoD,aAAAM,aAAA/B,UAAA0pB,WAAAF,KAEA,UAAAA,IAAAC,WAEAprB,OAAAoD,aAAAM,aAAA/B,UAAA2pB,OAAAH,KAEA,UAAAA,IAAAC,WAEAprB,OAAAoD,aAAAM,aAAA/B,UAAA4pB,MAAAJ,KAEA,EAAAA,IAAAK,uBAEAL,IAAAC,SAAA,QACAprB,OAAAoD,aAAAM,aAAA/B,UAAA8pB,MAAAN,IACAnrB,OAAAwB,QAAAG,UAAAyM,KAAAsd,OAAAP,IAAAjmB,QAKAlF,OAAA2rB,sBAAA,WAEA5qB,iBAAA6qB,mBACA5rB,OAAAwB,QAAAG,UAAAynB,QAAAQ,aACA5pB,OAAAiK,cAAAjK,OAAAoD,aAAAM,aAAA/B,UAAAiK,MAAA,GACA5L,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6Y,IACA,GACA3W,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAG,UAAAkI,MAAApK,KAAAosB,eAAAA,eACA7rB,OAAAwB,QAAAG,UAAAupB,KAAAzrB,KAAAosB,eAAAC,cACA9rB,OAAAwB,QAAAG,UAAAyM,KAAA3O,KAAAosB,eAAAE,cACA/rB,OAAAwB,QAAAG,UAAAqqB,SAAAvsB,KAAAosB,eAAAI,kBACAjsB,OAAAwB,QAAAG,UAAAuqB,aAAAlsB,OAAAwB,QAAAG,UAAAkI,MAAA3E,IACAlF,OAAAirB,qBAEA7sB,WAAAoc,WAAA,gCAAA,OAIA2R,iBAAA/tB,WAAAiL,IAAA,wBAAA,SAAAC,MAAA8iB,SAAA3sB,MAEAO,OAAAirB,uBAEAjrB,OAAAqJ,IAAA,WAAA8iB,kBAEAnsB,OAAAqsB,MAAA,SAAAC,UAEAtsB,OAAAwB,QAAAG,UAAAyqB,UAAA,GAEA,EAAAhsB,UAAAmsB,OAAA/pB,QAAA,qBAAAxC,OAAAwB,QAAAG,UAAAyqB,UAAA,IACA,EAAAhsB,UAAAmsB,OAAA/pB,QAAA,+BAAAxC,OAAAwB,QAAAG,UAAAyqB,UAAA,IACA,EAAAhsB,UAAAmsB,OAAA/pB,QAAA,0BAAAxC,OAAAwB,QAAAG,UAAAyqB,UAAA,IACA,EAAAhsB,UAAAmsB,OAAA/pB,QAAA,gCAAAxC,OAAAwB,QAAAG,UAAAyqB,UAAA,GAGApsB,OAAAwB,QAAAG,UAAAyqB,UAAAhuB,WAAAoc,WAAA,kBAAAsQ,SAAA0B,2BAAApsB,UAAAmsB,SAEAvsB,OAAAgD,KAAA8nB,SAAA2B,cAAAH,SAAAtsB,OAAAwB,QAAAG,UAAAuqB,aAAAlsB,OAAAwB,QAAAG,UAAAyqB,UAAA,QAIAzuB,WAAA,+BAAA,CAAA,SAAA,mBAAA,0BAAA,eAAA,eAAA,mBAAA,eAAA,SAAAqC,OAAAe,iBAAAmoB,wBAAAzT,aAAAnV,aAAAosB,iBAAA9L,2BAGA5gB,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA6G,2BAAAvG,aAAA6oB,iBAEAnpB,OAAAgD,KAAA,SAGAhD,OAAA2sB,MAAAC,eAAAC,UAAA,GACA7sB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAopB,iBAAA,GACA9sB,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAoD,aAAAM,aAAAopB,iBAAAC,WAAA,oBACA/sB,OAAAwB,QAAAxB,OAAAwB,SAAA,GACAxB,OAAAwB,QAAAG,UAAA3B,OAAAwB,QAAAG,WAAA,GACA3B,OAAAwB,QAAAG,UAAAynB,QAAAppB,OAAAwB,QAAAG,UAAAynB,SAAA,GACAppB,OAAAwB,QAAAG,UAAA0nB,QAAArpB,OAAAwB,QAAAG,UAAA0nB,SAAA,GAEArpB,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAA,CAAA9gB,SAAA,GAIA/M,QAAAkF,yBAAAlC,OAAAiP,eACAjP,OAAAgP,yBAGAhP,OAAAiP,aAAAc,kBAAA,EACA/P,OAAAiP,aAAAC,iBAAA,EACAlP,OAAAiP,aAAAU,aAAA,GACA3P,OAAAiP,aAAAE,UAAA,GAEApO,iBACA0oB,oBAAAzpB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA,GACA9F,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAAjqB,KAAAkqB,eACA3pB,OAAAwB,QAAAG,UAAAynB,QAAAU,sBAAArqB,KAAAsqB,sBAEA/pB,OAAAwB,QAAAG,UAAAynB,QAAAY,wCAAAvqB,KAAAwqB,wCACAjqB,OAAAwB,QAAAG,UAAAynB,QAAAc,6CAAAzqB,KAAA0qB,6CACAnqB,OAAAwB,QAAAG,UAAAynB,QAAAgB,qDAAA3qB,KAAA4qB,qDAEArqB,OAAAgtB,mBAEAhtB,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAA9gB,QAAAtK,KAAAoqB,gBACA7pB,OAAAiP,aAAAG,UAAApP,OAAAyL,WAAAhM,KAAAwtB,oBAGAjtB,OAAAoD,aAAAmnB,6BAAAvqB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,IACA1pB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,GAAAc,kBAGAxqB,OAAAoD,aAAAmnB,6BAEAvqB,OAAAoD,aAAAM,aAAAqC,QAAA,IACA3F,UAAAkC,KAAA,+BAEAtC,OAAA2D,eAEA,SAAA2e,KAEAtiB,OAAAoD,aAAAM,aAAA4lB,gBAAAC,QAAA,IAKAL,wBACAuB,oBAAAzqB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA,GACA9F,KAAA,SAAAnE,MACAA,KAAAumB,aAAAhpB,QAAAkF,yBAAAzC,KAAAirB,oBACA1qB,OAAAwB,QAAAG,UAAA0nB,QAAAsB,iBAAAlrB,KAAAirB,qBAMA1qB,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAopB,iBAAA9sB,OAAA4sB,eAAAO,YAAAtJ,SACA7jB,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAA9gB,QAAA/J,OAAA4sB,eAAAO,YAAAvD,aACA5pB,OAAAiP,aAAAjP,OAAA4sB,eAAAO,YAAAvhB,MAGA5L,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAxJ,SAAA7jB,OAAAoD,aAAAM,aAAAopB,iBACA9sB,OAAA4sB,eAAAS,YAAAzD,aAAA5pB,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAA9gB,QACA/J,OAAA4sB,eAAAS,YAAAzhB,KAAA5L,OAAAiP,cAGAjP,OAAAstB,qBAAA,SAAAzV,GAEA7X,OAAAgtB,kBAGAjsB,iBAAAwsB,qBAAA1V,EAAA2V,OAAA1V,SAAAD,EAAA2V,OAAAzV,UAAAhO,SAAA,GAAAnG,KACA,SAAAnE,MAEAO,OAAAiP,aAAAG,UAAApP,OAAAyL,WAAAhM,SAKAO,OAAAgtB,eAAA,WAEA,SAAAvX,aAAAgY,UAAAhY,aAAAiY,iBAEA1tB,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAA,CAAA9gB,SAAA,GAEA/J,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAA9gB,QAAAqK,SAAAqB,aAAAgY,QAAA,IACAztB,OAAAiP,aAAAG,UAAApP,OAAAyL,WAAAgK,aAAAiY,gBACA,IAMA1tB,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEAhN,aAAAY,sBACAzgB,iBAAA8sB,oCACA7tB,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAA9gB,QACA/J,OAAAiK,cAAAjK,OAAAiP,aAAAG,WAAA,GACApP,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aACA,GACA9F,KAAA,SAAAnE,MAEA,IAAAquB,GAAA,cAAA9tB,OAAAoD,aAAAM,aAAAopB,iBAAAC,WACA,eAAA/sB,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAA9gB,QACA,cAAA/J,OAAAiP,aAAAG,UAEAwe,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,UAKAnwB,WAAA,4BAAA,CAAA,SAAA,eAAA,YAAA,eAAA,0BAAA,SAAAqC,OAAAM,aAAAsT,UAAA/V,aAAAqrB,sCAIAlpB,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA6oB,iBAEAnpB,OAAAgD,KAAA,SAGAhD,OAAAwB,QAAAxB,OAAAwB,SAAA,GACAxB,OAAAwB,QAAAG,UAAA,CACAynB,QAAA,GACA8C,aAAA,EACA7C,QAAA,IAEArpB,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAwB,QAAAG,UAAA0nB,QAAAsB,iBAAA,GACA3qB,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA/B,UAAA,GACA3B,OAAAoD,aAAAmnB,4BAAA,EACAvqB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GAEA0lB,wBACAuB,oBAAAzqB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA,GACA9F,KAAA,SAAAnE,MACAA,KAAAumB,aAAAhpB,QAAAkF,yBAAAzC,KAAAirB,kBACA1qB,OAAAwB,QAAAG,UAAA0nB,QAAAsB,iBAAA3qB,OAAAiuB,gBAAAxuB,KAAAirB,kBAAAwD,KAAAluB,OAAAmuB,sBAGAnuB,OAAAgD,KAAA,6BACAhD,OAAAuQ,WAAAQ,qBAMA/Q,OAAAiuB,gBAAA,SAAA5E,SAKA,OAJArsB,QAAAmP,QAAAkd,QAAA,SAAA+E,QACAA,OAAAC,YAAAxwB,aAAAiC,mBAAA,aAAAsuB,OAAAtY,QAGAuT,SAGArpB,OAAAmuB,oBAAA,SAAAG,EAAAC,GACA,OAAAD,EAAAD,YAAAG,cAAAD,EAAAF,iBAGA1wB,WAAA,0BAAA,CAAA,SAAA,YAAA,mBAAA,0BAAA,eAAA,eAAA,YAAA,eAAA,WAAA,SAAAqC,OAAAI,UAAAW,iBAAAmoB,wBAAA5oB,aAAAsgB,aAAAhN,UAAA/V,aAAAitB,uBAGA9qB,OAAAgrB,sBAAAntB,aAAAiC,mBAAA,uBACAE,OAAA+qB,qBAAAltB,aAAAiC,mBAAA,sBACAE,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA6oB,iBAEAnpB,OAAAgD,KAAA,SAGA4d,aAAAM,wBAEAlhB,OAAAwB,QAAAxB,OAAAwB,SAAA,GACAxB,OAAAwB,QAAAG,UAAA,CACAynB,QAAA,GACA8C,aAAA,EACA7C,QAAA,IAEArpB,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAwB,QAAAG,UAAA0nB,QAAAsB,iBAAA,GACA3qB,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,qBACAsC,OAAAoD,aAAAM,aAAA/B,UAAA,GACA3B,OAAAoD,aAAAM,aAAA+qB,aAAA,EACAzuB,OAAAoD,aAAAM,aAAAgrB,YAAA,EACA1uB,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAoD,aAAAmnB,4BAAA,EACAvqB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GAIAxG,QAAAkF,yBAAAlC,OAAAiP,eACAjP,OAAAgP,yBAGAhP,OAAAiP,aAAAC,iBAAA,EACAlP,OAAAiP,aAAAc,kBAAA,EACA/P,OAAAiP,aAAAU,aAAA,GACA3P,OAAAiP,aAAAE,UAAA,GAEApO,iBAAA0oB,oBAAAzpB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA,GAAA9F,KACA,SAAAnE,MAEAA,KAAAumB,aAAAhpB,QAAAkF,yBAAAzC,KAAAkqB,iBAEA3pB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAAjqB,KAAAkqB,eACA3pB,OAAAwB,QAAAG,UAAAynB,QAAAQ,aAAAnqB,KAAAoqB,gBACA7pB,OAAAwB,QAAAG,UAAAynB,QAAAU,sBAAArqB,KAAAsqB,sBACA/pB,OAAAoD,aAAAM,aAAA/B,UAAAiK,KAAA5L,OAAAyL,WAAAhM,KAAAwtB,mBACAjtB,OAAAoD,aAAAM,aAAA/B,UAAA2X,QAAAtZ,OAAAyL,WAAAhM,KAAAkvB,cACA3uB,OAAAoD,aAAAM,aAAA/B,UAAAitB,QAAA5uB,OAAAyL,WAAAhM,KAAAovB,aACA7uB,OAAAwB,QAAAG,UAAAynB,QAAAY,wCAAAvqB,KAAAwqB,wCACAjqB,OAAAwB,QAAAG,UAAAynB,QAAAc,6CAAAzqB,KAAA0qB,6CACAnqB,OAAAwB,QAAAG,UAAAynB,QAAAgB,qDAAA3qB,KAAA4qB,qDACArqB,OAAAsqB,mBAEAtqB,OAAAoD,aAAAmnB,6BAAAvqB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,IACA1pB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,GAAAc,kBAGAxqB,OAAAoD,aAAAmnB,6BAEAvqB,OAAAoD,aAAAM,aAAAqC,QAAA,IACA3F,UAAAkC,KAAA,gCAIAtC,OAAAuQ,WAAAQ,mBAIAmY,wBACAuB,oBAAAzqB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA,GACA9F,KAAA,SAAAnE,MACAA,KAAAumB,aAAAhpB,QAAAkF,yBAAAzC,KAAAirB,oBACA1qB,OAAAwB,QAAAG,UAAA0nB,QAAAsB,iBAAAlrB,KAAAirB,qBAMA1qB,OAAAstB,qBAAA,SAAAzV,GAEA9W,iBAAAwsB,qBAAA1V,EAAA2V,OAAA1V,SAAAD,EAAA2V,OAAAzV,UAAAhO,SAAA,GAAAnG,KACA,SAAAnE,MAEAO,OAAAiP,aAAAG,UAAApP,OAAAyL,WAAAhM,MACAO,OAAAoD,aAAAM,aAAA/B,UAAAiK,KAAA5L,OAAAiP,aAAAG,aAKApP,OAAAsqB,iBAAA,WAEAttB,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,SAAAkB,KAAAvQ,OAEAuQ,KAAA7gB,UAAA/J,OAAAwB,QAAAG,UAAAynB,QAAAQ,eACA5pB,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAAD,SAIA5qB,OAAA2rB,sBAAA,WAEA/K,aAAAY,sBAGAzgB,iBAAA6qB,mBACA5rB,OAAAwB,QAAAG,UAAAynB,QAAAQ,aACA5pB,OAAAiK,cAAAjK,OAAAoD,aAAAM,aAAA/B,UAAAiK,MAAA,GACA5L,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6Y,IACA,GACA3W,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAG,UAAAkI,MAAApK,KAAAosB,eAAAA,eACA7rB,OAAAwB,QAAAG,UAAAupB,KAAAzrB,KAAAosB,eAAAC,cACA9rB,OAAAwB,QAAAG,UAAAyM,KAAA3O,KAAAosB,eAAAE,cACA/rB,OAAAwB,QAAAG,UAAAqqB,SAAAvsB,KAAAosB,eAAAI,kBACAjsB,OAAAwB,QAAAG,UAAAuqB,aAAAlsB,OAAAwB,QAAAG,UAAAkI,MAAA3E,IAEAlF,OAAAgD,KAAA8nB,SAAAgE,cAAA9uB,OAAAwB,QAAAG,UAAAupB,KAAA,GAAAlrB,OAAAwB,QAAAG,UAAAuqB,aAAA,KAAAlsB,OAAAwB,QAAAG,UAAAkI,MAAAklB,qBAIApxB,WAAA,sBAAA,CAAA,SAAA,aAAA,eAAA,YAAA,mBAAA,eAAA,UAAA,YAAA,eAAA,mBAAA,WAAA,SAAAqC,OAAA5B,WAAAwiB,aAAAxgB,UAAAW,iBAAAT,aAAAK,QAAAiT,UAAA/V,aAAA4e,iBAAAqO,uBAGAlK,aAAAM,wBACAlhB,OAAAsX,MAAA,GACAtX,OAAAsX,MAAA0X,qBAAA,GACAhvB,OAAAsX,MAAA2X,4BAAA,CACAtX,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,yBACAzH,MAAA5S,aAAAiC,mBAAA,iBACAyS,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,mBACAzH,MAAA5S,aAAAiC,mBAAA,UACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,iBACAzH,MAAA5S,aAAAiC,mBAAA,cACAyS,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,gFACAN,MAAA,IAEA,CACAM,SAAA,0GACAN,MAAA,KAGAO,WAAA,GACAE,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,EACAf,MAAA,OAGAnY,OAAAsX,MAAA4X,yBAAA,SAAA/V,IAEAnZ,OAAAsX,MAAA6X,uBAAA,IAAA7X,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA0Z,KAGAnZ,OAAAsX,MAAA6X,uBAAA9V,OACArZ,OAAAsX,MAAA0X,qBAAAtW,WAAAjZ,KAAAO,OAAAsX,MAAA6X,uBAAA1vB,SAGAO,OAAAspB,gBAAA,GACAtpB,OAAAovB,mBAAA,GACApvB,OAAAqvB,sBAAA,EACArvB,OAAAsvB,cAAA,EACAtvB,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA6oB,iBAEAnpB,OAAAgD,KAAA,SAEAhD,OAAAuvB,gBAAA,EACAvvB,OAAAwB,QAAAxB,OAAAwB,SAAA,GACAxB,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,qBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAsvB,cAAA,GAGAtvB,OAAAwvB,SAAA,SAAA3lB,OAEA,OAAAA,MAAAG,cAAAH,MAAA4lB,eACA5lB,MAAAG,cAAAH,MAAA6lB,eACA7lB,MAAAklB,aAAA,IAAA/uB,OAAAwB,QAAAG,UAAAynB,QAAAU,wBAGA9pB,OAAAmV,QAAAxR,YAAA,WAEAid,aAAAY,uBAEAxhB,OAAAuQ,WAAAO,OACA/P,iBAAA4uB,0BACA3vB,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAA9gB,QACA/J,OAAAiK,cAAAjK,OAAAiP,aAAAG,WAAA,GACApP,OAAAiK,cAAAjK,OAAAiP,aAAAM,SAAA,GACAvP,OAAAoD,aAAAM,aAAA4lB,gBAAAE,SAAA,EAAA,GACA5lB,KAAA,SAAAnE,MAEA,IAAAA,KAAAJ,QAEAW,OAAAuQ,WAAAU,cAAApT,aAAAiC,mBAAA,qBAGAL,KAAAmwB,KAAA,SAAAvjB,MAEAA,KAAAwjB,uBAAApT,iBAAA/Q,eAAAW,KAAArC,cAAA,KACAqC,KAAAyjB,eAAArT,iBAAA4D,eAAAhU,KAAAyjB,kBAGA9vB,OAAAsX,MAAA4X,yBAAAzvB,MACAO,OAAAqvB,sBAAA,MAIArvB,OAAA+vB,cAAA,SAAA1jB,KAAA2jB,SAEAjvB,iBAAA8sB,oCACA7tB,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAA9gB,QACAsC,KAAAwjB,uBACA7vB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACAsmB,UAAA,GAGAjvB,iBAAA6qB,mBACA5rB,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAA9gB,QACAsC,KAAAwjB,uBACA7vB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6Y,IACA,GACA3W,KAAA,SAAAnE,MAEAA,KAAAosB,eAAAC,cAAAtS,KAAA,SAAAnN,MACA,EAAAA,KAAAmf,uBACAnf,KAAA+e,SAAA,WAIAhrB,UAAAkC,KAAAwoB,SAAA2B,cAAAhtB,KAAAosB,eAAAC,cAAA,GAAAV,SAAA/e,KAAAnH,KAAA8qB,SAAA,UAIAryB,WAAA,qBAAA,CAAA,SAAA,aAAA,eAAA,mBAAA,UAAA,YAAA,WAAA,eAAA,yBAAA,eAAA,YAAA,eAAA,mBAAA,WAAA,SAAAqC,OAAA5B,WAAAqX,aAAA1U,iBAAAJ,QAAAP,UAAAM,SAAAJ,aACA2vB,uBAAArP,aAAAhN,UAAA/V,aAAA4e,iBAAAqO,uBAGA9qB,OAAAgrB,sBAAAntB,aAAAiC,mBAAA,uBACAE,OAAA+qB,qBAAAltB,aAAAiC,mBAAA,sBACAE,OAAAwB,QAAAG,UAAAuqB,aAAA,EACAlsB,OAAAwB,QAAAG,UAAAuuB,iBAAA,EACAlwB,OAAAwB,QAAAG,UAAAwuB,kBAAA,EACAnwB,OAAAwB,QAAAG,UAAAyuB,gBAAA,EACApwB,OAAAwB,QAAAG,UAAA0uB,iBAAA,EACArwB,OAAAwB,QAAAG,UAAA2uB,cAAA,EACAtwB,OAAAwB,QAAAG,UAAA4uB,cAAA,EACAvwB,OAAAwB,QAAAG,UAAA6uB,iBAAA,EAEAxwB,OAAAwB,QAAAG,UAAA2pB,OAAA,GAEAtrB,OAAA0c,UAAA,GACA1c,OAAAywB,cAAA,EAEAzwB,OAAAsX,MAAA,GAEAtX,OAAA0wB,cAAA,CACAC,QAAAlU,iBAAAmU,YACAhD,OAAA,IACAiD,SAAA,EACAC,UAAA,GAGA9wB,OAAA+wB,SAAA,IAGA/wB,OAAAqJ,IAAA,WAAA,WAEAjL,WAAA4yB,iBAAA,KAGAhxB,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA6oB,iBAEAnpB,OAAAgD,KAAA,SAGAhD,OAAAwB,QAAAG,UAAAyqB,UAAA,EAAAhsB,UAAAmsB,OAAA/pB,QAAA,mBAEAxC,OAAAixB,gBAAA,EAEAxb,aAAAyW,eAEAlsB,OAAAwB,QAAAG,UAAAuqB,aAAAzW,aAAAyW,cAGAlsB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,qBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA/F,OAAAwB,QAAAG,UAAAkI,MAAA,GAEA7J,OAAAwB,QAAAG,UAAAynB,SAEAroB,iBAAA0oB,oBAAAzpB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA,GAAA9F,KACA,SAAAnE,MAEAO,OAAAwB,QAAAG,UAAAynB,QAAA,GACAppB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAAjqB,KAAAkqB,eACA3pB,OAAAwB,QAAAG,UAAAynB,QAAAQ,aAAAnqB,KAAAoqB,gBACA7pB,OAAAwB,QAAAG,UAAAynB,QAAAU,sBAAArqB,KAAAsqB,sBAEA/pB,OAAAwB,QAAAG,UAAAynB,QAAAY,wCAAAvqB,KAAAwqB,wCACAjqB,OAAAwB,QAAAG,UAAAynB,QAAAc,6CAAAzqB,KAAA0qB,6CACAnqB,OAAAwB,QAAAG,UAAAynB,QAAAgB,qDAAA3qB,KAAA4qB,qDAEArqB,OAAAoD,aAAAmnB,6BAAAvqB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,IACA1pB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,GAAAc,kBAGAxqB,OAAAoD,aAAAmnB,6BAEAvqB,OAAAoD,aAAAM,aAAAqC,QAAA,IACA3F,UAAAkC,KAAA,iCAUA,EAAAtC,OAAAwB,QAAAG,UAAAuqB,cAGAnrB,iBAAAmwB,wBACAlxB,OAAAwB,QAAAG,UAAAuqB,aACAlsB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6Y,GACAva,OAAAwB,QAAAG,UAAAyqB,UACAxoB,KAAA,SAAAnE,KAEAO,OAAAwB,QAAAG,UAAAkI,MAAApK,IAAAosB,eAAAA,eACA7rB,OAAAwB,QAAAG,UAAAupB,KAAAzrB,IAAAosB,eAAAC,cACA9rB,OAAAwB,QAAAG,UAAAyM,KAAA3O,IAAAosB,eAAAE,cACA/rB,OAAAwB,QAAAG,UAAAqqB,SAAAvsB,IAAAosB,eAAAI,kBAGAkF,IAAArG,SAAAsG,cAAA,QAAApxB,OAAAwB,QAAAG,UAAAupB,MACAlrB,OAAAoD,aAAAM,aAAA+qB,YAAA0C,IAAA1C,YACAzuB,OAAAoD,aAAAM,aAAAgrB,WAAAyC,IAAAzC,WAEAtwB,WAAAoc,WAAA,wBAAAxa,OAAAwB,QAAAG,UAAAyqB,SAAApsB,OAAAwB,QAAAG,UAAAuqB,cAEA,IAAAmF,SAAA,EACAr0B,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAAupB,KAAA,SAAAC,IAAA9Q,OAEA,UAAA8Q,IAAAC,WAEAprB,OAAAsxB,aACAD,SAAA,KAGAA,SAEArxB,OAAAgD,KAAA8nB,SAAAyG,eAAA,QAAAvxB,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,aAAAlsB,OAAAwB,QAAAG,UAAAyqB,UAAA,KAEA,WAEAhsB,UAAAkC,KAAA,gCAGAtC,OAAAoD,aAAAM,aAAA8tB,UAAA,IACAxxB,OAAAwB,QAAAG,UAAA8vB,WAAA,GAKA,SAAAC,mBAAAC,UAAA/hB,SAGA,IAAAgiB,UAAA,IAAAhiB,QAAAsI,MAAA,IAEA2Z,SAAAtkB,EAAAokB,WAAArf,KAAA,YAKA+T,MAAA9Y,EAAA,aACA8Y,MAAAyL,oBAAA,CACAnB,QAAAlU,iBAAAmU,YACAhD,OAAA,KACAiD,SAAA,IAGAxK,MAAA/T,KAAA,OAAA1C,QAAAsI,OACAmO,MAAA/T,KAAA,YAAA,SAAA1C,QAAAsI,OACAmO,MAAA/T,KAAA,UAAA,iCAAAsf,UAAA,KACAvL,MAAA/T,KAAA,QAAA,uBAEA,IAAAuf,WAAA,IAAAA,WAEAxL,MAAA/T,KAAA,YACA+T,MAAA/T,KAAA,iCAGA+T,MAAA0L,SAAAJ,WAMA,SAAAK,cAAA9Z,MAAA0V,QAEA,MAAA,4BAAA1V,MAAA,MAAA0V,OAAA,OAAAnR,iBAAAmU,YAAA,cApCA,IA+BAqB,UAAA,GACAC,SAAA,GAoLA,SAAAC,uBAAAP,UAAAQ,OAEA,OAAA,aAAAR,WACA5xB,OAAAwB,QAAAG,UAAAuuB,oBAMA,cAAA0B,WAEA,IAAAQ,MAAAC,uBAMA,cAAAT,WAEA,IAAAQ,MAAAE,oBAMA,aAAAV,WAEA,IAAAQ,MAAAG,qBAMA,aAAAX,WAEA,IAAAQ,MAAAI,iBAMA,kBAAAZ,WAEA,IAAAQ,MAAAK,yBAAA,IAAAL,MAAAM,+BASA,SAAAC,cAAA9a,GAEAA,EAAA+a,UAAAtb,MAAAub,KAAAC,KAEA9yB,OAAA+yB,wBArOA/yB,OAAAgzB,qBAAA,WAGAhzB,OAAAizB,aAAA,IAAA3b,MAAA7X,KAAAkZ,WAAA,CACAua,OAAA,CACAd,MAAA,CACAe,GAAA,cACAC,OAAA,CACAC,YAAA,CAAAxrB,KAAA,SAAA+Q,UAAA,GACA0a,eAAA,CAAAzrB,KAAA,SAAA+Q,UAAA,GACA2a,mBAAA,CAAA1rB,KAAA,SAAA+Q,UAAA,GACA4a,SAAA,CAAA3rB,KAAA,SAAA+lB,OAAA,OAAAhV,UAAA,GACA6a,UAAA,CAAA5rB,KAAA,SAAA+Q,UAAA,GACA8a,UAAA,CAAA7rB,KAAA,SAAA+Q,UAAA,GACA+a,SAAA,CAAA9rB,KAAA,SAAA+Q,UAAA,GACAgb,SAAA,CAAA/rB,KAAA,SAAA+Q,UAAA,GACAib,UAAA,CAAAhsB,KAAA,SAAA+Q,UAAA,MAIAnZ,KAAAO,OAAAwB,QAAAG,UAAA2pB,OACAzhB,OAAA,IAGA7J,OAAA8zB,kBAAA,CACApb,WAAA1Y,OAAAizB,aACAhb,QAAA,CACA,CACAxH,MAAA5S,aAAAiC,mBAAA,QACAmY,QAAA,CACA,CACAC,MAAA,cACAzH,MAAA5S,aAAAiC,mBAAA,QACAqY,MAAA,GACA5F,WAAA,CAAAwhB,aAAA,cAAA3b,MAAA,sBAEA,CACAF,MAAA,iBACAzH,MAAA5S,aAAAiC,mBAAA,OACAqY,MAAA,GACA5F,WAAA,CAAAwhB,aAAA,eAAA3b,MAAA,sBAEA,CACAF,MAAA,qBACAzH,MAAA5S,aAAAiC,mBAAA,eACAyS,WAAA,CACAwhB,aAAA,qBACA3b,MAAA,oCAKA,CACAF,MAAA,WACAC,MAAA,GACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,WAAA,MACAiC,eAAA,sCAAAp2B,aAAAiC,mBAAA,eAAA,UACAyS,WAAA,CAAAwhB,aAAA,WAAA3b,MAAA,kBAAAyZ,SAAA,QACAqC,QAAAl0B,OAAAwB,QAAAG,UAAAuuB,iBAEA,CACAzf,MAAA5S,aAAAiC,mBAAA,WACAmY,QAAA,CACA,CACAC,MAAA,YACAzH,MAAA5S,aAAAiC,mBAAA,eACAqY,MAAA,IACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,YAAA,MACAzf,WAAA,CAAAwhB,aAAA,YAAA3b,MAAA,kBAAAyZ,SAAA,QACAqC,QAAAl0B,OAAAwB,QAAAG,UAAAwuB,kBAEA,CACAjY,MAAA,YACAzH,MAAA5S,aAAAiC,mBAAA,OACAqY,MAAA,IACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,YAAA,MACAzf,WAAA,CAAAwhB,aAAA,YAAA3b,MAAA,kBAAAyZ,SAAA,QACAqC,QAAAl0B,OAAAwB,QAAAG,UAAAyuB,kBAIA,CACA3f,MAAA5S,aAAAiC,mBAAA,SACAmY,QAAA,CACA,CACAC,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,eACAqY,MAAA,IACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,WAAA,MACAzf,WAAA,CAAAwhB,aAAA,WAAA3b,MAAA,kBAAAyZ,SAAA,QACAqC,QAAAl0B,OAAAwB,QAAAG,UAAA0uB,iBAEA,CACAnY,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,OACAqY,MAAA,IACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,WAAA,MACAzf,WAAA,CAAAwhB,aAAA,WAAA3b,MAAA,kBAAAyZ,SAAA,QACAqC,QAAAl0B,OAAAwB,QAAAG,UAAA2uB,gBAIA,CACApY,MAAA,YACAC,MAAA,IACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,YAAA,MACAiC,eAAA,sCAAAp2B,aAAAiC,mBAAA,gBAAA,UACAyS,WAAA,CAAAwhB,aAAA,YAAA3b,MAAA,qBACA8b,QAAAl0B,OAAAwB,QAAAG,UAAA4uB,cAEA,CACA9X,SAAA,0FACAwb,eAAA,sCAAAp2B,aAAAiC,mBAAA,cAAA,UACAqY,MAAA,GACA5F,WAAA,CAAAwhB,aAAA,iBACAG,QAAAl0B,OAAAwB,QAAAG,UAAA6uB,iBAEA,CACA/X,SAAA,wFACAwb,eAAA,sCAAAp2B,aAAAiC,mBAAA,YAAA,UACAqY,MAAA,GACA5F,WAAA,CAAAwhB,aAAA,iBAGA/a,UAAA,EACAE,UAAA,EACAN,UAAA,EACAG,aAAA,EACAhK,YAAA,EACAolB,YAAA,SAAAtc,SACArO,QAAAqO,QAAA2V,OAAAhkB,WAAA,GACAA,QAAA,KACAyoB,UAAAzoB,QAAA6Q,QACA6X,SAAA1oB,QAAA4qB,SAAA/Z,UAGAga,UAAA,SAAAxc,GAEA7X,OAAAs0B,mBAEAC,KAAA,SAAA1c,MAEA,IAAA2c,YAAA3c,KAAA8Z,UAAAnY,KAAA,SAOA2Y,uBANAqC,YAAAliB,KAAA,QAMAuF,KAAAua,QAMAoC,YAAAzc,SACAyc,YAAAC,SAAA,0BALAD,YAAAE,KAAA,YAAA,GAQAlmB,KAAAjB,EAAA,eAAA9N,KAAA,aACAk1B,YAAApnB,EAAAiB,KAAAomB,MAAAC,WAAArb,KAAA,iBAEAhL,KAAAhF,QAAAmrB,gBAiEA30B,OAAA80B,oBAAA,SAAAhd,SAAA8Z,WAEA,aAAAA,WAEA5xB,OAAA+0B,aAAAjd,UAGA,cAAA8Z,WAEA5xB,OAAAg1B,gBAAAld,UAGA,cAAA8Z,WAEA5xB,OAAAi1B,gBAAAnd,UAGA,aAAA8Z,WAEA5xB,OAAAk1B,eAAApd,UAGA,aAAA8Z,WAEA5xB,OAAAm1B,eAAArd,WAIA9X,OAAAs0B,gBAAA,WAGA/mB,EAAA,kBAAAqiB,KAAA,SAAAvV,MAAA+a,KAGA,IAEAtd,SAFA,EAAAuC,QAEAvC,SAAAvK,EAAA,eAAA9N,KAAA,aAAAqY,SAAAnF,MAEApF,EAAA6nB,KACA5b,KAAA,MAEAoW,KAAA,SAAAvV,MAAAgb,WAEA,IAAAC,KAAA/nB,EAAA8nB,WACAzD,UAAA0D,KAAAhjB,KAAA,cACA6f,uBAAAP,UAAA9Z,YAEAwd,KAAAb,SAAA,qBACAa,KAAAhnB,YAAA,mBAEA,kBAAAsjB,WAEA0D,KAAA9b,KAAA,KAAA1I,QAWA9Q,OAAAu1B,wCAAAD,YAOAt1B,OAAAw1B,uBAAA,WAGAx1B,OAAAwB,QAAAG,UAAA2pB,OAAAmK,KAAA,SAAAC,OAEA,OAAA,EAAAA,MAAArC,eAKArzB,OAAAsX,MAAAqe,WAAAC,WAAA,eAGA51B,OAAAwB,QAAAG,UAAAuuB,iBAEAlwB,OAAAsX,MAAAqe,WAAAC,WAAA,aAIA51B,OAAAqJ,IAAA,qBAAA,SAAAC,MAAAusB,QAGA,IAAArnB,KAAAjB,EAAA,eAAA9N,KAAA,aAMAo2B,SAAA71B,OAAAsX,MAAAqe,aAEAnnB,KAAAkK,WAAAjZ,KAAAO,OAAAwB,QAAAG,UAAA2pB,QACA/d,EAAA,eAAAiM,KAAA,SAAAsc,GAAA,UAAAnD,eACA3yB,OAAAw1B,yBAEAx1B,OAAA+1B,yBAIA/1B,OAAAu1B,wCAAA,SAAAD,MAGA,IAAA1D,UAAA0D,KAAAhjB,KAAA,cAEAgjB,KAAAU,KAAA,CACA7C,GAAA,QAAAvB,UACA7U,QAAA,CACArM,KAAA,IAEAulB,SAAA,CACAC,OAAA,CACA3vB,GAAA,GAAA4vB,GAAA,KAGA9a,MAAA,CACA+a,QAAA,kBAIAd,KAAAU,KAAA,WAAA,IAIAh2B,OAAAq2B,wCAAA,SAAAC,KAAA1E,YAAA2E,cAAAC,iBAGA,IAAAC,IAAA,EAEAC,UAAA,EAAAH,cAAAl3B,OACAs3B,YAAA,EAAAH,gBAAAn3B,OAEAi2B,KAAAgB,KAAA9c,KAAA,gBAAAoY,YAAA,MAMA,GAHA0D,KAAAhnB,YAAA,YACAgnB,KAAAhnB,YAAA,cAEAooB,WAAAC,YACA,CAEAC,YAAArpB,EAAA,eAEA,GAAAmpB,UACA,CAEA,IADA,IAAAtU,UAAA7U,EAAA,oCAAA1P,aAAAiC,mBAAA,SAAA,YACA22B,IAAA,EAAAA,IAAAF,cAAAl3B,OAAAo3B,MAEArU,UAAAyU,OAAA,wCAAAN,cAAAE,KAAA,SAGAG,YAAAC,OAAAzU,WAGA,GAAAuU,YACA,CACA,IAAAG,YAAAvpB,EAAA,sCAAA1P,aAAAiC,mBAAA,WAAA,YACA,IAAA22B,IAAA,EAAAA,IAAAD,gBAAAn3B,OAAAo3B,MAEAK,YAAAD,OAAA,wCAAAL,gBAAAC,KAAA,SAGAG,YAAAC,OAAAC,aAGAxB,KAAAU,KAAA,SAAA,eAAAY,aAEAF,WAEApB,KAAAb,SAAA,YACAa,KAAAU,KAAA,SAAA,gBAAA,wBAGAV,KAAAb,SAAA,cACAa,KAAAU,KAAA,SAAA,gBAAA,yBAGAV,KAAAU,KAAA,WAAA,QAIAV,KAAAU,KAAA,WAAA,IAIA,IAAAe,6BAEA,SAAArB,MAAAsB,OAEA,IAsBAC,eAtBAC,SAAA,EAEAZ,KAAA/oB,EAAA,eAAA9N,KAAA,aAAAm1B,MAAApb,KAAA,gBAAAkc,MAAAyB,IAAA,MAGAn3B,OAAAwB,QAAAG,UAAAuuB,kBAGAkH,eAAA,GAAAC,iBAAA,IAGAr6B,QAAAkF,yBAAAwzB,MAAAlC,WAAA,IAAAkC,MAAAlC,WAAA,EAAAkC,MAAAhC,WAAA,EAAAgC,MAAA9B,WAEAsD,SAAA,EAEAE,eAAAl5B,KAAAL,aAAAiC,mBAAA,kBAIAE,OAAAwB,QAAAG,UAAAuuB,iBAAAlzB,QAAAkF,yBAAAwzB,MAAA7B,YAAA72B,QAAAkF,yBAAAwzB,MAAA4B,kBAGAL,eAAAvB,MAAAlC,SAAAkC,MAAA9B,SAEA2D,KAAAC,IAAAP,eAAAvB,MAAAhC,WAAA1zB,OAAAwB,QAAAG,UAAAynB,QAAAgB,sDAAA,EAAA6M,gBAAA,EAAAvB,MAAAhC,WAAA,EAAA1zB,OAAAwB,QAAAG,UAAAynB,QAAAgB,sDAEAiN,iBAAAn5B,KAAAL,aAAAiC,mBAAA,yBAGAy3B,KAAAC,IAAA9B,MAAAlC,SAAAkC,MAAA7B,WAAA7zB,OAAAwB,QAAAG,UAAAynB,QAAAc,8CAAA,EAAAwL,MAAAlC,UAAA,EAAAkC,MAAA7B,WAAA,EAAA7zB,OAAAwB,QAAAG,UAAAynB,QAAAc,8CAEAmN,iBAAAn5B,KAAAL,aAAAiC,mBAAA,yBAIAE,OAAAq2B,wCAAAC,KAAA,WAAAc,eAAAC,mBAIA,IAAAI,eAAA,GAAAC,iBAAA,GACA,EAAAhC,MAAA/B,WAEA+B,MAAA/B,SAAA+B,MAAAiC,YAAA33B,OAAAwB,QAAAG,UAAA6uB,iBAEAkH,iBAAAx5B,KAAAL,aAAAiC,mBAAA,gBAEA41B,MAAA/B,UAAA3zB,OAAA+wB,WACAmG,SAAA,EACAO,eAAAv5B,KAAAL,aAAAiC,mBAAA,uBAGAE,OAAAq2B,wCAAAC,KAAA,WAAAmB,eAAAC,kBAGAE,eAAA,GAAAC,iBAAA,GACA,EAAAnC,MAAAjC,YAEAiC,MAAAjC,UAAAiC,MAAAoC,aAAA93B,OAAAwB,QAAAG,UAAA6uB,iBAEAqH,iBAAA35B,KAAAL,aAAAiC,mBAAA,gBAEA41B,MAAAjC,WAAAzzB,OAAA+wB,WACAmG,SAAA,EACAU,eAAA15B,KAAAL,aAAAiC,mBAAA,yBAGAE,OAAAq2B,wCAAAC,KAAA,YAAAsB,eAAAC,kBAGAE,iBAAA,GAUA,OATA/6B,QAAAkF,yBAAAwzB,MAAA7B,YAAA72B,QAAAkF,yBAAAwzB,MAAA4B,iBAEAC,KAAAC,IAAA9B,MAAA7B,UAAA6B,MAAA4B,gBAAAt3B,OAAAwB,QAAAG,UAAAynB,QAAAY,yCAAA,EAAA0L,MAAA7B,WAAA,EAAA6B,MAAA4B,gBAAA,EAAAt3B,OAAAwB,QAAAG,UAAAynB,QAAAY,yCAEA+N,iBAAA75B,KAAAL,aAAAiC,mBAAA,2BAGAE,OAAAq2B,wCAAAC,KAAA,YARA,GAQAyB,kBAEAb,SAIAl3B,OAAAg4B,eAAA,WAGA,IAAAd,SAAA,EAEAvB,WAAApoB,EAAA,eAAA9N,KAAA,aAOA,OALAzC,QAAAmP,QAAAwpB,WAAAjd,WAAAjZ,OAAA,SAAAi2B,OAEAwB,QAAAA,SAAAH,6BAAArB,SAGAwB,SAGA,IAAAe,UAAA75B,WAAAiL,IAAA,gCAAA,SAAAC,MAAA7J,MAEAO,OAAAoD,aAAAM,aAAA/B,UAAA2pB,OACAtrB,OAAAsxB,aACAtxB,OAAAoD,aAAAM,aAAA/B,UAAA4pB,MAEAvrB,OAAAwB,QAAAG,UAAAyqB,SACApsB,OAAAgD,KAAA,iCAAAhD,OAAAwB,QAAAG,UAAAuqB,cAEAlsB,OAAAgD,KAAA,kCAAAhD,OAAAwB,QAAAG,UAAAuqB,cAEAlsB,OAAAoD,aAAAM,aAAA/B,UAAA0pB,WAEArrB,OAAAwB,QAAAG,UAAAyqB,SACApsB,OAAAgD,KAAA,sCAAAhD,OAAAwB,QAAAG,UAAAuqB,cAEAlsB,OAAAgD,KAAA,uCAAAhD,OAAAwB,QAAAG,UAAAuqB,cAIAlsB,OAAAwB,QAAAG,UAAAyqB,SACApsB,OAAAgD,KAAA,uCAAAhD,OAAAwB,QAAAG,UAAAuqB,cAEAlsB,OAAAgD,KAAA,wCAAAhD,OAAAwB,QAAAG,UAAAuqB,gBAKAlsB,OAAAqJ,IAAA,WAAA4uB,WAEAj4B,OAAAsxB,WAAA,WAEAtxB,OAAA2S,KAEA3V,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,SAAAkB,KAAAvQ,OAEAuQ,KAAA7gB,UAAA/J,OAAAwB,QAAAG,UAAAkI,MAAAE,UACA/J,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAAD,QAEAqF,uBAAAiI,mBACAl4B,OAAAwB,QAAAG,UAAAkI,MAAA3E,IACAlF,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAAsN,MACAn4B,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,IACApG,KAAA,SAAAnE,MAMAO,OAAAwB,QAAAG,UAAA2pB,OAAA7rB,KAAA24B,gBACAp4B,OAAAwB,QAAAG,UAAA02B,qBAAA54B,KAAA64B,qBACAt4B,OAAAwB,QAAAG,UAAAuuB,gBAAAzwB,KAAA84B,gBACAv4B,OAAAwB,QAAAG,UAAAwuB,iBAAA1wB,KAAA+4B,iBACAx4B,OAAAwB,QAAAG,UAAAyuB,eAAA3wB,KAAAg5B,eACAz4B,OAAAwB,QAAAG,UAAA0uB,gBAAA5wB,KAAAi5B,gBACA14B,OAAAwB,QAAAG,UAAA2uB,aAAA7wB,KAAAk5B,aACA34B,OAAAwB,QAAAG,UAAA4uB,aAAA9wB,KAAAm5B,aACA54B,OAAAwB,QAAAG,UAAA6uB,gBAAA/wB,KAAAo5B,gBAEA74B,OAAAgzB,uBAEAhzB,OAAAywB,cAAA,EAEA,EAAAzwB,OAAAwB,QAAAG,UAAA2pB,OAAAjsB,SACAW,OAAAixB,iBAAAjxB,OAAAwB,QAAAG,UAAAynB,QAAAU,uBAAA9pB,OAAAwB,QAAAG,UAAA2pB,OAAA,GAAAwN,WAAA,IAAA94B,OAAAwB,QAAAG,UAAA2pB,OAAA,GAAAyN,YA2BAC,UAAA56B,WAAAiL,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA,UAAAA,OAAA3tB,OAAAwB,QAAAG,UAAAyqB,UAAApsB,OAAAixB,gBAAAjxB,OAAAizB,aAAAgG,cAEAj5B,OAAAk5B,WAAA,IAAA,GAAA,KAGAl5B,OAAAqJ,IAAA,WAAA2vB,WAEAh5B,OAAAuJ,KAAA,SAAAjH,OAEAtC,OAAAwB,QAAAG,UAAAyqB,UAAApsB,OAAAixB,gBAAAjxB,OAAAizB,aAAAgG,aAEAj5B,OAAAk5B,WAAA52B,MAAA,GAAA,GAEAtC,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,GAAA,KAIAlsB,OAAAoK,SAAA,SAAA9H,OAEAtC,OAAAwB,QAAAG,UAAAyqB,UAAApsB,OAAAixB,gBAAAjxB,OAAAizB,aAAAgG,aAEAj5B,OAAAk5B,WAAA52B,MAAA,GAAA,GAAA,GAEAtC,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,GAAA,KAIAlsB,OAAAwoB,MAAA,YAEAxoB,OAAAwB,QAAAG,UAAAyqB,UAAApsB,OAAAixB,eAEAjxB,OAAAk5B,WAAA,IAAA,GAAA,GAGAl5B,OAAAgD,KAAA,+BAKAhD,OAAAm5B,OAAA,WAEAn5B,OAAAk5B,WAAA,IAAA,GAAA,IAGAl5B,OAAAo5B,gBAAA,SAAAD,QAEA,IAAAE,wBAAAr5B,OAAAwB,QAAAG,UAAAupB,KAAA,GAGA,IAAAmO,wBAAAC,SAAA,IAAAD,wBAAAE,YAQAzvB,wBACA,CACAC,QAAA/J,OAAAwB,QAAAG,UAAAkI,MAAAE,QACAC,cAAAhK,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,GACAL,aAAA3J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACAO,gBAAAivB,OACAhvB,oBAAAnK,OAAAwB,QAAAG,UAAAkI,MAAA2vB,kBAEAz4B,iBAAAmJ,gBAAAJ,yBAAAlG,KAAA,SAAAnE,MAEA05B,QACAn5B,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAAkI,MAAAE,QAAA,IAAA/J,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,OAjBAtJ,SAAA,WACAV,OAAAuQ,WAAAS,kBACA,MAmBAhR,OAAAk5B,WAAA,SAAA52B,KAAA62B,OAAA3Q,MAAAiR,YAEA,IAOAC,qBAPA15B,OAAAg4B,mBAIAh4B,OAAAmO,gBAAAnO,OAAA25B,YACAF,WAAAA,aAAA,EAEAC,qBACA,CACAx0B,IAAAlF,OAAAwB,QAAAG,UAAA2pB,OAAA,GAAAsO,WACA7vB,QAAA/J,OAAAwB,QAAAG,UAAAkI,MAAAE,QACA8vB,SAAA75B,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAAgP,SACAC,WAAA95B,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAAsN,MACA4B,kBAAA/5B,OAAAwB,QAAAG,UAAAkI,MAAA3E,IACA8E,cAAAhK,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,GACAgwB,SAAAh6B,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACA+P,UAAA,EACAugB,GAAAj6B,OAAAwB,QAAAG,UAAA2pB,OAAA,GAAA4O,gBACAxO,OAAA1rB,OAAAoD,aAAAM,aAAA/B,UAAA2pB,OAAApmB,KAGAlI,QAAAm9B,KAAAn6B,OAAAizB,aAAAxzB,OAAA26B,SAAAp6B,OAAAwB,QAAAG,UAAA2pB,QAGA2E,uBAAAoK,aAAAr6B,OAAAwB,QAAAG,UAAA2pB,QAEA2E,uBAAAqK,oBAAAZ,qBAAA15B,OAAAwB,QAAAG,UAAA2pB,QAAA1nB,KAAA,SAAAnE,MACA,IAAA+O,KAAAjB,EAAA,eAAA9N,KAAA,aACAO,OAAAwB,QAAAG,UAAA2pB,OAAA7rB,KAAA24B,gBACA5pB,OACAA,KAAAkK,WAAAjZ,KAAAA,KAAA24B,iBAEAp4B,OAAAg4B,kBAGAh4B,OAAAwB,QAAAG,UAAAupB,KAAA,GAAAoO,SAAA,EAEAH,OACAn5B,OAAAo5B,iBAAA,GAGA5Q,MACAxoB,OAAAo5B,iBAAA,GAGA,EAAA92B,KAAAjD,QACAW,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,EAAAuN,iBAKAz5B,OAAA+0B,aAAA,SAAAjd,UAEAmY,uBAAAsK,cAAAziB,UACAmY,uBAAAuK,YAAA1iB,SACA9X,OAAAwB,QAAAG,UAAA02B,qBACAr4B,OAAAwB,QAAAG,UAAAqqB,SAAAyO,0BACAz6B,OAAAwB,QAAAG,UAAAqqB,SAAA0O,0BACA16B,OAAA+1B,uBAGA/1B,OAAAg1B,gBAAA,SAAAld,UAEAmY,uBAAA0K,0BAAA7iB,UACAmY,uBAAAuK,YAAA1iB,SACA9X,OAAAwB,QAAAG,UAAA02B,qBACAr4B,OAAAwB,QAAAG,UAAAqqB,SAAAyO,0BACAz6B,OAAAwB,QAAAG,UAAAqqB,SAAA0O,yBACA16B,OAAAwB,QAAAG,UAAAuuB,iBACAlwB,OAAA+1B,uBAGA/1B,OAAAi1B,gBAAA,SAAAnd,UAEAmY,uBAAAuK,YAAA1iB,SACA9X,OAAAwB,QAAAG,UAAA02B,qBACAr4B,OAAAwB,QAAAG,UAAAqqB,SAAAyO,0BACAz6B,OAAAwB,QAAAG,UAAAqqB,SAAA0O,yBACA16B,OAAAwB,QAAAG,UAAAuuB,iBACAlwB,OAAA+1B,uBAGA/1B,OAAAm1B,eAAA,SAAArd,UAEAmY,uBAAAsK,cAAAziB,UACAmY,uBAAAuK,YAAA1iB,SACA9X,OAAAwB,QAAAG,UAAA02B,qBACAr4B,OAAAwB,QAAAG,UAAAqqB,SAAAyO,0BACAz6B,OAAAwB,QAAAG,UAAAqqB,SAAA0O,yBACA16B,OAAAwB,QAAAG,UAAAuuB,iBACAlwB,OAAA+1B,uBAGA/1B,OAAAk1B,eAAA,SAAApd,UAEAmY,uBAAA2K,yBAAA9iB,UACAmY,uBAAAsK,cAAAziB,UACAmY,uBAAAuK,YAAA1iB,SACA9X,OAAAwB,QAAAG,UAAA02B,qBACAr4B,OAAAwB,QAAAG,UAAAqqB,SAAAyO,0BACAz6B,OAAAwB,QAAAG,UAAAqqB,SAAA0O,yBACA16B,OAAAwB,QAAAG,UAAAuuB,iBACAlwB,OAAA+1B,uBAGA/1B,OAAA+1B,oBAAA,WAEA,IAAAJ,WAAApoB,EAAA,eAAA9N,KAAA,aAEAO,OAAAwB,QAAAG,UAAAk5B,YAAA5K,uBAAA6K,0BAAAnF,WAAAjd,WAAAjZ,QACAO,OAAAwB,QAAAG,UAAAo5B,WAAA9K,uBAAA+K,wBAAArF,WAAAjd,WAAAjZ,QAGAk2B,WAAAjd,WAAAjZ,KAAAk2B,WAAAjd,WAAAjZ,SAGAO,OAAA+yB,sBAAA,WACA,IAGAvpB,QAMAyxB,SATAtF,WAAApoB,EAAA,eAAA9N,KAAA,aAEA0L,MAAA8mB,aACAzoB,QAAAmsB,WAAAnsB,QAAAmsB,WAAAf,MAAAC,WAAAqG,GAAAhJ,UAAA2C,WAAAqG,GAAAjJ,YAEAC,SAAAD,UAAA,KAEAzoB,QAAA2xB,SAAA,sBAEAF,SAAAzxB,QAAA4xB,QAAA,qBACA,KAGAH,SAAAzxB,QAAA4qB,SAAA7qB,OAAAsrB,SAAA,2BAEAc,WAAAnsB,QAAAyxB,UACAtF,WAAA0F,SAAAJ,SAAA,OAKAj7B,OAAAs7B,eAAA,SAAAxjB,UAGA9X,OAAA0c,UAAA5E,SAAAA,SACA9X,OAAA0c,UAAA6e,YAAAzjB,SAAAggB,YACA93B,OAAA0c,UAAA8e,WAAA1jB,SAAA6f,WACA33B,OAAA0c,UAAA+e,cAAA,IAAA3jB,SAAA2a,wBACAzyB,OAAA0c,UAAAgf,eAAA,IAAA5jB,SAAA4a,0BACA1yB,OAAA0c,UAAA7U,KAAA,EACA7H,OAAA0c,UAAA3G,OAAAlY,aAAAiC,mBAAA,cACAE,OAAA0c,UAAAM,OAAA,GAGAhd,OAAA27B,aAAA,SAAA7jB,UAEA9X,OAAA0c,UAAA5E,SAAAA,SACA9X,OAAA0c,UAAA6e,YAAAzjB,SAAA8jB,WACA57B,OAAA0c,UAAA8e,WAAA1jB,SAAA+jB,UACA77B,OAAA0c,UAAA+e,eAAA,EACAz7B,OAAA0c,UAAAgf,gBAAA,EACA17B,OAAA0c,UAAA7U,KAAA,EACA7H,OAAA0c,UAAA3G,OAAAlY,aAAAiC,mBAAA,YACAE,OAAA0c,UAAAM,OAAA,GAGAhd,OAAA87B,gBAAA,WAEA,GAAA97B,OAAA0c,UAAA6e,YAAA,GAAAv7B,OAAA0c,UAAA8e,WAAA,EAEAx7B,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,cAGA,GAAAE,OAAA0c,UAAA8e,YAAAx7B,OAAA+wB,SACA/wB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,oBAAA,cAGA,GAAAE,OAAA0c,UAAA6e,aAAAv7B,OAAA+wB,SACA/wB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,sBAAA,aADA,CAKA,OAAAE,OAAA0c,UAAA7U,MAEA,KAAA,EACA7H,OAAA0c,UAAA5E,SAAAikB,oBACA/7B,OAAA0c,UAAA5E,SAAAggB,cAAA93B,OAAA0c,UAAA6e,YACAv7B,OAAA0c,UAAA5E,SAAAggB,YAAA93B,OAAA0c,UAAA6e,YACAv7B,OAAA0c,UAAA5E,SAAAkkB,mBACAh8B,OAAA0c,UAAA5E,SAAA6f,aAAA33B,OAAA0c,UAAA8e,WACAx7B,OAAA0c,UAAA5E,SAAA6f,WAAA33B,OAAA0c,UAAA8e,WACAx7B,OAAAg1B,gBAAAh1B,OAAA0c,UAAA5E,UACA9X,OAAAk1B,eAAAl1B,OAAA0c,UAAA5E,UACA,MAEA,KAAA,EACA9X,OAAA0c,UAAA5E,SAAA8jB,WAAA57B,OAAA0c,UAAA6e,YACAv7B,OAAA0c,UAAA5E,SAAA+jB,UAAA77B,OAAA0c,UAAA8e,WACAx7B,OAAA+1B,sBAIA/1B,OAAA0c,UAAA,GACA1c,OAAA0c,UAAAM,OAAA,OAGArf,WAAA,0BAAA,CAAA,SAAA,aAAA,eAAA,mBAAA,UAAA,WAAA,wBAAA,YAAA,eAAA,eAAA,YAAA,eAAA,mBAAA,WAAA,SAAAqC,OAAA5B,WAAAqX,aAAA1U,iBAAAJ,QAAAD,SAAAu7B,sBACA77B,UAAAE,aAAAsgB,aAAAhN,UAAA/V,aAAA4e,iBAAAqO,uBAIA9qB,OAAAsX,MAAA,GAEAtX,OAAAwB,QAAAG,UAAAuqB,aAAA,EACAlsB,OAAA0c,UAAA,GACA1c,OAAAk8B,aAAA,EACAl8B,OAAAm8B,qBAAA,EAGAn8B,OAAAqJ,IAAA,WAAA,WAEAjL,WAAA4yB,iBAAA,KAGAhxB,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA6oB,iBAEAnpB,OAAAgD,KAAA,SAGAhD,OAAAwB,QAAAxB,OAAAwB,SAAA,GAEAxB,OAAAwB,QAAAG,UAAAyqB,UAAA,EAAAhsB,UAAAmsB,OAAA/pB,QAAA,wBACAiT,aAAAyW,eAEAlsB,OAAAwB,QAAAG,UAAAuqB,aAAAzW,aAAAyW,cAEAlsB,OAAAwB,QAAAG,UAAAy6B,cAAA,GACAp8B,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,qBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAwB,QAAAG,UAAAkI,MAAA,GACA7J,OAAAwB,QAAAG,UAAA4pB,MAAA,GACAvrB,OAAAwB,QAAAG,UAAA06B,YAAA,GAEAr8B,OAAAwB,QAAAG,UAAAynB,SAEAroB,iBAAA0oB,oBAAAzpB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA,GAAA9F,KACA,SAAAnE,MAEAO,OAAAwB,QAAAG,UAAAynB,QAAA,GACAppB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAAjqB,KAAAkqB,eACA3pB,OAAAwB,QAAAG,UAAAynB,QAAAQ,aAAAnqB,KAAAoqB,gBACA7pB,OAAAwB,QAAAG,UAAAynB,QAAAU,sBAAArqB,KAAAsqB,sBAEA/pB,OAAAwB,QAAAG,UAAAynB,QAAAY,wCAAAvqB,KAAAwqB,wCACAjqB,OAAAwB,QAAAG,UAAAynB,QAAAc,6CAAAzqB,KAAA0qB,6CACAnqB,OAAAwB,QAAAG,UAAAynB,QAAAgB,qDAAA3qB,KAAA4qB,qDAEArqB,OAAAoD,aAAAmnB,6BAAAvqB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,IACA1pB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,GAAAc,kBAGAxqB,OAAAoD,aAAAmnB,6BAEAvqB,OAAAoD,aAAAM,aAAAqC,QAAA,IACA3F,UAAAkC,KAAA,iCAMA,EAAAtC,OAAAwB,QAAAG,UAAAuqB,cAGAnrB,iBAAAmwB,wBACAlxB,OAAAwB,QAAAG,UAAAuqB,aACAlsB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6Y,GACAva,OAAAwB,QAAAG,UAAAyqB,UACAxoB,KAAA,SAAAnE,KAEAO,OAAAwB,QAAAG,UAAAkI,MAAApK,IAAAosB,eAAAA,eACA7rB,OAAAwB,QAAAG,UAAAupB,KAAAzrB,IAAAosB,eAAAC,cACA9rB,OAAAwB,QAAAG,UAAAyM,KAAA3O,IAAAosB,eAAAE,cACA/rB,OAAAwB,QAAAG,UAAAqqB,SAAAvsB,IAAAosB,eAAAI,kBAGAkF,IAAArG,SAAAsG,cAAA,QAAApxB,OAAAwB,QAAAG,UAAAupB,MACAlrB,OAAAoD,aAAAM,aAAA+qB,YAAA0C,IAAA1C,YACAzuB,OAAAoD,aAAAM,aAAAgrB,WAAAyC,IAAAzC,WAEAtwB,WAAAoc,WAAA,wBAAAxa,OAAAwB,QAAAG,UAAAyqB,SAAApsB,OAAAwB,QAAAG,UAAAuqB,cAEA,IAAAmF,SAAA,EACAr0B,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAAupB,KAAA,SAAAC,IAAA9Q,OAEA,UAAA8Q,IAAAC,WAEAprB,OAAAs8B,WAAA,GACAjL,SAAA,KAGAA,SAEArxB,OAAAgD,KAAA8nB,SAAAyG,eAAA,QAAAvxB,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,aAAAlsB,OAAAwB,QAAAG,UAAAyqB,UAAA,KAEA,WAEAhsB,UAAAkC,KAAA,gCAMAtC,OAAAoD,aAAAM,aAAA8tB,UAAA,IACAxxB,OAAAwB,QAAAG,UAAA46B,UAAA,GAGA,IAAAtE,UAAA75B,WAAAiL,IAAA,gCAAA,SAAAC,MAAA7J,MAEAO,OAAAoD,aAAAM,aAAA/B,UAAA4pB,MACAvrB,OAAAs8B,WAAA,GAGAt8B,OAAAwB,QAAAG,UAAAyqB,SACApsB,OAAAgD,KAAA,sCAAAhD,OAAAwB,QAAAG,UAAAuqB,cAEAlsB,OAAAgD,KAAA,uCAAAhD,OAAAwB,QAAAG,UAAAuqB,gBAKAlsB,OAAAqJ,IAAA,WAAA4uB,WAEA,SAAAvG,mBAAAC,UAAA/hB,SAGA,IAAAgiB,UAAA,IAAAhiB,QAAAsI,MAAA,IAEA2Z,SAAAtkB,EAAAokB,WAAArf,KAAA,kBAIA,IAAAuf,WAAA,IAAAA,SAEAtkB,EAAA,4BAAAqC,QAAAsI,MAAA,sBAAAtI,QAAAsI,MAAA,4CAAA0Z,UAAA,kCAAA/zB,aAAAiC,mBAAA,YAAA,OAUAyN,EAAA,4BAAAqC,QAAAsI,MAAA,sBAAAtI,QAAAsI,MAAA,4CAAA0Z,UAAA,UATAG,SAAAJ,WACAG,oBAAA,CACAjB,SAAA,EACAjD,OAAA,IACA4O,IAAA,EACA1L,UAAA,IAgBA,SAAAkB,cAAA9Z,MAAA0V,QAEA,MAAA,4BAAA1V,MAAA,MAAA0V,OAAA,OAAAnR,iBAAAmU,YAAA,cAGA,SAAA6L,mBAAA9K,UAAA/hB,SAEArC,EAAA,gBAAAqC,QAAAsI,MAAA,qEAAAtI,QAAAsI,MAAA,yDAEA6Z,SAAAJ,WACA+K,cAAA,CACAvJ,GAAA,eACAza,WAAA,CACAjZ,KAAAO,OAAAwB,QAAAG,UAAAg7B,cAEAvW,OAAA,WACAwW,cAAA/+B,aAAAiC,mBAAA,OACA+8B,eAAA,QACAjlB,OAAA,SAAAC,MAGA,IAAAilB,gBAAAvvB,EAAAsK,KAAA2V,OAAA1b,QAAA,IAAAsiB,SAAA5a,KAAA,oBAGAjM,EAAAsK,KAAA2V,OAAA1b,QAAA,IAAAqpB,SAAA,aAEA2B,gBAAArI,SAAA,wBAGAqI,gBAAAxuB,YAAA,uBAEAE,KAAAjB,EAAA,cAAA9N,KAAA,aAEAs9B,gBAAAxvB,EAAA,oBAEAyvB,gBAAAxuB,KAAAsJ,SAAAilB,iBAEA,iBAAAntB,QAAAsI,MAEAlY,OAAAi9B,oBAAAD,iBAGAh9B,OAAAk9B,2BAAAF,kBAIArqB,KAAA/M,UAAA,IAAA+M,KAAAyU,gBAEAzU,KAAA/M,MAAA,IACA+M,KAAAwqB,cAAA,CACAv3B,MAAA,GACAsS,MAAAvF,KAAA/C,QAAAgtB,cACArkB,SAAA,eAKAR,OAAA,SAAAF,GAGAlF,KAAAmF,SAAAD,EAAAxL,KAAAgO,YAIA9M,EAAA,yCAAAqC,QAAAsI,MAAA,aAAA6Z,SAAAJ,WAIA,SAAAyL,wBAAAtlB,UAEA,OAAA9X,OAAAwB,QAAAG,UAAAg7B,aAAAnjB,KAAA,CAAA6jB,MAAAvlB,SAAAwlB,eAAAp4B,IAkSA,SAAAytB,cAAA9a,UAEA,IAEArJ,KAEAhF,QAJAqO,SAAA+a,UAAAtb,MAAAub,KAAAC,OAIAtpB,SAFAgF,KAAAjB,EAAA,cAAA9N,KAAA,cAEA+J,WAEA2xB,SAAA,sBAEAF,SAAAzxB,QAAA4xB,QAAA,qBACA,KAGA5xB,QAAA4qB,SAAA7qB,OACA0xB,SAAAzxB,QAAA4qB,SAAA7qB,OAAAsrB,SAAA,2BAEArmB,KAAAhF,QAAAyxB,UACAzsB,KAAA6sB,SAAAJ,SAAA,MAjTAj7B,OAAAu9B,oBAAA,WAGAv9B,OAAAw9B,YAAA,IAAAlmB,MAAA7X,KAAAkZ,WAAA,CACAua,OAAA,CACAd,MAAA,CACAgB,OAAA,CACAqK,OAAA,CAAA51B,KAAA,SAAA+Q,UAAA,GACA8kB,UAAA,CAAA71B,KAAA,SAAA+Q,UAAA,GACA2a,mBAAA,CAAA1rB,KAAA,SAAA+Q,UAAA,GACA+kB,UAAA,CAAA91B,KAAA,WACA+1B,WAAA,CAAA/1B,KAAA,UACAg2B,WAAA,CAAAh2B,KAAA,UACAy1B,aAAA,CAAAz1B,KAAA,UACAi2B,SAAA,CAAAj2B,KAAA,UACAk2B,gBAAA,CAAAl2B,KAAA,UACAm2B,kBAAA,CAAAn2B,KAAA,UACAo2B,cAAA,CAAAp2B,KAAA,UACAq2B,YAAA,CAAAr2B,KAAA,UACAs2B,YAAA,CAAAt2B,KAAA,UACAu2B,WAAA,CAAAv2B,KAAA,WACAw2B,MAAA,CAAAx2B,KAAA,aAIApI,KAAAO,OAAAwB,QAAAG,UAAA4pB,MACA1hB,OAAA,IAGA7J,OAAAs+B,iBAAA,CACA5lB,WAAA1Y,OAAAw9B,YACAvlB,QAAA,CACA,CACAxH,MAAA5S,aAAAiC,mBAAA,SACAmY,QAAA,CACA,CACAC,MAAA,SACAzH,MAAA5S,aAAAiC,mBAAA,MACAqY,MAAA,GACA5F,WAAA,CAAAwhB,aAAA,SAAA3b,MAAA,qBACAK,SAAA,aAEA,CACAP,MAAA,YACAzH,MAAA5S,aAAAiC,mBAAA,WACAqY,MAAA,GACA5F,WAAA,CAAAwhB,aAAA,YAAA3b,MAAA,iCACAK,SAAA,gBAEA,CACAP,MAAA,qBACAzH,MAAA5S,aAAAiC,mBAAA,eACAyS,WAAA,CACAwhB,aAAA,qBACA3b,MAAA,iCAEAK,SAAA,2BAIA,CACAP,MAAA,YACAC,MAAA,GACAM,SAAA,gFACAwb,eAAA,sCAAAp2B,aAAAiC,mBAAA,SAAA,UACAyS,WAAA,CAAAwhB,aAAA,YAAA3b,MAAA,kCAEA,CACA3H,MAAA5S,aAAAiC,mBAAA,QACAmY,QAAA,CACA,CACAC,MAAA,aACAC,MAAA,GACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,aAAA,MACAiC,eAAA,qGACA1hB,WAAA,CAAAwhB,aAAA,aAAA3b,MAAA,oBAEA,CACAF,MAAA,aACAC,MAAA,GACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,aAAA,MACAiC,eAAA,sGACA1hB,WAAA,CAAAwhB,aAAA,aAAA3b,MAAA,oBAEA,CACAF,MAAA,eACAzH,MAAA5S,aAAAiC,mBAAA,WACAqY,MAAA,GACA6b,OAAAyI,mBACAhkB,SAEA2kB,wBAEA7qB,WAAA,CAAAwhB,aAAA,eAAA3b,MAAA,oBAEA,CACAF,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,OACAqY,MAAA,IACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,WAAA,MACAzf,WAAA,CAAAwhB,aAAA,WAAA3b,MAAA,sBAIA,CACA3H,MAAA5S,aAAAiC,mBAAA,SACAmY,QAAA,CACA,CACAC,MAAA,kBACAC,MAAA,GACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,kBAAA,KACAiC,eAAA,sGACA1hB,WAAA,CAAAwhB,aAAA,kBAAA3b,MAAA,oBAEA,CACAF,MAAA,oBAAAzH,MAAA5S,aAAAiC,mBAAA,WAAAqY,MAAA,GAAA6b,OAAAyI,mBACAhkB,SAEA2kB,wBAEA7qB,WAAA,CAAAwhB,aAAA,oBAAA3b,MAAA,oBAEA,CACAF,MAAA,gBACAzH,MAAA5S,aAAAiC,mBAAA,OACAqY,MAAA,IACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,gBAAA,MACAzf,WAAA,CAAAwhB,aAAA,gBAAA3b,MAAA,sBAIA,CACA3H,MAAA5S,aAAAiC,mBAAA,kBACAmY,QAAA,CACA,CACAC,MAAA,cACAC,MAAA,GACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,cAAA,KACAiC,eAAA,4GACA1hB,WAAA,CAAAwhB,aAAA,cAAA3b,MAAA,oBAEA,CACAF,MAAA,cACAzH,MAAA5S,aAAAiC,mBAAA,OACAqY,MAAA,GACA6b,OAAAtC,mBACAjZ,SAAAuZ,cAAA,cAAA,MACAzf,WAAA,CAAAwhB,aAAA,cAAA3b,MAAA,sBAIA,CACAF,MAAA,aACAC,MAAA,GACAM,SAAA,+EACAwb,eAAA,sCAAAp2B,aAAAiC,mBAAA,YAAA,UACAyS,WAAA,CAAAwhB,aAAA,aAAA3b,MAAA,mCAIAY,UAAA,EACAE,UAAA,EACAN,UAAA,EACA7J,YAAA,EACAgK,aAAA,EACAsb,UAAA,SAAAxc,GAEAnX,SAAA,WAEAV,OAAAu+B,iBACA,MAGAhK,KAAA,SAAA1c,MAEA,IAAA2c,YAAA3c,KAAA8Z,UAAAnY,KAAA,SACAgb,YAAAliB,KAAA,QAEAkiB,YAAAzc,SACAyc,YAAAC,SAAA,yBAEAjmB,KAAAjB,EAAA,cAAA9N,KAAA,aACAk1B,YAAApnB,EAAAiB,KAAAomB,MAAAC,WAAArb,KAAA,iBAEAhL,KAAAhF,QAAAmrB,gBAMA30B,OAAAqJ,IAAA,qBAAA,SAAAC,MAAAusB,QAGA,IAAArnB,KAAAjB,EAAA,cAAA9N,KAAA,aAMAo2B,SAAA71B,OAAAsX,MAAAknB,YAEAhwB,KAAAkK,WAAAjZ,KAAAO,OAAAwB,QAAAG,UAAA4pB,OAEAhe,EAAA,cAAAiM,KAAA,SAAAsc,GAAA,UAAAnD,eAEA3yB,OAAAy+B,qBAAAjwB,SAKAxO,OAAAu+B,cAAA,WAGAhxB,EAAA,iBAAAqiB,KAAA,SAAAvV,MAAA+a,KAGA,EAAA/a,QAEA9M,EAAA,cAAA9N,KAAA,aAAAqY,SAAAnF,MAEApF,EAAA6nB,KACA5b,KAAA,MAEAoW,KAAA,SAAAvV,MAAAgb,WAEA,IAAAC,KAAA/nB,EAAA8nB,WACAzD,UAAA0D,KAAAhjB,KAAA,cAGAtS,OAAAu1B,wCAAAD,MAGA,eAAA1D,YAGA,UAAArkB,EAAA,cAAA+E,KAAA,eAEAgjB,KAAAhnB,YAAA,mBAEAgnB,KAAA9b,KAAA,SACAlH,KAAA,YAAA,IAIAgjB,KAAAQ,GAAA,SAAA,mBAAA,SAAAje,GAEAtK,EAAA,cAAA9N,KAAA,aACAqY,SAAAvK,EAAAsK,EAAA6mB,QAAAC,QAAA,OAEAC,IAAA,aAAAjsB,KAAAksB,YAKA,cAAAjN,YAGA,UAAArkB,EAAA,cAAA+E,KAAA,eAEAgjB,KAAAhnB,YAAA,mBAEAgnB,KAAA9b,KAAA,SACAlH,KAAA,YAAA,IAIAgjB,KAAAQ,GAAA,SAAA,qBAAA,SAAAje,GAEAtK,EAAA,cAAA9N,KAAA,aACAqY,SAAAvK,EAAAsK,EAAA6mB,QAAAC,QAAA,OAEAC,IAAA,YAAAjsB,KAAAksB,kBAiCA7+B,OAAAy+B,qBAAA,SAAAjwB,MAEAxO,OAAAwB,QAAAG,UAAAm9B,gBAAA9+B,OAAAwB,QAAAG,UAAAo9B,cACAvwB,KAAAonB,WAAA,cAGA51B,OAAAwB,QAAAG,UAAAo9B,eACAvwB,KAAAonB,WAAA,cACApnB,KAAAonB,WAAA,iBAGA51B,OAAAwB,QAAAG,UAAAq9B,mBAAAh/B,OAAAwB,QAAAG,UAAAo9B,eACAvwB,KAAAonB,WAAA,mBACApnB,KAAAonB,WAAA,sBAGA51B,OAAAwB,QAAAG,UAAAq9B,kBACAxwB,KAAAonB,WAAA,iBAGA51B,OAAAwB,QAAAG,UAAAs9B,qBACAzwB,KAAAonB,WAAA,eACApnB,KAAAonB,WAAA,iBAKA51B,OAAA80B,oBAAA,SAAAhd,SAAA8Z,WAGA,eAAAA,YAEA9Z,SAAA8lB,WAAA9lB,SAAA8lB,YAAA,KAAA9lB,SAAA8lB,WAAA9lB,SAAA8lB,WAAA,EACA59B,OAAAi9B,oBAAAnlB,WAGA,eAAA8Z,YAEA9Z,SAAA+lB,WAAA/lB,SAAA+lB,YAAA,KAAA/lB,SAAA+lB,WAAA/lB,SAAA+lB,WAAA,EACA79B,OAAAi9B,oBAAAnlB,WAGA,aAAA8Z,YAEA9Z,SAAAgmB,SAAAhmB,SAAAgmB,UAAA,KAAAhmB,SAAAgmB,SAAAhmB,SAAAgmB,SAAA,EACA99B,OAAAk/B,8BAAApnB,WAGA,oBAAA8Z,YAEA9Z,SAAAimB,gBAAAjmB,SAAAimB,iBAAA,KAAAjmB,SAAAimB,gBAAAjmB,SAAAimB,gBAAA,EACA/9B,OAAAk9B,2BAAAplB,WAGA,kBAAA8Z,YAEA9Z,SAAAmmB,cAAAnmB,SAAAmmB,eAAA,KAAAnmB,SAAAmmB,cAAAnmB,SAAAmmB,cAAA,EACAj+B,OAAAk/B,8BAAApnB,WAGA,gBAAA8Z,YAEA9Z,SAAAomB,YAAApmB,SAAAomB,aAAA,KAAApmB,SAAAomB,YAAApmB,SAAAomB,YAAA,EACAl+B,OAAAk/B,8BAAApnB,YAMA9X,OAAAi9B,oBAAA,SAAAnlB,UAEA,IAAAqnB,SAAA5xB,EAAA,cAAA9N,KAAA,aAAAiZ,WAAA0mB,SAAAtnB,SAAAqf,KAEAgI,SAAAP,IAAA,aAAA,GAEA,IAAAS,SAAApD,sBAAAqD,mBAAAxnB,SACA9X,OAAAwB,QAAAG,UAAA49B,QAEAJ,SAAAP,IAAA,QAAAS,UAEAG,SAAAvD,sBAAAwD,uBAAA3nB,SACA9X,OAAAwB,QAAAG,UAAA+9B,YAEAP,SAAAP,IAAA,WAAAY,UAEAx/B,OAAAk/B,8BAAApnB,WAGA9X,OAAAk/B,8BAAA,SAAApnB,aAEA,IAAAqnB,SAAA5xB,EAAA,cAAA9N,KAAA,aAAAiZ,WAAA0mB,SAAAtnB,YAAAqf,KAEAwI,YAAA1D,sBAAA2D,2BAAA5/B,OAAAwB,QAAAG,UAAAs9B,mBACAnnB,YAAA9X,OAAAwB,QAAAG,UAAAk+B,YAEAV,SAAAP,IAAA,aAAA,GACAO,SAAAP,IAAA,cAAAe,cAIA3/B,OAAAk9B,2BAAA,SAAAplB,UAEA,IAAAqnB,SAAA5xB,EAAA,cAAA9N,KAAA,aAAAiZ,WAAA0mB,SAAAtnB,SAAAqf,KAEAgI,SAAAP,IAAA,aAAA,GAEA,IAAAS,SAAApD,sBAAA6D,oBAAAhoB,UAEAqnB,SAAAP,IAAA,aAAAS,UAEAG,SAAAvD,sBAAA8D,4BAAAjoB,SACA9X,OAAAwB,QAAAG,UAAA+9B,YAEAP,SAAAP,IAAA,gBAAAY,UAEAx/B,OAAAk/B,8BAAApnB,WAIA9X,OAAAggC,sBAAA,SAAAC,eAEA,IAAAC,YAAA,EAGA,IAAAlgC,OAAAwB,QAAAG,UAAAw+B,cAEA,MAAA,CACAC,YAAA,EACAC,IAAA,EACAC,IAAA,GAKA,GAAAL,cAAAM,kBAAAN,cAAAxC,OAEA,IAAA,IAAAl3B,EAAA,EAAAA,EAAAvG,OAAAwB,QAAAG,UAAA4pB,MAAAlsB,OAAAkH,IAEA,GAAAvG,OAAAwB,QAAAG,UAAA4pB,MAAAhlB,GAAAk3B,SAAAwC,cAAAM,gBACA,CACAN,cAAAjgC,OAAAwB,QAAAG,UAAA4pB,MAAAhlB,GACA,MAKA,IAAAi6B,WAAAP,cAAAQ,QAAAzgC,OAAAwB,QAAAG,UAAA++B,aAAA,KAAA1gC,OAAAwB,QAAAG,UAAAg/B,eACAnE,IAAAyD,cAAAQ,OAAAD,WACAI,IAAAX,cAAAQ,OAAAD,WAEAK,WAAA7gC,OAAA8gC,yBAAAb,eAQA,OAPAC,YAAAW,WAAArE,KAAAoE,IAAAC,cAAAZ,cAAAtC,aAIA39B,OAAA+gC,uBAAA,GAGA,CACAX,WAAAF,WACAG,IAAA7D,IACA8D,IAAAM,MAIA5gC,OAAA8gC,yBAAA,SAAAE,MAEA,GAAAA,KAAAvD,SAAAuD,KAAAT,gBACA,OAAAS,KAAAlD,SAGA,IAFA,IAAAmD,gBAAAD,KAAAT,gBACAf,SAAA,EACAj5B,EAAA,EAAAA,EAAAvG,OAAAwB,QAAAG,UAAA4pB,MAAAlsB,OAAAkH,IAEAvG,OAAAwB,QAAAG,UAAA4pB,MAAAhlB,GAAAg6B,kBAAAU,kBACAzB,UAAAx/B,OAAAwB,QAAAG,UAAA4pB,MAAAhlB,GAAAu3B,UAEA,OAAA0B,UAGAx/B,OAAAu1B,wCAAA,SAAAD,MAGA,IAAA1D,UAAA0D,KAAAhjB,KAAA,cAEAgjB,KAAAU,KAAA,CACA7C,GAAA,QAAAvB,UACA7U,QAAA,CACArM,KAAA,IAEAulB,SAAA,CACAC,OAAA,CACA3vB,GAAA,GAAA4vB,GAAA,KAGA9a,MAAA,CACA+a,QAAA,kBAIAd,KAAAU,KAAA,WAAA,IAIAh2B,OAAAq2B,wCAAA,SAAAC,KAAA1E,YAAA2E,cAAAC,iBAGA,IAAAC,IAAA,EAEAC,UAAA,EAAAH,cAAAl3B,OACAs3B,YAAA,EAAAH,gBAAAn3B,OAEAi2B,KAAAgB,KAAA9c,KAAA,gBAAAoY,YAAA,MAMA,GAHA0D,KAAAhnB,YAAA,YACAgnB,KAAAhnB,YAAA,cAEAooB,WAAAC,YACA,CAEAC,YAAArpB,EAAA,eAEA,GAAAmpB,UACA,CAEA,IADA,IAAAtU,UAAA7U,EAAA,oCAAA1P,aAAAiC,mBAAA,SAAA,YACA22B,IAAA,EAAAA,IAAAF,cAAAl3B,OAAAo3B,MAEArU,UAAAyU,OAAA,wCAAAN,cAAAE,KAAA,SAGAG,YAAAC,OAAAzU,WAGA,GAAAuU,YACA,CACA,IAAAG,YAAAvpB,EAAA,sCAAA1P,aAAAiC,mBAAA,WAAA,YACA,IAAA22B,IAAA,EAAAA,IAAAD,gBAAAn3B,OAAAo3B,MAEAK,YAAAD,OAAA,wCAAAL,gBAAAC,KAAA,SAGAG,YAAAC,OAAAC,aAGAxB,KAAAU,KAAA,SAAA,eAAAY,aAEAF,WAEApB,KAAAb,SAAA,YACAa,KAAAU,KAAA,SAAA,gBAAA,wBAGAV,KAAAb,SAAA,cACAa,KAAAU,KAAA,SAAA,gBAAA,yBAGAV,KAAAU,KAAA,WAAA,QAIAV,KAAAU,KAAA,WAAA,IAIA,IAAAkL,4BAEA,SAAAF,OAAAhK,OAEA,IAAAE,SAAA,EAEAZ,KAAA/oB,EAAA,cAAA9N,KAAA,aAAAm1B,MAAApb,KAAA,gBAAAwnB,OAAA7J,IAAA,MAEAgK,aAAA,GAAAC,eAAA,GAGAC,cAAApF,sBAAAqF,0BAAAN,OAAAhhC,OAAAwB,QAAAG,UAAA+9B,YACAsB,OAAAlD,SAAAuD,gBAEAF,aAAAjjC,KAAAL,aAAAiC,mBAAA,uBACAo3B,SAAA,GAGAprB,OAAA9L,OAAAggC,sBAAAgB,QAQA,OAPAl1B,OAAAs0B,YAEAgB,eAAAljC,KAAAL,aAAAiC,mBAAA,2BAAA,IAAAgM,OAAAu0B,IAAA,IAAAxiC,aAAAiC,mBAAA,OAAA,IAAAgM,OAAAw0B,KAGAtgC,OAAAq2B,wCAAAC,KAAA,WAAA6K,aAAAC,gBAEAlK,SAIAl3B,OAAAuhC,cAAA,WAGA,IAAArK,SAAA,EAEAsH,UAAAjxB,EAAA,cAAA9N,KAAA,aAQA,OANAO,OAAA+gC,uBAAA,EACA/jC,QAAAmP,QAAAqyB,UAAA9lB,WAAAjZ,OAAA,SAAAuhC,MAEA9J,QAAAA,SAAAgK,4BAAAF,QAGA9J,SAGAl3B,OAAAs8B,UAAA,SAAAkF,mBAEAxhC,OAAAoD,aAAAM,aAAA/B,UAAA4pB,QAEAvrB,OAAAwB,QAAAG,UAAAyqB,SACApsB,OAAAgD,KAAA,uCAAAhD,OAAAwB,QAAAG,UAAAuqB,cAEAlsB,OAAAgD,KAAA,wCAAAhD,OAAAwB,QAAAG,UAAAuqB,eAGAlvB,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,SAAAkB,KAAAvQ,OAEAuQ,KAAA7gB,UAAA/J,OAAAwB,QAAAG,UAAAkI,MAAAE,UACA/J,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAAD,QAGAqR,sBAAAK,UACAt8B,OAAAwB,QAAAG,UAAAkI,MAAA3E,IACAlF,OAAAwB,QAAAG,UAAAkI,MAAAE,QACA/J,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,IACApG,KAAA,SAAAnE,MAqBA,GAhBAO,OAAAwB,QAAAG,UAAA4pB,MAAA9rB,KAAAgiC,eACAzhC,OAAAwB,QAAAG,UAAA06B,YAAA58B,KAAAiiC,qBACA1hC,OAAAwB,QAAAG,UAAAg7B,aAAAl9B,KAAAkiC,iBACA3hC,OAAAwB,QAAAG,UAAA49B,OAAA9/B,KAAAmiC,OACA5hC,OAAAwB,QAAAG,UAAAo9B,aAAAt/B,KAAAoiC,aACA7hC,OAAAwB,QAAAG,UAAAm9B,cAAAr/B,KAAAqiC,cACA9hC,OAAAwB,QAAAG,UAAAs9B,mBAAAx/B,KAAAsiC,mBACA/hC,OAAAwB,QAAAG,UAAAq9B,iBAAAv/B,KAAAuiC,iBACAhiC,OAAAwB,QAAAG,UAAA+9B,WAAAjgC,KAAAwiC,WACAjiC,OAAAwB,QAAAG,UAAAk+B,WAAApgC,KAAAyiC,WACAliC,OAAAwB,QAAAG,UAAAwgC,WAAA1iC,KAAA0iC,WACAniC,OAAAwB,QAAAG,UAAAw+B,cAAA1gC,KAAA0gC,cACAngC,OAAAwB,QAAAG,UAAAg/B,eAAAlhC,KAAAkhC,eACA3gC,OAAAwB,QAAAG,UAAA++B,aAAAjhC,KAAAihC,aACA1gC,OAAAwB,QAAAG,UAAAygC,kBAAA3iC,KAAA2iC,kBAEAZ,kBAIA,CACA,IAAAhzB,KAAAjB,EAAA,cAAA9N,KAAA,aACA,GAAAzC,QAAAkF,yBAAAsM,MAAA,OACAA,KAAAkK,WAAAjZ,KAAAA,KAAAgiC,gBAEAzhC,OAAAuhC,qBAPAvhC,OAAAu9B,sBAUAv9B,OAAAk8B,aAAA,EAEA,EAAAl8B,OAAAwB,QAAAG,UAAA06B,YAAAh9B,SACAW,OAAAm8B,qBAAA,GAGA,EAAAn8B,OAAAwB,QAAAG,UAAA4pB,MAAAlsB,SACAW,OAAAqiC,gBAAAriC,OAAAwB,QAAAG,UAAAynB,QAAAU,uBAAA9pB,OAAAwB,QAAAG,UAAA4pB,MAAA,GAAAuN,eAKA94B,OAAA+gC,uBAAA,EACA/gC,OAAAsiC,0BAAA,EAKAzkC,aAAAiC,mBAAA,yCAHA,IAAAyiC,qCAIA,WAIA,OAFAviC,OAAAsiC,0BAAA,IAEAtiC,OAAAwB,QAAAG,UAAAw+B,eAAAngC,OAAAwB,QAAAG,UAAAygC,mBAAApiC,OAAA+gC,4BAMA,EAAA/gC,OAAAwB,QAAAG,UAAAy6B,cAAA/8B,QAAAW,OAAAwB,QAAAG,UAAAwgC,WAAAhjB,MAAA,EAAAnf,OAAAwB,QAAAG,UAAAwgC,WAAAhjB,KAAA9f,WAKAW,OAAAsiC,0BAAA,KAKAtiC,OAAAwiC,uBAAA,WAEAj1B,EAAA,kCAAA+E,KAAA,QAAA,8BAGAtS,OAAAyiC,wBAAA,WAEAl1B,EAAA,kCAAA+E,KAAA,QAAA,sCAGA0mB,UAAA56B,WAAAiL,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA,UAAAA,MAAA3tB,OAAAwB,QAAAG,UAAAyqB,UAEApsB,OAAA0iC,mBAAA,IAAA,GAAA,KAGA1iC,OAAAqJ,IAAA,WAAA2vB,WAEAh5B,OAAAuJ,KAAA,SAAAjH,MAEAse,aAAAY,wBAIAxhB,OAAAwB,QAAAG,UAAAyqB,UAAApsB,OAAAqiC,cAEAriC,OAAA0iC,mBAAApgC,MAAA,GAAA,GAEAtC,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,GAAA,MAIAlsB,OAAAoK,SAAA,SAAA9H,MAEAse,aAAAY,wBAIAxhB,OAAAwB,QAAAG,UAAAyqB,UAAApsB,OAAAqiC,cAEAriC,OAAA0iC,mBAAApgC,MAAA,GAAA,GAAA,GAEAtC,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,GAAA,MAIAlsB,OAAAwoB,MAAA,SAAAlmB,OAEAtC,OAAAwB,QAAAG,UAAAyqB,UAAApsB,OAAAqiC,cAEAriC,OAAA0iC,mBAAA,IAAA,GAAA,GAEA1iC,OAAAgD,KAAA,+BAIAhD,OAAAm5B,OAAA,WAEAn5B,OAAA0iC,mBAAA,IAAA,GAAA,IAuCA1iC,OAAA2iC,mBAAA,WApCA,IACAC,WAoCA,EAAAr1B,EAAA,uBAAAlO,OACAW,OAAAuQ,WAAAC,SAAA,GArCAoyB,WAAA/kC,aAAAiC,mBAAA,0BAGAE,OAAAuQ,WAAA1Q,KAAA+iC,WAFA,yDAIAv1B,WAAA,WAEArN,OAAA6iC,YAAA,GACA7lC,QAAAm9B,KAAAn6B,OAAAs+B,iBAAAt+B,OAAA6iC,aACA7iC,OAAA6iC,YAAAjqB,UAAA,EAGA5Y,OAAA6iC,YAAA5qB,QAAA,GAAAA,QAAA,GAAAgc,eAAAj0B,OAAAwB,QAAAG,UAAA49B,OAAA,kBAAA,mBACAv/B,OAAA6iC,YAAA5qB,QAAA,GAAAA,QAAA,GAAAgc,eAAAj0B,OAAAwB,QAAAG,UAAA49B,OAAA,mBAAA,mBACAv/B,OAAA6iC,YAAA5qB,QAAA,GAAAA,QAAA,GAAAgc,eAAAj0B,OAAAwB,QAAAG,UAAA49B,OAAA,mBAAA,mBACAv/B,OAAA6iC,YAAA5qB,QAAA,GAAAA,QAAA,GAAAgc,eAAAj0B,OAAAwB,QAAAG,UAAA49B,OAAA,sBAAA,sBAGA,IAAAuD,KAAAv1B,EAAA,uBACAu1B,KAAAC,UAAA/iC,OAAA6iC,aAGAC,KAAAtpB,KAAA,kBAAAlH,KAAA,YAAA,GAIA9D,KAAAs0B,KAAArjC,KAAA,aACAO,OAAAy+B,qBAAAjwB,MAGAA,KAAAkK,WAAAjZ,KAAAO,OAAAwB,QAAAG,UAAA06B,aACA7tB,KAAAw0B,WACA,KAUAhjC,OAAAo5B,gBAAA,SAAAD,QAEA,IAAAE,wBAAAr5B,OAAAwB,QAAAG,UAAAupB,KAAA,GAGA,IAAAmO,wBAAAC,SAAA,IAAAD,wBAAAE,YAOAzvB,wBACA,CACAC,QAAA/J,OAAAwB,QAAAG,UAAAkI,MAAAE,QACAC,cAAAhK,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,GACAL,aAAA3J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACAO,gBAAAivB,OACAhvB,oBAAAnK,OAAAwB,QAAAG,UAAAkI,MAAA2vB,kBAEAz4B,iBAAAmJ,gBAAAJ,yBAAAlG,KAAA,SAAAnE,MAEA05B,QACAn5B,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAAkI,MAAAE,QAAA,IAAA/J,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,OAjBAtJ,SAAA,WACAV,OAAAuQ,WAAAS,kBACA,MAmBAhR,OAAA0iC,mBAAA,SAAApgC,KAAA62B,OAAA3Q,MAAAiR,YAIA,GAFAA,WAAAA,aAAA,EAEA,EAAAlsB,EAAA,4BAAAlO,OAAA,CAEA,IAAAW,OAAAuhC,gBACA,OAEA,GAAAvhC,OAAA+gC,wBACAwB,uCAGA,OAKAviC,OAAAmO,gBAAAnO,OAAAijC,WAEAjmC,QAAAm9B,KAAAn6B,OAAAw9B,YAAA/9B,OAAA26B,SAAAp6B,OAAAwB,QAAAG,UAAA4pB,OAEA,IAAA2X,WAAA,CACAh+B,IAAAlF,OAAAwB,QAAAG,UAAA4pB,MAAA,GAAA4X,UACAp5B,QAAA/J,OAAAwB,QAAAG,UAAAkI,MAAAE,QACAC,cAAAhK,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,GACA+uB,OAAA/4B,OAAAwB,QAAAG,UAAA4pB,MAAA,GAAAwN,OACAqK,UAAApjC,OAAAwB,QAAAG,UAAA4pB,MAAA,GAAA6X,UACAnJ,GAAAj6B,OAAAwB,QAAAG,UAAA4pB,MAAA,GAAA2O,gBACAH,kBAAA/5B,OAAAwB,QAAAG,UAAAkI,MAAA3E,IACAwmB,OAAA1rB,OAAAoD,aAAAM,aAAA/B,UAAA4pB,MAAArmB,IACA80B,SAAAh6B,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACAw4B,WAAA,CACAj9B,IAAAlF,OAAAwB,QAAAG,UAAAwgC,WAAAj9B,IACAm+B,cAAArjC,OAAAwB,QAAAG,UAAAwgC,WAAAkB,cACAlkB,KAAAnf,OAAAwB,QAAAG,UAAAwgC,WAAAhjB,KACAmkB,QAAAtjC,OAAAwB,QAAAG,UAAAy6B,cACAnC,GAAAj6B,OAAAwB,QAAAG,UAAAwgC,WAAAlI,GACA7W,UAAApjB,OAAAwB,QAAAG,UAAAwgC,WAAA/e,YAIA6Y,sBAAAyG,mBAAAQ,WAAAljC,OAAAwB,QAAAG,UAAA4pB,OAAA3nB,KAAA,SAAAnE,MAEAO,OAAAs8B,WAAA,GAEAt8B,OAAAwB,QAAAG,UAAAy6B,cAAA,KAIAjD,OACAn5B,OAAAo5B,iBAAA,GAGA5Q,MACAxoB,OAAAo5B,iBAAA,GAGA,EAAA92B,KAAAjD,QACAW,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,EAAAuN,cAIAz5B,OAAAujC,gBAAA,SAAA39B,OAEA,IAAA,IAAAW,KAAAvG,OAAAwB,QAAAG,UAAAg7B,aAEA,GAAA38B,OAAAwB,QAAAG,UAAAg7B,aAAAp2B,KAAAX,MACA,OAAA5F,OAAAwB,QAAAG,UAAAg7B,aAAAp2B,OAKA5I,WAAA,+BAAA,CAAA,SAAA,aAAA,eAAA,mBAAA,UAAA,6BAAA,YAAA,eAAA,eAAA,WAAA,KAAA,WAAA,YAAA,eAAA,mBAAA,WAAA,SAAAqC,OAAA5B,WAAAqX,aAAA1U,iBAAAJ,QAAA6iC,2BACApjC,UAAAE,aAAAsgB,aAAAlgB,SAAArC,GAAAolC,SAAA7vB,UAAA/V,aAAA4e,iBAAAqO,uBAGA9qB,OAAAsX,MAAA,GACAtX,OAAAwB,QAAAG,UAAAuqB,aAAA,EACAlsB,OAAAwB,QAAAG,UAAA0pB,WAAA,GACArrB,OAAAwB,QAAAG,UAAA+hC,eAAA,GACA1jC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA,GACA3jC,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAA,GACAppB,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAAwa,kBAAA,GACA5jC,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAAya,oBAAA,GACA7jC,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAA0a,mBAAA,GACA9jC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAI,oBAAA,GACA/jC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAK,SAAA,EACAhkC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAM,UAAA,EACAjkC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAO,YAAA,EACAlkC,OAAAmkC,kBAAA,EACAnkC,OAAAokC,sBAAA,GAEApkC,OAAAqkC,YAAA,EAEArkC,OAAAskC,WAAA,SAAAC,MAKA,IAAAA,KAEAvkC,OAAAqkC,YAAA,GAGArkC,OAAAqkC,YAAA,EACArkC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA,KAIA3jC,OAAAwkC,yBAAA,GAGAxkC,OAAAykC,kBAAA,CAAA/N,WAAA,EAAAgO,iBAAA,IAGA1kC,OAAAqJ,IAAA,WAAA,WAEAjL,WAAA4yB,iBAAA,KAGAhxB,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA6oB,iBAEAnpB,OAAAgD,KAAA,SAGAhD,OAAAwB,QAAAxB,OAAAwB,SAAA,GAEAxB,OAAAwB,QAAAG,UAAAyqB,UAAA,EAAAhsB,UAAAmsB,OAAA/pB,QAAA,6BACAiT,aAAAyW,eAEAlsB,OAAAwB,QAAAG,UAAAuqB,aAAAzW,aAAAyW,cAEAlsB,OAAAwB,QAAAG,UAAAy6B,cAAA,GACAp8B,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,qBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA/F,OAAAyc,iBAAAA,iBAEAzc,OAAA2kC,mBAAA,GAEA3kC,OAAAwB,QAAAG,UAAAkI,MAAA,GAEA7J,OAAAwB,QAAAG,UAAAynB,SAEAroB,iBAAA0oB,oBAAAzpB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA,GAAA9F,KACA,SAAAnE,MAEAO,OAAAwB,QAAAG,UAAAynB,QAAA,GACAppB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAAjqB,KAAAkqB,eACA3pB,OAAAwB,QAAAG,UAAAynB,QAAAQ,aAAAnqB,KAAAoqB,gBACA7pB,OAAAwB,QAAAG,UAAAynB,QAAAU,sBAAArqB,KAAAsqB,sBAEA/pB,OAAAwB,QAAAG,UAAAynB,QAAAY,wCAAAvqB,KAAAwqB,wCACAjqB,OAAAwB,QAAAG,UAAAynB,QAAAc,6CAAAzqB,KAAA0qB,6CACAnqB,OAAAwB,QAAAG,UAAAynB,QAAAgB,qDAAA3qB,KAAA4qB,qDAEArqB,OAAAoD,aAAAmnB,6BAAAvqB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,IACA1pB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,GAAAc,kBAGAxqB,OAAAoD,aAAAmnB,6BAEAvqB,OAAAoD,aAAAM,aAAAqC,QAAA,IACA3F,UAAAkC,KAAA,iCAMA,EAAAtC,OAAAwB,QAAAG,UAAAuqB,cAGAnrB,iBAAAmwB,wBACAlxB,OAAAwB,QAAAG,UAAAuqB,aACAlsB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6Y,GACAva,OAAAwB,QAAAG,UAAAyqB,UACAxoB,KAAA,SAAAnE,KAEAO,OAAAwB,QAAAG,UAAAkI,MAAApK,IAAAosB,eAAAA,eACA7rB,OAAAwB,QAAAG,UAAAupB,KAAAzrB,IAAAosB,eAAAC,cACA9rB,OAAAwB,QAAAG,UAAAyM,KAAA3O,IAAAosB,eAAAE,cACA/rB,OAAAwB,QAAAG,UAAAqqB,SAAAvsB,IAAAosB,eAAAI,kBAGAkF,IAAArG,SAAAsG,cAAA,QAAApxB,OAAAwB,QAAAG,UAAAupB,MACAlrB,OAAAoD,aAAAM,aAAA+qB,YAAA0C,IAAA1C,YACAzuB,OAAAoD,aAAAM,aAAAgrB,WAAAyC,IAAAzC,WAEAtwB,WAAAoc,WAAA,wBAAAxa,OAAAwB,QAAAG,UAAAyqB,SAAApsB,OAAAwB,QAAAG,UAAAuqB,cAEA,IAAAmF,SAAA,EACAr0B,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAAupB,KAAA,SAAAC,IAAA9Q,OAEA,UAAA8Q,IAAAC,WAEAprB,OAAA4kC,2BACAvT,SAAA,KAGAA,SAEArxB,OAAAgD,KAAA8nB,SAAAyG,eAAA,QAAAvxB,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,aAAAlsB,OAAAwB,QAAAG,UAAAyqB,UAAA,KAEA,WAEAhsB,UAAAkC,KAAA,gCAMAtC,OAAAoD,aAAAM,aAAA8tB,UAAA,IAEAxxB,OAAA6kC,cAGA,IAAA5M,uBAAA75B,WAAAiL,IAAA,gCAAA,SAAAC,MAAA7J,MAEAO,OAAAoD,aAAAM,aAAA/B,UAAA4pB,MACAvrB,OAAA4kC,2BAGA5kC,OAAAwB,QAAAG,UAAAyqB,SACApsB,OAAAgD,KAAA,uCAAAhD,OAAAwB,QAAAG,UAAAuqB,cAEAlsB,OAAAgD,KAAA,wCAAAhD,OAAAwB,QAAAG,UAAAuqB,gBAKAlsB,OAAAqJ,IAAA,WAAA4uB,wBAEAj4B,OAAA4kC,yBAAA,WAEA5kC,OAAAoD,aAAAM,aAAA/B,UAAA0pB,aAEArrB,OAAAwB,QAAAG,UAAAyqB,SACApsB,OAAAgD,KAAA,uCAAAhD,OAAAwB,QAAAG,UAAAuqB,cAEAlsB,OAAAgD,KAAA,wCAAAhD,OAAAwB,QAAAG,UAAAuqB,eAGAlvB,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,SAAAkB,KAAAvQ,OAEAuQ,KAAA7gB,UAAA/J,OAAAwB,QAAAG,UAAAkI,MAAAE,UAEA/J,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAAD,QAIA4Y,2BAAAoB,yBACA5kC,OAAAwB,QAAAG,UAAAkI,MAAA3E,IAAAlF,OAAAwB,QAAAG,UAAAyqB,UACAxoB,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAG,UAAA0pB,WAAA,GACArrB,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA,GACA3jC,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAA3pB,KAAA+mB,QACAxmB,OAAAwB,QAAAG,UAAA0pB,WAAAqY,eAAAjkC,KAAAqlC,mBAGA,IAAArlC,KAAAqlC,mBAAAzlC,SAGAI,KAAAslC,YAAAC,aAAAvoB,iBAAA/Q,eAAAjM,KAAAslC,YAAAC,aAAA,KACAvlC,KAAAslC,YAAAE,cAAAxoB,iBAAA/Q,eAAA1L,OAAAwB,QAAAG,UAAAkI,MAAAG,cAAA,KAEAhK,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAlkC,KAAAslC,YAEA/kC,OAAAklC,oBAAAzlC,KAAAqlC,mBAAAzlC,OAEAW,OAAAmlC,2BAEAnlC,OAAAskC,WAAA,IAGAtkC,OAAAmkC,kBAAA,KAIA,SAAAzS,mBAAAC,UAAA/hB,SAGAA,QAAAsI,MAAA,IAEA2Z,SAAAtkB,EAAAokB,WAAArf,KAAA,kBAIA,IAAAuf,WAAA,IAAAA,SAEAtkB,EAAA,4BAAAqC,QAAAsI,MAAA,sBAAAtI,QAAAsI,MAAA,kCAAAra,aAAAiC,mBAAA,YAAA,QAIAyN,EAAA,4BAAAqC,QAAAsI,MAAA,sBAAAtI,QAAAsI,MAAA,SAHA6Z,SAAAJ,WASA,SAAAK,cAAA9Z,MAAA0V,QAEA,MAAA,4BAAA1V,MAAA,MAAA0V,OAAA,OAAAnR,iBAAAmU,YAAA,cAGA,SAAAwU,cAAAzT,UAAA/hB,SAEArC,EAAA,gBAAAqC,QAAAsI,MAAA,kEAAAtI,QAAAsI,MAAA,4CAAAra,aAAAiC,mBAAA,YAAA,QAEAiyB,SAAAJ,WACA+K,cAAA,CACAvJ,GAAA,cACAza,WAAA,CACAjZ,KAAAO,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAAic,kBAEAjf,OAAA,WACAwW,cAAA/+B,aAAAiC,mBAAA,MACA+8B,eAAA,MACApkB,SAAA,iFACAb,OAAA,SAAAC,UAGA,IAAAilB,iBAAAvvB,EAAAsK,SAAA2V,OAAA1b,QAAA,IAAAsiB,SAAA5a,KAAA,oBAWA,GARAjM,EAAAsK,SAAA2V,OAAA1b,QAAA,IAAAqpB,SAAA,aAEA2B,iBAAArI,SAAA,uBAGAqI,iBAAAxuB,YAAA,uBAGAqE,KAAA/M,UAAA,IAAA+M,KAAAyU,cAQA,OANAzU,KAAA/M,MAAA,SACA+M,KAAAwqB,cAAA,CACAv3B,MAAA,GACAsS,MAAAvF,KAAA/C,QAAAgtB,cACArkB,SAAA,aAKAT,SAAAD,SAAA2V,OAAA1V,WACAlI,QAAAwiB,MAAAwM,IAAA,SAAA9mB,SAAAyC,IACA3K,QAAAwiB,MAAAwM,IAAA,WAAA9mB,SAAAwtB,cAEAhkC,KAAA,SAAAuW,GACA,IAAAM,MAAA5K,EAAA,eAAA4K,QAAA,IACA5K,EAAA,0BAAA4K,MAAAA,OACA5K,EAAA,qBAAA4K,MAAAA,MAAA,MAIA5K,EAAA,yCAAAqC,QAAAsI,MAAA,aAAA6Z,SAAAJ,WAIA,SAAA4T,WAAA5T,UAAA/hB,SAEArC,EAAA,gBAAAqC,QAAAsI,MAAA,yEAAAtI,QAAAsI,MAAA,4CAAAra,aAAAiC,mBAAA,YAAA,QAEAiyB,SAAAJ,WACA+K,cAAA,CACAvJ,GAAA,WACA/M,OAAA,WACA1N,WAAA,CACAjZ,KAAAO,OAAAwlC,qBAAA51B,QAAAwiB,MAAAqT,UAEA7I,cAAA,SACAC,eAAA,SACAjlB,OAAA,SAAAC,UAGA,IAAAilB,iBAAAvvB,EAAAsK,SAAA2V,OAAA1b,QAAA,IAAAsiB,SAAA5a,KAAA,oBAWA,GARAjM,EAAAsK,SAAA2V,OAAA1b,QAAA,IAAAqpB,SAAA,aAEA2B,iBAAArI,SAAA,uBAGAqI,iBAAAxuB,YAAA,uBAGAqE,KAAA/M,UAAA,IAAA+M,KAAAyU,cAQA,OANAzU,KAAA/M,MAAA,SACA+M,KAAAwqB,cAAA,CACAv3B,MAAA,GACAsS,MAAAvF,KAAA/C,QAAAgtB,cACArkB,SAAA,aAKAT,SAAAD,SAAA2V,OAAA1V,WACAlI,QAAAwiB,MAAAwM,IAAA,eAAA9mB,aAIAvK,EAAA,yCAAAqC,QAAAsI,MAAA,aAAA6Z,SAAAJ,WAoKA,SAAAgB,cAAA9a,SAEA,IAEArJ,KAEAhF,QAIAyxB,SARApjB,QAAA+a,UAAAtb,MAAAub,KAAAC,OAIAtpB,SAFAgF,KAAAjB,EAAA,mBAAA9N,KAAA,cAEA+J,WAEA2xB,SAAA,sBAEAF,SAAAzxB,QAAA4xB,QAAA,qBACA,IAyBA5sB,KAAAhF,QAAAyxB,UACAzsB,KAAA6sB,SAAAJ,SAAA,KApBA,IAHAzxB,QAAA4qB,SAAA7qB,OAGAlK,QAEAW,OAAA0lC,sBAEAC,QAAAp4B,EAAAiB,KAAAomB,MAAAC,WAAA+Q,SAEApsB,KAAA,kBAAAhM,QAEAgB,KAAAhF,QADAyxB,SAAA0K,WAKA1K,SAAAzxB,QAAA4qB,SAAA7qB,OAAAsrB,SAAA,0BAEArmB,KAAAhF,QAAAyxB,UACAzsB,KAAA6sB,SAAAJ,SAAA,OA8NA,SAAA4K,4BAAAjU,WAGA,MAAA,YAAAA,UAEA5xB,OAAA8lC,qBAGA,aAAAlU,YAKA,WAAAA,WAEA5xB,OAAA8lC,sBA9aA9lC,OAAA+lC,gBAAA,SAAAC,SAEA,OAAAhmC,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAAic,iBAAA7rB,KAAA,CAAAtU,IAAA8gC,WAGAhmC,OAAAmlC,yBAAA,WAGAnlC,OAAAimC,iBAAA,IAAA3uB,MAAA7X,KAAAkZ,WAAA,CACAua,OAAA,CACAd,MAAA,CACAgB,OAAA,CACAqS,QAAA,CAAA59B,KAAA,UACAq+B,OAAA,CAAAr+B,KAAA,UACAs+B,SAAA,CAAAt+B,KAAA,UACA41B,OAAA,CAAA51B,KAAA,UACAu+B,cAAA,CAAAv+B,KAAA,UACAw+B,YAAA,CAAAx+B,KAAA,UACAy+B,aAAA,MAIA7mC,KAAAO,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA4C,qBACA18B,OAAA,IAGA7J,OAAAwmC,sBAAA,CACA9tB,WAAA1Y,OAAAimC,iBACAhuB,QAAA,CACA,CACAxH,MAAA5S,aAAAiC,mBAAA,WACAmY,QAAA,CACA,CACAC,MAAA,UACAzH,MAAA5S,aAAAiC,mBAAA,MACAqY,MAAA,IACA5F,WAAA,CAAAwhB,aAAA,UAAA3b,MAAA,kBAAAyZ,SAAA,QACApZ,SAAA,YACAub,OAAAoR,eAEA,CACAltB,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,eACAyS,WAAA,CAAAwhB,aAAA,WAAA3b,MAAA,iCACAK,SAAA,cACAub,OAAA,SAAAliB,QAAAlC,SAEAkC,QAAApB,KAAAd,QAAAwiB,MAAA+T,cAKA,CACAjuB,MAAA,8BACAC,MAAA,IACAM,SAAA,mCACAub,OAAAuR,WACAtR,eAAAp2B,aAAAiC,mBAAA,QACAyS,WAAA,CAAAwhB,aAAA,SAAA3b,MAAA,kBAAAyZ,SAAA,SAEA,CACAphB,MAAA5S,aAAAiC,mBAAA,SACAmY,QAAA,CACA,CACAC,MAAA,gBACAzH,MAAA5S,aAAAiC,mBAAA,SACAqY,MAAA,GACA5F,WAAA,CACAwhB,aAAA,gBACA3b,MAAA,kBACAyZ,SAAA,QAEApZ,SAAAuZ,cAAA,gBAAA,MACAgC,OAAAtC,oBAEA,CACAxZ,MAAA,cACAzH,MAAA5S,aAAAiC,mBAAA,OACAqY,MAAA,GACA5F,WAAA,CACAwhB,aAAA,cACA3b,MAAA,kBACAyZ,SAAA,QAEApZ,SAAAuZ,cAAA,cAAA,MACAgC,OAAAtC,sBAIA,CACAxZ,MAAA,oBACAO,SAAA,qGACAN,MAAA,GACA5F,WAAA,CAAAwhB,aAAA,qBACAE,eAAA,UAGAjb,UAAA,EACAE,UAAA,EACAN,SAAA5Y,OAAA8lC,qBACA/2B,YAAA,EACAgK,aAAA,EACAsb,UAAA,SAAAxc,GAEA7X,OAAAymC,qBAEAlS,KAAA,SAAA1c,MAEA,IAAA2c,YAAA3c,KAAA8Z,UAAAnY,KAAA,SAOAqsB,4BANArR,YAAAliB,KAAA,QAMAuF,KAAAua,QAMAoC,YAAAzc,SACAyc,YAAAC,SAAA,0BALAD,YAAAE,KAAA,YAAA,GAQAlmB,KAAAjB,EAAA,mBAAA9N,KAAA,aACAk1B,YAAApnB,EAAAiB,KAAAomB,MAAAC,WAAArb,KAAA,iBAEAhL,KAAAhF,QAAAmrB,gBAOA30B,OAAAqJ,IAAA,qBAAA,SAAAC,MAAAusB,QAGA,IAAArnB,kBAAAjB,EAAA,mBAAA9N,KAAA,aAMAo2B,SAAA71B,OAAAsX,MAAAovB,iBAEAl4B,kBAAAkK,WAAAjZ,KAAAO,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA4C,sBAEAh5B,EAAA,mBAAAiM,KAAA,SAAAsc,GAAA,UAAAnD,eAEA3yB,OAAA8lC,uBAEAa,kBAAAp5B,EAAA,kXAAAwkB,SAAAxkB,EAAA,oBACAk2B,SAAAkD,kBAAAlD,CAAAzjC,SAGAA,OAAA4mC,gCAiDA5mC,OAAAymC,kBAAA,WAGAl5B,EAAA,sBAAAqiB,KAAA,SAAAvV,MAAA+a,KAGA,EAAA/a,OAGAra,OAAA6mC,iBAAAzR,QAKAp1B,OAAA6mC,iBAAA,SAAAC,iBAGA,IAAAhvB,SAAAvK,EAAA,mBAAA9N,KAAA,aAAAqY,SAAAgvB,iBAEAxQ,KAAA/oB,EAAAu5B,iBAGAC,gBAAA/mC,OAAA+lC,gBAAAjuB,SAAA2tB,SAEAsB,kBAEAjvB,SAAA8mB,IAAA,SAAAmI,gBAAAxsB,IACAzC,SAAA8mB,IAAA,WAAAmI,gBAAAzB,cAGAhP,KAAA9c,KAAA,MAEAoW,KAAA,SAAAvV,MAAAgb,MAEAC,KAAA/nB,EAAA8nB,MAEAwQ,4BADAvQ,KAAAhjB,KAAA,iBAGAgjB,KAAAb,SAAA,qBACAa,KAAAhnB,YAAA,oBAOAtO,OAAAu1B,wCAAAD,SAIAt1B,OAAA0lC,mBAAA,WAEA,IAuBAhtB,WACAsuB,UAEArC,mBA1BAn2B,QAAAjB,EAAA,mBAAA9N,KAAA,aAEA+O,WAKAy4B,mBAAA15B,EAAAiB,QAAAomB,MAAAC,WAAA+Q,SACAzK,SAAA,WAMA,IAFA8L,mBAAAztB,KAAA,YAEAna,QAEAmP,QAAA04B,YAIA35B,EAAA,kBAAAe,YAAA,UAIA04B,WADAtuB,WAAAlK,QAAAkK,YACAjZ,OAAAJ,OAEAslC,mBAAA,CACAwC,iBAAA,KACAC,oBAAA,KACAC,8BAAA,KACAC,aAAA,EACAC,eAAA,EACAC,UAAA,KACAC,UAAA,KACAC,YAAA,EACAC,YAAA,EACAC,aAAA,EACAC,cAAA,KACAC,YAAA,EACAC,YAAA,KACAC,iBAAA,EACAC,aAAA,EACAC,WAAA,EACAC,WAAA,KACAlD,cAAAjlC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAsB,cACAmB,cAAA,EACAC,YAAA,EACA+B,YAAA,KACAC,YAAAroC,OAAAwB,QAAAG,UAAAkI,MAAAE,QACAu+B,SAAA,EACAC,cAAA,KACAC,gBAAA,EACAC,YAAA,EACAC,SAAA,EACAC,cAAA,EACAC,kBAAA,EACAC,4BAAA,EACAC,0BAAA,EACAC,eAAA,KACAC,cAAA,EACAC,YAAA,EACAC,aAAA,KACAC,gBAAA,KACAC,YAAA,KACAC,eAAA,KACAC,WAAAtpC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAz+B,IACAqkC,YAAA,EACAC,YAAA,EACAC,gBAAA,EACAC,aAAA,EACAC,WAAA,EACAC,aAAA,EACA1kC,IAAA,EACA2kC,yBAAA,KACAC,OAAA,EACAC,YAAA,KACAC,YAAA,EACAvE,QAAA,GACAwE,YAAA,KACAC,WAAA,EACAngC,QAAA/J,OAAAwB,QAAAG,UAAAkI,MAAAE,QACA2P,UAAA,EACAD,WAAA,EACA0wB,SAAA,EACAC,cAAA,EACAC,UAAA,KACAC,aAAA,KACAlnB,UAAA,GACAmnB,kBAAA,CACA,CACAC,SAAA,EACAC,WAAA,EACAC,QAAA,EACAC,cAAA,EACAzlC,IAAA,EACA0lC,SAAA,EACAC,kBAAA,EACAC,gBAAA,EACAC,YAAA,EACAC,WAAA,EACAC,QAAA,EACAC,QAAA,EACAC,WAAA,KACAC,OAAA,EACAtB,OAAA,EACAuB,cAAA,KACAC,gBAAA,EACAC,YAAA,KACAC,WAAA,KACAC,IAAA,EACAhO,OAAA,GACAra,UAAA,KAGA8iB,OAAA,GACAC,SAAA,IAGAztB,WAAAgzB,OAAA1E,UAAArC,oBAEAn2B,QAAAm9B,QAAAn9B,QAAAomB,MAAAC,WAAA+Q,SAEAD,QAAAp4B,EAAAiB,QAAAomB,MAAAC,WAAA+Q,SACAnR,SAAA,UACAz0B,OAAA6mC,iBAAAlB,WAKA3lC,OAAA4mC,2BAAA,WAGA5mC,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAAwiB,gBAEA5rC,OAAAsX,MAAAovB,eAAA9Q,WAAA,iBAGA51B,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAAuP,cAEA34B,OAAAsX,MAAAovB,eAAA9Q,WAAA,eAGA51B,OAAA8lC,sBAEA9lC,OAAAsX,MAAAovB,eAAA9Q,WAAA,sBAMA51B,OAAA6rC,yBAAA,SAAA/zB,SAGAg0B,QAAAv+B,EAAA,mBAAA9N,KAAA,aAAAiZ,WAAA0mB,SAAAtnB,QAAAqf,KACA5pB,EAAA,mBAAA9N,KAAA,aAAAiZ,WAAAqzB,OAAAD,UAmCA9rC,OAAAu1B,wCAAA,SAAAD,MAGA,IAAA1D,UAAA0D,KAAAhjB,KAAA,cAEAgjB,KAAAU,KAAA,CACA7C,GAAA,QAAAvB,UACA7U,QAAA,CACArM,KAAA,IAEAulB,SAAA,CACAC,OAAA,CACA3vB,GAAA,GAAA4vB,GAAA,KAGA9a,MAAA,CACA+a,QAAA,kBAIAd,KAAAU,KAAA,WAAA,IAIAh2B,OAAAq2B,wCAAA,SAAAC,KAAA1E,YAAA2E,cAAAC,iBAGA,IAAAC,IAAA,EAEAC,UAAA,EAAAH,cAAAl3B,OACAs3B,YAAA,EAAAH,gBAAAn3B,OAEAi2B,KAAAgB,KAAA9c,KAAA,gBAAAoY,YAAA,MAMA,GAHA0D,KAAAhnB,YAAA,YACAgnB,KAAAhnB,YAAA,cAEAooB,WAAAC,YACA,CAEAC,YAAArpB,EAAA,eAEA,GAAAmpB,UACA,CAEA,IADA,IAAAtU,UAAA7U,EAAA,oCAAA1P,aAAAiC,mBAAA,SAAA,YACA22B,IAAA,EAAAA,IAAAF,cAAAl3B,OAAAo3B,MAEArU,UAAAyU,OAAA,wCAAAN,cAAAE,KAAA,SAGAG,YAAAC,OAAAzU,WAGA,GAAAuU,YACA,CACA,IAAAG,YAAAvpB,EAAA,sCAAA1P,aAAAiC,mBAAA,WAAA,YACA,IAAA22B,IAAA,EAAAA,IAAAD,gBAAAn3B,OAAAo3B,MAEAK,YAAAD,OAAA,wCAAAL,gBAAAC,KAAA,SAGAG,YAAAC,OAAAC,aAGAxB,KAAAU,KAAA,SAAA,eAAAY,aAEAF,WAEApB,KAAAb,SAAA,YACAa,KAAAU,KAAA,SAAA,gBAAA,wBAGAV,KAAAb,SAAA,cACAa,KAAAU,KAAA,SAAA,gBAAA,yBAGAV,KAAAU,KAAA,WAAA,QAIAV,KAAAU,KAAA,WAAA,IAIAh2B,OAAAwB,QAAAG,UAAAyqB,UAEApsB,OAAAqQ,OAAA,oDAAA,SAAA27B,SAAAC,SAEA,KAAAjvC,QAAAkF,yBAAA8pC,WAAAA,SAAA,GAAAA,WAAAC,SAAA,IAAAjsC,OAAAqkC,aAAA,CAKA6H,QAAAF,SAEA,GAAAhsC,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAA+iB,4BACA,CAEA,GAAA,KAAAH,SAIA,OAFAhsC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAM,SAAA,QACAjkC,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAAya,oBAAA,IAIAL,2BAAA4I,6BACApsC,OAAAwB,QAAAG,UAAAkI,MAAA3E,IAAAgnC,SACAtoC,KAAA,SAAAnE,UAEAzC,QAAAm9B,KAAA16B,SAAAO,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAAya,qBAGAwI,SAAArsC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAM,SAEAjkC,OAAAsX,MAAAg1B,UAAA5zB,WAAAjZ,KAAAO,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAAya,qBAEA7jC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAM,SAAAoI,eAQArT,uBAAA56B,WAAAiL,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA,UAAAA,MAAA3tB,OAAAwB,QAAAG,UAAAyqB,UAEApsB,OAAAusC,sBAAA,IAAA,GAAA,KAGAvsC,OAAAqJ,IAAA,WAAA2vB,wBAEAh5B,OAAAuJ,KAAA,SAAAjH,MAEAtC,OAAAwsC,uBAGAj/B,EAAA,YAAA4tB,SAAA,YAEAn7B,OAAAwB,QAAAG,UAAAyqB,SAEApsB,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,GAAA,IAIAlsB,OAAAusC,sBAAAjqC,MAAA,GAAA,GAIAtC,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,aAAAlsB,OAAAwB,QAAAG,UAAAyqB,UAAA,MAIApsB,OAAAoK,SAAA,SAAA9H,MAEAiL,EAAA,YAAA4tB,SAAA,YAEAn7B,OAAAwB,QAAAG,UAAAyqB,SAEApsB,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,GAAA,IAIAlsB,OAAAusC,sBAAAjqC,MAAA,GAAA,GAAA,GAIAtC,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,aAAAlsB,OAAAwB,QAAAG,UAAAyqB,UAAA,KAIApsB,OAAAwoB,MAAA,SAAAlmB,MAEAtC,OAAAwB,QAAAG,UAAAyqB,SAKApsB,OAAAgD,KAAA,8BAHAhD,OAAAusC,sBAAA,IAAA,GAAA,IAOAvsC,OAAAm5B,OAAA,WAEAn5B,OAAAwsC,uBAGA,IAAAxsC,OAAAqkC,aAAA92B,EAAA,YAAA4tB,SAAA,eAEAn7B,OAAAo5B,iBAAA,GAIAp5B,OAAAusC,sBAAA,IAAA,GAAA,KAIAvsC,OAAAo5B,gBAAA,SAAAD,QAEA,IAAAE,wBAAAr5B,OAAAwB,QAAAG,UAAAupB,KAAA,GAGA,IAAAmO,wBAAAC,SAAA,IAAAD,wBAAAE,YAOAzvB,wBACA,CACAC,QAAA/J,OAAAwB,QAAAG,UAAAkI,MAAAE,QACAC,cAAAhK,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,GACAL,aAAA3J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACAO,gBAAAivB,OACAhvB,oBAAAnK,OAAAwB,QAAAG,UAAAkI,MAAA2vB,kBAEAz4B,iBAAAmJ,gBAAAJ,yBAAAlG,KAAA,SAAAnE,MAEA05B,QACAn5B,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAAkI,MAAAE,QAAA,IAAA/J,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,OAjBAtJ,SAAA,WACAV,OAAAuQ,WAAAS,kBACA,MAmBAhR,OAAAusC,sBAAA,SAAAjqC,KAAA62B,OAAA3Q,MAAAiR,YAEA,IAAAiN,wBAAAn5B,EAAA,mBAAA9N,KAAA,aAGAwnC,SAAA15B,EAAAm5B,wBAAA9R,MAAAC,WAAA+Q,QACA6G,SAAAxF,SAAA9L,SAAA,UACA1B,WAAAA,aAAA,EACAgT,UAIA,IAFAxF,SAAAztB,KAAA,YAEAna,QAEAqnC,wBAAAQ,YAIAtmB,aAAAY,sBAAAxhB,OAAAwsC,uBAKAxsC,OAAAwB,QAAAG,UAAA0pB,WAAAqhB,SAEA1sC,OAAAmO,gBAAAnO,OAAAwB,QAAAG,UAAA0pB,WAAAqhB,SAIA,IAAA1sC,OAAAqkC,aAEA,EAAA/hC,KAAAjD,OAEAW,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,EAAAuN,cAKAz8B,QAAAm9B,KAAAn6B,OAAAimC,iBAAAxmC,OAAA26B,SAAAp6B,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA4C,sBAGAvmC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAz+B,KAAA,IAEAlF,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAgJ,YAAA3sC,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,cAEAijC,wBACA,CACA7S,kBAAA/5B,OAAAwB,QAAAG,UAAAkI,MAAA3E,IACAwmB,OAAA1rB,OAAAoD,aAAAM,aAAA/B,UAAA0pB,WAAAnmB,KAGAs+B,2BAAA+I,sBAAAK,wBAAA5sC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,cACA//B,KAAA,SAAAnE,MAEAA,KAAAotC,aAAA7H,aAAAvoB,iBAAA/Q,eAAAjM,KAAAotC,aAAA7H,aAAA,KACAvlC,KAAAotC,aAAA5H,cAAAxoB,iBAAA/Q,eAAAjM,KAAAotC,aAAA5H,cAAA,KAEAjlC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAlkC,KAAAotC,aAEA7sC,OAAAwB,QAAAG,UAAA0pB,WAAAqY,eAAAjkC,KAAAqlC,mBAGA9nC,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA4C,qBAAA,SAAAuG,iBAEAA,gBAAAC,kBAAA/sC,OAAAwlC,qBAAAsH,gBAAArH,SACAqH,gBAAAxG,aAAAwG,gBAAAC,kBAAAvzB,KAAA,CAAAikB,OAAAqP,gBAAAvC,kBAAA,GAAA9M,WAGAlwB,EAAA,mBAAA9N,KAAA,aACAiZ,WAAAjZ,KAAAA,KAAAotC,aAAAtG,sBAEAvmC,OAAAwsC,qBAEArT,OAEAn5B,OAAAo5B,iBAAA,GAGA5Q,MAEAxoB,OAAAo5B,iBAAA,GAGA,EAAA92B,KAAAjD,QAEAW,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,EAAAuN,kBAKAz5B,OAAAgtC,+BAAA,WAOA,OAJAhtC,OAAAitC,gCAAA5uC,GAAA6uC,QAEAltC,OAAAmtC,6BAAA,EAEAntC,OAAAitC,gCAAAG,SAIAptC,OAAAqtC,sBAAA,SAAAC,kBAEAttC,OAAAgtC,iCAAAppC,KAAA,WAEA5D,OAAAutC,wBAAAD,kBACAttC,OAAAitC,qCAAA5qC,EACArC,OAAAmtC,6BAAA,GACA,WAEAntC,OAAAitC,qCAAA5qC,EACArC,OAAAmtC,6BAAA,KAIAntC,OAAAutC,wBAAA,SAAAD,kBAEA9J,2BAAA+J,wBAAAD,iBAAAttC,OAAAwB,QAAAG,UAAAkI,MAAA3E,KACAtB,KAAA,SAAAnE,MAGAO,OAAAwB,QAAAG,UAAA0pB,WAAAqY,eAAAjkC,KAAAqlC,sBAKA9kC,OAAAwtC,yBAAA,WAEAxtC,OAAAytC,4BAAA,GAGAztC,OAAA0tC,qCAAArrC,EAEArC,OAAA2tC,+BAAA,WASA,OANA3tC,OAAA0tC,gCAAArvC,GAAA6uC,QAEAltC,OAAAwkC,yBAAAoJ,oBAAA5wC,QAAAm9B,KAAAn6B,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAI,qBAEA/jC,OAAA6tC,kCAAA,EAEA7tC,OAAA0tC,gCAAAN,SAIAptC,OAAA8tC,mBAAA,WAEA9tC,OAAA2tC,iCAAA/pC,KAAA,WAEA5D,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAI,oBAAA/mC,QAAAm9B,KAAAn6B,OAAAwkC,yBAAAoJ,qBACA5tC,OAAAwkC,yBAAAoJ,oBAAA,GACA5tC,OAAA0tC,qCAAArrC,EACArC,OAAA6tC,kCAAA,GACA,WAEA7tC,OAAA0tC,qCAAArrC,EACArC,OAAA6tC,kCAAA,KAIA7tC,OAAA6kC,WAAA,WAEA7kC,OAAAmtC,6BAAA,EACAntC,OAAAytC,4BAAA,EACAztC,OAAA6tC,kCAAA,EACAjtB,aAAA4D,uBAGAxkB,OAAAwlC,qBAAA,SAAAuI,YAEA,IAAAxiB,MAAAvrB,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAA4kB,UACAC,sBAAAjuC,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAA8kB,sBAEAzuC,KAAA,GAaA,OAXAzC,QAAAmP,QAAA8hC,sBAAAE,QAAA,CAAAC,WAAAL,aAAA,SAAAM,MAGArN,KAAAzV,MAAA/R,KAAA,CAAA40B,WAAAC,KAAAC,iBAEAtxC,QAAAuxC,UAAAvN,OAEAvhC,KAAAvB,KAAA8iC,QAIAvhC,MAGAO,OAAA8lC,mBAAA,SAAA0I,UAOA,YALAnsC,IAAAmsC,WAEAA,SAAAxuC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,cAGA,UAAAp2B,EAAA,mBAAA+E,KAAA,kBAGA,EAAAk8B,SAAAzV,WAEA/4B,OAAAwB,QAAAG,UAAAynB,QAAAU,wBAAA0kB,SAAA1V,aAOA,IAAA2V,oCAEA,SAAA3B,gBAAA9V,OAEA,IA+BA0X,YAAAC,cA/BAzX,SAAA,EAEAZ,KAAA/oB,EAAA,mBAAA9N,KAAA,aAAAm1B,MAAApb,KAAA,gBAAAszB,gBAAA3V,IAAA,MA8CA,OA3CAn3B,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAAwiB,iBAGAgD,YAAA,GAAAC,cAAA,GAEA,IAAA/B,gBAAA1G,gBAEAlP,SAAA,EAEA0X,YAAA1wC,KAAAL,aAAAiC,mBAAA,iBAGA,EAAAgtC,gBAAA1G,eAAA0G,gBAAA1G,cAAA0G,gBAAAxG,aAAAwI,UAGAD,cAAA3wC,KAAAL,aAAAiC,mBAAA,wBAIAE,OAAAq2B,wCAAAC,KAAA,gBAAAsY,YAAAC,gBAIA7uC,OAAAwB,QAAAG,UAAA0pB,WAAAjC,QAAAuP,eAGA+V,YAAA,GAAAC,cAAA,GAEA,IAAA7B,gBAAAzG,cAEAnP,SAAA,EAEAwX,YAAAxwC,KAAAL,aAAAiC,mBAAA,iBAGA,EAAAgtC,gBAAAzG,aAAAyG,gBAAAzG,YAAAyG,gBAAAxG,aAAAwI,UAEAH,cAAAzwC,KAAAL,aAAAiC,mBAAA,wBAGAE,OAAAq2B,wCAAAC,KAAA,cAAAoY,YAAAC,gBAGAzX,SAIAl3B,OAAA+uC,iBAAA,SAAAjM,IAGA,IAAAlR,UAAAkR,GAAAxwB,KAAA,cAEAwwB,GAAA9M,KAAA,CACA7C,GAAA,QAAAvB,UACA7U,QAAA,CACArM,KAAA,IAEAulB,SAAA,CACAC,OAAA,CACA3vB,EAAA,GAAA4vB,GAAA,KAGA9a,MAAA,CACA+a,QAAA,kBAIA0M,GAAA9M,KAAA,WAAA,GAEA8M,GAAA9M,KAAA,SAAA,eAAAn4B,aAAAiC,mBAAA,yBACAgjC,GAAA9M,KAAA,SAAA,gBAAA,sBACA8M,GAAA9M,KAAA,WAAA,IAGAh2B,OAAAwsC,mBAAA,WAGA,IAAAj/B,EAAA,mBAAA9N,KAAA,aACA,OAAA,EAEA,IAAAuvC,wBAAAzhC,EAAA,mBAAA9N,KAAA,aAAAiZ,WAAAjZ,OAAAJ,OAEA,GAAA,IAAA2vC,0BAAAzhC,EAAA,YAAA4tB,SAAA,YACA,OAAA,EAGA,IAAAva,aAAAY,qBACA,OAAA,IAAAwtB,wBAGA,IAAAC,kBAAA1hC,EAAA,gCACA2hC,eAAA3hC,EAAA,sCAEA0hC,kBAAA3gC,YAAA,YACA4gC,eAAA5gC,YAAA,YAEA,IAAA4oB,SAAA,EAEA,GAAA,IAAA8X,wBAQA,OANAC,kBAAAxa,SAAA,YACAya,eAAAza,SAAA,YAEAz0B,OAAA+uC,iBAAAE,mBACAjvC,OAAA+uC,iBAAAG,iBAEA,EAGAxI,eAAAn5B,EAAA,mBAAA9N,KAAA,aAOA,OALAzC,QAAAmP,QAAAu6B,eAAAhuB,WAAAjZ,OAAA,SAAA+uC,UAEAtX,QAAAA,SAAAuX,oCAAAD,YAGAtX,SAGAl3B,OAAAmvC,qBAAA,WAEA,OAAA,IAAAnvC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA5K,OAEA,YACA,IAAA/4B,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA5K,OAEA,WAEA,IAAA/4B,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA5K,OAEA,UAEA,IAAA/4B,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA5K,OAEA,SAEA,IAAA/4B,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA5K,OAEA,YAEA,IAAA/4B,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA5K,OAEA,kBAFA,GAMAqW,uBACA,CACAv/B,KAAA,mBACAw/B,kBAAA,GACAC,qBAAA,GACAC,eAAA,SAAAC,aAAAxY,OAIA,OAFA,GAIAyY,iBAAA,SAAAD,aAAAxY,OAEA,GAAAh6B,QAAAkF,yBAAAstC,cAEA,OAAA,EAGA,IAAAtP,YAAA,EACAwP,WAAA,GAEA1vC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAsB,cAAAuK,eAEAE,WAAA7xC,aAAAiC,mBAAA,mBACAogC,YAAA,GAGA,IAAAyP,YAAA3vC,OAAA2L,cAAA3L,OAAA0L,eAAA1L,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,GACA4lC,YAAA5vC,OAAA2L,cAAA3L,OAAA0L,eAAA1L,OAAAwB,QAAAG,UAAAkI,MAAAG,gBAAA,GAcA,OAZAwlC,aAAAxvC,OAAA0L,eAAAikC,cAAAH,aAAAxvC,OAAA0L,eAAAkkC,gBAEA,KAAAF,aAEAA,YAAA,QAEAA,YAAA7xC,aAAAiC,mBAAA,qBACAogC,YAAA,GAGAvtB,KAAA28B,qBAAAI,YAEAxP,aAIAlgC,OAAA6vC,iBAAA,IAAAC,IAAAC,GAAAC,SAAAC,cAAAb,wBAEAc,uBACA,CACArgC,KAAA,uBACAw/B,kBAAA,GACAC,qBAAA,GACAC,eAAA,SAAAY,iBAAAnZ,OAIA,OAFA,GAIAyY,iBAAA,SAAAU,iBAAAnZ,OAEA,IAAAkJ,YAAA,EAEAyP,YAAA3vC,OAAA2L,cAAA3L,OAAA0L,eAAA1L,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,GACA4lC,YAAA5vC,OAAA2L,cAAA3L,OAAA0L,eAAA1L,OAAAwB,QAAAG,UAAAkI,MAAAG,gBAAA,GAQA,OANAmmC,iBAAAnwC,OAAA0L,eAAAikC,cAAAQ,iBAAAnwC,OAAA0L,eAAAkkC,gBAEAj9B,KAAA28B,qBAAAzxC,aAAAiC,mBAAA,yBACAogC,YAAA,IAGAA,aAIAlgC,OAAAowC,qBAAA,IAAAN,IAAAC,GAAAC,SAAAC,cAAAC,wBAGAlwC,OAAAqwC,aAAA,SAAAC,aAEA9M,2BAAA+M,YACAD,YACAtwC,OAAAwB,QAAAG,UAAAkI,MAAA3E,KACAtB,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA,GAEAlkC,KAAAulC,aAAAvoB,iBAAA/Q,eAAAjM,KAAAulC,aAAA,KACAvlC,KAAAwlC,cAAAxoB,iBAAA/Q,eAAAjM,KAAAwlC,cAAA,KAEAjlC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAlkC,KAEAO,OAAAwkC,yBAAAoJ,oBAAA5tC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAI,oBAGA/mC,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAA4C,qBAAA,SAAAuG,iBAEAA,gBAAAC,kBAAA/sC,OAAAwlC,qBAAAsH,gBAAArH,SACAqH,gBAAAxG,aAAAwG,gBAAAC,kBAAAvzB,KAAA,CAAAikB,OAAAqP,gBAAAvC,kBAAA,GAAA9M,WAGAz9B,OAAAmlC,2BAEAnlC,OAAAskC,WAAA,MAKAtkC,OAAAwwC,4BAAA,WAGA5vB,aAAA6vB,2BAAAzwC,OAAAwkC,2BAMA9jC,SAAA,WAKA,EAFA6M,EAAA,yBAAAiM,KAAA,aAEAna,QAKAW,OAAA0tC,gCAAA9vC,WACA,MAGAoC,OAAA0wC,gCAAA,WAEA1wC,OAAA0tC,gCAAA3tC,aAIApC,WAAA,2CAAA,CAAA,SAAA,aAAA,eAAA,mBAAA,UAAA,6BAAA,YAAA,eAAA,eAAA,WAAA,kBAAA,mBAAA,SAAAqC,OAAA5B,WAAAqX,aAAA1U,iBAAAJ,QACA6iC,2BAAApjC,UAAAE,aAAAsgB,aAAAlgB,SAAA5C,gBAAA2e,+BAIAzc,OAAA0c,UAAA,GACA1c,OAAA0wB,cAAA,CACAC,QAAAlU,iBAAAmU,YACAhD,OAAA,IACAiD,SAAA,EACAC,UAAA,IAGA9zB,QAAA8U,QAAA,mBAAAD,QAEA2yB,yBAAAxkC,QAEA4tC,oBAAA,GAEA5tC,OAAA2wC,sBAAA,WAEA,IAAAC,cAAA,CACAC,QAAA,EACApG,WAAA,KACAvB,aAAA,KACAC,gBAAA,KACA2H,WAAA,KACAxH,WAAAtpC,OAAAwB,QAAAG,UAAA0pB,WAAAsY,aAAAz+B,IACA6rC,QAAA,EACA7rC,IAAA,EACA8rC,UAAA,EACA/G,YAAA,KACAC,WAAA,EACA7hC,KAAA,EACA+a,UAAA,IAGApjB,OAAA4tC,oBAAA1vC,KAAA0yC,gBA8BA5wC,OAAAixC,mBAAA,IAAAnB,IAAAC,GAAAC,SAAAC,cAzBA,CACApgC,KAAA,qBACAw/B,kBAAA,GACAE,eAAA,SAAA2B,QAAAla,OAEA,IAAAE,SAAA,EAgBA,OAbAga,QAAAC,sBAAA,CAAAza,WAAA,EAAAgO,iBAAA,IAEA1nC,QAAAkF,yBAAAgvC,QAAAJ,cAGAI,QAAAC,sBAAA,CAAAza,YADAQ,SAAA,GACAwN,iBAAA7mC,aAAAiC,mBAAA,cAGAo3B,UAEAga,QAAAC,sBAAA,IAGAja,cAOAv5B,WAAA,gCAAA,CAAA,SAAA,aAAA,eAAA,mBAAA,UAAA,8BAAA,YAAA,eAAA,WAAA,YAAA,mBAAA,WAAA,SAAAqC,OAAA5B,WAAAqX,aAAA1U,iBAAAJ,QAAAywC,4BAAAhxC,UAAAE,aAAAI,SAAAkT,UAAA6I,iBAAAqO,uBAGA9qB,OAAAqxC,mBAAA,EAGArxC,OAAAqJ,IAAA,WAAA,WAEAjL,WAAA4yB,iBAAA,KAGAhxB,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA6oB,iBAEAnpB,OAAAgD,KAAA,SAGAhD,OAAAwB,QAAAG,UAAAyqB,UAAA,EAAAhsB,UAAAmsB,OAAA/pB,QAAA,8BAEAxC,OAAAsxC,eAAA,EAEA77B,aAAAyW,eAEAlsB,OAAAwB,QAAAG,UAAAuqB,aAAAzW,aAAAyW,cAEAlsB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,qBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAwB,QAAAG,UAAAkI,MAAA,GAGA7J,OAAAwB,QAAAG,UAAA4vC,SAAA,CACA5gB,QAAAlU,iBAAAmU,YACAhD,OAAA,IACAiD,SAAA,EACAC,UAAA,EACA0L,KAAA,WAGAx8B,OAAAwB,QAAAG,UAAAynB,SAEAroB,iBAAA0oB,oBAAAzpB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA,GAAA9F,KACA,SAAAnE,MAEAO,OAAAwB,QAAAG,UAAAynB,QAAA,GACAppB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAAjqB,KAAAkqB,eACA3pB,OAAAwB,QAAAG,UAAAynB,QAAAQ,aAAAnqB,KAAAoqB,gBACA7pB,OAAAwB,QAAAG,UAAAynB,QAAAU,sBAAArqB,KAAAsqB,sBAEA/pB,OAAAwB,QAAAG,UAAAynB,QAAAY,wCAAAvqB,KAAAwqB,wCACAjqB,OAAAwB,QAAAG,UAAAynB,QAAAc,6CAAAzqB,KAAA0qB,6CACAnqB,OAAAwB,QAAAG,UAAAynB,QAAAgB,qDAAA3qB,KAAA4qB,qDAEArqB,OAAAoD,aAAAmnB,6BAAAvqB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,IACA1pB,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,GAAAc,kBAGAxqB,OAAAoD,aAAAmnB,6BAEAvqB,OAAAoD,aAAAM,aAAAqC,QAAA,IACA3F,UAAAkC,KAAA,iCAMA,EAAAtC,OAAAwB,QAAAG,UAAAuqB,cAGAnrB,iBAAAmwB,wBACAlxB,OAAAwB,QAAAG,UAAAuqB,aACAlsB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6Y,GACAva,OAAAwB,QAAAG,UAAAyqB,UACAxoB,KAAA,SAAAnE,KAEAO,OAAAwB,QAAAG,UAAAkI,MAAApK,IAAAosB,eAAAA,eACA7rB,OAAAwB,QAAAG,UAAAupB,KAAAzrB,IAAAosB,eAAAC,cACA9rB,OAAAwB,QAAAG,UAAAyM,KAAA3O,IAAAosB,eAAAE,cACA/rB,OAAAwB,QAAAG,UAAAqqB,SAAAvsB,IAAAosB,eAAAI,kBAGAkF,IAAArG,SAAAsG,cAAA,QAAApxB,OAAAwB,QAAAG,UAAAupB,MACAlrB,OAAAoD,aAAAM,aAAA+qB,YAAA0C,IAAA1C,YACAzuB,OAAAoD,aAAAM,aAAAgrB,WAAAyC,IAAAzC,WAEAtwB,WAAAoc,WAAA,wBAAAxa,OAAAwB,QAAAG,UAAAyqB,SAAApsB,OAAAwB,QAAAG,UAAAuqB,cAEA,IAAAmF,SAAA,EACAr0B,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAAupB,KAAA,SAAAC,IAAA9Q,OAEA,UAAA8Q,IAAAC,WAEAprB,OAAAwxC,kBACAngB,SAAA,KAGAA,SAEArxB,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAAkI,MAAAE,QAAA,IAAA/J,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,KAEA,WAEA5J,UAAAkC,KAAA,gCAMAtC,OAAAoD,aAAAM,aAAA8tB,UAAA,KAGA,IAAAyG,UAAA75B,WAAAiL,IAAA,gCAAA,SAAAC,MAAA7J,MAEAO,OAAAwxC,oBAGAxxC,OAAAqJ,IAAA,WAAA4uB,WAEAj4B,OAAAwxC,gBAAA,WAEAx0C,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAAynB,QAAAM,eAAA,SAAAkB,KAAAvQ,OAEAuQ,KAAA7gB,UAAA/J,OAAAwB,QAAAG,UAAAkI,MAAAE,UACA/J,OAAAwB,QAAAG,UAAAynB,QAAAyB,gBAAAD,QAGAwmB,4BAAAI,gBAAAxxC,OAAAwB,QAAAG,UAAAkI,MAAA3E,KAAAtB,KAAA,SAAAnE,MAKAO,OAAAwB,QAAAG,UAAA8vC,YAAAhyC,KAAAiyC,YACA1xC,OAAA2xC,qBAEA3xC,OAAAqxC,mBAAA,EAEArxC,OAAAsxC,gBAAAtxC,OAAAwB,QAAAG,UAAAynB,QAAAU,uBAAA9pB,OAAAwB,QAAAG,UAAA8vC,YAAAxpB,OAAA2pB,SAEAlxC,SAAA,WACAV,OAAAsxC,eACA/jC,EAAA,6BAAA+E,KAAA,YAAA,KAIAtS,OAAA6xC,oBACA7xC,OAAA8xC,cAIA9xC,OAAA2xC,mBAAA,WACA3xC,OAAAwB,QAAAG,UAAA8vC,YAAAM,iBAAA,GAEA/0C,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAA,SAAA95B,MAAAmC,OACA,IAAA43B,UAAA,GAEAj1C,QAAAmP,QAAAvB,OAAAioB,KAAA3a,OAAA,SAAAg6B,SAAA73B,OACA,gBAAA63B,WACAD,UAAAC,UAAAz1B,iBAAA01B,cAAAj6B,MAAAg6B,UAAA,SAGAlyC,OAAAwB,QAAAG,UAAA8vC,YAAAM,iBAAA75B,MAAAhT,KAAA+sC,aAIAjZ,UAAA56B,WAAAiL,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA,UAAAA,MAAA3tB,OAAAwB,QAAAG,UAAAyqB,UAEApsB,OAAAoyC,gBAAA,IAAA,GAAA,KAGApyC,OAAAqJ,IAAA,WAAA2vB,WAEAh5B,OAAAuJ,KAAA,SAAAjH,MAEAtC,OAAAwB,QAAAG,UAAAyqB,SAGApsB,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,GAAA,IAFAlsB,OAAAoyC,gBAAA9vC,MAAA,GAAA,IAKAtC,OAAAoK,SAAA,SAAA9H,MAEAtC,OAAAwB,QAAAG,UAAAyqB,SAGApsB,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,GAAA,IAFAlsB,OAAAoyC,gBAAA9vC,MAAA,GAAA,GAAA,IAKAtC,OAAAwoB,MAAA,WAEAxoB,OAAAwB,QAAAG,UAAAyqB,SAKApsB,OAAAgD,KAAA,8BAHAhD,OAAAoyC,gBAAA,IAAA,GAAA,IAOApyC,OAAAm5B,OAAA,WAEAn5B,OAAAoyC,gBAAA,IAAA,GAAA,IAGApyC,OAAAo5B,gBAAA,SAAAD,QAEA,IAAAE,wBAAAr5B,OAAAwB,QAAAG,UAAAupB,KAAA,GAGA,IAAAmO,wBAAAC,SAAA,IAAAD,wBAAAE,YAOAzvB,wBACA,CACAC,QAAA/J,OAAAwB,QAAAG,UAAAkI,MAAAE,QACAC,cAAAhK,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,GACAL,aAAA3J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACAO,gBAAAivB,OACAhvB,oBAAAnK,OAAAwB,QAAAG,UAAAkI,MAAA2vB,kBAEAz4B,iBAAAmJ,gBAAAJ,yBAAAlG,KAAA,SAAAnE,MAEA05B,QACAn5B,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAAkI,MAAAE,QAAA,IAAA/J,OAAAiK,cAAAjK,OAAAwB,QAAAG,UAAAkI,MAAAG,eAAA,OAjBAtJ,SAAA,WACAV,OAAAuQ,WAAAS,kBACA,MAmBAhR,OAAAoyC,gBAAA,SAAA9vC,KAAA62B,OAAA3Q,MAAAiR,YAEAA,WAAAA,aAAA,EAEAz5B,OAAAwB,QAAAG,UAAA8vC,cACAzxC,OAAAwB,QAAAG,UAAA8vC,YAAAxpB,OAAA+R,SAAAh6B,OAAAwB,QAAAG,UAAAyM,KAAA4rB,SACAh6B,OAAAwB,QAAAG,UAAAyM,KAAAikC,QAAAryC,OAAAwB,QAAAG,UAAA8vC,YAAAa,kBAAAD,QACAjB,4BAAAgB,gBAAApyC,OAAAwB,QAAAG,UAAA8vC,YAAAxpB,OACAjoB,OAAAwB,QAAAG,UAAA8vC,YAAAO,WAAApuC,KAAA,SAAAnE,MACAO,OAAAwB,QAAAG,UAAA8vC,YAAAhyC,KAAAiyC,YACA1xC,OAAA2xC,qBAEAxY,OACAn5B,OAAAo5B,iBAAA,GAEA5Q,OACAxoB,OAAAo5B,iBAAA,MAKA,EAAA92B,KAAAjD,QACAW,OAAAgD,KAAA8nB,SAAAyG,eAAAjvB,KAAAtC,OAAAwB,QAAAG,UAAAupB,KAAAlrB,OAAAwB,QAAAG,UAAAuqB,cAAA,EAAAuN,cAIAz5B,OAAA8xC,SAAA,WAGA,IADA,IAAAS,UAAA,EACAhsC,EAAA,EAAAA,EAAAvG,OAAAwB,QAAAG,UAAA8vC,YAAAe,KAAA,GAAAnzC,OAAAkH,IAEA,IAAA,IAAA4vB,EAAA,EAAAA,EAAAn2B,OAAAwB,QAAAG,UAAA8vC,YAAAe,KAAAnzC,OAAA82B,IACA,CACA,IAAAruB,IAAA9H,OAAAwB,QAAAG,UAAA8vC,YAAAe,KAAArc,GAAA5vB,GACA,EAAAuB,MAEA9H,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAAlqC,KAAA2qC,aAAAzyC,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAAlqC,KAAA4qC,cAAAH,SAMAvyC,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAAlqC,KAAAgqC,UAAA,EAHAS,SADAvyC,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAAlqC,KAAAgqC,UAAA,KAUA9xC,OAAA2yC,mBAAA,SAAAt4B,MAAAzU,OACA5F,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAA33B,OAAAu4B,YAAAC,WAAAp2B,iBAAAq2B,sBAAA9yC,OAAAwB,QAAAG,UAAA8vC,YAAAM,iBAAA13B,OAAAu4B,eAGA5yC,OAAA6xC,kBAAA,WAEA70C,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAA8vC,YAAAsB,WAAA,SAAAC,UAAA34B,OAGAra,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAAgB,UAAA9tC,KAAA0tC,YAAA,EACA51C,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAA8vC,YAAAwB,YAAA,SAAAC,KAAA74B,OAEA64B,KAAAC,gBAAAH,UAAAI,SAEAp2C,QAAAmP,QAAAnM,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAA,SAAA95B,MAAAmC,OAEAra,OAAAwB,QAAAG,UAAA8vC,YAAAM,iBAAA13B,OAAAu4B,YAAAn2B,iBAAA01B,cAAAnyC,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAA33B,OAAAu4B,YAAA,MAEAM,KAAAG,cAAAn7B,MAAAk7B,UAEA,IAAAF,KAAAI,UAEAtzC,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAAgB,UAAA9tC,KAAA0tC,YACA5yC,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAAgB,UAAA9tC,KAAA0tC,YACA16B,MAAA06B,YAGA5yC,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAAgB,UAAA9tC,KAAA0tC,YACA5yC,OAAAwB,QAAAG,UAAA8vC,YAAAO,UAAAgB,UAAA9tC,KAAA0tC,YACA16B,MAAA06B,uBASAj1C,WAAA,uBAAA,CAAA,SAAA,aAAA,eAAA,WAAA,YAAA,SAAAqC,OAAA5B,WAAAkC,aAAAI,SAAAkT,wBAKA5T,OAAAqJ,IAAA,WAAA,WAEAjL,WAAA4yB,iBAAA,KAGAhxB,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA6oB,iBAEAnpB,OAAAgD,KAAA,SAGAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,qBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,IAEArF,SAAA,WAEA1D,QAAA8U,QAAA,6BAAAD,QAEAmb,uBAMArvB,WAAA,+BAAA,CAAA,SAAA,SAAAqC,qBAGAA,OAAAuB,WAAA,WACAvB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,OAGA/F,WAAA,8BAAA,CAAA,SAAA,mBAAA,0BAAA,eAAA,mBAAA,mBAAA,SAAAqC,OAAAe,iBAAAmoB,wBAAAtI,aAAA8L,iBAAAjQ,+BAEAzc,OAAAuB,WAAA,WAEA,IAgBA6sB,OAhBApuB,OAAAoD,aAAAM,aAAAqC,SAOA/I,QAAAkF,yBAAAlC,OAAAiP,eACAjP,OAAAgP,yBAGAhP,OAAAiP,aAAAc,kBAAA,EACA/P,OAAAiP,aAAAC,iBAAA,EACAlP,OAAAiP,aAAAE,UAAA,EACAnP,OAAAiP,aAAAe,aAAA,GAEAoe,OAAApuB,OAAAuzC,qBAAAvzC,OAAAoD,aAAAM,aAAAqC,UAOAmjB,wBACAsqB,wBAAAplB,OAAAtY,KAAA9V,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA,GACA9F,KAAA,SAAAnE,MACAA,KAAAumB,aAAAhpB,QAAAkF,yBAAAzC,KAAAg0C,uBACAzzC,OAAAwB,QAAAG,UAAA0nB,QAAAoqB,qBAAAh0C,KAAAg0C,qBACAzzC,OAAAwB,QAAAG,UAAA0nB,QAAAuB,KAAAnrB,KAAAg0C,qBAAA,IAGAzzC,OAAAuQ,WAAAQ,mBAZA/Q,OAAAgD,KAAA,uBAlBAhD,OAAAgD,KAAA,uBAoCAhD,OAAAuzC,qBAAA,SAAAxtC,SACA,GAAA/F,OAAAwB,QAAAG,UAAA0nB,QAAAsB,iBACA,OAAA3qB,OAAAwB,QAAAG,UAAA0nB,QAAAsB,iBACAvE,OAAA,SAAA/Z,MACA,OAAAA,KAAAyJ,OAAA/P,UACA,IAIA/F,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MACA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QACA,IAIAQ,OAJAxN,aAAAY,wBAIA4M,OAAApuB,OAAAuzC,qBAAAvzC,OAAAoD,aAAAM,aAAAqC,UAOAhF,iBACA8sB,oCACA7tB,OAAAwB,QAAAG,UAAA0nB,QAAAuB,KAAA1lB,IACAlF,OAAAiK,cAAAjK,OAAAiP,aAAAG,WAAA,GACApP,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aACA,GACA9F,KAAA,SAAAnE,MACA,IAAAquB,GAAA,cAAAM,OAAAtY,KACA,sBAAAsY,OAAAslB,YACA,4BACA1zC,OAAAwB,QAAAG,UAAA0nB,QAAAuB,KAAArQ,GACA,eAAAva,OAAAiP,aAAAG,UACA,eAAApP,OAAAiP,aAAAM,QACA,gBAAAkN,iBAAAmU,YAAArlB,MAAA,EAAA,GACA,kBAEAqiB,OACAlB,iBAAAqB,aAAAD,GAAAF,QAGAlB,iBAAAsB,aAAAF,MAxBA9tB,OAAAgD,KAAA,2BA6BArF,WAAA,sBAAA,CAAA,SAAA,aAAA,eAAA,YAAA,SAAAqC,OAAA5B,WAAAkC,aAAAsT,wBAIA5T,OAAAqJ,IAAA,WAAA,WACAjL,WAAA4yB,iBAAA,KAGAhxB,OAAAuB,WAAA,WACAvB,OAAA6G,2BAAAvG,aAAA6oB,gBAKAnpB,OAAAoD,aAAAM,aAAAqC,SAKA/F,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,oBANAsC,OAAAgD,KAAA,sBALAhD,OAAAgD,KAAA,aAcArF,WAAA,wBAAA,CAAA,SAAA,mBAAA,aAAA,YAAA,SAAAqC,OAAAe,iBAAA3C,WAAA4oB,wBAWA,IAAA2sB,gBACAC,kBAAA,EAGA,SAAAC,cACA,EAAAD,oBACA3mC,QAAAC,IAAA,4BAAA0mC,mBACA7yC,iBAAA+yC,qBAAAF,oBAIA5zC,OAAA+zC,kBAAA,SAAAt0C,MACAO,OAAAg0C,mBACAL,gBAAA3sB,UAAA6sB,YAXA,OAcA7zC,OAAAg0C,iBAAA,WACAhtB,UAAAitB,OAAAN,kBAIA,IAAAO,eAAA91C,WAAAiL,IAAA,wBAAA,SAAAC,MAAA8iB,SAAA3sB,MACA2sB,UAAApvB,QAAAkF,yBAAAzC,QACAm0C,kBAAAn0C,KACAO,OAAA+zC,uBAKAI,iBAAA/1C,WAAAiL,IAAA,2BAAA,WACArJ,OAAAg0C,mBACAJ,kBAAA,IAIA5zC,OAAAqJ,IAAA,WAAA,WACArJ,OAAAg0C,mBACAE,iBACAC,mBACAP,kBAAA,OAIAz1C,QAAA,WAAA,CAAA,SAAAiC,WAGA,MAAA,CACA0uB,cAAAA,cACAyC,eAgEA,SAAA6iB,YAAAlpB,KAAAgB,aAAAmoB,OAAA5a,YACA,GAAA2a,aAAAlpB,MAAAgB,aAAA,CAIA,IAAAooB,UAAAppB,KAAAqpB,UAAA,SAAAzR,IACA,OAAAA,GAAA1X,WAAAgpB,cAGA,OAAAtlB,cAAA2K,WAAAvO,KAAAopB,UAAA,GAAAppB,KAAAopB,UAAA,GAAApoB,aAAAmoB,UAxEAjjB,cA2EA,SAAA9E,SAAApB,MACA,IAAApf,OAAA,CAAA2iB,aAAA,EAAAC,YAAA,GAYA,OAXAxD,KAAA1R,KAAA,SAAAnN,MAAA,EAAAA,KAAAmf,uBAAAnf,KAAA+e,SAAA,WACAF,KAAA,GAAAuD,aAAA,EACAvD,KAAAA,KAAA7rB,OAAA,GAAAqvB,YAAA,EAEAxD,KAAA/e,QAAA,SAAA2F,SACAA,QAAAsZ,WAAAkB,WACAxgB,OAAA2iB,YAAA3c,QAAA2c,YACA3iB,OAAA4iB,WAAA5c,QAAA4c,cAIA5iB,QAvFA2gB,cAkCA,SAAAH,SAAAJ,aAAAmoB,OAAAG,OAEA,GAAAloB,UAAAJ,aAAA,CACA,IAAA5pB,KAAA,GACAmyC,SAAAJ,OAAA,OAAA,QAGA,OAFAG,QAAAtoB,aAAA,IAEAI,UACA,IAAA,QACAhqB,mBAAAmyC,+BAAAvoB,aACA,MACA,IAAA,QACA5pB,mBAAAmyC,gCAAAvoB,aACA,MACA,IAAA,QACA5pB,mBAAAmyC,0BAAAvoB,aACA,MACA,IAAA,QACA5pB,mBAAAmyC,qBAAAvoB,aACA,MACA,QACA5pB,KAAA,QAGA,OAAAA,OAzDAkqB,2BAyFA,SAAAlqB,MACA,IAAAwJ,OAAA,IAEA,EAAAxJ,KAAAE,QAAA,sBAAAsJ,OAAA,UACA,EAAAxJ,KAAAE,QAAA,gCAAAsJ,OAAA,UACA,EAAAxJ,KAAAE,QAAA,2BAAAsJ,OAAA,UACA,EAAAxJ,KAAAE,QAAA,iCAAAsJ,OAAA,SAEA,OAAAA,SA9FA,SAAAgjB,cAAA3D,IAAAe,aAAAmoB,QACA,GAAAlpB,KAAAe,aAAA,CACA,IAAA5pB,KAAA,GACAmyC,SAAAJ,OAAA,OAAA,QAMA,OAJA,EAAAlpB,IAAAK,uBAAAL,IAAAC,WACAD,IAAAC,SAAA,SAGAD,IAAAC,UACA,IAAA,QACA9oB,mBAAAmyC,+BAAAvoB,aACA,MACA,IAAA,QACA5pB,mBAAAmyC,gCAAAvoB,aACA,MACA,IAAA,QACA5pB,mBAAAmyC,0BAAAvoB,aACA,MACA,IAAA,QACA5pB,mBAAAmyC,qBAAAvoB,aACA,MACA,QACA5pB,KAAA,QAGA,OAAAA,UC7hKAtF,QAAAC,OAAA,mBAAA,CAAA,cACAwU,UAAA,iBAAA,CAAA,wBAAA,YAAA,kBAAA,SAAAijC,sBAAA9gC,UAAA9V,iBAEA,MAAA,CACA4T,SAAA,IACAG,MAAA,CACA8iC,gBAAA,IACAC,UAAA,IACAC,UAAA,IACAC,YAAA,IACAC,SAAA,IACAC,SAAA,IACAC,SAAA,IACAC,WAAA,IACAC,iBAAA,IACA9nB,YAAA,KAEA1vB,WAAA,CAAA,aAAA,SAAA,SAAAS,WAAA4B,QAEAA,OAAAo1C,mBAAA,WAEAp1C,OAAAq1C,cAAA,GACA,UAAAr1C,OAAA+0C,UACA/0C,OAAAq1C,cAAAn3C,KAAA,CAAAi1B,GAAA,IAAAtjB,KAAA,QACA,UAAA7P,OAAAg1C,UACAh1C,OAAAq1C,cAAAn3C,KAAA,CAAAi1B,GAAA,IAAAtjB,KAAA,QACA,UAAA7P,OAAAi1C,UACAj1C,OAAAq1C,cAAAn3C,KAAA,CAAAi1B,GAAA,IAAAtjB,KAAA,QACA,UAAA7P,OAAAk1C,YACAl1C,OAAAq1C,cAAAn3C,KAAA,CAAAi1B,GAAA,IAAAtjB,KAAA,UACA,EAAA7P,OAAAq1C,cAAAh2C,SACAW,OAAAs1C,sBAAAt1C,OAAAq1C,cAAA,GAAAliB,IAEA/0B,WAAAwuB,iBAEAxuB,WAAAwuB,eAAA,CAAAO,YAAA,GAAAE,YAAA,QAKAzb,KAAA,SAAAC,MAAAC,QAAAC,OACA,IAAAlU,aAAAC,gBAAAC,gCAAA,8BACAgU,MAAA4iC,kBACA5iC,MAAA4iC,iBAAA,GACA5iC,MAAA6iC,YACA7iC,MAAA6iC,WAAA,GACA7iC,MAAA8iC,YACA9iC,MAAA8iC,WAAA,GACA9iC,MAAA+iC,cACA/iC,MAAA+iC,aAAA,GAEAjjC,MAAA6K,UAAA,CAAA64B,iBAAA,IACA1jC,MAAA2jC,eAAA,EACA3jC,MAAA4jC,eAAA,EACA5jC,MAAA6jC,sBAAA,EACA7jC,MAAA8jC,YAAA,EACA9jC,MAAA+jC,yBAAA,EACA/jC,MAAAgkC,oBAAA,GAEAhkC,MAAAikC,UAAA,SAAAhuC,KAEA,OAAA+J,MAAAsD,QAAAA,QAAA3T,QAAAE,QAAA6D,qBAAAmE,cAAA5B,KAGA+J,MAAAkkC,WAAA,WAEA/4C,QAAAkF,yBAAA2P,MAAAsjC,qBAEAtjC,MAAAsjC,oBAGAtjC,MAAAmkC,oBAAA,WAEA,IAAAnkC,MAAA8jC,aAKA9jC,MAAA8a,MAAAC,eAAAM,uBACArb,MAAA2jC,eAAA,GAJA3jC,MAAAsD,QAAAvV,SAAAC,KAAAhC,aAAAiC,mBAAA,sBAAA,UAOA+R,MAAAokC,qBAAA,SAAAnuC,KAoBA+J,MAAAsD,QAAAA,QAAA5E,WAAAY,QAAAtT,aAAAiC,mBAAA,gCAlBA,WAEA40C,sBAAAwB,mBAEArkC,MAAAsD,QAAAA,QAAA3T,QAAAE,QAAA6D,qBAAAmE,YACAmI,MAAAsD,QAAAA,QAAA3T,QAAAE,QAAA6D,qBAAAgD,QACA,GACA,GACA,EACAsJ,MAAA8a,MAAAC,eAAAC,UACA/kB,KACAlE,KACA,WAEAiO,MAAAskC,mBAAA,QAOAtkC,MAAAskC,kBAAA,SAAAC,QAEA1B,sBAAAyB,kBACAtkC,MAAAsD,QAAAA,QAAA3T,QAAAE,QAAA6D,qBAAAgD,QACAsJ,MAAA8a,MAAAC,eAAAC,WACAjpB,KAEA,SAAAnE,MAEAoS,MAAAwkC,uBAAA52C,KAAA62C,eACA,IAAAzkC,MAAAwkC,uBAAAE,cAAAl3C,QAAA+2C,QACAvkC,MAAAsD,QAAAvV,SAAAC,KAAAhC,aAAAiC,mBAAA,8BAAA,cAKA+R,MAAA2kC,aAAA,WAEA3kC,MAAAwkC,wBACAxkC,MAAAskC,mBAAA,GACAtkC,MAAA4jC,eAAA5jC,MAAA4jC,eAGA5jC,MAAA4kC,aAAA,WAEA5kC,MAAAskC,mBAAA,GACAtkC,MAAA2jC,eAAA3jC,MAAA2jC,eAGA3jC,MAAA6kC,0BAAA,WAEA7kC,MAAA4jC,eAAA,EACA,EAAA5jC,MAAA8jC,aAAA9jC,MAAAgkC,sBAAAhkC,MAAA6K,UAAA64B,iBAEA1jC,MAAA6jC,sBAAA,GAGA7jC,MAAA8jC,YAAA,EACA9jC,MAAAqkC,uBAGArkC,MAAAqkC,mBAAA,WAEA,EAAArkC,MAAA8jC,aACA9jC,MAAAokC,sBAAA,GACAj5C,QAAAuxC,UAAA18B,MAAA8a,MAAAC,eAAAQ,qBAEAvb,MAAA8a,MAAAC,eAAAQ,qBACAsnB,sBAAAwB,mBAEArkC,MAAAsD,QAAAA,QAAA3T,QAAAE,QAAA6D,qBAAAmE,YACAmI,MAAAsD,QAAAA,QAAA3T,QAAAE,QAAA6D,qBAAAgD,QACAsJ,MAAA6K,UAAA64B,iBACA1jC,MAAA8a,MAAAC,eAAAS,YACA,EACAxb,MAAA8a,MAAAC,eAAAC,WACA,GAGAhb,MAAA6jC,sBAAA,EACA7jC,MAAA4jC,eAAA,GAGA5jC,MAAAsD,QAAAvV,SAAAC,KAAAhC,aAAAiC,mBAAA,sBAAA,UAGA+R,MAAA8kC,UAAA,SAAAtqC,MAEAwF,MAAA8jC,YAAAtpC,KAAAnH,IACA2M,MAAAgkC,oBAAAxpC,KAAAi5B,YACAzzB,MAAA6K,UAAA64B,iBAAAlpC,KAAAi5B,YACAzzB,MAAA6K,UAAAk6B,gBAAAvqC,KAAAnH,IAEA2M,MAAA8a,MAAAC,eAAAO,YAAAnwB,QAAA65C,SAAAxqC,KAAAyqC,WAGAr5C,YAAAmW,UAAAlW,YAAA,sBAIAS,QAAA,wBAAA,CAAA,KAAA,aAAA,SAAAE,GAAA04C,YAEA,MAAA,CACAZ,kBAAA,SAAAnuC,QAAA6kB,gBAEA,IAAAmqB,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,4BACA3B,KAAA,CACA8I,QAAAP,QACAkvC,OAAArqB,gBAEA9Z,iBAAA,IAaA,OAVAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,OAEA,SAAAhU,MAEAu3C,SAAAj3C,OAAAN,KAAA4T,iBAGA2jC,SAAA5J,SAEA8I,mBAAA,SAAAkB,YAAApvC,QAAA6R,YAAAjK,QAAAynC,UAAAxqB,UAAAyqB,gBAEA,IAAAN,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,6BACA3B,KAAA,CACAiK,YAAA0tC,YACA7uC,QAAAP,QACAs9B,YAAAzrB,YACAi9B,QAAA95C,QAAAu6C,OAAA3nC,SAAA,GACA4nC,UAAAH,UACAI,UAAA5qB,UACA6qB,YAAAJ,kBAcA,OAVAP,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,OAEA,SAAAhU,MAEAu3C,SAAAj3C,OAAAN,KAAA4T,iBAGA2jC,SAAA5J,aClPApwC,QAAAC,OAAA,oBAAA,CAAA,aAAA,eAAA,oBAAA,oBACAC,OAAA,CAAA,WAAA,iBAAA,mBAAA,SAAAwW,SAAAvW,eAAAG,kBAIAH,eAAAK,KAAA,iCACA,CACAC,YAAAH,iBAAAI,YAAA,gBACAC,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,6CACA,CACAC,YAAAH,iBAAAI,YAAA,gBACAC,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,yCACA,CACAC,YAAAH,iBAAAI,YAAA,wBACAC,WAAA,sBAGAH,KAAA,0CACA,CACAC,YAAAH,iBAAAI,YAAA,yBACAC,WAAA,qBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,0CACA,CACAC,YAAAH,iBAAAI,YAAA,yBACAC,WAAA,8BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,wCACA,CACAC,YAAAH,iBAAAI,YAAA,uBACAC,WAAA,sBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,uCACA,CACAC,YAAAH,iBAAAI,YAAA,sBACAC,WAAA,kBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,0DACA,CACAC,YAAAH,iBAAAI,YAAA,sBACAC,WAAA,kBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,yCACA,CACAC,YAAAH,iBAAAI,YAAA,wBACAC,WAAA,oBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,6DACA,CACAC,YAAAH,iBAAAI,YAAA,yBACAC,WAAA,qBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,kEACA,CACAC,YAAAH,iBAAAI,YAAA,8BACAC,WAAA,0BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,wEACA,CACAC,YAAAH,iBAAAI,YAAA,oCACAC,WAAA,sCACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,8EACA,CACAC,YAAAH,iBAAAI,YAAA,0CACAC,WAAA,sCACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,wCACA,CACAC,YAAAH,iBAAAI,YAAA,sBACAC,WAAA,yBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAKAP,KAAA,uDACA,CACAC,YAAAH,iBAAAI,YAAA,qCACAC,WAAA,8BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,uCAOAJ,WAAA,yBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,UAAA,iBAAA,eAAA,eAAA,YAAA,eAAA,SAAAqC,OAAAC,MAAA5B,GAAAoX,aAAA9U,QAAAG,eAAA8f,aAAAtgB,aAAAsT,UAAA/V,cAEAmC,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAyN,wBAEA/N,OAAAgD,KAAA,SAEA4d,aAAAM,wBACAlhB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,aAAA,GACA1D,OAAA6G,2BAAA7G,OAAAsD,aAAAyK,uBACA/N,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA/F,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA/F,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAoD,eAAA82C,sBAAA53C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAC,qBAAAjK,KAAA,SAAAnE,MAEAO,OAAA63C,sBAAAp4C,QAIAO,OAAA83C,aAAA,WAEA93C,OAAAgD,KAAA,UAGAhD,OAAA+3C,YAAA,WAEA/3C,OAAAg4C,aAMAl3C,eAAAm3C,yBACAj4C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAC,oBACA7N,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAvI,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aACA9F,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAnO,KAAAy4C,2BACAl4C,OAAA6G,2BAAA7G,OAAAsD,aAAAyK,wBACA,EAAA/N,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAI,mBACAhO,OAAAgD,KAAA,2CACA,EAAAhD,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAI,mBACAhO,OAAAgD,KAAA,yCAEAhD,OAAAgD,KAAA,0CAjBAhD,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,+BAAA,aAsBAnC,WAAA,mBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,UAAA,iBAAA,eAAA,eAAA,YAAA,eAAA,kBAAA,mBAAA,aAAA,SAAAqC,OAAAC,MAAA5B,GAAAoX,aAAA9U,QAAAG,eAAA8f,aAAAtgB,aAAAsT,UAAA/V,aAAAC,gBAAA2e,iBAAAre,yBAGA4B,OAAAm4C,WAAA,EACAn4C,OAAA+B,WAAA,GACA/B,OAAAsX,MAAA,GAEAtX,OAAAsX,MAAA8gC,aAAA,GACAp4C,OAAAsX,MAAA+gC,oBAAA,CACA1gC,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,WACAC,MAAA,GACA5F,WAAA,CAAA6F,MAAA,eACAC,YAAA,EACAa,UAAA,EACA+a,eAAA,yHACAxb,SAAA,yDAEA,CACAP,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,WACAyS,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,UACAzH,MAAA5S,aAAAiC,mBAAA,UACA8tB,OAAA,QACArb,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,QACAzH,MAAA5S,aAAAiC,mBAAA,cACAyS,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,cACAzH,MAAA5S,aAAAiC,mBAAA,eACAyS,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,SACAzH,MAAA5S,aAAAiC,mBAAA,WACA8tB,OAAA,QACArb,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,MAKAI,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAEAlZ,OAAAsX,MAAAghC,iBAAA,SAAAn/B,IAEAA,GAAAyW,KAAA,SAAA2oB,QAEAA,OAAAC,SAAA7tC,KAAA8tC,OAAAF,OAAAC,UAAA5qB,OAAA,oBACA2qB,OAAAG,YAAA/tC,KAAA8tC,OAAAF,OAAAG,aAAA9qB,OAAA,oBACA2qB,OAAAI,QAAAl8B,iBAAA4D,eAAAk4B,OAAAI,SACAJ,OAAAj6B,OAAA7B,iBAAA4D,eAAAk4B,OAAAj6B,UAGAte,OAAAsX,MAAAshC,eAAA,IAAAthC,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA0Z,KAGAnZ,OAAAsX,MAAAshC,eAAAv/B,OACArZ,OAAAsX,MAAA8gC,aAAA1/B,WAAAjZ,KAAAO,OAAAsX,MAAAshC,eAAAn5C,SAEAO,OAAAsX,MAAAuhC,YAAA,GACA74C,OAAAsX,MAAAwhC,mBAAA,CACAnhC,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,WACAC,MAAA,GACA5F,WAAA,CAAA6F,MAAA,eACAC,YAAA,EACAa,UAAA,EACA+a,eAAA,8HACAxb,SAAA,yDAEA,CACAP,MAAA,UACAzH,MAAA5S,aAAAiC,mBAAA,QACAyS,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,sBACAzH,MAAA5S,aAAAiC,mBAAA,eACAyS,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,cACAzH,MAAA5S,aAAAiC,mBAAA,OACA8tB,OAAA,QACArb,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,QACAzH,MAAA5S,aAAAiC,mBAAA,gBACAyS,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,MAKAI,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAEAlZ,OAAAsX,MAAAyhC,gBAAA,SAAA5/B,IAEAA,GAAAyW,KAAA,SAAA2oB,QAEAA,OAAAlhC,QAAA1M,KAAA8tC,OAAAF,OAAAlhC,SAAAuW,OAAA,oBACA2qB,OAAAS,YAAAv8B,iBAAA4D,eAAAk4B,OAAAS,eAGAh5C,OAAAsX,MAAA2hC,cAAA,IAAA3hC,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA0Z,KAGAnZ,OAAAsX,MAAA2hC,cAAA5/B,OACArZ,OAAAsX,MAAAuhC,YAAAngC,WAAAjZ,KAAAO,OAAAsX,MAAA2hC,cAAAx5C,SAGAO,OAAAuB,WAAA,WAEAvB,OAAAwB,QAAA03C,kBAAA,EACAl5C,OAAAwB,QAAA23C,sBAAA,CACAvrB,OAAA,IACA+C,QAAAlU,iBAAAmU,YACAE,UAAA,GAEAlQ,aAAAM,wBACAlhB,OAAA6G,2BAAAvG,aAAAyN,wBAAA/N,OAAAyN,mBAEAzN,OAAAgD,KAAA,SAGA,IAAAhD,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,cACAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,eAAAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAC,qBACA7N,OAAAgD,KAAA,yCAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACAjF,eAAAu4C,aAAAr5C,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACA3J,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KACA,SAAAnE,MAEAO,OAAAs5C,mBAEA,SAAAh3B,KAEAtiB,OAAAwB,QAAA03C,kBAAA,KAKAl5C,OAAAs5C,gBAAA,WAcA,IAKAC,iBAjBA34B,aAAAM,wBAEAlhB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAw5C,gBAAA,EAEA/jC,aAAA0iC,aAEAn4C,OAAAm4C,WAAA1iC,aAAA0iC,WAAA9iC,YAGArV,OAAAm4C,WAAA,IAAAn7C,QAAAkF,yBAAAlC,OAAAwB,QAAAi4C,aAIA,MAAAz5C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,cACAL,iBAAAv5C,OAAA65C,gBACA75C,OAAA85C,qBAAAP,iBAAA,GACAv5C,OAAA+5C,4BAAAR,iBAAA,IAEAv5C,OAAAg6C,YACA,IAAAh6C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAA5gB,QAEA/4B,OAAAgD,KAAA,6CAIAhD,OAAAwB,QAAAi4C,WAAA,GACAz5C,OAAAwB,QAAAi4C,WAAAC,sBAAA,GACA54C,eAAAm5C,WAAAj6C,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QAAAvI,OAAAm4C,YAAAv0C,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAi4C,WAAAC,sBAAAj6C,KAEA,IAAA2U,SAAApU,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,YAAA,MACA55C,OAAAk6C,eACAl6C,OAAAwB,QAAAi4C,WAAAC,sBAAAj6C,MAGAqB,eAAAq5C,qBACAn6C,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QAAA,GAAA,aAAA,cAAA,GAAA,GAAA,GACA3E,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAi4C,WAAAC,sBAAAU,mBAAA36C,KAAA46C,0BAAAC,IAAA,CAAAvhB,OAAA,IACA/4B,OAAAwB,QAAAi4C,WAAAC,sBAAAa,yBAAA96C,KAAA46C,0BAAAC,IAAA,CAAAvhB,OAAA,EAAA6gB,YAAA,MAAAn6C,KAAA46C,0BAAAC,IAAA,CAAAp1C,IAAAlF,OAAAm4C,WAAApf,OAAA,EAAA6gB,YAAA,MAGA55C,OAAAg6C,YAEA,IAAAh6C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAA5gB,QACA/4B,OAAAgD,KAAA,8CAIAhD,OAAA85C,qBAAA,EACA95C,OAAAw6C,oBAAA,EACAx6C,OAAAy6C,mBAAA,EAEAz6C,OAAAmJ,qBAAA,KAGAnJ,OAAA06C,eAAA,SAAA90C,OAEA5F,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,YAAAh0C,OAGA5F,OAAAg6C,UAAA,WAEA,IAAApK,YAAA,IAAAjlC,KAAA,sBAAAO,QAAA,KAAA,KAAAA,QAAA,KAAA,MACAyvC,kBAAA,IAAAhwC,KAAA3K,OAAAwB,QAAAi4C,WAAAC,sBAAAkB,kBAAA1vC,QAAA,KAAA,KAAAA,QAAA,KAAA,MACAlL,OAAA66C,oBAAA76C,OAAAwB,QAAAi4C,WAAAC,sBAAAoB,oBACA96C,OAAA66C,oBAAAF,oBAAA/K,YACA5vC,OAAA66C,oBAAA76C,OAAA66C,qBAAA,EAAA76C,OAAAwB,QAAAi4C,WAAAC,sBAAAqB,oBACA,IAAA/6C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAz0C,KAGA,MAAAlF,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,cACA55C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,YAAA55C,OAAA66C,qBAAA76C,OAAAwB,QAAAi4C,WAAAC,sBAAAsB,mBAAA,IAAA,KAIAh7C,OAAAi7C,iBAAAj7C,OAAAwB,QAAAi4C,WAAAC,sBAAAwB,iBACAl7C,OAAAm7C,YAAAn7C,OAAAwB,QAAAi4C,WAAAC,sBAAA0B,YAEAp7C,OAAAwB,QAAAi4C,WAAAC,sBAAA2B,cAAAhmC,WAAA,IACArV,OAAAwB,QAAAi4C,WAAAC,sBAAA2B,cAAA,QAGAr7C,OAAAs7C,kBAAAt7C,OAAAwB,QAAAi4C,WAAAC,sBAAA6B,oBAAA,EAAAv7C,OAAAwB,QAAAi4C,WAAAC,sBAAA8B,SAAAn8C,OACAW,OAAAwB,QAAAi4C,WAAAC,sBAAA+B,oBAEAz7C,OAAA66C,qBAAA,EACA76C,OAAAs7C,mBAAA,GAEAt7C,OAAAwB,QAAAi4C,WAAAC,sBAAAgC,cAAA17C,OAAAyL,WAAAzL,OAAAwB,QAAAi4C,WAAAC,sBAAAgC,eACA17C,OAAAwB,QAAAi4C,WAAAC,sBAAAiC,cAAA37C,OAAAyL,WAAAzL,OAAAwB,QAAAi4C,WAAAC,sBAAAiC,eAEA,IAAA37C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAz0C,IAEAlF,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAiC,YAAA57C,OAAAwB,QAAAi4C,WAAAC,sBAAAgC,cAIA17C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAA5gB,OAAA,EAEA,IAAApuB,KAAA3K,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAiC,aAAA,IAAAjxC,KAAA3K,OAAAwB,QAAAi4C,WAAAC,sBAAAgC,iBAEA17C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAiC,YAAA57C,OAAAwB,QAAAi4C,WAAAC,sBAAAgC,cACA17C,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,4BAAA,YAIAE,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAiC,YAAA57C,OAAAyL,WAAAzL,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAiC,aAGA57C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,OAAAte,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,OAAAjJ,YAAA,EACArV,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAv5B,cAAA3D,iBAAA4D,eAAArgB,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,QACAte,OAAAqd,mBACA,IAAArd,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,cACA55C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,YAAA,KAEA55C,OAAA67C,mBAAA,GAGA77C,OAAA65C,cAAA,WAEA,IAAAiC,SAAA,EACAC,cAAA,EACAC,YAAA,EAgDA,OA9CAh/C,QAAAkF,yBAAAlC,OAAAsX,MAAA8gC,aAAA1/B,aACA1b,QAAAmP,QAAAnM,OAAAsX,MAAA8gC,aAAA1/B,WAAAjZ,OAAA,SAAA84C,OAAAl+B,OAEAk+B,OAAA3xC,WAEA,IAAA+D,KAAA3K,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAiC,cAAA,IAAAjxC,KAAA4tC,OAAA0D,oBAEAF,eAAAlJ,WAAAp2B,iBAAAq2B,sBAAAyF,OAAAI,UACAqD,aAAAzD,OAAA2D,cACAJ,UAAAvkB,KAAA4kB,MAAA,KAAAtJ,WAAAp2B,iBAAAq2B,sBAAAyF,OAAAI,UAAAJ,OAAA2D,gBAAA,MAGAH,eAAAlJ,WAAAp2B,iBAAAq2B,sBAAAyF,OAAAI,UACAqD,aAAA,EACAF,UAAAjJ,WAAAp2B,iBAAAq2B,sBAAAyF,OAAAI,cAKA34C,OAAA85C,qBAAAgC,SACA97C,OAAAo8C,0BAAAL,cACA/7C,OAAAq8C,iCAAA5/B,iBAAA4D,eAAA07B,eACA/7C,OAAAs8C,6BAAAN,YACAh8C,OAAAu8C,oCAAA9/B,iBAAA4D,eAAA27B,aAEAF,SAAA,EACA9+C,QAAAkF,yBAAAlC,OAAAsX,MAAAuhC,YAAAngC,aACA1b,QAAAmP,QAAAnM,OAAAsX,MAAAuhC,YAAAngC,WAAAjZ,OAAA,SAAA+8C,OAAAniC,OAEAmiC,OAAA51C,WAEAk1C,UAAAjJ,WAAAp2B,iBAAAq2B,sBAAA0J,OAAAxD,iBAIAh5C,OAAAw6C,oBAAA3H,WAAAiJ,UACA97C,OAAAy8C,2BAAAhgC,iBAAA4D,eAAAy7B,UAEA97C,OAAAy6C,mBAAAljB,KAAA4kB,MAAA,KAAAn8C,OAAA85C,qBAAA95C,OAAAw6C,sBAAA,IACAx6C,OAAAy6C,mBAAA,IAEAz6C,OAAAy6C,mBAAA,GAEAz6C,OAAA08C,0BAAAjgC,iBAAA4D,eAAAkX,KAAA4kB,MAAA,KAAAn8C,OAAA85C,qBAAA95C,OAAAw6C,sBAAA,KAEAx6C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,OAAAte,OAAAy6C,mBACA,CAAAz6C,OAAA85C,qBAAAr9B,iBAAA4D,eAAArgB,OAAA85C,wBAGA95C,OAAA28C,cAAA,SAAAC,mBAEA,MAAA,CACAn7B,MAAAm7B,mBAAAA,kBAAAC,UAAAD,kBAAAE,OACAn3B,QAAAi3B,mBAAAA,kBAAAG,QAAAH,kBAAAE,SAIA98C,OAAAg9C,UAAA,SAAAJ,kBAAAn7B,OAEA,OAAAm7B,kBAAAK,OAAAx7B,QAGAzhB,OAAAk9C,0BAAA,WACAl9C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,OAAA7B,iBAAAq2B,sBAAA9yC,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAv5B,gBAGApgB,OAAAm9C,cAAA,WAyCA,OAtCA,MAAAn9C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,cAEA55C,OAAAsX,MAAA8gC,aAGAgF,YAAAjxC,QAAA,SAAAE,MACA,IAAAgxC,QAAAr9C,OAAAwB,QAAAi4C,WAAAC,sBAAA8B,SAAAhiC,KAAA,CAAAtU,IAAAmH,KAAAnH,MAEAlI,QAAAuxC,UAAA8O,WACAA,QAAAz2C,SAAAyF,KAAAzF,YAMA5G,OAAAsX,MAAAuhC,YAGAuE,YAAAjxC,QAAA,SAAAE,MACA,IAAAmwC,OAAAx8C,OAAAwB,QAAAi4C,WAAAC,sBAAA4D,QAAA9jC,KAAA,CAAAtU,IAAAmH,KAAAnH,MAEAlI,QAAAuxC,UAAAiO,UACAA,OAAA51C,SAAAyF,KAAAzF,aAOA5G,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAApxC,QAAAvI,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,IAAAvI,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAz0C,MACAlF,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAA4D,qBAAAv9C,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aACA1J,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAA6D,0BAAAx9C,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAA5gB,OAAA,EAEA/4B,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAA8D,eAAAz9C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAA8D,eAAApoC,WAGArV,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,aAEA,IAAA,IACA55C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,OAAAte,OAAAwB,QAAAi4C,WAAAC,sBAAAqB,oBACA/6C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAv5B,cAAA3D,iBAAA4D,eAAArgB,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,QACA,MAEA,IAAA,IACAte,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAA+D,aAAA19C,OAAAw6C,oBACAx6C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAgE,YAAA39C,OAAAo8C,0BACAp8C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,OAAAte,OAAAy6C,mBACAz6C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAiE,eAAA59C,OAAAs8C,6BACAt8C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAkE,oBAAAphC,iBAAA4D,eAAArgB,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAA+D,cACA19C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAmE,mBAAArhC,iBAAA4D,eAAArgB,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAgE,aACA39C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAv5B,cAAA3D,iBAAA4D,eAAArgB,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,QACAte,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAoE,sBAAAthC,iBAAA4D,eAAArgB,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAiE,gBACA,MAEA,IAAA,IACA59C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,OAAAte,OAAAwB,QAAAi4C,WAAAC,sBAAA75B,eACA7f,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAv5B,cAAA3D,iBAAA4D,eAAArgB,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,QACA,MAEA,IAAA,IACAte,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,OAAAte,OAAAwB,QAAAi4C,WAAAC,sBAAA2B,cACAr7C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAv5B,cAAA3D,iBAAA4D,eAAArgB,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,QACA,MAEA,QACA,IAAA0/B,OAAAh+C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,OAAAjJ,YAAA,EACArV,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,OAAA0/B,OACAh+C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAv5B,cAAA3D,iBAAA4D,eAAArgB,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,QAKAsC,aAAAY,uBAIAxhB,OAAAi+C,sBACAj+C,OAAAgD,KAAA,4CAGAhD,OAAAk+C,eAAA,WAGA,IAAAC,KAAA5wC,EAAA,qBAGA,GAFA4wC,KAAAC,IAAA,SAAA,IAEAp+C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,QACA,KAAAte,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,OACA,CACA,IAAAw9B,SAAA97C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,OAAAxT,WAAAI,QAAA,KAAA,IAEA,GAAA,GADA4wC,SAAAjJ,WAAAiJ,WAEA,OAAA,EAKA,OAFAqC,KAAAC,IAAA,SAAA,kBAEA,GAGA,IAAAC,sBACA,CACAC,cAAAxgD,gBAAAC,gCAAA,+BACA8R,KAAA,mBACAw/B,kBAAA,GACAC,qBAAA,GACAC,eAAA,SAAAC,aAAAxY,OAEA,IACA1d,QAAA,IAAA3O,KAAA3K,OAAAwB,QAAAi4C,WAAAC,sBAAAgC,eACA9sB,iBAAA,IAAAjkB,KAAA3K,OAAAwB,QAAAi4C,WAAAC,sBAAAiC,eACA4C,SAAA,IAAA5zC,KAAA6kC,cAEA,GAAA,iBAAA7kC,KAAA8tC,OAAAjJ,cAAA5hB,OAAA,qBAAA2wB,SAAAjlC,SAAAsV,iBAAA2vB,SAAA,CAKAC,iBAAA,CAAAllC,QAAAsU,OAAA,oBAAAgB,iBAAAhB,OAAA,qBAIA,OAFAjb,KAAA08B,kBAAAgP,sBAAAC,cAAAx+C,mBAAA,2BAAA0+C,mBAEA,EAGA,OAjBA,GAmBA/O,iBAAA,SAAAD,aAAAxY,OAGA,OAAA,IAIAh3B,OAAAy+C,oBAAA,IAAA3O,IAAAC,GAAAC,SAAAC,cAAAoO,uBAEAr+C,OAAAk6C,aAAA,WAEAp5C,eAAAo5C,aAAAl6C,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACA3J,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KACA,SAAAnE,MAEAO,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,YAAA,IACA55C,OAAA0+C,gBAAA,EACA1+C,OAAAsX,MAAAghC,iBAAAqG,MAAA,GAAA3+C,OAAAwB,QAAAi4C,WAAAC,sBAAA8B,UACAx7C,OAAAsX,MAAAyhC,gBAAA4F,MAAA,GAAA3+C,OAAAwB,QAAAi4C,WAAAC,sBAAA4D,UAEA,SAAAh7B,KAEAtiB,OAAA0+C,gBAAA,EACA1+C,OAAAw5C,gBAAA,EACAx5C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,YAAA,OAKA55C,OAAA4+C,eAAA,SAAAC,aAEA,MAAA7+C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,cAEA55C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,YAAAiF,aAEA/9C,eAAA8I,cAAA5J,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACA3J,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SACAvI,OAAA0+C,gBAAA,EACA1+C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,YAAAiF,aAGA7+C,OAAA8+C,SAAA,SAAAtwC,KAAA2kB,IAEA,IAAA0L,QAAA5jB,SAAAC,eAAAiY,IAAA0L,UAAA,EACArwB,KAAA4uC,YAAAjxC,QAAA,SAAAE,MAEAA,KAAAzF,SAAAi4B,WAIA7+B,OAAAqd,iBAAA,WACA,IAAA0hC,aAAA/+C,OAAAwB,QAAAi4C,WAAAC,sBAEAsF,YAAAD,aAAAhE,oBACAn7B,YAAAm/B,aAAAl/B,eACAo/B,cAAAF,aAAA1D,cAEA0D,aAAAG,2BAAAziC,iBAAA4D,eAAA2+B,aACAD,aAAAv+B,sBAAA/D,iBAAA4D,eAAAT,aACAm/B,aAAAI,oBAAA1iC,iBAAA4D,eAAA4+B,mBAGAthD,WAAA,oBAAA,CAAA,SAAA,QAAA,KAAA,iBAAA,eAAA,YAAA,mBAAA,SAAAqC,OAAAC,MAAA5B,GAAAyC,eAAAR,aAAAsT,UAAA6I,+BAGAzc,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAyN,wBAAA/N,OAAAyN,mBACAzN,OAAAgD,KAAA,SAEA,IAAAhD,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,cACAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,eAAAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAC,qBACA7N,OAAAgD,KAAA,yCAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAmJ,qBAAA,IACAnJ,OAAAo/C,gBAAA,MAAAp/C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,YACA55C,OAAAi7C,iBAAAj7C,OAAAwB,QAAAi4C,WAAAC,sBAAAwB,iBACAl7C,OAAAm7C,YAAAn7C,OAAAwB,QAAAi4C,WAAAC,sBAAA0B,YACAp7C,OAAAq/C,sBAAA,GAEAr/C,OAAAs/C,eAAA,WAEAt/C,OAAAo/C,gBACAt+C,eAAAy+C,wBAAAv/C,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KACA,SAAAnE,MACAO,OAAAi7C,iBAAAx7C,KAAAy7C,iBACAl7C,OAAAm7C,YAAA17C,KAAA27C,YACAp7C,OAAAq/C,qBAAAr/C,OAAAwB,QAAAi4C,WAAAC,sBAAA2B,gBAAA57C,KAAA47C,cACAr7C,OAAAm7C,aAAAn7C,OAAAi7C,mBAAAj7C,OAAAq/C,sBACAr/C,OAAAw/C,gBAKAx/C,OAAAw/C,eAGAx/C,OAAAw/C,YAAA,WAEA,IAAA/F,WAAAz5C,OAAAwB,QAAAi4C,WAGAA,WAAAC,sBAAA8B,SAAArvC,QAAA,SAAAE,MACAA,KAAAssC,QAAAl8B,iBAAAq2B,sBAAAzmC,KAAAssC,WAIAc,WAAAC,sBAAA4D,QAAAnxC,QAAA,SAAAE,MACAA,KAAAiS,OAAA7B,iBAAAq2B,sBAAAzmC,KAAAiS,QACAjS,KAAA2sC,YAAAv8B,iBAAAq2B,sBAAAzmC,KAAA2sC,eAGAl4C,eAAA0+C,YAAA/F,WAAAC,uBAAA91C,KACA,SAAAnE,MACAO,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAl6C,KAAAk6C,yBACA35C,OAAAwB,QAAAi4C,WAAAC,sBAAA8B,SAAA/7C,KAAA+7C,SACAx7C,OAAAwB,QAAAi4C,WAAAC,sBAAA4D,QAAA79C,KAAA69C,QACAt9C,OAAAgD,KAAA,2CACAlC,eAAA2I,eAAAzJ,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACA3J,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SACAzH,eAAA8I,cAAA5J,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACA3J,OAAAwB,QAAAE,QAAA6D,qBAAAgD,YAIAvI,OAAAy/C,cAAA,WAEAz/C,OAAAwB,QAAAi4C,WAAAC,sBAAA8B,SAAArvC,QAAA,SAAAE,MACAA,KAAAzF,UAAA,IAGA5G,OAAAwB,QAAAi4C,WAAAC,sBAAA4D,QAAAnxC,QAAA,SAAAE,MACAA,KAAAzF,UAAA,IAGA9F,eAAA2I,eAAAzJ,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACA3J,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SACAzH,eAAA8I,cAAA5J,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aACA3J,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAEAzH,eAAAy+C,wBAAAv/C,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KACA,SAAAnE,MACAO,OAAAwB,QAAAi4C,WAAAC,sBAAAwB,iBAAAz7C,KAAAy7C,iBACAl7C,OAAAwB,QAAAi4C,WAAAC,sBAAA0B,YAAA37C,KAAA27C,YACAp7C,OAAAwB,QAAAi4C,WAAAC,sBAAA2B,cAAA57C,KAAA47C,gBAGAr7C,OAAAgD,KAAA,yCAGArF,WAAA,qBAAA,CAAA,SAAA,QAAA,KAAA,iBAAA,eAAA,YAAA,mBAAA,SAAAqC,OAAAC,MAAA5B,GAAAyC,eAAAR,aAAAsT,UAAA6I,+BAKAzc,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAv5B,cAAA3D,iBAAA4D,eAAArgB,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAr7B,QAEAte,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAyN,wBAAA/N,OAAAyN,mBAEAzN,OAAAgD,KAAA,SAGA,IAAAhD,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,cACAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,eAAAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAC,qBACA7N,OAAAgD,KAAA,yCACAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACA,MAAA/F,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAAC,cACA55C,OAAAwB,QAAAi4C,WAAAC,sBAAAC,yBAAA+D,aAAA19C,OAAA0/C,2BACA1/C,OAAAmJ,qBAAA,KAEAnJ,OAAA0/C,wBAAA,WAEA,IAAA5D,SAAA,EAMA,OALA9+C,QAAAmP,QAAAnM,OAAAwB,QAAAi4C,WAAAC,sBAAA4D,QAAA,SAAAd,OAAAniC,OAEAmiC,OAAA51C,WACAk1C,SAAAjJ,WAAAiJ,UAAAjJ,WAAA2J,OAAAxD,gBAEA8C,aAIAn+C,WAAA,sCAAA,CAAA,SAAA,QAAA,KAAA,iBAAA,eAAA,SAAAqC,OAAAC,MAAA5B,GAAAyC,eAAAR,2BAGAN,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAM,aAAAi8C,eAAA,CACAC,UAAA,OACAC,UAAA,QACAC,SAAA,SAEA9/C,OAAAiP,aAAAc,kBAAA,EACA/P,OAAAiP,aAAAU,aAAA,GACA3P,OAAAiP,aAAAE,UAAA,GACArO,eAAAi/C,kCAAA//C,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEAO,OAAAoD,aAAAM,aAAAi8C,eAAA,CACAC,WAAA,EACAC,WAAA,EACAC,UAAA,EACAE,SAAAvgD,KAAAwgD,+BAKAtiD,WAAA,8BAAA,CAAA,SAAA,QAAA,KAAA,iBAAA,eAAA,UAAA,YAAA,eAAA,eAAA,mBAAA,SAAAqC,OAAAC,MAAA5B,GAAAyC,eAAAR,aAAAK,QAAAiT,UAAAgN,aAAA/iB,aAAA4e,+BAIAzc,OAAAkgD,kBAAA,GACAlgD,OAAAsX,MAAA,GACAtX,OAAAsX,MAAA6oC,SAAA,GACAngD,OAAAsX,MAAA8oC,gBAAA,CACAzoC,UAAA,EACAM,QAAA,CACA,CACAxH,MAAA5S,aAAAiC,mBAAA,WACAoY,MAAA,yBACAC,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,SACAzH,MAAA5S,aAAAiC,mBAAA,UACAqY,MAAA,IACAyV,OAAA,QACArb,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,gBACAzH,MAAA5S,aAAAiC,mBAAA,eACAqY,MAAA,IACAyV,OAAA,iBACArb,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,oBACAzH,MAAA5S,aAAAiC,mBAAA,UACAqY,MAAA,GACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,wBACAzH,MAAA5S,aAAAiC,mBAAA,gBACAqY,MAAA,IACAyV,OAAA,iBACArb,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,MACAzH,MAAA5S,aAAAiC,mBAAA,gBACAqY,MAAA,GACA5F,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,UACAzH,MAAA5S,aAAAiC,mBAAA,WACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,sLACAN,MAAA,IAEA,CACAM,SAAA,2HACAN,MAAA,KAGAO,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CAAAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAA+oC,aAAA,WAEArgD,OAAAkgD,kBAAAtwB,KAAA,SAAA0wB,SACAA,QAAAhiC,OAAA7B,iBAAA01B,cAAAmO,QAAAhiC,UAGAte,OAAAsX,MAAAipC,WAAA,IAAAjpC,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAAO,OAAAkgD,kBACAhtB,OAAA,CACAd,MAAA,CACAgB,OAAA,CACAotB,uBAAA,CACA5nC,UAAA,GAEA0F,OAAA,CACA1F,UAAA,GAEA6nC,cAAA,CACA7nC,UAAA,GAEA8nC,kBAAA,CACA9nC,UAAA,GAEA+nC,sBAAA,CACA/nC,UAAA,GAEA1T,IAAA,CACA0T,UAAA,GAEAgoC,QAAA,CACAhoC,UAAA,MAKA/O,OAAA,IAGA7J,OAAAsX,MAAAipC,WAAAlnC,OACArZ,OAAAsX,MAAA6oC,SAAAznC,WAAAjZ,KAAAO,OAAAsX,MAAAipC,WAAA9gD,SAGAO,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA6G,2BAAAvG,aAAAyN,wBAEA/N,OAAAgD,KAAA,yCAGA,IAAAhD,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,cACAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,eAAAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAC,qBACA7N,OAAAgD,KAAA,yCACAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAmJ,qBAAA,IACAnJ,OAAAkgD,kBAAA,GACAlgD,OAAA6gD,UAAA,gBACA7gD,OAAA8gD,SAAA,EACA9gD,OAAA+gD,kBAAA,EACA/gD,OAAAghD,eAAA,GAGAhhD,OAAAmV,QAAAxR,YAAA,WAEAid,aAAAY,uBACAxhB,OAAAoD,aAAAM,aAAAi8C,eAAAC,WACA5/C,OAAAoD,aAAAM,aAAAi8C,eAAAE,WACA7/C,OAAAoD,aAAAM,aAAAi8C,eAAAG,SAMAh/C,eAAAq5C,qBAAAn6C,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAvI,OAAAoD,aAAAM,aAAAi8C,eAAAsB,gBACAjhD,OAAAiP,aAAAG,UACApP,OAAAiP,aAAAM,QACAvP,OAAAoD,aAAAM,aAAAi8C,eAAAC,UACA5/C,OAAAoD,aAAAM,aAAAi8C,eAAAE,UACA7/C,OAAAoD,aAAAM,aAAAi8C,eAAAG,UAAAl8C,KAAA,SAAAnE,MAEA,IAAAA,KAAA46C,0BAAAh7C,QAEAW,OAAAuQ,WAAAU,cAAApT,aAAAiC,mBAAA,0BAEAE,OAAAkgD,kBAAAzgD,KAAA46C,0BACAr9C,QAAAmP,QAAAnM,OAAAkgD,kBAAA,SAAApuC,SAEAA,QAAAwM,OAAA7B,iBAAA4D,eAAAvO,QAAAwM,QACAxM,QAAA2uC,cAAA9/C,QAAA,OAAAA,CAAAmR,QAAA8pC,YAAA,cACA9pC,QAAA6uC,sBAAAhgD,QAAA,OAAAA,CAAAmR,QAAAovC,qBAAA,cACApvC,QAAAqvC,qBAAAxgD,QAAA,OAAAA,CAAAmR,QAAAsvC,gBAAA,cACAtvC,QAAA8uC,QAAA9uC,QAAAqvC,qBAAA,IAAAtjD,aAAAiC,mBAAA,MAAA,IAAAgS,QAAAuvC,gCAGArhD,OAAAsX,MAAA+oC,iBA1BArgD,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,oBAAA,WA8BAE,OAAAshD,qBAAA,SAAAnJ,YAEAn4C,OAAA+gD,iBAAA5I,WACAn4C,OAAAghD,eAAA,GAGAhhD,OAAAuhD,cAAA,SAAApJ,YAEAr3C,eAAAm5C,WAAAj6C,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QAAA4vC,YAAAv0C,KAAA,SAAAnE,uBAGAi6C,sBAAAC,yBAAA5gB,OAAA,EACA2gB,sBAAAC,yBAAA6D,0BAAAx9C,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA5I,eAAA0+C,YAAA9F,uBAAA91C,KAAA,SAAAnE,MAEAO,OAAAmV,QAAAxR,kBAGA3D,OAAAghD,eAAA,MAGArjD,WAAA,sBAAA,CAAA,SAAA,oBAAA,iBAAA,aAAA,YAAA,SAAAqC,OAAAK,kBAAAS,eAAA1C,WAAA4oB,wBAeA,IAAA2sB,gBACA6N,SACA9C,eAdA1+C,OAAAmG,4BAAA9F,kBAAAohD,WAEAzhD,OAAAgD,KAAA,SAeA,SAAA6wC,cACA72C,QAAAkF,yBAAAs/C,YACA9C,gBAIAzxC,QAAAC,IAAA,wCACApM,eAAA4gD,wBAAAF,SAAA93C,YAAA83C,SAAA73C,aAAA63C,SAAAG,eAJA10C,QAAAC,IAAA,2BACApM,eAAAu4C,aAAAmI,SAAA93C,YAAA83C,SAAA73C,aAAA63C,SAAAG,aAAA,KAQA,SAAAC,cACAlD,gBAAA,EACA8C,SAAA,KAGAxhD,OAAA+zC,kBAAA,SAAAt0C,MACAO,OAAAg0C,mBACAL,gBAAA3sB,UAAA6sB,YArBA,OAwBA7zC,OAAAg0C,iBAAA,WACAhtB,UAAAitB,OAAAN,kBAIA,IAAAkO,oBAAAzjD,WAAAiL,IAAA,sBAAA,SAAAC,MAAA7J,MACAzC,QAAAkF,yBAAAzC,QACA+hD,SAAA/hD,KACAO,OAAA+zC,uBAIA+N,oBAAA1jD,WAAAiL,IAAA,sBAAA,SAAAC,MAAA7J,MACAzC,QAAAkF,yBAAAzC,QACA+hD,SAAA/hD,KACAi/C,gBAAA,KAKAqD,sBAAA3jD,WAAAiL,IAAA,wBAAA,WACArJ,OAAAg0C,mBACA4N,gBAGAI,sBAAA5jD,WAAAiL,IAAA,wBAAA,WACAq1C,gBAAA,IAIA1+C,OAAAqJ,IAAA,WAAA,WACArJ,OAAAg0C,mBACA+N,wBACAC,wBACAH,sBACAC,sBACAF,mBAIAjkD,WAAA,sBAAA,CAAA,SAAA,QAAA,KAAA,aAAA,SAAA,wBAAA,eAAA,UAAA,YAAA,eAAA,mBAAA,SAAAqC,OAAAC,MAAA5B,GAAAD,WAAA6jD,OAAAC,sBAAA5hD,aAAAK,QAAAiT,UAAA/V,aAAA4e,+BAIAzc,OAAAsX,MAAA,GACAtX,OAAAsX,MAAA6qC,SAAA,GACAniD,OAAAsX,MAAA8qC,gBAAA,CACAzqC,UAAA,EACAM,QAAA,CACA,CACAxH,MAAA5S,aAAAiC,mBAAA,eACAoY,MAAA,cACA3F,WAAA,CAAA6F,MAAA,aACAK,SAAA,oJACAJ,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACA/H,MAAA5S,aAAAiC,mBAAA,UACAoY,MAAA,oBACA3F,WAAA,CAAA6F,MAAA,aACAD,MAAA,IACAM,SAAA,oOACAJ,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACA/H,MAAA5S,aAAAiC,mBAAA,eACAoY,MAAA,wBACAC,MAAA,IACA5F,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACA/H,MAAA5S,aAAAiC,mBAAA,wBACAoY,MAAA,kBACAC,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAK,SAAA,+JACAJ,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,qKACAN,MAAA,KAGAO,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CAAAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAA+qC,aAAA,WAEAriD,OAAAsX,MAAAgrC,WAAA,IAAAhrC,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAAO,OAAAuiD,mBACArvB,OAAA,CACAd,MAAA,CACAgB,OAAA,CACAkS,YAAA,CACA1sB,UAAA,GAEA4pC,kBAAA,CACA5pC,UAAA,GAEA+nC,sBAAA,CACA/nC,UAAA,GAEA6pC,gBAAA,CACA7pC,UAAA,MAKA/O,OAAA,IAGA7J,OAAAsX,MAAAgrC,WAAAjpC,OACArZ,OAAAsX,MAAA6qC,SAAAzpC,WAAAjZ,KAAAO,OAAAsX,MAAAgrC,WAAA7iD,SAGAO,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwN,+BAAA9N,OAAAyN,mBAEAzN,OAAAgD,KAAA,SAGA,IAAAhD,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,cACAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,eAAAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAC,qBACA7N,OAAAgD,KAAA,yCACAhD,OAAA6gD,UAAA,YACA7gD,OAAA8gD,SAAA,EACA9gD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAmJ,qBAAA,IACAnJ,OAAAgjC,WAGAhjC,OAAAgjC,QAAA,WAEAkf,sBAAAQ,sBAAA1iD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEAO,OAAAuiD,mBAAA9iD,KACAzC,QAAAmP,QAAAnM,OAAAuiD,mBAAA,SAAAzwC,SAEAA,QAAA6uC,sBAAA,wBAAA7uC,QAAA6wC,oBAAA,KAAAhiD,QAAA,OAAAA,CAAAmR,QAAA6wC,oBAAA,cACA7wC,QAAA8wC,qBAAA,wBAAA9wC,QAAA+wC,mBAAA,KAAAliD,QAAA,OAAAA,CAAAmR,QAAA+wC,mBAAA,cACA/wC,QAAA2wC,gBAAA,OAAA3wC,QAAA8wC,qBAAA,KAAA9wC,QAAA8wC,qBAAA,IAAA/kD,aAAAiC,mBAAA,OAAA,IAAA2c,iBAAA4D,eAAAvO,QAAAgxC,6BAEA9iD,OAAAsX,MAAA+qC,qBAIA1kD,WAAA,kBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,UAAA,wBAAA,eAAA,eAAA,YAAA,eAAA,SAAAqC,OAAAC,MAAA5B,GAAAoX,aAAA9U,QAAAuhD,sBAAAthC,aAAAtgB,aAAAsT,UAAA/V,2BAGAmC,OAAA+iD,iBAAA,EACA/iD,OAAAgjD,kBAAA,EACAhjD,OAAA+B,WAAA,GACA/B,OAAAijD,qBAAA,WAEAjjD,OAAAkjD,aACA,CACA,CAAAp7C,IAAA,EAAAq7C,MAAAtlD,aAAAiC,mBAAA,aACA,CAAAgI,IAAA,EAAAq7C,MAAAtlD,aAAAiC,mBAAA,aAGAE,OAAA6G,2BAAAvG,aAAAwN,+BAAA9N,OAAAyN,mBAEAzN,OAAAgD,KAAA,SAGA,IAAAhD,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,cACAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,eAAAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAC,qBACA7N,OAAAgD,KAAA,yCACA4d,aAAAM,wBACAlhB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA0P,aAAAutC,oBAEAhjD,OAAAgjD,kBAAAvtC,aAAAutC,mBAGAhjD,OAAAgjD,kBAAA,GAEAhjD,OAAAojD,kBAAAlB,sBAAAkB,kBACApjD,OAAA+iD,gBAAA/iD,OAAAojD,kBAAAC,eAAA,GAAA,IAAArjD,OAAAojD,kBAAAC,eACA,EAAArjD,OAAAgjD,kBAEAd,sBAAAoB,kBAAAtjD,OAAAgjD,kBAAAhjD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEAO,OAAAojD,kBAAA3jD,KACAO,OAAAojD,kBAAAG,iBAAAvjD,OAAAkjD,aAAAljD,OAAAojD,kBAAAI,aAAAL,MACAnjD,OAAAojD,kBAAA5F,0BAAAx9C,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAA+iD,gBAAA/iD,OAAAojD,kBAAAC,eAAA,GAAA,IAAArjD,OAAAojD,kBAAAC,gBAEA,IAAArjD,OAAAgjD,oBAEAhjD,OAAAojD,kBAAA,IAAAK,uBACA,CACAl7C,QAAAvI,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAg1C,qBAAAv9C,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA8zC,0BAAAx9C,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA25C,cAAA,EACAb,kBAAA3kD,aAAAiC,mBAAA,OACAoF,IAAA,IAGAlF,OAAA+iD,iBAAA,IAIA/iD,OAAA0jD,sBAAA,EAEA1jD,OAAA2jD,iBAAA,SAAAnkD,QAEA,IAAAA,QAAA,IAAAA,QAEA0iD,sBAAAoB,kBAAAtjD,OAAAojD,kBAAAl+C,IAAAlF,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEAO,OAAAojD,kBAAA3jD,KACAO,OAAAojD,kBAAAC,cAAA7jD,OACA0iD,sBAAA0B,mBAAA5jD,OAAAojD,mBAAAx/C,KACA,SAAAnE,MAEAO,OAAAojD,kBAAA3jD,KACAO,OAAAgD,KAAA,yCAEA,SAAAvD,MAEAO,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,cAAAjC,aAAAiC,mBAAA,sBAAAL,WAMAO,OAAA6jD,qBAAA,WAEA7jD,OAAA+iD,iBAEA/iD,OAAAojD,kBAAAG,iBAAAvjD,OAAAkjD,aAAAljD,OAAAojD,kBAAAI,aAAAL,MACAjB,sBAAA4B,sBAAA9jD,OAAAojD,kBAAAW,eAAAngD,KACA,SAAAnE,MAEAO,OAAA0jD,sBAAA,EACA1jD,OAAAgkD,gCAEA,SAAAviC,OAEAzhB,OAAA0jD,sBAAA,EACA1jD,OAAAgkD,kCAIAhkD,OAAAgkD,gCAIAhkD,OAAAgkD,6BAAA,WAEApjC,aAAAY,uBAGA0gC,sBAAAkB,kBAAApjD,OAAAojD,kBACApjD,OAAAi+C,sBACAj+C,OAAAgD,KAAA,4CAGA,IAAAihD,wBACA,CACAp0C,KAAA,wBACAw/B,kBAAAxxC,aAAAiC,mBAAA,wBACAyvC,eAAA,SAAAj5B,KAEA,OAAAtW,OAAA0jD,uBAIA1jD,OAAA8jD,sBAAA,IAAAhU,IAAAC,GAAAC,SAAAC,cAAAgU,yBAEAjkD,OAAAkkD,kBAAA,WAYAlkD,OAAAuQ,WAAAY,QAAAtT,aAAAiC,mBAAA,qBAVA,WAEAE,OAAA2jD,iBAAA,IAGA,eAQA3jD,OAAAmkD,aAAA,WAEA,SAAAC,KAEApkD,OAAAgD,KAAA,wCAGAhD,OAAAqkD,SAAAvH,OAEA98C,OAAAuQ,WAAAY,QAAAtT,aAAAiC,mBAAA,kBAAAE,OAAA6jD,qBAAAO,IAGAA,SAGAzmD,WAAA,oBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,UAAA,wBAAA,eAAA,eAAA,YAAA,eAAA,SAAAqC,OAAAC,MAAA5B,GAAAoX,aAAA9U,QAAAuhD,sBAAAthC,aAAAtgB,aAAAsT,UAAA/V,2BAGAmC,OAAA+B,WAAA,GACA/B,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwN,+BAAA9N,OAAAyN,mBAEAzN,OAAAgD,KAAA,SAGA,IAAAhD,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,cACAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,eAAAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAC,qBACA7N,OAAAgD,KAAA,yCAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA/F,OAAAojD,kBAAAlB,sBAAAkB,mBAGApjD,OAAA0jD,sBAAA,EAEA1jD,OAAAskD,sBAAA,WAEApC,sBAAA0B,mBAAA5jD,OAAAojD,mBAAAx/C,KACA,SAAAnE,MAEAO,OAAAgD,KAAA,2CAAAvD,KAAAyF,MAEA,SAAAzF,MAEAO,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,cAAAjC,aAAAiC,mBAAA,sBAAAL,SAKAO,OAAAukD,qBAAA,WAEAvkD,OAAAgD,KAAA,+CAGArF,WAAA,qBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,UAAA,wBAAA,eAAA,YAAA,eAAA,SAAAqC,OAAAC,MAAA5B,GAAAoX,aAAA9U,QAAAuhD,sBAAA5hD,aAAAsT,UAAA/V,2BAGAmC,OAAAkjD,aACA,CACA,CAAAp7C,IAAA,EAAAq7C,MAAAtlD,aAAAiC,mBAAA,aACA,CAAAgI,IAAA,EAAAq7C,MAAAtlD,aAAAiC,mBAAA,aAEAE,OAAAgjD,kBAAA,EACAhjD,OAAA+B,WAAA,GACA/B,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwN,+BAAA9N,OAAAyN,mBAEAzN,OAAAgD,KAAA,SAGA,IAAAhD,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,cACAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,eAAAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAC,qBACA7N,OAAAgD,KAAA,yCACAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA0P,aAAAutC,oBAEAhjD,OAAAgjD,kBAAAvtC,aAAAutC,mBAGAvtC,aAAAutC,mBAAA,EAEAhjD,OAAAgD,KAAA,SACA,EAAAyS,aAAAutC,mBAEAd,sBAAAoB,kBAAAtjD,OAAAgjD,kBAAAhjD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEAO,OAAAojD,kBAAA3jD,KACAO,OAAAojD,kBAAAG,iBAAAvjD,OAAAkjD,aAAAljD,OAAAojD,kBAAAI,aAAAL,MACAnjD,OAAAojD,kBAAAoB,gBAAAxkD,OAAAojD,kBAAAqB,gBAKA9mD,WAAA,0BAAA,CAAA,SAAA,wBAAA,UAAA,eAAA,eAAA,eAAA,YAAA,SAAAqC,OAAAkiD,sBAAAvhD,QAAAigB,aAAAtgB,aAAAmV,aAAA7B,WAEA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwN,+BAAA9N,OAAAyN,mBACAzN,OAAAgD,KAAA,SAEA,IAAAhD,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,cACAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAwrC,eAAAp5C,OAAAwB,QAAAE,QAAA6D,qBAAAqI,uBAAAC,qBACA7N,OAAAgD,KAAA,yCAEAhD,OAAAwB,QAAAkjD,cAAA,GACA9jC,aAAAM,wBACAzL,aAAAutC,kBACAhjD,OAAAwB,QAAAkjD,cAAAC,qBAAAlvC,aAAAutC,kBAEAhjD,OAAAgD,KAAA,yCAEAhD,OAAAwB,QAAAkjD,cAAA,GACA1kD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IAEAm8C,sBAAAQ,sBAAA1iD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAkjD,cAAAE,sBAAAjkD,QAAA,SAAAA,CAAAlB,KAAA,CAAAyF,IAAAlF,OAAAwB,QAAAkjD,cAAAC,uBAAA,GAAArf,YACAtlC,OAAAwB,QAAAkjD,cAAAnC,mBAAA5hD,QAAA,SAAAA,CAAAlB,KAAA,CAAA4jD,cAAA,MAEArjD,OAAAmJ,qBAAA,KAGAnJ,OAAA6jD,qBAAA,WAEAjjC,aAAAY,sBAEAxhB,OAAAgD,KAAA,sDAAAyS,aAAAutC,uBAGArlD,WAAA,sCAAA,CAAA,SAAA,wBAAA,UAAA,eAAA,eAAA,eAAA,YAAA,SAAAqC,OAAAkiD,sBAAAvhD,QAAAigB,aAAAtgB,aAAAmV,aAAA7B,WAEA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwN,+BAAA9N,OAAAyN,mBACAzN,OAAAgD,KAAA,SAEAyS,aAAAutC,kBACAhjD,OAAAwB,QAAAkjD,cAAAC,qBAAAlvC,aAAAutC,kBAEAhjD,OAAAgD,KAAA,yCAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA/F,OAAAmJ,qBAAA,KAGAnJ,OAAAskD,sBAAA,WAEApC,sBAAAoB,kBAAAtjD,OAAAwB,QAAAkjD,cAAAC,qBAAA3kD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEA,IAAAolD,KAAAhS,WAAA7yC,OAAAwB,QAAAkjD,cAAAI,SACAC,KAAAlS,WAAA7yC,OAAAwB,QAAAkjD,cAAAM,SACA,GAAAvlD,KAAAwlD,sBAAAJ,MAAAplD,KAAAwlD,sBAAAF,MACAtlD,KAAAylD,sBAAAL,MAAAplD,KAAAylD,sBAAAH,KAKA,OAHAtlD,KAAA4jD,cAAA,EACAnB,sBAAA0B,mBAAAnkD,WACAO,OAAAgD,KAAA,wDAGAvD,KAAA4jD,cAAA,EACAnB,sBAAA0B,mBAAAnkD,MACAO,OAAAgD,KAAA,4DAAAyS,aAAAutC,sBAIAhjD,OAAA6jD,qBAAA,WAEA7jD,OAAAgD,KAAA,gDAAAyS,aAAAutC,uBAIArlD,WAAA,sCAAA,CAAA,SAAA,wBAAA,UAAA,eAAA,eAAA,eAAA,YAAA,SAAAqC,OAAAkiD,sBAAAvhD,QAAAigB,aAAAtgB,aAAAmV,aAAA7B,WAEA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwN,+BAAA9N,OAAAyN,mBACAzN,OAAAgD,KAAA,SAEAyS,aAAAutC,mBACAhjD,OAAAgD,KAAA,yCAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IAEAm8C,sBAAAQ,sBAAA1iD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAkjD,cAAAnC,mBAAA5hD,QAAA,SAAAA,CAAAlB,KAAA,CAAA4jD,cAAA,MAEArjD,OAAAmJ,qBAAA,QAGAxL,WAAA,8BAAA,CAAA,SAAA,wBAAA,UAAA,eAAA,eAAA,eAAA,YAAA,SAAAqC,OAAAkiD,sBAAAvhD,QAAAigB,aAAAtgB,aAAAmV,aAAA7B,WAEA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwN,+BACA9N,OAAAgD,KAAA,SAEAhD,OAAAwB,QAAAkjD,cAAA,GACA1kD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IAEAm8C,sBAAAQ,sBAAA1iD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAkjD,cAAAnC,mBAAA5hD,QAAA,SAAAA,CAAAlB,KAAA,CAAA4jD,cAAA,MAEArjD,OAAAmJ,qBAAA,QClzDAnM,QAAAC,OAAA,UAAA,CAAA,aAAA,eAAA,oBAAA,kBAAA,aAAA,kBACAC,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBAEAH,eAAAK,KAAA,+BACA,CACAC,YAAAH,iBAAAI,YAAA,eACAC,WAAA,eACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mCAIAP,KAAA,2CACA,CACAC,YAAAH,iBAAAI,YAAA,eACAC,WAAA,eACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mCAIAP,KAAA,4BACA,CACAC,YAAAH,iBAAAI,YAAA,YACAC,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mCAIAP,KAAA,8BACA,CACAC,YAAAH,iBAAAI,YAAA,cACAC,WAAA,cACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mCAIAP,KAAA,mCACA,CACAC,YAAAH,iBAAAI,YAAA,mBACAC,WAAA,sBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mCAIAP,KAAA,iCACA,CACAC,YAAAH,iBAAAI,YAAA,wBACAC,WAAA,kBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mCAIAP,KAAA,4BACA,CACAC,YAAAH,iBAAAI,YAAA,YACAC,WAAA,eACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,sCAMAJ,WAAA,sBAAA,CAAA,SAAA,SAAAqC,qBAGAA,OAAAuB,WAAA,gBAMA5D,WAAA,mBAAA,CAAA,SAAA,qBAAA,eAAA,UAAA,YAAA,eAAA,SAAAqC,OAAA4lB,mBAAAtlB,aAAAK,QAAAiT,UAAA/V,2BAIAmC,OAAAsX,MAAA,GACAtX,OAAAsX,MAAA6tC,aAAA,GACAnlD,OAAAsX,MAAA8tC,oBAAA,CACAztC,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAwtC,SAAA1yC,KAAAoF,SACAD,SAAAnF,KAAAmF,SAAAutC,SAAA,IACArlD,OAAAgD,KAAA,gCAAA8U,SAAA5S,KACAlF,OAAAsN,UAEA2K,QAAA,CACA,CACAC,MAAA,cACAzH,MAAA5S,aAAAiC,mBAAA,WACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,eACAzH,MAAA5S,aAAAiC,mBAAA,SACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,YACAzH,MAAA5S,aAAAiC,mBAAA,UACAqY,MAAA,GACAM,SAAA,kEACAJ,YAAA,GAEA,CACAI,SAAA,+BACAN,MAAA,KAGAO,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAGAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAAguC,iBAAA,WAEAtlD,OAAAsX,MAAAiuC,eAAA,IAAAjuC,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAAO,OAAAwlD,iBACAtyB,OAAA,CACAd,MAAA,CACAgB,OAAA,CACA/E,YAAA,CACAzV,UAAA,GAEAjP,aAAA,CACAiP,UAAA,GAEA6sC,UAAA,CACA7sC,UAAA,MAKA/O,OAAA,IAGA7J,OAAAsX,MAAAiuC,eAAAlsC,OACArZ,OAAAsX,MAAA6tC,aAAAzsC,WAAAjZ,KAAAO,OAAAsX,MAAAiuC,eAAA9lD,SAGAO,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAolD,4BAEA1lD,OAAAgD,KAAA,SAGAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAwlD,iBAAA,GACA5/B,mBAAA+/B,aAAA3lD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEAA,KAAAumB,WAEA,IAAAvmB,KAAA+lD,iBAAAnmD,QAMArC,QAAAmP,QAAA1M,KAAA+lD,iBAAA,SAAAn5C,MAEAA,KAAAgiB,YAAAhiB,KAAAu5C,UAAA,IAAAv5C,KAAAw5C,WAEA7lD,OAAAwlD,iBAAA7kD,QAAA,UAAAA,CAAAlB,KAAA+lD,iBAAA,eACAxlD,OAAAsX,MAAAguC,oBATAtlD,OAAAuQ,WAAAU,cAAApT,aAAAiC,mBAAA,aAYAE,OAAAuQ,WAAAQ,uBAIApT,WAAA,eAAA,CAAA,KAAA,SAAA,UAAA,eAAA,qBAAA,gBAAA,SAAA,eAAA,aAAA,eAAA,YAAA,YAAA,eAAA,SAAAU,GAAA2B,OAAAW,QAAAL,aAAAslB,mBAAA/E,cAAAohC,OAAAxsC,aAAAtV,WAAAygB,aAAAxgB,UAAAwT,UAAA/V,2BAMA,SAAAioD,cAAAC,QAEA/lD,OAAAgmD,eAAAD,OACA/lD,OAAAimD,YAAAF,OACA/lD,OAAAkmD,cAAAH,OACA/lD,OAAAmmD,iBAAAJ,OACA/lD,OAAAomD,mBAAAL,OATA/lD,OAAAP,KAAA,GACAO,OAAAsX,MAAA,GAmEAtX,OAAAqQ,OAAA,mDAxDA,WAEA,IAGAg2C,MAHArpD,QAAAkF,yBAAAlC,OAAAP,KAAA4G,kBAAArG,OAAAP,KAAA4G,gBAAAS,kBAGAu/C,MAAArmD,OAAAP,KAAA4G,gBAAAC,4BAEAtJ,QAAAmP,QAAAk6C,MAAA,SAAAh6C,MAEA,OAAAA,KAAA1F,UAEA,KAAA,EAEAhG,QAAA,SAAAA,CAAA0lD,MAAA,CAAA1/C,SAAA,IAAA,GAAA,GACAC,SAEAyF,KAAAi6C,UAAA,GAIAj6C,KAAAzF,UAAA,EACAyF,KAAAi6C,UAAA,GAEA,MAEA,KAAA,EAEA3lD,QAAA,SAAAA,CAAA0lD,MAAA,CAAA1/C,SAAA,IAAA,GAAA,GACAC,SAEAyF,KAAAi6C,UAAA,GAIAj6C,KAAAzF,UAAA,EACAyF,KAAAi6C,UAAA,GAEA,MAEA,KAAA,GAEA3lD,QAAA,SAAAA,CAAA0lD,MAAA,CAAA1/C,SAAA,IAAA,GAAA,GACAC,SAEAyF,KAAAi6C,UAAA,GAIAj6C,KAAAzF,UAAA,EACAyF,KAAAi6C,UAAA,SAOA,GAEAtmD,OAAAumD,wBAAA,CACA,CACA3gD,OAAA,EACA8K,KAAA7S,aAAAiC,mBAAA,SAEA,CACA8F,MAAA,EACA8K,KAAA7S,aAAAiC,mBAAA,UAEA,CACA8F,MAAA,EACA8K,KAAA7S,aAAAiC,mBAAA,aAEA,CACA8F,MAAA,EACA8K,KAAA7S,aAAAiC,mBAAA,eAIAE,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA0F,yBAEA1F,OAAAwB,UAAAxB,OAAAwB,QAAA,IAEAxB,OAAAwB,QAAAkZ,SAAA,CACA8rC,eAAA,CACAxpC,OAAA,GAEAypC,kBAAA,CACAzpC,OAAA,EACA0pC,YAAA,GACAC,eAAA,GAEAC,mBAAA,CACA5pC,OAAA,EACA6G,SAAA,CACA1hB,SAAA,GACA0kD,OAAA,GACAniC,aAAA7mB,aAAAiC,mBAAA,wBAEA4B,QAAA,CACA0hB,UAAA,GACAX,OAAA,GACAY,YAAA,GACAC,KAAA,GACA/I,GAAA,GACArV,IAAA,GACAqe,SAAA,GACAC,cAAA,GACAC,SAAA,GACAE,MAAA,GACAC,UAAA,IAEAnC,MAAA,CACAjR,SAAA,EACAE,KAAA,KAGAo2C,iBAAA,CACA9pC,MAAA,UAAA5c,UAAA2mD,OACAC,MAAA,GACAC,aAAA,IAGAjnD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,CACAqC,QAAA,KAGA/F,OAAAknD,WAAArmC,cAAAqmC,WAAArpD,cACAmC,OAAAkkB,gBAAArD,cAAAqD,gBAAArmB,cACAmC,OAAAP,KAAA,GACAO,OAAAsX,MAAA,GAEAtX,OAAAmnD,YAAA,CACAA,aAAA,GAGAnnD,OAAAonD,kBAAApqD,QAAAkF,yBAAAlC,OAAAwB,QAAA6C,sBAAArE,OAAAwB,QAAA6C,mBAAAgjD,2BACAlnD,WAAAmnD,yBAAAtnD,OAAAwB,QAAAE,SAAA,EAEA1B,OAAAunD,mBAAAvnD,OAAAwnD,qBAAAxnD,OAAAmV,QAAA7R,cAEAmS,aAAAgyC,YAEAznD,OAAA0nD,mBAAAjyC,aAAAgyC,WACAznD,OAAA2nD,YAAAvzC,SAAApU,OAAA0nD,mBAAA,MAAA1nD,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAnB,IACAlF,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA/F,OAAA6G,2BAAAvG,aAAAolD,4BAEA1lD,OAAAgD,KAAA,WAKAhD,OAAA2nD,aAAA,EACA3nD,OAAA0nD,mBAAA1nD,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAnB,IACAlF,OAAAwB,QAAAE,QAAA2hB,YAAArjB,OAAAwB,QAAAE,QAAA+gB,OACAziB,OAAAwB,QAAAE,QAAAkmD,aAAA5nD,OAAAwB,QAAAE,QAAA+gB,OACAziB,OAAA6nD,YAGAjiC,mBAAA+/B,aAAA3lD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEAA,KAAAumB,YAEA,IAAAvmB,KAAA+lD,iBAAAnmD,QACAW,OAAAuQ,WAAAU,cAAApT,aAAAiC,mBAAA,aAEA9C,QAAAmP,QAAA1M,KAAA+lD,iBAAA,SAAAn5C,MAEAA,KAAAgiB,YAAAhiB,KAAAu5C,UAAA,IAAAv5C,KAAAw5C,WAEA7lD,OAAA8nD,aAAAnnD,QAAA,UAAAA,CAAAlB,KAAA+lD,iBAAA,gBAGAxlD,OAAAuQ,WAAAQ,mBAGA6U,mBAAAmiC,mBAAA/nD,OAAA0nD,oBAAA9jD,KAAA,SAAAnE,MAEAA,KAAA4G,gBAAA2hD,mBAAAvoD,KAAA4G,gBAAA4hD,kBACA,MAAAxoD,KAAA4G,gBAAA6hD,mBAAAzoD,KAAA4G,gBAAA6hD,kBAAA,GAEAloD,OAAAP,KAAAA,KACAO,OAAAmoD,oBAAA,GACA96C,WAAA,WAEArQ,QAAAkF,yBAAAlC,OAAAooD,eACApoD,OAAAsN,OAAAtN,OAAAooD,aAAA/5C,iBAEA,SAIArO,OAAA6nD,SAAA,WAEA7nD,OAAAwB,QAAAkZ,SAAAksC,mBAAAllD,QACA,CACA0hB,UAAApjB,OAAAwB,QAAAE,QAAA0hB,UACAX,OAAAziB,OAAAwB,QAAAE,QAAA+gB,OACAY,YAAArjB,OAAAwB,QAAAE,QAAA2hB,YACAC,KAAAtjB,OAAAwB,QAAAE,QAAAsW,KACAuC,GAAAva,OAAAwB,QAAAE,QAAA6Y,GACArV,IAAAlF,OAAAwB,QAAAE,QAAAwD,IACAqe,SAAAvjB,OAAAwB,QAAAE,QAAA6hB,SACAC,cAAAxjB,OAAAwB,QAAAE,QAAA6hB,SACAE,SAAAzjB,OAAAwB,QAAAE,QAAA+hB,SACAE,OAAA,EACAC,WAAA,IAIA5jB,OAAAwnD,qBAAA,SAAAa,OACA,OAAAroD,OAAA6G,2BAAAvG,aAAAolD,4BAGA1lD,OAAAmoD,mBAAA,SAAApC,QAEA/lD,OAAAP,KAAA4G,gBAAAS,gBAEA9J,QAAAmP,QAAAnM,OAAAP,KAAA4G,gBAAAC,4BAAA,SAAA+F,MAEAA,KAAAzF,UAAA,EACAyF,KAAAi6C,UAAA,IAKAtpD,QAAAmP,QAAAnM,OAAAP,KAAA4G,gBAAAC,4BAAA,SAAA+F,MAEAA,KAAAi6C,UAAA,IAGAR,cAAAC,SAGA/lD,OAAAsoD,YAAA,WAEA1nC,aAAAY,qBAGAjU,EAAA,qBAAA4tB,SAAA,qBAAA5tB,EAAA,kBAAA4tB,SAAA,qBAIAn7B,OAAA2nD,aAEA,EAAA3nD,OAAAsX,MAAAixC,eAAAC,eAAAC,sBAAAppD,SAOA,EAAAW,OAAAP,KAAAipD,qBAEA1oD,OAAAwB,QAAAkZ,SAAA8rC,eAAAxpC,OAAA,EAGAhd,OAAA2oD,oBAOA3oD,OAAA2oD,gBAAA,WAEA3oD,OAAAP,KAAA4G,gBAAAuiD,YAAA,EACA5oD,OAAAwB,QAAAkZ,SAAA8rC,eAAAxpC,OAAA,EACAhd,OAAA6oD,QAGA7oD,OAAA8oD,gBAAA,WAEA9oD,OAAAP,KAAA4G,gBAAAuiD,YAAA,EACA5oD,OAAAwB,QAAAkZ,SAAA8rC,eAAAxpC,OAAA,EACAhd,OAAA6oD,QAGA7oD,OAAA6oD,KAAA,WAEA,IAAAziD,QAAApG,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBACArG,OAAAP,KAAA4G,gBAAA0iD,WAAA3iD,QAAAw/C,UAAA,IAAAx/C,QAAAy/C,SACA7lD,OAAAP,KAAA4G,gBAAA2iD,mBAAAhpD,OAAAwB,QAAAE,QAAA6Y,GAEAva,OAAAP,KAAA4G,gBAAA4iD,eAAAtoD,QAAA,MAAAA,CAAAX,OAAAP,KAAA4G,gBAAA6iD,OACAlpD,OAAAP,KAAA4G,gBAAA8iD,kBAAAxoD,QAAA,MAAAA,CAAAX,OAAAP,KAAA4G,gBAAA+iD,UACAppD,OAAAP,KAAA4G,gBAAAgjD,mBAAA1oD,QAAA,MAAAA,CAAAX,OAAAP,KAAA4G,gBAAAijD,WACAtpD,OAAAP,KAAA4G,gBAAAkjD,aAAA5oD,QAAA,MAAAA,CAAAX,OAAAP,KAAA4G,gBAAAmjD,KAEA5jC,mBAAA0iC,YAAAtoD,OAAAP,KAAA4G,iBAAAzC,KAAA,SAAAnE,MAEAO,OAAAP,KAAA4G,gBAAA5G,KAAA4G,gBACArG,OAAAwB,QAAAE,QAAA+gB,SAAAziB,OAAAwB,QAAAE,QAAA2hB,YACArjB,OAAAypD,cAGAzpD,OAAAwB,QAAAkZ,SAAAosC,iBAAAG,YACAjnD,OAAA2C,SAEAs/C,OAAAyH,YAQA1pD,OAAAypD,YAAA,WAIA,IAEA/nD,QAKAqgB,MAPA/hB,OAAA2nD,eAEAjmD,QAAA1E,QAAAm9B,KAAAn6B,OAAAwB,QAAAE,UACA6Y,GAAAva,OAAAP,KAAA4G,gBAAAsD,aACAjI,QAAA+hB,SAAAzjB,OAAAwB,QAAAE,QAAA+hB,SACA/hB,QAAA2hB,YAAArjB,OAAAwB,QAAAE,QAAA2hB,YAEAtB,MAAA5hB,WAAAuC,0BACAvC,WAAAwpD,oBAAA5nC,MAAA/hB,OAAAwB,QAAAM,YAAA8B,KAAA,SAAAnE,MACAiC,QAAA0hB,UAAA3jB,KAAA2jB,UACA1hB,QAAA4hB,KAAA,KAEAnjB,WAAAspD,YAAA/nD,SAAA,GAAAkC,KAAA,SAAAnE,MACAO,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAA4iD,GACAzpD,WAAAma,wBAAAta,OAAAwB,QAAAE,QAAA6Y,GAAAva,OAAAwB,QAAAM,YAAA8B,KAAA,SAAAnE,MACAO,OAAAwB,QAAAE,QAAAjC,KAEAO,OAAAwB,QAAAkZ,SAAAosC,iBAAAG,YACAjnD,OAAA2C,SAEAs/C,OAAAyH,iBAMA1pD,OAAA6pD,iCAAA,SAAA12B,IAEA,IAAA,IAAA5sB,EAAA,EAAAA,EAAAvG,OAAAwB,QAAAE,QAAA8D,kBAAAnG,OAAAkH,IAEA,GAAAvG,OAAAwB,QAAAE,QAAA8D,kBAAAe,GAAAS,SAAA4iD,KAAAz2B,GAGA,YADAnzB,OAAAwB,QAAAE,QAAA6D,qBAAAvF,OAAAwB,QAAAE,QAAA8D,kBAAAe,KAMAvG,OAAA8pD,sBAAA,WAEA,IAAApC,mBAAA1nD,OAAAwB,QAAAkZ,SAAA+rC,kBAAAC,YACA9gC,mBAAAmiC,mBAAAL,oBAAA9jD,KAAA,SAAAnE,MAEA,IAAA6D,aAAA7D,KAAA4G,gBAAAC,4BACAyjD,2BAAA/pD,OAAAP,KAAA4G,gBAAAC,4BACAtG,OAAAP,KAAA4G,gBAAAS,iBAAA,EACA,IAAA,IAAAJ,EAAA,EAAAA,EAAApD,aAAAjE,OAAAqH,IAEA,IAAA,IAAAH,EAAA,EAAAA,EAAAwjD,2BAAA1qD,OAAAkH,IAEAwjD,2BAAAxjD,GAAAI,WAAArD,aAAAoD,GAAAC,WAEA3G,OAAAwB,QAAAkZ,SAAA+rC,kBAAAE,gBACAoD,2BAAAxjD,GAAAK,UAAA,GACAtD,aAAAoD,GAAAE,WACAmjD,2BAAAxjD,GAAAK,UAAA,GACAmjD,2BAAAxjD,GAAAK,WACA5G,OAAAP,KAAA4G,gBAAAS,iBAAA,IAIAg/C,eAAA,GACA9lD,OAAAwB,QAAAkZ,SAAA+rC,kBAAAzpC,OAAA,KAIAhd,OAAAykB,cAAA,WAEAzkB,OAAAgD,KAAA,mCAGAhD,OAAAgqD,gBAAA,SAAAnyC,GAEA7X,OAAAsX,MAAAixC,eAAAC,eAAArzC,QAAAizC,aAAArkC,SAAA+4B,SAEA98C,OAAAwB,QAAAE,QAAA2hB,YAAA,GACArjB,OAAAwB,QAAAE,QAAAkmD,aAAA,KAIA5nD,OAAAiqD,qBAAA,WAEA,UAAA7pD,UAAA2mD,OAEA9E,OAAAyH,SAGAtpD,UAAA2mD,KAAA,UAIA/mD,OAAAkqD,qBAAA,WAEA9pD,UAAA2mD,KAAA,KAGA/mD,OAAAmqD,gBAAA,WAEAvpC,aAAAY,qBACAjU,EAAA,gBAAA4tB,SAAA,sBAGAn7B,OAAAwB,QAAAkZ,SAAAosC,iBAAA9pC,OAAA,EACAhd,OAAAwB,QAAAkZ,SAAAosC,iBAAAG,aAAA,EACAjnD,OAAAP,KAAA4G,gBAAAsD,aAAA3J,OAAAwB,QAAAkZ,SAAAosC,iBAAAE,MACAhnD,OAAAsoD,mBAGA3qD,WAAA,cAAA,CAAA,KAAA,SAAA,UAAA,eAAA,qBAAA,eAAA,eAAA,aAAA,YAAA,eAAA,SAAAU,GAAA2B,OAAAW,QAAAL,aAAAslB,mBAAAhF,aAAAnL,aAAAtV,WAAAyT,UAAA/V,2BAGAmC,OAAAwB,QAAA4oD,QAAA,CACAptC,OAAA,EACAqtC,aAAA,GACAjkD,QAAAwf,mBAAA0kC,mBAEAtqD,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAolD,4BAEA1lD,OAAAgD,KAAA,SAGA4d,aAAAM,wBACAlhB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA6f,mBAAA+/B,aAAA3lD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEAA,KAAAumB,YAEA,IAAAvmB,KAAA+lD,iBAAAnmD,QACAW,OAAAuQ,WAAAU,cAAApT,aAAAiC,mBAAA,eAEA9C,QAAAmP,QAAA1M,KAAA+lD,iBAAA,SAAAn5C,MAEAA,KAAAgiB,YAAAhiB,KAAAu5C,UAAA,IAAAv5C,KAAAw5C,WAEA7lD,OAAAwB,QAAA4oD,QAAAC,aAAA1pD,QAAA,UAAAA,CAAAlB,KAAA+lD,iBAAA,gBAGAxlD,OAAAuQ,WAAAQ,mBAEA/Q,OAAAwB,QAAA4oD,QAAAptC,OAAA,GAGAhd,OAAAuqD,cAAA,WAEA,IAeAnkD,QAfAokD,mBAAA,EACA5pC,aAAAY,sBAEAxkB,QAAAmP,QAAAnM,OAAAyoD,sBAAA,SAAA7iD,MAAAkC,KACA,sCAAAlC,MAAAwsB,QACAo4B,mBAAA,KAIAA,oBAGAxqD,OAAA8pD,0BAGA1jD,QAAApG,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBACArG,OAAAwB,QAAA4oD,QAAAhkD,QAAA2iD,WAAA3iD,QAAAw/C,UAAA,IAAAx/C,QAAAy/C,SACA7lD,OAAAwB,QAAA4oD,QAAAhkD,QAAA4iD,mBAAAhpD,OAAAwB,QAAAE,QAAA6Y,GACAva,OAAAwB,QAAA4oD,QAAAhkD,QAAAmC,QAAAvI,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QAEAqd,mBAAA0iC,YAAAtoD,OAAAwB,QAAA4oD,QAAAhkD,SAAAxC,KAAA,SAAAnE,MAEAO,OAAAwB,QAAA4oD,QAAAptC,OAAA,EAEAvd,KAAA4G,iBAAA,IAAA5G,KAAA4G,gBAAAkC,SAEAvI,OAAAgD,KAAA,4BACAhD,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,iBACAjC,aAAAiC,mBAAA,0BAIAE,OAAAgD,KAAA,gCAAAvD,KAAA4G,gBAAAnB,UAMAlF,OAAA8pD,sBAAA,WAEA,IAAA9pD,OAAAwB,QAAA4oD,QAAA1D,YAAA,OAAA,EAGA,IAAAgB,mBAAA1nD,OAAAwB,QAAA4oD,QAAA1D,YAuBA,OAtBA9gC,mBAAAmiC,mBAAAL,oBAAA9jD,KAAA,SAAAnE,SAEAO,OAAAwB,QAAA4oD,QAAAhkD,QAAAE,4BAAA7G,QAAA4G,gBAAAC,4BACAtG,OAAAwB,QAAA4oD,QAAAhkD,QAAAU,gBAAArH,QAAA4G,gBAAAS,gBACAV,QAAApG,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBACArG,OAAAwB,QAAA4oD,QAAAhkD,QAAA2iD,WAAA3iD,QAAAw/C,UAAA,IAAAx/C,QAAAy/C,SACA7lD,OAAAwB,QAAA4oD,QAAAhkD,QAAA4iD,mBAAAhpD,OAAAwB,QAAAE,QAAA6Y,GACAva,OAAAwB,QAAA4oD,QAAAhkD,QAAAmC,QAAAvI,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAqd,mBAAA0iC,YAAAtoD,OAAAwB,QAAA4oD,QAAAhkD,SAAAxC,KAAA,SAAAnE,MAEAO,OAAAwB,QAAA4oD,QAAAptC,OAAA,EAEAvd,KAAA4G,iBAAA,IAAA5G,KAAA4G,gBAAAkC,SACAvI,OAAAgD,KAAA,4BACAhD,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,iBACAjC,aAAAiC,mBAAA,0BAGAE,OAAAgD,KAAA,gCAAAvD,KAAA4G,gBAAAnB,UAIA,GAGAlF,OAAAyqD,aAAA,WAEAzqD,OAAAwB,QAAA4oD,QAAAptC,OAAA,EACAhd,OAAAwB,QAAA4oD,QAAA,GACApqD,OAAAgD,KAAA,iCAGArF,WAAA,sBAAA,CAAA,SAAA,UAAA,eAAA,qBAAA,eAAA,kBAAA,aAAA,YAAA,eAAA,mBAAA,SAAAqC,OAAAW,QAAAL,aAAAslB,mBAAAhF,aAAA8pC,gBAAAvqD,WAAAyT,UAAA/V,aAAA4e,+BAGAzc,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAyd,wBAEA/d,OAAAgD,KAAA,SAGA4d,aAAAM,wBACAlhB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,GACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAwB,QAAAikB,SAAA,CACAklC,SAAA,GACAC,qBAAA,EACAC,kBAAA,IAAA7qD,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAA8jD,kBACAC,qBAAAltD,aAAAiC,mBAAA,4BACAkrD,sBAAAhrD,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAAikD,sBACAC,eAAA,IAAAlrD,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAAmkD,iBACAC,6BAAA3uC,iBAAA4D,eAAArgB,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAAikD,wBAEArlC,mBAAA+/B,aAAA3lD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MAEAA,KAAAumB,WAEA,IAAAvmB,KAAA+lD,iBAAAnmD,OAEAW,OAAAuQ,WAAAU,cAAApT,aAAAiC,mBAAA,qBAIA9C,QAAAmP,QAAA1M,KAAA+lD,iBAAA,SAAAn5C,MACAA,KAAAgiB,YAAAhiB,KAAAu5C,UAAA,IAAAv5C,KAAAw5C,SAEA7lD,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAAqkD,gBAAAh/C,KAAAnH,MACAlF,OAAAwB,QAAAikB,SAAAmlC,qBAAAv+C,KAAAnH,OAGAlF,OAAAwB,QAAAikB,SAAAklC,SAAAhqD,QAAA,UAAAA,CAAAlB,KAAA+lD,iBAAA,eACAxlD,OAAAwB,QAAAikB,SAAAmlC,qBAAA,IAAA5qD,OAAAwB,QAAAikB,SAAAmlC,qBAAA5qD,OAAAwB,QAAAikB,SAAAklC,SAAA,GAAAzlD,IACAlF,OAAAwB,QAAAikB,SAAAmlC,sBAIA5qD,OAAAuQ,WAAAQ,mBAEA/Q,OAAAwB,QAAAikB,SAAAylC,iBACAlrD,OAAAwB,QAAAikB,SAAAslC,qBAAAltD,aAAAiC,mBAAA,4BAIAE,OAAAqgB,eAAA,WAGA,IAOAirC,IAPAtuD,QAAAkF,yBAAAlC,OAAAwB,QAAAikB,SAAA2lC,gCAIAE,IAAAzY,WAAAp2B,iBAAAq2B,sBAAA9yC,OAAAwB,QAAAikB,SAAA2lC,+BAGAE,IAAA7uC,iBAAA4D,eAAAirC,KAGAtrD,OAAAwB,QAAAikB,SAAA2lC,6BAAAE,MAGAtrD,OAAAurD,oBAAA,WAEA3qC,aAAA4D,sBAEAxkB,OAAAwB,QAAAikB,SAAAolC,oBAAAjqC,aAAAY,uBAIAxhB,OAAAwB,QAAAikB,SAAAulC,sBAAAnY,WAAAp2B,iBAAAq2B,sBAAA9yC,OAAAwB,QAAAikB,SAAA2lC,+BAEAV,gBAAAc,4BAAAxrD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAvI,OAAAwB,QAAAikB,SAAAmlC,qBACA5qD,OAAAwB,QAAAikB,SAAAulC,sBACAhrD,OAAAwB,QAAAikB,SAAAolC,mBAAAjnD,KAAA,SAAAnE,MAEAO,OAAAmO,gBAAAnO,OAAAyrD,cAEA,IAAAC,kBAAA1rD,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAA4iD,GACAzpD,WAAAma,wBAAAta,OAAAwB,QAAAE,QAAA6Y,GAAAva,OAAAwB,QAAAM,YAAA8B,KAAA,SAAAnE,MAEAO,OAAAwB,QAAAE,QAAAjC,KACA,IAAA,IAAA8G,EAAA,EAAAA,EAAAvG,OAAAwB,QAAAE,QAAA8D,kBAAAnG,OAAAkH,IAEA,GAAAvG,OAAAwB,QAAAE,QAAA8D,kBAAAe,GAAAS,SAAA4iD,KAAA8B,kBAGA,YADA1rD,OAAAwB,QAAAE,QAAA6D,qBAAAvF,OAAAwB,QAAAE,QAAA8D,kBAAAe,IAIAvG,OAAAuB,eAGAvB,OAAAqgB,wBAIA1iB,WAAA,kBAAA,CAAA,SAAA,iBAAA,UAAA,eAAA,qBAAA,eAAA,kBAAA,aAAA,oBAAA,YAAA,eAAA,SAAAqC,OAAAE,eAAAS,QAAAL,aAAAslB,mBAAAhF,aAAA8pC,gBAAAvqD,WAAAM,kBAAAmT,UAAA/V,2BAGAmC,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAAwB,UAAAxB,OAAAwB,QAAA,IACAxB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAA,CACAqC,QAAA,KAGA,IAAAjE,WAAA9B,OAAAwB,SAAAxB,OAAAwB,QAAAM,WAAA9B,OAAAwB,QAAAM,WAAA,EACArB,kBAAA0I,qBAAArH,WAAA,IAAA8B,KAAA,SAAAnE,MAEAO,OAAAslB,cAAA7lB,KAAAkF,UAAA9G,aAAAiC,mBAAA,mBAAAL,OAGAO,OAAAwB,QAAAikB,SAAA,CACA5B,SAAA,CACA6B,YAAA,GACAvjB,SAAA,GACA0kD,OAAA,GACAniC,aAAA7mB,aAAAiC,mBAAA,wBAEA4B,QAAA,CACA0hB,UAAApjB,OAAAwB,QAAAE,QAAA0hB,UACAX,OAAAziB,OAAAwB,QAAAE,QAAA+gB,OACAY,YAAArjB,OAAAwB,QAAAE,QAAA2hB,YACAC,KAAAtjB,OAAAwB,QAAAE,QAAAsW,KACAuC,GAAAva,OAAAwB,QAAAE,QAAA6Y,GACArV,IAAAlF,OAAAwB,QAAAE,QAAAwD,IACAqe,SAAAvjB,OAAAwB,QAAAE,QAAA6hB,SACAiC,YAAA,GACAhC,cAAA,GACAC,SAAAzjB,OAAAwB,QAAAE,QAAA+hB,SACAE,OAAA,EACAC,WAAA,GAEAnC,MAAA,CACAjR,SAAA,EACAE,KAAA,IAEAiV,SAAA,IAIA3lB,OAAAulB,eAAA,WAIA3E,aAAAY,sBAGAxhB,OAAAklB,kBAGAllB,OAAAklB,eAAA,WAGAllB,OAAAwB,QAAAikB,SAAA/jB,QAAA8jB,YAAAxlB,OAAAwB,QAAAikB,SAAA5B,SAAA6B,YACA1lB,OAAAwB,QAAAikB,SAAA/jB,QAAA8hB,cAAAxjB,OAAAwB,QAAAikB,SAAA5B,SAAA1hB,SAEAhC,WAAAglB,qBAAAnlB,OAAAwB,QAAAikB,SAAA/jB,SAAAkC,KACA,SAAAnE,OAKA,KAFAO,OAAAwB,QAAAikB,SAAA/jB,QAAAjC,MAEAmkB,YAGA1jB,eAAA2hB,MAAA7hB,OAAAwB,QAAAE,QAAA6Y,GAAAva,OAAAwB,QAAAikB,SAAA5B,SAAA1hB,SAAA,IAAAyB,KAAA,SAAAnE,OAEAsiB,MADAtiB,MACAuiB,MACA/e,QAAAC,MAAA,eAAA6e,OAGA,IAAA2pC,kBAAA1rD,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAA4iD,GACAzpD,WAAAwpD,oBAAA5nC,MAAA/hB,OAAAwB,QAAAM,YAAA8B,KAAA,SAAAnE,MACAO,OAAAwB,QAAAE,QAAAjC,KACA,IAAA,IAAA8G,EAAA,EAAAA,EAAAvG,OAAAwB,QAAAE,QAAA8D,kBAAAnG,OAAAkH,IACA,GAAAvG,OAAAwB,QAAAE,QAAA8D,kBAAAe,GAAAS,SAAA4iD,KAAA8B,kBAEA,YADA1rD,OAAAwB,QAAAE,QAAA6D,qBAAAvF,OAAAwB,QAAAE,QAAA8D,kBAAAe,KAKA,SAAA+b,UAKAtiB,OAAAwB,QAAAikB,SAAAE,SAAA,IAIA,SAAArD,KAEAtlB,QAAAmP,QAAAmW,IAAA,SAAAjW,MAEArM,OAAAJ,SAAAC,KAAAwM,KAAAxO,aAAAiC,mBAAA,eAMAE,OAAAukB,YAAA,WAEA3D,aAAA4D,0BAGA7mB,WAAA,eAAA,CAAA,SAAA,YAAA,eAAA,SAAAqC,OAAA4T,UAAA/V,2BAGAmC,OAAAoD,aAAAM,aAAA,CACAioD,SAAA,CACAC,aAAA,KAGA5rD,OAAAsX,MAAA,GACAtX,OAAAsX,MAAAu0C,aAAA,GACA7rD,OAAAsX,MAAAw0C,oBAAA,CACAn0C,UAAA,EACAC,OAAA,SAAAC,GACA,IAAAwtC,SAAA1yC,KAAAoF,SACAD,SAAAnF,KAAAmF,SAAAutC,SAAA,IACArlD,OAAAgD,KAAA,gCAAA8U,SAAA5S,KACAlF,OAAAsN,UAEA2K,QAAA,CACA,CACAC,MAAA,iBACAzH,MAAA5S,aAAAiC,mBAAA,aACAoZ,UAAA,EACAf,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,mBACAzH,MAAA5S,aAAAiC,mBAAA,YACAoZ,UAAA,EACAf,MAAA,IACA5F,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,iBACAzH,MAAA5S,aAAAiC,mBAAA,QACAqY,MAAA,GACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,mBACAzH,MAAA5S,aAAAiC,mBAAA,YACAoZ,UAAA,EACAf,MAAA,GACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,sBACAzH,MAAA5S,aAAAiC,mBAAA,eACAoZ,UAAA,EACA3G,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,sBACAzH,MAAA5S,aAAAiC,mBAAA,aACAoZ,UAAA,EACA3G,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,qBACAzH,MAAA5S,aAAAiC,mBAAA,YACAoZ,UAAA,EACA3G,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,qBACAzH,MAAA5S,aAAAiC,mBAAA,YACAoZ,UAAA,EACA3G,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,MAKAE,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAmV,QAAA42C,iBAAA,WACA/rD,OAAAsX,MAAAu0C,aAAAnzC,WAAAjZ,KAAAO,OAAAoD,aAAAM,aAAAioD,SAAAC,eAGA5rD,OAAAuB,WAAA,WACAvB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,QAGApI,WAAA,uBAAA,CAAA,SAAA,eAAA,qBAAA,eAAA,mBAAA,oBAAA,kBAAA,SAAAqC,OAAA4gB,aAAAgF,mBAAAtlB,aAAAosB,iBAAAjsB,kBAAA3C,8BAEA,IAAAD,aAAAC,gBAAAC,gCAAA,8BACAiC,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAA4oD,iBAAA,EACA3+C,WAAA,WACArN,OAAAoD,aAAAM,aAAAioD,SAAA,CACAM,aAAA,EACAC,gBAAA,EACAC,gBAAA,EACAC,gBAAA,EACAC,YAAA,KACAC,UAAA,KACAC,cAAA,IAEA,GACAvsD,OAAAwsD,aAAA,CACA,CAAAtnD,IAAA,KAAAogC,YAAAznC,aAAAiC,mBAAA,QACA,CAAAoF,IAAA,MAAAogC,YAAAznC,aAAAiC,mBAAA,YACA,CAAAoF,IAAA,MAAAogC,YAAAznC,aAAAiC,mBAAA,cACA,CAAAoF,IAAA,MAAAogC,YAAAznC,aAAAiC,mBAAA,WACA,CAAAoF,IAAA,MAAAogC,YAAAznC,aAAAiC,mBAAA,cACA,CAAAoF,IAAA,MAAAogC,YAAAznC,aAAAiC,mBAAA,WAEAE,OAAAysD,YAAA,CACA,CAAA9iD,aAAA,KAAA0kB,YAAAxwB,aAAAiC,mBAAA,SAEAE,OAAA6G,2BAAAvG,aAAAolD,4BACA9/B,mBAAA+/B,aAAA3lD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KAAA,SAAAnE,MACAA,KAAAumB,WACA,IAAAvmB,KAAA+lD,iBAAAnmD,QAKArC,QAAAmP,QAAA1M,KAAA+lD,iBAAA,SAAAn5C,MACAA,KAAAgiB,YAAAhiB,KAAA1C,eAEA3J,OAAAysD,YAAAhtD,KAAA+lD,iBACAkH,OAAA,gBACAC,OAAA,gBACAC,IAAA,CAAAjjD,aAAA,KAAA0kB,YAAAxwB,aAAAiC,mBAAA,QAAA,IAVAE,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,YAAAjC,aAAAiC,mBAAA,mBAaAE,OAAAuQ,WAAAQ,mBAEA/Q,OAAAoD,aAAAM,aAAAioD,SAAAY,cAAA,GAIAvsD,OAAAoD,aAAAM,aAAAioD,SAAAW,UAAAtsD,OAAAwB,QAAAE,QAAA6D,qBAAAc,gBAAAsD,aAEA3J,OAAA2sB,MAAAC,eAAAC,UAAA,IAGA7sB,OAAA2D,YAAA,WACA,IASA0oD,YACAC,UAVA1rC,aAAAY,uBACAxhB,OAAAoD,aAAAM,aAAAioD,SAAAM,aACAjsD,OAAAoD,aAAAM,aAAAioD,SAAAO,gBACAlsD,OAAAoD,aAAAM,aAAAioD,SAAAQ,gBACAnsD,OAAAoD,aAAAM,aAAAioD,SAAAS,gBAKAC,YAAArsD,OAAAoD,aAAAM,aAAAioD,SAAAU,YACAC,UAAAtsD,OAAAoD,aAAAM,aAAAioD,SAAAW,UAKA7rD,kBAAAosD,aACA7sD,OAAAiP,aAAAG,UACApP,OAAAiP,aAAAM,QALA88C,YADA,SAAAA,YACA,KAMAA,YACArsD,OAAAoD,aAAAM,aAAAioD,SAAAM,YACAjsD,OAAAoD,aAAAM,aAAAioD,SAAAO,eACAlsD,OAAAoD,aAAAM,aAAAioD,SAAAQ,eACAnsD,OAAAoD,aAAAM,aAAAioD,SAAAS,eACApsD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QATA+jD,UADA,SAAAA,UACA,KAUAA,WACA1oD,KAAA,SAAAnE,MACAO,OAAAoD,aAAAM,aAAAioD,SAAAC,aAAAnsD,KAAAqtD,gBAAAl9B,KAAA,SAAAvjB,MACAA,KAAA0gD,iBAAApiD,KAAA8tC,OAAApsC,KAAA0gD,kBAAAn/B,OAAA,uCAEA,IAAAnuB,KAAAqtD,gBAAAztD,OAIAW,OAAA+rD,mBAHA/rD,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,YAAAjC,aAAAiC,mBAAA,sBAxBAE,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,YAAAjC,aAAAiC,mBAAA,qBA+BAE,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAiP,aAAAE,UAAAiF,SAAApU,OAAA4sB,eAAAO,YAAAhe,UAAA,IACAnP,OAAAiP,aAAAS,UAAA0E,SAAApU,OAAA4sB,eAAAO,YAAAzd,UAAA,IACA1P,OAAAiP,aAAAG,UAAApP,OAAA4sB,eAAAO,YAAA/d,UACApP,OAAAiP,aAAAM,QAAAvP,OAAA4sB,eAAAO,YAAA5d,QACAvP,OAAAoD,aAAAM,aAAAioD,SAAAM,YAAAjsD,OAAA4sB,eAAAO,YAAA8+B,YACAjsD,OAAAoD,aAAAM,aAAAioD,SAAAO,eAAAlsD,OAAA4sB,eAAAO,YAAA++B,eACAlsD,OAAAoD,aAAAM,aAAAioD,SAAAQ,eAAAnsD,OAAA4sB,eAAAO,YAAAg/B,eACAnsD,OAAAoD,aAAAM,aAAAioD,SAAAS,eAAApsD,OAAA4sB,eAAAO,YAAAi/B,eAEA,IAAAC,YAAArsD,OAAA4sB,eAAAO,YAAAk/B,YACAC,UAAAtsD,OAAA4sB,eAAAO,YAAAm/B,UAGA,SAAAA,YACAA,UAAA,MACAtsD,OAAAoD,aAAAM,aAAAioD,SAAAU,YAHAA,YADA,SAAAA,YACA,KAGAA,YACArsD,OAAAoD,aAAAM,aAAAioD,SAAAW,UAAAA,WAGAtsD,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAle,UAAAnP,OAAAiP,aAAAE,UACAnP,OAAA4sB,eAAAS,YAAA3d,UAAA1P,OAAAiP,aAAAS,UACA1P,OAAA4sB,eAAAS,YAAAje,UAAApP,OAAAiP,aAAAG,UACApP,OAAA4sB,eAAAS,YAAA9d,QAAAvP,OAAAiP,aAAAM,QACAvP,OAAA4sB,eAAAS,YAAA4+B,YAAAjsD,OAAAoD,aAAAM,aAAAioD,SAAAM,YACAjsD,OAAA4sB,eAAAS,YAAA6+B,eAAAlsD,OAAAoD,aAAAM,aAAAioD,SAAAO,eACAlsD,OAAA4sB,eAAAS,YAAA8+B,eAAAnsD,OAAAoD,aAAAM,aAAAioD,SAAAQ,eACAnsD,OAAA4sB,eAAAS,YAAA++B,eAAApsD,OAAAoD,aAAAM,aAAAioD,SAAAS,eACApsD,OAAA4sB,eAAAS,YAAAg/B,YAAArsD,OAAAoD,aAAAM,aAAAioD,SAAAU,YACArsD,OAAA4sB,eAAAS,YAAAi/B,UAAAtsD,OAAAoD,aAAAM,aAAAioD,SAAAW,WAGAtsD,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA,IAAA0+B,YAAArsD,OAAAoD,aAAAM,aAAAioD,SAAAU,YACAC,UAAAtsD,OAAAoD,aAAAM,aAAAioD,SAAAW,UACAx+B,GAAA,kCACA9tB,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,iBAAAvI,OAAAiP,aAAAG,UACA,eAAApP,OAAAiP,aAAAM,QACA,mBAAAvP,OAAAoD,aAAAM,aAAAioD,SAAAM,YACA,sBAAAjsD,OAAAoD,aAAAM,aAAAioD,SAAAO,eACA,sBAAAlsD,OAAAoD,aAAAM,aAAAioD,SAAAQ,eACA,sBAAAnsD,OAAAoD,aAAAM,aAAAioD,SAAAS,eACA,SAAAC,cACAv+B,GAAAA,GAAA,mBAAAu+B,aAIA3/B,iBAAAqB,aAFAD,GADA,SAAAw+B,UACAx+B,GAAA,iBAAAw+B,UAEAx+B,GAAAH,KAAAC,aCjwCA5wB,QAAAC,OAAA,mBAAA,CAAA,iBACAC,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBAEAH,eACAK,KAAA,kCACA,CACAC,YAAAH,iBAAAI,YAAA,kBACAC,WAAA,uBAGAH,KAAA,4BACA,CACAC,YAAAH,iBAAAI,YAAA,YACAC,WAAA,iBAGAH,KAAA,kCACA,CACAC,YAAAH,iBAAAI,YAAA,kBACAC,WAAA,uBAGAH,KAAA,sCACA,CACAC,YAAAH,iBAAAI,YAAA,sBACAC,WAAA,2BAGAH,KAAA,qCACA,CACAC,YAAAH,iBAAAI,YAAA,qBACAC,WAAA,0BAGAH,KAAA,qCACA,CACAC,YAAAH,iBAAAI,YAAA,qBACAC,WAAA,0BAGAH,KAAA,sCACA,CACAC,YAAAH,iBAAAI,YAAA,sBACAC,WAAA,2BAGAH,KAAA,iCACA,CACAC,YAAAH,iBAAAI,YAAA,iBACAC,WAAA,yBAMAA,WAAA,qBAAA,CAAA,SAAA,eAAA,SAAAqC,OAAAM,2BAGAN,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,QAGA/F,WAAA,6BAAA,CAAA,SAAA,eAAA,eAAA,mBAAA,iBAAA,YAAA,SAAAqC,OAAA4gB,aAAAtgB,aAAAosB,iBAAAxsB,eAAA0T,wBAGA5T,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAupD,WAAAjtD,OAAAoD,aAAAM,aAAAupD,SAAA,IACAjtD,OAAAoD,aAAAM,aAAAupD,SAAAlgC,WAAA,qBACA/sB,OAAAoD,aAAAM,aAAAupD,SAAAC,iBAAA,2BACAltD,OAAAoD,aAAAM,aAAAupD,SAAAE,gBAAA,OACAntD,OAAAoD,aAAAM,aAAAupD,SAAAG,iBAAA,QACAptD,OAAA2sB,MAAAC,eAAAC,UAAA,EAEA7sB,OAAAiP,aAAAc,kBAAA,EACA/P,OAAAiP,aAAAU,aAAA,GACA3P,OAAAiP,aAAAE,UAAA,IAGAnP,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAupD,SAAAE,gBAAAntD,OAAA4sB,eAAAO,YAAAggC,gBACAntD,OAAAoD,aAAAM,aAAAupD,SAAAG,iBAAAptD,OAAA4sB,eAAAO,YAAAigC,iBACAptD,OAAAiP,aAAAE,UAAAiF,SAAApU,OAAA4sB,eAAAO,YAAAhe,UAAA,IACAnP,OAAAiP,aAAAS,UAAA0E,SAAApU,OAAA4sB,eAAAO,YAAAzd,UAAA,IACA1P,OAAAiP,aAAAG,UAAApP,OAAA4sB,eAAAO,YAAA/d,UACApP,OAAAiP,aAAAM,QAAAvP,OAAA4sB,eAAAO,YAAA5d,SAGAvP,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAA8/B,gBAAAntD,OAAAoD,aAAAM,aAAAupD,SAAAE,gBACAntD,OAAA4sB,eAAAS,YAAA+/B,iBAAAptD,OAAAoD,aAAAM,aAAAupD,SAAAG,iBACAptD,OAAA4sB,eAAAS,YAAAle,UAAAnP,OAAAiP,aAAAE,UACAnP,OAAA4sB,eAAAS,YAAA3d,UAAA1P,OAAAiP,aAAAS,UACA1P,OAAA4sB,eAAAS,YAAAje,UAAApP,OAAAiP,aAAAG,UACApP,OAAA4sB,eAAAS,YAAA9d,QAAAvP,OAAAiP,aAAAM,SAGAvP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IAKAE,GALAlN,aAAAY,uBAKAsM,GAAA,eAJA,SAAA9tB,OAAAoD,aAAAM,aAAAupD,SAAAG,iBACAptD,OAAAoD,aAAAM,aAAAupD,SAAAC,iBACAltD,OAAAoD,aAAAM,aAAAupD,SAAAlgC,YAGA,eAAA/sB,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,uBAAAvI,OAAAoD,aAAAM,aAAAupD,SAAAE,gBACA,iBAAAntD,OAAAiP,aAAAG,UACA,eAAApP,OAAAiP,aAAAM,QACA,wBAAAvP,OAAAoD,aAAAM,aAAAupD,SAAAG,iBAEAx/B,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,SAGAnwB,WAAA,uCAAA,CAAA,SAAA,eAAA,eAAA,mBAAA,iBAAA,YAAA,SAAAqC,OAAA4gB,aAAAtgB,aAAAosB,iBAAAxsB,eAAA0T,wBAGA5T,OAAAuB,WAAA,WAEAqf,aAAAM,wBAEAlhB,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAA2pD,qBAAArtD,OAAAoD,aAAAM,aAAA2pD,mBAAA,IACArtD,OAAAoD,aAAAM,aAAA2pD,mBAAAtgC,WAAA,qBACA/sB,OAAAoD,aAAAM,aAAA2pD,mBAAAD,iBAAA,QACAptD,OAAA2sB,MAAAC,eAAAC,UAAA,GAIA7sB,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAiP,aAAAE,UAAAiF,SAAApU,OAAA4sB,eAAAO,YAAAhe,UAAA,IACAnP,OAAAiP,aAAAS,UAAA0E,SAAApU,OAAA4sB,eAAAO,YAAAzd,UAAA,IACA1P,OAAAiP,aAAAG,UAAApP,OAAA4sB,eAAAO,YAAA/d,UACApP,OAAAiP,aAAAM,QAAAvP,OAAA4sB,eAAAO,YAAA5d,SAGAvP,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAle,UAAAnP,OAAAiP,aAAAE,UACAnP,OAAA4sB,eAAAS,YAAA3d,UAAA1P,OAAAiP,aAAAS,UACA1P,OAAA4sB,eAAAS,YAAAje,UAAApP,OAAAiP,aAAAG,UACApP,OAAA4sB,eAAAS,YAAA9d,QAAAvP,OAAAiP,aAAAM,SAGAvP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IACAE,GADAlN,aAAAY,uBACAsM,GAAA,cAAA9tB,OAAAoD,aAAAM,aAAA2pD,mBAAAtgC,WACA,eAAA/sB,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,iBAAAvI,OAAAiP,aAAAG,UACA,eAAApP,OAAAiP,aAAAM,QAEAqe,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,SAGAnwB,WAAA,uCAAA,CAAA,SAAA,eAAA,eAAA,mBAAA,iBAAA,YAAA,SAAAqC,OAAA4gB,aAAAtgB,aAAAosB,iBAAAxsB,eAAA0T,wBAGA5T,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAA4pD,qBAAAttD,OAAAoD,aAAAM,aAAA4pD,mBAAA,IACAttD,OAAAoD,aAAAM,aAAA4pD,mBAAAC,YAAA,EACAvtD,OAAAoD,aAAAM,aAAA4pD,mBAAAF,iBAAA,QACAptD,OAAAoD,aAAAM,aAAA4pD,mBAAAE,QAAA,IACAxtD,OAAA2sB,MAAAC,eAAAC,UAAA,GAGA7sB,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAA4pD,mBAAAC,YAAAvtD,OAAA4sB,eAAAS,YAAAkgC,YACAvtD,OAAAiP,aAAAE,UAAAiF,SAAApU,OAAA4sB,eAAAO,YAAAhe,UAAA,IACAnP,OAAAiP,aAAAS,UAAA0E,SAAApU,OAAA4sB,eAAAO,YAAAzd,UAAA,IACA1P,OAAAiP,aAAAG,UAAApP,OAAA4sB,eAAAO,YAAA/d,UACApP,OAAAiP,aAAAM,QAAAvP,OAAA4sB,eAAAO,YAAA5d,QACAvP,OAAAytD,aAGAztD,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAkgC,YAAAvtD,OAAAoD,aAAAM,aAAA4pD,mBAAAC,YACAvtD,OAAA4sB,eAAAS,YAAAle,UAAAnP,OAAAiP,aAAAE,UACAnP,OAAA4sB,eAAAS,YAAA3d,UAAA1P,OAAAiP,aAAAS,UACA1P,OAAA4sB,eAAAS,YAAAje,UAAApP,OAAAiP,aAAAG,UACApP,OAAA4sB,eAAAS,YAAA9d,QAAAvP,OAAAiP,aAAAM,SAGAvP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IAEAE,GAFAlN,aAAAY,uBAEAsM,GAAA,eADA,IAAA9tB,OAAAoD,aAAAM,aAAA4pD,mBAAAC,YAAA,2BAAA,mCAEA,eAAAvtD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,iBAAAvI,OAAAiP,aAAAG,UACA,eAAApP,OAAAiP,aAAAM,QAEAqe,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,SAGAnwB,WAAA,sCAAA,CAAA,SAAA,eAAA,eAAA,mBAAA,iBAAA,YAAA,SAAAqC,OAAA4gB,aAAAtgB,aAAAosB,iBAAAxsB,eAAA0T,wBAGA5T,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAw8C,oBAAAlgD,OAAAoD,aAAAM,aAAAw8C,kBAAA,IACAlgD,OAAAoD,aAAAM,aAAAw8C,kBAAAnzB,WAAA,2BACA/sB,OAAAoD,aAAAM,aAAAw8C,kBAAAgN,iBAAA,iCAEAltD,OAAAoD,aAAAM,aAAAw8C,kBAAAkN,iBAAA,QACAptD,OAAAoD,aAAAM,aAAAw8C,kBAAAsN,QAAA,IACAxtD,OAAA2sB,MAAAC,eAAAC,UAAA,GAGA7sB,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAw8C,kBAAAsN,QAAAxtD,OAAA4sB,eAAAO,YAAAqgC,QACAxtD,OAAAoD,aAAAM,aAAAw8C,kBAAAkN,iBAAAptD,OAAA4sB,eAAAO,YAAAigC,iBACAptD,OAAAiP,aAAAE,UAAAiF,SAAApU,OAAA4sB,eAAAO,YAAAhe,UAAA,IACAnP,OAAAiP,aAAAS,UAAA0E,SAAApU,OAAA4sB,eAAAO,YAAAzd,UAAA,IACA1P,OAAAiP,aAAAG,UAAApP,OAAA4sB,eAAAO,YAAA/d,UACApP,OAAAiP,aAAAM,QAAAvP,OAAA4sB,eAAAO,YAAA5d,SAGAvP,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAmgC,QAAAxtD,OAAAoD,aAAAM,aAAAw8C,kBAAAsN,QACAxtD,OAAA4sB,eAAAS,YAAA+/B,iBAAAptD,OAAAoD,aAAAM,aAAAw8C,kBAAAkN,iBACAptD,OAAA4sB,eAAAS,YAAAle,UAAAnP,OAAAiP,aAAAE,UACAnP,OAAA4sB,eAAAS,YAAA3d,UAAA1P,OAAAiP,aAAAS,UACA1P,OAAA4sB,eAAAS,YAAAje,UAAApP,OAAAiP,aAAAG,UACApP,OAAA4sB,eAAAS,YAAA9d,QAAAvP,OAAAiP,aAAAM,SAGAvP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IAKAE,GALAlN,aAAAY,uBAKAsM,GAAA,eAJA,SAAA9tB,OAAAoD,aAAAM,aAAAw8C,kBAAAkN,iBACAptD,OAAAoD,aAAAM,aAAAw8C,kBAAAgN,iBACAltD,OAAAoD,aAAAM,aAAAw8C,kBAAAnzB,YAGA,eAAA/sB,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,iBAAAvI,OAAAiP,aAAAG,UACA,eAAApP,OAAAiP,aAAAM,QACA,eAAAvP,OAAAoD,aAAAM,aAAAw8C,kBAAAsN,QACA,wBAAAxtD,OAAAoD,aAAAM,aAAAw8C,kBAAAkN,iBAEAx/B,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,SAGAnwB,WAAA,mCAAA,CAAA,SAAA,eAAA,aAAA,eAAA,mBAAA,iBAAA,YAAA,SAAAqC,OAAA4gB,aAAAxiB,WAAAkC,aAAAosB,iBAAAxsB,eAAA0T,wBAGA5T,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAi8C,iBAAA3/C,OAAAoD,aAAAM,aAAAi8C,eAAA,IACA3/C,OAAAoD,aAAAM,aAAAi8C,eAAAyN,kBAAA,EACAptD,OAAA2sB,MAAAC,eAAAC,UAAA,GAGA7sB,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAi8C,eAAAyN,iBAAAptD,OAAA4sB,eAAAO,YAAAigC,iBACAptD,OAAAiP,aAAAE,UAAAiF,SAAApU,OAAA4sB,eAAAO,YAAAhe,UAAA,IACAnP,OAAAiP,aAAAS,UAAA0E,SAAApU,OAAA4sB,eAAAO,YAAAzd,UAAA,IACA1P,OAAAiP,aAAAG,UAAApP,OAAA4sB,eAAAO,YAAA/d,UACApP,OAAAiP,aAAAM,QAAAvP,OAAA4sB,eAAAO,YAAA5d,SAGAvP,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAA+/B,iBAAAptD,OAAAoD,aAAAM,aAAAi8C,eAAAyN,iBACAptD,OAAA4sB,eAAAS,YAAAle,UAAAnP,OAAAiP,aAAAE,UACAnP,OAAA4sB,eAAAS,YAAA3d,UAAA1P,OAAAiP,aAAAS,UACA1P,OAAA4sB,eAAAS,YAAAje,UAAApP,OAAAiP,aAAAG,UACApP,OAAA4sB,eAAAS,YAAA9d,QAAAvP,OAAAiP,aAAAM,SAGAvP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IAEAE,GAFAlN,aAAAY,uBAEAsM,GAAA,eADA9tB,OAAAoD,aAAAM,aAAAi8C,eAAAyN,iBAAA,oBAAA,kBAEA,eAAAptD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,iBAAAvI,OAAAiP,aAAAG,UACA,eAAApP,OAAAiP,aAAAM,QAEAqe,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,SAGAnwB,WAAA,kCAAA,CAAA,SAAA,eAAA,eAAA,mBAAA,iBAAA,YAAA,SAAAqC,OAAA4gB,aAAAtgB,aAAAosB,iBAAAxsB,eAAA0T,wBAGA5T,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAgqD,gBAAA1tD,OAAAoD,aAAAM,aAAAgqD,cAAA,IACA1tD,OAAAoD,aAAAM,aAAAgqD,cAAA3gC,WAAA,eACA/sB,OAAAoD,aAAAM,aAAAgqD,cAAAC,aAAA,IACA3tD,OAAA2sB,MAAAC,eAAAC,UAAA,EACA7sB,OAAA+tB,cAAA,GAGA/tB,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAiP,aAAAE,UAAAiF,SAAApU,OAAA4sB,eAAAO,YAAAhe,UAAA,IACAnP,OAAAiP,aAAAS,UAAA0E,SAAApU,OAAA4sB,eAAAO,YAAAzd,UAAA,IACA1P,OAAAiP,aAAAG,UAAApP,OAAA4sB,eAAAO,YAAA/d,UACApP,OAAAiP,aAAAM,QAAAvP,OAAA4sB,eAAAO,YAAA5d,SAGAvP,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAle,UAAAnP,OAAAiP,aAAAE,UACAnP,OAAA4sB,eAAAS,YAAA3d,UAAA1P,OAAAiP,aAAAS,UACA1P,OAAA4sB,eAAAS,YAAAje,UAAApP,OAAAiP,aAAAG,UACApP,OAAA4sB,eAAAS,YAAA9d,QAAAvP,OAAAiP,aAAAM,SAGAvP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IACAE,GADAlN,aAAAY,uBACAsM,GAAA,cAAA9tB,OAAAoD,aAAAM,aAAAgqD,cAAA3gC,WACA,eAAA/sB,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,iBAAAvI,OAAAiP,aAAAG,UACA,eAAApP,OAAAiP,aAAAM,QAEAqe,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,SAGAnwB,WAAA,qBAAA,CAAA,SAAA,eAAA,oBAAA,mBAAA,iBAAA,YAAA,SAAAqC,OAAAM,aAAAD,kBAAAqsB,iBAAAxsB,eAAA0T,wBAGA5T,OAAAuB,WAAA,WAEAvB,OAAAmG,4BAAA9F,kBAAAutD,iBAAA5tD,OAAA6G,2BAAAvG,aAAA0sD,kBASAhtD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAmqD,iBAAA7tD,OAAAoD,aAAAM,aAAAmqD,eAAA,IACA7tD,OAAAoD,aAAAM,aAAAmqD,eAAA9gC,WAAA,kBACA/sB,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAgI,QAAAhI,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAvI,OAAA+tB,aAAA,QACA/tB,OAAA2D,eAhBA3D,OAAAmG,4BAAA9F,kBAAAytD,iBACA9tD,OAAAgD,KAAA,2CAEAhD,OAAAgD,KAAA,iCAgBAhD,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IAAAE,GAAA,cAAA9tB,OAAAoD,aAAAM,aAAAmqD,eAAA9gC,WACA,eAAA/sB,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QAEAqlB,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,QAGAnwB,WAAA,eAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAIA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAupD,WAAAjtD,OAAAoD,aAAAM,aAAAupD,SAAA,IACAjtD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,QAGApI,WAAA,qBAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAGA5T,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,OAEApI,WAAA,yBAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAGA5T,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,OAEApI,WAAA,wBAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAGA5T,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,OAEApI,WAAA,yBAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAGA5T,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,OAEApI,WAAA,wBAAA,CAAA,SAAA,eAAA,mBAAA,iBAAA,YAAA,SAAAqC,OAAAM,aAAAosB,iBAAAxsB,eAAA0T,wBAGA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAGAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAoD,aAAAM,aAAAqqD,kBAAA,GACA/tD,OAAAoD,aAAAM,aAAAqqD,kBAAAhhC,WAAA,qBACA/sB,OAAA2D,eAGA3D,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IAAAE,GAAA,cAAA9tB,OAAAoD,aAAAM,aAAAqqD,kBAAAhhC,WACA,eAAA/sB,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QAEAqlB,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,QAGAnwB,WAAA,oBAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAGA5T,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,OC3kBA/I,QAAAC,OAAA,eAAA,CAAA,aAAA,eAAA,oBACAC,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBAEAH,eAAAK,KAAA,gCACA,CACAC,YAAAH,iBAAAI,YAAA,cACAC,WAAA,iBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8BAKAP,KAAA,mCACA,CACAC,YAAAH,iBAAAI,YAAA,iBACAC,WAAA,oBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8BAKAP,KAAA,4BACA,CACAC,YAAAH,iBAAAI,YAAA,UACAC,WAAA,aACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,iCAOAJ,WAAA,yBAAA,CAAA,SAAA,SAAAqC,qBAIAA,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,OAGA7F,WAAA,yBAAA,CAAA,SAAA,kBAAA,SAAAqC,OAAAlC,8BAGA,IAAAD,aAAAC,gBAAAC,gCAAA,4BACAiC,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GAEAxD,OAAAiP,aAAAc,kBAAA,EACA/P,OAAAiP,aAAAU,aAAA,GACA3P,OAAAiP,aAAAW,QAAA,CACA,CAAAC,KAAAhS,aAAAiC,mBAAA,WAAA8F,MAAA,IACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,SAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,YAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,YAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,cAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,iBAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,kBAAA8F,MAAA,IACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,eAAA8F,MAAA,IACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,cAAA8F,MAAA,SAGAjI,WAAA,iBAAA,CAAA,SAAA,eAAA,eAAA,kBAAA,YAAA,eAAA,SAAAqC,OAAA4gB,aAAAtgB,aAAAqW,gBAAA/C,UAAA/V,2BAIA+iB,aAAAM,wBACAlhB,OAAAsX,MAAA,GACAtX,OAAAsX,MAAA02C,eAAA,GACAhuD,OAAAsX,MAAA22C,sBAAA,CACAt2C,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAC,SAAAnF,KAAAmF,SAAAnF,KAAAoF,SAAA,IACAD,SAAAo2C,aAMAluD,OAAA0I,SAAAoP,SAAAo2C,aAEAluD,OAAAsN,UANAtN,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,aAAAjC,aAAAiC,mBAAA,8BAQAmY,QAAA,CACA,CACAC,MAAA,eACAzH,MAAA5S,aAAAiC,mBAAA,iBACAyS,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+BACAN,MAAA,KAGAO,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAA62C,mBAAA,SAAAh1C,IAEAnZ,OAAAsX,MAAA82C,iBAAA,IAAA92C,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA0Z,KAGAnZ,OAAAsX,MAAA82C,iBAAA/0C,OACArZ,OAAAsX,MAAA02C,eAAAt1C,WAAAjZ,KAAAO,OAAAsX,MAAA82C,iBAAA3uD,SA8BAO,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,oCAIAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,KAGA/F,OAAAmV,QAAAxR,YAAA,WAEAid,aAAAY,sBA3CA7K,gBAAA03C,cACAruD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAvI,OAAAiP,aAAAG,UACApP,OAAAiP,aAAAM,SAAA3L,KAAA,SAAAnE,MAEAA,KAAAwT,QAEA,IAAAxT,KAAAgU,KAAApU,QAMAI,KAAAgU,KAAAmc,KAAA,SAAA0+B,MAEAA,KAAAC,aAAA5jD,KAAA8tC,OAAA6V,KAAAC,cAAA3gC,OAAA,sBAGA5tB,OAAAsX,MAAA62C,mBAAA1uD,KAAAgU,OATAzT,OAAAuQ,WAAAU,cAAApT,aAAAiC,mBAAA,eAYAE,OAAAuQ,WAAAQ,uBA0BApT,WAAA,4BAAA,CAAA,SAAA,qBAAA,kBAAA,SAAAqC,OAAA4lB,mBAAA9nB,8BAGA,IAAAD,aAAAC,gBAAAC,gCAAA,yBACAiC,OAAAsX,MAAA,GAoBAtX,OAAAuB,WAAA,WAGAvB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,aAAA8qD,cAAA,CACApoD,QAAA,KACAukD,SAAA,GACA9iD,KAAA,KACA4mD,MAAA,CAAA,CAAA3mD,IAAA,KAAAlC,MAAA/H,aAAAiC,mBAAA,QACA,CAAAgI,IAAA,EAAAlC,MAAA/H,aAAAiC,mBAAA,gBACA,CAAAgI,IAAA,EAAAlC,MAAA/H,aAAAiC,mBAAA,mBACA,CAAAgI,IAAA,EAAAlC,MAAA/H,aAAAiC,mBAAA,mBACA,CAAAgI,IAAA,EAAAlC,MAAA/H,aAAAiC,mBAAA,8BACA,CAAAgI,IAAA,EAAAlC,MAAA/H,aAAAiC,mBAAA,qBACA,CAAAgI,IAAA,EAAAlC,MAAA/H,aAAAiC,mBAAA,oCA/BA8lB,mBAAA+/B,aAAA3lD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KACA,SAAAnE,MACAA,KAAAumB,aAAAhpB,QAAAkF,yBAAAzC,KAAA+lD,mBAKAxoD,QAAAmP,QAAA1M,KAAA+lD,iBAAA,SAAAn5C,MACAA,KAAAqiD,SAAAriD,KAAAu5C,UAAA,IAAAv5C,KAAAw5C,WAGA7lD,OAAAoD,aAAAM,aAAA8qD,cAAA7D,SAAAlrD,KAAA+lD,iBAAArX,QAAA,CAAAwgB,QAAA,IAAAjC,OAAA,YACA1sD,OAAAoD,aAAAM,aAAA8qD,cAAA7D,SAAAiC,IAAA,CAAA1nD,IAAA,KAAAwpD,SAAA7wD,aAAAiC,mBAAA,QAAA,IATAE,OAAAuQ,WAAAQ,uBAiCApT,WAAA,oBAAA,CAAA,SAAA,eAAA,OAAA,kBAAA,YAAA,eAAA,SAAAqC,OAAA4gB,aAAAmG,KAAApQ,gBAAA/C,UAAA/V,2BAGA+iB,aAAAM,wBACAlhB,OAAAsX,MAAA,GACAtX,OAAAsX,MAAAs3C,kBAAA,GACA5uD,OAAAsX,MAAAu3C,yBAAA,CACAl3C,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAC,SAAAnF,KAAAmF,SAAAnF,KAAAoF,SAAA,IACAD,UAMA9X,OAAA8uD,eAAAh3C,UACA9X,OAAAsN,UALAtN,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,iBAAAjC,aAAAiC,mBAAA,8BAOAmY,QAAA,CACA,CACAC,MAAA,kBACAzH,MAAA5S,aAAAiC,mBAAA,gBACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,QACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,YACAzH,MAAA5S,aAAAiC,mBAAA,aACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,QACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+HACAN,MAAA,KAGAO,WAAA,GACAE,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAAy3C,sBAAA,SAAA51C,IAEAnZ,OAAAsX,MAAA03C,oBAAA,IAAA13C,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA0Z,KAKAnZ,OAAAsX,MAAA03C,oBAAA31C,OACArZ,OAAAsX,MAAAs3C,kBAAAl2C,WAAAjZ,KAAAO,OAAAsX,MAAA03C,oBAAAvvD,SAyCAO,OAAAmV,QAAAxR,YAAA,WACAid,aAAAY,sBArCA7K,gBAAAs4C,iBACAjvD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAvI,OAAAoD,aAAAM,aAAA8qD,cAAApoD,QACApG,OAAAoD,aAAAM,aAAA8qD,cAAA3mD,KACA7H,OAAAiP,aAAAG,UACApP,OAAAiP,aAAAM,SACA3L,KAAA,SAAAnE,MAEAA,KAAAwT,QAEA,IAAAxT,KAAAgU,KAAApU,QAMAI,KAAAgU,KAAAmc,KAAA,SAAAs/B,MAEAA,KAAAC,SAAAxkD,KAAA8tC,OAAAyW,KAAAC,UAAAvhC,OAAA,oBACAshC,KAAAE,UAAAroC,KAAAsoC,YAAAH,KAAAE,WACA,IAAAF,KAAA1xC,UAAA,IAAA0xC,KAAA1xC,WAGA0xC,KAAAI,SAAA,gBAMAtvD,OAAAsX,MAAAy3C,sBAAAtvD,KAAAgU,OAjBAzT,OAAAuQ,WAAAU,cAAApT,aAAAiC,mBAAA,kBAoBAE,OAAAuQ,WAAAQ,oBASA/Q,OAAA8uD,eAAA,SAAAziD,MAEA,OAAAA,KAAAmR,UAEA,KAAA,EACAxd,OAAA2d,WAAAtR,KACArM,OAAA2d,WAAA9d,MAAA,EACA,MAEA,KAAA,EACA,KAAA,EACA,EAAAwM,KAAAuR,WAAA5d,OAAA0I,SAAA2D,KAAAuR,YAEA/L,MAAAjS,SAAAC,KAAAhC,aAAAiC,mBAAA,wBAAA,SACA,MAEA,KAAA,EACA,OAAAuM,KAAAwR,WAAA7d,OAAAiJ,eAAAoD,KAAAwR,YAEAhM,MAAAjS,SAAAC,KAAAhC,aAAAiC,mBAAA,wBAAA,WAKAE,OAAAuB,WAAA,WAGAvB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAA2d,WAAA,CAAA9d,MAAA,OAGAlC,WAAA,qBAAA,CAAA,SAAA,UAAA,eAAA,eAAA,kBAAA,YAAA,kBAAA,SAAAqC,OAAAW,QAAAL,aAAAsgB,aAAAjK,gBAAA/C,UAAA9V,8BAGAA,gBAAAC,gCAAA,yBACAiC,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAGA4d,aAAAM,wBAEAlhB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBAEAsC,OAAAoD,aAAAM,aAAA6rD,oBAAA,CACAC,UAAA,GAEAxvD,OAAA+tB,cAAA,MAGApwB,WAAA,aAAA,CAAA,SAAA,UAAA,eAAA,YAAA,eAAA,eAAA,kBAAA,SAAAqC,OAAAW,QAAAL,aAAAsT,UAAA/V,aAAA+iB,aAAAjK,8BAIA3W,OAAAsX,MAAA,GACAtX,OAAAsX,MAAAm4C,WAAA,GACAzvD,OAAAsX,MAAAo4C,kBAAA,CACA/3C,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAC,SAAAnF,KAAAmF,SAAAnF,KAAAoF,SAAA,IACAD,SAAA8F,YAMA5d,OAAA0I,SAAAoP,SAAA8F,YACA5d,OAAAsN,UALAtN,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,aAAAjC,aAAAiC,mBAAA,8BAOAmY,QAAA,CACA,CACAC,MAAA,UACAzH,MAAA5S,aAAAiC,mBAAA,cACAqY,MAAA,IACAE,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,oBACAzH,MAAA5S,aAAAiC,mBAAA,eACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,OACAzH,MAAA5S,aAAAiC,mBAAA,kBACAyS,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,cACAzH,MAAA5S,aAAAiC,mBAAA,eACAqY,MAAA,IACAE,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+BACAN,MAAA,KAGAO,WAAA,GACAE,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAmV,QAAAxR,YAAA,WAEAid,aAAAY,uBAGAxhB,OAAA6gD,UAAA,oBACA7gD,OAAA8gD,SAAA,EACA9gD,OAAAuQ,WAAAO,OAEA6F,gBAAAg5C,kBACA3vD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAvI,OAAAoD,aAAAM,aAAA6rD,oBAAAC,WAAA5rD,KACA,SAAAnE,MAEAA,KAAAwT,QAEA,IAAAxT,KAAAgU,KAAApU,OACAW,OAAAuQ,WAAAU,cAAApT,aAAAiC,mBAAA,0BAIAL,KAAAgU,KAAAmc,KAAA,SAAA9d,SAEAA,QAAA89C,kBAAAjvD,QAAA,OAAAA,CAAAmR,QAAA+9C,SAAA,cACA/9C,QAAAg+C,QAAAh+C,QAAAg+C,QAAAhlD,aAGA9K,OAAAsX,MAAAy4C,eAAAtwD,KAAAgU,OAIAzT,OAAAuQ,WAAAQ,qBAIA/Q,OAAAsX,MAAAy4C,eAAA,SAAA52C,IAEAnZ,OAAAsX,MAAA04C,aAAA,IAAA14C,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA0Z,KAGAnZ,OAAAsX,MAAA04C,aAAA32C,OACArZ,OAAAsX,MAAAm4C,WAAA/2C,WAAAjZ,KAAAO,OAAAsX,MAAA04C,aAAAvwD,SAGAO,OAAA6G,2BAAAvG,aAAA0sD,kBAEAhtD,OAAAgD,KAAA,SAGAhD,OAAAuB,WAAA,WAGAvB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,mBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,QCzjBA/I,QAAAC,OAAA,mBAAA,CAAA,iBACAC,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBAEAH,eACAK,KAAA,6BACA,CACAC,YAAAH,iBAAAI,YAAA,aACAC,WAAA,gBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mCAIAP,KAAA,4BACA,CACAC,YAAAH,iBAAAI,YAAA,YACAC,WAAA,eACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mCAIAP,KAAA,gCACA,CACAC,YAAA,qDACAE,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mCAIAP,KAAA,+BACA,CACAC,YAAAH,iBAAAI,YAAA,eACAC,WAAA,kBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mCAIAP,KAAA,mCACA,CACAC,YAAAH,iBAAAI,YAAA,mBACAC,WAAA,sBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mCAIAP,KAAA,6BACA,CACAC,YAAAH,iBAAAI,YAAA,aACAC,WAAA,gBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,sCAMAJ,WAAA,6BAAA,CAAA,SAAA,aAAA,mBAAA,SAAAqC,OAAA5B,WAAA6xD,+BAIAjwD,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAM,eACA1D,OAAAoD,aAAAM,aAAA,QAGA/F,WAAA,gBAAA,CAAA,SAAA,mBAAA,eAAA,oBAAA,kBAAA,eAAA,UAAA,KAAA,WAAA,YAAA,eAAA,SAAAqC,OAAAiwD,iBAAA3vD,aAAAD,kBAAAqqD,gBAAA9pC,aAAAjgB,QAAAtC,GAAAqC,SAAAkT,UAAA/V,2BAIAmC,OAAAwB,QAAAI,YACA5B,OAAAwB,QAAAI,UAAA,IACA5B,OAAAwB,QAAAI,UAAAsuD,UAAA,CAAAlzC,OAAA,GACAhd,OAAAwB,QAAAI,UAAAuuD,UAAA,CAAAnzC,OAAA,GACAhd,OAAAwB,QAAAI,UAAAwuD,SAAA,CAAApzC,OAAA,GACAhd,OAAAwB,QAAAI,UAAAyuD,aAAA,CAAArzC,OAAA,GACAhd,OAAAwB,QAAAI,UAAA0uD,gBAAA,CAAAtzC,OAAA,GACAhd,OAAAwB,QAAAI,UAAA2uD,kBAAA,CAAAvzC,OAAA,EAAAnE,KAAA,QAEA7Y,OAAAsX,MAAA,GACAtX,OAAAsX,MAAAk5C,cAAA,GACAxwD,OAAAsX,MAAAm5C,qBAAA,CACA94C,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAC,SAAAnF,KAAAmF,SAAAnF,KAAAoF,SAAA,IACA/X,OAAA0wD,gBAAA54C,SAAA5S,KACAlF,OAAAsN,UAEA2K,QAAA,CACA,CACAC,MAAA,cACAzH,MAAA5S,aAAAiC,mBAAA,mBACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,SACAzH,MAAA5S,aAAAiC,mBAAA,UACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,iBACAzH,MAAA5S,aAAAiC,mBAAA,kBACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,iBACAzH,MAAA5S,aAAAiC,mBAAA,kBACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+LACAN,MAAA,KAGAO,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAGAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAAq5C,kBAAA,WAEA3wD,OAAAsX,MAAAs5C,gBAAA,IAAAt5C,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAAO,OAAAwB,QAAAI,UAAAsuD,UAAAW,QAGA7wD,OAAAsX,MAAAs5C,gBAAAv3C,OACArZ,OAAAsX,MAAAk5C,cAAA93C,WAAAjZ,KAAAO,OAAAsX,MAAAs5C,gBAAAnxD,SAGAO,OAAAmV,QAAAxR,YAAA,WAEA3D,OAAAwB,QAAAI,UAAAsuD,UAAAW,MAAA,GACA7wD,OAAAuQ,WAAAO,OACA9Q,OAAAwB,QAAAI,UAAAsuD,UAAAlzC,OAAA,EACAhd,OAAAwB,QAAAI,UAAAuuD,UAAAnzC,OAAA,EACAhd,OAAAwB,QAAAI,UAAAyuD,aAAArzC,OAAA,EACAhd,OAAAwB,QAAAI,UAAAyuD,aAAArzC,OAAA,EACAhd,OAAAwB,QAAAI,UAAA0uD,gBAAAtzC,OAAA,EACAizC,iBAAAa,SAEA9wD,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAvI,OAAAoD,aAAAM,aAAAwsD,UAAAa,WACA/wD,OAAAoD,aAAAM,aAAAwsD,UAAAc,WACA,SAAAhxD,OAAAoD,aAAAM,aAAAwsD,UAAAe,QAAA,EAAA,EACA,SAAAjxD,OAAAoD,aAAAM,aAAAwsD,UAAAgB,SAAA,EAAA,EACA,SAAAlxD,OAAAoD,aAAAM,aAAAwsD,UAAA1C,SAAA,EAAA,EACA,SAAAxtD,OAAAoD,aAAAM,aAAAwsD,UAAAiB,QAAA,EAAA,EACA,SAAAnxD,OAAAoD,aAAAM,aAAAwsD,UAAAkB,WAAA,EAAA,EACApxD,OAAAoD,aAAAM,aAAAwsD,UAAAmB,WACArxD,OAAAoD,aAAAM,aAAAwsD,UAAAz3C,UACA7U,KAEA,SAAAnE,MAEA,IAAAA,KAAA6xD,MAAAjyD,QAMAW,OAAAwB,QAAAI,UAAAsuD,UAAAW,MAAA,GACA7zD,QAAAmP,QAAA1M,KAAA6xD,MAAA,SAAAjlD,MAEA,IAAAyK,KAAAzK,KAAAklD,aAAA,MAAAllD,KAAAi5B,YACAxuB,OAAA,IAAAzK,KAAAmlD,SAAA,cAAA,GAEA,IAAAhyD,OAAAmB,QAAA,SAAAA,CAAAX,OAAAwB,QAAAI,UAAA6vD,YAAA,CAAAvsD,IAAAmH,KAAA0sB,SAEA24B,IAAA/wD,QAAA,OAAAA,CAAA0L,KAAAslD,eAAA,eAAA,GACAC,IAAAjxD,QAAA,OAAAA,CAAA0L,KAAAwlD,eAAA,eAAA,GAEA7xD,OAAAwB,QAAAI,UAAAsuD,UAAAW,MAAA3yD,KAAA,CACAgH,IAAAmH,KAAAnH,IACA4sD,KAAAzlD,KAAAi5B,YACAA,YAAAxuB,KACAiiB,OAAAv5B,OAAA,GAAA8lC,YACAqsB,eAAAD,IACAG,eAAAD,QAGA5xD,OAAAsX,MAAAq5C,qBAxBA3wD,OAAAuQ,WAAAU,cAAApT,aAAAiC,mBAAA,aA6BAE,OAAAuB,WAAA,WAIAvB,OAAAmG,4BAAA9F,kBAAA0xD,kBAEA/xD,OAAAmG,4BAAA9F,kBAAA2xD,gBACAhyD,OAAAgD,KAAA,8CACAhD,OAAAmG,4BAAA9F,kBAAA4xD,iBACAjyD,OAAAgD,KAAA,kCAEAhD,OAAAgD,KAAA,UAGA4d,aAAAM,wBACAlhB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,0BACAsC,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA/F,OAAAwB,QAAAI,UAAA6vD,YAAA,CACA,CAAAvsD,IAAA,IAAAogC,YAAAznC,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,YACA,CAAAoF,IAAA,IAAAogC,YAAAznC,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,eACA,CAAAoF,IAAA,IAAAogC,YAAAznC,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,aACA,CAAAoF,IAAA,IAAAogC,YAAAznC,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,YACA,CAAAoF,IAAA,IAAAogC,YAAAznC,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,cAEAE,OAAAwB,QAAAI,UAAAsuD,UAAAW,MAAA,GACAZ,iBAAAkC,gBACAnyD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SACA3E,KACA,SAAAnE,MACAO,OAAAwB,QAAAI,UAAAwwD,QAAAzxD,QAAA,UAAAA,CAAAlB,KAAA4yD,YAAA,eACAryD,OAAAwB,QAAAI,UAAA0wD,iBAAA3xD,QAAA,UAAAA,CAAAlB,KAAA8yD,qBAAA,eACAvyD,OAAAwB,QAAAI,UAAA4wD,kBAAA7xD,QAAA,UAAAA,CAAAlB,KAAAgzD,wBAAA,eACAzyD,OAAAwB,QAAAI,UAAA8wD,OAAAjzD,KAAAkzD,OACA3yD,OAAAwB,QAAAI,UAAAgxD,WAAAjyD,QAAA,UAAAA,CAAAlB,KAAAozD,eAAA,MACA7yD,OAAAwB,QAAAI,UAAAgS,UAAAjT,QAAA,UAAAA,CAAAlB,KAAAqzD,sBAAA,eACA9yD,OAAAwB,QAAAI,UAAAmxD,QAAAtzD,KAAAuzD,UAIA/C,iBAAAgD,oBAAAjzD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SACA3E,KAAA,SAAAnE,MACAA,KAAAumB,aACAhmB,OAAAwB,QAAAI,UAAAsxD,YAAAvyD,QAAA,UAAAA,CAAAlB,KAAA0zD,YAAA,kBAKAzI,gBAAA0I,qBAAApzD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QAAA,GACA3E,KAAA,SAAAnE,MACAA,KAAAumB,aACAhmB,OAAAwB,QAAAI,UAAAyxD,UAAA1yD,QAAA,UAAAA,CAAAlB,KAAA6zD,UAAA,kBAKAtzD,OAAA6kC,cAGA7kC,OAAAuzD,UAAA,SAAAC,OAEA,IAAAnc,UAAA,EACAoc,YAAA,EACAC,KAAA1zD,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAC,UAAA,GAEA,GAAAF,KAAApuB,YAAA3gC,UAIA,OAFA3E,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,YAAA,cACAE,OAAAmN,gBAAA,oBAIA,OAAAqmD,OAEA,IAAA,OACAnc,UAAA,GACA,MAEA,IAAA,eACAA,UAAA,GACAoc,YAAA,EACA,MAEA,IAAA,SACApc,UAAA,GACAqc,KAAAG,iBAAA,KACAH,KAAAI,cAAA,KACA,MAEA,IAAA,MACAzc,UAAA,EACA,MAEA,IAAA,WAEA,IAAAr3C,OAAA+zD,sBAAAL,MACA,OAEArc,UAAA,EACAqc,KAAAxhD,OAAA,EACAwhD,KAAAnC,aAAA,KACAmC,KAAAlC,SAAA,KACAkC,KAAAM,IAAA,KACAN,KAAAO,gBAAA,KACAP,KAAAQ,gBAAA,KACAR,KAAAS,aAAA,IACAT,KAAAU,YAAA,KACAV,KAAAW,cAAA,KACAX,KAAAY,cAAA,KACAZ,KAAAa,cAAA,KACAb,KAAAc,mBAAA,IACAd,KAAAe,kBAAA,IACAf,KAAAgB,iBAAA,KACAhB,KAAAiB,iBAAA,EACAjB,KAAAkB,kBAAA,KACAlB,KAAAmB,gBAAA,IACAnB,KAAAxuD,IAAA,EACAwuD,KAAAoB,UAAA,KACApB,KAAA36B,OAAA/4B,OAAA+0D,gBAAAC,aAAA,IAAA,IACAvB,YAAA,EAIAxD,iBAAAsD,UAEAlc,UACAqc,KACA1zD,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAsB,QAAA,GACAj1D,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aACA9F,KAEA,SAAAnE,MAEAg0D,WAGAzzD,OAAAuB,aAFAvB,OAAA0wD,gBAAAgD,KAAAxuD,KAIAlF,OAAAmO,gBAAAnO,OAAAk1D,cAKAl1D,OAAA0wD,gBAAA,SAAA5oD,KAEAmoD,iBAAAkF,eAEArtD,IACA9H,OAAA6G,2BAAAvG,aAAA80D,kBACAxxD,KAEA,SAAAnE,MAEAO,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAl0D,KAAA41D,YACAr1D,OAAAwB,QAAAI,UAAAuuD,UAAAmF,gBAAAt4D,QAAAm9B,KAAA16B,KAAA41D,aAEAr1D,OAAAu1D,qBACAv1D,OAAAmO,gBAAAnO,OAAAk1D,cAKAl1D,OAAAw1D,gBAAA,SAAAhC,OAEA,OAAAA,OAEA,IAAA,UACAxzD,OAAAy1D,oBACA70C,aAAA4D,sBACAxkB,OAAAwB,QAAAI,UAAAwuD,SAAAsF,KAAA,KACA11D,OAAAwB,QAAAI,UAAAwuD,SAAAuF,KAAA,KACA31D,OAAAwB,QAAAI,UAAAwuD,SAAA3uC,OAAA,EACAzhB,OAAAwB,QAAAI,UAAAwuD,SAAApzC,OAAA,EACA,MAEA,IAAA,OACA,IAAA4D,aAAAY,qBACA,OAEAxhB,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAC,UAAA,GAAAI,IAAAh0D,OAAAwB,QAAAI,UAAAwuD,SAAAsF,KACA11D,OAAAwB,QAAAI,UAAAwuD,SAAApzC,OAAA,EACAhd,OAAAuzD,UAAA,UAKAvzD,OAAA41D,oBAAA,SAAApC,OAEA,OAAAA,OAEA,IAAA,UACAxzD,OAAAy1D,oBACAz1D,OAAAwB,QAAAI,UAAAyuD,aAAAlhD,UAAAnP,OAAAwB,QAAAI,UAAA0wD,iBAAA,GAAAptD,IACAlF,OAAAwB,QAAAI,UAAAyuD,aAAArzC,OAAA,EACA,MAEA,IAAA,OACAhd,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAC,UAAA,GAAAiC,eAAA71D,OAAAwB,QAAAI,UAAAyuD,aAAAlhD,UACAnP,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAC,UAAA,GAAAY,mBAAA,KACAx0D,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAC,UAAA,GAAAQ,YAAA,IAAAzpD,KACA3K,OAAAwB,QAAAI,UAAAyuD,aAAArzC,OAAA,EACAhd,OAAAuzD,UAAA,UAKAvzD,OAAA81D,yBAAA,SAAAtC,OAEA,OAAAA,OAEA,IAAA,UACAxzD,OAAAy1D,oBACAz1D,OAAAwB,QAAAI,UAAA0uD,gBAAAnhD,UAAAnP,OAAAwB,QAAAI,UAAA4wD,kBAAA,GAAAttD,IACAlF,OAAAwB,QAAAI,UAAA0uD,gBAAAtzC,OAAA,EACA,MAEA,IAAA,OACAhd,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAC,UAAA,GAAAe,iBAAA30D,OAAAwB,QAAAI,UAAA0uD,gBAAAnhD,UACAnP,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAC,UAAA,GAAA76B,OAAA,IACA/4B,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAC,UAAA,GAAAgB,mBAAA,IAAAjqD,MAAAorD,cAAAxqD,MAAA,EAAA,IACAvL,OAAAwB,QAAAI,UAAA0uD,gBAAAtzC,OAAA,EACAhd,OAAAuzD,UAAA,UAKAvzD,OAAAg2D,oBAAA,SAAAC,SAEA,OAAAA,SAEA,IAAA,OACAj2D,OAAAy1D,oBAAA7xD,KACA,WAEA5D,OAAAuzD,UAAA,QACAvzD,OAAAwB,QAAAI,UAAA2uD,kBAAA13C,KAAA,OACA7Y,OAAAwB,QAAAI,UAAA2uD,kBAAAvzC,OAAA,GAEA,WAEAhd,OAAAwB,QAAAI,UAAA2uD,kBAAA13C,KAAA,OACA7Y,OAAAwB,QAAAI,UAAA2uD,kBAAAvzC,OAAA,IAGA,MAEA,IAAA,OACA,OAAAhd,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAC,UAAA,GAAAiB,gBACA70D,OAAAwB,QAAAI,UAAA2uD,kBAAA13C,KAAA,WAGA7Y,OAAAuzD,UAAA,UACAvzD,OAAAg2D,oBAAAn4D,aAAAiC,mBAAA,WAEA,MAEA,IAAA,UACAE,OAAAuzD,UAAA,UACAvzD,OAAAg2D,oBAAAn4D,aAAAiC,mBAAA,UACA,MAEA,IAAA,QACAE,OAAAwB,QAAAI,UAAA2uD,kBAAAvzC,OAAA,EACAhd,OAAAwB,QAAAI,UAAA2uD,kBAAA13C,KAAA,SAKA7Y,OAAA6kC,WAAA,WAEA7kC,OAAAwB,QAAAI,UAAAsuD,UAAAlzC,OAAA,EACAhd,OAAAwB,QAAAI,UAAAuuD,UAAAnzC,OAAA,EACAhd,OAAAwB,QAAAI,UAAAyuD,aAAArzC,OAAA,EACAhd,OAAAwB,QAAAI,UAAAyuD,aAAArzC,OAAA,EACAhd,OAAAwB,QAAAI,UAAA0uD,gBAAAtzC,OAAA,EACAhd,OAAAwB,QAAAI,UAAA2uD,kBAAAvzC,OAAA,EACA4D,aAAA4D,uBAGAxkB,OAAA+zD,sBAAA,SAAAL,MAEA,IA6CAwC,SA7CAh/B,SAAA,EACAtJ,MAAAjtB,QAAA,SAAAA,CAAAX,OAAAwB,QAAAI,UAAAwwD,QAAA,CAAAltD,IAAAwuD,KAAAyC,cAAA,GAAA,IAAA,GAEA,OAAAn5D,QAAAkF,yBAAA0rB,QAAA,IAAAA,MAAAwoC,cAEAp2D,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,qBAAA,UACA,IAGA,OAAA4zD,KAAAlC,UAEAx0D,QAAAmP,QAAAnM,OAAAwB,QAAAI,UAAAgS,UAAA,SAAAvH,MAEAqnD,KAAApuB,cAAAj5B,KAAAi5B,cAEAtlC,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,6BAAA,SACAo3B,SAAA,MAYA,IAAAtJ,MAAAyoC,cAAA,IAAAzoC,MAAA0oC,QAAA,IAAA1oC,MAAA2oC,eAEAv2D,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,sBAAA,SACAo3B,SAAA,IAIA,IAAAtJ,MAAA4oC,oBAAA,IAAA5oC,MAAA6oC,0BAAA,IAAA7oC,MAAA8oC,yBAEA12D,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,iCAAA,SACAo3B,SAAA,IAIA,IAAAtJ,MAAA4oC,qBAAA,IAAA5oC,MAAA8oC,yBAGAR,SAAAl5D,QAAAkF,yBAAAwxD,KAAAiD,eAAA,IAAAhsD,KAAA,cAAA,IAAAA,KAAA+oD,KAAAiD,gBACA35D,QAAAkF,yBAAAwxD,KAAAQ,iBAAA,IAAAvpD,KAAA,cAAA,IAAAA,KAAA+oD,KAAAQ,oBACAlgD,MAAA,IAAArJ,OAEAurD,UAAAliD,QAEAhU,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,yBAAA,SACAo3B,SAAA,IAIAA,UAGAl3B,OAAAy1D,kBAAA,WAEA,IAAAze,SAAA34C,GAAA6uC,QAMA,OALAltC,OAAAk1D,UAAApY,OACA98C,OAAAuQ,WAAAY,QAAAtT,aAAAiC,mBAAA,kBAAAk3C,SAAAp5C,QAAAo5C,SAAAj3C,QAEAi3C,SAAAj3C,SAEAi3C,SAAA5J,SAGAptC,OAAAu1D,mBAAA,WAkCA,SAAAqB,UAAAC,KAAAl3D,KAAAuY,MAAAtS,OAEA,IAAAgF,OAAAksD,QAAAD,OAAA,IAAAA,KAAAx3D,QAAArC,QAAAkF,yBAAAvC,OAAA3C,QAAAkF,yBAAAgW,OACA,OAAAtS,MAEAyG,KAAAwqD,KAAAr9C,KAAA,CAAAtU,IAAAvF,OAEA,OAAA0M,KACAA,KAAA6L,OAEAtS,MAzCA5F,OAAA+0D,gBAAA,CACAgC,UAAA,EACAC,UAAA,GAEAC,gBAAA,EACAC,kBAAA,GACAC,iBAAA,EAEAC,iBAAA,EACAC,eAAA,EACAC,cAAA,EACAC,oBAAA,EACAC,oBAAA,EAEAC,eAAA,EACAC,aAAA,EACAC,aAAA,GACAC,gBAAA,EACAC,kBAAA,EAEAC,eAAA,GACAC,SAAA,GACA1G,WAAA,GACAzjC,OAAA,GACA4lC,MAAA,GACAwE,WAAA,GACAC,mBAAA,GACAC,gBAAA,GACAC,UAAA,IAgBA,IAAAzE,KAAA1zD,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAC,UAAA,GACAhmC,OAAAjtB,QAAA,SAAAA,CAAAX,OAAAwB,QAAAI,UAAAwwD,QAAA,CAAAltD,IAAAwuD,KAAAyC,cAAA,GAAA,GAGAzC,MAAA9lC,QAOA5tB,OAAA+0D,gBAAAgC,WAAA/2D,OAAA6G,2BAAAvG,aAAA83D,cACA,IAAAxqC,OAAAyqC,wBACA,MAAA3E,KAAAS,eACAn0D,OAAA+0D,gBAAAiC,UAAAh3D,OAAA+0D,gBAAAgC,SAAAl5D,aAAAiC,mBAAA,YAAAjC,aAAAiC,mBAAA,YACAE,OAAA+0D,gBAAAiC,WAAA,OAAAtD,KAAAlC,SAAA,YAAA,GACAxxD,OAAA+0D,gBAAAC,cAAA,IAAApnC,OAAA2oC,aAGAv2D,OAAA+0D,gBAAAuD,QAAA,IAAA1qC,OAAA0oC,OACAt2D,OAAA+0D,gBAAAwD,gBAAA3qC,OAAA4qC,KAAA74D,MAAA,MAAAN,QAAA,GACAW,OAAA+0D,gBAAAoC,iBAAAn3D,OAAA+0D,gBAAAgC,WAAA/2D,OAAA+0D,gBAAAuD,QAAAt4D,OAAA6G,2BAAAvG,aAAA80D,iBAGAp1D,OAAA+0D,gBAAAyC,mBAAA,OAAA9D,KAAAc,mBACAx0D,OAAA+0D,gBAAAsC,cAAAr3D,OAAA+0D,gBAAAgC,UACA,EAAArD,KAAA+E,mBACA,EAAA/E,KAAAgF,kBACA,EAAA14D,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAsB,QAAA51D,OACAW,OAAA+0D,gBAAAqC,iBAAA,IAAAxpC,OAAA+qC,iBACA34D,OAAA+0D,gBAAAuC,aAAA,MAAA5D,KAAAkF,iBAAA,IAAAlF,KAAAmF,0BACA74D,OAAA+0D,gBAAAwC,mBAAA,EAAAv3D,OAAAwB,QAAAI,UAAAuuD,UAAAwD,YAAAmF,WAAAz5D,OAGAW,OAAA+0D,gBAAAgE,UAAA/4D,OAAA+0D,gBAAAgC,SACA/2D,OAAA+0D,gBAAA0C,eAAAz3D,OAAA+0D,gBAAAgC,UAAA,IAAAnpC,OAAAorC,SACAh5D,OAAA+0D,gBAAA2C,aAAA13D,OAAA+0D,gBAAAgC,SACA/2D,OAAA+0D,gBAAA4C,aAAA,IAAA/pC,OAAAyoC,aAAAx4D,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,iBAAAjC,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,gBACAE,OAAA+0D,gBAAA6C,gBAAA53D,OAAA+0D,gBAAAgC,SACA/2D,OAAA+0D,gBAAA8C,iBAAA73D,OAAA6G,2BAAAvG,aAAA24D,aAGAj5D,OAAA+0D,gBAAA+C,eAAAlB,UAAA52D,OAAAwB,QAAAI,UAAAyxD,UAAAK,KAAAvrB,WAAA,KAAA,aACAnoC,OAAA+0D,gBAAAnnC,OAAAA,OAAA0X,YACAtlC,OAAA+0D,gBAAA1D,WAAAuF,UAAA52D,OAAAwB,QAAAI,UAAAsxD,YAAAQ,KAAAwF,WAAA,cAAA,IACAl5D,OAAA+0D,gBAAAvB,MAAAoD,UAAA52D,OAAAwB,QAAAI,UAAA8wD,OAAAgB,KAAAyF,kBAAA,cAAA,IACAn5D,OAAA+0D,gBAAAgD,SAAA,MAAArE,KAAArrD,KAAA,cAAA,eACArI,OAAA+0D,gBAAAiD,WAAApB,UAAA52D,OAAAwB,QAAAI,UAAA6vD,YAAAiC,KAAA36B,OAAA,cAAA,IACA/4B,OAAA+0D,gBAAAkD,mBAAArB,UAAA52D,OAAAwB,QAAAI,UAAA4wD,kBAAAkB,KAAAiB,iBAAA,cAAA,IACA30D,OAAA+0D,gBAAAmD,gBAAAtB,UAAA52D,OAAAwB,QAAAI,UAAA0wD,iBAAAoB,KAAAmC,eAAA,cAAA,IACA71D,OAAA+0D,gBAAAoD,UAAAvB,UAAA52D,OAAAwB,QAAAI,UAAAgxD,WAAAc,KAAA+E,kBAAA,KAAA,IAGAz4D,OAAAwB,QAAAI,UAAAsuD,UAAAlzC,OAAA,EACAhd,OAAAwB,QAAAI,UAAAuuD,UAAAnzC,OAAA,GAhDAhd,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,SAAAjC,aAAAiC,mBAAA,4BAmDAnC,WAAA,wBAAA,CAAA,SAAA,mBAAA,eAAA,mBAAA,UAAA,SAAAqC,OAAAiwD,iBAAA3vD,aAAAosB,iBAAA/rB,sBAGAX,OAAAo5D,KAAA,GAEAp5D,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAwsD,YAAAlwD,OAAAoD,aAAAM,aAAAwsD,UAAA,IACAlwD,OAAAoD,aAAAM,aAAAwsD,UAAAnjC,WAAA,YACA/sB,OAAAoD,aAAAM,aAAAwsD,UAAAa,WAAA,IACA/wD,OAAAoD,aAAAM,aAAAwsD,UAAAc,WAAA,GACAhxD,OAAAoD,aAAAM,aAAAwsD,UAAAe,OAAA,OACAjxD,OAAAoD,aAAAM,aAAAwsD,UAAAgB,QAAA,QACAlxD,OAAAoD,aAAAM,aAAAwsD,UAAA1C,QAAA,QACAxtD,OAAAoD,aAAAM,aAAAwsD,UAAAiB,OAAA,QACAnxD,OAAAoD,aAAAM,aAAAwsD,UAAAkB,UAAA,QACApxD,OAAA2sB,MAAAC,eAAAC,UAAA,IAGA7sB,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAwsD,UAAAa,WAAA/wD,OAAA4sB,eAAAO,YAAA4jC,WACA/wD,OAAAoD,aAAAM,aAAAwsD,UAAAc,WAAAhxD,OAAA4sB,eAAAO,YAAA6jC,WACAhxD,OAAAoD,aAAAM,aAAAwsD,UAAAe,OAAAjxD,OAAA4sB,eAAAO,YAAA8jC,OACAjxD,OAAAoD,aAAAM,aAAAwsD,UAAAgB,QAAAlxD,OAAA4sB,eAAAO,YAAA+jC,QACAlxD,OAAAoD,aAAAM,aAAAwsD,UAAA1C,QAAAxtD,OAAA4sB,eAAAO,YAAAqgC,QACAxtD,OAAAoD,aAAAM,aAAAwsD,UAAAiB,OAAAnxD,OAAA4sB,eAAAO,YAAAgkC,OACAnxD,OAAAoD,aAAAM,aAAAwsD,UAAAkB,UAAApxD,OAAA4sB,eAAAO,YAAAikC,UACApxD,OAAAoD,aAAAM,aAAAwsD,UAAAmB,WAAArxD,OAAA4sB,eAAAO,YAAAkkC,WACArxD,OAAAoD,aAAAM,aAAAwsD,UAAAz3C,SAAAzY,OAAA4sB,eAAAO,YAAA1U,UAGAzY,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAA0jC,WAAA/wD,OAAAoD,aAAAM,aAAAwsD,UAAAa,WACA/wD,OAAA4sB,eAAAS,YAAA2jC,WAAAhxD,OAAAoD,aAAAM,aAAAwsD,UAAAc,WACAhxD,OAAA4sB,eAAAS,YAAA4jC,OAAAjxD,OAAAoD,aAAAM,aAAAwsD,UAAAe,OACAjxD,OAAA4sB,eAAAS,YAAA6jC,QAAAlxD,OAAAoD,aAAAM,aAAAwsD,UAAAgB,QACAlxD,OAAA4sB,eAAAS,YAAAmgC,QAAAxtD,OAAAoD,aAAAM,aAAAwsD,UAAA1C,QACAxtD,OAAA4sB,eAAAS,YAAA8jC,OAAAnxD,OAAAoD,aAAAM,aAAAwsD,UAAAiB,OACAnxD,OAAA4sB,eAAAS,YAAA+jC,UAAApxD,OAAAoD,aAAAM,aAAAwsD,UAAAkB,UACApxD,OAAA4sB,eAAAS,YAAAgkC,WAAArxD,OAAAoD,aAAAM,aAAAwsD,UAAAmB,WACArxD,OAAA4sB,eAAAS,YAAA5U,SAAAzY,OAAAoD,aAAAM,aAAAwsD,UAAAz3C,UAGAzY,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA,IAAAC,OAAA,KAAA5tB,OAAAoD,aAAAM,aAAAwsD,UAAAa,WAAA,IACA/wD,OAAAoD,aAAAM,aAAAwsD,UAAAa,WACAE,OAAA,SAAAjxD,OAAAoD,aAAAM,aAAAwsD,UAAAe,QAAA,EAAA,EACAC,QAAA,SAAAlxD,OAAAoD,aAAAM,aAAAwsD,UAAAgB,SAAA,EAAA,EACA1D,QAAA,SAAAxtD,OAAAoD,aAAAM,aAAAwsD,UAAA1C,SAAA,EAAA,EACA2D,OAAA,SAAAnxD,OAAAoD,aAAAM,aAAAwsD,UAAAiB,QAAA,EAAA,EACAC,UAAA,SAAApxD,OAAAoD,aAAAM,aAAAwsD,UAAAkB,WAAA,EAAA,EACAC,GAAA,KAAArxD,OAAAoD,aAAAM,aAAAwsD,UAAAmB,WAAA,IACArxD,OAAAoD,aAAAM,aAAAwsD,UAAAmB,WAEAvjC,GAAA,0CACA9tB,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,qBAAAqlB,OACA,mBAAA5tB,OAAAoD,aAAAM,aAAAwsD,UAAAc,WACA,gBAAAC,OACA,iBAAAC,QACA,iBAAA1D,QACA,gBAAA2D,OACA,mBAAAC,UACA,kBAAAC,GACA,gBAAArxD,OAAAoD,aAAAM,aAAAwsD,UAAAz3C,SACA,0BAAAzY,OAAA6G,2BAAAvG,aAAA80D,iBAEA1oC,iBAAAqB,aAAAD,GAAAH,KAAAC,aAGAjwB,WAAA,eAAA,CAAA,SAAA,WAAA,mBAAA,eAAA,UAAA,eAAA,YAAA,eAAA,SAAAqC,OAAAyjC,SAAAwsB,iBAAA3vD,aAAAK,QAAAigB,aAAAhN,UAAA/V,2BAgPA,SAAAw7D,eAEA,IAAAC,cAAA/rD,EAAA,+EAAAwkB,SAAAxkB,EAAA,kBACAk2B,SAAA61B,cAAA71B,CAAAzjC,QA/OAA,OAAAsX,MAAA,GACAtX,OAAAsX,MAAAW,QAAA,CACA,CACAC,MAAA,cACAzH,MAAA5S,aAAAiC,mBAAA,mBACAyS,WAAA,CAAA6F,MAAA,aACA4b,OAAA,SAAAliB,QAAAlC,SAEArC,EAAA,YACA+E,KAAA,OAAA1C,QAAAsI,OACA5F,KAAA,YAAA,SAAA1C,QAAAsI,OACA5F,KAAA,QAAA,qBACAA,KAAA,YAAA,IACAoiB,KAAA,YAAA,GACApiB,KAAA,oBAAAzU,aAAAiC,mBAAA,aACAiyB,SAAAjgB,SAEAvE,EAAA,iBACA+E,KAAA,WAAA1C,QAAAsI,OACA5F,KAAA,QAAA,iBACAyf,SAAAjgB,WAGA,CACAoG,MAAA,SACAzH,MAAA5S,aAAAiC,mBAAA,cACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACA4b,OAAA,SAAAliB,QAAAlC,SAEArC,EAAA,YACA+E,KAAA,OAAA1C,QAAAsI,OACA5F,KAAA,YAAA,SAAA1C,QAAAsI,OACA5F,KAAA,YAAAtS,OAAAopB,QAAAmvC,iBACA7jC,KAAA,YAAA,GACApiB,KAAA,oBAAAzU,aAAAiC,mBAAA,aACAiyB,SAAAjgB,SACAggB,oBAAA,CACAjB,SAAA,EACAjD,OAAA,IACA4O,IAAA,EACA1L,UAAA,IAGAvjB,EAAA,iBACA+E,KAAA,WAAA1C,QAAAsI,OACA5F,KAAA,QAAA,iBACAyf,SAAAjgB,WAGA,CACAoG,MAAA,MACAzH,MAAA5S,aAAAiC,mBAAA,OACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACA4b,OAAA,SAAAliB,QAAAlC,SAEArC,EAAA,YACA+E,KAAA,OAAA1C,QAAAsI,OACA5F,KAAA,YAAA,SAAA1C,QAAAsI,OACA5F,KAAA,YAAA,IACAyf,SAAAjgB,SACAggB,oBAAA,CACAjB,SAAA,EACAjD,OAAA,IACA4O,IAAA,EACA1L,UAAA,MAIA,CACA5Y,MAAA,YACAzH,MAAA5S,aAAAiC,mBAAA,aACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACA4b,OAAA,SAAAliB,QAAAlC,SAEArC,EAAA,YACA+E,KAAA,OAAA1C,QAAAsI,OACA5F,KAAA,YAAA,SAAA1C,QAAAsI,OACA5F,KAAA,QAAA,qBACAA,KAAA,YAAA,IACAyf,SAAAjgB,SAEAvE,EAAA,iBACA+E,KAAA,WAAA1C,QAAAsI,OACA5F,KAAA,QAAA,iBACAyf,SAAAjgB,WAGA,CACAoG,MAAA,YACAzH,MAAA5S,aAAAiC,mBAAA,aACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACA4b,OAAA,SAAAliB,QAAAlC,SAEArC,EAAA,YACA+E,KAAA,OAAA1C,QAAAsI,OACA5F,KAAA,YAAA,SAAA1C,QAAAsI,OACA5F,KAAA,QAAA,qBACAA,KAAA,YAAA,IACAyf,SAAAjgB,SAEAvE,EAAA,iBACA+E,KAAA,WAAA1C,QAAAsI,OACA5F,KAAA,QAAA,iBACAyf,SAAAjgB,WAGA,CACAoG,MAAA,QACAzH,MAAA5S,aAAAiC,mBAAA,gBACAqY,MAAA,GACAM,SAAA,gBACAlG,WAAA,CAAA6F,MAAA,aACA4b,OAAA,SAAAliB,QAAAlC,SAEA5P,OAAAsX,MAAAiiD,UAAAhsD,EAAA,YACA+E,KAAA,OAAA1C,QAAAsI,OACA5F,KAAA,YAAA,SAAA1C,QAAAsI,OACA6Z,SAAAjgB,SACA0nD,kBAAA,CACA7hD,UAAA,EACAe,WAAA1Y,OAAAopB,QAAAspC,OACA91B,cAAA,OACAC,eAAA,MACA48B,YAAA,CACAv0D,IAAA,KACAw0D,KAAA,QAKA,CACAjpD,MAAA,IACAgI,SAAA,wIACAN,MAAA,IAEA,CACA1H,MAAA,IACAgI,SAAA,2IACAN,MAAA,KAGAnY,OAAAsX,MAAAqiD,oBAAA,CACAhiD,UAAA,EACAM,QAAAjY,OAAAsX,MAAAW,QACAS,WAAA,IAAApB,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA,GACAyzB,OAAA,CACAd,MAAA,CACAe,GAAA,cACAC,OAAA,CACAtrB,IAAA,CACAD,KAAA,SACA+Q,UAAA,EACAghD,UAAA,EACAC,YAAA,GAEAhgD,YAAA,CACAhS,KAAA,SACA+Q,UAAA,EACAghD,UAAA,EACAC,YAAA,GAEAC,OAAA,CACAjyD,KAAA,SACA+Q,UAAA,EACAghD,UAAA,EACAC,WAAA,CACAlN,OAAA,SAAAtmC,OAEA,GAAA,WAAAA,MAAA/T,KAAA,SAAA,KAAA+T,MAAA/P,MAOA,OAAA,EALA,IAAAyjD,QAAA/5D,OAAAsX,MAAA0iD,aAAAthD,WAAAjZ,OAAA26B,SAAA+T,QAAA,CAAA2rB,OAAAzzC,MAAA/P,MAAAjB,cAAA,GAEA,OADAgR,MAAA/T,KAAA,kBAAAzU,aAAAiC,mBAAA,iBACAi6D,QAAA16D,QAAA,KAOA20D,IAAA,CACAnsD,KAAA,SACA+Q,UAAA,EACAghD,UAAA,EACAC,YAAA,GAEAI,UAAA,CACApyD,KAAA,SACA+Q,UAAA,EACAghD,UAAA,EACAC,YAAA,GAEAK,UAAA,CACAryD,KAAA,SACA+Q,UAAA,EACAghD,UAAA,EACAC,YAAA,GACArG,MAAA,CACA56C,UAAA,EACAuhD,aAAA,CAAAj1D,IAAA,KAAAw0D,KAAA,UAMA9gD,SAAA,CACAC,KAAA,SACAuhD,QAAA,EACAC,SAAA,EACAC,SAAA,UAEAjiD,YAAA,EACAkiD,SAAA,CACAC,SAAA,CACAvmB,OAAA,GACAwmB,WAAA,GACAhiB,OAAA,GACA4hB,QAAA,GACA9lC,KAAA,GACAs0B,KAAA,GACA9wC,OAAA,GACAqiD,OAAA,KAGAM,QAAA,EACA3hD,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,YAAA,EACAC,UAAA,GASAlZ,OAAAqJ,IAAA,qBAAA,SAAAC,MAAAusB,QAEAA,SAAA71B,OAAAsX,MAAA0iD,eAEAX,eAEAr5D,OAAAsX,MAAA0iD,aAAAW,MAAA7kC,GAAA,UAAA,SAAAje,GAEAA,EAAA+a,UAAAtb,MAAAub,KAAAC,KAAA,UAAAjb,EAAA6mB,OAAAC,QAAA,MAAAi8B,aAAA,wBAEA56D,OAAA66D,SACAhjD,EAAAijD,oBAIA96D,OAAAsX,MAAA0iD,aAAAplC,MAAAkB,GAAA,QAAA,2BAAA,SAAAje,GAEA7X,OAAAsX,MAAA0iD,aAAAruB,QAAA3rC,OAAAsX,MAAA0iD,aAAAplC,MAAApb,KAAA,6BAKAxZ,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAA24D,cAAAj5D,OAAA6G,2BAAAvG,aAAA83D,YAMAx3C,aAAAM,wBAEAlhB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,0BACAsC,OAAAoD,aAAAM,eAEA1D,OAAAoD,aAAAM,aAAA,IAEA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA/F,OAAAopB,QAAA,CACA3Q,SAAA,GACAmV,OAAA,GACAmtC,YAAA,EACAC,SAAA,EACAC,aAAA,GAGAhL,iBAAAkC,gBAAAnyD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KACA,SAAAnE,KAEAA,IAAAumB,YAMAhmB,OAAAopB,QAAAgpC,QAAA3yD,IAAA4yD,YACAryD,OAAAopB,QAAAspC,OAAAjzD,IAAAkzD,OACA3yD,OAAAopB,QAAAxV,UAAAnU,IAAAqzD,sBAAApG,OAAA,eAEAwO,oBAEA,IAAAl7D,OAAAopB,QAAAxV,UAAAvU,QAEA0oB,IAAA/nB,OAAA6G,2BAAAvG,aAAA24D,aAAA,IAAAp7D,aAAAiC,mBAAA,eAAA,IAAA,IACAE,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,YAAAjC,aAAAiC,mBAAA,mBAAAioB,IAAAlqB,aAAAiC,mBAAA,wBACAE,OAAAopB,QAAA+xC,YAAA,GAGAn7D,OAAAopB,QAAA+xC,YAAAn7D,OAAAopB,QAAAxV,UAAA,GAAA1O,IAGA,EAAAlF,OAAAopB,QAAA+xC,aACAn7D,OAAAtC,YAAAsC,OAAAopB,QAAA+xC,cArBAn7D,OAAAuQ,WAAAQ,oBA5BA/Q,OAAAgD,KAAA,UAsDAhD,OAAA66D,OAAA,WAEA76D,OAAAsX,MAAA8jD,iBAAAx1D,QAAAjB,UAEA3E,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,YAAAjC,aAAAiC,mBAAA,2BAIAE,OAAAsX,MAAA0iD,aAAAqB,cACAr7D,OAAAsX,MAAA0iD,aAAAa,WAGA76D,OAAAtC,YAAA,SAAAoK,KAEAA,KAKAmoD,iBAAAkF,eAAArtD,KAAAlE,KACA,SAAAnE,MAEAA,KAAAumB,YAOAhmB,OAAAopB,QAAAkyC,gBAAA77D,KAAA41D,YAGAr1D,OAAAopB,QAAA3Q,SAAA9X,QAAA,SAAAA,CAAAX,OAAAopB,QAAAxV,UAAA,CAAA1O,IAAA4C,IAAAuN,aAAA,GAAA,GACArV,OAAAopB,QAAAwE,OAAAjtB,QAAA,SAAAA,CAAAX,OAAAopB,QAAAgpC,QAAA,CAAAltD,IAAAlF,OAAAopB,QAAAkyC,gBAAA1H,UAAA,GAAAuC,cAAA,GAAA,GACAn2D,OAAAopB,QAAAmvC,gBAAAv4D,OAAAopB,QAAAwE,OAAA4qC,KAAA74D,MAAA,MAAAN,QAAA,GAEAW,OAAAsX,MAAA0iD,aAAA9yB,YACAkyB,KAAAp5D,OAAAsX,MAAAW,QAAAsjD,SAEA,IAAAv7D,OAAAopB,QAAA3Q,SAAA49C,cACA+C,KAAArtB,OAAA,CAAA7zB,MAAA,YAEA,IAAAlY,OAAAopB,QAAA3Q,SAAAugD,UACAI,KAAArtB,OAAA,CAAA7zB,MAAA,SAEA,IAAAlY,OAAAopB,QAAAwE,OAAA+qC,mBAEAS,KAAArtB,OAAA,CAAA7zB,MAAA,cACAkhD,KAAArtB,OAAA,CAAA7zB,MAAA,cACAkhD,KAAArtB,OAAA,CAAA7zB,MAAA,WAGAlY,OAAAsX,MAAA0iD,aAAAnrD,WAAA,CACAoJ,QAAAmhD,OAGAC,gBAhCAr5D,OAAAuQ,WAAAQ,oBAoCA/Q,OAAAuzD,UAAA,WAIA,IAGA1C,MALA7wD,OAAAsX,MAAA0iD,aAAAqB,cAEA,EAAAr7D,OAAAsX,MAAA0iD,aAAAplC,MAAApb,KAAA,cAAAna,SAGAwxD,MAAA7wD,OAAAsX,MAAA0iD,aAAAthD,WAAAjZ,OAGAzC,QAAAkF,yBAAA2uD,OAEA7wD,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,iBAAA,SAKA9C,QAAAmP,QACA0kD,MACA,SAAAxkD,MAGA,IAAAmvD,QAAAx+D,QAAAm9B,KAAAn6B,OAAAopB,QAAAkyC,gBAAA1H,UAAA,IAEA4H,QAAAC,SAAAz7D,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAizD,QAAAl2B,YAAAj5B,KAAAwN,YACA2hD,QAAAtpD,OAAA7F,KAAAytD,OACA0B,QAAAxH,IAAA3nD,KAAA2nD,IACAwH,QAAAtH,gBAAAl0D,OAAAopB,QAAA3Q,SAAAijD,kBACAF,QAAAG,UAAAtvD,KAAA4tD,UACAuB,QAAAI,mBAAAvvD,KAAA6tD,UACAsB,QAAArC,kBAAA9sD,KAAAmnD,MAAAtuD,IACAs2D,QAAAhK,SAAA,EACAgK,QAAAziC,OAAA,OAAAyiC,QAAAK,sBAAA,IAAA,IAEA5L,iBAAA6L,QACA,EACAN,QACAx7D,OAAAopB,QAAAkyC,gBAAArG,QAAA,GACAj1D,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAAA9F,KACA,SAAAnE,GAEAA,EAAAumB,WAEAvmB,EAAAs8D,iBAQAjwD,EAAAkwD,UACAt1D,EAAAmqD,MAAAruD,QAAAsJ,GACA+kD,MAAAoL,OAAAv1D,EAAA,GACA1G,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,YARAE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,oBAAA,SAaAE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,kBAAA,WAMA,IAEAo8D,OAFAF,SAEAE,OAAA7vD,KACA,WAEA,OAAA6vD,aAOA,IAAAhB,kBAAA,WAEA,IAAA,IAAAx0D,EAAA1G,OAAAopB,QAAAxV,UAAAvU,OAAA,EAAA,GAAAqH,EAAAA,KAEA,IAAA1G,OAAAopB,QAAAxV,UAAAlN,GAAA2vD,eAAA,IAAAr2D,OAAAopB,QAAAxV,UAAAlN,GAAAy1D,YACA,IAAAn8D,OAAAopB,QAAAxV,UAAAlN,GAAA6vD,cAEAv2D,OAAAopB,QAAAxV,UAAAqoD,OAAAv1D,EAAA,OAMA/I,WAAA,gBAAA,CAAA,SAAA,mBAAA,kBAAA,eAAA,UAAA,eAAA,YAAA,eAAA,SAAAqC,OAAAiwD,iBAAAvF,gBAAA9pC,aAAAjgB,QAAAL,aAAAsT,UAAA/V,2BAGAmC,OAAAsX,MAAA,GACAtX,OAAAsX,MAAA8kD,cAAA,GACAp8D,OAAAsX,MAAA+kD,qBAAA,CACA1kD,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAwtC,SAAA1yC,KAAAoF,SACAD,SAAAnF,KAAAmF,SAAAutC,SAAA,IACArlD,OAAAs8D,eAAAxkD,UACA9X,OAAAsN,UAEA2K,QAAA,CACA,CACAC,MAAA,KACAzH,MAAA5S,aAAAiC,mBAAA,MACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,cACAzH,MAAA5S,aAAAiC,mBAAA,eACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,WACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,OACAzH,MAAA5S,aAAAiC,mBAAA,QACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,SACAzH,MAAA5S,aAAAiC,mBAAA,UACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,QACAzH,MAAA5S,aAAAiC,mBAAA,iBACAqY,MAAA,GACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACAzH,MAAA5S,aAAAiC,mBAAA,cACAqY,MAAA,GACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+HACAN,MAAA,KAGAO,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAAilD,kBAAA,WAEAv8D,OAAAsX,MAAAklD,gBAAA,IAAAllD,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAAO,OAAAwB,QAAAI,UAAAyxD,UAAAoJ,UAGAz8D,OAAAsX,MAAAklD,gBAAAnjD,OACArZ,OAAAsX,MAAA8kD,cAAA1jD,WAAAjZ,KAAAO,OAAAsX,MAAAklD,gBAAA/8D,SAGAO,OAAAuB,WAAA,WAEAvB,OAAA0F,yBACA1F,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,0BACAsC,OAAAoD,aAAAM,eACA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAwB,QAAAI,UAAA8wD,QAEAzC,iBAAAkC,gBACAnyD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SACA3E,KACA,SAAAnE,MAEAO,OAAAwB,QAAAI,UAAA8wD,OAAAjzD,KAAAkzD,SAIA3yD,OAAAwB,QAAAI,UAAAyxD,UAAA,CACAoJ,QAAA,GACAC,SAAA,GACAC,cAAA,EACAC,YAAA,EACAC,YAAA,IAGA78D,OAAA88D,aAAA98D,OAAA6G,2BAAAvG,aAAAy8D,aAAA/8D,OAAA6G,2BAAAvG,aAAA24D,cACAj5D,OAAA6G,2BAAAvG,aAAA83D,YAEAx3C,aAAAM,wBAEAlhB,OAAAwB,QAAAI,UAAA8wD,OAcA1yD,OAAAg9D,gBAZA/M,iBAAAkC,gBACAnyD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SACA3E,KACA,SAAAnE,MAEAO,OAAAwB,QAAAI,UAAA8wD,OAAAjzD,KAAAkzD,OACA3yD,OAAAwB,QAAAI,UAAA8wD,OAAAuK,QAAA,CAAA/3D,IAAA,EAAA4Q,KAAA,MACA9V,OAAAg9D,kBAMAh9D,OAAA6gD,UAAA,KACA7gD,OAAA8gD,SAAA,GAGA9gD,OAAAk9D,YAAA,WAEAl9D,OAAAm9D,gBACAn9D,OAAAwB,QAAAI,UAAAyxD,UAAAsJ,cAAA,GAGA38D,OAAAm9D,cAAA,WAEAngE,QAAAm9B,KAAA81B,iBAAAmN,cAAAp9D,OAAAwB,QAAAI,UAAAyxD,UAAAqJ,UACA18D,OAAAwB,QAAAI,UAAAyxD,UAAAsJ,cAAA,EACA/7C,aAAA4D,uBAGAxkB,OAAAq9D,eAAA,SAAAx3D,UAOA7F,OAAAuQ,WAAAY,QAAAtT,aAAAiC,mBAAA,kBALA,WAEAE,OAAAs9D,aAAA,EAAAz3D,aAMA7F,OAAAu9D,aAAA,WAEA38C,aAAAY,uBAGA,IAAAxhB,OAAAwB,QAAAI,UAAAyxD,UAAAqJ,SAAAx3D,KAEAlF,OAAAwB,QAAAI,UAAAyxD,UAAAqJ,SAAAn0D,QAAAvI,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAvI,OAAAwB,QAAAI,UAAAyxD,UAAAqJ,SAAAr0D,KAAA,EACArI,OAAAs9D,aAAA,EAAAt9D,OAAAwB,QAAAI,UAAAyxD,UAAAqJ,WAEA18D,OAAAs9D,aAAA,GAAAt9D,OAAAwB,QAAAI,UAAAyxD,UAAAqJ,YAGA18D,OAAAs8D,eAAA,SAAAz2D,UAEA7F,OAAAm9D,gBACAngE,QAAAm9B,KAAAt0B,SAAA7F,OAAAwB,QAAAI,UAAAyxD,UAAAqJ,UACA18D,OAAAwB,QAAAI,UAAAyxD,UAAAsJ,cAAA38D,OAAA6G,2BAAAvG,aAAA83D,YAGAp4D,OAAAg9D,cAAA,WAEAtS,gBAAA0I,qBAAApzD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QAAA,GACA3E,KAAA,SAAAnE,MAEAA,KAAAumB,WAEA,EAAAvmB,KAAA6zD,UAAAj0D,QAEAW,OAAAwB,QAAAI,UAAAyxD,UAAAuJ,YAAAn9D,KAAAm9D,aAAA,EACA58D,OAAAwB,QAAAI,UAAAyxD,UAAAwJ,YAAAp9D,KAAAo9D,aAAA,GACA78D,OAAAwB,QAAAI,UAAAyxD,UAAAoJ,QAAAh9D,KAAA6zD,UACA1jC,KAAA,SAAA4tC,IAAA92D,GAEA,IAAA8sD,MAAAxzD,OAAAwB,QAAAI,UAAA8wD,OAAAl5C,KAAA,CAAAtU,IAAAs4D,IAAAC,WACAD,IAAAE,MAAAlK,MAAAA,MAAAkG,KAAA,OAEAhN,OAAA,eACA1sD,OAAAs8D,eAAAt8D,OAAAwB,QAAAI,UAAAyxD,UAAAoJ,QAAA,IACAz8D,OAAAsX,MAAAilD,oBACAv8D,OAAAsX,MAAAilD,qBAGAv8D,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,aAAA,WAGAE,OAAAuQ,WAAAQ,oBAMA/Q,OAAAs9D,aAAA,SAAA99D,OAAAqG,UAEA6kD,gBAAAiT,sBACAn+D,OACAqG,SACA7F,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAEA9F,KAAA,SAAAnE,MAEAO,OAAAm9D,gBACAn9D,OAAAg9D,gBACAh9D,OAAAmO,gBAAAnO,OAAAwB,QAAAI,UAAAyxD,UAAAuK,kBAKA59D,OAAA69D,YAAA,WAEA79D,OAAAwB,QAAAI,UAAAyxD,UAAAqJ,SAAAxT,MAAAlpD,OAAAwB,QAAAI,UAAAyxD,UAAAqJ,SAAAzT,eAAA/9C,QAAA,UAAA,QAGAvN,WAAA,kBAAA,CAAA,SAAA,UAAA,WAAA,mBAAA,eAAA,eAAA,YAAA,eAAA,SAAAqC,OAAAW,QAAAD,SAAAuvD,iBAAArvC,aAAAtgB,aAAAsT,UAAA/V,2BAGAmC,OAAAo5D,KAAA,GACAp5D,OAAAsX,MAAA,CAAAwmD,sBAAA,GACA99D,OAAAsX,MAAAymD,gBAAA,GACA/9D,OAAAsX,MAAA0mD,uBAAA,CACArmD,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAC,SAAAnF,KAAAmF,SAAAnF,KAAAoF,SAAA,IACA/X,OAAAi+D,UAAAnmD,SAAAomD,SACAl+D,OAAAsN,UAEA2K,QAAA,CACA,CACAC,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,eACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACA3F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACA3F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACA3F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACA3F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACA3F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,iJACAN,MAAA,KAGAO,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAGAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAA6mD,oBAAA,WAEAn+D,OAAAsX,MAAA8mD,kBAAA,IAAA9mD,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAAO,OAAAq+D,aAGAr+D,OAAAsX,MAAA8mD,kBAAA/kD,OACArZ,OAAAsX,MAAAymD,gBAAArlD,WAAAjZ,KAAAO,OAAAsX,MAAA8mD,kBAAA3+D,QAEAO,OAAAo5D,KAAA,GACA7rD,EAAA,gDAAA+wD,KAAAt+D,OAAAo5D,KAAA,GAAAmF,WAEAv+D,OAAAsX,MAAAymD,gBAAAnoC,WAAA,GAEA51B,OAAAo5D,KAAA,GACA7rD,EAAA,gDAAA+wD,KAAAt+D,OAAAo5D,KAAA,GAAAmF,WAEAv+D,OAAAsX,MAAAymD,gBAAAnoC,WAAA,GAEA51B,OAAAo5D,KAAA,GACA7rD,EAAA,gDAAA+wD,KAAAt+D,OAAAo5D,KAAA,GAAAmF,WAEAv+D,OAAAsX,MAAAymD,gBAAAnoC,WAAA,GAEA51B,OAAAo5D,KAAA,GACA7rD,EAAA,gDAAA+wD,KAAAt+D,OAAAo5D,KAAA,GAAAmF,WAEAv+D,OAAAsX,MAAAymD,gBAAAnoC,WAAA,GAEA51B,OAAAo5D,KAAA,GACA7rD,EAAA,gDAAA+wD,KAAAt+D,OAAAo5D,KAAA,GAAAmF,WAEAv+D,OAAAsX,MAAAymD,gBAAAnoC,WAAA,IAGA51B,OAAAuB,WAAA,WAGAvB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,0BACAsC,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAkzD,YAAA,GACAlzD,OAAAozB,OAAA,GACApzB,OAAAw+D,OAAA,GACAx+D,OAAAy+D,QAAA,GACAz+D,OAAA0+D,QAAA,GACA1+D,OAAA2+D,iBAAA,EAEA3+D,OAAA88D,aAAA98D,OAAA6G,2BAAAvG,aAAAy8D,aAAA/8D,OAAA6G,2BAAAvG,aAAA24D,cACAj5D,OAAA6G,2BAAAvG,aAAA83D,YAEAx3C,aAAAM,wBACAlhB,OAAA4+D,kBAEA5hE,QAAAkF,yBAAAlC,OAAAq+D,aACAr+D,OAAAi+D,UAAAj+D,OAAAq+D,WAAA,GAAAH,UAGAl+D,OAAA6+D,cAAA,SAAAp/D,MAEAO,OAAAwQ,QAAA,CACAsuD,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAP,iBAAA,GAGAl/D,KAAAumB,YAEAhmB,OAAAkzD,YAAAzzD,KAAA0zD,aAAA,GACAnzD,OAAAozB,OAAA3zB,KAAA0/D,QAAA,GACAn/D,OAAAw+D,OAAA/+D,KAAA2/D,QAAA,GAEA,IAAAp/D,OAAAkzD,YAAA7zD,QAAA,IAAAW,OAAAozB,OAAA/zB,QAEAW,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,aAAA,WAUA9C,QAAAmP,QAAAnM,OAAAozB,OAAA,SAAA/mB,MAEA,EAAAA,KAAAnH,KAAAmH,KAAAkyD,UAAA55D,YACA0H,KAAAkyD,UAAA1gE,aAAAiC,mBAAA,aAAA,IAAAuM,KAAAgzD,eAIA,IAAAr/D,OAAAkzD,YAAA7zD,QAEAW,OAAAy+D,QAAA,CACAl2D,QAAAvI,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA+8B,YAAA,GACApgC,IAAA,EACA4vD,UAAA,IAIA93D,QAAAmP,QAAAnM,OAAAozB,OAAA,SAAAlb,OAEAlY,OAAA0+D,QAAAxgE,KAAA,CACAohE,cAAApnD,MAAAhT,IACAg0D,WAAA,EACAqG,WAAA,GACAr6D,IAAA,EACA4vD,UAAA,QAQA93D,QAAAmP,QAAAnM,OAAAkzD,YAAA,SAAAsM,MAEAxiE,QAAAmP,QAAAnM,OAAAozB,OAAA,SAAAlb,OAMA,IAJAvX,QAAA,SAAA,CAAAX,OAAAw+D,OAAA,CACAtF,WAAAsG,KAAAt6D,IACAo6D,cAAApnD,MAAAhT,MAEA7F,QAEAW,OAAAw+D,OAAAtgE,KAAA,CACAohE,cAAApnD,MAAAhT,IACAg0D,WAAAsG,KAAAt6D,IACAq6D,WAAA,GACAr6D,IAAA,EACA4vD,UAAA,SAOA,EAAA90D,OAAAkzD,YAAA7zD,QAAA,EAAAW,OAAAozB,OAAA/zB,QACAW,OAAAy/D,YAEA,EAAAz/D,OAAAkzD,YAAA7zD,QAAA,IAAAW,OAAAozB,OAAA/zB,QACAW,OAAA0/D,YAEA,IAAA1/D,OAAAkzD,YAAA7zD,SACAW,OAAAq+D,WAAA,IAEAz9C,aAAA4D,sBAEAxkB,OAAAsX,MAAA6mD,uBAtEAn+D,OAAAuQ,WAAAQ,kBAyEA/Q,OAAA2/D,WAAA,WAOA3/D,OAAAuQ,WAAAY,QAAAtT,aAAAiC,mBAAA,oBALA,WAEAE,OAAA4/D,gBAAA,MAMA5/D,OAAA4+D,gBAAA,WAEA3O,iBAAAgD,oBAAAjzD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SACA3E,KAAA,SAAAnE,MAEAO,OAAA6+D,cAAAp/D,MACAO,OAAAmO,gBAAAnO,OAAA6/D,mBAKA7/D,OAAA4/D,gBAAA,SAAAvoB,WAEA,IAAAA,YAAAz2B,aAAAY,uBAGAxkB,QAAAkF,yBAAAm1C,aACAA,UAAA,IAAAr3C,OAAAy+D,QAAAv5D,IAAA,EAAA,IAEAlF,OAAAy+D,QAAAn5B,YAAAtlC,OAAAy+D,QAAAqB,QAEA7P,iBAAA8P,qBACA1oB,UACAr3C,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,CAAAvI,OAAAy+D,SACA,KACAz+D,OAAA0+D,QACA1+D,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAEA9F,KAAA,SAAAnE,MAEAO,OAAAy+D,QAAA,GACAz+D,OAAA0+D,QAAA,GACA1+D,OAAAwQ,QAAAmuD,iBAAA,EACA3+D,OAAA6+D,cAAAp/D,MACAO,OAAAmO,gBAAAnO,OAAA6/D,kBAIA7/D,OAAAy+D,QAAA,GACAz+D,OAAA0+D,QAAA,GACA1+D,OAAAwQ,QAAAmuD,iBAAA,IAIA3+D,OAAA66D,OAAA,WAEA76D,OAAAwQ,QAAAmuD,iBAAA3+D,OAAA88D,aACA98D,OAAAy+D,QAAA,CACAl2D,QAAAvI,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA+8B,YAAA,GACApgC,IAAA,EACA4vD,UAAA,IAGA90D,OAAA0+D,QAAA,GAEA1hE,QAAAmP,QAAAnM,OAAAozB,OAAA,SAAA/mB,MAEArM,OAAA0+D,QAAAxgE,KAAA,CACAohE,cAAAjzD,KAAAnH,IACAg0D,WAAA,EACAqG,WAAA,GACAr6D,IAAA,EACA4vD,UAAA,OAIA90D,OAAAmN,gBAAA,yBAGAnN,OAAAi+D,UAAA,SAAAn2D,MAEA8Y,aAAA4D,sBACAg7C,KAAA7+D,QAAA,SAAAA,CAAAX,OAAAkzD,YAAA,CAAAhuD,IAAA4C,OAAA,GAAA,GACA9H,OAAAy+D,QAAAe,KACAx/D,OAAAy+D,QAAAqB,QAAAN,KAAAl6B,YACAtlC,OAAA0+D,QAAA1+D,OAAAw+D,OAAArwB,QAAA,CAAA+qB,WAAAsG,KAAAt6D,MAAAwnD,OAAA,SAAAsT,GAEA,OAAAhgE,OAAAozB,OAAA5Z,KAAA,CAAAtU,IAAA86D,EAAAV,gBAAAD,cAEAr/D,OAAAwQ,QAAAmuD,iBAAA3+D,OAAA88D,aAEA98D,OAAAmN,gBAAA,yBAGAnN,OAAAy/D,UAAA,WAEAz/D,OAAAq+D,WAAA,GAGAr+D,OAAAo5D,KAAAz4D,QAAA,UAAAA,CAAAX,OAAAozB,OAAA,eAEAp2B,QAAAmP,QAAAnM,OAAAkzD,YAAA,SAAAsM,OAEA,IAoBAS,MA4BAC,MAhDA9qC,IAAA,GACAA,IAAA8oC,QAAAsB,MAAAt6D,IACAkwB,IAAA+qC,SAAAX,MAAAl6B,YACAtoC,QAAAkF,yBAAAlC,OAAAo5D,KAAA,MAEAgH,MAAAz/D,QAAA,SAAAA,CAAAX,OAAAw+D,OAAA,CACAtF,WAAAsG,MAAAt6D,IACAo6D,cAAAt/D,OAAAo5D,KAAA,GAAAl0D,MACA,GAEAlI,QAAAkF,yBAAAk+D,SAEAhrC,IAAAirC,SAAAD,MAAAl7D,IACAkwB,IAAAkrC,WAAAF,MAAAb,WACAv/D,OAAAwQ,QAAAsuD,UAAA,IAIA9hE,QAAAkF,yBAAAlC,OAAAo5D,KAAA,MAEA6G,MAAAt/D,QAAA,SAAAA,CAAAX,OAAAw+D,OAAA,CACAtF,WAAAsG,MAAAt6D,IACAo6D,cAAAt/D,OAAAo5D,KAAA,GAAAl0D,MACA,GACAlI,QAAAkF,yBAAA+9D,SAEA7qC,IAAAmrC,SAAAN,MAAA/6D,IACAkwB,IAAAorC,WAAAP,MAAAV,WACAv/D,OAAAwQ,QAAAuuD,UAAA,IAIA/hE,QAAAkF,yBAAAlC,OAAAo5D,KAAA,MAEAqH,MAAA9/D,QAAA,SAAAA,CAAAX,OAAAw+D,OAAA,CACAtF,WAAAsG,MAAAt6D,IACAo6D,cAAAt/D,OAAAo5D,KAAA,GAAAl0D,MACA,GACAlI,QAAAkF,yBAAAu+D,SAEArrC,IAAAsrC,SAAAD,MAAAv7D,IACAkwB,IAAAurC,WAAAF,MAAAlB,WACAv/D,OAAAwQ,QAAAwuD,UAAA,IAIAhiE,QAAAkF,yBAAAlC,OAAAo5D,KAAA,MAEA8G,MAAAv/D,QAAA,SAAAA,CAAAX,OAAAw+D,OAAA,CACAtF,WAAAsG,MAAAt6D,IACAo6D,cAAAt/D,OAAAo5D,KAAA,GAAAl0D,MACA,GACAlI,QAAAkF,yBAAAg+D,SAEA9qC,IAAAwrC,SAAAV,MAAAh7D,IACAkwB,IAAAyrC,WAAAX,MAAAX,WACAv/D,OAAAwQ,QAAAyuD,UAAA,IAIAjiE,QAAAkF,yBAAAlC,OAAAo5D,KAAA,MAEA0H,MAAAngE,QAAA,SAAAA,CAAAX,OAAAw+D,OAAA,CACAtF,WAAAsG,MAAAt6D,IACAo6D,cAAAt/D,OAAAo5D,KAAA,GAAAl0D,MACA,GACAlI,QAAAkF,yBAAA4+D,SAEA1rC,IAAA2rC,SAAAD,MAAA57D,IACAkwB,IAAA4rC,WAAAF,MAAAvB,WACAv/D,OAAAwQ,QAAA0uD,UAAA,IAIAl/D,OAAAq+D,WAAAngE,KAAAk3B,OAGAp4B,QAAAkF,yBAAAlC,OAAAq+D,cACAr+D,OAAAq+D,WAAA19D,QAAA,UAAAA,CAAAX,OAAAq+D,WAAA,gBAGAr+D,OAAA0/D,UAAA,WAEA1/D,OAAAq+D,WAAA,GACArhE,QAAAmP,QAAAnM,OAAAkzD,YAAA,SAAAsM,MAEAx/D,OAAAq+D,WAAAngE,KAAA,CAAAggE,QAAAsB,KAAAt6D,IAAAi7D,SAAAX,KAAAl6B,oBAIA3nC,WAAA,sBAAA,CAAA,SAAA,mBAAA,eAAA,UAAA,eAAA,YAAA,SAAAqC,OAAAiwD,iBAAArvC,aAAAjgB,QAAAL,aAAAsT,wBAIA5T,OAAAuB,WAAA,WAGAvB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,0BACAsC,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA/F,OAAAihE,aAAAjhE,OAAA6G,2BAAAvG,aAAAy8D,cAAA/8D,OAAA6G,2BAAAvG,aAAA24D,cACAj5D,OAAA6G,2BAAAvG,aAAA83D,YACAx3C,aAAAM,wBACAlhB,OAAAkhE,cAGAlhE,OAAAmhE,UAAA,WAEAvgD,aAAA4D,sBACAxkB,OAAAozB,OAAA,CAAA,GAAA,GAAA,GAAA,GAAA,IACA,IAAA,IAAA/Y,MAAA,EAAAA,MAAA,IAAAA,MACA,CACA,IAAA1a,MAAAgB,QAAA,SAAAA,CAAAX,OAAAy8D,QAAA,CAAA4C,YAAAhlD,MAAA,IAAA,GACArd,QAAAkF,yBAAAvC,OAEAK,OAAAozB,OAAA/Y,OAAA,CACA9R,QAAAvI,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAg2D,UAAA,GACAc,YAAAhlD,MAAA,EACAnV,IAAA,EACA4vD,UAAA,IAKA90D,OAAAozB,OAAA/Y,OAAA1a,MAIAK,OAAAmN,gBAAA,mCAGAnN,OAAAohE,YAAA,WAEAphE,OAAAmhE,aAGAnhE,OAAAqhE,UAAA,WAGA,GAAAzgD,aAAAY,qBAAA,CAIA,IAAA,IAAA9a,EAAA1G,OAAAozB,OAAA/zB,OAAA,EAAA,GAAAqH,EAAAA,IAEA,IAAA1G,OAAAozB,OAAA1sB,GAAAxB,KAAA,KAAAlF,OAAAozB,OAAA1sB,GAAA63D,WACAv+D,OAAAozB,OAAA6oC,OAAAv1D,EAAA,GAIA1G,OAAAshE,eAGAthE,OAAAkhE,WAAA,WAEAjR,iBAAAgD,oBAAAjzD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SACA3E,KAAA,SAAAnE,MAEAA,KAAAumB,WAEAhmB,OAAAy8D,QAAAh9D,KAAA0/D,QAAA,IAIAn/D,OAAAuQ,WAAAQ,iBACA/Q,OAAAy8D,QAAA,IAEAz8D,OAAAmhE,eAMAnhE,OAAAshE,WAAA,WAEArR,iBAAA8P,qBACA,EACA//D,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,KACAvI,OAAAozB,OACA,KACApzB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aAEA9F,KAAA,SAAAnE,MAEAA,KAAAumB,aAEAvmB,KAAAumB,YAEAhmB,OAAAy8D,QAAAh9D,KAAA0/D,QAAA,GACAn/D,OAAAmO,gBAAAnO,OAAAuhE,gBAIAvhE,OAAAy8D,QAAA,GAEAz8D,OAAAmhE,mBCvhEAnkE,QAAAC,OAAA,oBAAA,CAAA,iBACAC,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBAEAH,eACAK,KAAA,iCACA,CACAC,YAAAH,iBAAAI,YAAA,gBACAC,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oCAIAP,KAAA,wCACA,CACAC,YAAAH,iBAAAI,YAAA,uBACAC,WAAA,0BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,uCAMAJ,WAAA,8BAAA,CAAA,SAAA,SAAAqC,qBAGAA,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAM,eACA1D,OAAAoD,aAAAM,aAAA,QAIA/F,WAAA,mBAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAGA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAkhE,iBAEAxhE,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,2BACAsC,OAAAoD,aAAAM,eACA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,QAIApI,WAAA,2BAAA,CAAA,SAAA,UAAA,mBAAA,mBAAA,kBAAA,WAAA,SAAAqC,OAAAW,QAAAsvD,iBAAAvjC,iBAAA5uB,gBAAA4C,uBAGA,IAAA7C,aAAAC,gBAAAC,gCAAA,+BACAiC,OAAAuB,WAAA,WAIAvB,OAAAoD,aAAAM,eACA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAA+9D,aAAA,CACA10C,WAAA,eACAnC,KAAA,EACA82C,QAAA,EACAC,QAAA,GAEA3hE,OAAAopB,QAAA,CACAw4C,MAAA,CAAA,CAAAC,wBAAA,EAAAC,iBAAAjkE,aAAAiC,mBAAA,SACAiiE,SAAA,CAAA,CAAAC,iBAAA,EAAAC,yBAAApkE,aAAAiC,mBAAA,SACAoiE,UAAA,GAIAliE,OAAA2sB,MAAAC,eAAAC,UAAA,GAGAojC,iBAAAkS,wBACAniE,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAAo7D,iBAAAx+D,KACA,SAAAnE,MAEAA,KAAAumB,YAEA,EAAAvmB,KAAA4iE,0BAAAhjE,QAEAW,OAAAopB,QAAAw4C,MAAA5hE,OAAAopB,QAAAw4C,MAAAU,OAAA3hE,QAAA,SAAAA,CAAAlB,KAAA4iE,0BAAA,CAAAE,cAAA,QACAviE,OAAAopB,QAAAw4C,MAAAjhE,QAAA,UAAAA,CAAAX,OAAAopB,QAAAw4C,MAAA,qBAIA5hE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,qBAAA,WAGA,EAAAL,KAAA+iE,2BAAAnjE,QAGAI,KAAA+iE,2BAAAvG,OAAA,EAAA,GAEAj8D,OAAAopB,QAAA24C,SAAA/hE,OAAAopB,QAAA24C,SAAAO,OAAA3hE,QAAA,SAAAA,CAAAlB,KAAA+iE,2BAAA,CAAAC,sBAAA,QACAziE,OAAAopB,QAAA24C,SAAAphE,QAAA,UAAAA,CAAAX,OAAAopB,QAAA24C,SAAA,6BAIA/hE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,wBAAA,WAGAE,OAAAopB,QAAA84C,UAAAziE,KAAAijE,oBAGA1iE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,4BAAA,WAKAE,OAAAiP,aAAAE,UAAA,GACAnP,OAAAiP,aAAAU,aAAA3P,OAAAopB,QAAA84C,WAAA,EACAliE,OAAAiP,aAAAc,kBAAA,EACArP,SAAA,WACAV,OAAAiP,aAAAW,QAAA,CACA,CAAAC,KAAAhS,aAAAiC,mBAAA,WAAA8F,MAAA,IACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,SAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,aAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,YAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,iBAAA8F,MAAA,GACA,CAAAiK,KAAAhS,aAAAiC,mBAAA,cAAA8F,MAAA,MACA,IAGA5F,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAA+9D,aAAAzhE,OAAA4sB,eAAAO,YAAAtJ,SACA7jB,OAAAiP,aAAAjP,OAAA4sB,eAAAO,YAAAvhB,MAGA5L,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAxJ,SAAA7jB,OAAAoD,aAAAM,aAAA+9D,aACAzhE,OAAA4sB,eAAAS,YAAAzhB,KAAA5L,OAAAiP,cAGAjP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAGA,IAAAs0C,GAAA,CAAAliE,OAAAopB,QAAA84C,WACAv3D,KAAAM,MAAAjL,OAAAiP,aAAAM,SAAA5E,KAAAM,MAAAjL,OAAAiP,aAAAG,WAAA,MAAApP,OAAAopB,QAAA84C,YAEAliE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,mBAAAoiE,IAAA,WACAliE,OAAAiP,aAAAS,UAAA1P,OAAAopB,QAAA84C,WAGAp0C,GAAA,4CACA9tB,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA,gBAAA1J,OAAAiP,aAAAG,UACA,gBAAApP,OAAAiP,aAAAM,QACA,eAAAvP,OAAAoD,aAAAM,aAAA+9D,aAAA72C,KACA,kBAAA5qB,OAAAoD,aAAAM,aAAA+9D,aAAAC,QACA,eAAA1hE,OAAAoD,aAAAM,aAAA+9D,aAAAE,QAEA/zC,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,QAIAnwB,WAAA,0BAAA,CAAA,SAAA,mBAAA,eAAA,UAAA,YAAA,eAAA,SAAAqC,OAAAiwD,iBAAA3vD,aAAAK,QAAAiT,UAAA/V,2BAGAmC,OAAAsX,MAAA,GACAtX,OAAAsX,MAAAqrD,aAAA,GACA3iE,OAAAsX,MAAAsrD,oBAAA,CACAjrD,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,wBACAzH,MAAA5S,aAAAiC,mBAAA,UACAqY,MAAA,GACA5F,WAAA,CAAA6F,MAAA,eACAC,YAAA,EACAI,SAAA,sNAEA,CACAP,MAAA,2BACAzH,MAAA5S,aAAAiC,mBAAA,WACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,MAKAE,WAAA,GACAE,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAEAlZ,OAAAsX,MAAAurD,UAAA,GACA7iE,OAAAsX,MAAAwrD,iBAAA,CACAnrD,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,mBACAzH,MAAA5S,aAAAiC,mBAAA,mBACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,gBACAzH,MAAA5S,aAAAiC,mBAAA,WACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,YACAzH,MAAA5S,aAAAiC,mBAAA,QACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACAzH,MAAA5S,aAAAiC,mBAAA,SACAqY,MAAA,GACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,OACAqY,MAAA,GACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,gEACAN,MAAA,KAGAO,WAAA,GACAE,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAEAlZ,OAAAsX,MAAAyrD,eAAA,GACA/iE,OAAAsX,MAAA0rD,sBAAA,CACArrD,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,wBACAzH,MAAA5S,aAAAiC,mBAAA,UACAqY,MAAA,GACA5F,WAAA,CAAA6F,MAAA,eACAC,YAAA,EACAI,SAAA,6GAEA,CACAP,MAAA,mBACAzH,MAAA5S,aAAAiC,mBAAA,eACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,gBACAzH,MAAA5S,aAAAiC,mBAAA,WACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,YACAzH,MAAA5S,aAAAiC,mBAAA,QACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACAzH,MAAA5S,aAAAiC,mBAAA,SACAqY,MAAA,GACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,OACAqY,MAAA,GACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,MAKAE,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,EACApK,OAAA,KAGA9O,OAAAsX,MAAA2rD,mBAAA,SAAA9pD,IAEAnZ,OAAAsX,MAAA4rD,iBAAA,IAAA5rD,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA0Z,KAGAnZ,OAAAsX,MAAA4rD,iBAAA7pD,OACArZ,OAAAsX,MAAAyrD,eAAArqD,WAAAjZ,KAAAO,OAAAsX,MAAA4rD,iBAAAzjE,SAGAO,OAAAsX,MAAA6rD,cAAA,SAAAhqD,IAEAnZ,OAAAsX,MAAA8rD,YAAA,IAAA9rD,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA0Z,GACA+Z,OAAA,CACAd,MAAA,CACAgB,OAAA,CACA0uC,iBAAA,CACAlpD,UAAA,GAEAyqD,cAAA,CACAzqD,UAAA,GAEA0qD,UAAA,CACA1qD,UAAA,GAEA2qD,WAAA,CACA3qD,UAAA,GAEA4qD,SAAA,CACA5qD,UAAA,GAEA2pD,cAAA,CACA3pD,UAAA,MAQA/O,OAAA,IAGA7J,OAAAsX,MAAA8rD,YAAA/pD,OACArZ,OAAAsX,MAAAurD,UAAAnqD,WAAAjZ,KAAAO,OAAAsX,MAAA8rD,YAAA3jE,SAGAO,OAAAsX,MAAAmsD,iBAAA,SAAAtqD,IAEAnZ,OAAAsX,MAAAosD,eAAA,IAAApsD,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA0Z,GACA+Z,OAAA,CACAd,MAAA,CACAgB,OAAA,CACAqvC,sBAAA,CACA7pD,UAAA,GAEAqpD,yBAAA,CACArpD,UAAA,MAKA/O,OAAA,IAGA7J,OAAAsX,MAAAosD,eAAArqD,OACArZ,OAAAsX,MAAAqrD,aAAAjqD,WAAAjZ,KAAAO,OAAAsX,MAAAosD,eAAAjkE,SAGAO,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAkhE,iBAEAxhE,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,2BACAsC,OAAAoD,aAAAM,eACA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAqC,QAAA,IACA/F,OAAAmJ,qBAAA,GACAnJ,OAAA2jE,2BACA3jE,OAAA4jE,yBAGA5jE,OAAA2jE,yBAAA,WAEA3jE,OAAAwB,QAAAI,UAAAiiE,qBAAA,GACA7jE,OAAAwB,QAAAI,UAAAiiE,qBAAAC,QAAA,GACA9jE,OAAAwB,QAAAI,UAAAiiE,qBAAAE,YAAA,CACAC,oBAAA,EACAC,4BAAA,KACAjC,kBAAA,EACAkC,gBAAA,MACAjC,yBAAApkE,aAAAiC,mBAAA,eACA2iE,sBAAA,IACA0B,GAAA,MAEAnkE,OAAAokE,+BAGApkE,OAAAokE,4BAAA,WAGAnU,iBAAAkS,wBACAniE,OAAAwB,QAAAE,QAAA6D,qBAAAmE,aACA9F,KAEA,SAAAnE,MAGA,EAAAA,KAAA+iE,2BAAAnjE,SACAW,OAAAwB,QAAAI,UAAAiiE,qBAAAE,YAAAtkE,KAAA+iE,2BAAAvG,OAAA,EAAA,GAAA,IAAA,IAEAj8D,OAAAsX,MAAA6rD,cAAA1jE,KAAA4iE,0BAAA3V,OAAA,qBACA1sD,OAAAsX,MAAAmsD,iBAAAhkE,KAAA+iE,2BAAA9V,OAAA,6BACA1sD,OAAAwB,QAAAI,UAAAiiE,qBAAAC,QAAArkE,KAAA4kE,4BAEArkE,OAAAsX,MAAAurD,UAAAzlB,YAAAjxC,QAAA,SAAAE,MAEA,MAAAA,KAAAk2D,eAEAh1D,EAAA,gBAAAlB,KAAA8qB,IAAA,MAAArmB,WAMA9Q,OAAAwB,QAAAI,UAAAmxD,SAEA9C,iBAAAkC,gBACAnyD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAvI,OAAAwB,QAAAE,QAAA6D,qBAAA++D,SACA1gE,KACA,SAAAnE,MAEAO,OAAAwB,QAAAI,UAAA8wD,OAAAjzD,KAAAkzD,OACA3yD,OAAAwB,QAAAI,UAAAmxD,QAAAtzD,KAAAuzD,WAMAhzD,OAAA4jE,sBAAA,WAEA5jE,OAAAwB,QAAAI,UAAA2iE,kBAAA,GACAvkE,OAAAwB,QAAAI,UAAA2iE,kBAAAvnD,OAAA,EACAhd,OAAAwB,QAAAI,UAAA2iE,kBAAAC,WAAA,GACAxkE,OAAAwB,QAAAI,UAAA2iE,kBAAAC,WAAAC,KAAA,KACAzkE,OAAAwB,QAAAI,UAAA2iE,kBAAAC,WAAAhR,MAAA,GACAxzD,OAAAwB,QAAAI,UAAA2iE,kBAAAC,WAAAE,OAAA,KACA1kE,OAAAwB,QAAAI,UAAA2iE,kBAAAC,WAAAG,OAAA,EACA3kE,OAAAwB,QAAAI,UAAA2iE,kBAAAK,eAAA,EACA5kE,OAAAwB,QAAAI,UAAA2iE,kBAAAM,WAAA,KAGA7kE,OAAA8kE,sBAAA,WAEA9kE,OAAA4jE,wBACA5jE,OAAAwB,QAAAI,UAAA2iE,kBAAAvnD,OAAA,GAGAhd,OAAA+kE,cAAA,WAEA9U,iBAAA+U,eACAhlE,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAwB,QAAAI,UAAA2iE,kBAAAC,WAAAC,KACAzkE,OAAAwB,QAAAI,UAAA2iE,kBAAAC,WAAAhR,MACAxzD,OAAAwB,QAAAI,UAAA2iE,kBAAAC,WAAAE,OACA1kE,OAAAwB,QAAAI,UAAA2iE,kBAAAC,WAAAG,OACA/gE,KAEA,SAAAnE,MAEAO,OAAAsX,MAAA2rD,mBAAAxjE,KAAAwlE,YAAAvY,OAAA,qBAEA,IAAAjtD,KAAAwlE,YAAA5lE,OAOAW,OAAAsX,MAAA4rD,iBAAAzjE,OAAAJ,OAAAW,OAAAwB,QAAAI,UAAA2iE,kBAAAM,WACA7kE,OAAAwB,QAAAI,UAAA2iE,kBAAAK,eAAA,EAEA5kE,OAAAwB,QAAAI,UAAA2iE,kBAAAK,eAAA,EARA5kE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,aAAA,cAaAE,OAAAklE,iBAAA,WAEAloE,QAAAmP,QAAAnM,OAAAsX,MAAAosD,eAAAjkE,OAAA,SAAA4M,MAEAA,KAAAo2D,sBAAAziE,OAAAwB,QAAAI,UAAAiiE,qBAAAE,YAAAtB,uBAAA,OAIAziE,OAAAmlE,eAAA,WAEAnoE,QAAAmP,QAAAnM,OAAAwB,QAAAI,UAAAiiE,qBAAAC,QAAA,SAAAz3D,MAEAA,KAAA+4D,cAAA,IACA/4D,KAAAg5D,iBAAA,IACAh5D,KAAAi5D,kBAAA,OAIAtlE,OAAAulE,SAAA,WAEAvoE,QAAAmP,QAAAnM,OAAAsX,MAAA4rD,iBAAAzjE,OAAA,SAAAmrB,MAEA,IAAAA,KAAA46C,oBAAA,OAAA56C,KAAA23C,eAEAviE,OAAAsX,MAAA8rD,YAAAxW,IAAAhiC,QAGA5qB,OAAA4jE,yBAGA5jE,OAAAylE,WAAA,SAAArwC,KAEAA,IAAAmtC,cAAA,IACAh1D,EAAA,gBAAA6nB,IAAA+B,IAAA,MAAArmB,QAGA9Q,OAAA0lE,wBAAA,WAEA,IAAA3D,SAAA/hE,OAAAsX,MAAAosD,eAAAjkE,OAAA26B,SACAwnC,MAAA5hE,OAAAsX,MAAA8rD,YAAA3jE,OAAA26B,SACAurC,YAAA5D,SAAAznB,IAAA,CAAAmoB,sBAAA,OACAmD,SAAAhE,MAAAtnB,IAAA,CAAAioB,cAAA,OACAoD,aAAAC,UAOA7D,SAAA9E,QAAAj9D,OAAAwB,QAAAI,UAAAiiE,qBAAAE,aAEA9T,iBAAAyV,wBACA1lE,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACAk4D,MACAG,SACA/hE,OAAAwB,QAAAI,UAAAiiE,qBAAAC,SACAlgE,KAEA,SAAAnE,MAEAO,OAAAuB,gBAhBAvB,OAAAuQ,WAAA1Q,KAAAhC,aAAAiC,mBAAA,uBAAAjC,aAAAiC,mBAAA,0BCxmBA9C,QAAAC,OAAA,0BAAA,CAAA,iBACAC,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBAEAH,eACAK,KAAA,6CACA,CACAC,YAAAH,iBAAAI,YAAA,sBACAC,WAAA,2BAEAH,KAAA,6CACA,CACAC,YAAAH,iBAAAI,YAAA,sBACAC,WAAA,2BAEAH,KAAA,+CACA,CACAC,YAAAH,iBAAAI,YAAA,wBACAC,WAAA,6BAEAH,KAAA,8CACA,CACAC,YAAAH,iBAAAI,YAAA,uBACAC,WAAA,4BAEAH,KAAA,qCACA,CACAC,YAAAH,iBAAAI,YAAA,cACAC,WAAA,mBAEAH,KAAA,qCACA,CACAC,YAAAH,iBAAAI,YAAA,cACAC,WAAA,mBAEAH,KAAA,4CACA,CACAC,YAAAH,iBAAAI,YAAA,qBACAC,WAAA,8BAIAA,WAAA,oCAAA,CAAA,SAAA,SAAAqC,qBAGAA,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAM,eACA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAwB,QAAAI,YACA5B,OAAAwB,QAAAI,UAAA,IACA5B,OAAAwB,QAAAI,YACA5B,OAAAwB,QAAAI,UAAAikE,kBAAA,QAIAloE,WAAA,yBAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAGA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwlE,mBAEA9lE,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,iCACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,QAIApI,WAAA,iCAAA,CAAA,SAAA,eAAA,mBAAA,eAAA,SAAAqC,OAAA4gB,aAAA8L,iBAAApsB,2BAGAN,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA2sB,MAAAC,eAAAC,UAAA,GACA7sB,OAAAoD,aAAAM,aAAA,CACAqC,QAAA,IACAggE,mBAAA,CACAC,WAAA,GACAC,cAAA,EACAC,YAAA,EACAvE,QAAA,IACAwE,oBAAA,EACAC,gBAAApmE,OAAA6G,2BAAAvG,aAAA80D,mBAAA,KAKAp1D,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAqiE,mBAAA/lE,OAAA4sB,eAAAO,YAAAtJ,SACA7jB,OAAAiP,aAAAjP,OAAA4sB,eAAAO,YAAAvhB,MAGA5L,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAxJ,SAAA7jB,OAAAoD,aAAAM,aAAAqiE,mBACA/lE,OAAA4sB,eAAAS,YAAAzhB,KAAA5L,OAAAiP,cAGAjP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IAEAy4C,yBAGAv4C,GALAlN,aAAAY,uBACA8kD,GAAA,yBACAD,yBAAArmE,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAAu/D,6BAAA,uCAAA,4BAGAz4C,GAAA,eAFAw4C,GAAAtmE,OAAAoD,aAAAM,aAAAqiE,mBAAAI,mBAAAE,yBAAAC,IAGA,eAAAtmE,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,kBAAAvI,OAAAoD,aAAAM,aAAAqiE,mBAAAC,WACA,eAAAhmE,OAAAiK,cAAAjK,OAAAiP,aAAAG,WACA,eAAApP,OAAAiK,cAAAjK,OAAAiP,aAAAM,SACA,kBAAAvP,OAAAoD,aAAAM,aAAAqiE,mBAAAG,WACA,oBAAAlmE,OAAAoD,aAAAM,aAAAqiE,mBAAAE,aACA,eAAAjmE,OAAAoD,aAAAM,aAAAqiE,mBAAApE,QACA,uBAAA3hE,OAAAoD,aAAAM,aAAAqiE,mBAAAK,gBAEAx4C,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,MAGA9tB,OAAAwmE,cAAA,YAEA,IAAAxmE,OAAAoD,aAAAM,aAAAqiE,mBAAAE,eAAA,IAAAjmE,OAAAoD,aAAAM,aAAAqiE,mBAAAG,aAEAlmE,OAAAoD,aAAAM,aAAAqiE,mBAAAE,cAAA,OAKAtoE,WAAA,yBAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAGA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwlE,mBAEA9lE,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,iCACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,QAIApI,WAAA,iCAAA,CAAA,SAAA,eAAA,mBAAA,eAAA,SAAAqC,OAAA4gB,aAAA8L,iBAAApsB,2BAGAN,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA2sB,MAAAC,eAAAC,UAAA,GACA7sB,OAAAoD,aAAAM,aAAA,CACAqC,QAAA,IACA0gE,mBAAA,CACAT,WAAA,GACAU,UAAA,GACAT,cAAA,EACAU,gBAAA,EACAT,YAAA,EACAU,cAAA,EACAC,OAAA,EACAC,OAAA,KAKA9mE,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAA+iE,mBAAAzmE,OAAA4sB,eAAAO,YAAAtJ,SACA7jB,OAAAiP,aAAAjP,OAAA4sB,eAAAO,YAAAvhB,KACA5L,OAAAwmE,iBAGAxmE,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAxJ,SAAA7jB,OAAAoD,aAAAM,aAAA+iE,mBACAzmE,OAAA4sB,eAAAS,YAAAzhB,KAAA5L,OAAAiP,cAGAjP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IACAE,GADAlN,aAAAY,uBACAsM,GAAA,gDACA9tB,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,kBAAAvI,OAAAoD,aAAAM,aAAA+iE,mBAAAT,WACA,iBAAAhmE,OAAAoD,aAAAM,aAAA+iE,mBAAAC,UACA,eAAA1mE,OAAAiK,cAAAjK,OAAAiP,aAAAG,WACA,eAAApP,OAAAiK,cAAAjK,OAAAiP,aAAAM,SACA,kBAAAvP,OAAAoD,aAAAM,aAAA+iE,mBAAAP,WACA,oBAAAlmE,OAAAoD,aAAAM,aAAA+iE,mBAAAR,aACA,cAAAjmE,OAAAoD,aAAAM,aAAA+iE,mBAAAI,OACA,cAAA7mE,OAAAoD,aAAAM,aAAA+iE,mBAAAK,OACA,uBAAA9mE,OAAA6G,2BAAAvG,aAAA80D,mBAAA,EAEAxnC,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,MAGA9tB,OAAAwmE,cAAA,WAEA,KAAAxmE,OAAAoD,aAAAM,aAAA+iE,mBAAAC,WAEA1mE,OAAAoD,aAAAM,aAAA+iE,mBAAAE,gBAAA,EACA3mE,OAAAoD,aAAAM,aAAA+iE,mBAAAG,cAAA,IAIA5mE,OAAAoD,aAAAM,aAAA+iE,mBAAAR,cAAA,EACAjmE,OAAAoD,aAAAM,aAAA+iE,mBAAAP,YAAA,EACAlmE,OAAAoD,aAAAM,aAAA+iE,mBAAAE,gBAAA,EACA3mE,OAAAoD,aAAAM,aAAA+iE,mBAAAG,cAAA,IAGA,IAAA5mE,OAAAoD,aAAAM,aAAA+iE,mBAAAR,eAAA,IAAAjmE,OAAAoD,aAAAM,aAAA+iE,mBAAAP,aAEAlmE,OAAAoD,aAAAM,aAAA+iE,mBAAAR,cAAA,OAKAtoE,WAAA,2BAAA,CAAA,SAAA,eAAA,eAAA,YAAA,SAAAqC,OAAA4gB,aAAAtgB,aAAAsT,wBAGAgN,aAAAM,wBACAlhB,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwlE,mBAEA9lE,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,iCACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,QAIApI,WAAA,mCAAA,CAAA,SAAA,mBAAA,eAAA,eAAA,SAAAqC,OAAA0sB,iBAAApsB,aAAAsgB,2BAGA5gB,OAAAuB,WAAA,WAEAvB,OAAA2sB,MAAAC,eAAAC,UAAA,GACA7sB,OAAAoD,aAAAM,aAAA,CACAqC,QAAA,IACAghE,qBAAA,CACAL,UAAA,GACA/E,QAAA,EACAwE,oBAAA,KAKAnmE,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAqjE,qBAAA/mE,OAAA4sB,eAAAO,YAAAtJ,SACA7jB,OAAAiP,aAAAjP,OAAA4sB,eAAAO,YAAAvhB,MAGA5L,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAxJ,SAAA7jB,OAAAoD,aAAAM,aAAAqjE,qBACA/mE,OAAA4sB,eAAAS,YAAAzhB,KAAA5L,OAAAiP,cAGAjP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IAEAy4C,yBAGAv4C,GALAlN,aAAAY,uBACA8kD,GAAA,4BACAD,yBAAArmE,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAAu/D,6BAAA,4CAAA,+BAGAz4C,GAAA,eAFAw4C,GAAAtmE,OAAAoD,aAAAM,aAAAqjE,qBAAAZ,mBAAAE,yBAAAC,IAGA,eAAAtmE,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,iBAAAvI,OAAAoD,aAAAM,aAAAqjE,qBAAAL,UACA,eAAA1mE,OAAAiK,cAAAjK,OAAAiP,aAAAG,WACA,eAAApP,OAAAiK,cAAAjK,OAAAiP,aAAAM,SACA,eAAAvP,OAAAoD,aAAAM,aAAAqjE,qBAAApF,QACA,uBAAA3hE,OAAA6G,2BAAAvG,aAAA80D,mBAAA,EAEAxnC,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,SAIAnwB,WAAA,iBAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAGA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwlE,mBAEA9lE,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,iCACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,QAIApI,WAAA,yBAAA,CAAA,SAAA,eAAA,mBAAA,mBAAA,eAAA,kBAAA,SAAAqC,OAAA4gB,aAAA8L,iBAAAujC,iBAAA3vD,aAAAxC,8BAGA,IAAAD,aAAAC,gBAAAC,gCAAA,qCACAiC,OAAAuB,WAAA,WAGAqf,aAAAM,wBACA+uC,iBAAA+W,kBACAhnE,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SACA3E,KACA,SAAAnE,MAEAO,OAAAwB,QAAAI,UAAAqlE,eAAAxnE,KAAAynE,eACAlnE,OAAAwB,QAAAI,UAAAqlE,eAAAhK,QAAA,CAAA/3D,IAAA,EAAAogC,YAAAznC,aAAAiC,mBAAA,UAEAE,OAAA2sB,MAAAC,eAAAC,UAAA,GACA7sB,OAAAoD,aAAAM,aAAA,CACAqC,QAAA,IACAohE,WAAA,CACAT,UAAA,GACAU,WAAA,IACAC,SAAA,EACAC,oBAAA,EACAC,SAAA,EACAC,gBAAA,EACAC,SAAA,EACAC,gBAAA,EACAC,iBAAA,EACAxB,oBAAA,EACAyB,0BAAA,OAQA5nE,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAyjE,WAAAnnE,OAAA4sB,eAAAO,YAAAtJ,SACA7jB,OAAAiP,aAAAjP,OAAA4sB,eAAAO,YAAAvhB,KACA5L,OAAAwmE,iBAGAxmE,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAxJ,SAAA7jB,OAAAoD,aAAAM,aAAAyjE,WACAnnE,OAAA4sB,eAAAS,YAAAzhB,KAAA5L,OAAAiP,cAGAjP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IAGA04C,QAIAx4C,GAPAlN,aAAAY,uBACA8kD,QAAA,iBACAA,SAAAtmE,OAAAoD,aAAAM,aAAAyjE,WAAAQ,gBAAA,KAAA,KACArB,QAAAtmE,OAAAoD,aAAAM,aAAAyjE,WAAAhB,mBAAA,oBAAAG,QAEAc,GAAApnE,OAAAoD,aAAAM,aAAAyjE,WAAAC,YAAA,IAEAt5C,GAAA,cAAAw4C,QACA,eAAAtmE,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,iBAAAvI,OAAAoD,aAAAM,aAAAyjE,WAAAT,UACA,eAAA1mE,OAAAiK,cAAAjK,OAAAiP,aAAAG,WACA,eAAApP,OAAAiK,cAAAjK,OAAAiP,aAAAM,SACA,kBAAA63D,GACA,gBAAApnE,OAAAoD,aAAAM,aAAAyjE,WAAAE,SACA,gBAAArnE,OAAAoD,aAAAM,aAAAyjE,WAAAI,SACA,gBAAAvnE,OAAAoD,aAAAM,aAAAyjE,WAAAM,SAEA75C,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,MAGA9tB,OAAAwmE,cAAA,YAEA,IAAAxmE,OAAAoD,aAAAM,aAAAyjE,WAAAQ,iBAEA3nE,OAAAoD,aAAAM,aAAAyjE,WAAAS,0BAAA,EACA5nE,OAAAoD,aAAAM,aAAAyjE,WAAAG,oBAAA,IAIAtnE,OAAAoD,aAAAM,aAAAyjE,WAAAS,0BAAA,EACA5nE,OAAAoD,aAAAM,aAAAyjE,WAAAhB,oBAAA,EACA,MAAAnmE,OAAAoD,aAAAM,aAAAyjE,WAAAE,WAEArnE,OAAAoD,aAAAM,aAAAyjE,WAAAE,SAAA,IACArnE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,oCAAA,YAEAE,OAAAoD,aAAAM,aAAAyjE,WAAAG,oBAAA,GAGA,MAAAtnE,OAAAoD,aAAAM,aAAAyjE,WAAAE,UAEArnE,OAAAoD,aAAAM,aAAAyjE,WAAAI,SAAA,IACAvnE,OAAAoD,aAAAM,aAAAyjE,WAAAK,gBAAA,GAIAxnE,OAAAoD,aAAAM,aAAAyjE,WAAAK,gBAAA,EAGA,MAAAxnE,OAAAoD,aAAAM,aAAAyjE,WAAAI,UAEAvnE,OAAAoD,aAAAM,aAAAyjE,WAAAM,SAAA,IACAznE,OAAAoD,aAAAM,aAAAyjE,WAAAO,gBAAA,GAIA1nE,OAAAoD,aAAAM,aAAAyjE,WAAAO,gBAAA,MAKA/pE,WAAA,iBAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAGA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwlE,mBAEA9lE,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,iCACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,QAIApI,WAAA,yBAAA,CAAA,SAAA,eAAA,mBAAA,eAAA,SAAAqC,OAAA4gB,aAAA8L,iBAAApsB,2BAGAN,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA2sB,MAAAC,eAAAC,UAAA,GACA7sB,OAAAoD,aAAAM,aAAA,CACAqC,QAAA,IACA8hE,WAAA,CACAnB,UAAA,GACAW,SAAA,IACAE,SAAA,IACAE,SAAA,IACAD,gBAAA,EACAE,gBAAA,KAKA1nE,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAmkE,WAAA7nE,OAAA4sB,eAAAO,YAAAtJ,SACA7jB,OAAAiP,aAAAjP,OAAA4sB,eAAAO,YAAAvhB,KACA5L,OAAAwmE,iBAGAxmE,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAxJ,SAAA7jB,OAAAoD,aAAAM,aAAAmkE,WACA7nE,OAAA4sB,eAAAS,YAAAzhB,KAAA5L,OAAAiP,cAGAjP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IAIAE,GAJAlN,aAAAY,uBACA8kD,GAAA,iBAGAx4C,GAAA,eAFAw4C,GAAAtmE,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAAu/D,6BAAA,+BAAAD,IAGA,eAAAtmE,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,iBAAAvI,OAAAoD,aAAAM,aAAAmkE,WAAAnB,UACA,eAAA1mE,OAAAiK,cAAAjK,OAAAiP,aAAAG,WACA,eAAApP,OAAAiK,cAAAjK,OAAAiP,aAAAM,SACA,gBAAAvP,OAAAoD,aAAAM,aAAAmkE,WAAAR,SACA,gBAAArnE,OAAAoD,aAAAM,aAAAmkE,WAAAN,SACA,gBAAAvnE,OAAAoD,aAAAM,aAAAmkE,WAAAJ,SAEA75C,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,MAGA9tB,OAAAwmE,cAAA,WAEA,MAAAxmE,OAAAoD,aAAAM,aAAAmkE,WAAAR,UAEArnE,OAAAoD,aAAAM,aAAAmkE,WAAAN,SAAA,IACAvnE,OAAAoD,aAAAM,aAAAmkE,WAAAL,gBAAA,GAIAxnE,OAAAoD,aAAAM,aAAAmkE,WAAAL,gBAAA,EAGA,MAAAxnE,OAAAoD,aAAAM,aAAAmkE,WAAAN,UAEAvnE,OAAAoD,aAAAM,aAAAmkE,WAAAJ,SAAA,IACAznE,OAAAoD,aAAAM,aAAAmkE,WAAAH,gBAAA,GAIA1nE,OAAAoD,aAAAM,aAAAmkE,WAAAH,gBAAA,MAKA/pE,WAAA,yBAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAGA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwlE,mBAEA9lE,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,iCACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,QAIApI,WAAA,iCAAA,CAAA,SAAA,eAAA,mBAAA,eAAA,SAAAqC,OAAA4gB,aAAA8L,iBAAApsB,2BAGAN,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,IACA1D,OAAAoD,aAAAM,aAAAokE,qBAAA9nE,OAAAoD,aAAAM,aAAAokE,mBAAA,IACA9nE,OAAAoD,aAAAM,aAAAokE,mBAAA/6C,WAAA,8BACA/sB,OAAAoD,aAAAM,aAAAokE,mBAAAC,YAAA,KACA/nE,OAAA2sB,MAAAC,eAAAC,UAAA,IAGA7sB,OAAAgoE,yBAAA,WAEAhoE,OAAAwB,QAAAI,UAAAikE,kBAAA,IAGA7lE,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAokE,mBAAA9nE,OAAA4sB,eAAAO,YAAAtJ,UAGA7jB,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAxJ,SAAA7jB,OAAAoD,aAAAM,aAAAokE,oBAGA9nE,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IACAE,GADAlN,aAAAY,uBACAsM,GAAA,+CACA9tB,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,sBAAAvI,OAAAoD,aAAAM,aAAAokE,mBAAAC,YAEAn6C,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,SAIAnwB,WAAA,0BAAA,CAAA,SAAA,eAAA,YAAA,SAAAqC,OAAAM,aAAAsT,wBAGA5T,OAAAuB,WAAA,WAEAvB,OAAA6G,2BAAAvG,aAAAwlE,mBAEA9lE,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,iCACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,QAIApI,WAAA,kCAAA,CAAA,SAAA,eAAA,mBAAA,eAAA,SAAAqC,OAAA4gB,aAAA8L,iBAAApsB,2BAGAN,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAAsX,MAAA,GACAtX,OAAA2sB,MAAAC,eAAAC,UAAA,GACA7sB,OAAAoD,aAAAM,aAAA,CACAqC,QAAA,IACAkiE,oBAAA,CACAjC,WAAA,GACAC,cAAA,EACAU,gBAAA,EACAT,YAAA,EACAU,cAAA,EACAjF,QAAA,EACAkF,OAAA,EACAC,OAAA,EACAoB,cAAA,KAKAloE,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAukE,oBAAAjoE,OAAA4sB,eAAAO,YAAAtJ,SACA7jB,OAAAiP,aAAAjP,OAAA4sB,eAAAO,YAAAvhB,KACA5L,OAAAwmE,iBAGAxmE,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAxJ,SAAA7jB,OAAAoD,aAAAM,aAAAukE,oBACAjoE,OAAA4sB,eAAAS,YAAAzhB,KAAA5L,OAAAiP,cAGAjP,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IAGAE,GAHAlN,aAAAY,uBAGAsM,GAAA,eADA9tB,OAAAwB,QAAAE,QAAA6D,qBAAAyB,SAAAu/D,6BAAA,kDAAA,gCAEA,eAAAvmE,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,kBAAAvI,OAAAoD,aAAAM,aAAAukE,oBAAAjC,WACA,eAAAhmE,OAAAiK,cAAAjK,OAAAiP,aAAAG,WACA,eAAApP,OAAAiK,cAAAjK,OAAAiP,aAAAM,SACA,kBAAAvP,OAAAoD,aAAAM,aAAAukE,oBAAA/B,WACA,oBAAAlmE,OAAAoD,aAAAM,aAAAukE,oBAAAhC,aACA,eAAAjmE,OAAAoD,aAAAM,aAAAukE,oBAAAtG,QACA,gBAAA3hE,OAAAoD,aAAAM,aAAAukE,oBAAApB,OACA,gBAAA7mE,OAAAoD,aAAAM,aAAAukE,oBAAAnB,OACA,6BAAA9mE,OAAAoD,aAAAM,aAAAukE,oBAAAC,aAEAt6C,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,MAGA9tB,OAAAwmE,cAAA,YAEA,IAAAxmE,OAAAoD,aAAAM,aAAAukE,oBAAAhC,eAAA,IAAAjmE,OAAAoD,aAAAM,aAAAukE,oBAAA/B,aAEAlmE,OAAAoD,aAAAM,aAAAukE,oBAAAhC,cAAA,OC/rBAjpE,QAAAC,OAAA,WAAA,CAAA,eAAA,kBAAA,oBACAC,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBAEAH,eACAK,KAAA,6BACA,CACAC,YAAAH,iBAAAI,YAAA,aACAC,WAAA,gBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,2BAKAP,KAAA,gCACA,CACAC,YAAAH,iBAAAI,YAAA,gBACAC,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,2BAKAP,KAAA,qBACA,CACAC,YAAAH,iBAAAI,YAAA,cACAC,WAAA,iBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,2BAKAP,KAAA,uBACA,CACAC,YAAAH,iBAAAI,YAAA,gBACAC,WAAA,wBAIAA,WAAA,qBAAA,CAAA,SAAA,SAAAqC,qBAGAA,OAAAuB,WAAA,WAEAvB,OAAA0F,yBACA1F,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAM,aAAAykE,iBAAAnoE,OAAAwB,QAAAE,QAAA6D,qBAAA6iE,wBAGAzqE,WAAA,mBAAA,CAAA,SAAA,UAAA,SAAA,eAAA,eAAA,oBAAA,kBAAA,qBAAA,gBAAA,YAAA,eAAA,mBAAA,SAAAqC,OAAAW,QAAAshD,OAAAxsC,aAAAmL,aAAAngB,kBAAAiqD,gBACA9kC,mBAAAyiD,cAAAz0D,UAAA/V,aAAA4e,+BAIA,SAAAia,UAAA7pB,QAEA,IAAAy7D,iBAAA,EAOA,OANAtrE,QAAAmP,QAAAU,OAAA,SAAAR,MAEArM,OAAAJ,SAAAC,KAAAwM,KAAA,SACAi8D,iBAAA,IAGAA,gBAiHA,SAAAC,eACAh7D,EAAA,uBAAAi7D,WAAA,YACAj7D,EAAA,uBAAAi7D,WAAA,YACAj7D,EAAA,uBAAAi7D,WAAA,YACAj7D,EAAA,8BAAAi7D,WAAA,YAGA,SAAAC,qBAGA,OAAAzoE,OAAA0oE,cAAAC,aAAAC,cAEA,KAAA,GACA5oE,OAAA0oE,cAAA7oE,KAAAgpE,WAAA,EACA7oE,OAAA0oE,cAAA7oE,KAAAipE,WA2BA9rE,QAAAkF,yBAAAlC,OAAA0oE,cAAAt/C,QAAA2/C,eAGA/oE,OAAA0oE,cAAAt/C,QAAA2/C,YAAAC,cAAA,IAAAhpE,OAAA0oE,cAAAt/C,QAAA2/C,YAAA9qD,UA7BAje,OAAA0oE,cAAA7oE,KAAAopE,WAAA,EACA,MAEA,KAAA,EACA,KAAA,EACAjpE,OAAA0oE,cAAA7oE,KAAAgpE,WAAA,EACA7oE,OAAA0oE,cAAA7oE,KAAAipE,WAAA,EACA9oE,OAAA0oE,cAAA7oE,KAAAopE,WAAA,EACA,MAEA,KAAA,GACAjpE,OAAA0oE,cAAA7oE,KAAAgpE,WAAA,EACA7oE,OAAA0oE,cAAA7oE,KAAAipE,WAAA,EACA9oE,OAAA0oE,cAAA7oE,KAAAopE,WAAA,EACA,MAEA,QACAjpE,OAAA0oE,cAAA7oE,KAAAgpE,WAAA,EACA7oE,OAAA0oE,cAAA7oE,KAAAipE,WAAA,EACA9oE,OAAA0oE,cAAA7oE,KAAAopE,WAAA,GAuHA,SAAAC,YAAAC,aACA,GAAAnpE,OAAA0oE,cAAAt/C,SAAAppB,OAAA0oE,cAAAt/C,QAAAggD,kBACA,IAAA,IAAA1iE,EAAA,EAAAA,EAAA1G,OAAA0oE,cAAAt/C,QAAAggD,kBAAA/pE,OAAAqH,IACA,GAAA1G,OAAA0oE,cAAAt/C,QAAAggD,kBAAA1iE,GAAAyiE,aACA,OAAA,EAIA,OAAA,EAlHAnpE,OAAAuB,WAAA,WAGAqf,aAAAM,wBAGAlhB,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAM,aAAA2lE,SAAArpE,OAAAoD,aAAAM,aAAA2lE,UAAA,GACArpE,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,IAGA/F,OAAA0oE,cAAA,CACA7oE,KAAA,CACAgpE,WAAA,EACAC,WAAA,EACAG,WAAA,EACAK,WAAA,EACAC,oBAAA,GAEAngD,QAAA,GACAu/C,aAAAN,cAAAmB,uBAGAxpE,OAAAyc,iBAAAA,iBAGAhc,kBAAA0I,qBAAAnJ,OAAAwB,QAAAM,WAAA,IAAA8B,KAAA,SAAAnE,MAEAO,OAAA0oE,cAAAt/C,QAAAqgD,kBAAAhqE,OAzLAO,OAAAwB,QAAAK,WAKAwmE,cAAAqB,iBAAA1pE,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KACA,SAAAnE,MAEA,OAAAA,KAAAumB,YAAAhpB,QAAAkF,yBAAAzC,KAAAspE,cAEA/oE,OAAAuQ,WAAAQ,sBACA/Q,OAAA0oE,cAAA7oE,KAAA8pE,WAAA,KAIA3pE,OAAA0oE,cAAAt/C,QAAA2/C,YAAAtpE,KAAAspE,YAAA,IAAA,GACA/oE,OAAA0oE,cAAAt/C,QAAAwgD,SAAAnqE,KAAAmqE,SACA5pE,OAAA0oE,cAAAt/C,QAAAygD,WAAApqE,KAAAoqE,gBAEApB,wBAlBAzoE,OAAAgD,KAAA,sBA8LAyS,aAAAq0D,QAEAzB,cAAA0B,gBAAAt0D,aAAAq0D,QAAAlmE,KACA,SAAAnE,MAEAO,OAAA0oE,cAAAC,aAAAlpE,KAAAuqE,cAAA,GAGAhqE,OAAAiqE,qBAEAxB,wBAMAzoE,OAAAiqE,mBAAA,WAEAjqE,OAAA0oE,cAAAt/C,QAAAggD,kBAAA,GACAf,cAAA6B,qBAAAlqE,OAAA0oE,cAAAC,aAAAxgC,WAAAnoC,OAAA0oE,cAAAC,aAAAwB,kBAAAvmE,KACA,SAAAnE,MAEAA,KAAAumB,aAAAhpB,QAAAkF,yBAAAzC,KAAA2qE,oBAOApqE,OAAA0oE,cAAAt/C,QAAAggD,kBAAA3pE,KAAA2qE,kBAIAptE,QAAAkF,yBAAAlC,OAAA0oE,cAAAC,aAAA0B,sBACArqE,OAAA0oE,cAAAC,aAAA0B,mBAAA5qE,KAAA6qE,oBAGAtqE,OAAA0oE,cAAA7oE,KAAAypE,WAAA,EACAtsE,QAAAmP,QAAAnM,OAAA0oE,cAAAt/C,QAAAggD,kBAAA,SAAA/8D,MAQA,IAMAk+D,UAXAl+D,KAAAu9C,KACA5pD,OAAA0oE,cAAA7oE,KAAAypE,WAAAj9D,KAAAu9C,GAAAjlD,WAIA3H,QAAAkF,yBAAAmK,KAAAm+D,cACAxpC,UAAArgC,QAAA,SAAAA,CAAAX,OAAA0oE,cAAAC,aAAAqB,aAAA,CAAAQ,WAAAn+D,KAAAm+D,aAAA,GAAA,GACAn+D,KAAAyxB,SAAA9gC,QAAAkF,yBAAA8+B,WAAA,EAAAvkB,iBAAA01B,cAAAnR,UAAAypC,WAGAztE,QAAAkF,yBAAAmK,KAAAq+D,gBACAH,UAAA5pE,QAAA,SAAAA,CAAAX,OAAA0oE,cAAAC,aAAAqB,aAAA,CAAAU,aAAAr+D,KAAAq+D,eAAA,GAAA,GACAr+D,KAAAyxB,SAAA9gC,QAAAkF,yBAAAqoE,WAAA,EAAA9tD,iBAAA01B,cAAAo4B,UAAAE,cA7BAzqE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,qBAAA,YAqCAE,OAAA2qE,YAAA,WACA,OAAAzB,YAAA,eAGAlpE,OAAA4qE,gBAAA,WACA,OAAA1B,YAAA,iBAcAlpE,OAAA6qE,UAAA,SAAA5U,SAKA,OAHAj2D,OAAA0oE,cAAAC,aAAAmC,QAAA7U,QACAj2D,OAAA0oE,cAAAC,aAAAoC,oBAAA/qE,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YAEAusD,SAEA,IAAA,UA3OAoS,cAAA2C,iBAAAhrE,OAAA0oE,cAAAC,cAAA/kE,KACA,SAAAnE,MAGA,OAAAzC,QAAAkF,yBAAAzC,KAAAuqE,aAAAiB,SAAA,IAAAxrE,KAAAuqE,aAAAiB,QAEAjrE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,mBAAA,cACAyoE,qBAIA7xC,UAAAj3B,KAAAuqE,aAAAv9D,QAEA87D,gBAKAvoE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,WACAE,OAAAgD,KAAA,oBAAAvD,KAAAuqE,aAAAiB,YA0NA,MAEA,IAAA,SA9LA5C,cAAA2C,iBAAAhrE,OAAA0oE,cAAAC,cAAA/kE,KACA,SAAAnE,MAEAi3B,UAAAj3B,KAAAuqE,aAAAv9D,QAEA87D,gBAKAvoE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,wBAAA,WACAmiD,OAAAyH,YAqLA,MAEA,IAAA,SAvMA1pD,OAAAuQ,WAAAY,QAAAtT,aAAAiC,mBAAA,oBAAA,QAAAjC,aAAAiC,mBAAA,eAAA,aAAAjC,aAAAiC,mBAAA,kBAnBA,WAEAuoE,cAAA2C,iBAAAhrE,OAAA0oE,cAAAC,cAAA/kE,KACA,SAAAnE,MAEAi3B,UAAAj3B,KAAAuqE,aAAAv9D,QAEA87D,eAIAvoE,OAAAgD,KAAA,oBAAAvD,KAAAuqE,aAAAiB,WAIA,WACA1C,iBA4MA,MAEA,IAAA,SAxQAvoE,OAAA0oE,cAAA7oE,KAAA0pE,oBAAA,EACAlB,cAAA2C,iBAAAhrE,OAAA0oE,cAAAC,cAAA/kE,KACA,SAAAnE,MAEAi3B,UAAAj3B,KAAAuqE,aAAAv9D,QAEA87D,gBAIAvoE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,WACAE,OAAAgD,KAAA,2BAmQAhD,OAAAkrE,8BAAA,WACA3C,mBAIA5qE,WAAA,gBAAA,CAAA,SAAA,UAAA,SAAA,eAAA,eAAA,oBAAA,kBAAA,qBAAA,gBAAA,YAAA,eAAA,mBAAA,WAAA,SAAAqC,OAAAW,QAAAshD,OAAAxsC,aAAAmL,aAAAngB,kBAAAiqD,gBAAA9kC,mBAAAyiD,cAAAz0D,UAAA/V,aAAA4e,kBAAA/b,uBAIAV,OAAAmrE,WAAA,CACAtrE,KAAA,CACA8pE,WAAA,EACAyB,QAAA,EACA9B,WAAA,EACAR,WAAA,EACAS,oBAAA,GAEAlW,eAAAhxD,EACAsoD,cAAAtoD,EACA+mB,QAAA,GACAu/C,aAAA,IAGA3oE,OAAAqrE,oBAAAhpE,EACArC,OAAAsrE,sBAAA,EAEAtrE,OAAAsX,MAAA,GACAtX,OAAAsX,MAAAi0D,WAAA,GACAvrE,OAAAsX,MAAAk0D,kBAAA,CACA7zD,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,aACAzH,MAAA5S,aAAAiC,mBAAA,QACAyS,WAAA,CAAA6F,MAAA,eACAD,MAAA,GACAE,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,SACAzH,MAAA5S,aAAAiC,mBAAA,MACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,UACAzH,MAAA5S,aAAAiC,mBAAA,WACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,YACAqY,MAAA,IACAyV,OAAA,SACArb,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,IAGAC,SAAA,6CAAAgE,kBAAAmU,YAAA,cACAoD,OAAA,SAAAliB,QAAAlC,SAEArC,EAAA,YACA+E,KAAA,OAAA1C,QAAAsI,OACA5F,KAAA,YAAA,SAAA1C,QAAAsI,OACA5F,KAAA,QAAA,cACAyf,SAAAjgB,SACAggB,oBAAA,CACAjB,SAAA,EACAjD,OAAA,IACA4O,IAAA,EACA1L,UAAA,IAGAvjB,EAAA,iBACA+E,KAAA,WAAA1C,QAAAsI,OACA5F,KAAA,QAAA,iBACAyf,SAAAjgB,YAIA4G,WAAA,GACAE,UAAA,EACAP,YAAA,EACAU,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAEAlZ,OAAAsX,MAAAm0D,2BAAA,CACA9zD,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,cACAzH,MAAA5S,aAAAiC,mBAAA,aACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,IAGAC,SAAA,0EAEA,CACAP,MAAA,UACAzH,MAAA5S,aAAAiC,mBAAA,WACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,YACAqY,MAAA,IACAyV,OAAA,SACArb,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,IAGAwb,OAAA,SAAAliB,QAAAlC,SACArC,EAAA,YACA+E,KAAA,OAAA1C,QAAAsI,OACA5F,KAAA,YAAA,SAAA1C,QAAAsI,OACA5F,KAAA,QAAA,cACAyf,SAAAjgB,SACAggB,oBAAA,CACAjB,SAAA,EACAjD,OAAA,IACA4O,IAAA,EACA1L,UAAA,IAGAvjB,EAAA,iBACA+E,KAAA,WAAA1C,QAAAsI,OACA5F,KAAA,QAAA,iBACAyf,SAAAjgB,YAIA4G,WAAA,GACAE,UAAA,EACAP,YAAA,EACAU,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAAo0D,eAAA,SAAAvyD,GAAAwyD,WAEA3rE,OAAAsX,MAAAs0D,aAAA,IAAAt0D,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA0Z,GACA+Z,OAAA,CACAd,MAAA,CACAe,GAAA,aACAC,OAAA,CACAo3C,WAAA,CACA3iE,KAAA,SACA+Q,UAAA,EACAghD,UAAA,EACAC,YAAA,GAEAgS,OAAA,CACAhkE,KAAA,SACA+Q,UAAA,EACAghD,UAAA,EACAC,YAAA,GAEAiS,QAAA,CACAjkE,KAAA,SACA+Q,UAAA,EACAghD,UAAA,EACAC,YAAA,GAEA4Q,SAAA,CACA5iE,KAAA,SACA+Q,UAAA,EACAghD,UAAA,EACAC,WAAA,CACAkS,SAAA,SAAAl0D,GAEA,GAAAA,EAAAm0D,GAAA,mBACA,CACA,IAAAC,iBAAAjsE,OAAAsX,MAAAi0D,WAAAzzD,SAAAD,EAAA8mB,QAAA,OACAroB,IAAAuB,EAAAq0D,yBAAAtmE,QAIA,GAFAqmE,iBAAAxB,SAAAn0D,IAEAuB,EAAAvB,MAAA3R,UAGA,OADAkT,EAAAvF,KAAA,oBAAAzU,aAAAiC,mBAAA,cACA,EAGA,GAAAwW,IAAA,EAGA,OADAuB,EAAAvF,KAAA,oBAAAzU,aAAAiC,mBAAA,kBACA,EAGA,GAAAwW,IAAA21D,iBAAAE,UACA,CACAC,iBAAA,CAAAH,iBAAAE,WAEA,OADAt0D,EAAAvF,KAAA,oBAAAzU,aAAAiC,mBAAA,WAAAssE,oBACA,GAGA,OAAA,UASApsE,OAAAsX,MAAAs0D,aAAAvyD,OACArZ,OAAAsX,MAAAi0D,WAAA7yD,WAAAjZ,KAAAO,OAAAsX,MAAAs0D,aAAAnsE,QAEAksE,UACA3rE,OAAAsX,MAAAi0D,WAAAc,WAAA,GAEArsE,OAAAsX,MAAAi0D,WAAA31C,WAAA,IAEA51B,OAAAsX,MAAAg1D,wBAAA,SAAAnzD,IACAnZ,OAAAsX,MAAAi1D,sBAAA,IAAAj1D,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAA0Z,GACA+Z,OAAA,CACAd,MAAA,CACAe,GAAA,eACAC,OAAA,CACAs3C,aAAA,CACA7iE,KAAA,SACA+Q,UAAA,GAEA4zD,YAAA,CACA3kE,KAAA,SACA+Q,UAAA,GAEA6zD,qBAAA,CACA5kE,KAAA,SACA+Q,UAAA,GAEAkzD,QAAA,CACAjkE,KAAA,SACA+Q,UAAA,GAEA6xD,SAAA,CACA5iE,KAAA,SACA+Q,UAAA,EACAghD,UAAA,EACAC,WAAA,CACAkS,SAAA,SAAAl0D,GACA,GAAAA,EAAAm0D,GAAA,mBAAA,CACA,IAAAC,iBAAAjsE,OAAAsX,MAAAo1D,oBAAA50D,SAAAD,EAAA8mB,QAAA,OACAroB,IAAAuB,EAAAq0D,yBAAAtmE,QAIA,GAFAqmE,iBAAAxB,SAAAn0D,IAEAuB,EAAAvB,MAAA3R,UAEA,OADAkT,EAAAvF,KAAA,oBAAAzU,aAAAiC,mBAAA,cACA,EAGA,GAAAwW,IAAA,EAEA,OADAuB,EAAAvF,KAAA,oBAAAzU,aAAAiC,mBAAA,kBACA,EAIA,IAAA9C,QAAAkF,yBAAA+pE,iBAAAE,YACA71D,IAAA21D,iBAAAE,UAAA,CACAC,iBAAA,CAAAH,iBAAAE,WAEA,OADAt0D,EAAAvF,KAAA,oBAAAzU,aAAAiC,mBAAA,WAAAssE,oBACA,GAIA,OAAA,UASApsE,OAAAsX,MAAAi1D,sBAAAlzD,OACArZ,OAAAsX,MAAAo1D,oBAAAh0D,WAAAjZ,KAAAO,OAAAsX,MAAAi1D,sBAAA9sE,SAGA,IAAAktE,kBACA,CACA98D,KAAA,oBACAw/B,kBAAAxxC,aAAAiC,mBAAA,+BAAA,QAAAjC,aAAAiC,mBAAA,gBACAyvC,eAAA,WAEA,MAAA,WAAAvvC,OAAAmrE,WAAAxC,aAAAmC,UAKA9qE,OAAAmrE,WAAAxC,aAAAwB,iBAAAxlE,aAIA,IAAAgG,KAAA3K,OAAAmrE,WAAAxC,aAAAwB,kBACA,IAAAx/D,QAKAiiE,cAAA,GAAAC,uBAAA,GAGA,SAAAn2C,UAAA7pB,QAEA,IAAAy7D,iBAAA,EAOA,OANAtrE,QAAAmP,QAAAU,OAAA,SAAAR,MAEArM,OAAAJ,SAAAC,KAAAwM,KAAA,SACAi8D,iBAAA,IAGAA,gBAoEA,SAAAwE,kBAEAzE,cAAAqB,iBAAA1pE,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KACA,SAAAnE,MAEA,OAAAA,KAAAumB,YAAAhpB,QAAAkF,yBAAAzC,KAAAspE,cAEA/oE,OAAAuQ,WAAAQ,sBACA/Q,OAAAmrE,WAAAtrE,KAAA8pE,WAAA,KAIA3pE,OAAAmrE,WAAA/hD,QAAA2/C,YAAAtpE,KAAAspE,YAAA,IAAA,GACA/oE,OAAAmrE,WAAA/hD,QAAAwgD,SAAAnqE,KAAAmqE,SACA5pE,OAAAmrE,WAAA/hD,QAAAygD,WAAApqE,KAAAoqE,WAEA7pE,OAAAmrE,WAAAtrE,KAAAipE,UAAArpE,KAAAspE,YAAAC,cAAA,IAAAvpE,KAAAspE,YAAA9qD,cAjDAoqD,cAAA0E,0BAAA/sE,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QAAAvI,OAAAmrE,WAAAxC,aAAAwB,kBAAAnqE,OAAAmrE,WAAA/hD,QAAA4jD,aAAAppE,KACA,SAAAnE,MACA,OAAAA,KAAAumB,YAAAhpB,QAAAkF,yBAAAzC,KAAAwtE,iBACAjtE,OAAAuQ,WAAAQ,sBACA/Q,OAAAmrE,WAAAtrE,KAAA8pE,WAAA,KAIA3pE,OAAAmrE,WAAA9X,UAAA5zD,KAAAwtE,eAAAlhC,OAAA,CAAA4iB,OAAA,IAAAjC,OAAA,eAEA,EAAA1sD,OAAAmrE,WAAA9X,UAAAh0D,OACAW,OAAAmrE,WAAAtrE,KAAAurE,QAAA,EAEAprE,OAAAmrE,WAAAtrE,KAAAurE,QAAA,OAGApuE,QAAAkF,yBAAAuT,aAAAq0D,SAEA9pE,OAAAmrE,WAAA9X,UAAArzD,OAAAmrE,WAAA9X,UAAAtnB,OAAA,CAAAmhC,wBAAA,IACAltE,OAAAmrE,WAAAxC,aAAAxgC,WAAAnoC,OAAAmrE,WAAA9X,UAAA,GAAAnuD,IACAlF,OAAAmtE,+BAGAntE,OAAAmrE,WAAA9X,UAAArzD,OAAAmrE,WAAA9X,UAAAjtC,OAAA,SAAAgnD,GACA,OAAA,IAAAA,EAAAF,yBAAAE,EAAAloE,MAAAlF,OAAAmrE,WAAAxC,aAAAxgC,aAEAnoC,OAAAmrE,WAAA9X,UAAAnlC,KAAA,SAAAk/C,GACA,OAAAA,EAAAjlC,YAAAilC,EAAAjlC,aAAAnoC,OAAAmrE,WAAAxC,aAAAxgC,WAAAilC,EAAAloE,IAAA,EAAAkoE,EAAAjlC,WAAA,aA4BA,SAAAklC,oBAEAhF,cAAA0B,gBAAAt0D,aAAAq0D,QAAAlmE,KACA,SAAAnE,MAEAmtE,cAAAntE,KAAAuqE,aAAAA,aAAAzO,QACA97D,KAAAuqE,aAAAA,aAAA,GACAhqE,OAAAmrE,WAAAxC,aAAAlpE,KAAAuqE,aACAhqE,OAAAmrE,WAAA/hD,QAAAygD,WAAApqE,KAAAuqE,aAAAG,iBACAnqE,OAAAmrE,WAAAtrE,KAAAopE,WAAA,EAEAjpE,OAAAmrE,WAAAxC,aAAAj/D,YAAA1J,OAAAmrE,WAAAxC,aAAAj/D,YAAA2L,WACArV,OAAAqrE,eAAArrE,OAAAstE,uBAAAttE,OAAAmrE,WAAAxC,aAAAxgC,WACAnoC,OAAAmtE,+BAsCA,SAAAI,eAAAC,OACA,OAtBA,SAAAA,OACA,OAAAA,MAAAC,IACA,SAAAC,OACA,QAAAx7D,OAAAy7D,UAAAD,MAAAjD,cAIAiD,MAAAjD,SAAA,OAIAztE,QAAAkF,yBAAAwrE,MAAAvB,YAAAuB,MAAAjD,SAAAiD,MAAAvB,cAWAyB,CAAAJ,OAAAK,MAAAC,SA8IA,SAAAvF,eACAh7D,EAAA,qBAAAi7D,WAAA,YACAj7D,EAAA,oBAAAi7D,WAAA,YACAj7D,EAAA,oBAAAi7D,WAAA,YACAj7D,EAAA,2BAAAi7D,WAAA,YA3SAxoE,OAAA2sE,kBAAA,IAAA78B,IAAAC,GAAAC,SAAAC,cAAA08B,mBA8HAz6D,OAAAy7D,UAAAz7D,OAAAy7D,WAAA,SAAA/nE,OACA,MAAA,iBAAAA,OACAmoE,SAAAnoE,QACA2xB,KAAAy2C,MAAApoE,SAAAA,OA+DA5F,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA0F,yBAEA1F,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAM,aAAA2lE,SAAArpE,OAAAoD,aAAAM,aAAA2lE,UAAA,GACArpE,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,IA1LA6f,mBAAA+/B,aAAA3lD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KACA,SAAAnE,MAEA,OAAAA,KAAAumB,YAAAhpB,QAAAkF,yBAAAzC,KAAA+lD,mBAEAxlD,OAAAuQ,WAAAQ,sBACA/Q,OAAAmrE,WAAAtrE,KAAA8pE,WAAA,KAIA3sE,QAAAmP,QAAA1M,KAAA+lD,iBAAA,SAAAn5C,MAEAA,KAAAqiD,SAAAriD,KAAAu5C,UAAA,IAAAv5C,KAAAw5C,gBAGA7lD,OAAAmrE,WAAAxgB,SAAAlrD,KAAA+lD,iBAAArX,QAAA,CAAAwgB,QAAA,IAAAjC,OAAA,gBA8KAogB,kBAvKArsE,kBAAA0I,qBAAAnJ,OAAAwB,QAAAM,WAAA,IAAA8B,KAAA,SAAAnE,MAEAO,OAAAmrE,WAAA/hD,QAAAqgD,kBAAAhqE,OAwKAgW,aAAAq0D,OACAuD,qBAxFArtE,OAAAmrE,WAAAxC,aAAA,IAAAN,cAAAmB,oBAEAxpE,OAAAmrE,WAAAxC,aAAAj/D,YAAA1J,OAAAwB,QAAAE,QAAA6D,qBAAAmE,cA6FA1J,OAAA6qE,UAAA,SAAA5U,SAGAj2D,OAAAmrE,WAAAxC,aAAAmC,QADA,WAAA7U,QACA,UAEAA,QAjEA,WAEAj2D,OAAAiuE,gBAAA,CACApuE,MAAA,EACA6Q,KAAA,IAGA,IAAAw9D,YAAAluE,OAAAsX,MAAAi0D,WAAA7yD,WAAAjZ,OAAA26B,SAAA+zC,IAAA,aAAA,IAAAnuE,OAAAsX,MAAAo1D,oBAAAh0D,WAAAjZ,OAAA26B,SAAA+zC,IAAA,aAAA,GACAC,aAAA,CAAApuE,OAAAmrE,WAAA/hD,QAAA2/C,YAAAsF,UAAAruE,OAAAmrE,WAAA/hD,QAAA2/C,YAAAuF,WAyBA,OAvBAf,eAAAvtE,OAAAsX,MAAAi0D,WAAA7yD,WAAAjZ,SAAA8tE,eAAAvtE,OAAAsX,MAAAo1D,oBAAAh0D,WAAAjZ,UACAO,OAAAiuE,gBAAA,CACApuE,MAAA,EACA6Q,KAAA7S,aAAAiC,mBAAA,yBAIAouE,WAAAluE,OAAAmrE,WAAA/hD,QAAA2/C,YAAAsF,YAEAruE,OAAAiuE,gBAAA,CACApuE,MAAA,EACA6Q,KAAA7S,aAAAiC,mBAAA,qBAAAsuE,gBAIAF,WAAAluE,OAAAmrE,WAAA/hD,QAAA2/C,YAAAuF,YAEAtuE,OAAAiuE,gBAAA,CACApuE,MAAA,EACA6Q,KAAA7S,aAAAiC,mBAAA,sBAAAsuE,gBAIAxtD,aAAAY,uBAAAxhB,OAAAiuE,gBAAApuE,KAmCA0uE,IAKAvuE,OAAAmO,gBAAAnO,OAAAmrE,WAAAqD,UAEAxuE,OAAAmrE,WAAAxC,aAAAoC,oBAAA/qE,OAAAwB,QAAAE,QAAA6D,qBAAAmE,YACA1J,OAAAmrE,WAAAxC,aAAAqB,aAAAhqE,OAAAsX,MAAAi0D,WAAA7yD,WAAAjZ,OAAA26B,SAAAkoC,OAAAtiE,OAAAsX,MAAAo1D,oBAAAh0D,WAAAjZ,OAAA26B,UACAiuC,cAAA2C,iBAAAhrE,OAAAmrE,WAAAxC,cAAA/kE,KACA,SAAAnE,MAEA,GAAAzC,QAAAkF,yBAAAzC,KAAAuqE,aAAAiB,SAAA,IAAAxrE,KAAAuqE,aAAAiB,OAIA,OAHAjrE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,mBAAA,SACA42B,UAAAj3B,KAAAuqE,aAAAv9D,aACA87D,eAIA,GAAA7xC,UAAAj3B,KAAAuqE,aAAAv9D,QACA87D,oBAyBA,OArBAvoE,OAAAmrE,WAAAxC,aAAAmC,UAAA7U,UACAx2D,KAAAuqE,aAAAc,QAAA7U,QAEAoS,cAAA2C,iBAAAvrE,KAAAuqE,cAAApmE,KACA,SAAAu1B,QAEA,OAAAn8B,QAAAkF,yBAAAi3B,OAAA6wC,aAAAiB,SAAA,IAAA9xC,OAAA6wC,aAAAiB,QACAjrE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,mBAAA,SACA42B,UAAAyC,OAAA6wC,aAAAv9D,aACA87D,qBAIA7xC,UAAAyC,OAAA6wC,aAAAv9D,SACA87D,mBAOAtS,SACA,IAAA,UACAj2D,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,WACAE,OAAAgD,KAAA,oBAAAvD,KAAAuqE,aAAAiB,QACAoC,oBACA9E,eACA,MAEA,IAAA,SACAvoE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,wBAAA,WACAE,OAAAgD,KAAA,uBAAAvD,KAAAuqE,aAAAiB,QACA,MAEA,IAAA,SACAjrE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,WACAE,OAAAgD,KAAA,0BA3DAulE,gBAkEAvoE,OAAAkrE,8BAAA,WACA3C,gBAgGA,IAAAkG,+BAAA,EACAzuE,OAAAmtE,2BAAA,WAEAnwE,QAAAkF,yBAAAlC,OAAAmrE,WAAAxC,aAAAxgC,aAAAnrC,QAAAkF,yBAAAlC,OAAAmrE,WAAAxC,aAAAwB,mBAIA,IAAAsE,iCACAA,iCAEApG,cAAA6B,qBAAAlqE,OAAAmrE,WAAAxC,aAAAxgC,WAAAnoC,OAAAmrE,WAAAxC,aAAAwB,kBAAAvmE,KACA,SAAAnE,MACA,IAAAA,KAAAumB,YAAAhpB,QAAAkF,yBAAAzC,KAAA2qE,mBAKA,OAJApqE,OAAAmrE,WAAAtrE,KAAA8pE,WAAA,EACA3pE,OAAAJ,SAAAC,KAAA,wEAAA,SACAG,OAAAsrE,sBAAA,OACAmD,iCAIA,IA1GA/vC,OAAAgwC,OA0GAC,sBAAA,EACA/B,cAAAgC,WAxDA,SAAAF,QAEA,IAAAG,WAAA,GAEAH,OAAA9+C,KAAA,SAAAk/C,GAEA,IAAAC,SAAAlC,uBAAArzD,KAAA,CAAAw1D,gBAAAF,EAAAE,kBAEAD,SACAF,WAAA3wE,KAAA6wE,WAGA/xE,QAAAkF,yBAAA4sE,EAAA,YAAAA,EAAA,SAAA,GACAD,WAAA3wE,KAAA4wE,MAIA9uE,OAAAmrE,WAAAxC,aAAAqB,aAAA6E,WAAAniB,OAAA,cA6CAuiB,CAAAxvE,KAAA2qE,kBAAAhkD,OAAA,SAAA8oD,IAAA,OAAAA,GAAA1E,cA3CA,SAAAkE,QACA,IAAAG,WAAA,GACAH,OAAA9+C,KAAA,SAAAk/C,GACA,IAAAC,SAAAlC,uBAAArzD,KAAA,CAAAkxD,aAAAoE,EAAApE,eACAqE,SACAF,WAAA3wE,KAAA6wE,WAGA/xE,QAAAkF,yBAAA4sE,EAAA,YAAAA,EAAA,SAAA,GACAD,WAAA3wE,KAAA4wE,MAIA9uE,OAAAmrE,WAAAxC,aAAAwG,sBAAAN,WAAAniB,OAAA,eA+BA0iB,CAAA3vE,KAAA2qE,kBAAAhkD,OAAA,SAAA8oD,IAAA,OAAAA,GAAAxE,gBACA1qE,OAAAmrE,WAAAxC,aAAAqB,aAAA3qE,QAAA,GACAW,OAAAJ,SAAAC,KAAA,wEAAA,aApHA6+B,OA4GAkuC,cA5GA8B,OA4GAjvE,KAAA2qE,kBAzGA1rC,OAAAA,OAAAtY,OAAA,SAAAipD,GACA,IAAA,IAAA3oE,EAAA,EAAAA,EAAAgoE,OAAArvE,OAAAqH,IACA,GAAA2oE,EAAA7E,YAAAkE,OAAAhoE,GAAA8jE,aAAA6E,EAAA7E,YAAA6E,EAAA3E,cAAAgE,OAAAhoE,GAAAgkE,eAAA2E,EAAA3E,aACA,OAAA,EAMA,OAHA2E,EAAA7E,YAAAxqE,OAAAstE,yBAAAttE,OAAAmrE,WAAAxC,aAAAxgC,YACAnoC,OAAAJ,SAAAC,KAAA,SAAAwvE,EAAA7E,WAAA,0IAAA,YAEA,IAGAkE,OAAA9+C,KAAA,SAAAk/C,GAEA,IAmBAQ,EAnBAD,EAAA,KAmBA,IAAAC,KAlBAR,EAAApE,cACA2E,EAAA3wC,OAAAllB,KAAA,CAAAkxD,aAAAoE,EAAApE,iBAGAhsC,OAAAkuB,IADAyiB,EAAA,IASAA,GAJAA,EAAA3wC,OAAAllB,KAAA,CAAAgxD,WAAAsE,EAAAtE,eAIA9rC,OACAkuB,IAAA,IAAAyb,cAAAkH,sBACA3pC,OAIAkpC,EAEA9xE,QAAAkF,yBAAAmtE,EAAAC,MACAD,EAAAC,GAAAR,EAAAQ,IAIAtyE,QAAAkF,yBAAAmtE,EAAA,YAAAA,EAAA,SAAA,KAGArvE,OAAAmrE,WAAAxC,aAAAqB,aAAAtrC,OAAAtY,OAAA,SAAAipD,GAAA,OAAAA,EAAA7E,aAAA9d,OAAA,cACA1sD,OAAAmrE,WAAAxC,aAAAwG,sBAAAzwC,OAAAtY,OAAA,SAAAipD,GAAA,OAAAA,EAAA3E,eAAAhe,OAAA,eACAkgB,cAAA,GA8DA+B,qBAAA,EAAA3uE,OAAAmrE,WAAAxC,aAAAqB,aAAA3qE,QAAA,EAAAW,OAAAmrE,WAAAxC,aAAAwG,sBAAA9vE,QASAwtE,uBAAA,GAEA7sE,OAAAsrE,sBAAAqD,qBACA3uE,OAAAmrE,WAAAtrE,KAAA8pE,UAAAgF,qBAGA3uE,OAAAmrE,WAAA/hD,QAAAygD,WAAApqE,KAAAoqE,YAEA7sE,QAAAkF,yBAAAlC,OAAAmrE,WAAAxC,aAAA0B,qBACArtE,QAAAkF,yBAAAlC,OAAAmrE,WAAAxC,aAAAsC,WACAjrE,OAAAmrE,WAAAxC,aAAA0B,mBAAA5qE,KAAA6qE,oBAGAttE,QAAAkF,yBAAAlC,OAAAqrE,iBACArrE,OAAA,iBAAAA,OAAAmrE,WAAAxC,aAAA,aACA3oE,OAAAmrE,WAAAxC,aAAA0B,mBAAA5qE,KAAA6qE,mBACAtqE,OAAAqrE,eAAArrE,OAAAmrE,WAAAxC,aAAAxgC,YAGAnoC,OAAAsX,MAAAo0D,eAAA1rE,OAAAmrE,WAAAxC,aAAAqB,cAAAhqE,OAAAmrE,WAAAxC,aAAAqB,aAAAwF,IAAA,CAAA5lB,GAAA,MACA5pD,OAAAsX,MAAAg1D,wBAAAtsE,OAAAmrE,WAAAxC,aAAAwG,uBACAV,kCACA,SAAAhtD,OAEA,MADAgtD,iCACAhtD,UAMAzhB,OAAAqQ,OAAA,gCAAA,WAEA,IAAAo/D,YAAAC,YAAAC,UAOA,GALA3yE,QAAAkF,yBAAAlC,OAAAmrE,WAAAxC,aAAAwB,mBACAh/D,MAAAR,KAAAM,MAAAjL,OAAAmrE,WAAAxC,aAAAwB,qBACAsF,YAAA,IAAA9kE,KAAA3K,OAAAmrE,WAAAxC,aAAAwB,iBAAAj/D,QAAA,KAAA,KAAAA,QAAA,KAAA,QAGAlO,QAAAkF,yBAAAlC,OAAAmrE,WAAA/hD,QAAAygD,cACA1+D,MAAAR,KAAAM,MAAAjL,OAAAmrE,WAAA/hD,QAAAygD,aACA,CACA,IAAA+F,KAAA5vE,OAAAmrE,WAAA/hD,QAAAygD,WACA6F,YAAA,IAAA/kE,KAAAilE,KAAA1kE,QAAA,KAAA,KAAAA,QAAA,KAAA,MAGAukE,aAAAC,cACAC,UAAAF,aAIAzvE,OAAAmrE,WAAA/hD,QAAA4jD,YAAA2C,UACA3vE,OAAAmrE,WAAAxC,aAAAwB,iBAAAxpE,QAAA,OAAAA,CAAA,IAAAgK,KAAAglE,WAAA,uBAGA3vE,OAAAqQ,OAAA,2CAAA,SAAAw/D,iBAAAC,qBAEA,IAAArB,gCACAoB,mBAAAC,sBACA9yE,QAAAkF,yBAAA4tE,uBAAA9yE,QAAAkF,yBAAA2tE,mBACA7yE,QAAA+yE,SAAAD,sBAAA9yE,QAAA+yE,SAAAF,oBACAG,oBAAA,IAAArlE,KAAAmlE,oBAAA5kE,QAAA,KAAA,KAAAA,QAAA,KAAA,MACA+kE,iBAAA,IAAAtlE,KAAAklE,iBAAA3kE,QAAA,KAAA,KAAAA,QAAA,KAAA,MAEA8kE,oBAAAE,iBAAAD,iBAAAC,iBAGArD,uBAAA7sE,OAAAsX,MAAAi0D,WAAA7yD,WAAAjZ,OAAA26B,SAAAkoC,OAAAtiE,OAAAsX,MAAAo1D,oBAAAh0D,WAAAjZ,OAAA26B,UACAp6B,OAAAmtE,iCAMAntE,OAAA2qE,YAAA,WACA,OAAA3qE,OAAAmrE,WAAAxC,aAAAqB,cAAA,EAAAhqE,OAAAmrE,WAAAxC,aAAAqB,aAAA3qE,SACAW,OAAAsrE,sBAGAtrE,OAAA4qE,gBAAA,WACA,OAAA5qE,OAAAmrE,WAAAxC,aAAAwG,uBAAA,EAAAnvE,OAAAmrE,WAAAxC,aAAAwG,sBAAA9vE,SACAW,OAAAsrE,yBAGA3tE,WAAA,iBAAA,CAAA,SAAA,gBAAA,YAAA,eAAA,SAAAqC,OAAAqoE,cAAAz0D,UAAA/V,2BAGAmC,OAAA0F,yBAEA1F,OAAAwB,QAAAE,QAAA6D,qBAAA6iE,qBACApoE,OAAAgD,KAAA,uBAwBAhD,OAAAsX,MAAA,GACAtX,OAAAsX,MAAAi0D,WAAA,GACAvrE,OAAAsX,MAAAk0D,kBAAA,CACA7zD,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,SACAzH,MAAA5S,aAAAiC,mBAAA,SACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,YACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,iBACAzH,MAAA5S,aAAAiC,mBAAA,UACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,UACAzH,MAAA5S,aAAAiC,mBAAA,WACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,eACAzH,MAAA5S,aAAAiC,mBAAA,YACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,SACAzH,MAAA5S,aAAAiC,mBAAA,UACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,YACAzH,MAAA5S,aAAAiC,mBAAA,aACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,uFACAN,MAAA,IAEA,CACAM,SAAA,mHACAN,MAAA,KAGAO,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAAo0D,eAAA,WAEA1rE,OAAAsX,MAAAs0D,aAAA,IAAAt0D,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAAO,OAAAmwE,WACAj9C,OAAA,CACAjoB,MAAA,SAAA/L,UASA,OAPAqO,EAAAqiB,KAAA1wB,SAAA,SAAAu3B,IAAA0nB,MAEAA,KAAAiyB,cAAA,iBAAAjyB,KAAAiyB,eAEAjyB,KAAAiyB,aAAAzlE,KAAA8tC,OAAA0F,KAAAiyB,cAAAxiD,OAAA,wCAGA1uB,aAKAc,OAAAsX,MAAAs0D,aAAAvyD,OACArZ,OAAAsX,MAAAi0D,WAAA7yD,WAAAjZ,KAAAO,OAAAsX,MAAAs0D,aAAAnsE,SAGAO,OAAAuB,WAAA,WAGAvB,OAAAwB,QAAAE,QAAA6D,qBAAA6iE,qBACApoE,OAAAgD,KAAA,uBAEAhD,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAM,aAAAysE,WAAAnwE,OAAAoD,aAAAM,aAAAysE,YAAA,GACAnwE,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,IAEA/F,OAAAmwE,WAAA,GAhKA9H,cAAAgI,cAAArwE,OAAAwB,QAAAE,QAAA6D,qBAAAgD,SAAA3E,KACA,SAAAnE,MAEAA,KAAAumB,WAEAhpB,QAAAkF,yBAAAzC,KAAA6wE,YAMAtwE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,8BAAA,YAJAE,OAAAmwE,WAAA1wE,KAAA6wE,WACAtwE,OAAAsX,MAAAo0D,kBAMA1rE,OAAAuQ,WAAAQ,oBAsJA/Q,OAAAuwE,UAAA,SAAA7C,OAIA,YAFAA,MAAA30C,OAGA/4B,OAAAgD,KAAA,oBAAA0qE,MAAAxoE,KAIAlF,OAAAgD,KAAA,uBAAA0qE,MAAAxoE,SAKAvH,WAAA,mBAAA,CAAA,SAAA,kBAAA,YAAA,SAAAqC,OAAA0qD,gBAAA92C,wBAGA5T,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAM,aAAA8sE,OAAAxwE,OAAAoD,aAAAM,aAAA8sE,QAAA,GACAxwE,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,kBACAsC,OAAAoD,aAAAM,aAAAqC,QAAA,QAGApI,WAAA,2BAAA,CAAA,SAAA,eAAA,kBAAA,eAAA,UAAA,mBAAA,iBAAA,kBAAA,SAAAqC,OAAA4gB,aAAA8pC,gBAAApqD,aAAAK,QAAA+rB,iBAAAxsB,eAAApC,8BAIA,IAAAD,aAAAC,gBAAAC,gCAAA,sBACAiC,OAAAuB,WAAA,WAEAqf,aAAAM,wBACAlhB,OAAA6G,2BAAAvG,aAAAmwE,kCAEAzwE,OAAAgD,KAAA,SAEAhD,OAAAoD,aAAAM,aAAA1D,OAAAoD,aAAAM,cAAA,GACA1D,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAM,aAAA8sE,OAAA,CACAE,OAAA,KACAC,QAAA,KACAC,WAAA,KACAC,UAAA,KACAC,OAAA,KACAC,KAAA,KACAC,UAAA,KACAC,aAAA,KACAprE,SAAA,EACAqrE,kBAAA,GACAC,kBAAA,GACAC,0BAAA,GACArkD,WAAA,SACAqgC,kBAAA,GAEAptD,OAAA2sB,MAAAC,eAAAC,UAAA,GAEA69B,gBAAA0I,qBAAApzD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QAAA,GAAA3E,KAAA,SAAAnE,MAEAO,OAAAqzD,UAAA1yD,QAAA,SAAAA,CAAAlB,KAAA6zD,UAAA,CAAA3E,OAAA,OACA3uD,OAAAqzD,UAAA4J,QAAA,CACAtO,QAAA,EACArpB,YAAAznC,aAAAiC,mBAAA,OACAoF,IAAA,IAEAmI,WAAA,WACArN,OAAAoD,aAAAM,aAAA8sE,OAAA3qE,SAAA,GACA,MAIA7F,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAA8sE,OAAAxwE,OAAA4sB,eAAAS,YAAAmjD,QAGAxwE,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAmjD,OAAAxwE,OAAAoD,aAAAM,aAAA8sE,QAGAxwE,OAAAqJ,IAAA,kBAAA,SAAAC,MAAAqkB,MAEA3tB,OAAA2D,YAAAgqB,KAAAC,UAGA5tB,OAAA2D,YAAA,SAAAiqB,QAEA,IAKAE,GALAlN,aAAAY,uBAKAsM,GAAA,eAHA9tB,OAAAoD,aAAAM,aAAA8sE,OAAApjB,iBACA,iBAAAptD,OAAAoD,aAAAM,aAAA8sE,OAAAzjD,YAGA,eAAA/sB,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACA,yBAAAvI,OAAAoD,aAAAM,aAAA8sE,OAAAE,OACA,4BAAA1wE,OAAAoD,aAAAM,aAAA8sE,OAAAG,QACA,+BAAA3wE,OAAAoD,aAAAM,aAAA8sE,OAAAI,WACA,8BAAA5wE,OAAAoD,aAAAM,aAAA8sE,OAAAK,UACA,2BAAA7wE,OAAAoD,aAAAM,aAAA8sE,OAAAM,OACA,uBAAA9wE,OAAAoD,aAAAM,aAAA8sE,OAAAO,KACA,4BAAA/wE,OAAAoD,aAAAM,aAAA8sE,OAAAQ,UACA,iBAAAhxE,OAAAiP,aAAAG,UACA,eAAApP,OAAAiP,aAAAM,QACA,iBAAAvP,OAAAoD,aAAAM,aAAA8sE,OAAA3qE,SACA,yBAAA7F,OAAAoD,aAAAM,aAAA8sE,OAAAU,kBACA,yBAAAlxE,OAAAoD,aAAAM,aAAA8sE,OAAAW,kBACA,+BAAAnxE,OAAAoD,aAAAM,aAAA8sE,OAAAS,aACA,iCAAAjxE,OAAAoD,aAAAM,aAAA8sE,OAAAY,0BAEAxjD,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,SCx+CA9wB,QAAAC,OAAA,cAAA,CAAA,eAAA,oBAAA,oBACAC,OAAA,CAAA,iBAAA,mBAAA,SAAAC,eAAAG,kBAEAH,eACAK,KAAA,yBACA,CACAC,YAAAH,iBAAAI,YAAA,kBACAC,WAAA,qBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,2BAKAP,KAAA,0BACA,CACAC,YAAAH,iBAAAI,YAAA,mBACAC,WAAA,sBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8BAMAJ,WAAA,wBAAA,CAAA,SAAA,SAAAqC,qBAGAA,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAM,eAAA1D,OAAAoD,aAAAM,aAAA,QAGA/F,WAAA,qBAAA,CAAA,SAAA,8BAAA,UAAA,YAAA,eAAA,SAAAqC,OAAAqxE,4BAAA1wE,QAAAiT,UAAA/V,2BAIAmC,OAAAsX,MAAA,GACAtX,OAAAsX,MAAAg6D,eAAA,GACAtxE,OAAAsX,MAAAi6D,sBAAA,CACA55D,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAwtC,SAAA1yC,KAAAoF,SACAD,SAAAnF,KAAAmF,SAAAutC,SAAA,IACArlD,OAAA0I,SAAAoP,SAAA8F,YACA5d,OAAAsN,UAEA2K,QAAA,CACA,CACAC,MAAA,uBACAzH,MAAA5S,aAAAiC,mBAAA,cACAqY,MAAA,IACA5F,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAzH,MAAA5S,aAAAiC,mBAAA,YACAyS,WAAA,CAAA6F,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+BACAN,MAAA,KAGAO,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAAk6D,mBAAA,WAEAxxE,OAAAsX,MAAAm6D,iBAAA,IAAAn6D,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAAO,OAAAwB,QAAAkwE,iBAGA1xE,OAAAsX,MAAAm6D,iBAAAp4D,OACArZ,OAAAsX,MAAAg6D,eAAA54D,WAAAjZ,KAAAO,OAAAsX,MAAAm6D,iBAAAhyE,SAGAO,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,qBACAsC,OAAAoD,aAAAM,aAAA,CACAqC,QAAA,IACA2rE,eAAA,CACA7rE,SAAA,IAGA7F,OAAAwB,QAAAkwE,iBAAA1xE,OAAAwB,QAAAkwE,eAAA,KAGA1xE,OAAAmV,QAAAxR,YAAA,WAEA3D,OAAAuQ,WAAAO,OACA9Q,OAAA6gD,UAAA,uBACA7gD,OAAA8gD,SAAA,EACAuwB,4BAAAM,mBAAA3xE,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAvI,OAAAoD,aAAAM,aAAAguE,eAAA7rE,SACA7F,OAAAiP,aAAAG,UACApP,OAAAiP,aAAAM,SAAA3L,KAAA,SAAAnE,MAEA,IAAAA,KAAAJ,QAEAW,OAAAuQ,WAAAU,cAAApT,aAAAiC,mBAAA,mBAEAE,OAAAwB,QAAAkwE,eAAAjyE,KACAzC,QAAAmP,QAAAnM,OAAAwB,QAAAkwE,eAAA,SAAA5/D,SAEAA,QAAA8/D,qBAAAjxE,QAAA,OAAAA,CAAAmR,QAAA+/D,YAAA,gBAEA7xE,OAAAsX,MAAAk6D,2BAIA7zE,WAAA,6BAAA,CAAA,SAAA,YAAA,kBAAA,UAAA,kBAAA,SAAAqC,OAAA4T,UAAA82C,gBAAA/pD,QAAA7C,8BAGA,IAAAD,aAAAC,gBAAAC,gCAAA,sBACAiC,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,qBACAsC,OAAAoD,aAAAM,aAAA,CACAqC,QAAA,IACA2rE,eAAA,CACA7rE,SAAA,IAGA7F,OAAA2sB,MAAAC,eAAAC,UAAA,GACA69B,gBAAA0I,qBAAApzD,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QAAA,GAAA3E,KAAA,SAAAnE,MAEAO,OAAAqzD,UAAA1yD,QAAA,SAAAA,CAAAlB,KAAA6zD,UAAA,CAAA3E,OAAA,OACA3uD,OAAAqzD,UAAA4J,QAAA,CACAtO,QAAA,EACArpB,YAAAznC,aAAAiC,mBAAA,OACAoF,IAAA,IAEAlF,OAAAoD,aAAAM,aAAAguE,eAAA7rE,SAAA,KAIA7F,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAguE,eAAA1xE,OAAA4sB,eAAAO,YAAAtJ,SACA7jB,OAAAiP,aAAAjP,OAAA4sB,eAAAO,YAAAvhB,MAGA5L,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAxJ,SAAA7jB,OAAAoD,aAAAM,aAAAguE,eACA1xE,OAAA4sB,eAAAS,YAAAzhB,KAAA5L,OAAAiP,iBAGAtR,WAAA,sBAAA,CAAA,SAAA,+BAAA,UAAA,YAAA,eAAA,SAAAqC,OAAA8xE,6BAAAnxE,QAAAiT,UAAA/V,2BAIAmC,OAAAsX,MAAA,GACAtX,OAAAsX,MAAAy6D,oBAAA,GACA/xE,OAAAsX,MAAA06D,2BAAA,CACAr6D,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAwtC,SAAA1yC,KAAAoF,SACAD,SAAAnF,KAAAmF,SAAAutC,SAAA,IACArlD,OAAA0I,SAAAoP,SAAA8F,YACA5d,OAAAsN,UAEA2K,QAAA,CACA,CACAC,MAAA,uBACAzH,MAAA5S,aAAAiC,mBAAA,cACAyS,WAAA,CAAA6F,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+BACAN,MAAA,KAGAO,WAAA,IAAApB,MAAA7X,KAAAkZ,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAjK,YAAA,EACAkK,WAAA,MACAC,UAAA,GAGAlZ,OAAAsX,MAAA26D,wBAAA,WAEAjyE,OAAAsX,MAAA46D,sBAAA,IAAA56D,MAAA7X,KAAAkZ,WAAA,CACAlZ,KAAAO,OAAAwB,QAAA2wE,kBAGAnyE,OAAAsX,MAAA46D,sBAAA74D,OACArZ,OAAAsX,MAAAy6D,oBAAAr5D,WAAAjZ,KAAAO,OAAAsX,MAAA46D,sBAAAzyE,SAGAO,OAAAuB,WAAA,WAEAvB,OAAAoD,aAAAG,aAAA,EACAvD,OAAAoD,aAAAI,gBAAA,GACAxD,OAAAoD,aAAAK,SAAAmQ,UAAAlW,YAAA,qBACAsC,OAAAoD,aAAAM,aAAA,CACAqC,QAAA,IACAosE,gBAAA,IAEAnyE,OAAAwB,QAAA2wE,kBAAAnyE,OAAAwB,QAAA2wE,gBAAA,KAGAnyE,OAAAmV,QAAAxR,YAAA,WAEA3D,OAAAuQ,WAAAO,OACA9Q,OAAA6gD,UAAA,uBACA7gD,OAAA8gD,SAAA,EACAgxB,6BAAAM,oBAAApyE,OAAAwB,QAAAE,QAAA6D,qBAAAgD,QACAvI,OAAAiP,aAAAG,UACApP,OAAAiP,aAAAM,SAAA3L,KAAA,SAAAnE,MAEA,IAAAA,KAAAJ,QAEAW,OAAAuQ,WAAAU,cAAApT,aAAAiC,mBAAA,oBAEAE,OAAAwB,QAAA2wE,gBAAA1yE,KACAzC,QAAAmP,QAAAnM,OAAAwB,QAAA2wE,gBAAA,SAAArgE,SAEAA,QAAA8/D,qBAAAjxE,QAAA,OAAAA,CAAAmR,QAAA+/D,YAAA,gBAEA7xE,OAAAsX,MAAA26D,gCAMAt0E,WAAA,8BAAA,CAAA,SAAA,SAAAqC,qBAGAA,OAAAuB,WAAA,WAEAvB,OAAA2sB,MAAAC,eAAAC,UAAA,IAGA7sB,OAAA2sB,MAAAC,eAAA5sB,OAAA2sB,MAAAC,gBAAA,GACA5sB,OAAA2sB,MAAAC,eAAAM,qBAAA,WAEAltB,OAAAoD,aAAAM,aAAAyuE,gBAAAnyE,OAAA4sB,eAAAO,YAAAtJ,SACA7jB,OAAAiP,aAAAjP,OAAA4sB,eAAAO,YAAAvhB,MAGA5L,OAAA2sB,MAAAC,eAAAQ,mBAAA,WAEAptB,OAAA4sB,eAAAS,YAAAxJ,SAAA7jB,OAAAoD,aAAAM,aAAAyuE,gBACAnyE,OAAA4sB,eAAAS,YAAAzhB,KAAA5L,OAAAiP,iBC/RAjS,QAAAC,OAAA,uBAAA,IlB4BAD,QAAAC,OAAA,YAAA,IASAkB,QAAA,OAAA,CAAA,QAAA,SAAA8B,oBAIA,MAAA,CAQAd,IAAA,SAAAiC,IAAA3B,MAEA,OAEAQ,WAFAoC,IAAA5C,KAEA,CACAmT,OAAA,MACAxR,IAAAA,KAIA,CACAwR,OAAA,MACAxR,IAAAA,IAAA,IAAA3B,QAWA4yE,KAAA,SAAAjxE,IAAA3B,MAEA,OAAAQ,MAAA,CACA2S,OAAA,OACAxR,IAAAA,IACA3B,KAAAA,KACAjB,QAAA,CACA8zE,eAAA,2BAOAC,QAAA,aACA,CAAA,QAAA,KAAA,UAAA,sBACA,SAAAtyE,MAAA5B,GAAAkC,QAAAiyE,qBAEA,SAAAC,WAAA//D,SAAAggE,gBAAAC,gBAEA,IAAA1mE,UACA+qC,SAAA34C,GAAA6uC,QA8CA,OArCAjtC,MAAA,CACA2S,OAAAF,SAAAE,QAAA,MACAxR,IAAAsR,SAAAtR,IACA3B,KAAAiT,SAAAjT,KACAoT,OAAAH,SAAAG,SAEAjP,KAAA,SAAAnE,KAAAD,OAAAhB,QAAAtB,SAEA+O,UAAA,IAAA+G,0BAAAvT,KAAAA,OAEA8T,WAEAhT,QAAAsF,SAAA+sE,OAAA3mE,UAAAuH,aAIAvH,UAAAgH,SAEAy/D,iBACAF,oBAAAK,cAAAngE,SAAAzG,UAAAzM,OAAAhB,QAAAtB,QACA85C,SAAAp5C,QAAAqO,UAAAzM,OAAAhB,QAAAtB,SAGAy1E,gBACAH,oBAAAM,cAAApgE,SAAAzG,UAAAzM,OAAAhB,QAAAtB,UAMA61E,MAAA,SAAAtzE,KAAAD,OAAAhB,QAAAtB,QAEAy1E,gBACAH,oBAAAQ,YAAAtgE,SAAAjT,KAAAA,KAAAD,OAAAhB,QAAAtB,UAIA85C,SAAA5J,QAGA,MAAA,CACAuK,0BAAA,SAAAjlC,UAEA,OAAA+/D,WAAA//D,UAAA,GAAA,IAEAugE,2CAAA,SAAAvgE,UAEA,OAAA+/D,WAAA//D,UAAA,GAAA,IAEAykC,QAAA,SAAAzkC,UAEA,OAAA+/D,WAAA//D,UAAA,GAAA,IAEAwgE,yBAAA,SAAAxgE,UAEA,OAAA+/D,WAAA//D,UAAA,GAAA,QmB7JA1V,QAAAC,OAAA,iBAAA,IAAAkB,QAAA,gBAAA,CAAA,kBAAA,SAAAL,iBACA,IAAAomB,gBAAA,GACAgjC,WAAA,GAkCA,MAAA,CACAhjC,gBAjCA,SAAArmB,cAcA,OAbAb,QAAAkF,yBAAArE,gBACAA,aAAAC,gBAAAC,gCAAA,+BAGA,IAAAmmB,gBAAA7kB,SACA6kB,gBAAA,GAAArmB,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,oBACAokB,gBAAA,GAAArmB,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,oBACAokB,gBAAA,GAAArmB,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,oBACAokB,gBAAA,GAAArmB,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,oBACAokB,gBAAA,GAAArmB,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,oBACAokB,gBAAA,GAAArmB,aAAAq0D,0BAAAr0D,aAAAiC,mBAAA,qBAGAokB,iBAoBAgjC,WAjBA,SAAArpD,cAaA,OAZAb,QAAAkF,yBAAArE,gBACAA,aAAAC,gBAAAC,gCAAA,+BAGA,IAAAmpD,WAAA7nD,SACA6nD,WAAA,GAAA,CAAAp/C,IAAA,EAAAlC,MAAA/H,aAAAiC,mBAAA,YACAonD,WAAA,GAAA,CAAAp/C,IAAA,EAAAlC,MAAA/H,aAAAiC,mBAAA,SACAonD,WAAA,GAAA,CAAAp/C,IAAA,EAAAlC,MAAA/H,aAAAiC,mBAAA,WACAonD,WAAA,GAAA,CAAAp/C,IAAA,EAAAlC,MAAA/H,aAAAiC,mBAAA,UACAonD,WAAA,GAAA,CAAAp/C,IAAA,EAAAlC,MAAA/H,aAAAiC,mBAAA,UAGAonD,gBC9BAlqD,QAAAC,OAAA,aAAA,IAAAs1E,QAAA,UAAA,WASA,MAAA,CACAY,IAPA,MAQAC,SAPA,WAQAC,SAPA,WAQAC,OAPA,SAQAC,UAPA,eASAhB,QAAA,eAAA,WAoBA,MAAA,CACAvlB,gBAnBA,EAoBA7jC,eAnBA,EAoBA28C,iBAnBA,EAoBA/I,UAnBA,EAoBA3E,UAnBA,EAoBAob,WAnBA,EAoBAva,YAnBA,EAoBAnrD,6BAnBA,EAoBAC,sBAnBA,EAqBAyzD,eAnBA,GAoBApM,gBAnBA,GAoBAqe,qCAnBA,GAoBA/tB,0BAnBA,GAoBA3nC,sBAnBA,GAoBA0yD,gCAnBA,GAoBAiD,yBAnBA,GAoBA/sD,gBAnBA,MAsBA4rD,QAAA,oBAAA,CAAA,eAAA,SAAAjyE,cAEA,IACA6yE,IAAA,CADA7yE,aACA0sD,gBADA1sD,aACA6oB,eADA7oB,aACAwlE,iBADAxlE,aACAy8D,UADAz8D,aACA83D,UADA93D,aACAkzE,WADAlzE,aAEA24D,YAFA34D,aAEAwN,6BAFAxN,aAEAyN,sBAFAzN,aAEAyd,sBAFAzd,aAGAkhE,eAHAlhE,aAGA80D,gBAHA90D,aAGAmzE,qCAHAnzE,aAGAolD,0BAHAplD,aAIAmwE,gCAJAnwE,aAIAozE,0BACAC,QAAA,CALArzE,aAKA0sD,gBALA1sD,aAKAwlE,iBALAxlE,aAKAwN,6BALAxN,aAKAyN,uBACA0zC,SAAA,CANAnhD,aAMAwN,6BANAxN,aAMAyN,uBAaA,MAAA,CACAolE,IAAAA,IACAQ,QAAAA,QACAC,OAfA,CAPAtzE,aAOAmwE,gCAPAnwE,aAOAozE,0BAgBAG,UAfA,CARAvzE,aAQA6oB,gBAgBAs4B,SAAAA,SACAqyB,UAhBA,CATAxzE,aASAwlE,iBATAxlE,aASAy8D,UATAz8D,aASA83D,UATA93D,aASAkzE,WATAlzE,aASA24D,YATA34D,aASAkhE,gBAiBAuS,SAhBAZ,IAiBAa,UAhBAb,IAiBAvlB,eAhBA,CAZAttD,aAYA0sD,iBAiBAc,gBAhBA,CAbAxtD,aAaAwN,6BAbAxN,aAaAyN,uBAiBAkmE,cAhBA,CAdA3zE,aAcAyN,uBAiBAgkD,eAhBA,CAfAzxD,aAeAy8D,UAfAz8D,aAeA83D,UAfA93D,aAeA24D,aAiBAjH,eAhBA,CAhBA1xD,aAgBAwlE,kBAiBA7T,gBAhBA,CAjBA3xD,aAiBAkhE,gBAiBA0S,YAhBA,CAlBA5zE,aAkBAqmB,qBAkBA4rD,QAAA,qBAAA,CAAA,eAAA,SAAAjyE,cAEA,MAAA,CACAqH,wBAAA,SAAAwsE,YAAAltE,WAAAE,WAAAE,SAAAE,YAAAE,SAAA2sE,UAEA,OAAAD,cAAA7zE,aAAAwlE,kBACAqO,cAAA7zE,aAAAy8D,WACAoX,cAAA7zE,aAAA83D,WACA+b,cAAA7zE,aAAAkzE,YACAW,cAAA7zE,aAAA24D,YAJA9xD,WAKAgtE,cAAA7zE,aAAAwN,8BACAqmE,cAAA7zE,aAAAyN,sBADAtG,SAEA0sE,cAAA7zE,aAAAkhE,eAAAr6D,YAAA,OAAAitE,SAAAhS,iBAAA,EAAAgS,SAAAhS,gBACA+R,cAAA7zE,aAAA80D,gBAAAjuD,WACAgtE,cAAA7zE,aAAAmwE,iCACA0D,cAAA7zE,aAAAozE,0BADAzsE,YAAAM,iBC3GAvK,QAAAC,OAAA,aAAA,IAWAD,QAAAC,OAAA,cAAAkB,QAAA,sBAAA,CAAA,aAAA,SAAAC,yBAEA,SAAAi2E,OAAA/qE,MAAAoJ,SAAAzG,UAAAzM,OAAAhB,QAAAtB,QAQAkB,WAAAoc,WAAA,SAAAlR,MAPA,CACAoJ,SAAAA,SACAzG,UAAAA,UACAzM,OAAAA,OACAhB,QAAAA,QACAtB,OAAAA,SAIA,MAAA,CACA81E,YAAA,SAAAtgE,SAAAzG,UAAAzM,OAAAhB,QAAAtB,QACAm3E,OAAA,QAAA3hE,SAAAzG,UAAAzM,OAAAhB,QAAAtB,SAEA41E,cAAA,SAAApgE,SAAAzG,UAAAzM,OAAAhB,QAAAtB,QACAm3E,OAAA,SAAA3hE,SAAAzG,UAAAzM,OAAAhB,QAAAtB,SAEA21E,cAAA,SAAAngE,SAAAzG,UAAAzM,OAAAhB,QAAAtB,QACAm3E,OAAA,UAAA3hE,SAAAzG,UAAAzM,OAAAhB,QAAAtB,aCxCAF,QAAAC,OAAA,eAAA,IACAkB,QAAA,UAAA,CAAA,WAAA,SAAAm2E,uBAGA,MAAA,CACAC,YAFA,OAKAp2E,QAAA,WAAA,CAAA,QAAA,KAAA,SAAA8B,MAAA5B,iBAEA,MAAA,MCHArB,QAAAC,OAAA,gBAAA,CAAA,cAUAD,QAAAC,OAAA,iBAAAkB,QAAA,kBAAA,CAAA,KAAA,aAAA,YAAA,YAAA,SAAAE,GAAAD,WAAAgC,UAAA4mB,WAEA,SAAArkB,SAEAvE,WAAA0E,gBAAA,EAGA,MAAA,CAEAvE,QAAA,SAAArB,QAMA,IAIA6kB,MAkBA,OA1BAiF,UAAAitB,OAAA71C,WAAAo2E,gBACAt3E,OAAAsB,QAAAtB,OAAAsB,SAAA,QAGA6D,IAAAY,QAAAC,MAAA,iBAIA6e,MAAA9e,QAAAC,MAAA,gBACAhG,OAAAsB,QAAA0B,eAAA6hB,MAEA9e,QAAAC,MAAA,eAAA6e,MAAA,CAAAE,QAAA7jB,WAAA8jB,UACA,EAAA9jB,WAAA8jB,UAEA9jB,WAAAo2E,eAAAxtD,UAAA,WAEArkB,UACAvE,WAAA8jB,WAIA,MAAA9hB,UAAAmsB,SACA,IAAAnsB,UAAAmsB,OAAAhqB,OAAA,2EACAI,SAGAzF,QAAAmB,GAAAb,KAAAN,aAcAF,QAAAC,OAAA,iBAAAkB,QAAA,iBAAA,CAAA,KAAA,aAAA,aAAA,YAAA,aAAA,SAAAE,GAAAD,WAAA24C,WAAA32C,UAAAq0E,YAGA,MAAA,CACAn1E,gBAAA,WAEA,IAAA03C,SAAA34C,GAAA6uC,QAaA,YAVA7qC,IAFAY,QAAAC,MAAA,iBAIA9E,WAAAkB,iBAAA,EACA03C,SAAAj3C,OAAA,yCAIA3B,WAAAkB,iBAAA,EACA03C,SAAAp5C,QAAA,uCAEAo5C,SAAA5J,SAEAvrB,MAAA,SAAAljB,OAAAwD,SAAAgf,gBAEA,IAAA61B,SAAA34C,GAAA6uC,QAMA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,eACA3B,KATA,CACAi1E,UAAA/1E,QAAA,GACAg2E,gBAAAxyE,UAAA,GACAyyE,kBAAAzzD,gBAAA,MA+BA,OAtBA41B,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEArB,WAAAK,UAAAE,OAAAc,KAAAgU,KAAAohE,mBACAz2E,WAAAK,UAAAG,QAAAa,KAAAgU,KAAAqhE,gBACA12E,WAAAK,UAAAI,SAAAY,KAAAgU,KAAAshE,iBACA32E,WAAAK,UAAAK,mBAAAW,KAAAgU,KAAAuhE,mBACA52E,WAAAK,UAAAM,oBAAAU,KAAAgU,KAAAwhE,gBACA72E,WAAAK,UAAAO,qBAAAS,KAAAgU,KAAAyhE,iBAGAT,WAAAU,WAAA,mBAAA,CAAAC,SAAA,cAAAC,MAAA51E,KAAAgU,KAAAvO,MACA8xC,SAAAp5C,QAAA6B,KAAAgU,OAEA,SAAAhU,MAGAg1E,WAAAU,WAAA,eAAA,CAAAC,SAAA,cAAAC,MAAA51E,KAAAgN,OAAA,IAAA,qCACAuqC,SAAAj3C,OAAAN,KAAA4T,iBAIA2jC,SAAA5J,SAEAvqC,UAAA,WAEA,QAAAR,IAAAY,QAAAC,MAAA,gBAEA,OAAAD,QAAAC,MAAA,gBAGA9C,UAAAkC,KAAA,UAaAtF,QAAAC,OAAA,iBACAkB,QAAA,aAAA,CAAA,KAAA,aAAA,iBAAA,aAAA,SAAAE,GAAAD,WAAA8B,eAAA62C,YAEA,IAAAr1C,QAEA,SAAA4zE,2BAAA71E,MAEAA,KAAAgU,KAAA8hE,SAAA91E,KAAAgU,KAAA8hE,QAAAhwE,sBAAA9F,KAAAgU,KAAA8hE,QAAAhwE,qBAAAqQ,YAKAnW,KAAAgU,KAAA8hE,QAAAhwE,qBAAAqQ,WAAAI,QAAA+1B,OAAA,SAAAp2B,MAEA,OAAAlW,KAAAgU,KAAA8hE,QAAAhwE,qBAAAqQ,WAAAO,SAAAmkC,IAAA,CAAArkC,UAAAN,KAAAzQ,QAIA,SAAAswE,uBAAA1zD,gBAEA,IAAAk1B,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,qBAAA0gB,eACAjP,OAAA,KAUA,OARAkkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEA61E,2BAAA71E,MACAiC,QAAAjC,KAAAgU,KAAA8hE,QACAv+B,SAAAp5C,QAAA8D,WAGAs1C,SAAA5J,QAGA,SAAAqoC,gCAAA1zD,eAAAtgB,SACA,IAAAu1C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,4BACA3B,KAAA,CACAi2E,WAAAj0E,QACAugB,MAAAD,kBAUA,OAPAg1B,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACA61E,2BAAA71E,MACAiC,QAAAjC,KAAAgU,KAAA8hE,QACAv+B,SAAAp5C,QAAA8D,WAGAs1C,SAAA5J,QA4BA,MAAA,CACA1qC,wBAAA,WAEA,IAAAqf,MAAA9e,QAAAC,MAAA,gBAEA,QAAAb,IAAA0f,MAOA,OAFA3jB,WAAAkB,iBAAA,EAEAyiB,MALA3jB,WAAAkB,iBAAA,GAOAujB,kBAAA,WACA,OAAA5f,QAAAC,MAAA,iBAEAoC,wBAAA,WACA,OAAArC,QAAAC,MAAA,gBAEAmf,gBAAA,SAAAP,MAEA,IAAAk1B,SAAA34C,GAAA6uC,QAIA,OAHAsoC,uBAAA1zD,MAAAle,KAAA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,QAEAu3C,SAAA5J,SAEAuc,oBAAA,SAAA5nC,MAAAtgB,SACA,IAAAu1C,SAAA34C,GAAA6uC,QAIA,OAHAuoC,gCAAA1zD,MAAAtgB,SAAAmC,KAAA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,QAEAu3C,SAAA5J,SAEAooC,uBAAAA,uBACAC,gCAAAA,gCACAn7D,wBAAA,SAAAwH,KAAArgB,SAEA,IAAAu1C,SAAA34C,GAAA6uC,QAIA,OApEA,SAAAprB,KAAArgB,gBAEA,IAAAu1C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,+BAAA0gB,KAAA,IAAArgB,eACAoR,OAAA,KAUA,OARAkkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEA61E,2BAAA71E,MACAiC,QAAAjC,KAAAgU,KAAA8hE,QACAv+B,SAAAp5C,QAAA8D,WAGAs1C,SAAA5J,QAgDAuoC,CAAA7zD,KAAArgB,SAAAmC,KAAA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,QAEAu3C,SAAA5J,SAEAhpB,oBAAA,SAAA1iB,gBAEA,IAAAs1C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,8BAAAM,eAAA4hB,KACAzQ,OAAA,KAaA,OAVAkkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,OAEA,SAAAhU,MAEAu3C,SAAAj3C,OAAAN,KAAAgN,UAGAuqC,SAAA5J,SAEA9oB,cAAA,SAAA5iB,gBAEA,IAAAs1C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,wBACA3B,KAAAiC,iBAaA,OAVAq1C,WAAAm8B,yBAAAj8B,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,OAEA,SAAAhU,MAEAu3C,SAAAj3C,OAAAN,KAAAgN,UAGAuqC,SAAA5J,SAEAroB,2BAAA,SAAArjB,gBAEA,IAAAs1C,SAAA34C,GAAA6uC,MAAAxrC,gBACAu1C,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,qCAAAM,eAAA4hB,KACAzQ,OAAA,KAaA,OAVAkkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,OAEA,SAAAhU,MAEAu3C,SAAAj3C,OAAAN,KAAAgN,UAGAuqC,SAAA5J,SAEAnoB,kCAAA,SAAAvjB,gBAEA,IAAAs1C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,4CAAAM,eAAA4hB,KAAA,IAAA5hB,eAAA2hB,YACAxQ,OAAA,KAaA,OAVAkkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,OAEA,SAAAhU,MAEAu3C,SAAAj3C,OAAAN,KAAAgN,UAGAuqC,SAAA5J,SAEAjoB,qBAAA,SAAAzjB,SAEA,IAAAs1C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,+BACA3B,KAAAiC,UAcA,OAXAq1C,WAAAk8B,2CAAAh8B,gBAAArzC,KACA,SAAAnE,MAEAiC,QAAAjC,KAAAgU,KACAujC,SAAAp5C,QAAA8D,UAEA,SAAAjC,MAEAu3C,SAAAj3C,OAAAN,KAAAgN,UAGAuqC,SAAA5J,SAEAnqB,wBAAA,SAAA+jC,gBAEA,IAAAhQ,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,sCACAyR,OAAA,CACA+iE,UAAA5uB,kBAcA,OAVAjQ,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,OAEA,SAAAA,MAEAu3C,SAAAj3C,OAAAN,KAAA4T,iBAGA2jC,SAAA5J,SAEAqc,YAAA,SAAA/nD,QAAAm0E,OAEA,IAAA7+B,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,sBACA3B,KAAAiC,UA8BA,OA3BAm0E,MAEA9+B,WAAAI,QAAAF,gBAaAF,WAAAY,0BAAAV,iBAbArzC,KACA,SAAAnE,MAEAiC,QAAAjC,KAAAgU,KAAA8hE,QACAv+B,SAAAp5C,QAAA6B,KAAAgU,OAEA,SAAAhU,MAEAu3C,SAAAj3C,OAAAN,KAAAgN,UAiBAuqC,SAAA5J,SAEAjrB,2BAAA,SAAAI,WAAApgB,SAAA2zE,gBAEA,IAAA9+B,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,qCACA3B,KAAA,CACAs2E,WAAAxzD,WACAgB,SAAAphB,SACA6zE,QAAAF,kBAcA,OAVA/+B,WAAAm8B,yBAAAj8B,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,OAEA,SAAAhU,MAEAu3C,SAAAp5C,QAAA6B,KAAAgN,UAGAuqC,SAAA5J,SAEAka,yBAAA,SAAA5lD,UAEA,IAEAu0E,SAAA,IAAAtrE,KAAAA,KAAAM,MAAAvJ,SAAAw0E,gBACAC,UAAA,IAAAxrE,MAAAS,UAEA,OAAAmsB,KAAA4kB,OADA85B,SAAAE,UAJA,QAOAnxE,WAnQA,WAEA,OAAAtD,SAkQAya,eAAA,WACA,IAAA66B,SAAA34C,GAAA6uC,QACA9wB,MAAAzJ,KAAA3N,aACAoxE,OAAAzjE,KAAAjQ,0BACA2zE,SAAA1jE,KAAAkQ,oBAYA,OATA7lB,QAAAkF,yBAAAka,QAGApf,QAAAkF,yBAAAk0E,SAAAp5E,QAAAkF,yBAAAm0E,UAHAr/B,SAAAp5C,UAIA+U,KAAAg3C,oBAAAysB,OAAAC,UAAAzyE,KAAA,WAAAozC,SAAAp5C,YAKAo5C,SAAA5J,aC3eApwC,QAAAC,OAAA,kBAAA,IASAD,QAAAC,OAAA,mBACAwU,UAAA,cAAA,CAAA,aAAA,SAAArT,YAEA,MAAA,CACAsT,SAAA,IACAG,MAAA,CACAhS,KAAA,IACAy2E,YAAA,IACAC,UAAA,IACAC,UAAA,KAEAtrE,SAAA,EACAurE,YAAA,EACA7kE,KAAA,SAAAC,MAAAC,QAAAC,OAEA/U,QAAAkF,yBAAA6P,MAAAykE,WAEAzkE,MAAAykE,WAAA,EAGAzkE,MAAAykE,UAAA3kE,MAAA6kE,MAAA3kE,MAAAykE,WAGA3kE,MAAA8kE,YAAA,GACA5kE,MAAAoG,QACAtG,MAAA8kE,YAAAx+D,MAAApG,MAAAoG,OACApG,MAAAjD,SACA+C,MAAA8kE,YAAA7nE,OAAAiD,MAAAjD,SAIAnR,WAAA,CAAA,SAAA,WAAA,SAAA,SAAAqC,OAAA42E,SAAAC,QAGA72E,OAAA82E,UAAA,SAAApI,QAEA,IAAAA,SAAAmI,OAAAL,YAKAx5E,QAAAkF,yBAAAlC,OAAAs2E,gBAEAt2E,OAAAs2E,cAGAt2E,OAAAH,MAAA,MAGA4Y,SAAA,yTAGAhH,UAAA,WAAA,CAAA,WAEA,MAAA,CACAC,SAAA,IACAC,QAAA,UACAC,KAAA,SAAAC,MAAAssC,KAAApsC,MAAApU,YAEAA,WAAAqU,YAAA9T,KAAA,SAAA+T,YAEA,MAAA,GAAAA,aAGAtU,WAAAwU,SAAAjU,KAAA,SAAAkU,WAEA,OAAAgC,SAAAhC,UAAA,WAKAX,UAAA,aAAA,CAAA,WAEA,MAAA,CACAC,SAAA,IACAC,QAAA,UACAC,KAAA,SAAAC,MAAAssC,KAAApsC,MAAApU,YAEAA,WAAAqU,YAAA9T,KAAA,SAAA+T,YAEA,MAAA,GAAAA,aAGAtU,WAAAwU,SAAAjU,KAAA,SAAAkU,WAEA,OAAAygC,WAAAzgC,kBAKAX,UAAA,YAAA,WAEA,MAAA,CACAE,QAAA,UACAC,KAAA,SAAAC,MAAAC,QAAAQ,KAAAykE,aAaAA,YAAA5kE,SAAAjU,KAXA,SAAAwS,MAEA,IAAAsmE,iBAAAtmE,KAAAxF,QAAA,UAAA,IAMA,OALA8rE,mBAAAtmE,OAEAqmE,YAAAE,cAAAD,kBACAD,YAAAG,WAEAF,uBAOAvlE,UAAA,cAAA,CAAA,WAAA,SAAAgyB,UAEA,MAAA,CACA/xB,SAAA,IACAxG,SAAA,EACA0G,KAAA,SAAAC,MAAAslE,IAAAplE,OAEAF,MAAAxB,OAAA0B,MAAAqlE,QAAA,SAAA9Y,MAEA6Y,IAAA7Y,KAAAA,MACA76B,SAAA0zC,IAAAE,WAAA5zC,CAAA5xB,cAKAJ,UAAA,QAAA,CAAA,UAAA,SAAA9Q,sBAGA,IAAA22E,cAAA,qCAsHA,MAAA,CACA5lE,SAAA,IACAC,QAAA,UACAC,KAvHA,SAAAC,MAAAixB,GAAA/wB,MAAAglE,aAEA,IAGAQ,eAHA/6C,IAAAqW,WAAA9gC,MAAAyqB,KAAA,GACAg7C,UAAA3kC,WAAA9gC,MAAAylE,WAAA,GACAC,OAAA1lE,MAAA0lE,QAAA,GAGA,SAAAC,eAAA5d,QAYA,OAAA,KAFAA,QAFA,GAFAA,QAFA,GAFAA,QAAA,IAEAhvD,WAAAtI,QAAA,KAEAs3D,OAAA5uD,QAAA,KAAA,IAEA4uD,QAAAhvD,WAAAtI,QAAA,KAEAs3D,OAAA5uD,QAAA,MAAA,IAEA4uD,QAAAz6D,OACA,IACAy6D,OAGA,SAAA6d,gBAAA/xE,OAUA,IAAA0Q,IAAAshE,cALA,OAHAhyE,MAAA8xE,eAAA9xE,OACAA,MAAAmxE,YAAAc,SAAAjyE,OAAA,GAAA,GAAA6xE,QAOAG,cAPAJ,UASAlhE,IAAAohE,eAFAphE,IAPA1Q,OAWA0Q,IAIA,SAAAwhE,IAGA,IAAAvxE,IADAuxE,IAAA,IACAC,MAAA,KACAC,GAAAzxE,GAAA,GACA0xE,GAAA,EAAA1xE,GAAAlH,OAAA,IAAAkH,GAAA,GAAA,GACA2xE,IAAA,eACA,KAAAA,IAAAC,KAAAH,KAEAA,GAAAA,GAAA9sE,QAAAgtE,IAAA,SAEA,OAAAF,GAAAC,GAfAG,CADA9hE,IAAAu8B,WAAAv8B,KAAA+hE,QAAAT,iBATAL,eAAA3xE,MAuEA,SAAA0yE,cAEA,IAAA1yE,MAAA8xE,eAAAX,YAAAwB,aACAptE,MAAAvF,SAEAmxE,YAAAyB,WAAAb,gBAAA/xE,OACA2xE,eAAAR,YAAAyB,WACAzB,YAAAG,WAOA,OAjFAH,YAAA/kE,YAAA9T,KAAAy5E,iBAwBAZ,YAAA5kE,SAAAjU,KAAA,SAAA0H,OAEAA,MAAA8xE,eAAA9xE,OAaA,KAJAA,MAFA,KAJAA,MAFA5I,QAAAuU,YAAA3L,OAEA,GAIAA,OAAApD,QAAA,KAEA,IAAAoD,MAIAA,OAAApD,QAAA,OAEA,GAAAg6B,KAEA52B,MAAA,KACAmxE,YAAAE,cAAA,IACAF,YAAAG,WACA,MAAAtxE,QAEAA,MAAA,KAIA,IAAA6yE,MAAA1B,YAAAc,SAAAjyE,OAYA,OAXA6yE,OAAAnB,cAAAa,KAAAvyE,OAEA2xE,eAAA,KAAA3xE,MAAA,KAAA6yE,MAAA7yE,MAAAitC,WAAAjtC,QAIAmxE,YAAAE,cAAAU,gBAAAJ,iBACAR,YAAAG,WAGAH,YAAA2B,aAAA,UAAA,GACAnB,iBAcAz0C,GAAA61C,KAAA,OAAAL,aACAx1C,GAAA61C,KAAA,SAAAL,aAEAA,mBASA7mE,UAAA,kBAAA,WAEA,MAAA,CACAC,SAAA,IACAE,KAAA,SAAAC,MAAAC,QAAAC,OAEAF,MAAAxB,OAAA,WAEA,OAAAwB,MAAA6kE,MAAA3kE,MAAA6mE,kBACA,SAAA5sC,WAEA,IAAAA,WAEAl6B,QAAA,GAAAiG,SACAjG,QAAA,GAAAtE,eAQAiE,UAAA,WAAA,CAAA,WAAA,SAAAgyB,UAEA,IAAA83B,MAAA93B,SAAA,2CA6BA,MAAA,CACA/xB,SAAA,IACAE,KA7BA,SAAAC,MAAAixB,GAAAxwB,MAEAT,MAAAnB,MAAA,EAAAmB,MAAAnB,KAAArR,QAEAyjC,GAAA9M,KAAA,CACAC,SAAA,CACA4iD,GAAA,gBAEAx9D,MAAA,CACAy9D,IAAA,CACAC,OAAA,YAEA3iD,QAAA,gBAEArZ,QAAA,CACArM,KAAA,WAEA,OAAAmB,MAAAvE,OAAA,WAEA,OAAAiuD,MAAA1pD,cAWAA,MAAA,CACAnB,KAAA,iBAIAe,UAAA,WAAA,CAAA,SAAA,SAAAunE,QAEA,MAAA,CACArnE,QAAA,UACAD,SAAA,IACAG,MAAA,CACAxN,mBAAA,IACA40E,mBAAA,KAEArnE,KAAA,SAAAC,MAAAssC,KAAApsC,MAAAwU,MAEAA,KAAApU,SAAA8qD,QAAA,SAAA7qD,WAEA,IAAA8mE,eAAAC,aAAAC,aAOAC,cALAxnE,MAAAxN,mBAAAgjD,2BAEA6xB,kBAAA9mE,WAAAA,UAAA/S,QAAAwS,MAAAxN,mBAAAi1E,mBACAH,gBAAA/mE,WAAAA,UAAAzS,MAAA,WAAAyS,UAAAzS,MAAA,UAAAN,QAAAwS,MAAAxN,mBAAAk1E,sBACAH,gBAAAhnE,WAAAA,UAAAzS,MAAA,QAAAyS,UAAAzS,MAAA,OAAAN,QAAAwS,MAAAxN,mBAAAm1E,uBACApnE,WAAAA,UAAAzS,MAAA,kBAAAyS,UAAAzS,MAAA,iBAAAN,QAAAwS,MAAAxN,mBAAAk1E,wBAIAL,kBAAA9mE,WAAA,GAAAA,UAAA/S,QACA85E,gBAAA/mE,YAAA,QAAA+lE,KAAA/lE,YACAgnE,gBAAAhnE,YAAA,KAAA+lE,KAAA/lE,eACAA,YAAA,eAAA+lE,KAAA/lE,aAGAqnE,OAAArnE,UAAA,QACA,QAAA+lE,KAAA/lE,WAAA,EAAA,IACA,QAAA+lE,KAAA/lE,WAAA,EAAA,IACA,KAAA+lE,KAAA/lE,WAAA,EAAA,IACA,eAAA+lE,KAAA/lE,WAAA,EAAA,GAEAsnE,MAAA,EAAAtnE,UAAA/S,OAAA+S,UAAA/S,OAAA,EAAA,GAUA,OATAwS,MAAAonE,mBAAAQ,MAAAC,MAEAR,gBAAAC,cAAAC,cAAAC,cAEA9yD,KAAAmyD,aAAA,OAAA,GAGAnyD,KAAAmyD,aAAA,OAAA,GAEAtmE,iBAKAX,UAAA,QAAA,CAAA,SAAA,SAAAunE,QAEA,MAAA,CACArnE,QAAA,UACAD,SAAA,IACAE,KAAA,SAAAC,MAAAssC,KAAApsC,MAAAwU,MAEA1U,MAAAxB,OAAA,WAEA,OAAAkW,KAAAozD,WAAA38E,QAAAuU,YAAAgV,KAAAgyD,cAAAS,OAAAjnE,MAAApS,MAAAq5E,CAAAnnE,SAAA0U,KAAAgyD,aACA,SAAAqB,cAEArzD,KAAAmyD,aAAA,QAAAkB,qBAKAnoE,UAAA,cAAA,CAAA,YAAA,WAAA,SAAAuV,UAAAtmB,UAEA,MAAA,CACAgR,SAAA,IACAG,MAAA,CACAgoE,WAAA,KAEAphE,SAAA,okBACA7G,KAAA,SAAAC,MAAAssC,KAAApsC,MAAAwU,MAOA,IALA,IAAAxP,MACA+iE,KACAC,QAGArzE,EAAAmL,MAAAgoE,WAAAx6E,OAAA,EAAA,GAAAqH,EAAAA,IAEAmL,MAAAgoE,WAAAnzE,GAAAioD,QACA98C,MAAAgoE,WAAA5d,OAAAv1D,EAAA,GAGAmL,MAAAmoE,OAAA,CAAA3/D,MAAA,IAEAtD,MAAA,WAKAgjE,QAHAA,SAGA/yD,UAAA,WAEAnV,MAAAmoE,OAAA3/D,QAAAxI,MAAAgoE,WAAAx6E,OAAA,EACAwS,MAAAmoE,OAAA3/D,MAAA,IAEAxI,MAAAmoE,OAAA3/D,OACA,SAKAy/D,KAAA,WAEAC,UAEA/yD,UAAAitB,OAAA8lC,SACAA,aAAA13E,IAIAwP,MAAAooE,aAAA,SAAA5/D,OAEAxI,MAAAqoE,mBAEAroE,MAAAmoE,OAAA3/D,MADA,IAAAA,MACAxI,MAAAgoE,WAAAx6E,OAAA,EAEAgb,MAAA,GAGAxI,MAAAsoE,aAAA,SAAA9/D,OAEAxI,MAAAqoE,mBACA7/D,QAAAxI,MAAAgoE,WAAAx6E,OAAA,EACAwS,MAAAmoE,OAAA3/D,MAAA,EAEAxI,MAAAmoE,OAAA3/D,MAAAA,MAAA,GAGAxI,MAAAqoE,iBAAA,WAEAH,UAEAD,OACAp5E,SAAAqW,MAAA,OAIAlF,MAAAxI,IAAA,WAAA,WAEAywE,cAOAroE,UAAA,eAAA,WAEA,MAAA,CACAE,QAAA,UACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAqoE,WAEAA,UAAAjoE,SAAAjU,KAAA,SAAAm8E,YAKA,QAAAh4E,IAAAg4E,WAAA,MAAA,GACA,IAAArD,iBAAA,MAAAjlE,MAAAuoE,aAAAD,WAAAnvE,QAAA,UAAA,IAAAmvE,WAAAnvE,QAAA,gBAAA,IAOA,OANA8rE,mBAAAqD,aAEAD,UAAAnD,cAAAD,kBACAoD,UAAAlD,WAGAF,uBAKAvlE,UAAA,aAAA,CAAA,UAAA,SAAAlR,SAEA,OAAA,SAAAP,QAkBA,OAhBAA,OAAAu6E,qBAAA,WASA,OAPAv6E,OAAAw6E,UAAAjjD,KAAAqJ,IACA3lB,SAAAw/D,KAAAC,aAAAz/D,SAAA0/D,gBAAAD,aACAz/D,SAAAw/D,KAAAG,aAAA3/D,SAAA0/D,gBAAAC,aACA3/D,SAAAw/D,KAAAI,aAAA5/D,SAAA0/D,gBAAAE,aACAx5E,OAAAuN,aAEA5O,OAAA86E,aAAAv6E,QAAAqO,YACA5O,OAAA+6E,YAAAx6E,QAAAy6E,YAEAh7E,OAAAu6E,uBACAv6E,OAAAqQ,OAAA,WAAA,SAAA4qE,UAAAC,WAEAl7E,OAAAu6E,yBAEAv9E,QAAA8U,QAAAvR,SAAAo4E,KAAA,SAAA,WAGA,OADA34E,OAAAu6E,uBACAv6E,OAAAsN,eAIAmE,UAAA,gBAAA,CAAA,WAAA,SAAAgyB,UAEA,OAAA,SAAA5xB,MAAAixB,GAAA/wB,OAEA+wB,GAAAq4C,YAAA13C,SAAA1xB,MAAAusD,KAAA76B,CAAA5xB,YAGAJ,UAAA,YAAA,WASA,MAAA,CACAI,MAAA,CACAupE,UAAA,IACAC,eAAA,KAEAzpE,KAAA,SAAA5R,OAAAm+C,KAAApsC,OAEA1Q,OAAAi6E,eAAA,WAEA,GAAAt7E,OAAAo7E,YAEA,OAAAp7E,OAAAq7E,gBAAA,KAIAr7E,OAAAqJ,IAAA,WAAA,WAEAhI,OAAAi6E,eAAA,WAKA7pE,UAAA,YAAA,WASA,MAAA,CACAI,MAAA,CACA0pE,YAAA,IACAC,eAAA,KAEA5pE,KAAA,SAAA5R,OAAAm+C,KAAApsC,OAGA,IAAA0pE,2BAAAz7E,OAAAqJ,IAAA,uBAAA,SAAAC,MAAAC,KAAAC,SAEAxJ,OAAAu7E,gBAEApqE,QAAAnR,OAAAw7E,gBAAA,qBAEAlyE,MAAAwxD,oBAKA96D,OAAAqJ,IAAA,WAAA,WAEAoyE,mCAKAhqE,UAAA,eAAA,CAAA,WAAA,SAAA/Q,UAEA,MAAA,CACAkR,KAAA,SAAA5R,OAAAm+C,KAAApsC,MAAAwU,MAEA,IAAA5Q,KAAA3V,OAAAoD,aAAAG,aACAwC,QAAA/F,OAAAoD,aAAAI,gBACAC,SAAAzD,OAAAoD,aAAAM,aAAAqC,QAEA/F,OAAAi+C,oBAAAj+C,OAAAqJ,IAAA,uBAAA,SAAAC,MAAAC,KAAAC,SAEA,IAOAkyE,gBACAC,iBANA,EAFAx9B,KAAA3kC,KAAA,uBAAAna,OAAA8+C,KAAA3kC,KAAA,iBAAAna,OAAA8+C,KAAA3kC,KAAA,YAAAna,SAIAs8E,iBAAA,kEACA37E,OAAAoQ,+BAGAurE,kBADAD,gBAAA17E,OAAA47E,mBAAAC,cAAA99E,gCAAA,oBACAm0D,0BAAAwpB,gBAAA57E,mBAAA,kBAAA,OAAA47E,gBAAA57E,mBAAA,2BAGAqR,QAAAwqE,oBAIAryE,MAAAwxD,iBACA96D,OAAAoD,aAAAG,aAAAoS,KACA3V,OAAAoD,aAAAI,gBAAAuC,QACA/F,OAAAoD,aAAAM,aAAAoC,YACApF,SAAAuzC,OAAAj0C,OAAAoD,aAAAM,aAAAoC,YACA9F,OAAAoD,aAAAM,aAAAqC,QAAAtC,aAKAzD,OAAAqJ,IAAA,WAAA,WAEArJ,OAAAi+C,6BAKAxsC,UAAA,oBAAA,CAAA,aAAA,UAAA,WAAA,SAAArT,WAAAmC,QAAAG,UAEA,MAAA,CACAgR,SAAA,KACAxG,SAAA,EACA0G,KAAA,SAAAC,MAAAC,QAAAC,OAEA,IAAA+pE,iBAAA7gE,SAAAC,eAAA,qBACA4gE,iBAAAzgE,MAAAlD,MAAA,QAEA,IAAA4jE,YAAA9gE,SAAA+gE,uBAAA,gBAAA,GAuBA,SAAAC,YAEA1uE,EAAA,sBAAAuB,OAAAitE,YAAAlB,cAvBAz8E,WAAAiS,OAAA,2BAAA,WAEA4rE,cAGA79E,WAAAiS,OAAA,aAAA,SAAAxQ,MAEAA,MAEAi8E,iBAAAzgE,MAAA7K,QAAA,QACA9P,SAAA,WAEAu7E,eAKAH,iBAAAzgE,MAAA7K,QAAA,UASAiI,SAAA,wEAKAhH,UAAA,aAAA,CAAA,WAAA,SAAA/Q,UAEA,MAAA,CACAmR,MAAA,CACAqqE,WAAA,KAEAxqE,SAAA,IACAyqE,UAAA,EACA1F,YAAA,EACA7kE,KAAA,SAAAC,MAAAC,QAAAC,OACArR,SAAAmR,MAAAqqE,WAAA,QClsBAl/E,QAAAC,OAAA,iBAAA,IACAkB,QAAA,yBAAA,wBAqDA,MAAA,CACAi+E,gBAAAC,aACAC,gBAAAD,UACAE,oBAAAF,qBACAG,oBAAAH,WACAI,oBAAAJ,UACAK,wBAAAL,eACAM,WAAAN,aACAO,WAAAP,UACAQ,eAAAR,wBAIA5qE,UAAA,kBAAA,CACA,WAAA,yBAAA,SAAA/Q,SAAAo8E,qCAGA,MAAA,CACAprE,SAAA,IACAC,QAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAwU,MAEA,IAAAw2D,QAEAr8E,SAAA,gBAGA2B,KAFA06E,QAAAzlE,MAAA0lE,eAAAzvE,EAAAuE,QAAA,IAAAwF,MAAA2lE,OAGAF,QAAAnvD,OAAAkvD,uBAAAV,gBACA7uE,EAAAuE,SAAAorE,UAAAJ,uBAAAN,oBAAA,CAAAW,sBAAA,MAGA,UAQA1rE,UAAA,sBAAA,CACA,WAAA,yBAAA,SAAA/Q,SAAAo8E,qCAGA,MAAA,CACAprE,SAAA,IACAC,QAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAwU,MAEA,IAAAw2D,QAEAr8E,SAAA,gBAGA2B,KAFA06E,QAAAzlE,MAAA0lE,eAAAzvE,EAAAuE,QAAA,IAAAwF,MAAA2lE,OAGAF,QAAAnvD,OAAAkvD,uBAAAP,oBACAhvE,EAAAuE,SAAAorE,UAAAJ,uBAAAJ,wBAAA,CAAAS,sBAAA,MAEA,UAQA1rE,UAAA,kBAAA,CACA,WAAA,yBAAA,SAAA/Q,SAAAo8E,qCAGA,MAAA,CACAprE,SAAA,IACAC,QAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAwU,MAEA,IAAAw2D,QAEAr8E,SAAA,gBAGA2B,KAFA06E,QAAAzlE,MAAA0lE,eAAAzvE,EAAAuE,QAAA,IAAAwF,MAAA2lE,OAGAF,QAAAnvD,OAAAkvD,uBAAAR,gBACA/uE,EAAAuE,SAAAorE,UAAAJ,uBAAAL,oBAAA,CAAAU,sBAAA,MAEA,UC1IA,IAAArtC,IAAAA,KAAA,GAkCA,SAAAstC,UAAAx3E,oBAEA,IAGAy3E,EAKA,OAPAz3E,QADA,mBAAAA,QAAA5I,QAAAuU,YAAA3L,YAEAA,OAAA,IAAAA,MAAAvG,WAEA,OADAg+E,EAAArgF,QAAAsgF,YAAA,GAAA13E,SACA,MAAAy3E,GAAA,UAAAA,GAAA,OAAAA,GAAA,MAAAA,GAAA,OAAAA,GAvCAvtC,IAAAC,GAAAD,IAAAC,IAAA,GACAD,IAAAC,GAAAC,SAAAF,IAAAC,GAAAC,UAAA,GAMAhzC,QAAAkF,yBAAA,SAAAoU,kBAEA,OAAAtZ,QAAAuU,YAAA+E,MAAA,OAAAA,KAAA,KAAAA,KAAA,IAAAA,IAAAjX,QAGAk+E,OAAA3vD,OAAA,wBAMA,IAAA4vD,UAAAC,UAAA,GAEA,IAAAzgF,QAAAuU,YAAAisE,WAAA,CAGA,IAAA,IAAA92E,EAAA,EAAAA,EAAA+2E,UAAAp+E,OAAAqH,IAGA,IAAAg3E,MAAA,IAAAC,OAAA,OAAAj3E,EAAA,GAAA,MAAA,MACA82E,UAAAA,UAAAtyE,QAAAwyE,MAAAD,UAAA/2E,IAGA,OAAA82E,YAgBA1tC,IAAAC,GAAAC,SAAAC,cACA,SAAA4pB,WAAA7iC,oBAEA,OAAA,WACA,MAAA,CACAnnB,KAAAgqD,WAAAhqD,KACA+tE,eAAA5mD,OAAA,GACAqY,kBAAAwqB,WAAAxqB,mBAAA,gDAAAwqB,WAAAhqD,KACA0/B,eAAAsqB,WAAAtqB,eACAD,qBAAAuqB,WAAAvqB,sBAAA,gDAAAuqB,WAAAhqD,KACA4/B,iBAAAoqB,WAAApqB,iBACAouC,kBAAAhkB,WAAAgkB,oBAAA,KAMA/tC,IAAAC,GAAAC,SAAA8tC,gCAAA,SAAAC,eAAAC,SAAAlsE,QAAAC,6BAGA,IAEAksE,aAEAC,wBAsBAC,gBApBA,SAAAC,eACA7wE,EAAA,UAAAwwE,eAAA,IAAAE,cAAA3rE,KAAA,QAAA,qCAGA,SAAA+rE,cACA9wE,EAAA,UAAAwwE,eAAA,IAAAE,cAAA3rE,KAAA,QAAA,6BAGA,SAAAgsE,eACA/wE,EAAA,UAAAwwE,eAAA,IAAAE,cAAA3rE,KAAA,QAAA,qCAMAjF,WAJA,WACAE,EAAA,UAAAwwE,eAAA,IAAAE,cAAA3rE,KAAA,QAAA,8BAGA,UArBAjQ,IAAA0P,eAAAwsE,UAEAN,aAAAlsE,eAAAwsE,QAAAxG,MAAA,KAAAyG,KAAA,MAEAN,wBAAA3wE,EAAA,IAAAwwE,eAAA,IAAAE,eAoBAQ,OAAAT,UAGAU,eAAAnxE,EAAAuE,SAEAksE,UACAlsE,QAAA2iB,SAAA,oBACAypD,wBAAA5rE,KAAA,QAAA,qCAEAosE,eAAAj/E,KAAA,mBAEA0+E,gBAAA7mE,MAAA0lE,eAAAzvE,EAAAuE,QAAA,IAAAwF,MAAA2lE,KAEA52D,MAAAsyD,KAAA,QAAAyF,cACAD,gBAAA93D,MAAAsyD,KAAA,OAAA0F,cAEAK,eAAAj/E,KAAA,sBACA0+E,gBAAA7mE,MAAA0lE,eAAAzvE,EAAAuE,QAAA,IAAAwF,MAAA2lE,KAEA0B,KAAAhG,KAAA,QAAA2F,eAGAxsE,QAAA6mE,KAAA,QAAAyF,cACAtsE,QAAA6mE,KAAA,OAAA0F,gBAKAvsE,QAAAxD,YAAA,oBACA4vE,wBAAA5rE,KAAA,QAAA,6BAEAosE,eAAAj/E,KAAA,mBAEA0+E,gBAAA7mE,MAAA0lE,eAAAzvE,EAAAuE,QAAA,IAAAwF,MAAA2lE,KAEA52D,MAAAu4D,OAAA,QAAAR,cACAD,gBAAA93D,MAAAu4D,OAAA,OAAAP,cAEAK,eAAAj/E,KAAA,sBACA0+E,gBAAA7mE,MAAA0lE,eAAAzvE,EAAAuE,QAAA,IAAAwF,MAAA2lE,KAEA0B,KAAAC,OAAA,QAAAN,eAGAxsE,QAAA8sE,OAAA,QAAAR,cACAtsE,QAAA8sE,OAAA,OAAAP,iBAOAvuC,IAAAC,GAAAC,SAAA6uC,kCAAA,SAAAd,eAAA79C,gBAAApuB,QAAAC,+BAGA,IAEAksE,aAEAC,wBAEA,SAAAY,eACAvxE,EAAA,YAAAwwE,eAAA,IAAAE,cAAA3rE,KAAA,QAAA,qCAGA,SAAAysE,cACAxxE,EAAA,YAAAwwE,eAAA,IAAAE,cAAA3rE,KAAA,QAAA,kCAXAjQ,IAAA0P,iBAAAwsE,UAEAN,aAAAlsE,iBAAAwsE,QAAAxG,MAAA,KAAAyG,KAAA,KAEAN,wBAAA3wE,EAAA,IAAAwwE,eAAA,IAAAE,aAAA,QAUAS,iBAAAnxE,EAAAuE,SAEAouB,iBACApuB,QAAA2iB,SAAA,sBACAypD,wBAAA5rE,KAAA,QAAA,qCAEAosE,iBAAAj/E,KAAA,kBAAAi/E,iBAAAj/E,KAAA,uBACA0+E,gBAAA7mE,MAAA0lE,eAAAzvE,EAAAuE,QAAA,IAAAwF,MAAA2lE,KAEA52D,MAAAsyD,KAAA,QAAAmG,cACAX,gBAAA93D,MAAAsyD,KAAA,OAAAoG,eAEAjtE,QAAA6mE,KAAA,QAAAmG,cACAhtE,QAAA6mE,KAAA,OAAAoG,gBAMAjtE,QAAAxD,YAAA,sBACA4vE,wBAAA5rE,KAAA,QAAA,6BAEAosE,iBAAAj/E,KAAA,kBAAAi/E,iBAAAj/E,KAAA,uBACAu/E,iBAAA1nE,MAAA0lE,eAAAzvE,EAAAuE,QAAA,IAAAwF,MAAA2lE,KAEA52D,MAAAu4D,OAAA,QAAAE,cACAE,iBAAA34D,MAAAu4D,OAAA,OAAAG,eAEAjtE,QAAA8sE,OAAA,QAAAE,cACAhtE,QAAA8sE,OAAA,OAAAG,iBAOAjvC,IAAAC,GAAAC,SAAAivC,8BAAA,SAAAntE,QAAAC,MAAAmtE,QAAArtE,oBAGAC,QAAAxD,YAAA,gBACAwD,QAAAxD,YAAA,kBACAwD,QAAAxD,YAAA,yBAEA,IAAA6wE,OAAA,GAKA,GAAA,EAAAttE,MAAA42C,sBAAAppD,OAEA,IAAA,IAMA+/E,cANA14E,EAAA,EAAAA,GAAAmL,MAAA42C,sBAAAppD,OAAA,EAAAqH,IAEAqL,MAAAlC,OAAAgC,MAAA42C,sBAAA/hD,GAAAmJ,OACAiC,QAAA2iB,SAAA,yBACA3iB,QAAA2iB,SAAA,gBAEA2qD,cAAAvtE,MAAA42C,sBAAA/hD,GACAy4E,QAAA,uCAAAC,cAAAr3D,IAAA,SAEAjW,QAAAkkB,KAAA,CACAjZ,QAfAoiE,OAgBAlpD,SAAA,CACAopD,SAAA9xE,EAAAlM,QACAi+E,GAAA,cACAzG,GAAA,YACA0G,UAAA,WACArpD,OAAA,CAAAC,EAAA,EAAAqpD,QAAA,IAEA3/E,KAAA,CAAA8+C,MAAA,GACA7tC,KAAA,CAAA2uE,OAAA,GACApkE,MAAA,CAAA+a,QAAA,+BAQA,GAAA,EAAAvkB,MAAA6tE,wBAAArgF,OAEA,IAAA,IAOAsgF,cAPAp5E,EAAA,EAAAA,GAAAsL,MAAA6tE,wBAAArgF,OAAA,EAAAkH,IAEAwL,MAAAlC,OAAAgC,MAAA6tE,wBAAAn5E,GAAAsJ,OAEAiC,QAAA2iB,SAAA,yBACA3iB,QAAA2iB,SAAA,kBAEAkrD,cAAA9tE,MAAA6tE,wBAAAn5E,GACA44E,QAAA,yCAAAQ,cAAA53D,IAAA,SAEAjW,QAAAkkB,KAAA,CACAjZ,QA9CAoiE,OA+CAlpD,SAAA,CACAopD,SAAA9xE,EAAAlM,QACAi+E,GAAA,cACAzG,GAAA,YACA0G,UAAA,WACArpD,OAAA,CAAAC,EAAA,EAAAqpD,QAAA,IAEA3/E,KAAA,CAAA8+C,MAAA,GACA7tC,KAAA,CAAA2uE,OAAA,GACApkE,MAAA,CAAA+a,QAAA,4BAMA8oD,QAAAptE,QAAAotE,CAAArtE,QAKAi+B,IAAAC,GAAAC,SAAA4vC,sCAAA,SAAA9tE,QAAAC,MAAAmtE,QAAArtE,oBAGAC,QAAAxD,YAAA,gBACAwD,QAAAxD,YAAA,kBACAwD,QAAAxD,YAAA,yBAEA,EAAAuD,MAAA42C,sBAAAppD,QACAyS,QAAA2iB,SAAA,yBACA3iB,QAAA2iB,SAAA,gBAEA3iB,QAAAkkB,KAAA,CACAjZ,QAAA,WAGA,IAFA,IAAAoiE,OAAA,GAEAz4E,EAAA,EAAAA,GAAAmL,MAAA42C,sBAAAppD,OAAA,EAAAqH,IAIAy4E,QAAA,uCAFAttE,MAAA42C,sBAAA/hD,GAEAqhB,IAAA,SAIA,OAAAo3D,QAEAlpD,SAAA,CACAopD,SAAA9xE,EAAAlM,QACAi+E,GAAA,cACAzG,GAAA,YACA0G,UAAA,WACArpD,OAAA,CAAAC,EAAA,EAAAqpD,QAAA,IAEA3/E,KAAA,CAAA8+C,MAAA,GACA7tC,KAAA,CAAA2uE,OAAA,GACApkE,MAAA,CAAA+a,QAAA,0BAIA,EAAAvkB,MAAA6tE,wBAAArgF,SACAyS,QAAA2iB,SAAA,yBACA3iB,QAAA2iB,SAAA,kBAEA3iB,QAAAkkB,KAAA,CACAjZ,QAAA,WAGA,IAFA,IAAAoiE,OAAA,GAEAz4E,EAAA,EAAAA,GAAAmL,MAAA6tE,wBAAArgF,OAAA,EAAAqH,IAIAy4E,QAAA,yCAFAttE,MAAA6tE,wBAAAh5E,GAEAqhB,IAAA,SAIA,OAAAo3D,QAEAlpD,SAAA,CACAopD,SAAA9xE,EAAAlM,QACAi+E,GAAA,cACAzG,GAAA,YACA0G,UAAA,WACArpD,OAAA,CAAAC,EAAA,EAAAqpD,QAAA,IAEA3/E,KAAA,CAAA8+C,MAAA,GACA7tC,KAAA,CAAA2uE,OAAA,GACApkE,MAAA,CAAA+a,QAAA,4BAIA8oD,QAAAptE,QAAAotE,CAAArtE,QAKAi+B,IAAAC,GAAAC,SAAA6vC,oCAAA,SAAA9B,eAAA+B,yBAAAhuE,QAAAC,YAAAF,MAAAqtE,sBAGA,IAAAjB,aAAAlsE,YAAAwsE,QAAAxG,MAAA,KAAAyG,KAAA,KACAE,YAAAnxE,EAAAuE,SAEAiuE,yBAAA/iF,QAAA8U,QACA,YAAAisE,eAAA,IAAAE,aAAA,6EACAF,eACA,sEACAA,eAAA,IAAAE,aAAA,iDACA6B,yBAAA,2BAEApB,YAAAj/E,KAAA,iBACAqS,QACA4sE,YAAAj/E,KAAA,qBACA8N,EAAAuE,QAAA,IAAAsiB,SACAsqD,YAAAj/E,KAAA,mBACA8N,EAAAuE,QAAA,IAAA6sB,QAAA,iBACA+/C,YAAAj/E,KAAA,uBACA8N,EAAAuE,QAAA,IAAA6sB,QAAA,qBAKA,GADAqhD,YAAAluE,QAAAmuE,SAAA,wBACA5gF,OACA2gF,YAEAluE,SAdAouE,MAAAH,0BAiBAb,QAAAa,yBAAAb,CAAArtE,OACAkuE,yBAAAjvE,QAKAg/B,IAAAC,GAAAC,SAAAmwC,sCAAA,SAAApC,eAAA+B,yBAAAhuE,QAAAC,YAAAF,MAAAqtE,sBAGA,IAAAjB,aAAAlsE,YAAAwsE,QAAAxG,MAAA,KAAAyG,KAAA,KACAE,YAAAnxE,EAAAuE,SAEAiuE,yBAAA/iF,QAAA8U,QACA,YAAAisE,eAAA,IAAAE,aAAA,iFACAF,eACA,0EACAA,eAAA,IAAAE,aAAA,mDACA6B,yBAAA,2BAGApB,YAAAj/E,KAAA,iBACAqS,QACA4sE,YAAAj/E,KAAA,qBACA8N,EAAAuE,QAAA,IAAAsiB,SACAsqD,YAAAj/E,KAAA,mBACA8N,EAAAuE,QAAA,IAAA6sB,QAAA,iBACA+/C,YAAAj/E,KAAA,uBACA8N,EAAAuE,QAAA,IAAA6sB,QAAA,qBAKA,GADAqhD,YAAAluE,QAAAmuE,SAAA,wBACA5gF,OACA2gF,YAEAluE,SAdAouE,MAAAH,0BAiBAb,QAAAa,yBAAAb,CAAArtE,OACAkuE,yBAAAjvE,QAKAg/B,IAAAC,GAAAC,SAAAowC,+BAAA,SAAAtuE,QAAAC,MAAAF,MAAAqtE,sBAGA,IAAAR,eAAAnxE,EAAAuE,SAEAA,QAAAqpB,SAAA,kBACArpB,QAAAxD,YAAA,gBACAwD,QAAAxD,YAAA,kBACAwD,QAAAxD,YAAA,2BAGAowE,eAAAj/E,KAAA,qBACAqS,QAAAsiB,SAAA6rD,WAUAnuE,QAAAsiB,SAAAS,YAVAjF,KAAA,WACA,IAAAywD,MAAA9yE,EAAAoF,MAEA0tE,MAAAllD,SAAA,kBACAklD,MAAAt0C,SAGAmzC,SAAAA,CAAArtE,UAmBAi+B,IAAAC,GAAAC,SAAAswC,mBAAA,GACAxwC,IAAAC,GAAAC,SAAAuwC,oBAAA,GACAzwC,IAAAC,GAAAC,SAAAwwC,oBAAA,GACA1wC,IAAAC,GAAAC,SAAAywC,uBAAA,GACA3wC,IAAAC,GAAAC,SAAA0wC,sBAAA,GACA5wC,IAAAC,GAAAC,SAAA2wC,sBAAA,GAGA,IAAAC,sCAFA9wC,IAAAC,GAAAC,SAAA6wC,oBAAA,IAGAC,sCAAA,EACAC,sCAAA,EACAC,yCAAA,EACAC,2CAAA,EACAC,iDAAA,EACAC,8CAAA,EACAC,6CAAA,EAGA,SAAAC,qBAAAC,OAAAzvE,oBAEA,OAAAurE,UAAAvrE,MAAA6kE,MAAA4K,SCtdA,SAAA79B,uBAAA89B,SACA5uE,KAAA8xC,UAAA88B,QAAA98B,UACA9xC,KAAA6xC,gBAAA+8B,QAAA/8B,gBACA7xC,KAAA6uE,gBAAAD,QAAAC,gBACA7uE,KAAA0wC,cAAAk+B,QAAAl+B,cACA1wC,KAAA6vC,kBAAA++B,QAAA/+B,kBACA7vC,KAAA6wC,YAAA+9B,QAAA/9B,YACA7wC,KAAAoxC,cAAAw9B,QAAAx9B,cACApxC,KAAAyuC,gBAAAmgC,QAAAngC,gBACAzuC,KAAA4qC,qBAAAgkC,QAAAhkC,qBACA5qC,KAAApK,QAAAg5E,QAAAh5E,QACAoK,KAAA2yB,YAAAi8C,QAAAj8C,YACA3yB,KAAAzN,IAAAq8E,QAAAr8E,IACAyN,KAAAuuC,qBAAAqgC,QAAArgC,qBACAvuC,KAAA6qC,0BAAA+jC,QAAA/jC,0BACA7qC,KAAA8uE,YAAAF,QAAAE,YACA9uE,KAAA+uE,kBAAAH,QAAAG,kBACA/uE,KAAAsyC,oBAAAs8B,QAAAt8B,oBACAtyC,KAAAuyC,oBAAAq8B,QAAAr8B,oBACAvyC,KAAAgvE,iBAAAJ,QAAAI,iBACAhvE,KAAAmiD,UAAAysB,QAAAzsB,UACAniD,KAAAivE,UAAAL,QAAAK,UACAjvE,KAAAgwC,oBAAA4+B,QAAA5+B,oBACAhwC,KAAAkvE,sBAAAN,QAAAM,sBACAlvE,KAAAkwC,mBAAA0+B,QAAA1+B,mBACAlwC,KAAAmwC,0BAAAy+B,QAAAz+B,0BACAnwC,KAAAmvE,sBAAAP,QAAAO,sBD+bA9kF,QAAAC,OAAA,eAAA,IACAs1E,QAAA,eAAA,CACA,aAAA,SAAAn0E,YAKA,SAAAqyC,2BAAA5+B,oBAGA,IAAA,IAYAgoD,WAZAkoB,GAAAlwE,MAAAmwE,YAAAD,GAAAA,GAAAA,GAAAE,cACAxxC,2BAAAsxC,IAGA,GAAA/kF,QAAAkF,yBAAA2P,MAAAqwE,kBACA,OAAA,EAIArwE,MAAA2I,WAAA,sCAAA,IACA3I,MAAA2I,WAAA,sCAAA,IAKA3I,MAAA42C,sBAAA,GAMA,IAHA,IAAA05B,WAFAtwE,MAAA6tE,wBAAArgF,OAAA,IAGA+iF,gBAAA,GAEA17E,EAAA,EAAAA,GAAAmL,MAAAqwE,iBAAA7iF,OAAA,EAAAqH,IAGAy7E,UAAA,EAGA,KALAtoB,WAAAhoD,MAAAqwE,iBAAAx7E,IAKAqL,MAAAlF,OAAAxN,cAIAgD,KAFA+/E,gBAAAvoB,WAAAwoB,YAAAC,mBAGAF,gBAAApE,WACAnsE,MAAA42C,sBAAAvqD,KAAAkkF,iBACAvoB,WAAA9nD,MAAAlF,OAAA3O,KAAAkkF,sBAEA//E,IAAAw3D,WAAA9nD,MAAAglE,YAAA2B,cACA7e,WAAA9nD,MAAAglE,YAAA2B,aAAA0J,gBAAAvyE,MAAA,GAGAsyE,UAAA,GAIAA,eAGA9/E,KAFA+/E,gBAAAvoB,WAAAwoB,YAAAE,qBAGAH,gBAAAliD,aACAruB,MAAA6tE,wBAAAxhF,KAAAkkF,iBACAvoB,WAAA9nD,MAAAywE,SAAAtkF,KAAAkkF,mBAUA,OAHAvwE,MAAA2I,WAAA,wCAAA,IACA3I,MAAA2I,WAAA,wCAAA,IAEA,IAAA3I,MAAA42C,sBAAAppD,OAGA,OArEAjB,WAAA4yB,iBAAA,GACA5yB,WAAAqkF,kBAAA,GAoEA,CACAjhE,mBAAA,wBAKA,IAFA,IAAA0V,SAAA,EAEAxwB,EAAA,EAAAA,GAAAtI,WAAA4yB,iBAAA3xB,OAAA,EAAAqH,IACA,IAAA07E,gBAAA3xC,2BAAAryC,WAAA4yB,iBAAAtqB,GAAAmL,OACAqlB,QAAAA,SAAAkrD,gBAGA,OAAAlrD,SAEAuZ,2BAAAA,2BACA1tB,mBAAA,SAAAlR,MAAA0yB,mBAMA,IAHA,IAAAm+C,UAAA,EAGAh8E,EAAA,EAAAA,GAAAtI,WAAA4yB,iBAAA3xB,OAAA,EAAAqH,IACA,GAAAtI,WAAA4yB,iBAAAtqB,GAAAi8E,UAAA9wE,MAAA+wE,IAAA,CACAF,UAAA,EACA,MAIA,GAAAA,SAAA,CACAtkF,WAAA4yB,iBAAA9yB,KAAA,CAAAykF,QAAA9wE,MAAA+wE,IAAA/wE,MAAAA,MAAA0yB,KAAAA,OAEA,IAAA,IAAAw9C,GAAAlwE,MAAAmwE,YAAAD,GAAAA,GAAAA,GAAAE,cACA7jF,WAAA4yB,iBAAA9yB,KAAA,CAAAykF,QAAAZ,GAAAa,IAAA/wE,MAAAkwE,GAAAx9C,KAAAA,SAIArjB,sBAAA,wBAEA9iB,WAAA4yB,iBAAA,IAGAxM,oBAAA,WACApmB,WAAAoc,WAAA,sCAAA,SAMA/I,UAAA,iBAAA,CAAA,eAAA,WAAA,WAAA,SAAAmP,aAAA6iB,SAAA/iC,UAEA,MAAA,CACAgR,SAAA,IACAC,QAAA,UACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAwU,mBAEA,IAIA6L,MAEAywD,cANAt8D,MAAA,KAAAxU,MAAA+wE,iBAEA/wE,MAAAglE,YAAAxwD,KAEA6L,MAAArgB,MAAAwsE,QAEAsE,cAAAhxE,MAAA6kE,MAAA3kE,MAAA+wE,gBAgDAjxE,MAAAqwE,iBAAAhkF,KAAA,CAAA2R,KAAAgzE,cAAAhzE,KAAAuiB,MAAAA,MAAAtgB,QAAAA,QAAAC,MAAAA,MAAAswE,UA9CA,WAEA,MAAA,CACAC,eAAA,WAEA,QAAAjgF,IAAAwgF,cAAAtzC,eAAA,CAEA,IAAAquC,WAAAiF,cAAAjF,eAEAmF,aAAAlxE,MAAA6kE,MAAAtkD,OACA4wD,WAAAH,cAAAtzC,eAAAwzC,aAAAnF,YAEA,GAAA5gF,QAAAimF,SAAAD,aAAAhmF,QAAAkmF,WAAAF,WAAAp/E,MAAA,CAEA,IAAAozC,SAAA34C,GAAA6uC,QAOA,OANA81C,WAAAp/E,KAAA,WACAozC,SAAAp5C,QAAA,KACA,WACA,IAAA6jB,MAAA,CAAA5R,KAAAgzE,cAAAhzE,KAAAuiB,MAAAA,MAAArK,IAAA86D,cAAAxzC,kBAAA2uC,UAAA,GACAhnC,SAAAj3C,OAAA0hB,SAEAu1B,SAAA5J,QACA,OAAA41C,gBAAA,EAEA,CAAAnzE,KAAAgzE,cAAAhzE,KAAAuiB,MAAAA,MAAArK,IAAA86D,cAAAxzC,kBAAA2uC,UAAA,KAGAuE,iBAAA,WAEA,QAAAlgF,IAAAwgF,cAAApzC,iBAAA,CAEA,IAAAmuC,eAAAiF,cAAAjF,eAEAmF,aAAAlxE,MAAA6kE,MAAAtkD,OAIA,OAHAywD,cAAApzC,iBAAAszC,aAAAnF,qBAGA,EACA,CAAA/tE,KAAAgzE,cAAAhzE,KAAAuiB,MAAAA,MAAArK,IAAA86D,cAAAvzC,qBAAApP,YAAA,OAQAijD,SAAA,MAkDAxlF,WAAA,CAAA,SAAA,WAAA,SAAA,SAAAqC,OAAA42E,SAAAC,qBAGA72E,OAAAkiF,iBAAAliF,OAAAkiF,kBAAA,GACAliF,OAAAyoD,sBAAAzoD,OAAAyoD,uBAAA,GACAzoD,OAAA0/E,wBAAA1/E,OAAA0/E,yBAAA,GAEA9+D,aAAAmC,mBAAA/iB,QAEA62E,OAAAuM,YAAA,GACAvM,OAAAhqE,OAAA,GACAgqE,OAAA2L,SAAA,GAEA3L,OAAAE,YAAA,GAEAF,OAAAlgD,aAAA,EAEAhkB,KAAA0wE,cAAA,SAAAxpB,YACAgd,OAAAuM,YAAAllF,KAAA27D,aAGA75D,OAAAqJ,IAAA,6BAAA,WACAuX,aAAA6vB,2BAAAzwC,UAIAA,OAAAqJ,IAAA,wCAAA,YACArM,QAAAuU,YAAAslE,OAAAyM,6BAAAtjF,OAAA02E,MAAAG,OAAAyM,+BAEA,EAAAzM,OAAAhqE,OAAAxN,QACAywC,IAAAC,GAAAC,SAAA6vC,oCAAAhJ,OAAAhqE,OAAA,GAAAgD,KAAAgnE,OAAAhqE,OAAA,GAAAkb,IAAA6uD,SAAAC,OAAA72E,OAAAyjC,UACAqM,IAAAC,GAAAC,SAAA8tC,gCAAAjH,OAAAhqE,OAAA,GAAAgD,MAAA,EAAA+mE,SAAAC,SACA,EAAAA,OAAA2L,SAAAnjF,SACAywC,IAAAC,GAAAC,SAAAmwC,sCAAAtJ,OAAA2L,SAAA,GAAA3yE,KAAAgnE,OAAA2L,SAAA,GAAAz6D,IAAA6uD,SAAAC,OAAA72E,OAAAyjC,UACAqM,IAAAC,GAAAC,SAAA6uC,kCAAAhI,OAAA2L,SAAA,GAAA3yE,MAAA,EAAA+mE,SAAAC,YAKA72E,OAAAqJ,IAAA,sCAAA,WAEAymC,IAAAC,GAAAC,SAAAowC,+BAAAxJ,SAAAC,OAAA72E,OAAAyjC,UAEA,EAAAozC,OAAAhqE,OAAAxN,QACAywC,IAAAC,GAAAC,SAAA8tC,gCAAAjH,OAAAhqE,OAAA,GAAAgD,MAAA,EAAA+mE,SAAAC,QAGA,EAAAA,OAAA2L,SAAAnjF,QACAywC,IAAAC,GAAAC,SAAA6uC,kCAAAhI,OAAA2L,SAAA,GAAA3yE,MAAA,EAAA+mE,SAAAC,QAIAA,OAAAhqE,OAAAxN,OAAA,EACAw3E,OAAA2L,SAAAnjF,OAAA,UAOAoS,UAAA,gBAAA,CAAA,aAAA,eAAA,WAAA,WAAA,SAAArT,WAAAwiB,aAAA6iB,SAAA/iC,UAEA,MAAA,CACAgR,SAAA,IACAxG,SAAA,EACAixE,UAAA,EACA1jE,SAAA,cACA7G,KAAA,SAAAC,MAAAC,QAAAC,oBAGA,IAEAwxE,eAFAlhF,IAAA0P,MAAAyxE,uBAAAnhF,IAAA0P,MAAA0xE,qBAEAF,UAAA1xE,MAAAqwE,iBAAA7iF,OAAA,EAEA0S,MAAAlC,KAAA,gBAAA0zE,UAAAz4E,WAgCA+G,MAAAqwE,iBAAAhkF,KAAA,CAAA2R,KAAA,gBAAA0zE,UAAAz4E,WAAAgH,QAAAA,QAAAC,MAAAA,MAAAswE,UA9BA,WAEA,MAAA,CACAC,eAAA,WAEA,QAAAjgF,IAAA0P,MAAAyxE,iBAIA,OAFA3xE,MAAA6kE,MAAA3kE,MAAAyxE,kBAGA,CAAA3zE,KAAA,gBAAA0zE,UAAAz4E,WAAAid,IAAAhW,MAAA2xE,mBAAA1F,UAAA,QADA,GAMAuE,iBAAA,WAEA,QAAAlgF,IAAA0P,MAAA0xE,mBAIA,OAFA1xE,MAAA0xE,qBAGA,CAAA5zE,KAAA,gBAAA0zE,UAAAz4E,WAAAid,IAAAhW,MAAA4xE,qBAAAzjD,YAAA,QADA,KASAijD,SAAA,MAIAxlF,WAAA,CAAA,SAAA,WAAA,SAAA,SAAAqC,OAAA42E,SAAAC,qBAGA72E,OAAAkiF,iBAAAliF,OAAAkiF,kBAAA,GACAliF,OAAAyoD,sBAAAzoD,OAAAyoD,uBAAA,GACAzoD,OAAA0/E,wBAAA1/E,OAAA0/E,yBAAA,GAEA9+D,aAAAmC,mBAAA/iB,QAEA62E,OAAAuM,YAAA,GACAvM,OAAAhqE,OAAA,GACAgqE,OAAA2L,SAAA,GAEA3L,OAAAE,YAAA,GAEAF,OAAAlgD,aAAA,EAGA32B,OAAAqJ,IAAA,wCAAA,WACAymC,IAAAC,GAAAC,SAAAivC,8BAAArI,SAAAC,OAAApzC,SAAAzjC,UAIAA,OAAAqJ,IAAA,sCAAA,WAEAymC,IAAAC,GAAAC,SAAAivC,8BAAArI,SAAAC,OAAApzC,SAAAzjC,QACA8vC,IAAAC,GAAAC,SAAAowC,+BAAAxJ,SAAAC,OAAA72E,OAAAyjC,UAGAozC,OAAAhqE,OAAAxN,OAAA,EACAw3E,OAAA2L,SAAAnjF,OAAA,UAMAoS,UAAA,wBAAA,CAAA,aAAA,eAAA,WAAA,WAAA,SAAArT,WAAAwiB,aAAA6iB,SAAA/iC,UAEA,MAAA,CACAgR,SAAA,IACAxG,SAAA,EACAixE,UAAA,EACA1jE,SAAA,cACA7G,KAAA,SAAAC,MAAAC,QAAAC,oBAGA,QAAA1P,IAAA0P,MAAAtS,WAAA4C,IAAA0P,MAAA6xE,UAAA,CACA,IAAAC,SAAAzlF,WAAA0lF,OAEAC,cAAAx2E,EAAA,mBAAA+wD,OACA6Y,cAAAn6E,QAAA8U,QAAAiyE,eAEAF,SAAA9xE,MAAA6xE,WAAA/xE,MAAA6kE,MAAA3kE,MAAAtS,MAEA8kC,cAAAd,SAAA0zC,cAAA1zC,CAAAogD,UAEAjjE,aAAAmC,mBAAA8gE,SAAAt/C,eAGAs/C,SAAAx6E,IAAA,wCAAA,WACAymC,IAAAC,GAAAC,SAAA4vC,sCAAA9tE,QAAAC,MAAA0xB,SAAAogD,YAIAA,SAAAx6E,IAAA,sCAAA,WACAymC,IAAAC,GAAAC,SAAA4vC,sCAAA9tE,QAAAC,MAAA0xB,SAAAogD,YAMA,IAHA,IAAAG,qBAAA,EAGAt9E,EAAA,EAAAA,GAAAtI,WAAAqkF,kBAAApjF,OAAA,EAAAqH,IACA,GAAAtI,WAAAqkF,kBAAA/7E,GAAAk9E,YAAA7xE,MAAA6xE,UAAA,CACAI,qBAAA,EACA,MAIAA,sBAEAC,cAAA7lF,WAAAiS,OAAA,WACA,OAAAwB,MAAA6kE,MAAA3kE,MAAA6xE,YACA,SAAA53C,SAAAC,eACA5pC,IAAA4pC,UAIAvrC,SAAA,WACAmR,MAAAsD,QAAAqF,WAAA,sCAAA,IACAoG,aAAAY,qBACA3P,MAAAsD,QAAAqF,WAAA,wCAAA,QAIApc,WAAAqkF,kBAAAvkF,KAAA,CAAA0lF,UAAA7xE,MAAA6xE,UAAAM,WAAAD,uBAOAxyE,UAAA,cAAA,CAAA,eAAA,SAAAmP,cAWA,MAAA,CACAlP,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAoyE,oBAGA,IAGA59D,KAEA6L,MAEAkwD,eACAC,iBAEA6B,sBACAC,yBAXA,IAAAF,MAAA9kF,SAEA8kF,MAAA,GACA59D,KAAA49D,MAAA,GAEA/xD,MAAArgB,MAAAwsE,QAEA+D,kBAAAvwE,MAAA,wBAAAA,MAAAqyE,uBAAAryE,MAAAsyE,2BACA9B,mBAAAxwE,MAAA,yBAEAqyE,sBAAAryE,MAAAqyE,uBAAAt0C,IAAAC,GAAAC,SAAAswC,oBAAA,gCACA+D,yBAAAtyE,MAAAsyE,yBACAtyE,MAAAuyE,0BAkCAzyE,MAAAqwE,iBAAAhkF,KAAA,CAAA2R,KAAA,cAAAuiB,MAAAA,MAAAtgB,QAAAA,QAAAC,MAAAA,MAAAswE,UAhCA,WAEA,MAAA,CACAC,eAAA,WAEA,IAAAvwE,MAAA9B,UAEAqyE,eAEA,OAAAjB,qBAAAtvE,MAAAwyE,eAAA1yE,QACA0U,KAAAsxD,SAAAtxD,KAAAiyD,YAEA,CAAA3oE,KAAA,cAAAuiB,MAAAA,MAAArK,IAAAq8D,sBAAApG,UAAA,QAHA,GAQAuE,iBAAA,WAEA,GAAAA,iBAEA,OAAAlB,qBAAAtvE,MAAAyyE,kBAAA3yE,QACA0U,KAAAsxD,SAAAtxD,KAAAiyD,YAEA,CAAA3oE,KAAA,cAAAuiB,MAAAA,MAAArK,IAAAs8D,yBAAAnkD,YAAA,QAHA,KAWAijD,SAAA,UAMA1xE,UAAA,eAAA,CAAA,eAAA,SAAAmP,cAOA,MAAA,CACAlP,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAoyE,oBAGA,IAGA59D,KAEA6L,MAEAkwD,eACAC,iBAMAkC,uBACAC,0BAfA,IAAAP,MAAA9kF,SAEA8kF,MAAA,GACA59D,KAAA49D,MAAA,GAEA/xD,MAAArgB,MAAAwsE,QAEA+D,kBAAAvwE,MAAA,yBAAAA,MAAA0yE,wBAAA1yE,MAAA2yE,4BACAnC,mBAAAxwE,MAAA,0BAEA0yE,uBAAA1yE,MAAA0yE,wBAAA,iCACAC,0BAAA3yE,MAAA2yE,0BACA3yE,MAAA4yE,2BAEAF,uBAAAlH,OAAA3vD,OAAA62D,uBAAA1yE,MAAA6yE,cACAF,0BAAAnH,OAAA3vD,OAAA82D,0BAAA3yE,MAAA6yE,cA+BA/yE,MAAAqwE,iBAAAhkF,KAAA,CAAA2R,KAAA,eAAAuiB,MAAAA,MAAAtgB,QAAAA,QAAAC,MAAAA,MAAAswE,UA7BA,WACA,MAAA,CACAC,eAAA,WAEA,GAAAA,eAEA,OAAAjB,qBAAAtvE,MAAA8yE,gBAAAhzE,SACA0U,KAAAsxD,SAAAtxD,KAAAiyD,aAAAjyD,KAAAiyD,WAAAn5E,OAAA0S,MAAA6yE,cAEA,CAAA/0E,KAAA,eAAAuiB,MAAAA,MAAArK,IAAA08D,uBAAAzG,UAAA,QAHA,GAQAuE,iBAAA,WAEA,GAAAA,iBAEA,OAAAlB,qBAAAtvE,MAAA+yE,mBAAAjzE,SACA0U,KAAAsxD,SAAAtxD,KAAAiyD,aAAAjyD,KAAAiyD,WAAAn5E,OAAA0S,MAAA6yE,cAEA,CAAA/0E,KAAA,eAAAuiB,MAAAA,MAAArK,IAAA28D,0BAAAxkD,YAAA,QAHA,KAWAijD,SAAA,UAKA1xE,UAAA,eAAA,CAAA,eAAA,SAAAmP,cAQA,MAAA,CACAlP,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAoyE,mCAGA,IAGA59D,KAEA6L,MAEAkwD,eACAC,iBAIAwC,aAoBAC,uBACAC,0BAjCA,IAAAd,qBAAA9kF,SAEA8kF,qBAAA,GACA59D,KAAA49D,qBAAA,GAEA/xD,MAAArgB,MAAAwsE,QAEA+D,kBAAAvwE,MAAA,yBAAAA,MAAAizE,wBAAAjzE,MAAAkzE,4BACA1C,mBAAAxwE,MAAA,0BAEAmzE,qBAAAnzE,MAAAozE,sBAAAnE,wCAEA+D,aAAA1D,qBAAAtvE,MAAAqzE,gBAAAvzE,OAIAqzE,sBAAAH,aACAjzE,QAAA6mE,KAAA,WAAA,SAAArvE,OAEAwI,QAAAwE,MAAAjX,QAAA0S,MAAAszE,cAEA,IAAA/7E,MAAAspB,SACAtpB,MAAAwxD,oBAMAkqB,uBAAAjzE,MAAAizE,wBAAA,iCACAC,0BAAAlzE,MAAAkzE,0BACAlzE,MAAAuzE,2BAEAN,uBAAAzH,OAAA3vD,OAAAo3D,uBAAAjzE,MAAAszE,cACAJ,0BAAA1H,OAAA3vD,OAAAq3D,0BAAAlzE,MAAAszE,cA6BAxzE,MAAAqwE,iBAAAhkF,KAAA,CAAA2R,KAAA,eAAAuiB,MAAAA,MAAAtgB,QAAAA,QAAAC,MAAAA,MAAAswE,UA3BA,WACA,MAAA,CACAC,eAAA,WAEA,GAAAA,eAEA,OAAAyC,cAAAx+D,KAAAiyD,WAAAn5E,OAAA0S,MAAAszE,aAEA,CAAAx1E,KAAA,eAAAuiB,MAAAA,MAAArK,IAAAi9D,uBAAAhH,UAAA,QAFA,GAOAuE,iBAAA,WAEA,GAAAA,iBAEA,OAAAwC,cAAAx+D,KAAAiyD,WAAAn5E,OAAA0S,MAAAszE,aAEA,CAAAx1E,KAAA,eAAAuiB,MAAAA,MAAArK,IAAAk9D,0BAAA/kD,YAAA,QAFA,KAUAijD,SAAA,WAMA1xE,UAAA,oBAAA,CAAA,eAAA,SAAAmP,cAWA,MAAA,CACAlP,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAoyE,yBAGA,IAGA59D,KAEA6L,MAEAkwD,eACAC,iBAMAgD,WACAC,WAMAC,0BACAC,6BAtBA,IAAAvB,WAAA9kF,SAEA8kF,WAAA,GACA59D,KAAA49D,WAAA,GAEA/xD,MAAArgB,MAAAwsE,QAEA+D,kBAAAvwE,MAAA,4BAAAA,MAAA4zE,2BAAA5zE,MAAA6zE,+BACArD,mBAAAxwE,MAAA,6BAIA,KAFA8zE,WAAA9zE,MAAA+zE,kBAAA/N,MAAA,MAEA14E,SAEAkmF,WAAAM,WAAA,GAAAxwE,WACAmwE,WAAAK,WAAA,GAAAxwE,WAEAowE,0BAAA1zE,MAAA4zE,2BAAA,oCACAD,6BAAA3zE,MAAA6zE,6BACA7zE,MAAAg0E,8BAEAN,0BAAAlI,OAAA3vD,OAAA63D,0BAAAF,WAAAC,YACAE,6BAAAnI,OAAA3vD,OAAA83D,6BAAAH,WAAAC,YAgCA3zE,MAAAqwE,iBAAAhkF,KAAA,CAAA2R,KAAA,oBAAAuiB,MAAAA,MAAAtgB,QAAAA,QAAAC,MAAAA,MAAAswE,UA9BA,WAEA,MAAA,CACAC,eAAA,WAEA,GAAAA,eAEA,OAAAjB,qBAAAtvE,MAAAi0E,mBAAAn0E,SACA0U,KAAAiyD,WAAAnjE,WAAAkwE,YAAAh/D,KAAAiyD,WAAAnjE,WAAAmwE,YAEA,CAAA31E,KAAA,oBAAAuiB,MAAAA,MAAArK,IAAA09D,0BAAAzH,UAAA,QAHA,GAQAuE,iBAAA,WAEA,GAAAA,iBAEA,OAAAlB,qBAAAtvE,MAAAk0E,sBAAAp0E,SACAuC,SAAAmS,KAAAiyD,WAAA,IAAA+M,YAAAnxE,SAAAmS,KAAAiyD,WAAA,IAAAgN,YAEA,CAAA31E,KAAA,oBAAAuiB,MAAAA,MAAArK,IAAA29D,6BAAAxlD,YAAA,QAHA,KAWAijD,SAAA,WAMA1xE,UAAA,0BAAA,CAAA,eAAA,SAAAmP,cAWA,MAAA,CACAlP,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAoyE,oBAGA,IAGA59D,KAEA6L,MAEAkwD,eACAC,iBAMA2D,yBACAC,4BAfA,IAAAhC,MAAA9kF,SAEA8kF,MAAA,GACA59D,KAAA49D,MAAA,GAEA/xD,MAAArgB,MAAAwsE,QAEA+D,kBAAAvwE,MAAA,2BAAAA,MAAAm0E,0BAAAn0E,MAAAo0E,8BACA5D,mBAAAxwE,MAAA,4BAEAm0E,yBAAAn0E,MAAAm0E,0BAAA,mCACAC,4BAAAp0E,MAAAo0E,4BACAp0E,MAAAq0E,6BAEAF,yBAAA3I,OAAA3vD,OAAAs4D,yBAAAn0E,MAAAs0E,yBACAF,4BAAA5I,OAAA3vD,OAAAu4D,4BAAAp0E,MAAAs0E,yBAgCAx0E,MAAAqwE,iBAAAhkF,KAAA,CAAA2R,KAAA,0BAAAuiB,MAAAA,MAAAtgB,QAAAA,QAAAC,MAAAA,MAAAswE,UA9BA,WAEA,MAAA,CACAC,eAAA,WAEA,GAAAA,eAEA,OAAAjB,qBAAAtvE,MAAAu0E,kBAAAz0E,QACAghC,WAAAtsB,KAAAiyD,aAAAzmE,MAAAs0E,wBAEA,CAAAx2E,KAAA,0BAAAuiB,MAAAA,MAAArK,IAAAm+D,yBAAAlI,UAAA,QAHA,GAQAuE,iBAAA,WAEA,GAAAA,iBAEA,OAAAlB,qBAAAtvE,MAAAw0E,qBAAA10E,QACAghC,WAAAtsB,KAAAiyD,aAAAzmE,MAAAs0E,wBAEA,CAAAx2E,KAAA,0BAAAuiB,MAAAA,MAAArK,IAAAo+D,4BAAAjmD,YAAA,QAHA,KAWAijD,SAAA,UAMA1xE,UAAA,uBAAA,CAAA,eAAA,SAAAmP,cAWA,MAAA,CACAlP,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAoyE,oBAGA,IAGA59D,KAEA6L,MAEAkwD,eACAC,iBAMAiE,yBACAC,4BAfA,IAAAtC,MAAA9kF,SAEA8kF,MAAA,GACA59D,KAAA49D,MAAA,GAEA/xD,MAAArgB,MAAAwsE,QAEA+D,kBAAAvwE,MAAA,2BAAAA,MAAAy0E,0BAAAz0E,MAAA00E,8BACAlE,mBAAAxwE,MAAA,4BAEAy0E,yBAAAz0E,MAAAy0E,0BAAA,mCACAC,4BAAA10E,MAAA00E,4BACA10E,MAAA20E,6BAEAF,yBAAAjJ,OAAA3vD,OAAA44D,yBAAAz0E,MAAA40E,sBACAF,4BAAAlJ,OAAA3vD,OAAA64D,4BAAA10E,MAAA40E,sBAgCA90E,MAAAqwE,iBAAAhkF,KAAA,CAAA2R,KAAA,uBAAAuiB,MAAAA,MAAAtgB,QAAAA,QAAAC,MAAAA,MAAAswE,UA9BA,WAEA,MAAA,CACAC,eAAA,WAEA,GAAAA,eAEA,OAAAjB,qBAAAtvE,MAAA60E,kBAAA/0E,QACAuC,SAAAmS,KAAAiyD,WAAA,KAAAzmE,MAAA40E,qBAEA,CAAA92E,KAAA,uBAAAuiB,MAAAA,MAAArK,IAAAy+D,yBAAAxI,UAAA,QAHA,GAQAuE,iBAAA,WAEA,GAAAA,iBAEA,OAAAlB,qBAAAtvE,MAAA80E,qBAAAh1E,QACAuC,SAAAmS,KAAAiyD,WAAA,KAAAzmE,MAAA40E,qBAEA,CAAA92E,KAAA,uBAAAuiB,MAAAA,MAAArK,IAAA0+D,4BAAAvmD,YAAA,QAHA,KAWAijD,SAAA,UAMA1xE,UAAA,oBAAA,CAAA,eAAA,SAAAmP,cAQA,MAAA,CACAlP,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAoyE,oBAGA,IAGA59D,KACA6L,MAIA00D,kBARA,IAAA3C,MAAA9kF,SAEA8kF,MAAA,GACA59D,KAAA49D,MAAA,GACA/xD,MAAArgB,MAAAwsE,QAEAxsE,MAAAg1E,oBAAAh1E,MAAAg1E,mBAAAh1E,MAAAg1E,mBAEAD,kBAAA/0E,MAAAi1E,sBAAA,yCAkBAn1E,MAAAqwE,iBAAAhkF,KAAA,CAAA2R,KAAA,oBAAAuiB,MAAAA,MAAAtgB,QAAAA,QAAAC,MAAAA,MAAAswE,UAhBA,WACA,MAAA,CACAC,eAAA,WAGA,GAFA,EAEAn3E,MAAAob,KAAAiyD,YAIA,MAAA,CAAA3oE,KAAA,oBAAAuiB,MAAAA,MAAArK,IAAA++D,kBAAA9I,UAAA,IAEAuE,iBAAA,WACAvlF,QAAAkF,yBAAAqkB,KAAAiyD,eAIA2K,SAAA,UAKA1xE,UAAA,0BAAA,CAAA,eAAA,SAAAmP,cASA,MAAA,CACAlP,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAoyE,oBAGA,IAGA59D,KACA6L,MAIA00D,kBARA,IAAA3C,MAAA9kF,SAEA8kF,MAAA,GACA59D,KAAA49D,MAAA,GACA/xD,MAAArgB,MAAAwsE,QAEAxsE,MAAAk1E,6BAAAl1E,MAAAk1E,4BAAAl1E,MAAAm1E,+BAEAJ,kBAAA/0E,MAAAk1E,4BAAA,+CAmBAp1E,MAAAqwE,iBAAAhkF,KAAA,CAAA2R,KAAA,0BAAAuiB,MAAAA,MAAAtgB,QAAAA,QAAAC,MAAAA,MAAAswE,UAjBA,WACA,IAAA8E,SAAAp1E,MAAAq1E,gCACAC,SAAA9gE,KAAAiyD,WAEA,MAAA,CACA8J,eAAA,WAEA,GADA,IACA33E,KAAAM,MAAAo8E,WAAA18E,KAAAM,MAAAk8E,WAGA,MAAA,CAAAt3E,KAAA,0BAAAuiB,MAAAA,MAAArK,IAAA++D,kBAAA9I,UAAA,IAEAuE,iBAAA,WACAvlF,QAAAkF,yBAAAqkB,KAAAiyD,eAIA2K,SAAA,UAKA1xE,UAAA,kBAAA,CAAA,eAAA,SAAAmP,cASA,MAAA,CACAlP,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAoyE,oBAGA,IAGA59D,KAEA6L,MAEAkwD,eACAC,iBAEAuE,kBACAQ,qBAGAC,aAdA,IAAApD,MAAA9kF,SAEA8kF,MAAA,GACA59D,KAAA49D,MAAA,GAEA/xD,MAAArgB,MAAAwsE,QAEA+D,kBAAAvwE,MAAA,yBAAAA,MAAAy1E,wBAAAz1E,MAAA01E,4BACAlF,mBAAAxwE,MAAA,0BAEA+0E,kBAAA/0E,MAAAy1E,wBAAA,iCACAF,qBAAAv1E,MAAA01E,0BACA11E,MAAA21E,2BAEAH,aAAA,IAAA5J,OAAA,wFAyCA9rE,MAAAqwE,iBAAAhkF,KAAA,CAAA2R,KAAA,kBAAAuiB,MAAAA,MAAAtgB,QAAAA,QAAAC,MAAAA,MAAAswE,UAvCA,WAEA,MAAA,CACAC,eAAA,WAEA,GAAAA,iBAAAtlF,QAAAkF,yBAAAqkB,KAAAiyD,YAKA,IAHA,IAAAmP,OAAAphE,KAAAiyD,WAAAT,MAAA,KAGArxE,EAAA,EAAAA,GAAAihF,OAAAtoF,OAAA,EAAAqH,IACA,IAAA6gF,aAAApP,KAAAwP,OAAAjhF,GAAA0Y,QAEA,OADA0nE,kBAAAvJ,OAAA3vD,OAAAk5D,kBAAAa,OAAAjhF,IACA,CAAAmJ,KAAA,kBAAAuiB,MAAAA,MAAArK,IAAA++D,kBAAA9I,UAAA,IAMAuE,iBAAA,WAEA,GAAAA,mBAAAvlF,QAAAkF,yBAAAqkB,KAAAiyD,YAKA,IAHA,IAAAmP,OAAAphE,KAAAiyD,WAAAT,MAAA,KAGArxE,EAAA,EAAAA,GAAAihF,OAAAtoF,OAAA,EAAAqH,IACA,IAAA6gF,aAAApP,KAAAwP,OAAAjhF,IAGA,OAFA4gF,qBAAA/J,OAAA3vD,OAAA05D,qBAAAK,OAAAjhF,IAEA,CAAAmJ,KAAA,kBAAAuiB,MAAAA,MAAArK,IAAAu/D,qBAAApnD,YAAA,MASAijD,SAAA,UAIA1xE,UAAA,2BAAA,CAAA,eAAA,SAAAmP,cAYA,MAAA,CACAlP,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAoyE,MAAAnL,qBAGA,IAKA5mD,MACAzyB,MAEA2iF,eACAC,iBAEAqF,0BACAC,6BAZA,IAAA1D,MAAA9kF,SAEA8kF,MAAA,GACAA,MAAA,GAEA/xD,MAAArgB,MAAAwsE,QACA5+E,MAAAoS,MAAA+1E,sBAEAxF,kBAAAvwE,MAAA,qCAAAA,MAAAg2E,oCAAAh2E,MAAAi2E,wCACAzF,mBAAAxwE,MAAA,sCAEA61E,0BAAA71E,MAAAg2E,oCAAA,uBACAF,6BAAA91E,MAAAi2E,sCAkCAn2E,MAAAqwE,iBAAAhkF,KAAA,CAAA2R,KAAA,2BAAAuiB,MAAAA,MAAAtgB,QAAAA,QAAAC,MAAAA,MAAAswE,UAhCA,WAEA,MAAA,CACAC,eAAA,WACA,GAAAA,iBAEAjB,qBAAAtvE,MAAAk2E,4BAAAp2E,QACAA,MAAA6kE,MAAA/2E,SACAkS,MAAA6kE,MAAAtkD,QAEA,MAAA,CAAAviB,KAAA,2BAAAuiB,MAAAA,MAAArK,IAAA6/D,0BAAA5J,UAAA,IAMAuE,iBAAA,WACA,GAAAA,mBAEAlB,qBAAAtvE,MAAAm2E,+BAAAr2E,QACAA,MAAA6kE,MAAA/2E,SACAkS,MAAA6kE,MAAAtkD,QAEA,MAAA,CAAAviB,KAAA,2BAAAuiB,MAAAA,MAAArK,IAAA8/D,6BAAA3nD,YAAA,MASAijD,SAAA,UEziDAnmF,QAAAC,OAAA,eAAA,IAGAD,QAAAC,OAAA,gBACAmpB,OAAA,kBAAA,WACA,OAAA,SAAA1V,MACA,OAAA6sE,OAAA7sE,MAAAxF,QAAA,YAAA,OAGAkb,OAAA,MAAA,WACA,OAAA,SAAA+hE,KACA,IAAAA,IAAA,MAAA,GAEA,IAMAC,QAAA3jB,KAAA3K,OANAl0D,MAAAuiF,IAAAr9E,WAAAsU,OAAAlU,QAAA,MAAA,IAEA,GAAAtF,MAAAjG,MAAA,UACA,OAAAwoF,IAKA,OAAAviF,MAAAvG,QACA,KAAA,GACA+oF,QAAA,EACA3jB,KAAA7+D,MAAA2F,MAAA,EAAA,GACAuuD,OAAAl0D,MAAA2F,MAAA,GACA,MAEA,KAAA,GACA68E,QAAAxiF,MAAA,GACA6+D,KAAA7+D,MAAA2F,MAAA,EAAA,GACAuuD,OAAAl0D,MAAA2F,MAAA,GACA,MAEA,KAAA,GACA68E,QAAAxiF,MAAA2F,MAAA,EAAA,GACAk5D,KAAA7+D,MAAA2F,MAAA,EAAA,GACAuuD,OAAAl0D,MAAA2F,MAAA,GACA,MAEA,QACA,OAAA48E,IASA,QALAC,QADA,IAAAA,QACA,GAKAA,SAAA,KAAA3jB,KAAA,MAFA3K,OAAAA,OAAAvuD,MAAA,EAAA,GAAA,IAAAuuD,OAAAvuD,MAAA,KAEA6T,UC5DApiB,QAAAC,OAAA,iBAAA,IACAorF,SAAA,WAAA,CAAA,WAEA11E,KAAA21E,KAAA,WACA,MAAA,IAGA31E,KAAAjV,YAAA,SAAA6qF,cACA,IAAAC,OAAAnnF,OAAAwE,SAAA4iF,SAAA,KAAApnF,OAAAwE,SAAA6iF,SAAArnF,OAAAwE,SAAA8iF,SACAC,cAAAJ,OAAAK,cAAArmF,QAAA,eAEA,OADAgmF,OAAAM,UAAA,EAAAF,eAAA,aAAAL,iBAKA50E,SAAA,YAAA,SAAArW,kBAAA,OAAAA,mBCfAN,QAAAC,OAAA,mBAAA,IACAkB,QAAA,iBAAA,CAAA,UAAA,SAAAoC,SAEA,MAAA,CACAkK,eAAA,WAEA,IAEA3C,IAFAihF,UAAAxoF,QAAAyoF,UAAAD,UACAE,SAAA,CAAAC,OAAA,UAAAC,OAAA,UAAAC,QAAA,WAAAC,GAAA,YACA,IAAAvhF,OAAAmhF,SACA,GAAAA,SAAAnhF,KAAAqwE,KAAA4Q,WACA,OAAAjhF,IAGA,MAAA,UCVA9K,QAAAC,OAAA,gCAAA,CAAA,cAEAD,QAAAC,OAAA,gCAAA,IAAAs1E,QAAA,8BAAA,CAAA,KAAA,aAAA,SAAAl0E,GAAA04C,yBAEA,MAAA,CACA46B,mBAAA,SAAA3pE,QAAAshF,WAAAl6E,UAAAG,gBACA,IAAAynC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,kCACA3B,KAAA,CACA8I,QAAAP,QACAmgC,WAAAmhD,WACAC,UAAAn6E,UACAo6E,QAAAj6E,kBASA,OALAwnC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,aCjBApwC,QAAAC,OAAA,qBAAA,CAAA,cAUAD,QAAAC,OAAA,qBAAA,IAAAs1E,QAAA,YAAA,CAAA,KAAA,aAAA,UAAA,SAAAl0E,GAAA04C,WAAAp2C,sBAEA,MAAA,CACAuU,qBAAA,WACA,IAAA8hC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,8BACA3B,KAAA,KAQA,OALAs3C,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEA73B,YAAA,SAAAR,gBACA,IAAAiiC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,+BACA3B,KAAAsV,iBAQA,OALAgiC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,aClDApwC,QAAAC,OAAA,qBAAA,CAAA,cAEAD,QAAAC,OAAA,qBAAA,IAAAs1E,QAAA,kBAAA,CAAA,KAAA,aAAA,SAAAl0E,GAAA04C,yBAmBA,MAAA,CACAyU,4BAAA,SAAAxjD,QAAAy/C,WAAAgiC,YAAAC,YAEA,IAAA1yC,SAAA34C,GAAA6uC,QAcA,OAzBA,SAAA+J,eAAAD,UACAD,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAoBAk2E,CAZA,IAAAl3E,mBACA,CACAG,OAAA,OACAxR,IAAA,2CACA3B,KAAA,CACAkiD,YAAA35C,QACA4hF,kBAAAniC,WACAoiC,YAAAJ,YACA3+B,kBAAA4+B,cAIA1yC,UACAA,SAAA5J,SAEAgmB,qBAAA,SAAAprD,QAAA8hF,gBACA,IAAA9yC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,+BACA3B,KAAA,CACA8I,QAAAP,QACA+hF,aAAAD,kBASA,OALA/yC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGAuwB,sBAAA,SAAAtmB,UAAAxxC,eAAAuxC,aACA,IAAAJ,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,gCACA3B,KAAA,CACAiK,YAAA0tC,YACAI,UAAAH,UACA2yC,SAAAnkF,kBASA,OALAkxC,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,aC3EApwC,QAAAC,OAAA,qBAAA,CAAA,cAKAD,QAAAC,OAAA,qBAAA,IAAAkB,QAAA,kBAAA,CAAA,KAAA,OAAA,aAAA,SAAAE,GAAAke,KAAAw6B,yBAIA,MAAA,CACAkY,iBAAA,SAAAg7B,QAAA7yC,YAAAvvC,KAAAqiF,UAAA36E,gBAEA,IAAAynC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,+BACA3B,KAAA,CACA8I,QAAA0hF,QACAvgF,YAAA,SAAA0tC,YAAA,KAAAA,YACA/uC,KAAA,SAAAR,KAAA,KAAAA,KACAsiF,UAAAD,UACAV,QAAAj6E,kBAUA,OANAwnC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,QAGAu3C,SAAA5J,SAEAihB,cAAA,SAAA47B,QAAAC,UAAA36E,gBAEA,IAAAynC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,4BACA3B,KAAA,CACA8I,QAAA0hF,QACAE,UAAAD,UACAV,QAAAj6E,kBAUA,OANAwnC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,QAGAu3C,SAAA5J,SAEAj2B,cAAA,SAAAyC,gBAAAC,YAAAzK,UAAAG,QAAA66E,YAAAzwE,aAAA8tC,gBAEA,IAAAzQ,SAAA34C,GAAA6uC,QAWA+J,eAAA,IAAAxkC,mBAAA,CACAG,OAAA,OACAxR,IAAA,yBACA3B,KAbA,CACA4qF,gBAAAzwE,gBACA0rB,YAAAzrB,YACA0vE,UAAAn6E,UACAo6E,QAAAj6E,QACAoyC,YAAAyoC,YACAE,aAAA3wE,aACA4wE,WAAA9iC,kBAcA,OANA1Q,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,cACA+qF,aAAA/qF,aAAAgU,KACAujC,SAAAp5C,QAAA4sF,gBAGAxzC,SAAA5J,SAEAuiB,kBAAA,SAAA86B,KAAAC,gBAEA,IAAA1zC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,4BACA3B,KAAA,CACA8I,QAAAkiF,KACAE,UAAAD,kBAUA,OANA3zC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,QAGAu3C,SAAA5J,aC3GApwC,QAAAC,OAAA,gBAAA,CAAA,cACAs1E,QAAA,cAAA,CAAA,KAAA,aAAA,SAAAl0E,GAAA04C,yBA+FA,MAAA,CACAnuC,WApEA,SAAAD,gBACA,IAAAquC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,2BACA3B,KAAA,CACAmrF,QAAAjiF,kBASA,OALAouC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAqDAnlC,kBA7CA,SAAA4iF,gBACA,IAAA7zC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,sCACA3B,KAAA,CACAqrF,WAAAD,kBASA,OALA9zC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SA8BA3kC,UApBA,SAAAD,MACA,GAAAA,KAAA,CAGA,GAAA,cAAAA,KAAAuiF,SAEA,MADA,8BAIAC,KA9EA,SAAAxiF,MAMA,IALA,IAAAyiF,MAAAziF,KAAA0iF,WACArjF,KAAAW,KAAAuiF,SAEAI,IAAAC,KAAAH,OACAI,WAAA,IAAAC,WAAAH,IAAA9rF,QACAqH,EAAA,EAAAA,EAAAykF,IAAA9rF,OAAAqH,IACA2kF,WAAA3kF,GAAAykF,IAAAI,WAAA7kF,GAIA,OAFA,IAAA8kF,KAAA,CAAAH,YAAA,CAAAxjF,KAAAA,OAqEA4jF,CAAAjjF,MACAkjF,KAAAhjE,IAAAijE,gBAAAX,MAGA,MAFA,qCAAAhiF,mBAAA0iF,YChFA1uF,QAAAC,OAAA,mBAAA,CAAA,cAUAD,QAAAC,OAAA,mBAAA,IAAAs1E,QAAA,cAAA,CAAA,KAAA,aAAA,SAAAl0E,GAAA04C,yBAqBA,MAAA,CACAhuC,QApBA,SAAAnD,gBACA,IAAAoxC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,wBACA3B,KAAA,CACA49B,MAAAz3B,kBASA,OALAmxC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,aC/BApwC,QAAAC,OAAA,qBAAA,CAAA,cAUAD,QAAAC,OAAA,qBAAA,IACAkB,QAAA,mBAAA,CAAA,KAAA,aAAA,SAAAE,GAAA04C,yBAGA,SAAA60C,eAAAh/E,KAEA,IAAA,IAAA8nB,QAAA9nB,IACA,CACA,IAAAhH,MAAAgH,IAAA8nB,MACA,iBAAA9uB,MAEAgmF,eAAAhmF,QAIA,EAAA,CAAA,sBAAA,sBAAA,uBAAApD,QAAAoK,IAAA8nB,SACA9nB,IAAA8nB,MAAA,OAKA,MAAA,CACAo8B,SAAA,SAAApJ,mBAAA0iC,YAAAr5B,WAAA86B,YAAAC,SAAAC,UAAAC,UAAAC,SAAAC,YAAA76B,WAAA54C,gBAEA,IAAAu+B,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,mBACA3B,KAAA,CACAoV,mBAAA6yC,mBACA/F,YAAAyoC,YACA+B,cAAAp7B,WACAq7B,YAAAP,YACAQ,SAAAP,SACAQ,UAAAP,UACAQ,UAAAP,UACAQ,SAAAP,SACAQ,YAAAP,YACAQ,WAAAr7B,WACAG,SAAA/4C,gBAEA1F,iBAAA,IAUA,OAPAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAmsF,eAAAnsF,KAAAgU,MACAujC,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGA+nB,eAAA,SAAAw3B,QAAAC,gBAEA,IAAA51C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,yBACA3B,KAAA,CACAotF,QAAAF,QACAG,mBAAAF,gBAEA75E,iBAAA,IAUA,OAPAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAmsF,eAAAnsF,KAAAgU,MACAujC,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGA+kB,gBAAA,SAAAi4B,YAAA2C,gBAEA,IAAA/1C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,0BACA3B,KAAA,CACAkiD,YAAAyoC,YACA4C,WAAAD,gBAEAh6E,iBAAA,IASA,OANAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGA45B,kBAAA,SAAAh/D,gBAEA,IAAAgvC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,4BACA3B,KAAA,CACAkiD,YAAA35C,gBAEA+K,iBAAA,IASA,OANAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGA0uB,QAAA,SAAAzkB,UAAAqc,KAAAu5B,OAAA71C,gBAEAw0C,eAAAl4B,MACA,IAAA1c,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,oBACA3B,KAAA,CACAytF,KAAAx5B,KACAy5B,OAAAF,OACA51C,UAAAA,UACA3tC,YAAA0tC,kBAUA,OANAL,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGAmmB,UAAA,SAAAlc,UAAAqc,KAAAu5B,OAAA71C,gBAEAw0C,eAAAl4B,MACA,IAAA1c,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,oBACA3B,KAAA,CACAytF,KAAAx5B,KACAy5B,OAAAF,OACA51C,UAAAA,UACA3tC,YAAA0tC,kBAUA,OANAL,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGAggD,gBAAA,SAAAh2C,YAAAi2C,gBAEA,IAAAr2C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,8BACA3B,KAAA,CACAiK,YAAA0tC,YACAk2C,SAAAD,gBAEAt6E,iBAAA,IASA,OANAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGA+0B,wBAAA,SAAA/qB,YAAAm2C,gBAEA,IAAAv2C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,kCACA3B,KAAA,CACAiK,YAAA0tC,YACAo2C,eAAAD,gBAEAx6E,iBAAA,IASA,OANAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGA43B,eAAA,SAAA5tB,YAAAqtB,KAAAjR,MAAAkR,OAAAC,gBAEA,IAAA3tB,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,yBACA3B,KAAA,CACAiK,YAAA0tC,YACAq2C,KAAAhpB,KACA/G,MAAAlK,MACAk6B,IAAAhpB,OACAipB,MAAAhpB,gBAEA5xD,iBAAA,IASA,OANAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGAs4B,wBAAA,SAAAtuB,YAAAwqB,MAAAgsB,OAAA9pB,gBAEA,IAAA9sB,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,mCACA3B,KAAA,CACAiK,YAAA0tC,YACAirB,0BAAAT,MACAY,2BAAAorB,OACAvpB,4BAAAP,kBAUA,OANA/sB,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGAgwB,cAAA,CACAl4D,IAAA,EACA0kD,GAAA,GACAtkB,YAAA,GACAuoD,SAAA,GACAC,SAAA,GACAL,KAAA,GACAM,OAAA,GACAtwB,SAAA,EACAuwB,WAAA,GACAr/B,QAAA,EACA74C,KAAA,GACAozC,MAAA,GACAD,eAAA,GACAglC,MAAA,IAGAh7B,oBAAA,SAAAjrD,gBAEA,IAAAgvC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,8BACA3B,KAAA,CACA8I,QAAAP,kBAUA,OANA+uC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGA2yB,qBAAA,SAAA1oB,UAAArvC,QAAAkmF,MAAA96D,OAAA+6D,eAAA/2C,aAEA,IAAAJ,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,+BACA3B,KAAA,CACA+3C,UAAAH,UACA9uC,QAAAP,QACA0B,YAAA0tC,YACA+b,YAAA+6B,MACA/uB,OAAA/rC,OACAgsC,OAAA+uB,kBAUA,OANAp3C,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,aCzVApwC,QAAAC,OAAA,0BAAA,CAAA,cAKAD,QAAAC,OAAA,0BAAA,IAAAkB,QAAA,mBAAA,wBAKA,IAAAiwF,OAAA,UAAA/sF,OAAA2nF,UAAAqF,UAAA,UAAAhtF,OAAA2nF,UAAAqF,SAAAhtF,OAAA2nF,UAAAqF,SAAA,QAEA,MAAA,CACAz9D,UAAA,WACA,OAAAw9D,QAGA/tE,eAAA,SAAAirC,KAIA,OAAAA,IAAAgjC,eAAAF,OAAA,CAAA/yE,MAAA,WAAAkzE,SAFA,UAAAH,OAAA,MAAA,SAKAj8C,cAAA,SAAAmZ,IAAA19B,QACA,OAAAtW,MAAAxM,SAAAwgD,IAAA19B,OAAAwgE,SAIA1iF,eAAA,SAAA8iF,KAAA5gE,QACA,IAAA4gE,MAAA,KAAAA,KAEA,MAAA,GAIA5iF,KAAA,IAAAjB,KAAA6jF,MACA,OAAAl3E,MAAAxM,SAAAc,KAAAgiB,OAAAwgE,SAGAt7C,sBAAA,SAAAwY,KACA,MAAA,iBAAA,MAGA,UAAA8iC,OACA9iC,IAAAA,IAAApgD,QAAA,QAAA,IAEA,UAAAkjF,SACA9iC,IAAAA,IAAApgD,QAAA,SAAA,IAAAA,QAAA,IAAA,OANAogD,QCvCAtuD,QAAAC,OAAA,gBAAA,CAAA,cAKAD,QAAAC,OAAA,gBAAA,IAAAkB,QAAA,cAAA,CAAA,KAAA,OAAA,aAAA,SAAAE,GAAAke,KAAAw6B,yBAGA,MAAA,CACA75B,wBAAA,SAAAk6B,gBACA,IAAAJ,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,eACA3B,KAAA,CACAoV,mBAAAuiC,kBASA,OALAL,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,aC/BApwC,QAAAC,OAAA,yBAAA,IACAkB,QAAA,yBAAA,CAAA,aAAA,SAAAC,YACA,IAAAqwF,qBAAA,GAEAlc,QAAA,CACAmc,iBAAA,SAAA7S,eACA4S,qBAAA5S,eAAAz9E,WAAAs4E,MAAAmF,gBAEAvrE,uBAAA,WACA,IAAAq+E,2BAAAphF,EAAA,sBAEAvQ,QAAAkF,yBAAAysF,6BACA3xF,QAAAmP,QAAAwiF,2BAAA95D,WAAA,SAAAxoB,MACAoiF,qBAAApiF,KAAA8mB,IAAA/0B,WAAAs4E,MAAArqE,KAAAuiF,cAIA7wF,gCAAA,SAAAmT,MACA,MAAA,CACApR,mBAAA,SAAA+uF,OAAArwC,kBAiCA,SAAAswC,cAAA59E,IACA,OALA69E,EAbA,SAAA79E,MAGA89E,aAAAP,uBACAlc,QAAAjiE,yBAGA,IAAAxE,OAAA2iF,qBAAAv9E,MAGA,OAAApF,QAAAymE,QAAAmc,iBAAAx9E,MAQA+9E,CAAA/9E,IAAA29E,SALAK,GAKA1wC,mBAJA0wC,GAAAC,cAAAC,MA3BA,SAAAtjF,OAAA0yC,kBACA,IAAA,IAAA93C,EAAA,EAAAA,EAAA83C,iBAAAn/C,OAAAqH,IACAoF,OAAAA,OAAAZ,QAAA,IAAAxE,EAAAoE,WAAA,IAAA0zC,iBAAA93C,IAEA,OAAAoF,OAuBAujF,CAAAN,EAAAG,IAAAH,EADA,IAAAA,EA5BA,IAAAC,aAAAhyF,QAAAkF,yBAoCA4J,OAAAgjF,cAAA59E,MAMA,OAHApF,OAAAA,QAAAgjF,cAAA,CAAA,qBAGAhjF,OAhCAZ,QAAA,YAAA,SAAAvL,MAAAm6D,QACA,OAAAyjB,OAAA+R,aAAAx1B,UA+BA+0B,QAGA38B,0BAAA,SAAAq9B,KAMA,OAAAhiF,EAAA,WAAA+wD,KAAAixB,KAAA7+E,WAMA,OAAA6hE,WAEAp0E,QAAA,kBAAA,CAAA,yBAAA,SAAAqxF,wBAEA,OAAAA,0BAEA/9E,UAAA,qBAAA,CAAA,YAAA,kBAAA,SAAAmC,UAAA9V,iBAEA,MAAA,CACA4T,SAAA,IACAxG,SAAA,EACA0G,KAAA,SAAAC,MAAAC,QAAAC,OAEAjU,gBAAA4wF,iBAAA58E,QAAApB,OAAA0O,SAEA3hB,YAAA,SAAAqU,QAAAC,OACA,OAAA6B,UAAAlW,YAAAqU,MAAA09E,iBAIAh+E,UAAA,kBAAA,CAAA,YAAA,yBAAA,SAAAmC,UAAA47E,wBAEA,MAAA,CACA99E,SAAA,IACAxG,SAAA,EACAib,aAAA,qBACAvU,KAAA,SAAAC,MAAAC,QAAAC,OAEAF,MAAA+pE,mBAAAC,cAAA6S,iBAAA58E,QAAApB,OAAA0O,SAEA3hB,YAAA,SAAAqU,QAAAC,OACA,OAAA6B,UAAAlW,YAAAqU,MAAA09E,aAEA9xF,WAAA,WACA,IAAA+xF,KAAA/8E,KACA+8E,KAAAC,QAAA,WACAD,KAAA7T,cAAA2T,6BAKA/9E,UAAA,aAAA,CAAA,YAAA,SAAAmC,WAEA,MAAA,CACAlC,SAAA,IACAxG,SAAA,EACAzN,YAAA,SAAAqU,QAAAC,OACA,OAAA6B,UAAAlW,YAAAqU,MAAAw2E,mBCzHAvrF,QAAAC,OAAA,mBAAA,CAAA,cAKAD,QAAAC,OAAA,mBAAA,IAAAkB,QAAA,iBAAA,CAAA,KAAA,aAAA,SAAAE,GAAA04C,yBAGA,MAAA,CACA/pC,UAAA,SAAAyU,gBACA,IAAAu1B,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,kBACA3B,KAAA,CACAC,iBAAA+hB,eAAA/hB,iBACAoN,WAAA2U,eAAA3U,cASA,OALAiqC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,QAGAu3C,SAAA5J,aCvBApwC,QAAAC,OAAA,kBAAA,CAAA,cAKAD,QAAAC,OAAA,kBAAA,IACAkB,QAAA,gBAAA,CAAA,KAAA,OAAA,aAAA,SAAAE,GAAAke,KAAAw6B,yBAGA,MAAA,CACAs5B,cAAA,SAAAroE,gBAEA,IAAAgvC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,wBACA3B,KAAA,CACA8I,QAAAP,kBAUA,OANA+uC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGA2/B,0BAAA,SAAA/kE,QAAA4nF,gBACA,IAAA54C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,oCACA3B,KAAA,CACA8I,QAAAP,QACA6nF,sBAAAD,kBASA,OALA74C,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGAs8B,iBAAA,SAAA1hE,gBAEA,IAAAgvC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,2BACA3B,KAAA,CACA8I,QAAAP,kBAUA,OANA+uC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGA88B,qBAAA,SAAAof,WAAAsG,gBAEA,IAAA54C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,+BACA3B,KAAA,CACA0oC,WAAAmhD,WACAuG,sBAAAD,kBAUA,OANA74C,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGA28B,gBAAA,SAAAD,gBAEA,IAAA9yB,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,0BACA3B,KAAA,CACAwrE,OAAAnB,kBAUA,OANA/yB,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGA49B,iBAAA,SAAArC,gBAEA,IAAA3xB,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,2BACA3B,KAAA,CACAuqE,aAAArB,kBAUA,OANA5xB,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGAo8B,oBAAA,WAEA,MAAA,CACAsB,QAAA,KACAglB,QAAA,KACApmF,YAAA,KACAqmF,aAAA,KACAC,cAAA,KACAC,eAAA,KACAC,YAAA,KACAC,YAAA,KACAhoD,WAAA,KACAioD,aAAA,KACAC,WAAA,KACA5jF,OAAA,GACA6jF,OAAA,KACAvlB,oBAAA,KACAV,mBAAA,KACAkmB,cAAA,KACAvmB,aAAA,GACAiB,OAAA,KACAulB,UAAA,KACAC,UAAA,KACA7nB,aAAA,KACA8nB,QAAA,EACA9mB,SAAA,KACAO,iBAAA,KACA/mD,UAAA,OAIAmsD,qBAAA,WAEA,MAAA,CACAP,gBAAA,KACAplB,GAAA,KACAuiB,UAAA,KACA1B,SAAA,EACAkmB,WAAA,KACA1lB,OAAA,KACAa,QAAA,KACA19B,WAAA,KACAo8B,WAAA,KACA1V,UAAA,WCzLA93D,QAAAC,OAAA,iBAAA,CAAA,cACAD,QAAAC,OAAA,iBAAA,IACAkB,QAAA,eAAA,CAAA,KAAA,aAAA,SAAAE,GAAA04C,yBAEA,IAAA65C,WAAA,GACAC,UACA,SAAAhhF,KAAAihF,OAAAC,KACA,IAAAn/B,IAAAm/B,KAAA,EACAC,KAAA,IAAArmF,MAAAS,UACAwlF,WAAA/gF,MAAA,CACApQ,KAAAqxF,OACAG,SAAAD,IACAD,WAAA,IAAAn/B,IAAA,EAAAo/B,IAAA,IAAAp/B,MAPAi/B,UAUA,SAAAhhF,MACA,IAAAmhF,KAAA,IAAArmF,MAAAS,UACA,OACA,IAAAR,OAAAioB,KAAA+9D,YAAApuF,QAAAqN,OAAA,IAAA+gF,WAAA/gF,MAAAkhF,aAAA,IAAAnmF,OAAAioB,KAAA+9D,YAAApuF,QAAAqN,OAAA+gF,WAAA/gF,MAAAkhF,WAAAC,IAEAJ,WAAA/gF,MAAApQ,OAIA,IAAAmL,OAAAioB,KAAA+9D,YAAApuF,QAAAqN,cACA+gF,WAAA/gF,MAEA,OAtBAghF,aAyBA,SAAAhhF,MACA,IAAAmhF,KAAA,IAAArmF,MAAAS,UAIA,OACA,IAAAR,OAAAioB,KAAA+9D,YAAApuF,QAAAqN,OAAA,IAAA+gF,WAAA/gF,MAAAkhF,aAAA,IAAAnmF,OAAAioB,KAAA+9D,YAAApuF,QAAAqN,OAAA+gF,WAAA/gF,MAAAkhF,WAAAC,KAIA,MAAA,CACApqE,wBAAA,SAAA9kB,gBACA,IAAAk1C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,kCAAAU,eAAA,IACAiR,iBAAA,IAiBA,OAdA89E,aAAA,2BACA75C,SAAAp5C,QAAAizF,UAAA,4BAGA95C,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAoxF,UAAA,0BAAApxF,KAAAgU,MACAujC,SAAAp5C,QAAA6B,KAAAgU,OAEA,SAAAhU,MACAu3C,SAAAj3C,OAAAN,KAAA4T,iBAIA2jC,SAAA5J,SAEA5lB,eAAA,SAAA1lB,WAAAovF,gBACA,IAAAl6C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,yBAAAU,WAAA,IAAAovF,eAAA,IACAn+E,iBAAA,IAWA,OARAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,OAEA,SAAAhU,MACAu3C,SAAAj3C,OAAAN,KAAA4T,iBAGA2jC,SAAA5J,aCzEApwC,QAAAC,OAAA,qBAAA,CAAA,cAUAD,QAAAC,OAAA,qBAAA,IAAAkB,QAAA,mBAAA,CAAA,KAAA,aAAA,UAAA,aAAA,SAAAE,GAAA04C,WAAAp2C,QAAAvC,yBAEA,MAAA,CACAqrB,oBAAA,SAAAi+B,mBAAAypC,gBACA,IAAAn6C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,8BACA3B,KAAA,CACAoV,mBAAA6yC,mBACA0pC,aAAAD,gBAEAp+E,iBAAA,IAQA,OALAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEA7f,qBAAA,SAAA8jE,QAAAF,gBACA,IAAAn6C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,+BACA3B,KAAA,CACAsK,QAAAsnF,QACAD,aAAAD,gBAEAp+E,iBAAA,IAQA,OALAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,KAAAwZ,qBAGA+pB,SAAA5J,SAEAzd,0BAAA,SAAA0hE,QAAAjiF,UAAAG,QAAAia,gBACA,IAAAwtB,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,oCACA3B,KAAA,CACAsK,QAAAsnF,QACA9H,UAAAn6E,UACAo6E,QAAAj6E,QACA+hF,SAAA9nE,gBAEAzW,iBAAA,IAQA,OALAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,KAAA89E,oBAGAv6C,SAAA5J,SAEAxhB,mBAAA,SAAAylE,QAAA3jE,cAAAg6B,mBAAA8pC,aAAAz6B,gBACA,IAAA/f,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,mCACA3B,KAAA,CACAgyF,SAAA,EACA1nF,QAAA,iBAAA,QACA,iBAAAsnF,QAAA,QAAAA,QAAAtnF,QAAA,EACA,iBAAA,QAAAsnF,QAAA,EACArnF,cAAA0jB,cACA68D,WAAA7iC,mBACA/9C,aAAA6nF,aACAE,SAAA36B,gBAEAhkD,iBAAA,IAQA,OALAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAlc,wBAAA,SAAAygE,SAAAjqC,mBAAA8pC,aAAAI,gBACA,IAAA56C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,wCACA3B,KAAA,CACAgyF,SAAAE,SACApH,WAAA7iC,mBACA/9C,aAAA6nF,aACAE,SAAAE,gBAEA7+E,iBAAA,IAQA,OALAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAljC,gBAAA,SAAAJ,gBACA,IAAAktC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,+BACA3B,KAAAqK,iBASA,OANAitC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACArB,WAAAoc,WAAA,2BAAA,IACAw8B,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAvf,oCAAA,SAAAwjE,QAAA3jE,cAAAg6B,mBAAAmqC,gBACA,IAAA76C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,8CACA3B,KAAA,CACAsK,QAAAsnF,QACArnF,cAAA0jB,cACA68D,WAAA7iC,mBACAoqC,SAAAD,gBAEA9+E,iBAAA,IAQA,OALAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEA0G,qBAAA,SAAAF,gBACA,IAAAoD,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,+BACA3B,KAAA,CACAs6B,kBAAA6Z,eACAm+C,aAAA,KASA,OALAh7C,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,aCnLApwC,QAAAC,OAAA,gCAAA,CAAA,cAUAD,QAAAC,OAAA,gCAAA,IAAAs1E,QAAA,8BAAA,CAAA,KAAA,aAAA,UAAA,SAAAl0E,GAAA04C,WAAAp2C,sBAMA,MAAA,CACA6wC,gBAAA,SAAAoC,gBACA,IAAAoD,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,kCACA3B,KAAA,CACAs6B,kBAAA6Z,gBAEA7gC,iBAAA,IAQA,OALAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAgF,gBAAA,SAAAr8B,OAAA0V,gBACA,IAAAurB,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,mCACA3B,KAAA,CACAuyF,kBAAAj8E,OACA27B,YAAAjmB,kBASA,OALAsrB,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,aCrDApwC,QAAAC,OAAA,0BAAA,CAAA,cAUAD,QAAAC,OAAA,+BAAA,IAAAs1E,QAAA,6BAAA,CAAA,KAAA,aAAA,UAAA,SAAAl0E,GAAA04C,WAAAp2C,sBAGA,MAAA,CACAikC,yBAAA,SAAAgP,kBAAAq+C,gBACA,IAAAj7C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,4CACAyR,OAAA,CAAA+gC,kBAAAA,kBAAAq+C,YAAAA,kBAQA,OALAl7C,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAmD,YAAA,SAAAD,YAAAsD,gBACA,IAAAoD,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,+BACAyR,OAAA,CAAAy9B,YAAAA,YAAAsD,kBAAAA,kBAQA,OALAmD,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAhB,6BAAA,SAAAwH,kBAAAs+C,gBACA,IAAAl7C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,uCACAyR,OAAA,CAAA+gC,kBAAAA,kBAAAs+C,UAAAA,kBAQA,OALAn7C,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAb,sBAAA,SAAA4lD,eAAA3jD,gBACA,IAAAwI,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,gCACA3B,KAAA,CACA2yF,eAAAD,eACAtlD,aAAA2B,kBASA,OALAuI,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAG,wBAAA,SAAAiB,eAAAoF,mBACA,IAAAoD,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,kCACAyR,OAAA,CAAA+gC,kBAAAA,mBACAn0C,KAAA+uC,iBAQA,OALAuI,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,aCvGApwC,QAAAC,OAAA,2BAAA,CAAA,cAEAs1E,QAAA,yBAAA,CAAA,KAAA,aAAA,mBAAA,SAAAl0E,GAAA04C,WAAAt6B,+BAMA,SAAA41E,aAAAC,MAAAt7E,KAEAs7E,MAAA71E,iBAAAq2B,sBAAAw/C,OAEA,IAAAC,MADAv7E,IAAAyF,iBAAAq2B,sBAAA97B,MACAs7E,MAEA,GAAAz/C,WAAA77B,KAAA67B,WAAAy/C,OACA,CAGA,IAFA,IAAA1xD,IAAA0xD,MAAAxnF,WACA0nF,KAAA,GACA9rF,EAAA,EAAAA,EAAAk6B,IAAAvhC,QAEA,MAAAuhC,IAAAl6B,GAFAA,IAIA8rF,MAAA,IAGAD,KADA1/C,WAAA2/C,MAAA,EACAF,MAAAt7E,IAEA,OAAA67B,WAAA0/C,MAGA,MAAA,CACAr6D,mBAAA,SAAA0b,eAAA6+C,gBAAA/kE,eACA,IAAAspB,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,6BACA3B,KAAA,CACAizF,gBAAAD,gBACAzoF,cAAA0jB,cACAqM,kBAAA6Z,gBAGA7gC,iBAAA,IAQA,OALAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEA7S,cAAA,SAAA7E,OACA,IACAi9D,SACAC,SAlDA,IAgDAl9D,MAAAhD,4BACAigE,SAAAl2E,iBAAAq2B,sBAAApd,MAAA9B,UACAg/D,SAAAn2E,iBAAAq2B,sBAAApd,MAAAlC,UACA,EAAAm/D,UAAA,EAAAC,WACAl9D,MAAAhC,UAAAk/D,SAAAD,YAGAn4D,YAAA,SAAA9E,MAAA2C,qBAAAw6D,iBAAAC,kBAAAC,cAEA,IAAAJ,SAAAl2E,iBAAAq2B,sBAAApd,MAAA9B,UACAo/D,WAAAv2E,iBAAAq2B,sBAAApd,MAAAhC,WACAk/D,SAAAn2E,iBAAAq2B,sBAAApd,MAAAlC,UAEAkC,MAAA7B,UADA,EAAA8+D,UAAA,EAAAK,WACAA,WAAAL,SAIA,EAAAC,UAAAG,aACAH,SAEA,GAIAj4D,0BAAA,SAAAjF,MAAArb,OAzEA,IA0EAqb,MAAAhD,4BAEAgD,MAAAhC,UAAA2+D,aAAA38D,MAAAoC,YAAApC,MAAAjC,aAEAmH,yBAAA,SAAAlF,MAAArb,OA9EA,IA+EAqb,MAAAjD,0BAEAiD,MAAA9B,SAAAy+D,aAAA38D,MAAAiC,WAAAjC,MAAA/B,YAEAmH,0BAAA,SAAAxP,QACA,IAAA2nE,YAAA,EAMA,OALA3nE,OAAAnf,QAAA,c,yNAKA8mF,aAEAj4D,wBAAA,SAAA1P,QACA,IAAAyP,WAAA,EAMA,OALAzP,OAAAnf,QAAA,c,qNAKA4uB,YAEAV,aAAA,SAAA/O,QACAA,OAAAnf,QAAA,Q,ufAOAmuB,oBAAA,SAAA44D,aAAA5nE,gBAEA,IAAA0rB,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,8BACA3B,KAAA,CACA0zF,qBAAAD,aACA96D,gBAAA9M,kBASA,OALAyrB,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,aC7HApwC,QAAAC,OAAA,4BAAA,CAAA,cASAs1E,QAAA,0BAAA,CAAA,KAAA,aAAA,SAAAl0E,GAAA04C,yBAGA,MAAA,CACAtsB,oBAAA,SAAAi9B,gBACA,IAAA1Q,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,8BACA3B,KAAA,CACAoV,mBAAA6yC,gBAEA30C,iBAAA,IAQA,OALAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAGAoG,wBAAA,SAAA4/C,WAAA1rC,gBACA,IAAA1Q,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,kCACA3B,KAAA,CACA4zF,WAAAD,WACAv+E,mBAAA6yC,gBAEA30C,iBAAA,IAQA,OALAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,aCnDApwC,QAAAC,OAAA,0BAAA,CAAA,cAUAD,QAAAC,OAAA,0BAAA,IAAAs1E,QAAA,wBAAA,CAAA,KAAA,aAAA,UAAA,SAAAl0E,GAAA04C,WAAAp2C,sBA4BA,SAAA2yF,yBAAAC,MAAAC,QAAAC,SACA,OAAAD,UAAAC,QAAAF,MACA,IAAAC,QAAA,QAAAD,MACA,SAAAA,MAEA,SAAAG,UAAAh0D,YAAAsB,cAAA3B,YACA,IAAAo0D,QAAAzyD,cAAA2yD,cACAH,QAAAxyD,cAAA4yD,gBAEAC,UAAAn0D,YADAsB,cAAA8yD,YACA,IAIAvtF,eAlBA,SAAAgtF,MAAAC,QAAAC,SACA,OAAAD,UAAAC,QAAAF,MACA,IAAAE,QAAA,MAAAF,MACA,KAAAA,MAaAQ,CAAA10D,WAAAm0D,QAAAC,SACA,IACA1b,MAAA,KACAic,YAAA5/E,SAAA7N,cAAA,GAAA,IAAA,EACA0tF,cAAAphD,WAAA,EAAAtsC,cAAAlH,OAAA,KAAAkH,cAAA,GAAA,OACA2tF,WAAA,EACAC,cAAA,EAYA,OAXA,EAAAH,aAAAA,YAAAH,UAAAx0F,SACA60F,WAAAL,UAAAG,aAAAI,QAEA,EAAAH,eAAA,EAAAD,YAAAH,UAAAx0F,SAGA80F,eAFAN,UAAA,EAAAG,aAAAI,OACAF,YACAD,eAKAX,0BAFAY,WADAF,aAAAH,UAAAx0F,OACAw0F,UAAAA,UAAAx0F,OAAA,GAAA+0F,OACAF,YAAAC,cACAX,QAAAC,SAEA,MAAA,CACAn3D,UAAA,SAAAsX,kBAAAy9C,QAAA3jE,gBACA,IAAAspB,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,4BACA3B,KAAA,CACAs6B,kBAAA6Z,kBACA7pC,QAAAsnF,QACArnF,cAAA0jB,gBAEA3a,iBAAA,IAQA,OALAgkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEA9N,mBAAA,SAAA0B,KAAAqzD,UAKA,OAHArzD,KAAApD,YADAy2D,SAAA,IAAA,IAEArzD,KAAAnD,WACAmD,KAAA1D,cAGAwC,oBAAA,SAAAkB,MAGA,OAFAA,KAAAjD,gBACAiD,KAAAhD,mBAGAyB,uBAAA,SAAAuB,KAAAtB,YACA,OAAAg0D,UAAAh0D,WAAAsB,KAAAA,KAAA3C,QAEAiD,0BAAA,SAAAN,UAAAtB,YACA,IAAA+zD,QAAAzyD,UAAA2yD,cACAH,QAAAxyD,UAAA4yD,gBAEAC,UAAAn0D,WADAsB,UAAA8yD,YACA,IAEA,OAAAR,yBADAO,UAAAA,UAAAx0F,OAAA,GAAA+0F,OACAZ,QAAAC,UAEA1zD,4BAAA,SAAAiB,KAAAtB,YACA,OAAAg0D,UAAAh0D,WAAAsB,KAAAA,KAAAszD,aAEA10D,2BAAA,SAAAX,IAAA+B,KAAAnB,MACA,IAAAZ,KAAA+B,KAAAuzD,aAAA,EACA,OAAAvzD,KAAAlD,SAOA,IAJA,IAAA02D,YAAAxzD,KAAA9C,YAEAu2D,UAAA50D,KADAmB,KAAAuzD,YACA,IACAG,iBAAA,EACAnuF,EAAA,EAAAA,EAAAkuF,UAAAp1F,OAAAkH,IAAA,CACA,GAAAkuF,UAAAluF,GAAA23B,aAAAs2D,YAAA,CACAE,iBAAAD,UAAAluF,GAAAouF,WACA,MAEAD,iBAAAD,UAAAluF,GAAAouF,WAEAC,IAAA5zD,KAAAlD,SACA+2D,KAAA7zD,KAAA/C,cACA,OAAA+C,KAAA8zD,mBACAF,IAAAC,MAAAH,iBAAAG,KACAD,IAAAF,kBAGAhyD,mBAAA,SAAAqyD,YAAAxpE,gBACA,IAAAyrB,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,6BACA3B,KAAA,CACAu1F,oBAAAD,YACAtzD,eAAAlW,kBASA,OALAwrB,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,atB9HApwC,QAAAC,OAAA,2BAAA,CAAA,cAUAD,QAAAC,OAAA,2BAAA,IAAAkB,QAAA,wBAAA,CAAA,KAAA,OAAA,aAAA,SAAAE,GAAAke,KAAAw6B,yBAGA,MAAA,CACAqM,kBAFA,GAGAV,sBAAA,SAAA0nC,gBACA,IAAAnzC,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,6BAAAgpF,eACAv3E,OAAA,KAEAmkC,SAAA34C,GAAA6uC,QAMA,OALA6J,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAkW,kBAAA,SAAA2xC,0BAAA7K,gBACA,IAAAnzC,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,4BAAA6zF,0BAAA,IAAA7K,eACAv3E,OAAA,KAEAmkC,SAAA34C,GAAA6uC,QAMA,OALA6J,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAwW,mBAAA,SAAAsxC,gBACA,IAAAj+C,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,2BACA3B,KAAAy1F,iBAGAl+C,SAAA34C,GAAA6uC,QAMA,OALA6J,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEA0W,sBAAA,SAAAqxC,eACA,IAAAn+C,SAAA34C,GAAA6uC,QAUA,OATA3wB,KAAApd,IAAA,gDAAAg2F,eACAvxF,KAAA,SAAAnE,KAAAD,OAAAtC,OAAAsB,SAEAw4C,SAAAp5C,SADA,KAGAm1E,MAAA,SAAAtzE,KAAAD,OAAAtC,OAAAsB,SAEAw4C,SAAAj3C,OADAN,QAGAu3C,SAAA5J,auBvGApwC,QAAAC,OAAA,oBAAA,CAAA,cAUAD,QAAAC,OAAA,oBAAA,IAAAkB,QAAA,iBAAA,CAAA,KAAA,OAAA,aAAA,aAAA,SAAAE,GAAAke,KAAAw6B,WAAA34C,yBAGA,MAAA,CACA67C,WAAA,SAAAmwC,YAAAgL,eACA,IAAAp+C,SAAA34C,GAAA6uC,QAeA,OANA6J,WAAAI,QARA,CACAvkC,OAAA,OACAxR,IAAA,6BACA3B,KAAA,CACAkiD,YAAAyoC,YACAiL,cAAAD,iBAGAxxF,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAIAujC,SAAA5J,SAEAmS,wBAAA,SAAA6qC,aACA,IAAApzC,SAAA34C,GAAA6uC,QAaA,OALA6J,WAAAI,QAPA,CACAvkC,OAAA,OACAxR,IAAA,kCACA3B,KAAA,CACAkiD,YAAAyoC,eAGAxmF,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAoS,YAAA,SAAAc,gBACA,IAAAtJ,SAAA34C,GAAA6uC,QACA+J,eAAA,CACArkC,OAAA,OACAxR,IAAA,qBACA3B,KAAA,CACAk6C,yBAAA2G,eAAA3G,yBACA6B,SAAA8E,eAAA9E,SACA8B,QAAAgD,eAAAhD,UAQA,OALAvG,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEA2S,kCAAA,SAAAqqC,aACA,IAAApzC,SAAA34C,GAAA6uC,QAaA,OALA6J,WAAAI,QAPA,CACAvkC,OAAA,OACAxR,IAAA,mCACA3B,KAAA,CACAkiD,YAAAyoC,eAGAxmF,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEA+M,qBAAA,SAAAiwC,YAAAkL,WAAAlmF,UAAAG,QAAAqwC,UAAAC,UAAAuR,WACA,IAAApa,SAAA34C,GAAA6uC,QAmBA,OALA6J,WAAAI,QAbA,CACAvkC,OAAA,OACAxR,IAAA,4BACA3B,KAAA,CACAkiD,YAAAyoC,YACAmL,WAAAD,WACA/L,UAAAn6E,UACAo6E,QAAAj6E,QACAimF,UAAA51C,UACA61C,SAAArkC,UACAskC,UAAA71C,aAGAj8C,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAiM,aAAA,SAAAjC,YAAAo6C,aAAAxpF,QAAA2tF,eACA,IAAA3+C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,+BACA3B,KAAA,CACAiK,YAAA0tC,YACAztC,aAAA6nF,aACA7vC,YAAA35C,WAeA,OAXA+uC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAA,KAAAgU,KAAAmiF,YAEAD,eAAAv3F,WAAAoc,WAAA,sBAAA,CAAA9Q,YAAA0tC,YAAAztC,aAAA6nF,aAAA7vC,YAAA35C,UACAgvC,SAAAp5C,QAAA6B,KAAAgU,OAEAujC,SAAAj3C,OAAAN,KAAAgU,QAIAujC,SAAA5J,SAEA3jC,eAAA,SAAA2tC,YAAAo6C,aAAAxpF,gBACA,IAAAgvC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,iCACA3B,KAAA,CACAiK,YAAA0tC,YACAztC,aAAA6nF,aACA7vC,YAAA35C,kBAUA,OANA+uC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACArB,WAAAoc,WAAA,wBAAA,IACAw8B,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEA8M,aAAA,SAAA9C,YAAAo6C,aAAAxpF,SACA,IAAAgvC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,+BACA3B,KAAA,CACAiK,YAAA0tC,YACAztC,aAAA6nF,aACA7vC,YAAA35C,WAeA,OAXA+uC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAA,KAAAgU,KAAAmiF,YAEAx3F,WAAAoc,WAAA,sBAAA,CAAA9Q,YAAA0tC,YAAAztC,aAAA6nF,aAAA7vC,YAAA35C,UACAgvC,SAAAp5C,QAAA6B,KAAAgU,OAEAujC,SAAAj3C,OAAAN,KAAAgU,QAIAujC,SAAA5J,SAEAxjC,cAAA,SAAAwtC,YAAAo6C,aAAAxpF,gBACA,IAAAgvC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,iCACA3B,KAAA,CACAiK,YAAA0tC,YACAztC,aAAA6nF,aACA7vC,YAAA35C,kBAUA,OANA+uC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACArB,WAAAoc,WAAA,wBAAA,IACAw8B,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,SAEAsU,wBAAA,SAAAtK,YAAAo6C,aAAAxpF,gBACA,IAAAgvC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,sCACA3B,KAAA,CACAiK,YAAA0tC,YACAztC,aAAA6nF,aACA7vC,YAAA35C,kBAaA,OATA+uC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAA,KAAAgU,KAAAmiF,WACA5+C,SAAAp5C,QAAA6B,KAAAgU,MAEAujC,SAAAj3C,OAAAN,KAAAgU,QAIAujC,SAAA5J,SAEAwK,sBAAA,SAAAi+C,gBACA,IAAA7+C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,wBACA3B,KAAA,CACAq2F,aAAAD,kBAQA,OAJA9+C,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAEAujC,SAAA5J,SAEA6K,yBAAA,SAAA49C,SAAA7tF,QAAAy/C,gBACA,IAAAzQ,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,2BACA3B,KAAA,CACAq2F,aAAAD,SACAl0C,YAAA35C,QACA6M,mBAAA4yC,kBAQA,OAJA1Q,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAEAujC,SAAA5J,aChQApwC,QAAAC,OAAA,sBAAA,CAAA,cAEAD,QAAAC,OAAA,sBAAA,IAAAkB,QAAA,oBAAA,CAAA,KAAA,aAAA,OAAA,aAAA,SAAAE,GAAAD,WAAAme,KAAAw6B,yBAwHA,SAAAg/C,oBAEA,MAAA,GAAAxqF,MAAAR,KAAAkQ,SAAA+6E,aAAAx8E,KAAA,CAAA/I,MAAA,iBAgBA,SAAAwlF,gBAAAC,QAEA93F,WAAA+3F,gBAIA/3F,WAAAg4F,iBACAC,WAAA,kBAAA,qBAAAj4F,WAAAg4F,gBACAC,WAAA,QAAA,qBAAAj4F,WAAAg4F,iBAEAC,WAAA,kBAAA,qBAAAj4F,WAAA+3F,gBACAE,WAAA,QAAA,qBAAAj4F,WAAA+3F,iBARA/3F,WAAA+3F,eAAA,GAWAG,iBAAA,kBAAA,qBAAA,IAAAJ,OAAA93F,WAAA+3F,gBACAG,iBAAA,QAAA,qBAAA,IAAAJ,OAAA93F,WAAA+3F,gBAGA,SAAAG,iBAAAC,UAAA52F,MAAAiG,MAAA4wF,YAEA,IAAAC,SAAAV,oBACA,GAAA/4F,QAAAkF,yBAAAu0F,UAUAz2F,OAAAJ,SAAAC,KAAA,kCAAA,cARA,IADA,IAAA62F,MAAAD,SAAAE,UAAAF,SAAAC,MACAhwF,EAAA,EAAAA,EAAAgwF,MAAAr3F,SAAAqH,EACA1J,QAAAkF,yBAAAw0F,MAAAhwF,GAAA2U,QAAAq7E,MAAAhwF,GAAA2U,MAAAk7E,aAAA52F,QACA+2F,MAAAhwF,GAAA2U,MAAAk7E,WAAA3wF,MACA4wF,WAAAt4F,KAAA,CAAAw4F,MAAAhwF,GAAAkwF,aAAAF,MAAAhwF,GAAA2U,MAAAk7E,cASA,SAAAF,WAAAE,UAAA52F,MAAA62F,YAEA,IAAAC,SAAAV,oBACA,IAAA/4F,QAAAkF,yBAAAu0F,UAEA,IADA,IAAAC,MAAAD,SAAAE,UAAAF,SAAAC,MACAnwF,EAAA,EAAAA,EAAAiwF,WAAAn3F,OAAAkH,IACA,IAAA,IAAAG,EAAA,EAAAA,EAAAgwF,MAAAr3F,SAAAqH,EACA1J,QAAAkF,yBAAAw0F,MAAAhwF,GAAA2U,QAAAq7E,MAAAhwF,GAAAkwF,eAAAJ,WAAAjwF,GAAA,IAAAmwF,MAAAhwF,GAAA2U,MAAAk7E,aAAAC,WAAAjwF,GAAA,KACAmwF,MAAAhwF,GAAA2U,MAAAk7E,WAAA52F,OAoCA,MAAA,CACAwF,gBA7FA,SAAA+wF,QAEA93F,WAAAg4F,gBAIAC,WAAA,kBAAA,qBAAAj4F,WAAAg4F,gBACAC,WAAA,QAAA,qBAAAj4F,WAAAg4F,iBAJAh4F,WAAAg4F,eAAA,GAMAE,iBAAA,kBAAA,qBAAA,IAAAJ,OAAA93F,WAAAg4F,gBACAE,iBAAA,QAAA,qBAAA,IAAAJ,OAAA93F,WAAAg4F,iBAoFAH,gBAAAA,gBACAjwF,cAAA,SAAAvE,SAEA,IAAAu1C,SAAA34C,GAAA6uC,QAaA,OAZAjqC,QAAAC,MAAA,cACA+yF,gBAAAhzF,QAAAC,MAAA,aAAA2zF,aAAAzxF,cACA4xC,SAAAp5C,QAAAqF,QAAAC,MAAA,eA9NA,SAAAzB,gBAEA,IAAAu1C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,qBACA3B,KAAA,CACAq3F,cAAAr1F,kBAUA,OANAs1C,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,QA8MA2pD,CAAAt1F,SAAAmC,KAAA,SAAAnE,uBAEAu3F,sBAAAh6F,QAAA65C,SAAA3uC,KAAA+C,MAAAxL,wBAAAw3F,sBACAhB,gBAAAe,sBAAAH,aAAAzxF,cACAnC,QAAAC,MAAA,YAAA8zF,uBACAhgD,SAAAp5C,QAAAo5F,yBAGAhgD,SAAA5J,SAEA7rC,WAAA,WAEA,IACA21F,KACAh1E,QAFA80B,SAAA34C,GAAA6uC,QAEA94B,SAAA,GAAA,IAWA,OAxLA,WAEA,IAAA4iC,SAAA34C,GAAA6uC,QAGA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,eACAyR,OAAA,KAUA,OAPAkkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAIAujC,SAAA5J,QA4JA+pD,GAAAvzF,KAAA,SAAAnE,MAGAw2F,iBADAiB,KAAAz3F,KAAAoE,eACAuzF,qBACAl1E,QAAA,GAAA9N,SAAA8iF,KAAAG,QAAA,IAAA,IACAj5F,WAAA8jB,QAAAA,QACA80B,SAAAp5C,QAAA6B,QAGAu3C,SAAA5J,SAEAtoC,uBAAA,WAEA,IAAAkyC,SAAA34C,GAAA6uC,QAEA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,MACAxR,IAAA,wCACAyR,OAAA,KAWA,OARAkkC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAw2F,gBAAAx2F,KAAAgU,KAAA5P,cAAAuzF,qBACApgD,SAAAp5C,QAAA6B,KAAAgU,QAIAujC,SAAA5J,SAEAjkC,qBAAA,SAAAmuF,cAAAC,aAEA,IAAAvgD,SAAA34C,GAAA6uC,QAOA,OApQA,SAAAoqD,cAAAC,gBAEA,IAAAvgD,SAAA34C,GAAA6uC,QAuCA,OArCAoqD,cAAAjiF,WAAA,EAEA2hC,SAAAp5C,QAAA,CACAsH,IAAA,EACAia,KAAA,GACAiE,UAAA,KACA/a,KAAA,KACAyuF,cAAA,KAUA7/C,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,4BACA3B,KAAA,CACAq3F,cAAAQ,cACAE,YAAAD,eACA51C,aAZA81C,eAAAr5F,WAAA4jF,YAAAxgF,SAAApD,WAAA4jF,YAAAxgF,QAAAE,SAAAtD,WAAA4jF,YAAAxgF,QAAAE,QAAA6D,qBACAnH,WAAA4jF,YAAAxgF,QAAAE,QAAA6D,qBAAA,MACAkyF,eAAAlvF,QAAA,KAWAgiF,WAVAkN,eAAAA,eAAA/tF,YAAA,QAcAqtC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,KAAAikF,sBAKA1gD,SAAA5J,QAsNAuqD,CAAAL,cAAAC,aAAA3zF,KAAA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAA0f,QAGA63B,SAAA5J,SAEAyf,aApMA,SAAAq9B,UAAA36E,QAAA+c,SAAA2/B,YAAAC,eAAAC,eAAAyrC,cAAA5vF,QAAA6vF,gBAEA,IAAA7gD,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,6BACA3B,KAAA,CACA0qF,UAAAD,UACAV,QAAAj6E,QACA6b,SAAAkB,SACAwrE,YAAA7rC,YACA8rC,eAAA7rC,eACA8rC,eAAA7rC,eACA8rC,cAAAL,cACArvF,QAAAP,QACAkwF,UAAAL,eACAM,QAAA,OAUA,OAPAphD,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAIAujC,SAAA5J,aCjIApwC,QAAAC,OAAA,qBAAA,CAAA,cACAs1E,QAAA,mBAAA,CAAA,KAAA,aAAA,SAAAl0E,GAAA04C,yBAGA,SAAAqhD,gBAAAvN,gBACA,IAAA7zC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,oBACA3B,KAAA,CACAqrF,WAAAD,kBASA,OALA9zC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,QAQA,SAAAq+C,WAAAr9D,MAMA,IALA,IAAA68D,MAAA78D,KAAAiqE,YACAxwF,KAAAumB,KAAA28D,SAEAI,IAAAC,KAAAH,OACAI,WAAA,IAAAC,WAAAH,IAAA9rF,QACAqH,EAAA,EAAAA,EAAAykF,IAAA9rF,OAAAqH,IACA2kF,WAAA3kF,GAAAykF,IAAAI,WAAA7kF,GAIA,OAFA,IAAA8kF,KAAA,CAAAH,YAAA,CAAAxjF,KAAAA,OAwFA,MAAA,CACAmmB,aA5CA,SAAAgJ,OAGAohE,gBAFAphE,MAAA,iBAEApzB,KAAA,SAAAwqB,MACA,IAKAhtB,IALAgtB,OACAhtB,IAAA,qCAEA4pF,KAAAS,WAAAr9D,MACAs9D,KAAAhjE,IAAAijE,gBAAAX,MACA5pF,IAJA,qCAIA4H,mBAAA0iF,MAEAn+E,EAAA,SAAA+E,KAAA,MAAAlR,SAkCA2sB,aAvBA,SAAAiJ,MAAApJ,QAGAwqE,gBAFAphE,MAAA,6BAAApJ,QAEAhqB,KAAA,SAAAwqB,QACA,IAMAs9D,KANAt9D,SACA48D,KAAAS,WAAAr9D,QACAnT,SAAAq9E,aAEAj3F,OAAA2nF,UAAAuP,WAAAvN,KAAA58D,OAAAoqE,WAtEA,SAAAC,QAAAC,UACA,IAAApqE,aAAArT,SAAA09E,cAAA,KACArqE,aAAAsqE,OAUAtqE,aAAAuqE,KAAAJ,QACAnqE,aAAAoQ,OAAA,UAGA,aAAApQ,eACAA,aAAAwqE,SAAAJ,WAIAz9E,SAAAw/D,MAAAx/D,SAAA0/D,iBAAAoe,YAAAzqE,cACAA,aAAAsqE,QACAtqE,aAAA0qE,WAAAC,YAAA3qE,gBAEAjtB,OAAA63F,MAAA73F,QACAo3F,QAAA1gB,MAAA,KAAA,KAAA12E,OAAAwE,SAAAgzF,KAAA9gB,MAAA,KAAA,KAGAohB,cAAA,IAAAV,QAAAj2F,QAAA,KAAA,IAAA,IACAi2F,QAAAA,QAAAvtF,QAAA,MAAAiuF,aAAA,OAEA93F,OAAAC,KAAAm3F,QAAA,YA0CAK,CAFApN,KAAAhjE,IAAAijE,gBAAAX,MACA58D,OAAAoqE,UAIA9vE,IAAA0wE,gBAAA1N,eC7GA1uF,QAAAC,OAAA,mBAAA,CAAA,cAEAD,QAAAC,OAAA,mBAAA,IAAAkB,QAAA,uBAAA,CAAA,KAAA,aAAA,OAAA,aAAA,SAAAE,GAAAD,WAAAme,KAAAw6B,yBAGA,MAAA,CACAhuC,QAAA,SAAAtJ,gBACA,IAAAu3C,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,wBACA3B,KAAAA,iBAQA,OALAs3C,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J,aC3BApwC,QAAAC,OAAA,wBAAA,CAAA,cAEAD,QAAAC,OAAA,wBAAA,IAAAs1E,QAAA,qBAAA,CAAA,KAAA,aAAA,SAAAl0E,GAAA04C,yBAGA,SAAAI,QAAAF,eAAAD,UAEAD,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAeA,MAAA,CACAs0C,mBAAA,SAAAL,oBAEA,IAAA1Q,SAAA34C,GAAA6uC,QAYA,OADAiK,QAVA,IAAA1kC,mBACA,CACAG,OAAA,OACAxR,IAAA,4BACA3B,KAAA,CACAoV,mBAAA6yC,oBAEA30C,iBAAA,IAGAikC,UACAA,SAAA5J,SAEAuY,aAAA,SAAAyuB,UAEA,IAAAp9B,SAAA34C,GAAA6uC,QAYA,OADAiK,QAVA,IAAA1kC,mBACA,CACAG,OAAA,OACAxR,IAAA,+BACA3B,KAAA,CACAkiD,YAAAyyB,UAEArhE,iBAAA,IAGAikC,UACAA,SAAA5J,SAEAkd,gBAAA,WA6DA,MA3DA,CACAqE,QAAA,EACA0qC,gBAAA,GACAC,OAAA,GACAC,QAAA,GACAnwC,SAAA,GACAE,UAAA,GACAD,mBAAA,GACAmwC,eAAA,EACArwC,kBAAA,GACAswC,cAAA,EACAC,WAAA,GACAC,YAAA,GACAC,SAAA,KACAC,oBAAA,EACAC,sBAAA,KACAC,kBAAA,KACAC,uBAAA,KACAC,mBAAA,KACAC,UAAA,GACA3xF,QAAA,EACAoB,aAAA,GACAwwF,iBAAA,GACAC,IAAA,GACA5wC,IAAA,GACA6wC,OAAA,GACA9wC,aAAA,GACA+wC,WAAA,GACAC,UAAA,GACA30C,UAAA,GACA40C,SAAA,GACAt1F,KAAA,EACAu1F,UAAA,GACA50C,SAAA,GACA60C,MAAA,GACAxxC,MAAA,GACAD,eAAA,GACA0xC,WAAA,EACAC,yBAAA,EACAC,QAAA,GACA3yC,kBAAA,EACA4yC,0BAAA,EACAC,MAAA,GACAt1C,WAAA,EACA3+C,iBAAA,EACAk0F,eAAA,EACAC,sBAAA,EACAC,mBAAA,KACAC,OAAA,GACAlzC,kBAAA,GACAmzC,iBAAA,EACAh4E,UAAA,GACA2lC,WAAA,KACAC,mBAAA,KACAJ,YAAA,EACAtiD,4BAAA,GACA+0F,yBAAA,GACAC,aAAA,KAIAhzC,YAAA,SAAAizC,iBAEA,IAAAvkD,SAAA34C,GAAA6uC,QAWA,OAvHA,SAAA+J,eAAAD,UAEAD,WAAAY,0BAAAV,gBAAArzC,KACA,SAAAnE,MAEAu3C,SAAAp5C,QAAA6B,KAAAgU,QAiHAk2E,CATA,IAAAl3E,mBACA,CACAG,OAAA,OACAxR,IAAA,sBACA3B,KAAA,CACA4G,gBAAAk1F,mBAIAvkD,UACAA,SAAA5J,SAEArnB,mBAAA,SAAA7O,SAEA,IAAA8/B,SAAA34C,GAAA6uC,QAWA,OADAiK,QATA,IAAA1kC,mBACA,CACAG,OAAA,OACAxR,IAAA,6BACA3B,KAAA,CACA8qF,WAAArzE,WAIA8/B,UACAA,SAAA5J,aCrJApwC,QAAAC,OAAA,iCAAA,CAAA,cAEAD,QAAAC,OAAA,iCAAA,IAAAs1E,QAAA,+BAAA,CAAA,KAAA,aAAA,SAAAl0E,GAAA04C,yBAEA,MAAA,CACAq7B,oBAAA,SAAApqE,QAAAoH,UAAAG,gBACA,IAAAynC,SAAA34C,GAAA6uC,QACA+J,eAAA,IAAAxkC,mBACA,CACAG,OAAA,OACAxR,IAAA,mCACA3B,KAAA,CACA8I,QAAAP,QACAuhF,UAAAn6E,UACAo6E,QAAAj6E,kBASA,OALAwnC,WAAAI,QAAAF,gBAAArzC,KACA,SAAAnE,MACAu3C,SAAAp5C,QAAA6B,KAAAgU,QAGAujC,SAAA5J","file":"ARCustWeb.min.js","sourcesContent":["/**\r\n * Created by rhampton on 3/6/14.\r\n */\r\n\r\nangular.module('petronetApp', [\r\n 'core.providers',\r\n 'kendo.directives',\r\n 'services.localizations',\r\n 'ngRoute',\r\n 'ngAnimate',\r\n 'pnContactUs',\r\n 'pnLogin',\r\n 'pnHeader',\r\n 'pnHome',\r\n 'pnAdmin',\r\n 'pnAccountReports',\r\n 'pnAccountPayments',\r\n 'pnFuelCardsCards',\r\n 'pnFuelCardsPrices',\r\n 'pnFuelCardsTransactions',\r\n 'pnOrders',\r\n 'pnODPricing',\r\n 'pnPaperwork',\r\n 'pnDocuments',\r\n 'pnDocAccount',\r\n 'pnDateSelector',\r\n 'pnReportSettings',\r\n 'pnPages',\r\n 'core.directives',\r\n 'core.filters',\r\n 'core.enums',\r\n 'core.constants',\r\n 'core.error',\r\n 'core.objects',\r\n 'core.security',\r\n 'services.browser',\r\n 'services.bulkFuelPriceNotices',\r\n 'services.encrypt',\r\n 'services.FuelCards',\r\n 'services.contactUs',\r\n 'services.documents',\r\n 'services.home',\r\n 'services.globalizations',\r\n 'services.orders',\r\n 'services.paperwork',\r\n 'services.paperworkMeters',\r\n 'services.paperworkTanks',\r\n 'services.paperworkDeliveries',\r\n 'services.paperworkDealerForms',\r\n 'services.paperworkReports',\r\n 'services.payments',\r\n 'services.paymentAccounts',\r\n 'services.userAccounts',\r\n 'services.warehousePriceNotices',\r\n 'services.WebProfile',\r\n 'services.customers',\r\n 'services.pages',\r\n 'services.logging',\r\n 'services.reporting',\r\n 'services.edoc',\r\n 'pdi.validate',\r\n 'pdi.extensions',\r\n 'angulartics',\r\n 'angulartics.google.analytics'\r\n])\r\n .config(function ($routeProvider, $httpProvider, $locationProvider, templateProvider)\r\n {\r\n // as of angularjs 1.6.0 they append ! to hashbang urls which causes undesired behavior\r\n // reset that functionlity by adding this hashPrefix change\r\n $locationProvider.hashPrefix('');\r\n\r\n $routeProvider\r\n .when(\"/\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"LogIn\"),\r\n controller: 'loginCtrl',\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"LoginLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Alerts/BalanceAlertSettings\",\r\n {\r\n templateUrl: \"account/alerts/balanceAlertSettings/balanceAlertSettings.tpl.html\",\r\n controller: \"VerifyPaymentCtrl\"\r\n }\r\n )\r\n .otherwise({\r\n templateUrl: templateProvider.getTemplate(\"Home\"),\r\n controller: \"homeCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"HomeLocalization\");\r\n }\r\n }\r\n });\r\n\r\n // Add our custom Interceptors\r\n $httpProvider.interceptors.push('httpInterceptor');\r\n $httpProvider.interceptors.push('AuthInterceptor');\r\n\r\n // For backwards compatibility to old browsers, set this to false\r\n //$locationProvider.html5Mode(false).hashPrefix('!');\r\n })\r\n .factory('httpInterceptor', function ($rootScope, $q, $injector, localizationSvc)\r\n {\r\n\r\n return {\r\n\r\n request: function (config)\r\n {\r\n\r\n config.headers = config.headers || {};\r\n\r\n\r\n if ($rootScope.loginInfo && $rootScope.loginInfo.userIsImpersonated) {\r\n config.headers['customerweb-user-id'] = $rootScope.loginInfo.userId;\r\n config.headers['customerweb-user-key'] = $rootScope.loginInfo.userKey;\r\n config.headers['customerweb-user-type'] = $rootScope.loginInfo.userType;\r\n config.headers['customerweb-impersonator-id'] = $rootScope.loginInfo.impersonatorUserId;\r\n config.headers['customerweb-impersonator-key'] = $rootScope.loginInfo.impersonatorUserKey;\r\n config.headers['customerweb-impersonator-type'] = $rootScope.loginInfo.impersonatorUserType;\r\n }\r\n\r\n // Show our ajax spinner\r\n $rootScope.showLoader = true;\r\n\r\n return config || $q.when(config);\r\n },\r\n\r\n response: function (response)\r\n {\r\n\r\n var $http = $http || $injector.get('$http');\r\n\r\n // If all the pending http requests are done or\r\n // the user is not authenticated\r\n if ($http.pendingRequests.length < 1 || $rootScope.isAuthenticated === false)\r\n {\r\n // Hide the ajax spinner\r\n $rootScope.showLoader = false;\r\n }\r\n\r\n return response || $q.when(response);\r\n\r\n },\r\n\r\n responseError: function (response)\r\n {\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"AppLocalization\");\r\n switch (response.status)\r\n {\r\n case 500:\r\n if (response.data.ExceptionMessage && response.data.ExceptionMessage.match(\"UNIQUE KEY constraint\"))\r\n {\r\n if (response.data.ExceptionMessage.match(\"AR_Web_Settings\"))\r\n $rootScope.notifier.show('' + localStrings.getLocalizedString(\"SaveFailed\") + '
' + localStrings.getLocalizedString(\"UniqueNameRequired\"), 'error');\r\n else\r\n $rootScope.notifier.show('' + localStrings.getLocalizedString(\"SaveFailed\") + '
' + localStrings.getLocalizedString(\"CannotInsertDuplicate\"), 'error');\r\n }\r\n\r\n if (response.data.ExceptionMessage && response.data.ExceptionMessage.match(\"Timeout expired\"))\r\n {\r\n $rootScope.notifier.show(localStrings.getLocalizedString(\"ConnectionTimedOut\"), 'error');\r\n }\r\n }\r\n\r\n // An error has occurred, hide the ajax spinner\r\n $rootScope.showLoader = false;\r\n\r\n return $q.reject(response);\r\n\r\n }\r\n\r\n };\r\n\r\n })\r\n .controller(\"indexCtrl\", function ($scope, $http, $q, $rootScope, Authentication, WebUserSvc, $location,\r\n WebFunctionGroups, WebFunctions, $window, BrowserService, WebProfileService, $timeout, $filter, encryptData,\r\n WebFunctionModules, PaymentService, PaperworkService, localizationSvc, LoggingService, EdocService)\r\n {\r\n 'use strict';\r\n\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"AppLocalization\");\r\n var localDateRangeStrings = localizationSvc.getCachedLocalizationsContainer(\"DateSelectorLocalization\");\r\n $scope.initialize = function ()\r\n {\r\n $scope.appInfo = $scope.appInfo || {\r\n profile: {},\r\n webUser: {},\r\n paperwork: {},\r\n fuelCards: {},\r\n userLoaded: false,\r\n profileKey: -1,\r\n customText: \"\",\r\n backgroundImage: {},\r\n syscfg: {}\r\n };\r\n\r\n if (angular.isUndefinedOrNullOrEmpty($rootScope.loginInfo))\r\n {\r\n $rootScope.loginInfo = {};\r\n $rootScope.loginInfo.userId = \"\";\r\n $rootScope.loginInfo.password = \"\";\r\n $rootScope.loginInfo.userKey = -1;\r\n $rootScope.loginInfo.userType = 1;\r\n $rootScope.loginInfo.userIsImpersonated = false;\r\n $rootScope.loginInfo.impersonatorUserId = \"\";\r\n $rootScope.loginInfo.impersonatorUserKey = -1;\r\n $rootScope.loginInfo.impersonatorUserType = 0;\r\n $rootScope.loginInfo.impersonationAccessGuid = undefined;\r\n\r\n }\r\n\r\n if ($location.path().search(/(SignUp|ResetPassword|unsubscribe|SiteDisabled)/i) === -1)\r\n {\r\n if ($location.path().indexOf(\"SetPassword\") >= 0)\r\n {\r\n\r\n $scope.applySystemSettings();\r\n\r\n }\r\n else if (!$scope.appInfo.userLoaded || $scope.appInfo.webUser === undefined)\r\n {\r\n if (WebUserSvc.getLoggedInWebUserToken() === undefined)\r\n $scope.logout();\r\n }\r\n }\r\n };\r\n\r\n $scope.getAuthenticationToken = function ()\r\n {\r\n return Authentication.userToken();\r\n };\r\n\r\n $scope.logout = function ()\r\n {\r\n $rootScope.sessionExpired = false;\r\n $scope.clearInfo();\r\n $scope.goTo('/');\r\n };\r\n\r\n $scope.clearInfo = function ()\r\n {\r\n amplify.store(\"pnuser-token\", null);\r\n amplify.store(\"pnprofile\", null);\r\n amplify.store(\"pnWebProfile\", null);\r\n amplify.store(\"pnAuthIndex\", null);\r\n $rootScope.isAuthenticated = false;\r\n $rootScope.loginInfo = {};\r\n $rootScope.loginInfo.userId = \"\";\r\n $rootScope.loginInfo.password = \"\";\r\n $rootScope.loginInfo.rememberMe = false;\r\n $scope.locationInfo = {};\r\n $scope.appInfo = {};\r\n };\r\n\r\n $scope.functionGroup = WebFunctionGroups;\r\n $scope.webFunctions = WebFunctions;\r\n $scope.locationInfo = {\r\n menuLocation: 0,\r\n subMenuLocation: -1,\r\n sideMenu: \"\",\r\n sideMenuData: {}\r\n };\r\n\r\n //default actions for side menu apply buttons\r\n $scope.applyAction = function ()\r\n {\r\n //todo: set error condition indicating there is no assigned action\r\n };\r\n\r\n\r\n $scope.applySystemSettings = function ()\r\n {\r\n WebProfileService.initialize().then(function (data)\r\n {\r\n $scope.appInfo.syscfg = data.Configuration;\r\n $scope.appInfo.softwareVersion = data.SoftwareVersion;\r\n $scope.appInfo.ContactUsText = data.ContactUsText;\r\n $scope.appInfo.poweredByPdiText = data.PoweredByPdiText;\r\n $scope.appInfo.countryInfo = data.Country;\r\n $scope.appInfo.passwordComplexity = data.PasswordComplexity;\r\n\r\n if (!$scope.appInfo.userLoaded)\r\n {\r\n $scope.appInfo.LandingLogoImage = data.LandingLogoImage;\r\n $scope.appInfo.backgroundImage = data.LandingBannerImage;\r\n }\r\n\r\n if ($scope.appInfo.syscfg.UseGoogleAnalytics === 'True' && !$scope.appInfo.syscfg.GoogleAnalyticsKey.isBlank())\r\n {\r\n ga('create', $scope.appInfo.syscfg.GoogleAnalyticsKey, 'auto'); // 'none' while you are working on localhost else 'auto'\r\n }\r\n });\r\n };\r\n\r\n $scope.applySystemSettingsSiteDisabled = function ()\r\n {\r\n WebProfileService.initializeSiteDisabled().then(function (data)\r\n {\r\n $scope.appInfo.syscfg = data.Configuration;\r\n $scope.appInfo.softwareVersion = data.SoftwareVersion;\r\n $scope.appInfo.poweredByPdiText = data.PoweredByPdiText;\r\n $scope.appInfo.countryInfo = data.Country;\r\n $scope.appInfo.passwordComplexity = data.PasswordComplexity;\r\n if (!$scope.appInfo.userLoaded)\r\n {\r\n $scope.appInfo.LandingLogoImage = data.LandingLogoImage;\r\n $scope.appInfo.backgroundImage = data.LandingBannerImage;\r\n }\r\n\r\n });\r\n };\r\n\r\n $scope.applySelectedProfile = function () {\r\n $scope.appInfo.webUser = WebUserSvc.getWebUser();\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.appInfo.webUser)) {\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.appInfo.webUser.CurrentWebProfile)) {\r\n $scope.appInfo.profile = $scope.appInfo.webUser.CurrentWebProfile;\r\n $scope.appInfo.profileKey = $scope.appInfo.webUser.CurrentWebProfile.Key;\r\n WebProfileService.setProfileColor($scope.appInfo.webUser.CurrentWebProfile.PrimaryColor);\r\n }\r\n\r\n if (angular.isUndefinedOrNullOrEmpty($scope.appInfo.authorizationIndex))\r\n $scope.appInfo.authorizationIndex = WebUserSvc.getCurrentAuthorization();\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.appInfo.authorizationIndex))\r\n $scope.appInfo.webUser.CurrentAuthorization = $scope.appInfo.webUser.WebAuthorizations[$scope.appInfo.authorizationIndex];\r\n\r\n $scope.appInfo.backgroundImage = $scope.appInfo.webUser.MenuBackgroundImage;\r\n $scope.appInfo.userLoaded = true;\r\n }\r\n };\r\n\r\n $scope.checkForAppliedProfile = function () {\r\n if (angular.isUndefinedOrNullOrEmpty($scope.appInfo.webUser) ||\r\n angular.isUndefinedOrNullOrEmpty($scope.appInfo.webUser.CurrentWebProfile) ||\r\n angular.isUndefinedOrNullOrEmpty($scope.appInfo.webUser.CurrentAuthorization)) {\r\n $scope.applySelectedProfile();\r\n }\r\n };\r\n\r\n $scope.setSubMenu = function (value, location)\r\n {\r\n $scope.locationInfo.sideMenuData.pendingNav = $timeout(function ()\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = value;\r\n $scope.locationInfo.sideMenuData.pendingNav = undefined;\r\n }, 0);\r\n };\r\n\r\n $scope.setWebProfile = function (profileKey)\r\n {\r\n $scope.appInfo.profileKey = profileKey;\r\n WebProfileService.setWebProfile(profileKey).then(function (data)\r\n {\r\n $scope.appInfo.profile = data.WebProfile;\r\n });\r\n };\r\n\r\n $scope.setSystemConfiguration = function ()\r\n {\r\n WebProfileService.setSystemConfiguration().then(function (data)\r\n {\r\n\r\n });\r\n };\r\n\r\n $scope.checkCurrentUserPermissions = function (value, contact)\r\n {\r\n $scope.checkForAppliedProfile();\r\n\r\n if (!contact)\r\n {\r\n if (!$scope.appInfo.webUser) return false;\r\n if (!$scope.appInfo.webUser.CurrentAuthorization) return false;\r\n contact = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact;\r\n }\r\n var webFunctions = contact.CustomerContactWebFunctions;\r\n for (var x = 0; x < value.length; x++)\r\n {\r\n var hasModuleAccess = $scope.checkCurrentCustomerModules(value[x]);\r\n\r\n for (var i = 0; i < webFunctions.length; i++)\r\n //check to see if the current customer has the allowed function.\r\n //then check the contact security.\r\n if (webFunctions[i].WebFnKey === value[x])\r\n if (hasModuleAccess && webFunctions[i].Selected)\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n $scope.checkCurrentUserPermission = function (value, contact)\r\n {\r\n $scope.checkForAppliedProfile();\r\n\r\n if (!contact)\r\n {\r\n if (!$scope.appInfo.webUser) return false;\r\n if (!$scope.appInfo.webUser.CurrentAuthorization) return false;\r\n contact = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact;\r\n }\r\n\r\n //check to see if the current customer has the allowed function.\r\n if (!$scope.checkCurrentCustomerModules(value))\r\n return false;\r\n\r\n if (contact.AllWebFunctions) return true;\r\n\r\n var webFunctions = contact.CustomerContactWebFunctions;\r\n for (var i = 0; i < webFunctions.length; i++)\r\n if (webFunctions[i].WebFnKey === value)\r\n {\r\n return webFunctions[i].Selected;\r\n }\r\n return false;\r\n };\r\n\r\n $scope.checkCurrentCustomerModules = function (value)\r\n {\r\n var currentCustomer = $scope.appInfo.webUser.CurrentAuthorization.Customer;\r\n var isBulkFuel = currentCustomer.BulkFuelCustomer !== 0;\r\n var isCardLock = currentCustomer.CardLockCustomer !== 0;\r\n var isRetail = currentCustomer.RetailCustomer !== 0;\r\n var isWholesale = currentCustomer.WholesaleCustomer !== 0;\r\n var isWebEft = (currentCustomer.WebPmtEFTGrpKey !== null && currentCustomer.WebPmtEFTGrpKey !== 0);\r\n\r\n //check to see if the current customer has the allowed function.\r\n return WebFunctionModules.checkWebFunctionModules(value, isBulkFuel, isCardLock, isRetail, isWholesale, isWebEft, currentCustomer);\r\n };\r\n\r\n $scope.openEdocByRefNo = function (type, key, refNo, custKey)\r\n {\r\n var qs = {\r\n \"EdocDetailsKey\" : 0,\r\n \"Type\" : type,\r\n \"Key\" : key,\r\n \"RefNo\" : refNo,\r\n \"CustKey\" : custKey\r\n };\r\n\r\n EdocService.renderEdocByRefNo(JSON.stringify(qs))\r\n .then(function (edoc) {\r\n var url = EdocService.createUrl(edoc);\r\n window.open(url, '_blank', 'menubar=no,resizable=no,height=600,width=770,toolbar=no');\r\n });\r\n };\r\n\r\n function openNewWindow(url)\r\n {\r\n window.open(url, localStrings.getLocalizedString(\"DocumentViewer\"), 'location=no,menubar=no,resizable=no,scrollbars=no,status=no ,toolbar=no, height=600, width=770');\r\n }\r\n\r\n $scope.openEdoc = function (edocKey)\r\n {\r\n EdocService.renderEdoc(edocKey)\r\n .then(function (edoc){\r\n openNewWindow(EdocService.createUrl(edoc));\r\n });\r\n };\r\n\r\n $scope.openEdocEmail = function (edocKey, senderAddress)\r\n {\r\n if (senderAddress && senderAddress.length > 0)\r\n {\r\n var qs = \"EdocDetailsKey=\" + edocKey +\r\n \"senderAddress=\" + senderAddress;\r\n\r\n encryptData.encrypt(qs).then(function (data)\r\n {\r\n var url = '../EdocDetailsEmail/Index/?x=' + encodeURIComponent(data) + '&y=' + encodeURIComponent(Authentication.userToken());\r\n openNewWindow(url);\r\n });\r\n return;\r\n }\r\n $scope.openEdoc(edocKey);\r\n };\r\n\r\n $scope.openAttachment = function (attachmentGuid)\r\n {\r\n var url = '../api/Attachment/?x=' + attachmentGuid + '&y=' + encodeURIComponent(Authentication.userToken());\r\n openNewWindow(url);\r\n };\r\n\r\n $scope.getWebProfileMessage = function (messageKey)\r\n {\r\n var profileKey = ($scope.appInfo && $scope.appInfo.profileKey) ? $scope.appInfo.profileKey : 0;\r\n\r\n WebProfileService.getWebProfileMessage(profileKey, messageKey).then(function (data)\r\n {\r\n $scope.appInfo.customText = data;\r\n });\r\n };\r\n\r\n //spin up the webprofile service to make sure future calls will load correctly\r\n $scope.getWebProfileMessage(1);\r\n\r\n $scope.$on('$locationChangeStart', function (event, next, current) {\r\n\r\n if ($location.path().search(/(login|SignUp|ResetPassword|SetPassword|SiteDisabled|unsubscribe)/i) > -1)\r\n return;\r\n\r\n if (angular.isUndefinedOrNullOrEmpty($scope.appInfo) ||\r\n angular.isUndefinedOrNullOrEmpty(WebUserSvc.getLoggedInWebUserToken())) {\r\n $scope.goTo('/');\r\n }\r\n\r\n $scope.checkForAppliedProfile();\r\n\r\n if (!next || !current || !$scope.appInfo.webUser) return;\r\n\r\n if (next.indexOf('AccountVerifyPayment') < 0 &&\r\n next.indexOf('MakeAPayment') < 0 &&\r\n (current && current.indexOf('/Payments/') >= 0)) {\r\n PaymentService.unLockPayments($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n PaymentService.unockInvoices($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n }\r\n\r\n if (next.indexOf('EnterPaperwork') < 0 &&//If we are not navigating to metere\r\n next.indexOf('EnterPaperworkTanks') < 0 &&//OR tanks\r\n next.indexOf('EnterPaperworkDeliveries') < 0 &&//OR deliveries\r\n next.indexOf('EnterPaperworkDealerForms') < 0 &&//or forms\r\n next.indexOf('InventorySummary') < 0 &&//or inventory summary\r\n (current && current.indexOf('/Paperwork/') >= 0))//and we are comming from a paperwork url\r\n {\r\n if (!$scope.appInfo.paperwork) return;//if we dont have a paperwork set then return.\r\n if (!$scope.appInfo.paperwork.batch) return;//if we dont have a paperwork set then return.\r\n var submitPaperworkCmdParms =\r\n {\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n EmailAddress: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n SubmitPaperwork: false,//If this is hit, then close only.\r\n PreviouslySubmitted: false\r\n };\r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms);\r\n }\r\n });\r\n\r\n $scope.$on('$routeChangeError', function (event, current, previous, rejection)\r\n {\r\n switch (rejection)\r\n {\r\n\r\n // Handle invalid auth token errors on route change\r\n case 'authentication:auth-token not valid':\r\n $scope.goTo('/login');\r\n $scope.notifier.show(localStrings.getLocalizedString(\"InvalidCredentials\"), 'error');\r\n break;\r\n\r\n default:\r\n // Display error message to user\r\n $scope.notifier.show('Invalid path', 'error');\r\n }\r\n });\r\n\r\n $scope.urlFormatDate = function (aDate, ignoreIe)\r\n {\r\n if (typeof(aDate) !== 'string' || aDate.isBlank()) return;\r\n\r\n var browser = BrowserService.getBrowserType();\r\n var aDate2 = new Date();\r\n if (Object.prototype.toString.call(aDate) !== '[object Date]')\r\n {\r\n aDate = aDate.substr(0, 10);\r\n aDate2 = new Date(Date.parse(aDate.replace(/-/g, \"/\").replace(/T/g, \" \")));\r\n if (isNaN(aDate2.getTime()))\r\n {\r\n aDate2 = new Date();\r\n }\r\n } else\r\n {\r\n aDate2 = aDate;\r\n }\r\n\r\n if (browser === 'ie' && !ignoreIe)\r\n return (\"0\" + (aDate2.getMonth() + 1)).slice(-2) + '/' + (\"0\" + aDate2.getDate()).slice(-2) + '/' + aDate2.getFullYear();\r\n return aDate2.getFullYear() + '-' + (\"0\" + (aDate2.getMonth() + 1)).slice(-2) + '-' + (\"0\" + aDate2.getDate()).slice(-2);\r\n };\r\n\r\n $scope.formatDate = function (aDate)\r\n {\r\n return $filter('date')(aDate, 'MM/dd/yyyy');\r\n };\r\n\r\n $scope.formatDateTime = function (aDate)\r\n {\r\n return $filter('date')(aDate, 'MM/dd/yyyy hh:mm a');\r\n };\r\n\r\n $scope.addDaysToDate = function addDays(date, days)\r\n {\r\n var result = new Date(date);\r\n result.setDate(result.getDate() + days);\r\n return result;\r\n };\r\n\r\n var successEventListener = $rootScope.$on('event:Success', function (event, data)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesSaved\"), \"success\");\r\n\r\n if (data.opResults.HasWarnings)\r\n {\r\n angular.forEach(data.opResults.Warnings, function (item)\r\n {\r\n $scope.notifier.show(item, \"warning\");\r\n });\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', successEventListener);\r\n\r\n var failedEventListener = $rootScope.$on('event:Failed', function (event, data)\r\n {\r\n if (data.opResults.HasErrors)\r\n {\r\n // Account lock errors go into a custom kendo notification widget\r\n var _accountLockError = localStrings.getLocalizedString(\"AccountLockError\");\r\n\r\n angular.forEach(data.opResults.Errors, function (item)\r\n {\r\n if (item === _accountLockError) {\r\n $scope.lockedAccount.show(item, \"error\");\r\n }\r\n else\r\n $scope.notifier.show(item, \"error\");\r\n });\r\n }\r\n\r\n if (data.opResults.HasWarnings)\r\n {\r\n angular.forEach(data.opResults.Warnings, function (item)\r\n {\r\n $scope.notifier.show(item, \"warning\");\r\n });\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', failedEventListener);\r\n\r\n var errorEventListener = $rootScope.$on('event:Error', function (obj, data) {\r\n var errors = { ExceptionMessage: data.opResults.ExceptionMessage, Stacktrace: data.opResults.StackTrace };\r\n\r\n LoggingService.logErrors(errors).then(function(data) {\r\n console.log(\"Exception was logged please check SIEL in Enterprise Web.\");\r\n });\r\n });\r\n\r\n $scope.$on('$destroy', errorEventListener);\r\n\r\n $scope.goTo = function (path)\r\n {\r\n $location.path(path);\r\n };\r\n\r\n $scope.setFocusOnReady = function setFocusOnReady(elemID)\r\n {\r\n setTimeout(function ()\r\n {\r\n $scope.$apply(function ()\r\n {\r\n $(elemID).focus();\r\n });\r\n }, 100);\r\n };\r\n\r\n $scope.paymentsEnabled = function ()\r\n {\r\n return $scope.appInfo.webUser.CurrentWebProfile.WebPaymentsEnabled &&\r\n $scope.appInfo.webUser.CurrentAuthorization.Customer.UsesWebEFT !== '0' &&\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms > 0 &&\r\n ($scope.checkCurrentUserPermission($scope.webFunctions.AddandEditWebPaymentAccounts) ||\r\n ($scope.checkCurrentUserPermission($scope.webFunctions.AddandEditWebPayments) && $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.ActiveAccountCount > 0 ));\r\n };\r\n\r\n $scope.execOnReady = function execOnReady(func)\r\n {\r\n setTimeout(function ()\r\n {\r\n $scope.$apply(func());\r\n }, 0);\r\n };\r\n\r\n $scope.resetDirtyFlags = function resetDirtyFlags(form)\r\n {\r\n $timeout(function ()\r\n {\r\n form.$setPristine();\r\n $('.k-dirty').removeClass('k-dirty');\r\n $('.k-dirty-cell').removeClass('k-dirty-cell');\r\n }, 0);\r\n };\r\n\r\n $scope.resizeKendoGrid = function resizeKendoGrid(grid, count, offset)\r\n {\r\n var widowHeight = $(window).innerHeight() - offset;\r\n var dataHeight = count * 35;\r\n\r\n if (dataHeight > widowHeight)\r\n {\r\n grid.setOptions({\r\n height: widowHeight,\r\n scrollable: true\r\n });\r\n }\r\n else\r\n {\r\n grid.setOptions({\r\n height: 'inherit',\r\n scrollable: false\r\n });\r\n }\r\n };\r\n\r\n $scope.initializeDateSelector = function() {\r\n $scope.dateSelector = {\r\n displaySelector: true,\r\n selection: 9,\r\n startDate: '',\r\n startMin: '1/1/1900',\r\n startMax: '6/6/2079',\r\n endDate: '',\r\n endMin: '1/1/1900',\r\n endMax: '6/6/2079',\r\n numOfDays: 7,\r\n maxNumOfDays: 90,\r\n options: [\r\n { name: localDateRangeStrings.getLocalizedString(\"Today\"), value: 0 },\r\n { name: localDateRangeStrings.getLocalizedString(\"Yesterday\"), value: 1 },\r\n { name: localDateRangeStrings.getLocalizedString(\"Tomorrow\"), value: 2 },\r\n { name: localDateRangeStrings.getLocalizedString(\"ThisWeek\"), value: 3 },\r\n { name: localDateRangeStrings.getLocalizedString(\"ThisMonth\"), value: 4 },\r\n { name: localDateRangeStrings.getLocalizedString(\"ThisYear\"), value: 5 },\r\n { name: localDateRangeStrings.getLocalizedString(\"PriorWeek\"), value: 6 },\r\n { name: localDateRangeStrings.getLocalizedString(\"PriorMonth\"), value: 7 },\r\n { name: localDateRangeStrings.getLocalizedString(\"PriorYear\"), value: 8 },\r\n { name: localDateRangeStrings.getLocalizedString(\"LastSevenDays\"), value: 9 },\r\n { name: localDateRangeStrings.getLocalizedString(\"LastThirtyDays\"), value: 10 },\r\n { name: localDateRangeStrings.getLocalizedString(\"SelectDates\"), value: 11 },\r\n { name: localDateRangeStrings.getLocalizedString(\"SelectDays\"), value: 12 },\r\n { name: localDateRangeStrings.getLocalizedString(\"AllDays\"), value: 13 }\r\n ],\r\n valid: false,\r\n overrideDefaults: false,\r\n hideAllDays: false,\r\n disabled: false\r\n };\r\n\r\n $scope.dateSelectorInitialized = true;\r\n };\r\n\r\n $scope.$on('$viewContentLoaded', function () {\r\n $timeout(function () {\r\n\r\n //Build localized strings for the entire application once all localization files are rendered\r\n if (!$scope.localizationFilesInitialized) {\r\n var localizationFilesListener = $scope.$watch($('#DateSelectorLocalization innerText'), $timeout(function () {\r\n localizationFilesListener();//Destroy the $watch\r\n localizationSvc.setCachedLocalizations();\r\n $scope.localizationFilesInitialized = true;//Only initialize once\r\n }, true), 0);\r\n }\r\n\r\n // Initialize the dateselector control if it has not been initialized\r\n // From one of the other javascript files\r\n if (!$scope.dateSelectorInitialized) {\r\n $scope.initializeDateSelector();\r\n }\r\n\r\n $scope.modalifier = {\r\n display: false,\r\n title: '',\r\n text: '',\r\n showConfirm: false,\r\n closeBtnTxt: localStrings.getLocalizedString(\"Close\"),\r\n confirmBtnTxt: localStrings.getLocalizedString(\"Yes\"),\r\n show: function (title, text)\r\n {\r\n $scope.modalifier.title = title;\r\n $scope.modalifier.text = text;\r\n $scope.modalifier.showConfirm = false;\r\n $scope.modalifier.display = true;\r\n },\r\n hide: function ()\r\n {\r\n $scope.modalifier.display = false;\r\n },\r\n showSetupError: function ()\r\n {\r\n $scope.modalifier.title = localStrings.getLocalizedString(\"PageSetupError\");\r\n $scope.modalifier.text = localStrings.getLocalizedString(\"SomeDataFailedLoad\") + '
' +\r\n localStrings.getLocalizedString(\"PleaseRefresh\");\r\n $scope.modalifier.showConfirm = false;\r\n $scope.modalifier.display = true;\r\n },\r\n showSavedError: function () {\r\n $scope.modalifier.title = localStrings.getLocalizedString(\"PageSetupError\");\r\n $scope.modalifier.text = localStrings.getLocalizedString(\"DailySettlementFailed\") + '
' +\r\n localStrings.getLocalizedString(\"FuelMetersSaveFailed\");\r\n $scope.modalifier.showConfirm = false;\r\n $scope.modalifier.display = true;\r\n },\r\n showNoResults: function (page)\r\n {\r\n $scope.modalifier.title = page;\r\n $scope.modalifier.text = localStrings.getLocalizedString(\"CriteriaNoResults\");\r\n $scope.modalifier.showConfirm = false;\r\n $scope.modalifier.display = true;\r\n },\r\n confirm: function (text, fnYes, fnNo, title)\r\n {\r\n $scope.modalifier.title = title || localStrings.getLocalizedString(\"Confirm\");\r\n $scope.modalifier.closeBtnTxt = localStrings.getLocalizedString(\"No\");\r\n $scope.modalifier.confirmBtnTxt = localStrings.getLocalizedString(\"Yes\");\r\n $scope.modalifier.text = text;\r\n $scope.modalifier.confirmYes = function ()\r\n {\r\n $scope.modalifier.display = false;\r\n if (!angular.isUndefined(fnYes))\r\n fnYes();\r\n };\r\n $scope.modalifier.confirmNo = function ()\r\n {\r\n $scope.modalifier.display = false;\r\n if (!angular.isUndefined(fnNo))\r\n fnNo();\r\n };\r\n $scope.modalifier.showConfirm = true;\r\n $scope.modalifier.display = true;\r\n },\r\n confirmNo: null,\r\n confirmYes: null\r\n };\r\n }, 0);\r\n });\r\n })\r\n .directive('stringNumber', [function () {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, controller) {\r\n controller.$formatters.push(function (modelValue) {\r\n return Number(modelValue); /*convert to number, for going from to view*/\r\n });\r\n controller.$parsers.push(function (viewValue) {\r\n return '' + viewValue; /*convert to string, for going from view to model*/\r\n });\r\n }\r\n };\r\n }]);\r\n","/**\r\n * Created by jvitoria on 1/30/2015.\r\n */\r\n\r\n//helper functions\r\nvar getAttrTextFromNodeMap = function (element, attr) {\r\n // get html element attribute by name from a NamedNodeMap\r\n return $('#' + element )[0].attributes.getNamedItem(attr).value;\r\n};\r\n\r\nangular.module(\"pnDateSelector\", ['core.objects'])\r\n .config(function ($provide, templateProvider) {\r\n $provide.constant('templates', templateProvider);\r\n })\r\n .controller(\"dateSelectorCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n })\r\n .directive('dateSelector', function (templates)\r\n {\r\n return {\r\n restrict: 'E',\r\n scope: false,\r\n controller: function ($scope, $rootScope, $filter, localizationSvc)\r\n {\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"DateSelectorLocalization\"); \r\n $scope.initDateSelector = function ()\r\n {\r\n // set defaults\r\n if (!$scope.dateSelector) {\r\n $scope.dateSelector = {};\r\n }\r\n \r\n // reset dateSelector.options based on hideAllDays flag\r\n $scope.dateSelector.options = [];\r\n if ($scope.dateSelector.hideAllDays !== true) {\r\n $scope.dateSelector.options.push(\r\n {name: localStrings.getLocalizedString(\"AllDays\"), value: 13});\r\n }\r\n $scope.dateSelector.options.push(\r\n {name: localStrings.getLocalizedString(\"Today\"), value: 0},\r\n {name: localStrings.getLocalizedString(\"Yesterday\"), value: 1},\r\n {name: localStrings.getLocalizedString(\"Tomorrow\"), value: 2},\r\n {name: localStrings.getLocalizedString(\"ThisWeek\"), value: 3},\r\n {name: localStrings.getLocalizedString(\"ThisMonth\"), value: 4},\r\n {name: localStrings.getLocalizedString(\"ThisYear\"), value: 5},\r\n {name: localStrings.getLocalizedString(\"PriorWeek\"), value: 6},\r\n {name: localStrings.getLocalizedString(\"PriorMonth\"), value: 7},\r\n {name: localStrings.getLocalizedString(\"PriorYear\"), value: 8},\r\n {name: localStrings.getLocalizedString(\"LastSevenDays\"), value: 9},\r\n {name: localStrings.getLocalizedString(\"LastThirtyDays\"), value: 10},\r\n {name: localStrings.getLocalizedString(\"SelectDates\"), value: 11},\r\n {name: localStrings.getLocalizedString(\"SelectDays\"), value: 12});\r\n\r\n $scope.dateSelector.startMin = '1/1/1900';\r\n $scope.dateSelector.startMax = '6/6/2079';\r\n $scope.dateSelector.endMin = '1/1/1900';\r\n $scope.dateSelector.endMax = '6/6/2079';\r\n $scope.dateSelector.disabled = false;\r\n $scope.dateSelector.hideAllDays = false;\r\n\r\n // override parameer data if flag is false\r\n if ($scope.dateSelector.overrideDefaults) {\r\n $scope.dateSelector.overrideDefaults = false;\r\n }\r\n else\r\n {\r\n $scope.dateSelector.displaySelector = true;\r\n $scope.dateSelector.selection = 9;\r\n $scope.dateSelector.startDate = '';\r\n $scope.dateSelector.endDate = '';\r\n $scope.dateSelector.numOfDays = 7;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.valid = false;\r\n }\r\n $scope.onChange();\r\n };\r\n\r\n $scope.validateStartAndEndDate = function ()\r\n {\r\n $scope.dateSelector.valid = Date.parse($scope.dateSelector.startDate) <= Date.parse($scope.dateSelector.endDate);\r\n if (!$scope.dateSelector.valid)\r\n {\r\n // (htmlElement, attribute) \r\n $scope.notifier.show(getAttrTextFromNodeMap('dateSelectorFromThru', 'pdi-date-is-greater-equal-to-msg'), 'error');\r\n }\r\n };\r\n\r\n $scope.onChange = function ()\r\n {\r\n var today = new Date();\r\n var year = new Date().getFullYear();\r\n //month is the only zero based date variable\r\n var month = new Date().getMonth();\r\n var date = new Date().getDate();\r\n var days = new Date().getDay();\r\n\r\n switch (parseInt($scope.dateSelector.selection, 10))\r\n {\r\n case 0: //today\r\n case 14: //single date selector\r\n $scope.dateSelector.startDate = $filter('date')(today, 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $scope.dateSelector.startDate;\r\n break;\r\n case 1: //yesterday\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date - 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $scope.dateSelector.startDate;\r\n break;\r\n case 2: //tomorrow\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date + 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $scope.dateSelector.startDate;\r\n break;\r\n case 3: //this week\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date - days), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(year, month, date - days + 6), 'MM/dd/yyyy');\r\n break;\r\n case 4: //this month\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(year, month + 1, 0), 'MM/dd/yyyy');\r\n break;\r\n case 5: //this year\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, 0, 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(year, 11, 31), 'MM/dd/yyyy');\r\n break;\r\n case 6: //previous week\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date - days - 7), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(year, month, date - days - 1), 'MM/dd/yyyy');\r\n break;\r\n case 7: //previous month\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month - 1, 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(year, month, 0), 'MM/dd/yyyy');\r\n break;\r\n case 8: //previous year\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year - 1, 0, 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(year - 1, 11, 31), 'MM/dd/yyyy');\r\n break;\r\n case 9: //last 7 days\r\n case 11: //select dates\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date - 6), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(), 'MM/dd/yyyy');\r\n break;\r\n case 10: //last 30 days\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date - 29), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(), 'MM/dd/yyyy');\r\n break;\r\n case 12: //select days\r\n $scope.dateSelector.numOfDays = ($scope.dateSelector.numOfDays > $scope.dateSelector.maxNumOfDays) ? $scope.dateSelector.maxNumOfDays : $scope.dateSelector.numOfDays;\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date - $scope.dateSelector.numOfDays + 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(), 'MM/dd/yyyy');\r\n break;\r\n case 13: //all days\r\n $scope.dateSelector.startDate = $filter('date')(new Date(1900, 0, 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(2079, 0, 1), 'MM/dd/yyyy');\r\n break;\r\n }\r\n\r\n /*var debug = 'Date Changed
Start Date: '+ $scope.dateSelector.startDate + '
End Date: '+ $scope.dateSelector.endDate;\r\n $scope.notifier.show(debug ,'info');*/\r\n };\r\n\r\n },\r\n templateUrl: templates.getTemplate(\"DateSelector\")\r\n };\r\n });","/* ==============================================================================\r\n\r\n CORE.AJAX MODULE\r\n\r\n Defines the core.ajax module and it all it's module dependencies\r\n\r\n ============================================================================= */\r\nfunction ApiServiceSettings(settings)\r\n{\r\n this.url = settings.url;\r\n this.data = settings.data;\r\n this.method = settings.method;\r\n this.params = settings.params;\r\n this.responseType = settings.responseType;\r\n this.scope = settings.scope; // if set then this is the scope that validations will execute for\r\n this.skipValidations = settings.skipValidations || false; // if true then POST or PUT validations eval is skipped\r\n}\r\nfunction ApiServiceOperationResult(data)\r\n{\r\n this.Success = data.Success;\r\n this.SuccessMsg = data.SucessMessage;\r\n this.ErrorTitle = data.ErrorTitle;\r\n this.Errors = data.ErrorMessages || [];\r\n this.Warnings = data.WarningMessages || [];\r\n this.HasErrors = (this.Errors.length > 0);\r\n this.HasWarnings = (this.Warnings.length > 0);\r\n this.IsRedirect = data.IsRedirect;\r\n this.RedirectUrl = data.RedirectUrl;\r\n this.Data = data.Data;\r\n}\r\n\r\nangular.module('core.ajax', [])\r\n\r\n /* ==============================================================================\r\n\r\n CORE.AJAX\r\n\r\n Contains helpful methods that are common to most ajax/xhr commands.\r\n\r\n ============================================================================= */\r\n .factory('ajax', ['$http', function ($http)\r\n {\r\n 'use strict';\r\n\r\n return {\r\n\r\n /*\r\n GET\r\n\r\n Simplified abstraction on top of Angular's $http provider.\r\n Performs a \"GET\" Request for a given url and data\r\n */\r\n get: function (url, data)\r\n {\r\n if (data === undefined)\r\n {\r\n return $http({\r\n method: 'GET',\r\n url: url\r\n });\r\n } else\r\n {\r\n return $http({\r\n method: 'GET',\r\n url: url + '/' + data\r\n });\r\n }\r\n },\r\n\r\n /*\r\n POST\r\n\r\n Simplified abstraction on top of Angular's $http provider.\r\n Performs a \"POST\" Request for a given url and data\r\n */\r\n post: function (url, data)\r\n {\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: data,\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n }\r\n });\r\n }\r\n };\r\n\r\n }])\r\n .service('apiService',\r\n ['$http', '$q', '$window', 'NotificationService',\r\n function ($http, $q, $window, NotificationService)\r\n {\r\n function webAPICall(settings, notifyOnSuccess, suppressErrors)\r\n {\r\n var opResults = {};\r\n var deferred = $q.defer();\r\n\r\n //// for POST and PUT execute validation on data\r\n //if ((settings.method === 'POST' || settings.method === 'PUT') && !settings.skipValidations) {\r\n // if (!validatorSvc.executeValidations()) {\r\n // return deferred.promise;\r\n // }\r\n //}\r\n\r\n $http({\r\n method: settings.method || 'GET',\r\n url: settings.url,\r\n data: settings.data,\r\n params: settings.params\r\n })\r\n .then(function (data, status, headers, config)\r\n {\r\n opResults = new ApiServiceOperationResult(data.data);\r\n\r\n if (opResults.IsRedirect)\r\n {\r\n $window.location.assign(opResults.RedirectUrl);\r\n\r\n }\r\n else {\r\n if (opResults.Success)\r\n {\r\n if (notifyOnSuccess)\r\n NotificationService.handleSuccess(settings, opResults, status, headers, config);\r\n deferred.resolve(opResults, status, headers, config);\r\n } else\r\n {\r\n if (!suppressErrors) {\r\n NotificationService.handleFailure(settings, opResults, status, headers, config);\r\n }\r\n }\r\n }\r\n\r\n })\r\n .catch(function (data, status, headers, config)\r\n {\r\n if (!suppressErrors) {\r\n NotificationService.handleError(settings, data.data, status, headers, config);\r\n }\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n return {\r\n executeAndNotifyOnSuccess: function (settings)\r\n {\r\n return webAPICall(settings, true, false);\r\n },\r\n executeAndNotifyOnSuccessAndSuppressErrors: function (settings)\r\n {\r\n return webAPICall(settings, true, true);\r\n },\r\n execute: function (settings)\r\n {\r\n return webAPICall(settings, false, false);\r\n },\r\n executeAndSuppressErrors: function (settings)\r\n {\r\n return webAPICall(settings, false, true);\r\n }\r\n };\r\n }\r\n ]);\r\n","/**\r\n * Created by rhampton on 2/27/2015.\r\n */\r\nangular.module(\"pnContactUs\", ['ngSanitize', 'core.objects', 'services.payments', 'core.directives'])\r\n .controller(\"ContactUs\", function ($scope, ContactUs, localizationSvc)\r\n {\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"AppLocalization\");\r\n function Message(ct, st, m)\r\n {\r\n this.ContactUsSubject = ct || 0;\r\n this.SubjectText = st || '';\r\n this.ContactUsMessage = m || '';\r\n this.CustomerContactKey = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.Key || 0;\r\n }\r\n\r\n $scope.appInfo.showContactUsModal = false;\r\n\r\n $scope.$watch('appInfo.showContactUsModal', function ()\r\n {\r\n if ($scope.appInfo.showContactUsModal)\r\n {\r\n $scope.message = new Message($scope.CommentContexts[0] ? $scope.CommentContexts[0].Key : '');\r\n $scope.getWebProfileMessage(2);\r\n }\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.CommentContexts = {};\r\n $scope.showErrorBox = false;\r\n\r\n ContactUs.loadContactUsContext().then(function (data)\r\n {\r\n $scope.CommentContexts = data.CommentContexts;\r\n });\r\n };\r\n\r\n $scope.$parent.sendMessage = function ()\r\n {\r\n if (!validateMessage())\r\n return;\r\n\r\n ContactUs.saveMessage($scope.message).then(\r\n function (data)\r\n {\r\n if (data.MessageSent)\r\n {\r\n $scope.appInfo.showContactUsModal = false;\r\n $scope.notifier.show(localStrings.getLocalizedString(\"MessageSent\"), 'success');\r\n }\r\n else\r\n $scope.notifier.show(localStrings.getLocalizedString(\"MessageNotSent\"), 'error');\r\n });\r\n };\r\n\r\n function validateMessage()\r\n {\r\n var valid = true;\r\n\r\n if($scope.CommentContexts.length > 0 && $scope.message.ContactUsSubject.toNumber() < 1)\r\n {\r\n valid = false;\r\n }\r\n\r\n if($scope.CommentContexts.length <= 0 && $scope.message.SubjectText.isBlank())\r\n {\r\n valid = false;\r\n }\r\n\r\n if($scope.message.ContactUsMessage.isBlank())\r\n {\r\n valid = false;\r\n }\r\n\r\n $scope.showErrorBox = !valid;\r\n return valid;\r\n }\r\n });\r\n","/**\r\n * Created by rhampton on 1/29/2015.\r\n */\r\nangular.module(\"pnDocuments\", ['ngSanitize', 'core.objects', 'services.payments', 'core.directives'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider.when(\"/Dyn/:header/Home\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Dyn\"),\r\n controller: \"DocumentCtrl\"\r\n }\r\n )\r\n .when(\"/Dyn/:header/:sub/Home\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Dyn\"),\r\n controller: \"DocumentCtrl\"\r\n }\r\n )\r\n .when(\"/Dyn/:header/:sub/:side\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Dyn\"),\r\n controller: \"DocumentBodyCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"DocumentsLocalization\");\r\n }\r\n }\r\n }\r\n );\r\n })\r\n .controller(\"DocumentSideMenuCtrl\", function ($scope, $http, $q, $routeParams, $anchorScroll, $filter)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData.subMenu || $scope.locationInfo.sideMenuData.subMenu.length === 0)\r\n {\r\n var menu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.HeaderMenu, {Name: $routeParams.header})[0];\r\n if (menu)\r\n {\r\n $scope.locationInfo.menuLocation = menu.Key;\r\n }\r\n var subMenu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SubMenu, {\r\n ParentKey: $scope.locationInfo.menuLocation,\r\n Name: $routeParams.sub\r\n })[0];\r\n if (subMenu)\r\n {\r\n $scope.locationInfo.subMenuLocation = subMenu.Key;\r\n }\r\n var sideMenu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SideMenu, {\r\n ParentKey: $scope.locationInfo.subMenuLocation,\r\n Name: $routeParams.side\r\n })[0];\r\n if (sideMenu)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = sideMenu.Key;\r\n }\r\n }\r\n };\r\n\r\n $scope.setSiteMenuLocation = function (val)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = val;\r\n };\r\n })\r\n .controller(\"DocumentCtrl\", function ($scope, $http, $q, $routeParams, $anchorScroll, $filter, templates)\r\n {\r\n 'use strict';\r\n $scope.locationInfo.menuObject = {};\r\n $scope.locationInfo.subMenuObject = {};\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.sideMenu = '';\r\n $scope.locationInfo.menuText = $routeParams.header;\r\n $scope.locationInfo.subMenuText = $routeParams.sub;\r\n var subMenu = {};\r\n if (!$scope.locationInfo.subMenuText)\r\n {\r\n subMenu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SubMenu, {ParentKey: $scope.locationInfo.menuLocation})[0];\r\n if (subMenu)\r\n {\r\n $scope.locationInfo.subMenuText = subMenu.Name;\r\n $scope.locationInfo.subMenuLocation = subMenu.Key;\r\n }\r\n } else\r\n {\r\n subMenu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SubMenu, {\r\n ParentKey: $scope.locationInfo.menuLocation,\r\n Name: $scope.locationInfo.subMenuText\r\n })[0];\r\n if (subMenu)\r\n {\r\n $scope.locationInfo.subMenuLocation = subMenu.Key;\r\n }\r\n\r\n }\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"DocumentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.subMenu || $scope.locationInfo.sideMenuData.subMenu.length === 0)\r\n {\r\n var sideMenu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SideMenu, {ParentKey: $scope.locationInfo.subMenuLocation})[0];\r\n if (!sideMenu)\r\n {\r\n $scope.goTo('Documents/Account/Statements');\r\n }\r\n\r\n if (sideMenu)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = sideMenu.Key;\r\n $scope.goTo(\"/Dyn/\" + $routeParams.header + \"/\" + $scope.locationInfo.subMenuText + \"/\" + sideMenu.Name);\r\n }\r\n }\r\n\r\n $scope.name = 'document';\r\n };\r\n })\r\n .controller(\"DocumentBodyCtrl\", function ($scope, $http, $q, $routeParams, $anchorScroll, $filter, documentService, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.documentsGrid = {};\r\n $scope.kendo.documentsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var dataItem = this.dataItem(this.select()[0]);\r\n if (!dataItem.Guid)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"Documents\"), localStrings.getLocalizedString(\"SelectedDocumentNoLonger\"));\r\n return;\r\n }\r\n else\r\n $scope.openAttachment(dataItem.Guid);\r\n\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"RefDateFormatted\",\r\n title: localStrings.getLocalizedString(\"ReferenceDate\"),\r\n width: 100,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"RefNo\",\r\n title: localStrings.getLocalizedString(\"ReferenceNo\"),\r\n width: 150,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Description\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.documentsGridInit = function (ds)\r\n {\r\n $scope.kendo.documentsGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.documentsGridDS.read();\r\n $scope.kendo.documentsGrid.dataSource.data($scope.kendo.documentsGridDS.data());\r\n };\r\n\r\n function getDocuments(ref, desc, start, end, custKey, docType, contKey)\r\n {\r\n documentService.listDocuments(ref, desc, start, end, custKey, docType, contKey).then(function (data)\r\n {\r\n if (data.length === 0)\r\n {\r\n $scope.modalifier.showNoResults($scope.locationInfo.documents.name);\r\n return;\r\n }\r\n\r\n angular.forEach(data, function (element)\r\n {\r\n element.RefDateFormatted = element.RefDate === \"0001-01-01T00:00:00\" ? null : $filter('date')(element.RefDate, 'MM/dd/yyyy');\r\n });\r\n\r\n $scope.kendo.documentsGridInit(data);\r\n });\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.checkForAppliedProfile();\r\n\r\n //required to rebuild dymanic sub and side menus in case of user pressing refresh.\r\n if($scope.locationInfo.menuLocation === 0)\r\n {\r\n $scope.goTo('Documents/Account/Statements');\r\n }\r\n\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"DocumentSideMenu\");\r\n\r\n $scope.locationInfo.menuText = $routeParams.header;\r\n $scope.locationInfo.subMenuText = $routeParams.sub;\r\n if (!$scope.locationInfo.documents) $scope.locationInfo.documents = {};\r\n $scope.locationInfo.documents.minDate = new Date(1990, 0, 1);\r\n $scope.locationInfo.documents.name = $routeParams.side;\r\n\r\n //auto load non-transaction document types\r\n var thisMenu = $scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SideMenu.find({Name:$scope.locationInfo.documents.name});\r\n if(thisMenu && thisMenu.SourceType === 0)\r\n {\r\n getDocuments(\r\n '',\r\n '',\r\n '01/01/1900',\r\n '06/01/2075',\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.CustKey,\r\n thisMenu.SourceKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n );\r\n }\r\n\r\n };\r\n\r\n $scope.$parent.applyAction = function (documentType)\r\n {\r\n getDocuments($scope.locationInfo.sideMenuData.documents.referenceNumber,\r\n $scope.locationInfo.sideMenuData.documents.description,\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.CustKey,\r\n documentType,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n );\r\n };\r\n })\r\n .controller(\"SectionSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.documents) $scope.locationInfo.sideMenuData.documents = {};\r\n $scope.locationInfo.sideMenuData.documents.referenceNumber = '';\r\n $scope.locationInfo.sideMenuData.documents.description = '';\r\n };\r\n });","/**\r\n * Created by rhampton on 4/25/2014.\r\n */\r\nangular.module('pnHeader', ['core.enums'])\r\n .controller(\"headerMenuCtrl\", function ($scope, $rootScope, WebUserSvc, $filter, $timeout)\r\n {\r\n 'use strict';\r\n $scope.showAccounts = false;\r\n $scope.showUserOpt = false;\r\n $scope.locationInfo.menuLocation = $scope.locationInfo.menuLocation || 0;\r\n $scope.locationInfo.subMenuLocation = $scope.locationInfo.subMenuLocation || -1;\r\n\r\n $scope.setMenuLocation = function (menuLocation)\r\n {\r\n $scope.locationInfo.menuLocation = menuLocation;\r\n $scope.locationInfo.subMenuLocation = -1;\r\n };\r\n $scope.setSubMenuLocation = function (subMenuLocation)\r\n {\r\n $scope.locationInfo.subMenuLocation = subMenuLocation;\r\n };\r\n $scope.checkUserMenuSecurity = function (securityGroup)\r\n {\r\n $scope.checkForAppliedProfile();\r\n if (!$scope.appInfo.webUser) return false;\r\n if (!$scope.appInfo.webUser.CurrentAuthorization) return false;\r\n if ($scope.appInfo.webUser.CurrentAuthorization)\r\n {\r\n return $scope.checkCurrentUserPermissions(securityGroup);\r\n }\r\n return false;\r\n };\r\n $scope.setNewCurrentAuthorization = function (index)\r\n {\r\n $scope.appInfo.authorizationIndex = index;\r\n amplify.store('pnAuthIndex', $scope.appInfo.authorizationIndex);\r\n $scope.showAccounts = false;\r\n\r\n WebUserSvc.retrieveSelectedProfile($scope.appInfo.webUser.Id, $scope.appInfo.profileKey).then(function (data)\r\n {\r\n amplify.store('pnWebProfile', $scope.appInfo.profileKey);\r\n $scope.applySelectedProfile();\r\n $scope.appInfo.webUser.CurrentAuthorization = $scope.appInfo.webUser.WebAuthorizations[$scope.appInfo.authorizationIndex];\r\n $rootScope.$broadcast('event:AccountChange', {});\r\n $scope.goTo('/Home');\r\n });\r\n };\r\n\r\n $scope.showAccountList = function ()\r\n {\r\n $scope.showUserOpt = false;\r\n $scope.showAccounts = !$scope.showAccounts;\r\n };\r\n\r\n $scope.editUser = function ()\r\n {\r\n $scope.showUserOpt = false;\r\n $scope.goTo('/Account/Profile/YourProfile');\r\n };\r\n\r\n $scope.changePassword = function ()\r\n {\r\n $scope.showUserOpt = false;\r\n $scope.goTo('/Account/Profile/ResetPassword');\r\n };\r\n\r\n $scope.showUserOptions = function ()\r\n {\r\n $scope.showAccounts = false;\r\n $scope.showUserOpt = !$scope.showUserOpt;\r\n };\r\n\r\n $scope.headerTimer = {};\r\n $scope.subMenuWaiter = function (menuKey)\r\n {\r\n var barWidth = document.getElementById(\"hdr-submenu\").clientWidth;\r\n var acctWidth = document.getElementById(\"hdr-acctInfo\").clientWidth;\r\n document.getElementById(\"subMenu\" + menuKey).style.width = (barWidth - acctWidth - 30) + 'px';\r\n document.getElementById(\"subMenu\" + menuKey).style.overflowX = \"hidden\";\r\n\r\n $scope.startIndex = 0;\r\n $scope.endIndex = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SubMenu, {ParentKey: menuKey}).length - 1;\r\n $scope.menuLength = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SubMenu, {ParentKey: menuKey}).length - 1;\r\n\r\n $scope.headerTimer = $timeout(function ()\r\n {\r\n $scope.setMenuVisibility(menuKey);\r\n }, 100);\r\n };\r\n\r\n $scope.setMenuVisibility = function (menuKey)\r\n {\r\n var subMenu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SubMenu, {ParentKey: menuKey});\r\n var barWidth = document.getElementById(\"hdr-submenu\").clientWidth;\r\n var acctWidth = document.getElementById(\"hdr-acctInfo\").clientWidth;\r\n var maxMenuWidth = barWidth - acctWidth - 80;\r\n var currentMenuWidth = 0;\r\n for (var x = 0; x < subMenu.length; x++)\r\n {\r\n var menuItem = subMenu[x];\r\n menuItem.visible = true;\r\n $scope.$apply();\r\n if (x < $scope.startIndex)\r\n {\r\n menuItem.visible = false;\r\n continue;\r\n }\r\n currentMenuWidth += document.getElementById(menuItem.Key).clientWidth + 50;\r\n menuItem.visible = currentMenuWidth < maxMenuWidth;\r\n if (menuItem.visible)\r\n $scope.endIndex = x;\r\n }\r\n };\r\n $scope.moveMenuLeft = function (menuKey)\r\n {\r\n if ($scope.startIndex === 0)\r\n return;\r\n $scope.startIndex -= 1;\r\n $scope.setMenuVisibility(menuKey);\r\n };\r\n $scope.moveMenuRight = function (menuKey)\r\n {\r\n if ($scope.startIndex === $scope.menuLength)\r\n return;\r\n $scope.startIndex += 1;\r\n $scope.setMenuVisibility(menuKey);\r\n };\r\n });","/**\r\n * Created by rhampton on 3/11/14.\r\n */\r\nangular.module('pnHome', ['core.ajax', 'ngSanitize'])\r\n .config(['$routeProvider', function ($routeProvider) {\r\n var originalWhen = $routeProvider.when;\r\n var globalResolves = {\r\n webUser: function (WebUserSvc, WebProfileService) {\r\n return WebUserSvc.resolveWebUser().then(function () {\r\n var _user = WebUserSvc.getWebUser();\r\n if (!angular.isUndefinedOrNullOrEmpty(_user) &&\r\n !angular.isUndefinedOrNullOrEmpty(_user.CurrentWebProfile)) {\r\n WebProfileService.setProfileColor(_user.CurrentWebProfile.PrimaryColor);\r\n }\r\n return _user;\r\n });\r\n }\r\n };\r\n $routeProvider.when = function (path, route) {\r\n route.resolve = route.resolve || (route.resolve = {});\r\n angular.extend(route.resolve, globalResolves);\r\n return originalWhen.call($routeProvider, path, route);\r\n };\r\n }])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider.when(\"/Home\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Home\"),\r\n controller: \"homeCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"HomeLocalization\");\r\n }\r\n }\r\n }\r\n );\r\n })\r\n .controller('homeCtrl', function ($scope, $rootScope, ajax, $q, homeService, localStrings, $location, globalizationSvc)\r\n {\r\n 'use strict';\r\n $scope.locationInfo.menuLocation = 0;\r\n $scope.locationInfo.subMenuLocation = -1;\r\n $scope.locationInfo.sideMenu = '';\r\n $scope.modalInfo = {};\r\n $scope.curArticle = 0;\r\n $scope.checkForAppliedProfile();\r\n\r\n //Remove the impersonation GUID from the URL - we no longer need it once we get to Home\r\n $location.search('impersonationGuid', null);\r\n\r\n $scope.toggleModal = function (modalHeader, modalContent)\r\n {\r\n $scope.modalInfo.header = modalHeader;\r\n $scope.modalInfo.content = modalContent;\r\n $scope.modalInfo.shown = !$scope.modalInfo.shown;\r\n };\r\n\r\n $scope.updatePageInfo = function ()\r\n {\r\n if ($scope.appInfo.webUser && $scope.appInfo.webUser.CurrentAuthorization) {\r\n homeService.loadHomePageInformation($scope.appInfo.webUser.CurrentAuthorization.CustContKey).then(function (data)\r\n {\r\n $scope.PageInfo = data;\r\n $scope.formatArticles();\r\n $scope.formatCurrencies();\r\n });\r\n }\r\n else\r\n $scope.logout();\r\n };\r\n\r\n var accountChangeListener = $rootScope.$on('event:AccountChange', function (event, data)\r\n {\r\n $scope.updatePageInfo();\r\n });\r\n\r\n $scope.$on('$destroy', accountChangeListener);\r\n\r\n $scope.updatePageInfo();\r\n\r\n $scope.showLastCreditNotification = function (item)\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(item) || angular.isUndefinedOrNullOrEmpty(item.DispType))\r\n return;\r\n\r\n switch ($scope.PageInfo.HomeInfo.LastCreditNotification.DispType) {\r\n case 0:\r\n $scope.emailPopUp = item;\r\n $scope.emailPopUp.show = true;\r\n break;\r\n\r\n case 1:\r\n case 2:\r\n if (item.EdocDtlKey > 0) $scope.openEdoc(item.EdocDtlKey);\r\n else\r\n scope.notifier.show(localStrings.getLocalizedString(\"DocumentNotRetrieved\"), 'error');\r\n break;\r\n\r\n case 3:\r\n if (item.AttachGUID !== null) $scope.openAttachment(item.AttachGUID);\r\n else\r\n scope.notifier.show(localStrings.getLocalizedString(\"AttachmentNotRetrieved\"), 'error');\r\n break;\r\n }\r\n\r\n };\r\n\r\n $scope.showAccountSummary = function ()\r\n {\r\n if ($scope.checkCurrentUserPermission($scope.webFunctions.ViewCreditInformation))\r\n return true;\r\n\r\n if (($scope.PageInfo.HomeInfo.DisplayPastDueMsgAt > 0 && ($scope.PageInfo.HomeInfo.Customer.CrStatus === 1 ||\r\n $scope.PageInfo.HomeInfo.Customer.CrStatus === 6 || $scope.PageInfo.HomeInfo.Customer.CrStatus === 7 ||\r\n $scope.PageInfo.HomeInfo.Customer.CrStatus === 8 || $scope.PageInfo.HomeInfo.Customer.CrStatus === 9)))\r\n return true;\r\n\r\n return ($scope.checkCurrentUserPermission($scope.webFunctions.AddandEditWebPaymentAccounts) && $scope.PageInfo.HomeInfo.AccountNeedingVerificationv);\r\n };\r\n\r\n $scope.showRecentActivity = function ()\r\n {\r\n if (!$scope.PageInfo) return false;\r\n if (!$scope.PageInfo.HomeInfo) return false;\r\n var homeInfo = $scope.PageInfo.HomeInfo;\r\n\r\n if (homeInfo.ScheduledPayment && homeInfo.ScheduledPayment.Amount > 0) return true;\r\n if (homeInfo.PendingEft && homeInfo.PendingEft.Amount > 0) return true;\r\n if (homeInfo.PostedEft && homeInfo.PostedEft.Amount > 0) return true;\r\n if (homeInfo.LastInvoice && homeInfo.LastInvoice.Amount > 0) return true;\r\n if (homeInfo.CustomerActivity && homeInfo.CustomerActivity.LastRcptAmt > 0) return true;\r\n if (homeInfo.CustomerActivity && homeInfo.CustomerActivity.LastStmtAmt > 0) return true;\r\n if (homeInfo.CustomerPriceNotice && homeInfo.CustomerPriceNotice.EdocDetails && homeInfo.CustomerPriceNotice.EdocDetails.DtlKey > 0) return true;\r\n if (homeInfo.LastCreditNotification && homeInfo.LastCreditNotification.DispType > 0) return true;\r\n return false;\r\n };\r\n\r\n $scope.getArticle = function (dir)\r\n {\r\n switch (dir) {\r\n case 'p':\r\n --$scope.curArticle;\r\n if ($scope.curArticle < 0)\r\n $scope.curArticle = $scope.PageInfo.HomeInfo.Announcements.length - 1;\r\n break;\r\n case 'n':\r\n ++$scope.curArticle;\r\n if ($scope.curArticle === $scope.PageInfo.HomeInfo.Announcements.length)\r\n $scope.curArticle = 0;\r\n break;\r\n }\r\n };\r\n\r\n $scope.formatArticles = function ()\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty($scope.PageInfo.HomeInfo) || angular.isUndefinedOrNullOrEmpty($scope.PageInfo.HomeInfo.Announcements))\r\n return;\r\n\r\n angular.forEach($scope.PageInfo.HomeInfo.Announcements, function (item)\r\n {\r\n item.Text = item.Text.trim().unescapeHTML().replace(/ /gi, ' ');\r\n });\r\n\r\n };\r\n\r\n // Format all of the currency fields on the home page to whatever the browser locale is\r\n $scope.formatCurrencies = function ()\r\n {\r\n var homeInfo = $scope.PageInfo.HomeInfo;\r\n \r\n var lastInv = homeInfo.LastInvoice.Amount;\r\n var lastStmt = homeInfo.CustomerActivity.LastStmtAmt*-1;\r\n var lastEft = homeInfo.PostedEft.Amount;\r\n var lastPmnt = homeInfo.CustomerActivity.LastRcptAmt;\r\n var pendEft = homeInfo.PendingEft.Amount;\r\n var nextSchPmnt = homeInfo.ScheduledPayment.Amount;\r\n var acctBalance = homeInfo.Customer.AccountBalance;\r\n var unbilledActivity = homeInfo.Customer.UnshippedBalance;\r\n var creditLimit = homeInfo.Customer.CrLimitTotal;\r\n var availableCred = homeInfo.Customer.AvailableCredit;\r\n\r\n homeInfo.LastInvoice.AmountDisplay = globalizationSvc.formatCurrency(lastInv);\r\n homeInfo.CustomerActivity.LastStmtAmtDisplay = globalizationSvc.formatCurrency(lastStmt);\r\n homeInfo.PostedEft.AmountDisplay = globalizationSvc.formatCurrency(lastEft);\r\n homeInfo.CustomerActivity.LastRcptAmtDisplay = globalizationSvc.formatCurrency(lastPmnt);\r\n homeInfo.PendingEft.AmountDisplay = globalizationSvc.formatCurrency(pendEft);\r\n homeInfo.ScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency(nextSchPmnt);\r\n homeInfo.Customer.AccountBalanceDisplay = globalizationSvc.formatCurrency(acctBalance);\r\n homeInfo.Customer.UnshippedBalanceDisplay = globalizationSvc.formatCurrency(unbilledActivity);\r\n homeInfo.Customer.CrLimitTotalDisplay = globalizationSvc.formatCurrency(creditLimit);\r\n homeInfo.Customer.AvailableCreditDisplay = globalizationSvc.formatCurrency(availableCred);\r\n };\r\n });","/**\r\n * Created by rhampton on 5/27/2014.\r\n */\r\nangular.module(\"pnLogin\", [\r\n 'ngRoute',\r\n 'core.enums',\r\n 'core.security'\r\n])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/SignUp/:request?\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"SignUp\"),\r\n controller: \"signupCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"LoginLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/ResetPassword/:request?\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ResetPassword\"),\r\n controller: \"resetPasswordCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"LoginLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/SetPassword/:key\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"GetPasswordTemplate\"),\r\n controller: \"setNewPasswordCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"LoginLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/unsubscribe/:cont?\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Unsubscribe\"),\r\n controller: \"unsubscribeCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"LoginLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/SiteDisabled\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"SiteDisabled\"),\r\n controller: \"siteDisabledCtrl\"\r\n });\r\n })\r\n .controller(\"loginCtrl\", function loginCtrl($scope, $http, $q, $rootScope, $timeout, Authentication, WebUserSvc, WebProfileService, validatorSvc, constantLists, $routeParams, $location, localStrings)\r\n {\r\n 'use strict';\r\n $scope.logout();\r\n $scope.showLogin = false;\r\n $scope.showProfileSelector = false;\r\n $scope.showForgotPassword = false;\r\n\r\n $scope.initializeLogin = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n\r\n $scope.applySystemSettings();\r\n $scope.showLogin = true;\r\n\r\n if ($routeParams.impersonationGuid) {\r\n $rootScope.loginInfo.impersonationAccessGuid = $routeParams.impersonationGuid;\r\n $rootScope.loginInfo.userIsImpersonated = true;\r\n $rootScope.automatedLogin = true;\r\n }\r\n\r\n $scope.getRememberMe();\r\n };\r\n\r\n $scope.checkForAutomatedLogin = function () {\r\n if ($rootScope.automatedLogin) {\r\n $scope.loginInfo.userId = $rootScope.automatedLogin.userId || \"\";\r\n $scope.loginInfo.password = $rootScope.automatedLogin.password || \"\";\r\n $scope.authenticateUser();\r\n $rootScope.automatedLogin = undefined;\r\n }\r\n };\r\n\r\n $scope.authenticateUser = function ()\r\n {\r\n // Omit automated logins from triggering empty password / userid validations on elements\r\n if (!$rootScope.automatedLogin && !validatorSvc.executeValidations())\r\n return;\r\n\r\n $scope.error = \"\";\r\n $rootScope.passwordExpired = {};\r\n $rootScope.passwordDays = {};\r\n $scope.setRememberMe();\r\n\r\n // Reset the locked account display\r\n $scope.lockedAccount.hide();\r\n\r\n // Attempt to log the user in\r\n Authentication.login($scope.loginInfo.userId, $scope.loginInfo.password, $rootScope.loginInfo.impersonationAccessGuid).then(function (data)\r\n {\r\n // Store the token via LocalStorage (more secure than normal cookies)\r\n var user = data;\r\n var token = user.Token;\r\n amplify.store('pnuser-token', token, { expires: $rootScope.timeout });\r\n\r\n WebUserSvc.validatePasswordComplexity(user.Key, $scope.loginInfo.password, true).then(function (errorList) {\r\n if (errorList.length > 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"PasswordComplexityEnforced\"), 'error');\r\n return;\r\n }\r\n else\r\n {\r\n $scope.retrieveWebUser(user.Key);\r\n }\r\n });\r\n\r\n }, function (err)\r\n {\r\n $scope.error = err;\r\n });\r\n };\r\n\r\n $scope.retrieveWebUser = function (webUserKey)\r\n {\r\n if (Authentication.isAuthenticated())\r\n {\r\n WebUserSvc.retrieveWebUser(webUserKey).then(function (data)\r\n {\r\n data.Answer2 = data.Answer;\r\n $scope.appInfo.webUser = data;\r\n\r\n var _webProfileCount = $scope.appInfo.webUser.WebProfiles.length;\r\n if (_webProfileCount === 0) {\r\n $scope.showLogin = true;\r\n $scope.modalifier.show(\r\n localStrings.getLocalizedString(\"LogIn\"),\r\n localStrings.getLocalizedString(\"NoWebProfile\"));\r\n return;\r\n }\r\n\r\n if (_webProfileCount > 1) {\r\n $scope.showLogin = false;\r\n $scope.showProfileSelector = true;\r\n $scope.appInfo.profileKey = $scope.appInfo.webUser.WebProfiles[0].Key;\r\n return;\r\n }\r\n\r\n if ( _webProfileCount === 1 ) {\r\n $scope.appInfo.profileKey = $scope.appInfo.webUser.WebProfiles[0].Key;\r\n $scope.loadSelectedProfile();\r\n } \r\n return;\r\n });\r\n }\r\n };\r\n\r\n $scope.loadSelectedProfile = function ()\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty($scope.appInfo.profileKey) || $scope.appInfo.profileKey < 0) {\r\n $scope.appInfo.profileKey = WebUserSvc.getWebUserProfile();\r\n }\r\n\r\n WebUserSvc.retrieveSelectedProfile($scope.appInfo.webUser.Id, $scope.appInfo.profileKey).then(function (data)\r\n {\r\n amplify.store('pnAuthIndex', WebUserSvc.getCurrentAuthorization() || 0);\r\n amplify.store('pnWebProfile', $scope.appInfo.profileKey);\r\n $scope.applySelectedProfile();\r\n $scope.goTo('/Home');\r\n });\r\n };\r\n\r\n $scope.showForgotMyPassword = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n validatorSvc.addScopeToValidate($scope);\r\n\r\n $scope.showLogin = !$scope.showLogin;\r\n $scope.showForgotPassword = !$scope.showForgotPassword;\r\n };\r\n\r\n $scope.submitForgotMyPassword = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n WebUserSvc.processForgotMyPassword($scope.loginInfo.userId).then(function (data)\r\n {\r\n if (data.Success)\r\n $scope.notifier.show(localStrings.getLocalizedString(\"RequestBeingProcessed\"), 'success');\r\n else\r\n $scope.notifier.show(localStrings.getLocalizedString(\"RequestNotProcessed\"), 'error');\r\n });\r\n $scope.showForgotMyPassword();\r\n };\r\n\r\n $scope.setRememberMe = function ()\r\n {\r\n if ($scope.loginInfo.rememberMe)\r\n amplify.store('pnLoginEmail', $rootScope.loginInfo.userId);\r\n else\r\n amplify.store('pnLoginEmail', null);\r\n };\r\n\r\n $scope.getRememberMe = function ()\r\n {\r\n var result = amplify.store('pnLoginEmail');\r\n if (angular.isUndefinedOrNullOrEmpty(result))\r\n {\r\n $rootScope.loginInfo.userId = '';\r\n $rootScope.loginInfo.rememberMe = false;\r\n }\r\n else\r\n {\r\n $rootScope.loginInfo.userId = result;\r\n $rootScope.loginInfo.rememberMe = true;\r\n }\r\n };\r\n })\r\n .controller(\"signupCtrl\", function ($scope, $rootScope, $routeParams, WebUserSvc, validatorSvc, constantLists, localStrings)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n\r\n //grab the branding information for the site\r\n $scope.applySystemSettings();\r\n\r\n $scope.signup = {\r\n displayControls: false,\r\n webUser: {\r\n Timestamp: '',\r\n Answer: '',\r\n AnswerClear: '',\r\n GUID: '',\r\n Id: '',\r\n Key: '',\r\n Password: '',\r\n PasswordClear: '',\r\n Question: '',\r\n QuestionClear: '',\r\n Reset: '',\r\n Validated: ''\r\n },\r\n error: [],\r\n controls: {\r\n password: '',\r\n confirmPassword: '',\r\n question: '',\r\n answer: '',\r\n confirmAnswer: '',\r\n valid: true,\r\n secretQuestions: constantLists.secretQuestions\r\n }\r\n };\r\n\r\n $scope.kendo = {instance: null};\r\n\r\n $scope.getWebUser();\r\n };\r\n\r\n $scope.getWebUser = function ()\r\n {\r\n if ($routeParams.request)\r\n {\r\n $scope.signup.webUser.GUID = $routeParams.request;\r\n WebUserSvc.getWebUserForSignup($scope.signup.webUser).then(\r\n function (data)\r\n {\r\n if (!angular.isUndefinedOrNullOrEmpty(data.Id))\r\n {\r\n $scope.signup.webUser = data;\r\n $scope.signup.displayControls = true;\r\n return;\r\n }\r\n else\r\n {\r\n $scope.signup.displayControls = false;\r\n $scope.notifier.show(localStrings.getLocalizedString(\"InvalidRequestContact\"), 'error');\r\n $scope.goTo('/');\r\n }\r\n }\r\n );\r\n }\r\n else\r\n {\r\n $scope.GUID = 0;\r\n $scope.notifier.show(localStrings.getLocalizedString(\"URLInvalid\"), \"error\");\r\n $scope.goTo('/');\r\n }\r\n };\r\n\r\n $scope.sendWebUser = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n $scope.signup.webUser.PasswordClear = $scope.signup.controls.password;\r\n $scope.signup.webUser.QuestionClear = $scope.signup.controls.question;\r\n $scope.signup.webUser.AnswerClear = $scope.signup.controls.answer;\r\n\r\n WebUserSvc.signupWebUser($scope.signup.webUser).then(\r\n function (data)\r\n {\r\n if (data.Validated === true)\r\n {\r\n $rootScope.automatedLogin = {userId: data.Id, password: $scope.signup.controls.password};\r\n $scope.goTo(\"/\");\r\n }\r\n },\r\n function (err)\r\n {\r\n $scope.signup.errors = [];\r\n\r\n angular.forEach(err, function (item)\r\n {\r\n $scope.notifier.show(item, 'error');\r\n });\r\n }\r\n );\r\n\r\n };\r\n\r\n $scope.clearErrors = function ()\r\n {\r\n validatorSvc.clearAllValidations();\r\n };\r\n })\r\n .controller(\"resetPasswordCtrl\", function ($scope, $rootScope, $routeParams, WebUserSvc, validatorSvc, localStrings)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n\r\n //grab the branding information for the site\r\n $scope.applySystemSettings();\r\n\r\n $scope.resetPassword = {\r\n displayTitle: '',\r\n displayQuestion: false,\r\n displayPassword: false,\r\n displayButton: false,\r\n webUser: {\r\n Timestamp: '',\r\n Answer: '',\r\n AnswerClear: '',\r\n GUID: '',\r\n Id: '',\r\n Key: '',\r\n Password: '',\r\n PasswordClear: '',\r\n Question: '',\r\n QuestionClear: '',\r\n Reset: '',\r\n Validated: ''\r\n },\r\n error: [],\r\n controls: {\r\n password: '',\r\n confirmPassword: '',\r\n answer: '',\r\n valid: true,\r\n buttonText: 'Submit'\r\n }\r\n };\r\n\r\n $scope.getWebUser();\r\n };\r\n\r\n $scope.getWebUser = function ()\r\n {\r\n if ($routeParams.request)\r\n {\r\n $scope.resetPassword.webUser.GUID = $routeParams.request;\r\n WebUserSvc.getWebUserForPasswordReset($scope.resetPassword.webUser).then(\r\n function (data)\r\n {\r\n if (!angular.isUndefinedOrNullOrEmpty(data.Id))\r\n {\r\n $scope.resetPassword.webUser = data;\r\n $scope.resetPassword.displayTitle = localStrings.getLocalizedString(\"AnswerSecurityQuestion\");\r\n if ($rootScope.passwordExpired === true)\r\n {\r\n $scope.resetPassword.displayTitle = localStrings.getLocalizedString(\"PasswordExpired\") + '
' + $scope.resetPassword.displayTitle;\r\n }\r\n $scope.resetPassword.displayQuestion = true;\r\n $scope.resetPassword.displayButton = true;\r\n }\r\n else\r\n {\r\n $scope.resetPassword.displayQuestion = false;\r\n $scope.resetPassword.displayPassword = false;\r\n $scope.resetPassword.displayButton = false;\r\n $scope.resetPassword.displayTitle = localStrings.getLocalizedString(\"InvalidRequest\");\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ContactAdmin\"), \"error\");\r\n $scope.goTo('/');\r\n }\r\n }\r\n );\r\n }\r\n else\r\n {\r\n $scope.GUID = 0;\r\n $scope.notifier.show(localStrings.getLocalizedString(\"URLInvalid\"), \"error\");\r\n $scope.goTo('/');\r\n }\r\n };\r\n\r\n $scope.sendAnswer = function ()\r\n {\r\n $scope.resetPassword.webUser.AnswerClear = $scope.resetPassword.controls.answer;\r\n WebUserSvc.verifyWebUserSecretQuestionAnswer($scope.resetPassword.webUser).then(\r\n function (data)\r\n {\r\n if (data === 1)\r\n {\r\n $scope.resetPassword.displayQuestion = false;\r\n $scope.resetPassword.displayTitle = localStrings.getLocalizedString(\"EnterConfirmNewPassword\");\r\n $scope.resetPassword.controls.buttonText = localStrings.getLocalizedString(\"SaveAndLogin\");\r\n $scope.resetPassword.displayPassword = true;\r\n }\r\n else\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"AnswerNotCorrect\"), \"error\");\r\n }\r\n },\r\n function (err)\r\n {\r\n }\r\n );\r\n\r\n };\r\n\r\n $scope.setNewPassword = function ()\r\n {\r\n $scope.resetPassword.webUser.PasswordClear = $scope.resetPassword.controls.password;\r\n WebUserSvc.resetWebUserPassword($scope.resetPassword.webUser).then(\r\n function (data)\r\n {\r\n if (data.Validated === true)\r\n {\r\n $rootScope.automatedLogin = {userId: data.Id, password: $scope.resetPassword.controls.password};\r\n $scope.goTo(\"/\");\r\n }\r\n },\r\n function (err)\r\n {\r\n $scope.resetPassword.errors = [];\r\n\r\n angular.forEach(err, function (item)\r\n {\r\n $scope.notifier.show(item, \"error\");\r\n });\r\n }\r\n );\r\n };\r\n\r\n $scope.submitInfo = function ()\r\n {\r\n $scope.resetPassword.error = [];\r\n\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n if ($scope.resetPassword.displayQuestion)\r\n {\r\n $scope.sendAnswer();\r\n }\r\n\r\n if ($scope.resetPassword.displayPassword)\r\n {\r\n $scope.setNewPassword();\r\n }\r\n };\r\n\r\n $scope.clearErrors = function ()\r\n {\r\n validatorSvc.clearAllValidations();\r\n };\r\n })\r\n .controller(\"setNewPasswordCtrl\", function ($scope, $rootScope, $routeParams, WebUserSvc, validatorSvc, WebProfileService, localStrings)\r\n {\r\n 'use strict';\r\n $scope.webUserKey = -1;\r\n $scope.webUserToUpdate = {};\r\n\r\n $scope.initialize = function ()\r\n {\r\n var profileKey = ($scope.appInfo && $scope.appInfo.profileKey) ? $scope.appInfo.profileKey : 0;\r\n\r\n WebProfileService.getWebProfileMessage(profileKey, 27).then(function (data)\r\n {\r\n $scope.customMessage = data.isBlank() ? localStrings.getLocalizedString(\"PasswordExpiredNew\") : data;\r\n });\r\n\r\n if ($routeParams.key)\r\n {\r\n $scope.webUserToUpdate = {\r\n Timestamp: '',\r\n Answer: '',\r\n AnswerClear: '',\r\n GUID: '',\r\n Id: '',\r\n Key: $routeParams.key,\r\n Password: '',\r\n PasswordClear: '',\r\n Question: '',\r\n QuestionClear: '',\r\n Reset: '',\r\n Validated: ''\r\n };\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n\r\n };\r\n\r\n $scope.submitPassword = function ()\r\n {\r\n //$scope.resetPassword.error = [];\r\n\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n $scope.setNewPassword();\r\n };\r\n\r\n $scope.setNewPassword = function ()\r\n {\r\n $scope.webUserToUpdate.OldPassword = $scope.appInfo.pageInfo.controls.oldPassword;\r\n $scope.webUserToUpdate.PasswordClear = $scope.appInfo.pageInfo.controls.password;\r\n\r\n WebUserSvc.resetWebUserPassword($scope.webUserToUpdate).then(\r\n function (data)\r\n {\r\n $scope.appInfo.pageInfo.success = true;\r\n if (data.Validated === true)\r\n {\r\n $rootScope.automatedLogin = {userId: data.Id, password: $scope.webUserToUpdate.PasswordClear};\r\n $scope.goTo(\"/\");\r\n }\r\n },\r\n function (err)\r\n {\r\n angular.forEach(err, function (item)\r\n {\r\n $scope.notifier.show(item, \"error\");\r\n });\r\n }\r\n );\r\n };\r\n\r\n $scope.clearErrors = function ()\r\n {\r\n validatorSvc.clearAllValidations();\r\n };\r\n })\r\n .controller(\"unsubscribeCtrl\", function ($scope, $routeParams, validatorSvc, userAccountService, localStrings)\r\n {\r\n 'use strict';\r\n\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n\r\n //apply the branding information for the site\r\n $scope.applySystemSettings();\r\n\r\n $scope.resultMessage = localStrings.getLocalizedString(\"UnsubscribeRequest\");\r\n\r\n if ($routeParams.cont)\r\n {\r\n userAccountService.unsubscribeContact($routeParams.cont).then(\r\n function (data)\r\n {\r\n if (data.Successful && !data.Unsubscibed)\r\n {\r\n $scope.resultMessage = localStrings.getLocalizedString(\"UnsubscribeSuccessful\");\r\n }\r\n else\r\n {\r\n $scope.resultMessage = localStrings.getLocalizedString(\"UnsubscribeNotSuccessful\");\r\n }\r\n },\r\n function (data) //http request failed\r\n {\r\n $scope.resultMessage = localStrings.getLocalizedString(\"UnsubscribeNotSuccessful\");\r\n });\r\n }\r\n else\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"InvalidRequestContact\"), 'error');\r\n $scope.goTo('/Home');\r\n }\r\n };\r\n })\r\n .controller(\"siteDisabledCtrl\", function siteDisabledCtrl($scope, $window)\r\n {\r\n 'use strict';\r\n\r\n $scope.initializePage = function ()\r\n {\r\n $scope.applySystemSettingsSiteDisabled();\r\n };\r\n });","angular.module(\"pnPages\", ['core.objects', 'services.pages', 'core.directives'])\n .config(function ($routeProvider, templateProvider) {\n $routeProvider\n .when(\"/Pages/\",\n {\n templateUrl: templateProvider.getTemplate(\"Pages\"),\n controller: \"customPagesCtrl\",\n controllerAs: \"ctrl\"\n })\n .when(\"/Pages/Detail/:key\",\n {\n templateUrl: templateProvider.getTemplate(\"PagesDetail\"),\n controller: \"customPagesDetailCtrl\",\n controllerAs: \"customPagesDetailCtrl\",\n resolve: {\n localStrings: function (localizationSvc) {\n return localizationSvc.getCachedLocalizationsContainer(\"PagesLocalization\");\n }\n }\n })\n ;\n })\n .filter('encodeURIComponent', ['$window', function ($window) {\n return function (input) {\n return encodeURIComponent(input);\n };\n }])\n .controller('customPagesCtrl', function ($scope, templates, PagesService, WebFunctions) {\n 'use strict';\n var ctrl = this;\n ctrl.Context = {\n Pages: [],\n Tokens: []\n };\n\n ctrl.initialize = function () {\n if (!$scope.checkCurrentUserPermission(WebFunctions.ViewCustomPages)) {\n $scope.goTo(\"/Home\");\n }\n $scope.locationInfo.menuLocation = 7;\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PagesSideMenu\");\n if (!$scope.locationInfo.sideMenuData)\n $scope.locationInfo.sideMenuData = {};\n $scope.locationInfo.sideMenuData.subMenu = \"0\";\n\n $scope.checkForAppliedProfile();\n PagesService.getWebProfileSiteLayout($scope.appInfo.profileKey).then(function (response) {\n if (response.Successful) {\n //get custom pages key\n var customPagesMenuNode = response.SiteLayout.MenuNodes.filter(function (val, index) {\n return val.Name === 'Custom Pages';\n });\n if (!angular.isUndefinedOrNullOrEmpty(customPagesMenuNode) && customPagesMenuNode.length === 1) {\n ctrl.Context.Pages = response.SiteLayout.MenuNodes.filter(function (val, index) {\n return val.ParentKey === customPagesMenuNode[0].Key;\n });\n }\n }\n });\n };\n })\n .controller('customPagesDetailCtrl', function ($scope, $routeParams, PagesService, $sce, WebFunctions, templates, $http, localStrings, $rootScope, $timeout, $interval) {\n 'use strict';\n var ctrl = this;\n ctrl.reloadInterval = 0;\n ctrl.selectedPage = {};\n ctrl.initialize = function (conf) {\n if (!$scope.checkCurrentUserPermission(WebFunctions.ViewCustomPages)) {\n $scope.goTo(\"/Home\");\n }\n\n $scope.locationInfo.menuLocation = 7;\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PagesSideMenu\");\n if (!$scope.locationInfo.sideMenuData)\n $scope.locationInfo.sideMenuData = {};\n $scope.locationInfo.sideMenuData.subMenu = \"0\";\n PagesService.getWebProfileSiteLayout($scope.appInfo.profileKey).then(function (response) {\n if (response.Successful) {\n //get custom pages key\n var customPagesMenuNode = response.SiteLayout.MenuNodes.filter(function (val, index) {\n return val.Name === 'Custom Pages';\n });\n if (!angular.isUndefinedOrNullOrEmpty(customPagesMenuNode) && customPagesMenuNode.length === 1) {\n var pages = response.SiteLayout.MenuNodes.filter(function (val, index) {\n return val.ParentKey === customPagesMenuNode[0].Key;\n });\n var key = $routeParams.key;\n if (!angular.isUndefinedOrNullOrEmpty(key)) {\n var selectedIndex = 0;\n var foundPage = pages.filter(function (val, index) {\n if (val.Key.toString() === key) {\n selectedIndex = index;\n return true;\n }\n return false;\n });\n if (!angular.isUndefinedOrNullOrEmpty(foundPage) && foundPage.length > 0) {\n ctrl.selectedPage = foundPage[0];\n $scope.locationInfo.sideMenuData.subMenu = selectedIndex;\n retrieveToken(conf);\n }\n }\n }\n }\n });\n };\n\n function retrieveToken(conf) {\n PagesService.getAccessToken($scope.appInfo.profileKey, ctrl.selectedPage.Key).then(\n function (response) {\n if (response && response.Successful && response.AccessToken.Success) {\n if (angular.isUndefinedOrNullOrEmpty(response.MenuNode.ClientAuthMethod)) {\n var url = $sce.trustAsResourceUrl(ctrl.selectedPage.PageURL);\n angular.element(\"#customPageWrapper\").attr('src', url);\n }\n else {\n if (!angular.isUndefinedOrNullOrEmpty(response.AccessToken.access_token)) {\n switch (response.MenuNode.ClientAuthMethod) {\n case conf.AuthMethods.Header:\n var req = {\n method: 'GET',\n url: ctrl.selectedPage.PageURL,\n headers: {\n 'Authorization': 'Bearer ' + response.AccessToken.access_token\n }\n };\n $http(req).then(\n function (response) {\n // A response status code between 200 and 299 is considered a success status\n if (response.status >= 200 && response.status < 300) {\n var data = response.data || '';\n if (response.data && response.data.indexOf('', '');\n }\n var frame = document.querySelector('#customPageWrapper');\n \n frame.contentWindow.document.open('text/html', 'replace');\n frame.contentWindow.document.write(data);\n frame.contentWindow.document.close();\n }\n },\n function (failed) {\n var msg = localStrings.getLocalizedString(\"UnableProcessPage\").replace('{0}', ctrl.selectedPage.Name);\n $rootScope.notifier.show(msg, 'error');\n }\n );\n break;\n case conf.AuthMethods.URL:\n var glue = (ctrl.selectedPage.PageURL.includes('?') ? '&' : '?');\n var params = glue + 'access_token=' + encodeURIComponent(response.AccessToken.access_token) + '&token_type=' + response.AccessToken.token_type;\n angular.element(\"#customPageWrapper\").attr('src', $sce.trustAsResourceUrl(ctrl.selectedPage.PageURL + params));\n break;\n }\n }\n else {\n var msg = localStrings.getLocalizedString(\"UnableProcessPage\").replace('{0}', ctrl.selectedPage.Name);\n $rootScope.notifier.show(msg, 'error');\n }\n }\n // register auto refresh - force to reload iFrame when approaching token expiration\n if (!angular.isUndefinedOrNullOrEmpty(response.AccessToken.expires_in) && !angular.isUndefinedOrNullOrEmpty(response.AccessToken.access_token)) {\n $timeout(function () {\n retrieveToken(conf);\n }, (response.AccessToken.expires_in * 1000));\n }\n }\n },\n function (failure) {\n var msg = localStrings.getLocalizedString(\"UnableProcessPage\").replace('{0}', ctrl.selectedPage.Name);\n $rootScope.notifier.show(msg, 'error');\n });\n }\n })\n .controller('customPagesSideMenuCtrl', function ($scope, $rootScope, $routeParams, PagesService) {\n 'use strict';\n var ctrl = this;\n ctrl.Context = {\n Pages: []\n };\n ctrl.isSelected = function (index) {\n var retval = $scope.locationInfo.sideMenuData.subMenu === index;\n if (retval) {\n ctrl.selectedPage = ctrl.Context.Pages[index];\n }\n return retval;\n };\n ctrl.initialize = function () {\n PagesService.getWebProfileSiteLayout($scope.appInfo.profileKey).then(function (response) {\n if (response.Successful) {\n //get custom pages key\n var customPagesMenuNode = response.SiteLayout.MenuNodes.filter(function (val, index) {\n return val.Name === 'Custom Pages';\n });\n if (!angular.isUndefinedOrNullOrEmpty(customPagesMenuNode) && customPagesMenuNode.length === 1) {\n ctrl.Context.Pages = response.SiteLayout.MenuNodes.filter(function (val, index) {\n return val.ParentKey === customPagesMenuNode[0].Key;\n });\n }\n }\n });\n };\n });\n","/**\r\n * Created by rhampton on 8/19/2014.\r\n */\r\nangular.module(\"pnPaperwork\", ['core.objects'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n\r\n $routeProvider\r\n .when(\"/Paperwork/EnterPaperwork/\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EnterPaperwork\"),\r\n controller: \"enterPaperworkStartCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/EnterPaperwork/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EnterPaperworkMeters\"),\r\n controller: \"enterPaperworkCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/EnterPaperworkDeliveries/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EnterPaperworkDeliveries\"),\r\n controller: \"enterPaperworkDeliveriesCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/EnterPaperworkTanks/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EnterPaperworkTanks\"),\r\n controller: \"enterPaperworkTanksCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/EnterPaperworkDealerForms/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EnterPaperworkDealerForms\"),\r\n controller: \"enterPaperworkDealerFormsCtrl\"\r\n })\r\n .when(\"/Paperwork/ReviewPaperwork\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ReviewPaperwork\"),\r\n controller: \"reviewPaperworkCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/Reports\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ReportsPaperwork\"),\r\n controller: \"reportsPaperworkStartCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/Reports/:reportName\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ReportsPaperwork\"),\r\n controller: \"paperworkReportCtrl\"\r\n })\r\n .when(\"/Paperwork/ViewPaperwork/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewPaperwork\"),\r\n controller: \"enterPaperworkCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/ViewPaperworkTanks/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewPaperworkTanks\"),\r\n controller: \"enterPaperworkTanksCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/ViewPaperworkDeliveries/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewPaperworkDeliveries\"),\r\n controller: \"enterPaperworkDeliveriesCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/ViewPaperworkDealerForms/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewPaperworkDealerForms\"),\r\n controller: \"enterPaperworkDealerFormsCtrl\"\r\n })\r\n .when(\"/Paperwork/InventorySummary\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"InventorySummary\"),\r\n controller: \"inventorySummaryCtrl\"\r\n })\r\n .when(\"/Paperwork/InventorySummary/:sitekey/:paperworkDate\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"InventorySummary\"),\r\n controller: \"inventorySummaryCtrl\"\r\n });\r\n })\r\n .controller('reviewPaperworkSideMenuCtrl', function ($scope, PaperworkService, PaperworkReportsService, WebFunctions, $location)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $scope.appInfo.paperwork.context = $scope.appInfo.paperwork.context || {};\r\n $scope.appInfo.paperwork.reports = $scope.appInfo.paperwork.reports || {};\r\n $scope.locationInfo.sideMenuData.reviewPaperwork = {};\r\n $scope.locationInfo.sideMenuData.reviewPaperwork.loaded = false;\r\n $scope.locationInfo.sideMenuData.reviewPaperwork.unposted = true;\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n\r\n // There is a race condition when reloading the page\r\n // Check if the date selector is undefined, if it is then initialize it\r\n if (angular.isUndefinedOrNullOrEmpty($scope.dateSelector)) {\r\n $scope.initializeDateSelector();\r\n }\r\n\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.displaySelector = true;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.selection = 11;\r\n\r\n PaperworkService.getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, true).then(\r\n function (data) {\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.selectedSite = data.SelectedSiteKey;\r\n $scope.locationInfo.sideMenuData.reviewPaperwork.loaded = true;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n $scope.setSiteDescByKey();\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem) {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n },\r\n function (err) {\r\n $scope.locationInfo.sideMenuData.reviewPaperwork.loaded = true;\r\n //TODO: notify somebody\r\n }\r\n );\r\n\r\n PaperworkReportsService\r\n .getPaperworkReports($scope.appInfo.webUser.CurrentAuthorization.CustContKey, false)\r\n .then(function (data) {\r\n if (data.Successful && !angular.isUndefinedOrNullOrEmpty(data.PaperworkReports)) {\r\n $scope.appInfo.paperwork.reports.paperworkReports = data.PaperworkReports;\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.setSiteDescByKey = function ()\r\n {\r\n angular.forEach($scope.appInfo.paperwork.context.paperworkSites, function (site, index)\r\n {\r\n if (site.SiteKey === $scope.appInfo.paperwork.context.selectedSite)\r\n $scope.appInfo.paperwork.context.selectedSiteObj = site;\r\n });\r\n };\r\n })\r\n .controller('enterPaperworkSideMenuCtrl', function ($scope, PaperworkService, $filter, WebFunctions, $rootScope, localizationSvc, setupNav, $location)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n $scope.retailWarningMessage = localStrings.getLocalizedString(\"WarningRetailPrice\");\r\n $scope.averageWarningMessage = localStrings.getLocalizedString(\"WarningAveragePrice\");\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.paperwork = {};\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n };\r\n\r\n $scope.setupAppNavigation = function ()\r\n {\r\n angular.forEach($scope.appInfo.paperwork.apps, function (app, index)\r\n {\r\n if (app.MenuCode === 'DREFD')\r\n {\r\n $scope.locationInfo.sideMenuData.paperwork.deliveries = app;\r\n }\r\n if (app.MenuCode === 'DREGM')\r\n {\r\n $scope.locationInfo.sideMenuData.paperwork.meters = app;\r\n }\r\n if (app.MenuCode === 'DREGS')\r\n {\r\n $scope.locationInfo.sideMenuData.paperwork.tanks = app;\r\n }\r\n if (app.DealerFormVersionKey > 0)\r\n {\r\n app.MenuCode = 'DRDFE';\r\n $scope.locationInfo.sideMenuData.paperwork.forms = app;\r\n $scope.appInfo.paperwork.form.AppKey = app.Key;\r\n }\r\n });\r\n };\r\n\r\n $scope.openNewPaperworkBatch = function ()\r\n {\r\n PaperworkService.OpenPaperworkBatch(\r\n $scope.appInfo.paperwork.context.selectedSite,\r\n $scope.urlFormatDate($scope.locationInfo.sideMenuData.paperwork.date, true),\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n false\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.batch = data.PaperworkBatch.PaperworkBatch;\r\n $scope.appInfo.paperwork.apps = data.PaperworkBatch.PaperworkApps;\r\n $scope.appInfo.paperwork.form = data.PaperworkBatch.PaperworkForm;\r\n $scope.appInfo.paperwork.siteInfo = data.PaperworkBatch.PaperworkSiteInfo;\r\n $scope.appInfo.paperwork.paperworkKey = $scope.appInfo.paperwork.batch.Key;\r\n $scope.setupAppNavigation();\r\n \r\n $rootScope.$broadcast('event:NewPaperworkBatchLoaded', {});\r\n });\r\n };\r\n\r\n var pwLoadedListener = $rootScope.$on('event:PaperworkLoaded', function (event, viewOnly, data)\r\n {\r\n $scope.setupAppNavigation();\r\n });\r\n $scope.$on('$destroy', pwLoadedListener);\r\n\r\n $scope.navPg = function (menuCode)\r\n {\r\n $scope.appInfo.paperwork.viewOnly = false;\r\n\r\n if ($location.$$path.indexOf('/ViewPaperwork/') > -1) $scope.appInfo.paperwork.viewOnly = true;\r\n if ($location.$$path.indexOf('/ViewPaperworkDeliveries/') > -1) $scope.appInfo.paperwork.viewOnly = true;\r\n if ($location.$$path.indexOf('/ViewPaperworkTanks/') > -1) $scope.appInfo.paperwork.viewOnly = true;\r\n if ($location.$$path.indexOf('/ViewPaperworkDealerForms/') > -1) $scope.appInfo.paperwork.viewOnly = true;\r\n \r\n // Broadcast the current module menu code this will trigger save in each controller when paperwork is in Enter mode before going to another menu\r\n if($scope.appInfo.paperwork.viewOnly) $rootScope.$broadcast('event:PageStage', setupNav.resolveCurrentPageMenuCode($location.$$path));\r\n\r\n $scope.goTo(setupNav.getSinglePath(menuCode,$scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, false));\r\n };\r\n\r\n })\r\n .controller('inventorySummarySideMenuCtrl', function ($scope, PaperworkService, PaperworkReportsService, $routeParams, WebFunctions, reportingService, validatorSvc)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n $scope.$root.reportSettings.reportKey = 19;\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.inventorySummary = {};\r\n $scope.locationInfo.sideMenuData.subMenu = '3';\r\n $scope.locationInfo.sideMenuData.inventorySummary.reportType = 'PaperworkSummary ';\r\n $scope.appInfo = $scope.appInfo || {};\r\n $scope.appInfo.paperwork = $scope.appInfo.paperwork || {};\r\n $scope.appInfo.paperwork.context = $scope.appInfo.paperwork.context || {};\r\n $scope.appInfo.paperwork.reports = $scope.appInfo.paperwork.reports || {};\r\n\r\n $scope.appInfo.paperwork.context.selectedSiteObj = { SiteKey: -1 };\r\n\r\n // There is a race condition when reloading the page\r\n // Check if the date selector is undefined, if it is then initialize it\r\n if (angular.isUndefinedOrNullOrEmpty($scope.dateSelector)) {\r\n $scope.initializeDateSelector();\r\n }\r\n\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.displaySelector = false;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.selection = 14;\r\n\r\n PaperworkService\r\n .getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, true)\r\n .then(function (data)\r\n {\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n\r\n if (!$scope.setSiteAndDate())\r\n {\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey = data.SelectedSiteKey;\r\n $scope.dateSelector.startDate = $scope.formatDate(data.NextPaperworkDate);\r\n }\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n $scope.applyAction();\r\n },\r\n function (err)\r\n {\r\n $scope.locationInfo.sideMenuData.reviewPaperwork.loaded = true;\r\n //TODO: notify somebody\r\n }\r\n );\r\n\r\n PaperworkReportsService\r\n .getPaperworkReports($scope.appInfo.webUser.CurrentAuthorization.CustContKey, false)\r\n .then(function (data) {\r\n if (data.Successful && !angular.isUndefinedOrNullOrEmpty(data.PaperworkReports)) {\r\n $scope.appInfo.paperwork.reports.paperworkReports = data.PaperworkReports;\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.inventorySummary = $scope.reportSettings.loadOptions.controls;\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey = $scope.reportSettings.loadOptions.selectedSite;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.inventorySummary;\r\n $scope.reportSettings.saveOptions.selectedSite = $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.setNextPaperworkDate = function (e)\r\n {\r\n if ($scope.setSiteAndDate())\r\n return;\r\n\r\n PaperworkService.getNextPaperworkDate(e.sender.dataItem(e.sender.select()).SiteKey, true).then(\r\n function (data)\r\n {\r\n $scope.dateSelector.startDate = $scope.formatDate(data);\r\n }\r\n );\r\n };\r\n\r\n $scope.setSiteAndDate = function ()\r\n {\r\n if ($routeParams.sitekey && $routeParams.paperworkDate)\r\n {\r\n $scope.appInfo.paperwork.context.selectedSiteObj = {SiteKey: -1};\r\n\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey = parseInt($routeParams.sitekey, 10);\r\n $scope.dateSelector.startDate = $scope.formatDate($routeParams.paperworkDate);\r\n return true;\r\n }\r\n else\r\n return false;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n PaperworkService.ValidatePaperworkSiteDateForContact(\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey,\r\n $scope.urlFormatDate($scope.dateSelector.startDate, true),\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n false // not for entry\r\n ).then(function (data)\r\n {\r\n var qs = \"reportName=\" + $scope.locationInfo.sideMenuData.inventorySummary.reportType +\r\n \"&RP-SiteKey=\" + $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey +\r\n \"&RP-PWDate=\" + $scope.dateSelector.startDate;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n });\r\n\r\n };\r\n })\r\n .controller('reportsPaperworkStartCtrl', function ($scope, WebFunctions, templates, localStrings, PaperworkReportsService)\r\n {\r\n 'use strict';\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n \r\n $scope.appInfo = $scope.appInfo || {};\r\n $scope.appInfo.paperwork = {\r\n context: {},\r\n paperworkKey: 0,\r\n reports: {}\r\n };\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.appInfo.paperwork.reports.paperworkReports = [];\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportsSideMenu\");\r\n $scope.locationInfo.sideMenuData.paperwork = {};\r\n $scope.locationInfo.showEnterPaperworkMenuItem = false;\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 31;\r\n\r\n PaperworkReportsService\r\n .getPaperworkReports($scope.appInfo.webUser.CurrentAuthorization.CustContKey, false)\r\n .then(function (data) {\r\n if (data.Successful && !angular.isUndefinedOrNullOrEmpty(data.PaperworkReports)) {\r\n $scope.appInfo.paperwork.reports.paperworkReports = $scope.localizeReports(data.PaperworkReports).sort($scope.compareDisplayNames);\r\n }\r\n else {\r\n $scope.goTo(\"/Paperwork/EnterPaperwork\");\r\n $scope.modalifier.showSetupError();\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.localizeReports = function (reports) {\r\n angular.forEach(reports, function (report) {\r\n report.DisplayName = localStrings.getLocalizedString('SSRSReport' + report.Name);\r\n });\r\n\r\n return reports;\r\n };\r\n\r\n $scope.compareDisplayNames = function (a, b) {\r\n return a.DisplayName.localeCompare(b.DisplayName);\r\n };\r\n })\r\n .controller('enterPaperworkStartCtrl', function ($scope, $location, PaperworkService, PaperworkReportsService, WebFunctions, validatorSvc, templates, localStrings, setupNav)\r\n {\r\n 'use strict';\r\n $scope.averageWarningMessage = localStrings.getLocalizedString(\"WarningAveragePrice\");\r\n $scope.retailWarningMessage = localStrings.getLocalizedString(\"WarningRetailPrice\");\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n\r\n $scope.appInfo = $scope.appInfo || {};\r\n $scope.appInfo.paperwork = {\r\n context: {},\r\n paperworkKey: 0,\r\n reports: {}\r\n };\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.appInfo.paperwork.reports.paperworkReports = [];\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.paperwork = {};\r\n $scope.locationInfo.sideMenuData.isFirstPage = false;\r\n $scope.locationInfo.sideMenuData.isLastPage = false;\r\n $scope.locationInfo.sideMenuData.subMenu = '1';\r\n $scope.locationInfo.showEnterPaperworkMenuItem = false;\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n\r\n // There is a race condition when reloading the page\r\n // Check if the date selector is undefined, if it is then initialize it\r\n if (angular.isUndefinedOrNullOrEmpty($scope.dateSelector)) {\r\n $scope.initializeDateSelector();\r\n }\r\n\r\n $scope.dateSelector.displaySelector = true;\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.selection = 11;\r\n\r\n PaperworkService.getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, false).then(\r\n function (data)\r\n {\r\n if (data.Successful && !angular.isUndefinedOrNullOrEmpty(data.PaperworkSites))\r\n {\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.selectedSite = data.SelectedSiteKey;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n $scope.locationInfo.sideMenuData.paperwork.date = $scope.formatDate(data.NextPaperworkDate);\r\n $scope.locationInfo.sideMenuData.paperwork.minDate = $scope.formatDate(data.HistoryLimit);\r\n $scope.locationInfo.sideMenuData.paperwork.maxDate = $scope.formatDate(data.FutureLimit);\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n $scope.setSiteDescByKey();\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n }\r\n );\r\n\r\n PaperworkReportsService\r\n .getPaperworkReports($scope.appInfo.webUser.CurrentAuthorization.CustContKey, false)\r\n .then(function (data) {\r\n if (data.Successful && !angular.isUndefinedOrNullOrEmpty(data.PaperworkReports)) {\r\n $scope.appInfo.paperwork.reports.paperworkReports = data.PaperworkReports;\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.setNextPaperworkDate = function (e)\r\n {\r\n PaperworkService.getNextPaperworkDate(e.sender.dataItem(e.sender.select()).SiteKey, false).then(\r\n function (data)\r\n {\r\n $scope.dateSelector.startDate = $scope.formatDate(data);\r\n $scope.locationInfo.sideMenuData.paperwork.date = $scope.dateSelector.startDate;\r\n }\r\n );\r\n };\r\n\r\n $scope.setSiteDescByKey = function ()\r\n {\r\n angular.forEach($scope.appInfo.paperwork.context.paperworkSites, function (site, index)\r\n {\r\n if (site.SiteKey === $scope.appInfo.paperwork.context.selectedSite)\r\n $scope.appInfo.paperwork.context.selectedSiteObj = site;\r\n });\r\n };\r\n\r\n $scope.openNewPaperworkBatch = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n PaperworkService.OpenPaperworkBatch(\r\n $scope.appInfo.paperwork.context.selectedSite,\r\n $scope.urlFormatDate($scope.locationInfo.sideMenuData.paperwork.date, true),\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n false\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.batch = data.PaperworkBatch.PaperworkBatch;\r\n $scope.appInfo.paperwork.apps = data.PaperworkBatch.PaperworkApps;\r\n $scope.appInfo.paperwork.form = data.PaperworkBatch.PaperworkForm;\r\n $scope.appInfo.paperwork.siteInfo = data.PaperworkBatch.PaperworkSiteInfo;\r\n $scope.appInfo.paperwork.paperworkKey = $scope.appInfo.paperwork.batch.Key;\r\n \r\n $scope.goTo(setupNav.getRouterPath($scope.appInfo.paperwork.apps[0],$scope.appInfo.paperwork.paperworkKey, ($scope.appInfo.paperwork.batch.SubmitStatus >= \"3\")));\r\n });\r\n };\r\n })\r\n .controller('reviewPaperworkCtrl', function ($scope, $rootScope, validatorSvc, $location, PaperworkService, WebFunctions, $filter, templates, localStrings, globalizationSvc, setupNav)\r\n {\r\n 'use strict';\r\n validatorSvc.clearValidationScopes();\r\n $scope.kendo = {};\r\n $scope.kendo.paperworkHistoryGrid = {};\r\n $scope.kendo.paperworkHistoryGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"PaperworkDateFormatted\",\r\n title: localStrings.getLocalizedString(\"PaperworkDate\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"SubmitStatusDesc\",\r\n title: localStrings.getLocalizedString(\"Status\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"TotalFuelSales\",\r\n title: localStrings.getLocalizedString(\"DailyTotal\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: [],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true,\r\n width: '50%'\r\n };\r\n\r\n $scope.kendo.paperworkHistoryGridInit = function (ds)\r\n {\r\n $scope.kendo.paperworkHistoryGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.paperworkHistoryGridDS.read();\r\n $scope.kendo.paperworkHistoryGrid.dataSource.data($scope.kendo.paperworkHistoryGridDS.data());\r\n };\r\n\r\n $scope.reviewPaperwork = {};\r\n $scope.selectedReviewSite = {};\r\n $scope.viewPaperworkHistory = false;\r\n $scope.reviewLoaded = false;\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.noRecordsFound = false;\r\n $scope.appInfo = $scope.appInfo || {};\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $scope.reviewLoaded = true;\r\n };\r\n\r\n $scope.allEntry = function (batch)\r\n {\r\n return (batch.PaperworkDate > batch.InvtyCOGSDate) &&\r\n (batch.PaperworkDate > batch.FuelCOGSDate) &&\r\n (batch.SubmitStatus < 3 || !$scope.appInfo.paperwork.context.lockPaperworkAfterDru);\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n\r\n $scope.modalifier.hide();\r\n PaperworkService.getPaperworkBatchesByDate(\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey,\r\n $scope.urlFormatDate($scope.dateSelector.startDate, true),\r\n $scope.urlFormatDate($scope.dateSelector.endDate, true),\r\n $scope.locationInfo.sideMenuData.reviewPaperwork.unposted ? 1 : 0\r\n ).then(function (data)\r\n {\r\n if (data.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"PaperworkHistory\"));\r\n }\r\n\r\n data.each(function (item)\r\n {\r\n item.PaperworkDateFormatted = globalizationSvc.formatDateTime(item.PaperworkDate, 'd');\r\n item.TotalFuelSales = globalizationSvc.formatCurrency(item.TotalFuelSales);\r\n });\r\n\r\n $scope.kendo.paperworkHistoryGridInit(data);\r\n $scope.viewPaperworkHistory = true;\r\n });\r\n };\r\n\r\n $scope.loadPaperwork = function (item, isEntry)\r\n {\r\n PaperworkService.ValidatePaperworkSiteDateForContact(\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey,\r\n item.PaperworkDateFormatted,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n isEntry || false\r\n );\r\n\r\n PaperworkService.OpenPaperworkBatch(\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey,\r\n item.PaperworkDateFormatted,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n false\r\n ).then(function (data)\r\n {\r\n data.PaperworkBatch.PaperworkApps.find(function (item){\r\n if (item.DealerFormVersionKey > 0) {\r\n item.MenuCode = 'DRDFE';\r\n }\r\n });\r\n \r\n $location.path(setupNav.getSinglePath(data.PaperworkBatch.PaperworkApps[0].MenuCode, item.Key, !isEntry, false));\r\n });\r\n };\r\n })\r\n .controller('enterPaperworkCtrl', function ($scope, $rootScope, $routeParams, PaperworkService, $filter, $location, $timeout, WebFunctions,\r\n PaperworkMetersService, validatorSvc, templates, localStrings, globalizationSvc, setupNav)\r\n {\r\n 'use strict';\r\n $scope.averageWarningMessage = localStrings.getLocalizedString(\"WarningAveragePrice\");\r\n $scope.retailWarningMessage = localStrings.getLocalizedString(\"WarningRetailPrice\");\r\n $scope.appInfo.paperwork.paperworkKey = 0;\r\n $scope.appInfo.paperwork.showRetailPrice = false;\r\n $scope.appInfo.paperwork.showEndingDollar = false;\r\n $scope.appInfo.paperwork.showNetDollars = false;\r\n $scope.appInfo.paperwork.showEndingUnits = false;\r\n $scope.appInfo.paperwork.showNetUnits = false;\r\n $scope.appInfo.paperwork.showAvgPrice = false;\r\n $scope.appInfo.paperwork.showBeginMeters = false;\r\n\r\n $scope.appInfo.paperwork.meters = {};\r\n\r\n $scope.modalInfo = {};\r\n $scope.metersLoaded = false;\r\n\r\n $scope.kendo = {};\r\n\r\n $scope.kInputOptions = {\r\n culture: globalizationSvc.getLocale(),\r\n format: \"n\",\r\n decimals: 2,\r\n spinners: false\r\n };\r\n\r\n $scope.MaxUnits = 100000000;\r\n\r\n // controller destructor\r\n $scope.$on(\"$destroy\", function handler()\r\n {\r\n $rootScope.scopesToValidate = [];\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n $scope.appInfo.paperwork.viewOnly = $location.$$path.indexOf('/ViewPaperwork/') > -1;\r\n\r\n $scope.metersEditable = true;\r\n\r\n if ($routeParams.paperworkKey)\r\n {\r\n $scope.appInfo.paperwork.paperworkKey = $routeParams.paperworkKey;\r\n }\r\n\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = '1';\r\n // $scope.getWebProfileMessage(19);\r\n $scope.appInfo.paperwork.batch = {};\r\n\r\n if (!$scope.appInfo.paperwork.context)\r\n {\r\n PaperworkService.getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, true).then(\r\n function (data)\r\n {\r\n $scope.appInfo.paperwork.context = {};\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.selectedSite = data.SelectedSiteKey;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n }\r\n );\r\n } else\r\n {\r\n\r\n }\r\n\r\n\r\n if ($scope.appInfo.paperwork.paperworkKey > 0)\r\n {\r\n //We are loading a known existing paperwork batch\r\n PaperworkService.OpenPaperworkBatchByKey(\r\n $scope.appInfo.paperwork.paperworkKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n $scope.appInfo.paperwork.viewOnly\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.batch = data.PaperworkBatch.PaperworkBatch;\r\n $scope.appInfo.paperwork.apps = data.PaperworkBatch.PaperworkApps;\r\n $scope.appInfo.paperwork.form = data.PaperworkBatch.PaperworkForm;\r\n $scope.appInfo.paperwork.siteInfo = data.PaperworkBatch.PaperworkSiteInfo;\r\n \r\n // resolve if this is the first or last page\r\n var res = setupNav.firstLastPage('DREGM',$scope.appInfo.paperwork.apps);\r\n $scope.locationInfo.sideMenuData.isFirstPage = res.isFirstPage;\r\n $scope.locationInfo.sideMenuData.isLastPage = res.isLastPage;\r\n\r\n $rootScope.$broadcast('event:PaperworkLoaded', $scope.appInfo.paperwork.viewOnly, $scope.appInfo.paperwork.paperworkKey);\r\n\r\n var nextApp = true;\r\n angular.forEach($scope.appInfo.paperwork.apps, function (app, index)\r\n {\r\n if (app.MenuCode === 'DREGM')\r\n {\r\n $scope.loadMeters();\r\n nextApp = false;\r\n }\r\n });\r\n if (nextApp)\r\n {\r\n $scope.goTo(setupNav.navigateToPage('DREGM',$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, false));\r\n }\r\n }, function ()\r\n {\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n });\r\n }\r\n $scope.locationInfo.sideMenuData.pwSubMenu = '1';\r\n $scope.appInfo.paperwork.meterIndex = 0;\r\n\r\n\r\n };\r\n\r\n var gridColEditorInput = function (container, options)\r\n {\r\n\r\n var fieldName = \"'\" + options.field + \"'\";\r\n\r\n var required = $(container).attr('required'); // field is required\r\n\r\n // For some browsers, `attr` is undefined; for others,\r\n // `attr` is false. Check for both.\r\n\r\n var input = $('');\r\n input.kendoNumericTextBox({\r\n culture: globalizationSvc.getLocale(),\r\n format: 'n3',\r\n decimals: 3\r\n });\r\n\r\n input.attr('name', options.field);\r\n input.attr('data-bind', 'value:' + options.field);\r\n input.attr('ng-blur', 'gridInputCellOnBlur(dataItem, ' + fieldName + ')');\r\n input.attr('style', 'border: \"none\"');\r\n\r\n if (typeof required !== typeof undefined && required !== false)\r\n {\r\n input.attr('required');\r\n input.attr('data-Required-msg=\"Required\"');\r\n }\r\n\r\n input.appendTo(container);\r\n };\r\n\r\n var cellIndex = \"\";\r\n var rowIndex = \"\";\r\n\r\n var gridColNumber = function (field, format)\r\n {\r\n return '';\r\n };\r\n\r\n $scope.initializeMetersGrid = function ()\r\n {\r\n\r\n $scope.metersGridDS = new kendo.data.DataSource({\r\n schema: {\r\n model: {\r\n id: \"DispenserNo\",\r\n fields: {\r\n DispenserNo: {type: 'number', editable: false},\r\n FuelPositionNo: {type: 'number', editable: false},\r\n ProductDescription: {type: 'string', editable: false},\r\n RtlPrice: {type: \"number\", format: \"{n3}\", editable: true},\r\n EndAmount: {type: \"number\", editable: true},\r\n NetAmount: {type: \"number\", editable: true},\r\n EndUnits: {type: \"number\", editable: true},\r\n NetUnits: {type: \"number\", editable: true},\r\n CalcPrice: {type: \"number\", editable: false}\r\n }\r\n }\r\n },\r\n data: $scope.appInfo.paperwork.meters,\r\n batch: true\r\n });\r\n\r\n $scope.metersGridOptions = {\r\n dataSource: $scope.metersGridDS,\r\n columns: [\r\n {\r\n title: localStrings.getLocalizedString(\"Fuel\"),\r\n columns: [\r\n {\r\n field: \"DispenserNo\",\r\n title: localStrings.getLocalizedString(\"Disp\"),\r\n width: 40,\r\n attributes: {\"data-field\": \"DispenserNo\", \"class\": \"tableCellDisabled\"}\r\n },\r\n {\r\n field: \"FuelPositionNo\",\r\n title: localStrings.getLocalizedString(\"Pos\"),\r\n width: 40,\r\n attributes: {\"data-field\": \"FuelPosition\", \"class\": \"tableCellDisabled\"}\r\n },\r\n {\r\n field: \"ProductDescription\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {\r\n \"data-field\": \"ProductDescription\",\r\n \"class\": \"tableCellDisabled description\"\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n field: \"RtlPrice\",\r\n width: 80,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"RtlPrice\", \"n3\"),\r\n headerTemplate: \"\" + localStrings.getLocalizedString(\"RetailPrice\") +\"\",\r\n attributes: {\"data-field\": \"RtlPrice\", \"class\": \"k-editable-cell\", \"required\": \"true\"},\r\n hidden: !$scope.appInfo.paperwork.showRetailPrice\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"Dollars\"),\r\n columns: [\r\n {\r\n field: \"EndAmount\",\r\n title: localStrings.getLocalizedString(\"EndingMeter\"),\r\n width: 110,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"EndAmount\", \"n2\"),\r\n attributes: {\"data-field\": \"EndAmount\", \"class\": \"k-editable-cell\", \"required\": \"true\"},\r\n hidden: !$scope.appInfo.paperwork.showEndingDollar\r\n },\r\n {\r\n field: \"NetAmount\",\r\n title: localStrings.getLocalizedString(\"Net\"),\r\n width: 110,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"NetAmount\", \"n2\"),\r\n attributes: {\"data-field\": \"NetAmount\", \"class\": \"k-editable-cell\", \"required\": \"true\"},\r\n hidden: !$scope.appInfo.paperwork.showNetDollars\r\n }\r\n ]\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"Units\"),\r\n columns: [\r\n {\r\n field: \"EndUnits\",\r\n title: localStrings.getLocalizedString(\"EndingMeter\"),\r\n width: 110,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"EndUnits\", \"n3\"),\r\n attributes: {\"data-field\": \"EndUnits\", \"class\": \"k-editable-cell\", \"required\": \"true\"},\r\n hidden: !$scope.appInfo.paperwork.showEndingUnits\r\n },\r\n {\r\n field: \"NetUnits\",\r\n title: localStrings.getLocalizedString(\"Net\"),\r\n width: 110,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"NetUnits\", \"n3\"),\r\n attributes: {\"data-field\": \"NetUnits\", \"class\": \"k-editable-cell\", \"required\": \"true\"},\r\n hidden: !$scope.appInfo.paperwork.showNetUnits\r\n }\r\n ]\r\n },\r\n {\r\n field: \"CalcPrice\",\r\n width: 110,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"CalcPrice\", \"n3\"),\r\n headerTemplate: \"\" + localStrings.getLocalizedString(\"CalcAvgPrice\") + \"\",\r\n attributes: {\"data-field\": \"CalcPrice\", \"class\": \"tableCellDisabled\"},\r\n hidden: !$scope.appInfo.paperwork.showAvgPrice\r\n },\r\n {\r\n template: \"\",\r\n headerTemplate: \"\" + localStrings.getLocalizedString(\"BeginMeter\") + \"\",\r\n width: 60,\r\n attributes: {\"data-field\": \"BeginMeterBtn\"},\r\n hidden: !$scope.appInfo.paperwork.showBeginMeters\r\n },\r\n {\r\n template: \"\",\r\n headerTemplate: \"\" + localStrings.getLocalizedString(\"PumpTest\") + \"\",\r\n width: 60,\r\n attributes: {\"data-field\": \"PumpTestBtn\"}\r\n }\r\n ],\r\n pageable: false,\r\n sortable: false,\r\n editable: true,\r\n navigatable: true,\r\n scrollable: false,\r\n dataBinding: function (e) {\r\n var current = e.sender.current() || [];\r\n if (current[0]) {\r\n cellIndex = current.index();\r\n rowIndex = current.parent().index();\r\n }\r\n },\r\n dataBound: function (e)\r\n {\r\n $scope.setupMetersRows();\r\n },\r\n edit: function (e)\r\n {\r\n var $input = e.container.find(\"input\");\r\n var fieldName = $input.attr(\"name\");\r\n\r\n // alternative (if you don't have the name attribute in your editable):\r\n // var columnIndex = this.cellIndex(e.container);\r\n // var fieldName = this.thead.find(\"th\").eq(columnIndex).data(\"field\");\r\n\r\n if (!meterGridColIsEditable(fieldName, e.model))\r\n {\r\n $input.prop('readonly', true);\r\n //this.closeCell(); // prevent editing\r\n } else\r\n {\r\n $input.select();\r\n $input.addClass('k-cell-state-selected');\r\n }\r\n\r\n var grid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n var currentCell = $(grid.tbody.children().find(\".k-edit-cell\"));\r\n\r\n grid.current(currentCell);\r\n }\r\n };\r\n };\r\n\r\n function meterGridColIsEditable(fieldName, model)\r\n {\r\n if (fieldName === \"RtlPrice\") {\r\n if (!$scope.appInfo.paperwork.showRetailPrice)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n if (fieldName === \"EndAmount\")\r\n {\r\n if (model.DollarsEndingState !== 1)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n if (fieldName === \"NetAmount\")\r\n {\r\n if (model.DollarsNetState !== 1)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n if (fieldName === \"EndUnits\")\r\n {\r\n if (model.UnitsEndingState !== 1)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n if (fieldName === \"NetUnits\")\r\n {\r\n if (model.UnitsNetState !== 1)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n if (fieldName === \"BeginMeterBtn\")\r\n {\r\n if (model.FuelPositionUnitReading !== 1 && model.FuelPositionDollarReading !== 1)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n return true; // default to editable\r\n }\r\n\r\n function onGridKeydown(e)\r\n {\r\n if (e.keyCode === kendo.keys.TAB)\r\n {\r\n $scope.focusNextEditableCell();\r\n }\r\n }\r\n\r\n $scope.gridInputCellOnBlur = function (dataItem, fieldName)\r\n {\r\n if (fieldName === \"RtlPrice\")\r\n {\r\n $scope.retailChange(dataItem);\r\n }\r\n\r\n if (fieldName === \"EndAmount\")\r\n {\r\n $scope.endAmountChange(dataItem);\r\n }\r\n\r\n if (fieldName === \"NetAmount\")\r\n {\r\n $scope.netAmountChange(dataItem);\r\n }\r\n\r\n if (fieldName === \"EndUnits\")\r\n {\r\n $scope.endUnitsChange(dataItem);\r\n }\r\n\r\n if (fieldName === \"NetUnits\")\r\n {\r\n $scope.netUnitsChange(dataItem);\r\n }\r\n };\r\n\r\n $scope.setupMetersRows = function ()\r\n {\r\n\r\n $(\"#metersGrid tr\").each(function (index, row)\r\n {\r\n\r\n if (index > 1)\r\n { // skip header rows\r\n var dataItem = $(\"#metersGrid\").data(\"kendoGrid\").dataItem(this);\r\n\r\n var $row = $(row);\r\n var $rowColumns = $row.find('td');\r\n\r\n $rowColumns.each(function (index, col)\r\n {\r\n var $col = $(col);\r\n var fieldName = $col.attr('data-field');\r\n if (!meterGridColIsEditable(fieldName, dataItem))\r\n {\r\n $col.addClass(\"tableCellDisabled\");\r\n $col.removeClass(\"k-editable-cell\");\r\n\r\n if (fieldName === \"BeginMeterBtn\")\r\n {\r\n $col.find('i').hide();\r\n }\r\n }\r\n\r\n //setup checkbox columns\r\n /* if (fieldName === \"BeginMeterBtn\") {\r\n $col.on(\"click\", \"input.elecChkBox\", function (e) {\r\n $scope.openBeginMeter(dataItem)\r\n });\r\n }*/\r\n\r\n $scope.setupGridColumnValidationNotificationUI($col);\r\n });\r\n\r\n }\r\n });\r\n };\r\n\r\n $scope.setupMetersGridColumns = function ()\r\n {\r\n\r\n var showDispenserNo = $scope.appInfo.paperwork.meters.some(function (meter)\r\n {\r\n return meter.DispenserNo > 0;\r\n });\r\n\r\n if (!showDispenserNo)\r\n {\r\n $scope.kendo.metersGrid.hideColumn(\"DispenserNo\");\r\n }\r\n\r\n if (!$scope.appInfo.paperwork.showRetailPrice)\r\n {\r\n $scope.kendo.metersGrid.hideColumn(\"RtlPrice\");\r\n }\r\n };\r\n\r\n $scope.$on(\"kendoWidgetCreated\", function (event, widget)\r\n {\r\n\r\n var grid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n\r\n // the event is emitted for every widget; if we have multiple\r\n // widgets in this controller, we need to check that the event\r\n // is for the one we're interested in.\r\n\r\n if (widget === $scope.kendo.metersGrid)\r\n {\r\n grid.dataSource.data($scope.appInfo.paperwork.meters);\r\n $(\"#metersGrid\").find(\"table\").on(\"keydown\", onGridKeydown);\r\n $scope.setupMetersGridColumns();\r\n\r\n $scope.calculatePageTotals();\r\n }\r\n });\r\n\r\n $scope.setupGridColumnValidationNotificationUI = function ($col)\r\n {\r\n\r\n var fieldName = $col.attr('data-field');\r\n\r\n $col.qtip({\r\n id: \"qtip-\" + fieldName,\r\n content: {\r\n text: \"\"\r\n },\r\n position: {\r\n adjust: {\r\n x: -10, y: -10\r\n }\r\n },\r\n style: {\r\n classes: \"toolTipStyle\"\r\n }\r\n });\r\n\r\n $col.qtip('disable', true);\r\n\r\n };\r\n\r\n $scope.processGridColumnValidationNotification = function ($row, fieldName, errorMessages, warningMessages)\r\n {\r\n\r\n var idx = 0;\r\n\r\n var hasErrors = (errorMessages.length > 0);\r\n var hasWarnings = (warningMessages.length > 0);\r\n\r\n var $col = $row.find(\"[data-field='\" + fieldName + \"']\");\r\n\r\n //clear classes\r\n $col.removeClass(\"td-error\");\r\n $col.removeClass(\"td-warning\");\r\n\r\n if (hasErrors || hasWarnings)\r\n {\r\n\r\n var messageList = $(\"
\");\r\n\r\n if (hasErrors)\r\n {\r\n var errorList = $(\"
\" + localStrings.getLocalizedString(\"Error\") + \" :
\");\r\n for (idx = 0; idx < errorMessages.length; idx++)\r\n {\r\n errorList.append(\"
  • \" + errorMessages[idx] + \"
  • \");\r\n }\r\n\r\n messageList.append(errorList);\r\n }\r\n\r\n if (hasWarnings)\r\n {\r\n var warningList = $(\"
    \" + localStrings.getLocalizedString(\"Warning\") + \" :
    \");\r\n for (idx = 0; idx < warningMessages.length; idx++)\r\n {\r\n warningList.append(\"
  • \" + warningMessages[idx] + \"
  • \");\r\n }\r\n\r\n messageList.append(warningList);\r\n }\r\n\r\n $col.qtip('option', 'content.text', messageList);\r\n\r\n if (hasErrors)\r\n {\r\n $col.addClass(\"td-error\");\r\n $col.qtip('option', 'style.classes', 'toolTipStyle-error');\r\n } else\r\n {\r\n $col.addClass(\"td-warning\");\r\n $col.qtip('option', 'style.classes', 'toolTipStyle-warning');\r\n }\r\n\r\n $col.qtip('disable', false);\r\n }\r\n else\r\n {\r\n $col.qtip('disable', true);\r\n }\r\n };\r\n\r\n var meterRowValidation =\r\n {\r\n validator: function (meter, parms)\r\n {\r\n var isValid = true;\r\n\r\n var $row = $(\"#metersGrid\").data(\"kendoGrid\").tbody.find(\"tr[data-uid='\" + meter.uid + \"']\");\r\n \r\n // retail price validation\r\n if ($scope.appInfo.paperwork.showRetailPrice)\r\n {\r\n\r\n var errorRtlPrice = [], warningRtlPrice = [];\r\n \r\n // retail price errors\r\n if ((angular.isUndefinedOrNullOrEmpty(meter.RtlPrice) || meter.RtlPrice === 0) && (meter.NetAmount > 0 && meter.NetUnits > 0))\r\n {\r\n isValid = false;\r\n\r\n errorRtlPrice.push(localStrings.getLocalizedString(\"GTZeroError\"));\r\n }\r\n\r\n // retail price warnings\r\n if ($scope.appInfo.paperwork.showRetailPrice && !angular.isUndefinedOrNullOrEmpty(meter.CalcPrice) && !angular.isUndefinedOrNullOrEmpty(meter.PriorCalcPrice))\r\n {\r\n\r\n var calcTotalSales = (meter.RtlPrice * meter.NetUnits);\r\n\r\n if ((Math.abs(calcTotalSales - meter.NetAmount) > $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance) && calcTotalSales > 0 && meter.NetAmount > 0 && $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance > 0)\r\n {\r\n warningRtlPrice.push(localStrings.getLocalizedString(\"CapturedTotalOutside\"));\r\n }\r\n\r\n if ((Math.abs(meter.RtlPrice - meter.CalcPrice) > $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance) && meter.RtlPrice > 0 && meter.CalcPrice > 0 && $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance > 0)\r\n {\r\n warningRtlPrice.push(localStrings.getLocalizedString(\"CapturedRetailPrice\"));\r\n }\r\n }\r\n\r\n $scope.processGridColumnValidationNotification($row, 'RtlPrice', errorRtlPrice, warningRtlPrice);\r\n }\r\n\r\n //end units validation\r\n var errorEndUnits = [], warningEndUnits = [];\r\n if (meter.EndUnits > 0)\r\n {\r\n if (meter.EndUnits < meter.BeginUnits && $scope.appInfo.paperwork.showBeginMeters)\r\n {\r\n warningEndUnits.push(localStrings.getLocalizedString(\"UnitsRolled\"));\r\n }\r\n if (meter.EndUnits >= $scope.MaxUnits) {\r\n isValid = false;\r\n errorEndUnits.push(localStrings.getLocalizedString(\"UnitsMaxExceeded\"));\r\n }\r\n }\r\n $scope.processGridColumnValidationNotification($row, 'EndUnits', errorEndUnits, warningEndUnits);\r\n\r\n //end amount validation\r\n var errorEndAmount = [], warningEndAmount = [];\r\n if (meter.EndAmount > 0)\r\n {\r\n if (meter.EndAmount < meter.BeginAmount && $scope.appInfo.paperwork.showBeginMeters)\r\n {\r\n warningEndAmount.push(localStrings.getLocalizedString(\"UnitsRolled\"));\r\n }\r\n if (meter.EndAmount >= $scope.MaxUnits) {\r\n isValid = false;\r\n errorEndAmount.push(localStrings.getLocalizedString(\"DollarsMaxExceeded\"));\r\n }\r\n }\r\n $scope.processGridColumnValidationNotification($row, 'EndAmount', errorEndAmount, warningEndAmount);\r\n\r\n //calc price validation\r\n var errorCalcPrice = [], warningCalcPrice = [];\r\n if (!angular.isUndefinedOrNullOrEmpty(meter.CalcPrice) && !angular.isUndefinedOrNullOrEmpty(meter.PriorCalcPrice))\r\n {\r\n if ((Math.abs(meter.CalcPrice - meter.PriorCalcPrice) > $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance) && meter.CalcPrice > 0 && meter.PriorCalcPrice > 0 && $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance > 0)\r\n {\r\n warningCalcPrice.push(localStrings.getLocalizedString(\"CalculatedPriceOutside\"));\r\n }\r\n }\r\n $scope.processGridColumnValidationNotification($row, 'CalcPrice', errorCalcPrice, warningCalcPrice);\r\n\r\n return isValid;\r\n }\r\n };\r\n\r\n $scope.validateMeters = function ()\r\n {\r\n\r\n var isValid = true;\r\n\r\n var metersGrid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n\r\n angular.forEach(metersGrid.dataSource.data(), function (meter)\r\n {\r\n isValid = isValid && meterRowValidation.validator(meter);\r\n });\r\n\r\n return isValid;\r\n };\r\n\r\n var newPWBatchLoadedListener = $rootScope.$on('event:NewPaperworkBatchLoaded', function (event, data)\r\n {\r\n if ($scope.locationInfo.sideMenuData.paperwork.meters)\r\n $scope.loadMeters();\r\n else if ($scope.locationInfo.sideMenuData.paperwork.tanks)\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkTanks/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkTanks/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n else if ($scope.locationInfo.sideMenuData.paperwork.deliveries)\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkDeliveries/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkDeliveries/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n else\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n });\r\n\r\n // $scope $destroy\r\n $scope.$on('$destroy', newPWBatchLoadedListener);\r\n\r\n $scope.loadMeters = function ()\r\n {\r\n $scope = this;\r\n\r\n angular.forEach($scope.appInfo.paperwork.context.paperworkSites, function (site, index)\r\n {\r\n if (site.SiteKey === $scope.appInfo.paperwork.batch.SiteKey)\r\n $scope.appInfo.paperwork.context.selectedSiteObj = site;\r\n });\r\n PaperworkMetersService.loadMetersForEntry(\r\n $scope.appInfo.paperwork.batch.Key,\r\n $scope.appInfo.paperwork.context.selectedSiteObj.PCKey,\r\n $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true)\r\n ).then(function (data)\r\n {\r\n // if(data.count == 0){\r\n // TODO: No meters, do something...\r\n //\r\n // }\r\n $scope.appInfo.paperwork.meters = data.PaperworkMeters;\r\n $scope.appInfo.paperwork.priceToleranceAmount = data.PriceToleranceAmount;\r\n $scope.appInfo.paperwork.showRetailPrice = data.ShowRetailPrice;\r\n $scope.appInfo.paperwork.showEndingDollar = data.ShowEndingDollar;\r\n $scope.appInfo.paperwork.showNetDollars = data.ShowNetDollars;\r\n $scope.appInfo.paperwork.showEndingUnits = data.ShowEndingUnits;\r\n $scope.appInfo.paperwork.showNetUnits = data.ShowNetUnits;\r\n $scope.appInfo.paperwork.showAvgPrice = data.ShowAvgPrice;\r\n $scope.appInfo.paperwork.showBeginMeters = data.ShowBeginMeters;\r\n\r\n $scope.initializeMetersGrid();\r\n\r\n $scope.metersLoaded = true;\r\n\r\n if ($scope.appInfo.paperwork.meters.length > 0) {\r\n $scope.metersEditable = !(($scope.appInfo.paperwork.context.lockPaperworkAfterDru && $scope.appInfo.paperwork.meters[0].DRUPosted) || $scope.appInfo.paperwork.meters[0].Status === 1);\r\n }\r\n\r\n //If entering a new paperwork batch create the default header form in the database\r\n //if (!$scope.appInfo.paperwork.viewOnly && $scope.metersEditable && $scope.appInfo.paperwork.form.PaperworkBatchKey === 0) {\r\n // var paperworkMeterHeader =\r\n // {\r\n // Key: $scope.appInfo.paperwork.meters[0].FuelMtrKey,\r\n // SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n // SiteDesc: $scope.appInfo.paperwork.context.selectedSiteObj.SiteDesc,\r\n // ProfCtrKey: $scope.appInfo.paperwork.context.selectedSiteObj.PCKey,\r\n // PaperworkBatchKey: $scope.appInfo.paperwork.batch.Key,\r\n // PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n // UserName: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n // SourceKey: 0,\r\n // Ts: $scope.appInfo.paperwork.meters[0].HeaderTimeStamp,\r\n // AppKey: $scope.locationInfo.sideMenuData.paperwork.meters.Key\r\n // };\r\n\r\n //Pass in default meters data since the grid has not yet been modified\r\n //PaperworkMetersService.savePaperworkMeters(paperworkMeterHeader, $scope.appInfo.paperwork.meters, true);\r\n //}\r\n\r\n //$scope.metersLoaded = true;\r\n });\r\n };\r\n\r\n var PageStage = $rootScope.$on('event:PageStage', function (event, args)\r\n {\r\n if (args === 'DREGM' && !$scope.appInfo.paperwork.viewOnly && $scope.metersEditable && $scope.metersGridDS.hasChanges())\r\n {\r\n $scope.saveMeters('', false, false);\r\n } \r\n });\r\n $scope.$on('$destroy', PageStage);\r\n\r\n $scope.next = function (path)\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly && $scope.metersEditable && $scope.metersGridDS.hasChanges())\r\n {\r\n $scope.saveMeters(path, false, false);\r\n } else {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, false));\r\n }\r\n };\r\n\r\n $scope.previous = function (path)\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly && $scope.metersEditable && $scope.metersGridDS.hasChanges())\r\n {\r\n $scope.saveMeters(path, false, false, true);\r\n } else {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, true));\r\n }\r\n };\r\n\r\n $scope.close = function ()\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly && $scope.metersEditable)\r\n {\r\n $scope.saveMeters(\"\", false, false);\r\n } else\r\n {\r\n $scope.goTo(\"/Paperwork/EnterPaperwork/\");\r\n }\r\n\r\n };\r\n\r\n $scope.submit = function ()\r\n {\r\n $scope.saveMeters(\"\", true, false);\r\n };\r\n\r\n $scope.submitPaperwork = function (submit)\r\n {\r\n var fuelMetersAppInfo = $scope.appInfo.paperwork.apps[0];\r\n\r\n //If we have fuelMeters and fuelMeters are required, but not saved; then throw error\r\n if (fuelMetersAppInfo.HasData === 0 && fuelMetersAppInfo.IsRequired !== 0)\r\n {\r\n $timeout(function () {\r\n $scope.modalifier.showSavedError();\r\n }, 100);\r\n return;\r\n }\r\n\r\n var submitPaperworkCmdParms =\r\n {\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n EmailAddress: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n SubmitPaperwork: submit,\r\n PreviouslySubmitted: $scope.appInfo.paperwork.batch.HasBeenSubmitted\r\n };\r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms).then(function (data)\r\n {\r\n if (submit)\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n });\r\n };\r\n\r\n $scope.saveMeters = function (path, submit, close, isPrevious)\r\n {\r\n if (!$scope.validateMeters()) {\r\n return;\r\n }\r\n \r\n $scope.resetDirtyFlags($scope.metersForm);\r\n isPrevious = isPrevious ? isPrevious: false;\r\n\r\n var paperworkMeterHeader =\r\n {\r\n Key: $scope.appInfo.paperwork.meters[0].FuelMtrKey,\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n SiteDesc: $scope.appInfo.paperwork.context.selectedSiteObj.SiteDesc,\r\n ProfCtrKey: $scope.appInfo.paperwork.context.selectedSiteObj.PCKey,\r\n PaperworkBatchKey: $scope.appInfo.paperwork.batch.Key,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n UserName: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n SourceKey: 0,\r\n Ts: $scope.appInfo.paperwork.meters[0].HeaderTimeStamp,\r\n AppKey: $scope.locationInfo.sideMenuData.paperwork.meters.Key\r\n };\r\n\r\n angular.copy($scope.metersGridDS.data().toJSON(), $scope.appInfo.paperwork.meters);\r\n\r\n // Call these functions to translate the french numeric value to a actual number value.\r\n PaperworkMetersService.updateMeters($scope.appInfo.paperwork.meters);\r\n \r\n PaperworkMetersService.savePaperworkMeters(paperworkMeterHeader, $scope.appInfo.paperwork.meters).then(function (data) {\r\n var grid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n $scope.appInfo.paperwork.meters = data.PaperworkMeters;\r\n if (grid) {\r\n grid.dataSource.data(data.PaperworkMeters);\r\n\r\n $scope.validateMeters(); // call validate to re add any warnings after save\r\n }\r\n\r\n $scope.appInfo.paperwork.apps[0].HasData = -1;\r\n\r\n if (submit) {\r\n $scope.submitPaperwork(true);\r\n return;\r\n }\r\n if (close) {\r\n $scope.submitPaperwork(false);\r\n return;\r\n }\r\n if (path.length > 0){\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, false, isPrevious));\r\n }\r\n });\r\n };\r\n\r\n $scope.retailChange = function (dataItem)\r\n {\r\n PaperworkMetersService.netAmountCalc(dataItem);\r\n PaperworkMetersService.calcPerUnit(dataItem,\r\n $scope.appInfo.paperwork.priceToleranceAmount,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceToRetail,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceOverDay);\r\n $scope.calculatePageTotals();\r\n };\r\n\r\n $scope.endAmountChange = function (dataItem)\r\n {\r\n PaperworkMetersService.calculateNetAmountFromEnd(dataItem);\r\n PaperworkMetersService.calcPerUnit(dataItem,\r\n $scope.appInfo.paperwork.priceToleranceAmount,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceToRetail,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceOverDay,\r\n $scope.appInfo.paperwork.showRetailPrice);\r\n $scope.calculatePageTotals();\r\n };\r\n\r\n $scope.netAmountChange = function (dataItem)\r\n {\r\n PaperworkMetersService.calcPerUnit(dataItem,\r\n $scope.appInfo.paperwork.priceToleranceAmount,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceToRetail,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceOverDay,\r\n $scope.appInfo.paperwork.showRetailPrice);\r\n $scope.calculatePageTotals();\r\n };\r\n\r\n $scope.netUnitsChange = function (dataItem)\r\n {\r\n PaperworkMetersService.netAmountCalc(dataItem);\r\n PaperworkMetersService.calcPerUnit(dataItem,\r\n $scope.appInfo.paperwork.priceToleranceAmount,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceToRetail,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceOverDay,\r\n $scope.appInfo.paperwork.showRetailPrice);\r\n $scope.calculatePageTotals();\r\n };\r\n\r\n $scope.endUnitsChange = function (dataItem)\r\n {\r\n PaperworkMetersService.calculateNetUnitsFromEnd(dataItem);\r\n PaperworkMetersService.netAmountCalc(dataItem);\r\n PaperworkMetersService.calcPerUnit(dataItem,\r\n $scope.appInfo.paperwork.priceToleranceAmount,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceToRetail,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceOverDay,\r\n $scope.appInfo.paperwork.showRetailPrice);\r\n $scope.calculatePageTotals();\r\n };\r\n\r\n $scope.calculatePageTotals = function ()\r\n {\r\n var metersGrid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n\r\n $scope.appInfo.paperwork.totalAmount = PaperworkMetersService.calculatePageAmountTotals(metersGrid.dataSource.data());\r\n $scope.appInfo.paperwork.totalUnits = PaperworkMetersService.calculatePageUnitTotals(metersGrid.dataSource.data());\r\n\r\n // update the grid and make sure it has the latest data\r\n metersGrid.dataSource.data(metersGrid.dataSource.data());\r\n };\r\n\r\n $scope.focusNextEditableCell = function () {\r\n var metersGrid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n\r\n if (!isNaN(cellIndex)) {\r\n var current = metersGrid.current(metersGrid.tbody.children().eq(rowIndex).children().eq(cellIndex));\r\n\r\n rowIndex = cellIndex = null;\r\n \r\n if (current.hasClass(\"k-editable-cell\"))\r\n {\r\n var nextCell = current.nextAll(\".k-editable-cell\");\r\n if (!nextCell[0])\r\n {\r\n //search the next row\r\n nextCell = current.parent().next().children(\".k-editable-cell:first\");\r\n }\r\n metersGrid.current(nextCell);\r\n metersGrid.editCell(nextCell[0]);\r\n }\r\n }\r\n };\r\n\r\n $scope.openBeginMeter = function (dataItem)\r\n {\r\n \r\n $scope.modalInfo.dataItem = dataItem;\r\n $scope.modalInfo.beginAmount = dataItem.BeginAmount;\r\n $scope.modalInfo.beginUnits = dataItem.BeginUnits;\r\n $scope.modalInfo.useBeginUnits = (dataItem.FuelPositionUnitReading === 1);\r\n $scope.modalInfo.useBeginAmount = (dataItem.FuelPositionDollarReading === 1);\r\n $scope.modalInfo.type = 0;\r\n $scope.modalInfo.header = localStrings.getLocalizedString(\"BeginMeter\");\r\n $scope.modalInfo.shown = true;\r\n };\r\n\r\n $scope.openPumpTest = function (dataItem)\r\n {\r\n $scope.modalInfo.dataItem = dataItem;\r\n $scope.modalInfo.beginAmount = dataItem.TestAmount;\r\n $scope.modalInfo.beginUnits = dataItem.TestUnits;\r\n $scope.modalInfo.useBeginUnits = true;\r\n $scope.modalInfo.useBeginAmount = true;\r\n $scope.modalInfo.type = 1;\r\n $scope.modalInfo.header = localStrings.getLocalizedString(\"PumpTest\");\r\n $scope.modalInfo.shown = true;\r\n };\r\n\r\n $scope.saveModalValues = function ()\r\n {\r\n if ($scope.modalInfo.beginAmount < 0 || $scope.modalInfo.beginUnits < 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"GTZeroError2\"), 'error');\r\n return;\r\n }\r\n if ($scope.modalInfo.beginUnits >= $scope.MaxUnits) {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"UnitsMaxExceeded\"), 'error');\r\n return;\r\n }\r\n if ($scope.modalInfo.beginAmount >= $scope.MaxUnits) {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"DollarsMaxExceeded\"), 'error');\r\n return;\r\n }\r\n\r\n switch ($scope.modalInfo.type)\r\n {\r\n case 0:\r\n $scope.modalInfo.dataItem.BeginAmountOverride =\r\n ($scope.modalInfo.dataItem.BeginAmount === $scope.modalInfo.beginAmount);\r\n $scope.modalInfo.dataItem.BeginAmount = $scope.modalInfo.beginAmount;\r\n $scope.modalInfo.dataItem.BeginUnitsOverride =\r\n ($scope.modalInfo.dataItem.BeginUnits === $scope.modalInfo.beginUnits);\r\n $scope.modalInfo.dataItem.BeginUnits = $scope.modalInfo.beginUnits;\r\n $scope.endAmountChange($scope.modalInfo.dataItem);\r\n $scope.endUnitsChange($scope.modalInfo.dataItem);\r\n break;\r\n\r\n case 1:\r\n $scope.modalInfo.dataItem.TestAmount = $scope.modalInfo.beginAmount;\r\n $scope.modalInfo.dataItem.TestUnits = $scope.modalInfo.beginUnits;\r\n $scope.calculatePageTotals();\r\n break;\r\n }\r\n\r\n $scope.modalInfo = {};\r\n $scope.modalInfo.shown = false;\r\n };\r\n })\r\n .controller('enterPaperworkTanksCtrl', function ($scope, $rootScope, $routeParams, PaperworkService, $filter, $timeout, PaperworkTanksService,\r\n $location, WebFunctions, validatorSvc, templates, localStrings, globalizationSvc, setupNav)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n\r\n $scope.appInfo.paperwork.paperworkKey = 0;\r\n $scope.modalInfo = {};\r\n $scope.tanksLoaded = false;\r\n $scope.postedReadingsExist = false;\r\n\r\n // controller destructor\r\n $scope.$on(\"$destroy\", function handler()\r\n {\r\n $rootScope.scopesToValidate = [];\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n $scope.appInfo = $scope.appInfo || {};\r\n\r\n $scope.appInfo.paperwork.viewOnly = $location.$$path.indexOf('/ViewPaperworkTanks/') > -1;\r\n if ($routeParams.paperworkKey)\r\n {\r\n $scope.appInfo.paperwork.paperworkKey = $routeParams.paperworkKey;\r\n }\r\n $scope.appInfo.paperwork.NewOSComments = '';\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = '1';\r\n $scope.appInfo.paperwork.batch = {};\r\n $scope.appInfo.paperwork.tanks = [];\r\n $scope.appInfo.paperwork.postedTanks = [];\r\n\r\n if (!$scope.appInfo.paperwork.context)\r\n {\r\n PaperworkService.getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, true).then(\r\n function (data)\r\n {\r\n $scope.appInfo.paperwork.context = {};\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.selectedSite = data.SelectedSiteKey;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n }\r\n );\r\n }\r\n\r\n if ($scope.appInfo.paperwork.paperworkKey > 0)\r\n {\r\n //We are loading a known existing paperwork batch\r\n PaperworkService.OpenPaperworkBatchByKey(\r\n $scope.appInfo.paperwork.paperworkKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n $scope.appInfo.paperwork.viewOnly\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.batch = data.PaperworkBatch.PaperworkBatch;\r\n $scope.appInfo.paperwork.apps = data.PaperworkBatch.PaperworkApps;\r\n $scope.appInfo.paperwork.form = data.PaperworkBatch.PaperworkForm;\r\n $scope.appInfo.paperwork.siteInfo = data.PaperworkBatch.PaperworkSiteInfo;\r\n\r\n // resolve if this is the first or last page\r\n var res = setupNav.firstLastPage('DREGS',$scope.appInfo.paperwork.apps);\r\n $scope.locationInfo.sideMenuData.isFirstPage = res.isFirstPage;\r\n $scope.locationInfo.sideMenuData.isLastPage = res.isLastPage;\r\n\r\n $rootScope.$broadcast('event:PaperworkLoaded', $scope.appInfo.paperwork.viewOnly, $scope.appInfo.paperwork.paperworkKey);\r\n\r\n var nextApp = true;\r\n angular.forEach($scope.appInfo.paperwork.apps, function (app, index)\r\n {\r\n if (app.MenuCode === 'DREGS')\r\n {\r\n $scope.loadTanks(false);\r\n nextApp = false;\r\n }\r\n });\r\n if (nextApp)\r\n {\r\n $scope.goTo(setupNav.navigateToPage('DREGS',$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, false));\r\n }\r\n }, function ()\r\n {\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n });\r\n } else\r\n {\r\n //todo: goback...\r\n }\r\n $scope.locationInfo.sideMenuData.pwSubMenu = '2';\r\n $scope.appInfo.paperwork.tankIndex = 0;\r\n };\r\n\r\n var newPWBatchLoadedListener = $rootScope.$on('event:NewPaperworkBatchLoaded', function (event, data)\r\n {\r\n if ($scope.locationInfo.sideMenuData.paperwork.tanks)\r\n $scope.loadTanks(false);\r\n else\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkDeliveries/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkDeliveries/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n });\r\n\r\n // $scope $destroy\r\n $scope.$on('$destroy', newPWBatchLoadedListener);\r\n\r\n var gridColEditorInput = function (container, options)\r\n {\r\n\r\n var fieldName = \"'\" + options.field + \"'\";\r\n\r\n var required = $(container).attr('required'); // field is required\r\n\r\n // For some browsers, `attr` is undefined; for others,\r\n // `attr` is false. Check for both.\r\n if (typeof required !== typeof undefined && required !== false)\r\n {\r\n $('')\r\n .appendTo(container)\r\n .kendoNumericTextBox({\r\n decimals: 2,\r\n format: \"#\",\r\n min: 0,\r\n spinners: false\r\n });\r\n } else\r\n {\r\n $('')\r\n .appendTo(container)\r\n .kendoNumericTextBox({\r\n decimals: 2,\r\n format: \"#\",\r\n min: 0,\r\n spinners: false\r\n });\r\n }\r\n\r\n };\r\n\r\n var gridColNumber = function (field, format)\r\n {\r\n return '';\r\n };\r\n\r\n var partialUnitsEditor = function (container, options)\r\n {\r\n $(\"\")\r\n\r\n .appendTo(container)\r\n .kendoComboBox({\r\n id: \"partialUnits\",\r\n dataSource: {\r\n data: $scope.appInfo.paperwork.partialUnits\r\n },\r\n filter: \"contains\",\r\n dataTextField: localStrings.getLocalizedString(\"Key\"),\r\n dataValueField: \"Value\",\r\n change: function (e)\r\n {\r\n\r\n var selectionElement = $(e.sender.element[0]).parent().find(\".k-dropdown-wrap\");\r\n\r\n // check if valid\r\n if ($(e.sender.element[0]).hasClass(\"k-invalid\"))\r\n {\r\n selectionElement.addClass(\"k-selection-invalid\");\r\n } else\r\n {\r\n selectionElement.removeClass(\"k-selection-invalid\");\r\n\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\");\r\n\r\n var selectedRow = $(\".k-grid-edit-row\");\r\n //Get the item from the grid\r\n var selectedRowData = grid.dataItem(selectedRow);\r\n\r\n if (options.field === \"PartialUnits\")\r\n {\r\n $scope.calculateTankValues(selectedRowData);\r\n } else\r\n {\r\n $scope.calculateWaterVolumeValues(selectedRowData);\r\n }\r\n }\r\n\r\n if (this.value() && this.selectedIndex === -1)\r\n {\r\n this.value('');\r\n this._filterSource({\r\n value: \"\",\r\n field: this.options.dataTextField,\r\n operator: \"contains\"\r\n });\r\n return;\r\n }\r\n },\r\n select: function (e)\r\n {\r\n\r\n var dataItem = this.dataItem(e.item.index());\r\n }\r\n });\r\n\r\n $('').appendTo(container);\r\n\r\n };\r\n\r\n function getPartialDescFromValue(dataItem)\r\n {\r\n return $scope.appInfo.paperwork.partialUnits.find({Value: dataItem.PartialUnits}).Key;\r\n }\r\n\r\n $scope.initializeTanksGrid = function ()\r\n {\r\n\r\n $scope.tanksGridDS = new kendo.data.DataSource({\r\n schema: {\r\n model: {\r\n fields: {\r\n TankNo: {type: \"number\", editable: false},\r\n ProductId: {type: \"string\", editable: false},\r\n ProductDescription: {type: \"string\", editable: false},\r\n NoReading: {type: \"boolean\"},\r\n LargeUnits: {type: \"number\"},\r\n SmallUnits: {type: \"number\"},\r\n PartialUnits: {type: \"number\"},\r\n Quantity: {type: \"number\"},\r\n WaterSmallUnits: {type: \"number\"},\r\n WaterPartialUnits: {type: \"number\"},\r\n WaterQuantity: {type: \"number\"},\r\n Temperature: {type: \"number\"},\r\n NetQuantity: {type: \"number\"},\r\n Electronic: {type: \"boolean\"},\r\n Depth: {type: \"number\"}\r\n }\r\n }\r\n },\r\n data: $scope.appInfo.paperwork.tanks,\r\n batch: true\r\n });\r\n\r\n $scope.tanksGridOptions = {\r\n dataSource: $scope.tanksGridDS,\r\n columns: [\r\n {\r\n title: localStrings.getLocalizedString(\"Tanks\"),\r\n columns: [\r\n {\r\n field: \"TankNo\",\r\n title: localStrings.getLocalizedString(\"No\"),\r\n width: 40,\r\n attributes: {\"data-field\": \"TankNo\", \"class\": \"tableCellDisabled\"},\r\n template: \"#=TankNo#\"\r\n },\r\n {\r\n field: \"ProductId\",\r\n title: localStrings.getLocalizedString(\"Product\"),\r\n width: 65,\r\n attributes: {\"data-field\": \"ProductId\", \"class\": \"tableCellDisabled description\"},\r\n template: \"#=ProductId#\"\r\n },\r\n {\r\n field: \"ProductDescription\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {\r\n \"data-field\": \"ProductDescription\",\r\n \"class\": \"tableCellDisabled description\"\r\n },\r\n template: \"#=ProductDescription#\"\r\n }\r\n ]\r\n },\r\n {\r\n field: \"NoReading\",\r\n width: 40,\r\n template: \"\",\r\n headerTemplate: \"\" + localStrings.getLocalizedString(\"NoRdg\") + \"\",\r\n attributes: {\"data-field\": \"NoReading\", \"class\": \"k-editable-cell grid-checkbox\"}\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"Fuel\"),\r\n columns: [\r\n {\r\n field: \"LargeUnits\",\r\n width: 50,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"LargeUnits\", \"n2\"),\r\n headerTemplate: \"ft.m.\",\r\n attributes: {\"data-field\": \"LargeUnits\", \"class\": \"k-editable-cell\"}\r\n },\r\n {\r\n field: \"SmallUnits\",\r\n width: 50,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"SmallUnits\", \"n2\"),\r\n headerTemplate: \"in.cm.\",\r\n attributes: {\"data-field\": \"SmallUnits\", \"class\": \"k-editable-cell\"}\r\n },\r\n {\r\n field: \"PartialUnits\",\r\n title: localStrings.getLocalizedString(\"Partial\"),\r\n width: 70,\r\n editor: partialUnitsEditor,\r\n template: function (dataItem)\r\n {\r\n return getPartialDescFromValue(dataItem);\r\n },\r\n attributes: {\"data-field\": \"PartialUnits\", \"class\": \"k-editable-cell\"}\r\n },\r\n {\r\n field: \"Quantity\",\r\n title: localStrings.getLocalizedString(\"Qty\"),\r\n width: 120,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"Quantity\", \"n2\"),\r\n attributes: {\"data-field\": \"Quantity\", \"class\": \"k-editable-cell\"}\r\n }\r\n ]\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"Water\"),\r\n columns: [\r\n {\r\n field: \"WaterSmallUnits\",\r\n width: 50,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"WaterSmallUnits\", \"n\"),\r\n headerTemplate: \"in.cm.\",\r\n attributes: {\"data-field\": \"WaterSmallUnits\", \"class\": \"k-editable-cell\"}\r\n },\r\n {\r\n field: \"WaterPartialUnits\", title: localStrings.getLocalizedString(\"Partial\"), width: 70, editor: partialUnitsEditor,\r\n template: function (dataItem)\r\n {\r\n return getPartialDescFromValue(dataItem);\r\n },\r\n attributes: {\"data-field\": \"WaterPartialUnits\", \"class\": \"k-editable-cell\"}\r\n },\r\n {\r\n field: \"WaterQuantity\",\r\n title: localStrings.getLocalizedString(\"Qty\"),\r\n width: 120,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"WaterQuantity\", \"n2\"),\r\n attributes: {\"data-field\": \"WaterQuantity\", \"class\": \"k-editable-cell\"}\r\n }\r\n ]\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"TempCorrection\"),\r\n columns: [\r\n {\r\n field: \"Temperature\",\r\n width: 50,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"Temperature\", \"n\"),\r\n headerTemplate: \"°F°C\",\r\n attributes: {\"data-field\": \"Temperature\", \"class\": \"k-editable-cell\"}\r\n },\r\n {\r\n field: \"NetQuantity\",\r\n title: localStrings.getLocalizedString(\"Net\"),\r\n width: 50,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"NetQuantity\", \"n2\"),\r\n attributes: {\"data-field\": \"NetQuantity\", \"class\": \"k-editable-cell\"}\r\n }\r\n ]\r\n },\r\n {\r\n field: \"Electronic\",\r\n width: 40,\r\n template: \"\",\r\n headerTemplate: \"\" + localStrings.getLocalizedString(\"ElectRdg\") + \"\",\r\n attributes: {\"data-field\": \"Electronic\", \"class\": \"k-editable-cell grid-checkbox\"}\r\n }\r\n\r\n ],\r\n pageable: false,\r\n sortable: false,\r\n editable: true,\r\n scrollable: false,\r\n navigatable: true,\r\n dataBound: function (e)\r\n {\r\n $timeout(function ()\r\n {\r\n $scope.setupTankRows();\r\n },100);\r\n\r\n },\r\n edit: function (e)\r\n {\r\n var $input = e.container.find(\"input\");\r\n var fieldName = $input.attr(\"name\");\r\n\r\n $input.select();\r\n $input.addClass('k-cell-state-selected');\r\n\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\");\r\n var currentCell = $(grid.tbody.children().find(\".k-edit-cell\"));\r\n\r\n grid.current(currentCell);\r\n }\r\n\r\n };\r\n };\r\n\r\n $scope.$on(\"kendoWidgetCreated\", function (event, widget)\r\n {\r\n\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\");\r\n\r\n // the event is emitted for every widget; if we have multiple\r\n // widgets in this controller, we need to check that the event\r\n // is for the one we're interested in.\r\n\r\n if (widget === $scope.kendo.tanksGrid)\r\n {\r\n grid.dataSource.data($scope.appInfo.paperwork.tanks);\r\n\r\n $(\"#tanksGrid\").find(\"table\").on(\"keydown\", onGridKeydown);\r\n\r\n $scope.setupTankGridColumns(grid);\r\n\r\n }\r\n });\r\n\r\n $scope.setupTankRows = function ()\r\n {\r\n\r\n $(\"#tanksGrid tr\").each(function (index, row)\r\n {\r\n\r\n if (index > 1)\r\n { // skip header rows\r\n var dataItem = $(\"#tanksGrid\").data(\"kendoGrid\").dataItem(this);\r\n\r\n var $row = $(row);\r\n var $rowColumns = $row.find('td');\r\n\r\n $rowColumns.each(function (index, col)\r\n {\r\n var $col = $(col);\r\n var fieldName = $col.attr('data-field');\r\n var $inputElm;\r\n\r\n $scope.setupGridColumnValidationNotificationUI($col);\r\n\r\n //setup checkbox columns\r\n if (fieldName === \"Electronic\")\r\n {\r\n //check to see if grid is editable\r\n if ($(\"#tanksGrid\").attr(\"k-editable\") === \"false\")\r\n {\r\n $col.removeClass(\"k-editable-cell\");\r\n\r\n $inputElm = $col.find(\"input\");\r\n $inputElm.attr(\"disabled\", true);\r\n\r\n } else\r\n {\r\n $col.on(\"change\", \"input.elecChkBox\", function (e)\r\n {\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\"),\r\n dataItem = grid.dataItem($(e.target).closest(\"tr\"));\r\n\r\n dataItem.set(\"Electronic\", this.checked);\r\n });\r\n }\r\n }\r\n\r\n if (fieldName === \"NoReading\")\r\n {\r\n //check to see if grid is editable\r\n if ($(\"#tanksGrid\").attr(\"k-editable\") === \"false\")\r\n {\r\n $col.removeClass(\"k-editable-cell\");\r\n\r\n $inputElm = $col.find(\"input\");\r\n $inputElm.attr(\"disabled\", true);\r\n\r\n } else\r\n {\r\n $col.on(\"change\", \"input.noReadChkBox\", function (e)\r\n {\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\"),\r\n dataItem = grid.dataItem($(e.target).closest(\"tr\"));\r\n\r\n dataItem.set(\"NoReading\", this.checked);\r\n });\r\n }\r\n }\r\n });\r\n\r\n }\r\n });\r\n };\r\n\r\n function onGridKeydown(e)\r\n {\r\n if (e.keyCode === kendo.keys.TAB)\r\n {\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\");\r\n\r\n var current = grid.current();\r\n\r\n if (!current.hasClass(\"k-editable-cell\"))\r\n {\r\n var nextCell = current.nextAll(\".k-editable-cell\");\r\n if (!nextCell[0])\r\n {\r\n //search the next row\r\n var nextRow = current.parent().next();\r\n nextCell = current.parent().next().children(\".k-editable-cell:first\");\r\n }\r\n grid.current(nextCell);\r\n grid.editCell(nextCell[0]);\r\n }\r\n }\r\n }\r\n\r\n $scope.setupTankGridColumns = function (grid) {\r\n\r\n if (!($scope.appInfo.paperwork.useLargeUnits && !$scope.appInfo.paperwork.quantityOnly)) {\r\n grid.hideColumn(\"LargeUnits\");\r\n }\r\n\r\n if ($scope.appInfo.paperwork.quantityOnly) {\r\n grid.hideColumn(\"SmallUnits\");\r\n grid.hideColumn(\"PartialUnits\");\r\n }\r\n\r\n if (!($scope.appInfo.paperwork.trackWaterLevels && !$scope.appInfo.paperwork.quantityOnly)) {\r\n grid.hideColumn(\"WaterSmallUnits\");\r\n grid.hideColumn(\"WaterPartialUnits\");\r\n }\r\n\r\n if (!$scope.appInfo.paperwork.trackWaterLevels) {\r\n grid.hideColumn(\"WaterQuantity\");\r\n }\r\n\r\n if (!$scope.appInfo.paperwork.useTempCorrections) {\r\n grid.hideColumn(\"Temperature\");\r\n grid.hideColumn(\"NetQuantity\");\r\n }\r\n\r\n };\r\n\r\n $scope.gridInputCellOnBlur = function (dataItem, fieldName)\r\n {\r\n\r\n if (fieldName === \"LargeUnits\")\r\n {\r\n dataItem.LargeUnits = (!dataItem.LargeUnits || dataItem.LargeUnits === \"\") ? 0 : dataItem.LargeUnits;\r\n $scope.calculateTankValues(dataItem);\r\n }\r\n\r\n if (fieldName === \"SmallUnits\")\r\n {\r\n dataItem.SmallUnits = (!dataItem.SmallUnits || dataItem.SmallUnits === \"\") ? 0 : dataItem.SmallUnits;\r\n $scope.calculateTankValues(dataItem);\r\n }\r\n\r\n if (fieldName === \"Quantity\")\r\n {\r\n dataItem.Quantity = (!dataItem.Quantity || dataItem.Quantity === \"\") ? 0 : dataItem.Quantity;\r\n $scope.calculateVolumeForTemperature(dataItem);\r\n }\r\n\r\n if (fieldName === \"WaterSmallUnits\") \r\n {\r\n dataItem.WaterSmallUnits = (!dataItem.WaterSmallUnits || dataItem.WaterSmallUnits === \"\") ? 0 : dataItem.WaterSmallUnits;\r\n $scope.calculateWaterVolumeValues(dataItem);\r\n }\r\n\r\n if (fieldName === \"WaterQuantity\")\r\n {\r\n dataItem.WaterQuantity = (!dataItem.WaterQuantity || dataItem.WaterQuantity === \"\") ? 0 : dataItem.WaterQuantity;\r\n $scope.calculateVolumeForTemperature(dataItem);\r\n }\r\n\r\n if (fieldName === \"Temperature\")\r\n {\r\n dataItem.Temperature = (!dataItem.Temperature || dataItem.Temperature === \"\") ? 0 : dataItem.Temperature;\r\n $scope.calculateVolumeForTemperature(dataItem);\r\n }\r\n\r\n\r\n };\r\n\r\n $scope.calculateTankValues = function (dataItem)\r\n {\r\n var modelRow = $(\"#tanksGrid\").data(\"kendoGrid\").dataSource.getByUid(dataItem.uid);\r\n\r\n modelRow.set('NoReading', false);\r\n\r\n var depth = PaperworkTanksService.calculateTankDepth(dataItem,\r\n $scope.appInfo.paperwork.metric);\r\n\r\n modelRow.set('Depth', depth);\r\n\r\n var quantity = PaperworkTanksService.getVolumeFromTankChart(dataItem,\r\n $scope.appInfo.paperwork.tankCharts);\r\n\r\n modelRow.set('Quantity', quantity);\r\n\r\n $scope.calculateVolumeForTemperature(dataItem);\r\n };\r\n\r\n $scope.calculateVolumeForTemperature = function (dataItem)\r\n {\r\n var modelRow = $(\"#tanksGrid\").data(\"kendoGrid\").dataSource.getByUid(dataItem.uid);\r\n\r\n var netQuantity = PaperworkTanksService.adjustVolumeForTemperature($scope.appInfo.paperwork.useTempCorrections,\r\n dataItem, $scope.appInfo.paperwork.tempCharts);\r\n\r\n modelRow.set('NoReading', false);\r\n modelRow.set('NetQuantity', netQuantity);\r\n\r\n };\r\n\r\n $scope.calculateWaterVolumeValues = function (dataItem)\r\n {\r\n var modelRow = $(\"#tanksGrid\").data(\"kendoGrid\").dataSource.getByUid(dataItem.uid);\r\n\r\n modelRow.set('NoReading', false);\r\n\r\n var depth = PaperworkTanksService.calculateWaterDepth(dataItem);\r\n\r\n modelRow.set('WaterDepth', depth);\r\n\r\n var quantity = PaperworkTanksService.getWaterVolumeFromTankChart(dataItem,\r\n $scope.appInfo.paperwork.tankCharts);\r\n\r\n modelRow.set('WaterQuantity', quantity);\r\n\r\n $scope.calculateVolumeForTemperature(dataItem);\r\n\r\n };\r\n\r\n $scope.validateTankOverShort = function (referenceTank)\r\n {\r\n var hasWarning = false;\r\n\r\n //First check to see if we even care.\r\n if (!$scope.appInfo.paperwork.UseOSWarnings)\r\n {\r\n return {\r\n HasWarning: false,\r\n Min: 0,\r\n Max: 0\r\n };\r\n }\r\n\r\n //Figure out what the base tank is going to be.\r\n if (referenceTank.InventoryTankNo !== referenceTank.TankNo)\r\n {\r\n for (var x = 0; x < $scope.appInfo.paperwork.tanks.length; x++)\r\n {\r\n if ($scope.appInfo.paperwork.tanks[x].TankNo === referenceTank.InventoryTankNo)\r\n {\r\n referenceTank = $scope.appInfo.paperwork.tanks[x];\r\n break;\r\n }\r\n }\r\n }\r\n //Then find the tolerance\r\n var tolerance = (referenceTank.EndQty * ($scope.appInfo.paperwork.OSWarningPct / 100)) + $scope.appInfo.paperwork.OSWarningUnits;\r\n var min = referenceTank.EndQty - tolerance;\r\n var max = referenceTank.EndQty + tolerance;\r\n //Find the total value of all tanks manifolded togather then check the tolerances.\r\n var totalValue = $scope.calculateTankEndQuantity(referenceTank);\r\n hasWarning = (totalValue < min || totalValue > max) && !referenceTank.NoReading;\r\n\r\n if (hasWarning)\r\n {\r\n $scope.tankCommentIsRequired = true;\r\n }\r\n\r\n return {\r\n HasWarning: hasWarning,\r\n Min: min,\r\n Max: max\r\n } ;\r\n };\r\n\r\n $scope.calculateTankEndQuantity = function (tank)\r\n {\r\n if (tank.TankNo === tank.InventoryTankNo)\r\n return tank.Quantity;\r\n var inventoryTankNo = tank.InventoryTankNo;\r\n var quantity = 0.00;\r\n for (var x = 0; x < $scope.appInfo.paperwork.tanks.length; x++)\r\n {\r\n if ($scope.appInfo.paperwork.tanks[x].InventoryTankNo === inventoryTankNo)\r\n quantity += $scope.appInfo.paperwork.tanks[x].Quantity;\r\n }\r\n return quantity;\r\n };\r\n\r\n $scope.setupGridColumnValidationNotificationUI = function ($col)\r\n {\r\n\r\n var fieldName = $col.attr('data-field');\r\n\r\n $col.qtip({\r\n id: \"qtip-\" + fieldName,\r\n content: {\r\n text: \"\"\r\n },\r\n position: {\r\n adjust: {\r\n x: -10, y: -10\r\n }\r\n },\r\n style: {\r\n classes: \"toolTipStyle\"\r\n }\r\n });\r\n\r\n $col.qtip('disable', true);\r\n\r\n };\r\n\r\n $scope.processGridColumnValidationNotification = function ($row, fieldName, errorMessages, warningMessages)\r\n {\r\n\r\n var idx = 0;\r\n\r\n var hasErrors = (errorMessages.length > 0);\r\n var hasWarnings = (warningMessages.length > 0);\r\n\r\n var $col = $row.find(\"[data-field='\" + fieldName + \"']\");\r\n\r\n //clear classes\r\n $col.removeClass(\"td-error\");\r\n $col.removeClass(\"td-warning\");\r\n\r\n if (hasErrors || hasWarnings)\r\n {\r\n\r\n var messageList = $(\"
    \");\r\n\r\n if (hasErrors)\r\n {\r\n var errorList = $(\"
    \" + localStrings.getLocalizedString(\"Error\") + \" :
    \");\r\n for (idx = 0; idx < errorMessages.length; idx++)\r\n {\r\n errorList.append(\"
  • \" + errorMessages[idx] + \"
  • \");\r\n }\r\n\r\n messageList.append(errorList);\r\n }\r\n\r\n if (hasWarnings)\r\n {\r\n var warningList = $(\"
    \" + localStrings.getLocalizedString(\"Warning\") + \" :
    \");\r\n for (idx = 0; idx < warningMessages.length; idx++)\r\n {\r\n warningList.append(\"
  • \" + warningMessages[idx] + \"
  • \");\r\n }\r\n\r\n messageList.append(warningList);\r\n }\r\n\r\n $col.qtip('option', 'content.text', messageList);\r\n\r\n if (hasErrors)\r\n {\r\n $col.addClass(\"td-error\");\r\n $col.qtip('option', 'style.classes', 'toolTipStyle-error');\r\n } else\r\n {\r\n $col.addClass(\"td-warning\");\r\n $col.qtip('option', 'style.classes', 'toolTipStyle-warning');\r\n }\r\n\r\n $col.qtip('disable', false);\r\n }\r\n else\r\n {\r\n $col.qtip('disable', true);\r\n }\r\n };\r\n\r\n var tankRowValidation =\r\n {\r\n validator: function (tank, parms)\r\n {\r\n var isValid = true;\r\n\r\n var $row = $(\"#tanksGrid\").data(\"kendoGrid\").tbody.find(\"tr[data-uid='\" + tank.uid + \"']\");\r\n\r\n var errorFuelQty = [], warningFuelQty = [];\r\n\r\n // fuel quantity validation\r\n var maxTankVolume = PaperworkTanksService.getMaxVolumeFromTankChart(tank, $scope.appInfo.paperwork.tankCharts);\r\n if (tank.Quantity > maxTankVolume)\r\n {\r\n errorFuelQty.push(localStrings.getLocalizedString(\"TankReadingExceeds\"));\r\n isValid = false;\r\n }\r\n\r\n var result = $scope.validateTankOverShort(tank);\r\n if (result.HasWarning)\r\n {\r\n warningFuelQty.push(localStrings.getLocalizedString(\"FuelMeasurementsEntered\") + \" \" + result.Min + \" \" + localStrings.getLocalizedString(\"And\") + \" \" + result.Max);\r\n }\r\n\r\n $scope.processGridColumnValidationNotification($row, 'Quantity', errorFuelQty, warningFuelQty);\r\n\r\n return isValid;\r\n }\r\n };\r\n\r\n $scope.validateTanks = function ()\r\n {\r\n\r\n var isValid = true;\r\n\r\n var tanksGrid = $(\"#tanksGrid\").data(\"kendoGrid\");\r\n\r\n $scope.tankCommentIsRequired = false;\r\n angular.forEach(tanksGrid.dataSource.data(), function (tank)\r\n {\r\n isValid = isValid && tankRowValidation.validator(tank);\r\n });\r\n\r\n return isValid;\r\n };\r\n\r\n $scope.loadTanks = function (refreshDataSource)\r\n {\r\n if (!$scope.locationInfo.sideMenuData.paperwork.tanks)\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n\r\n angular.forEach($scope.appInfo.paperwork.context.paperworkSites, function (site, index)\r\n {\r\n if (site.SiteKey === $scope.appInfo.paperwork.batch.SiteKey)\r\n $scope.appInfo.paperwork.context.selectedSiteObj = site;\r\n });\r\n\r\n PaperworkTanksService.loadTanks(\r\n $scope.appInfo.paperwork.batch.Key,\r\n $scope.appInfo.paperwork.batch.SiteKey,\r\n $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true)\r\n ).then(function (data)\r\n {\r\n // if(data.count == 0){\r\n // TODO: No tanks, do something...\r\n // }\r\n $scope.appInfo.paperwork.tanks = data.PaperworkTanks;\r\n $scope.appInfo.paperwork.postedTanks = data.PostedPaperworkTanks;\r\n $scope.appInfo.paperwork.partialUnits = data.PartialUnitsList;\r\n $scope.appInfo.paperwork.metric = data.Metric;\r\n $scope.appInfo.paperwork.quantityOnly = data.QuantityOnly;\r\n $scope.appInfo.paperwork.useLargeUnits = data.UseLargeUnits;\r\n $scope.appInfo.paperwork.useTempCorrections = data.UseTempCorrections;\r\n $scope.appInfo.paperwork.trackWaterLevels = data.TrackWaterLevels;\r\n $scope.appInfo.paperwork.tankCharts = data.TankCharts;\r\n $scope.appInfo.paperwork.tempCharts = data.TempCharts;\r\n $scope.appInfo.paperwork.OSComments = data.OSComments;\r\n $scope.appInfo.paperwork.UseOSWarnings = data.UseOSWarnings;\r\n $scope.appInfo.paperwork.OSWarningUnits = data.OSWarningUnits;\r\n $scope.appInfo.paperwork.OSWarningPct = data.OSWarningPct;\r\n $scope.appInfo.paperwork.RequireOSComments = data.RequireOSComments;\r\n\r\n if (!refreshDataSource)\r\n {\r\n $scope.initializeTanksGrid();\r\n } else\r\n {\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\");\r\n if(angular.isUndefinedOrNullOrEmpty(grid)) return;\r\n grid.dataSource.data(data.PaperworkTanks);\r\n\r\n $scope.validateTanks(); // call00 validate to re add any warnings after save\r\n }\r\n\r\n $scope.tanksLoaded = true;\r\n\r\n if ($scope.appInfo.paperwork.postedTanks.length > 0) {\r\n $scope.postedReadingsExist = true;\r\n }\r\n\r\n if ($scope.appInfo.paperwork.tanks.length > 0) {\r\n $scope.tanksEditable = !($scope.appInfo.paperwork.context.lockPaperworkAfterDru && $scope.appInfo.paperwork.tanks[0].DRUPosted);\r\n }\r\n });\r\n };\r\n\r\n $scope.tankCommentIsRequired = false;\r\n $scope.tankCommentRequiredError = false;\r\n\r\n var tankCommentValidation =\r\n {\r\n name: 'validateTankComment',\r\n validationMessage: localStrings.getLocalizedString(\"FuelMeasurementsNotInToleranceComment\"),\r\n validatorError: function ()\r\n {\r\n $scope.tankCommentRequiredError = false;\r\n\r\n if (!$scope.appInfo.paperwork.UseOSWarnings || !$scope.appInfo.paperwork.RequireOSComments || !$scope.tankCommentIsRequired)\r\n {\r\n return true; // not required or not overshort warning\r\n }\r\n\r\n\r\n if ($scope.appInfo.paperwork.NewOSComments.length > 0 || ($scope.appInfo.paperwork.OSComments.Text && $scope.appInfo.paperwork.OSComments.Text.length > 0))\r\n {\r\n return true;\r\n }\r\n\r\n $scope.tankCommentRequiredError = true;\r\n return false;\r\n }\r\n };\r\n\r\n $scope.tankCommentErrorOnBlur = function ()\r\n {\r\n $(\"#tankCommmentValidationMessage\").attr('style', 'display: none !important;');\r\n };\r\n\r\n $scope.tankCommentErrorOnFocus = function ()\r\n {\r\n $(\"#tankCommmentValidationMessage\").attr('style', 'display: inline-block !important;');\r\n };\r\n\r\n var PageStage = $rootScope.$on('event:PageStage', function (event, args)\r\n {\r\n if (args === 'DREGS' && !$scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.savePaperworkTanks('', false, false);\r\n } \r\n });\r\n $scope.$on('$destroy', PageStage);\r\n\r\n $scope.next = function (path)\r\n {\r\n if (!validatorSvc.executeValidations()) {\r\n return;\r\n }\r\n\r\n if (!$scope.appInfo.paperwork.viewOnly && $scope.tanksEditable)\r\n {\r\n $scope.savePaperworkTanks(path, false, false);\r\n } else {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, false));\r\n }\r\n };\r\n\r\n $scope.previous = function (path)\r\n {\r\n if (!validatorSvc.executeValidations()) {\r\n return;\r\n }\r\n\r\n if (!$scope.appInfo.paperwork.viewOnly && $scope.tanksEditable)\r\n {\r\n $scope.savePaperworkTanks(path, false, false, true);\r\n } else {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, true));\r\n }\r\n };\r\n\r\n $scope.close = function (path)\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly && $scope.tanksEditable)\r\n {\r\n $scope.savePaperworkTanks(\"\", false, false);\r\n } else {\r\n $scope.goTo(\"/Paperwork/EnterPaperwork/\");\r\n }\r\n };\r\n\r\n $scope.submit = function ()\r\n {\r\n $scope.savePaperworkTanks(\"\", true, false);\r\n };\r\n\r\n function initPopup() {\r\n var popupTitle = localStrings.getLocalizedString(\"PostedFuelTankReadings\");\r\n var postedHtml = '
    ';\r\n\r\n $scope.modalifier.show(popupTitle, postedHtml);\r\n\r\n setTimeout(function () {\r\n //get and modify the original grids options\r\n $scope.gridOptions = {};\r\n angular.copy($scope.tanksGridOptions, $scope.gridOptions);\r\n $scope.gridOptions.editable = false;\r\n\r\n // manually update imperial/metric units in header (large units, small units, temperature) - angular directives are not evaluated in popup\r\n $scope.gridOptions.columns[2].columns[0].headerTemplate = $scope.appInfo.paperwork.metric ? \"m.\" : \"ft.\";\r\n $scope.gridOptions.columns[2].columns[1].headerTemplate = $scope.appInfo.paperwork.metric ? \"cm.\" : \"in.\";\r\n $scope.gridOptions.columns[3].columns[0].headerTemplate = $scope.appInfo.paperwork.metric ? \"cm.\" : \"in.\";\r\n $scope.gridOptions.columns[4].columns[0].headerTemplate = $scope.appInfo.paperwork.metric ? \"°C\" : \"°F\";\r\n\r\n // grab the empty element and make it a kendo grid\r\n var el = $('div.popupTanksTable');\r\n el.kendoGrid($scope.gridOptions);\r\n\r\n // checkbox imputs must be manually disabled\r\n el.find('.grid-checkbox').attr('readonly', true);\r\n //$('input.noReadChkBox').Attr('disabled', true);\r\n\r\n // hide columns based on record type\r\n var grid = el.data('kendoGrid');\r\n $scope.setupTankGridColumns(grid);\r\n\r\n // set datasource\r\n grid.dataSource.data($scope.appInfo.paperwork.postedTanks);\r\n grid.refresh();\r\n }, 0);\r\n }\r\n\r\n $scope.showPostedReadings = function () {\r\n if ($('div.popupTanksTable').length > 0)\r\n $scope.modalifier.display = true;\r\n else\r\n initPopup();\r\n };\r\n\r\n $scope.submitPaperwork = function (submit)\r\n {\r\n var fuelMetersAppInfo = $scope.appInfo.paperwork.apps[0];\r\n\r\n //If we have fuelMeters and fuelMeters are required, but not saved; then throw error\r\n if (fuelMetersAppInfo.HasData === 0 && fuelMetersAppInfo.IsRequired !== 0) {\r\n $timeout(function () {\r\n $scope.modalifier.showSavedError();\r\n }, 100);\r\n return;\r\n }\r\n\r\n var submitPaperworkCmdParms =\r\n {\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n EmailAddress: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n SubmitPaperwork: submit,\r\n PreviouslySubmitted: $scope.appInfo.paperwork.batch.HasBeenSubmitted\r\n };\r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms).then(function (data)\r\n {\r\n if (submit)\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n });\r\n };\r\n\r\n $scope.savePaperworkTanks = function (path, submit, close, isPrevious)\r\n {\r\n isPrevious = isPrevious ? isPrevious : false;\r\n\r\n if ($('#tanksGrid .k-dirty-cell').length > 0) {\r\n\r\n if (!$scope.validateTanks()) {\r\n return;\r\n } else {\r\n if ($scope.tankCommentIsRequired) {\r\n var commentIsValid = tankCommentValidation.validatorError();\r\n\r\n if (!commentIsValid) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n $scope.resetDirtyFlags($scope.tanksForm);\r\n\r\n angular.copy($scope.tanksGridDS.data().toJSON(), $scope.appInfo.paperwork.tanks);\r\n\r\n var tankHeader = {\r\n Key: $scope.appInfo.paperwork.tanks[0].HeaderKey,\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n Status: $scope.appInfo.paperwork.tanks[0].Status,\r\n StickType: $scope.appInfo.paperwork.tanks[0].StickType,\r\n Ts: $scope.appInfo.paperwork.tanks[0].HeaderTimeStamp,\r\n PaperworkBatchKey: $scope.appInfo.paperwork.batch.Key,\r\n AppKey: $scope.locationInfo.sideMenuData.paperwork.tanks.Key,\r\n UserName: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n OSComments: {\r\n Key: $scope.appInfo.paperwork.OSComments.Key,\r\n FuelStkHdrKey: $scope.appInfo.paperwork.OSComments.FuelStkHdrKey,\r\n Text: $scope.appInfo.paperwork.OSComments.Text,\r\n NewText: $scope.appInfo.paperwork.NewOSComments,\r\n Ts: $scope.appInfo.paperwork.OSComments.Ts,\r\n Timestamp: $scope.appInfo.paperwork.OSComments.Timestamp\r\n }\r\n };\r\n\r\n PaperworkTanksService.savePaperworkTanks(tankHeader, $scope.appInfo.paperwork.tanks).then(function (data) {\r\n //get updated data\r\n $scope.loadTanks(true);\r\n\r\n $scope.appInfo.paperwork.NewOSComments = \"\";\r\n });\r\n }\r\n\r\n if (submit) {\r\n $scope.submitPaperwork(true);\r\n return;\r\n }\r\n if (close) {\r\n $scope.submitPaperwork(false);\r\n return;\r\n }\r\n if (path.length > 0){\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, false, isPrevious));\r\n }\r\n };\r\n\r\n $scope.getPartialValue = function (value)\r\n {\r\n for (var x in $scope.appInfo.paperwork.partialUnits)\r\n {\r\n if ($scope.appInfo.paperwork.partialUnits[x] === value)\r\n return $scope.appInfo.paperwork.partialUnits[x];\r\n }\r\n };\r\n\r\n })\r\n .controller('enterPaperworkDeliveriesCtrl', function ($scope, $rootScope, $routeParams, PaperworkService, $filter, PaperworkDeliveriesService,\r\n $location, WebFunctions, validatorSvc, $timeout, $q, $compile, templates, localStrings, globalizationSvc,setupNav)\r\n {\r\n 'use strict';\r\n $scope.kendo = {};\r\n $scope.appInfo.paperwork.paperworkKey = 0;\r\n $scope.appInfo.paperwork.deliveries = {};\r\n $scope.appInfo.paperwork.deliveriesList = {};\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = {};\r\n $scope.appInfo.paperwork.deliveries.context = {};\r\n $scope.appInfo.paperwork.deliveries.context.AuthorizedVendors = [];\r\n $scope.appInfo.paperwork.deliveries.context.AuthorizedTerminals = [];\r\n $scope.appInfo.paperwork.deliveries.context.AuthorizedCarriers = [];\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryFreight = [];\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.VendKey = -1;\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.TrmnlKey = -1;\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.CarrierKey = -1;\r\n $scope.deliveriesLoaded = false;\r\n $scope.deliveryFilteredTanks = [];\r\n\r\n $scope.currentView = 0; // 0 = record selector; 1= entry\r\n\r\n $scope.changeView = function (view)\r\n {\r\n\r\n // 0 = record selector; 1= entry\r\n\r\n if (view === 1)\r\n { // chnange to entry\r\n $scope.currentView = 1;\r\n } else\r\n {\r\n $scope.currentView = 0;\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = {}; // clear delivery\r\n }\r\n };\r\n\r\n $scope.freightModalFormDelegate = {};\r\n\r\n //grid validations\r\n $scope.productValidation = {hasErrors: false, errorDescription: \"\"};\r\n\r\n // controller destructor\r\n $scope.$on(\"$destroy\", function handler()\r\n {\r\n $rootScope.scopesToValidate = [];\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n $scope.appInfo = $scope.appInfo || {};\r\n\r\n $scope.appInfo.paperwork.viewOnly = $location.$$path.indexOf('/ViewPaperworkDeliveries/') > -1;\r\n if ($routeParams.paperworkKey)\r\n {\r\n $scope.appInfo.paperwork.paperworkKey = $routeParams.paperworkKey;\r\n }\r\n $scope.appInfo.paperwork.NewOSComments = '';\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = '1';\r\n // $scope.getWebProfileMessage(19);\r\n $scope.globalizationSvc = globalizationSvc;\r\n\r\n $scope.newDeliveryProduct = {};\r\n\r\n $scope.appInfo.paperwork.batch = {};\r\n\r\n if (!$scope.appInfo.paperwork.context)\r\n {\r\n PaperworkService.getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, true).then(\r\n function (data)\r\n {\r\n $scope.appInfo.paperwork.context = {};\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.selectedSite = data.SelectedSiteKey;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n }\r\n );\r\n }\r\n\r\n if ($scope.appInfo.paperwork.paperworkKey > 0)\r\n {\r\n //We are loading a known existing paperwork batch\r\n PaperworkService.OpenPaperworkBatchByKey(\r\n $scope.appInfo.paperwork.paperworkKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n $scope.appInfo.paperwork.viewOnly\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.batch = data.PaperworkBatch.PaperworkBatch;\r\n $scope.appInfo.paperwork.apps = data.PaperworkBatch.PaperworkApps;\r\n $scope.appInfo.paperwork.form = data.PaperworkBatch.PaperworkForm;\r\n $scope.appInfo.paperwork.siteInfo = data.PaperworkBatch.PaperworkSiteInfo;\r\n \r\n // resolve if this is the first or last page\r\n var res = setupNav.firstLastPage('DREFD',$scope.appInfo.paperwork.apps);\r\n $scope.locationInfo.sideMenuData.isFirstPage = res.isFirstPage;\r\n $scope.locationInfo.sideMenuData.isLastPage = res.isLastPage;\r\n\r\n $rootScope.$broadcast('event:PaperworkLoaded', $scope.appInfo.paperwork.viewOnly, $scope.appInfo.paperwork.paperworkKey);\r\n\r\n var nextApp = true;\r\n angular.forEach($scope.appInfo.paperwork.apps, function (app, index)\r\n {\r\n if (app.MenuCode === 'DREFD')\r\n {\r\n $scope.getDeliveriesWithContext();\r\n nextApp = false;\r\n }\r\n });\r\n if (nextApp)\r\n {\r\n $scope.goTo(setupNav.navigateToPage('DREFD',$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, false));\r\n }\r\n }, function ()\r\n {\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n });\r\n } else\r\n {\r\n //todo: goback...\r\n }\r\n $scope.locationInfo.sideMenuData.pwSubMenu = '4';\r\n\r\n $scope.hideModals();\r\n };\r\n\r\n var newPWBatchLoadedListener = $rootScope.$on('event:NewPaperworkBatchLoaded', function (event, data)\r\n {\r\n if ($scope.locationInfo.sideMenuData.paperwork.tanks)\r\n $scope.getDeliveriesWithContext();\r\n else\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n });\r\n\r\n // $scope $destroy\r\n $scope.$on('$destroy', newPWBatchLoadedListener);\r\n\r\n $scope.getDeliveriesWithContext = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData.paperwork.deliveries)\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n\r\n angular.forEach($scope.appInfo.paperwork.context.paperworkSites, function (site, index)\r\n {\r\n if (site.SiteKey === $scope.appInfo.paperwork.batch.SiteKey)\r\n {\r\n $scope.appInfo.paperwork.context.selectedSiteObj = site;\r\n }\r\n });\r\n\r\n PaperworkDeliveriesService.getDeliveriesWithContext(\r\n $scope.appInfo.paperwork.batch.Key, $scope.appInfo.paperwork.viewOnly\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.deliveries = {};\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = {};\r\n $scope.appInfo.paperwork.deliveries.context = data.Context;\r\n $scope.appInfo.paperwork.deliveries.deliveriesList = data.FuelDeliveriesList;\r\n\r\n // if there are no deliveries for this paperwork batch then drop in to add mode for new delivery\r\n if (data.FuelDeliveriesList.length === 0)\r\n {\r\n // currently petronet can only edit petronet source fuel delivery so expect on one row returned\r\n data.NewDelivery.LiftDatetime = globalizationSvc.formatDateTime(data.NewDelivery.LiftDatetime, 'g');\r\n data.NewDelivery.DelivDateTime = globalizationSvc.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate, 'g');\r\n\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = data.NewDelivery;\r\n\r\n $scope.fuelDeliveriesCount = data.FuelDeliveriesList.length;\r\n\r\n $scope.initializeDeliveriesGrid();\r\n\r\n $scope.changeView(1);\r\n }\r\n\r\n $scope.deliveriesLoaded = true;\r\n });\r\n };\r\n\r\n var gridColEditorInput = function (container, options)\r\n {\r\n\r\n var fieldName = \"'\" + options.field + \"'\";\r\n\r\n var required = $(container).attr('required'); // field is required\r\n\r\n // For some browsers, `attr` is undefined; for others,\r\n // `attr` is false. Check for both.\r\n if (typeof required !== typeof undefined && required !== false)\r\n {\r\n $('')\r\n .appendTo(container);\r\n } else\r\n {\r\n $('')\r\n .appendTo(container);\r\n }\r\n\r\n };\r\n\r\n var gridColNumber = function (field, format)\r\n {\r\n return '';\r\n };\r\n\r\n var productEditor = function (container, options)\r\n {\r\n $(\"\")\r\n\r\n .appendTo(container)\r\n .kendoComboBox({\r\n id: \"productList\",\r\n dataSource: {\r\n data: $scope.appInfo.paperwork.deliveries.context.SiteTankProducts\r\n },\r\n filter: \"contains\",\r\n dataTextField: localStrings.getLocalizedString(\"ID\"),\r\n dataValueField: \"Key\",\r\n template: \"
    ${ Id }${ Description }
    \",\r\n change: function (e)\r\n {\r\n\r\n var selectionElement = $(e.sender.element[0]).parent().find(\".k-dropdown-wrap\");\r\n\r\n // check if valid\r\n if ($(e.sender.element[0]).hasClass(\"k-invalid\"))\r\n {\r\n selectionElement.addClass(\"k-selection-invalid\");\r\n } else\r\n {\r\n selectionElement.removeClass(\"k-selection-invalid\");\r\n }\r\n\r\n if (this.value() && this.selectedIndex === -1)\r\n {\r\n this.value('');\r\n this._filterSource({\r\n value: \"\",\r\n field: this.options.dataTextField,\r\n operator: \"contains\"\r\n });\r\n return;\r\n }\r\n\r\n var dataItem = e.sender.dataItem();\r\n options.model.set(\"ProdId\", dataItem.Id);\r\n options.model.set(\"ProdDesc\", dataItem.Description);\r\n },\r\n open: function(e) {\r\n var width = $(\".k-combobox\").width() + 300;\r\n $(\".k-animation-container\").width(width);\r\n $(\".k-list-container\").width(width - 4);\r\n }\r\n });\r\n\r\n $('').appendTo(container);\r\n\r\n };\r\n\r\n var tankEditor = function (container, options)\r\n {\r\n $(\"\")\r\n\r\n .appendTo(container)\r\n .kendoComboBox({\r\n id: \"tankList\",\r\n filter: \"contains\",\r\n dataSource: {\r\n data: $scope.getFilteredTanksList(options.model.ProdKey)\r\n },\r\n dataTextField: \"TankNo\",\r\n dataValueField: \"TankNo\",\r\n change: function (e)\r\n {\r\n\r\n var selectionElement = $(e.sender.element[0]).parent().find(\".k-dropdown-wrap\");\r\n\r\n // check if valid\r\n if ($(e.sender.element[0]).hasClass(\"k-invalid\"))\r\n {\r\n selectionElement.addClass(\"k-selection-invalid\");\r\n } else\r\n {\r\n selectionElement.removeClass(\"k-selection-invalid\");\r\n }\r\n\r\n if (this.value() && this.selectedIndex === -1)\r\n {\r\n this.value('');\r\n this._filterSource({\r\n value: \"\",\r\n field: this.options.dataTextField,\r\n operator: \"contains\"\r\n });\r\n return;\r\n }\r\n\r\n var dataItem = e.sender.dataItem();\r\n options.model.set(\"SelectedTank\", dataItem);\r\n }\r\n });\r\n\r\n $('').appendTo(container);\r\n };\r\n\r\n $scope.getProductByKey = function (prodKey)\r\n {\r\n return $scope.appInfo.paperwork.deliveries.context.SiteTankProducts.find({Key: prodKey});\r\n };\r\n\r\n $scope.initializeDeliveriesGrid = function ()\r\n {\r\n\r\n $scope.deliveriesGridDS = new kendo.data.DataSource({\r\n schema: {\r\n model: {\r\n fields: {\r\n ProdKey: {type: \"number\"},\r\n ProdId: {type: \"string\"},\r\n ProdDesc: {type: \"string\"},\r\n TankNo: {type: \"number\"},\r\n DelivGrossQty: {type: \"number\"},\r\n DelivNetQty: {type: \"number\"},\r\n SelectedTank: {}\r\n }\r\n }\r\n },\r\n data: $scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryProducts,\r\n batch: true\r\n });\r\n\r\n $scope.deliveriesGridOptions = {\r\n dataSource: $scope.deliveriesGridDS,\r\n columns: [\r\n {\r\n title: localStrings.getLocalizedString(\"Product\"),\r\n columns: [\r\n {\r\n field: \"ProdKey\",\r\n title: localStrings.getLocalizedString(\"ID\"),\r\n width: 100,\r\n attributes: {\"data-field\": \"ProdKey\", \"class\": \"k-editable-cell\", \"required\": \"true\"},\r\n template: \"#=ProdId#\",\r\n editor: productEditor\r\n },\r\n {\r\n field: \"ProdDesc\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {\"data-field\": \"ProdDesc\", \"class\": \"tableCellDisabled description\"},\r\n template: \"#=ProdDesc#\",\r\n editor: function (element, options)\r\n {\r\n element.text(options.model.ProdDesc);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n field: \"FuelDeliveryTanks[0].TankNo\",\r\n width: 100,\r\n template: \"#= FuelDeliveryTanks[0].TankNo #\",\r\n editor: tankEditor,\r\n headerTemplate: localStrings.getLocalizedString(\"Tank\"),\r\n attributes: {\"data-field\": \"TankNo\", \"class\": \"k-editable-cell\", \"required\": \"true\"}\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"Units\"),\r\n columns: [\r\n {\r\n field: \"DelivGrossQty\",\r\n title: localStrings.getLocalizedString(\"Gross\"),\r\n width: 80,\r\n attributes: {\r\n \"data-field\": \"DelivGrossQty\",\r\n \"class\": \"k-editable-cell\",\r\n \"required\": \"true\"\r\n },\r\n template: gridColNumber(\"DelivGrossQty\", \"n2\"),\r\n editor: gridColEditorInput\r\n },\r\n {\r\n field: \"DelivNetQty\",\r\n title: localStrings.getLocalizedString(\"Net\"),\r\n width: 80,\r\n attributes: {\r\n \"data-field\": \"DelivNetQty\",\r\n \"class\": \"k-editable-cell\",\r\n \"required\": \"true\"\r\n },\r\n template: gridColNumber(\"DelivNetQty\", \"n2\"),\r\n editor: gridColEditorInput\r\n }\r\n ]\r\n },\r\n {\r\n field: \"DeleteDeliveryBtn\",\r\n template: \"\",\r\n width: 60,\r\n attributes: {\"data-field\": \"DeleteDeliveryBtn\"},\r\n headerTemplate: \" \"\r\n }\r\n ],\r\n pageable: false,\r\n sortable: false,\r\n editable: $scope.deliveryIsEditable(),\r\n scrollable: false,\r\n navigatable: true,\r\n dataBound: function (e)\r\n {\r\n $scope.setupDeliveryRows();\r\n },\r\n edit: function (e)\r\n {\r\n var $input = e.container.find(\"input\");\r\n var fieldName = $input.attr(\"name\");\r\n\r\n // alternative (if you don't have the name attribute in your editable):\r\n // var columnIndex = this.cellIndex(e.container);\r\n // var fieldName = this.thead.find(\"th\").eq(columnIndex).data(\"field\");\r\n\r\n if (!deliveriesGridColIsEditable(fieldName, e.model))\r\n {\r\n $input.prop('readonly', true);\r\n //this.closeCell(); // prevent editing\r\n } else\r\n {\r\n $input.select();\r\n $input.addClass('k-cell-state-selected');\r\n }\r\n\r\n var grid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n var currentCell = $(grid.tbody.children().find(\".k-edit-cell\"));\r\n\r\n grid.current(currentCell);\r\n }\r\n\r\n };\r\n\r\n };\r\n\r\n $scope.$on(\"kendoWidgetCreated\", function (event, widget)\r\n {\r\n\r\n var grid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n\r\n // the event is emitted for every widget; if we have multiple\r\n // widgets in this controller, we need to check that the event\r\n // is for the one we're interested in.\r\n\r\n if (widget === $scope.kendo.deliveriesGrid)\r\n {\r\n grid.dataSource.data($scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryProducts);\r\n\r\n $(\"#deliveriesGrid\").find(\"table\").on(\"keydown\", onGridKeydown);\r\n\r\n if ($scope.deliveryIsEditable())\r\n {\r\n var addDeliveryAction = $('
    ').appendTo($('#deliveriesGrid'));\r\n $compile(addDeliveryAction)($scope);\r\n }\r\n\r\n $scope.setupDeliveriesGridColumns();\r\n\r\n }\r\n });\r\n\r\n function onGridKeydown(e)\r\n {\r\n if (e.keyCode === kendo.keys.TAB)\r\n {\r\n var grid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n\r\n var current = grid.current();\r\n\r\n if (!current.hasClass(\"k-editable-cell\"))\r\n {\r\n var nextCell = current.nextAll(\".k-editable-cell\");\r\n if (!nextCell[0])\r\n {\r\n //search the next row\r\n var nextRow = current.parent().next();\r\n\r\n // if tabbing and reached the last cell then create new row\r\n if (nextRow.length === 0)\r\n {\r\n $scope.addDeliveryGridRow();\r\n\r\n var $newRow = $(grid.tbody.children().last());\r\n\r\n $newRow.find(\"td:eq(0) input\").focus();\r\n nextCell = $newRow;\r\n grid.current(nextCell);\r\n\r\n } else\r\n {\r\n nextCell = current.parent().next().children(\".k-editable-cell:first\");\r\n\r\n grid.current(nextCell);\r\n grid.editCell(nextCell[0]);\r\n }\r\n } else\r\n {\r\n grid.current(nextCell);\r\n grid.editCell(nextCell[0]);\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n $scope.setupDeliveryRows = function ()\r\n {\r\n\r\n $(\"#deliveriesGrid tr\").each(function (index, row)\r\n {\r\n\r\n if (index > 1)\r\n { // skip header rows\r\n\r\n $scope.setupDeliveryRow(row);\r\n }\r\n });\r\n };\r\n\r\n $scope.setupDeliveryRow = function (deliveryRow)\r\n {\r\n\r\n var dataItem = $(\"#deliveriesGrid\").data(\"kendoGrid\").dataItem(deliveryRow);\r\n\r\n var $row = $(deliveryRow);\r\n\r\n //set prod id and description for product key\r\n var selectedProduct = $scope.getProductByKey(dataItem.ProdKey);\r\n\r\n if (selectedProduct)\r\n {\r\n dataItem.set(\"ProdId\", selectedProduct.Id);\r\n dataItem.set(\"ProdDesc\", selectedProduct.Description);\r\n }\r\n\r\n var $rowColumns = $row.find('td');\r\n\r\n $rowColumns.each(function (index, col)\r\n {\r\n var $col = $(col);\r\n var fieldName = $col.attr('data-field');\r\n if (!deliveriesGridColIsEditable(fieldName, dataItem))\r\n {\r\n $col.addClass(\"tableCellDisabled\");\r\n $col.removeClass(\"k-editable-cell\");\r\n\r\n /*if (fieldName === \"DeleteDeliveryBtn\") {\r\n $col.find('i').hide();\r\n }*/\r\n }\r\n\r\n $scope.setupGridColumnValidationNotificationUI($col);\r\n });\r\n };\r\n\r\n $scope.addDeliveryGridRow = function ()\r\n {\r\n var grid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n\r\n if (grid)\r\n {\r\n\r\n // check if there is a new row already and if it is not valid then don't create a another new row\r\n // if there is a invalid new row remove it before validating\r\n var $lastRow = $(grid.tbody.children().last());\r\n var isNewRow = $lastRow.hasClass('newRow');\r\n\r\n if (isNewRow)\r\n {\r\n var hasDirtyRow = $lastRow.find('.k-dirty');\r\n\r\n if (hasDirtyRow.length === 0)\r\n {\r\n grid.cancelRow();\r\n }\r\n }\r\n\r\n $(\"deliveriesGrid\").removeClass(\"newRow\");\r\n\r\n //this logic creates a new item in the datasource/datagrid\r\n var dataSource = grid.dataSource;\r\n var totalRows = dataSource.data().length;\r\n\r\n var newDeliveryProduct = {\r\n \"AllocFuelContKey\": null,\r\n \"AllocFuelContDtlKey\": null,\r\n \"AllocLastPostedFuelContDtlKey\": null,\r\n \"BasedOnUnits\": 0,\r\n \"BOLAutoMatched\": 0,\r\n \"BOLDtlKey\": null,\r\n \"BusEntKey\": null,\r\n \"CalcExtCost\": 0,\r\n \"CalcFrtCost\": 0,\r\n \"CalcUnitCost\": 0,\r\n \"CnfrmDateTime\": null,\r\n \"CnfrmStatus\": 0,\r\n \"CnfrmUserID\": null,\r\n \"ContractOverride\": 0,\r\n \"CostOverride\": 0,\r\n \"CostPosted\": 0,\r\n \"CustLocKey\": null,\r\n \"DelivDateTime\": $scope.appInfo.paperwork.deliveries.fuelDelivery.DelivDateTime,\r\n \"DelivGrossQty\": 0,\r\n \"DelivNetQty\": 0,\r\n \"DestProdKey\": null,\r\n \"DestSiteKey\": $scope.appInfo.paperwork.batch.SiteKey,\r\n \"DestType\": 0,\r\n \"ExternalRecID\": null,\r\n \"FrtInInventory\": -1,\r\n \"FrtOverride\": 0,\r\n \"FrtPLAmt\": 0,\r\n \"FrtPLInInvAmt\": 0,\r\n \"FrtPLInInventory\": -1,\r\n \"FueldelProdFrtReconGrossQty\": 0,\r\n \"FueldelProdFrtReconNetQty\": 0,\r\n \"FrtReconUserID\": null,\r\n \"FrtReconciled\": 0,\r\n \"FrtUnitCost\": 0,\r\n \"FrtVndInvKey\": null,\r\n \"FrtVndInvPndKey\": null,\r\n \"FuelContKey\": null,\r\n \"FuelContDtlKey\": null,\r\n \"FuelDelKey\": $scope.appInfo.paperwork.deliveries.fuelDelivery.Key,\r\n \"InvcExtCost\": 0,\r\n \"InvcFrtCost\": 0,\r\n \"InvcFrtUnitCost\": 0,\r\n \"InvcGrossQty\": 0,\r\n \"InvcNetQty\": 0,\r\n \"InvcUnitCost\": 0,\r\n \"Key\": 0,\r\n \"LastPostedFuelContDtlKey\": null,\r\n \"OrdQty\": 0,\r\n \"OrigProdKey\": null,\r\n \"OwnerOption\": 0,\r\n \"ProdKey\": \"\",\r\n \"ReconUserID\": null,\r\n \"Reconciled\": 0,\r\n \"SiteKey\": $scope.appInfo.paperwork.batch.SiteKey,\r\n \"SourceKey\": 0,\r\n \"SourceType\": 1,\r\n \"TaxPLAmt\": 0,\r\n \"TaxPLInInvAmt\": 0,\r\n \"VndInvKey\": null,\r\n \"VndInvPndKey\": null,\r\n \"Timestamp\": \"\",\r\n \"FuelDeliveryTanks\": [\r\n {\r\n \"DelivQty\": 0,\r\n \"DelProdKey\": 0,\r\n \"Ethanol\": 0,\r\n \"InventoryCost\": 0,\r\n \"Key\": 0,\r\n \"LastCost\": 0,\r\n \"LastDelivGrossQty\": 0,\r\n \"LastDelivNetQty\": 0,\r\n \"LastEthanol\": 0,\r\n \"LastOctane\": 0,\r\n \"LastQty\": 0,\r\n \"LastRVP\": 0,\r\n \"LastTankNo\": null,\r\n \"Octane\": 0,\r\n \"OrdQty\": 0,\r\n \"RplCarrierKey\": null,\r\n \"RplCostAssigned\": 0,\r\n \"RplTrmnlKey\": null,\r\n \"RplVendKey\": null,\r\n \"RVP\": 0,\r\n \"TankNo\": \"\",\r\n \"Timestamp\": \"\"\r\n }\r\n ],\r\n ProdId: \"\",\r\n ProdDesc: \"\"\r\n };\r\n\r\n dataSource.insert(totalRows, newDeliveryProduct);\r\n\r\n grid.editRow(grid.tbody.children().last());\r\n\r\n var $newRow = $(grid.tbody.children().last());\r\n $newRow.addClass(\"newRow\");\r\n $scope.setupDeliveryRow($newRow);\r\n\r\n }\r\n };\r\n\r\n $scope.setupDeliveriesGridColumns = function ()\r\n {\r\n\r\n if (!$scope.appInfo.paperwork.deliveries.context.ShowGrossUnits)\r\n {\r\n $scope.kendo.deliveriesGrid.hideColumn(\"DelivGrossQty\");\r\n }\r\n\r\n if (!$scope.appInfo.paperwork.deliveries.context.ShowNetUnits)\r\n {\r\n $scope.kendo.deliveriesGrid.hideColumn(\"DelivNetQty\");\r\n }\r\n\r\n if (!$scope.deliveryIsEditable())\r\n {\r\n $scope.kendo.deliveriesGrid.hideColumn(\"DeleteDeliveryBtn\");\r\n }\r\n\r\n };\r\n\r\n\r\n $scope.deleteDeliveryProductRow = function (dataItem)\r\n {\r\n\r\n var dataRow = $('#deliveriesGrid').data(\"kendoGrid\").dataSource.getByUid(dataItem.uid);\r\n $('#deliveriesGrid').data(\"kendoGrid\").dataSource.remove(dataRow);\r\n\r\n };\r\n\r\n function deliveriesGridColIsEditable(fieldName, model)\r\n {\r\n\r\n if (fieldName === \"ProdKey\")\r\n {\r\n return $scope.deliveryIsEditable();\r\n }\r\n\r\n if (fieldName === \"ProdDesc\")\r\n {\r\n return false;\r\n }\r\n\r\n if (fieldName === \"TankNo\")\r\n {\r\n return $scope.deliveryIsEditable();\r\n }\r\n\r\n if (fieldName === \"DelivGrossQty\")\r\n {\r\n return true;\r\n }\r\n\r\n if (fieldName === \"DelivNetQty\")\r\n {\r\n return true;\r\n }\r\n\r\n return true; // default to editable\r\n }\r\n\r\n $scope.setupGridColumnValidationNotificationUI = function ($col)\r\n {\r\n\r\n var fieldName = $col.attr('data-field');\r\n\r\n $col.qtip({\r\n id: \"qtip-\" + fieldName,\r\n content: {\r\n text: \"\"\r\n },\r\n position: {\r\n adjust: {\r\n x: -10, y: -10\r\n }\r\n },\r\n style: {\r\n classes: \"toolTipStyle\"\r\n }\r\n });\r\n\r\n $col.qtip('disable', true);\r\n\r\n };\r\n\r\n $scope.processGridColumnValidationNotification = function ($row, fieldName, errorMessages, warningMessages)\r\n {\r\n\r\n var idx = 0;\r\n\r\n var hasErrors = (errorMessages.length > 0);\r\n var hasWarnings = (warningMessages.length > 0);\r\n\r\n var $col = $row.find(\"[data-field='\" + fieldName + \"']\");\r\n\r\n //clear classes\r\n $col.removeClass(\"td-error\");\r\n $col.removeClass(\"td-warning\");\r\n\r\n if (hasErrors || hasWarnings)\r\n {\r\n\r\n var messageList = $(\"
    \");\r\n\r\n if (hasErrors)\r\n {\r\n var errorList = $(\"
    \" + localStrings.getLocalizedString(\"Error\") + \" :
    \");\r\n for (idx = 0; idx < errorMessages.length; idx++)\r\n {\r\n errorList.append(\"
  • \" + errorMessages[idx] + \"
  • \");\r\n }\r\n\r\n messageList.append(errorList);\r\n }\r\n\r\n if (hasWarnings)\r\n {\r\n var warningList = $(\"
    \" + localStrings.getLocalizedString(\"Warning\") + \" :
    \");\r\n for (idx = 0; idx < warningMessages.length; idx++)\r\n {\r\n warningList.append(\"
  • \" + warningMessages[idx] + \"
  • \");\r\n }\r\n\r\n messageList.append(warningList);\r\n }\r\n\r\n $col.qtip('option', 'content.text', messageList);\r\n\r\n if (hasErrors)\r\n {\r\n $col.addClass(\"td-error\");\r\n $col.qtip('option', 'style.classes', 'toolTipStyle-error');\r\n } else\r\n {\r\n $col.addClass(\"td-warning\");\r\n $col.qtip('option', 'style.classes', 'toolTipStyle-warning');\r\n }\r\n\r\n $col.qtip('disable', false);\r\n }\r\n else\r\n {\r\n $col.qtip('disable', true);\r\n }\r\n };\r\n\r\n if (!$scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.$watch('appInfo.paperwork.deliveries.fuelDelivery.VendKey', function (newValue, oldValue)\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(newValue) || (newValue < 0) || (newValue === oldValue) || $scope.currentView === 0)\r\n {\r\n return;\r\n }\r\n\r\n var vendKey = newValue;\r\n\r\n if ($scope.appInfo.paperwork.deliveries.context.UsesSiteAuthorizedTerminals)\r\n { // uses selected or exculusive site authorized terminals\r\n\r\n if (newValue === \"\")\r\n {\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.TrmnlKey = \"\";\r\n $scope.appInfo.paperwork.deliveries.context.AuthorizedTerminals = [];\r\n return;\r\n }\r\n\r\n PaperworkDeliveriesService.getSiteFuelAuthorizedOrigins(\r\n $scope.appInfo.paperwork.batch.Key, vendKey\r\n ).then(function (data)\r\n {\r\n angular.copy(data, $scope.appInfo.paperwork.deliveries.context.AuthorizedTerminals);\r\n\r\n //save of bound terminal key before updating datasource\r\n var trmnlKey = $scope.appInfo.paperwork.deliveries.fuelDelivery.TrmnlKey;\r\n\r\n $scope.kendo.terminals.dataSource.data($scope.appInfo.paperwork.deliveries.context.AuthorizedTerminals);\r\n\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.TrmnlKey = trmnlKey;\r\n\r\n });\r\n }\r\n\r\n });\r\n }\r\n\r\n var PageStage = $rootScope.$on('event:PageStage', function (event, args)\r\n {\r\n if (args === 'DREFD' && !$scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.savePaperworkDelivery('', false, false);\r\n } \r\n });\r\n $scope.$on('$destroy', PageStage);\r\n\r\n $scope.next = function (path)\r\n {\r\n if (!$scope.validateDeliveries())\r\n return;\r\n\r\n if ($(\"#appForm\").hasClass(\"ng-dirty\"))\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, false));\r\n }\r\n else\r\n {\r\n $scope.savePaperworkDelivery(path, false, false);\r\n }\r\n } else\r\n {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, false));\r\n }\r\n };\r\n\r\n $scope.previous = function (path)\r\n {\r\n if ($(\"#appForm\").hasClass(\"ng-dirty\"))\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, true));\r\n }\r\n else\r\n {\r\n $scope.savePaperworkDelivery(path, false, false, true);\r\n }\r\n } else\r\n {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, true));\r\n }\r\n };\r\n\r\n $scope.close = function (path)\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.savePaperworkDelivery(\"\", false, false);\r\n } else\r\n {\r\n $scope.goTo(\"/Paperwork/EnterPaperwork/\");\r\n }\r\n };\r\n\r\n $scope.submit = function ()\r\n {\r\n if (!$scope.validateDeliveries())\r\n return;\r\n\r\n if ($scope.currentView === 0 || $(\"#appForm\").hasClass(\"ng-pristine\"))\r\n { // if in record selector just submit\r\n $scope.submitPaperwork(true);\r\n } else\r\n { // if in form save and then submit\r\n\r\n $scope.savePaperworkDelivery(\"\", true, false);\r\n }\r\n };\r\n\r\n $scope.submitPaperwork = function (submit)\r\n {\r\n var fuelMetersAppInfo = $scope.appInfo.paperwork.apps[0];\r\n\r\n //If we have fuelMeters and fuelMeters are required, but not saved; then throw error\r\n if (fuelMetersAppInfo.HasData === 0 && fuelMetersAppInfo.IsRequired !== 0) {\r\n $timeout(function () {\r\n $scope.modalifier.showSavedError();\r\n }, 100);\r\n return;\r\n }\r\n\r\n var submitPaperworkCmdParms =\r\n {\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n EmailAddress: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n SubmitPaperwork: submit,\r\n PreviouslySubmitted: $scope.appInfo.paperwork.batch.HasBeenSubmitted\r\n };\r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms).then(function (data)\r\n {\r\n if (submit)\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n });\r\n };\r\n\r\n $scope.savePaperworkDelivery = function (path, submit, close, isPrevious)\r\n {\r\n var deliveriesGrid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n\r\n // if there is a invalid new row remove it before validating\r\n var $lastRow = $(deliveriesGrid.tbody.children().last());\r\n var isNewRow = $lastRow.hasClass('newRow');\r\n isPrevious = isPrevious ? isPrevious : false;\r\n if (isNewRow)\r\n {\r\n var rowIsDirty = $lastRow.find('.k-dirty'); // find any columns that are dirty\r\n\r\n if (rowIsDirty.length === 0)\r\n {\r\n deliveriesGrid.cancelRow();\r\n }\r\n }\r\n\r\n if (!validatorSvc.executeValidations() || !$scope.validateDeliveries())\r\n {\r\n return;\r\n }\r\n\r\n if ($scope.appInfo.paperwork.deliveries.appForm)\r\n {\r\n $scope.resetDirtyFlags($scope.appInfo.paperwork.deliveries.appForm);\r\n }\r\n\r\n // if current view is record selector then don't save fuel delivery. just navigate to selected path\r\n if ($scope.currentView === 0)\r\n {\r\n if (path.length > 0)\r\n {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, false, isPrevious));\r\n return;\r\n }\r\n }\r\n\r\n angular.copy($scope.deliveriesGridDS.data().toJSON(), $scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryProducts);\r\n\r\n // if new delivery then set entry user id\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Key <= 0)\r\n {\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.EntryUserID = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress;\r\n }\r\n var paperworkDeliveryHeader =\r\n {\r\n PaperworkBatchKey: $scope.appInfo.paperwork.batch.Key,\r\n AppKey: $scope.locationInfo.sideMenuData.paperwork.deliveries.Key\r\n };\r\n\r\n PaperworkDeliveriesService.savePaperworkDelivery(paperworkDeliveryHeader, $scope.appInfo.paperwork.deliveries.fuelDelivery)\r\n .then(function (data)\r\n {\r\n data.FuelDelivery.LiftDatetime = globalizationSvc.formatDateTime(data.FuelDelivery.LiftDatetime, 'g');\r\n data.FuelDelivery.DelivDateTime = globalizationSvc.formatDateTime(data.FuelDelivery.DelivDateTime, 'g');\r\n\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = data.FuelDelivery;\r\n\r\n $scope.appInfo.paperwork.deliveries.deliveriesList = data.FuelDeliveriesList;\r\n\r\n // initalize product filtered tanks list\r\n angular.forEach($scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryProducts, function (deliveryProduct)\r\n {\r\n deliveryProduct.FilteredTanksList = $scope.getFilteredTanksList(deliveryProduct.ProdKey);\r\n deliveryProduct.SelectedTank = deliveryProduct.FilteredTanksList.find({TankNo: deliveryProduct.FuelDeliveryTanks[0].TankNo});\r\n });\r\n\r\n var grid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n grid.dataSource.data(data.FuelDelivery.FuelDeliveryProducts);\r\n\r\n $scope.validateDeliveries();\r\n\r\n if (submit)\r\n {\r\n $scope.submitPaperwork(true);\r\n return;\r\n }\r\n if (close)\r\n {\r\n $scope.submitPaperwork(false);\r\n return;\r\n }\r\n if (path.length > 0)\r\n {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, false, isPrevious));\r\n }\r\n });\r\n };\r\n\r\n $scope.displayDeleteConfirmationModal = function ()\r\n {\r\n\r\n $scope.deleteConfirmationModalDeferred = $q.defer();\r\n\r\n $scope.showDeleteConfirmationModal = true;\r\n\r\n return $scope.deleteConfirmationModalDeferred.promise;\r\n\r\n };\r\n\r\n $scope.deleteDeliveryHandler = function (deliveryListItem)\r\n {\r\n $scope.displayDeleteConfirmationModal().then(function ()\r\n { // ok handler\r\n $scope.deletePaperworkDelivery(deliveryListItem);\r\n $scope.deleteConfirmationModalDeferred = undefined;\r\n $scope.showDeleteConfirmationModal = false;\r\n }, function ()\r\n { // cancel handler\r\n $scope.deleteConfirmationModalDeferred = undefined;\r\n $scope.showDeleteConfirmationModal = false;\r\n });\r\n };\r\n\r\n $scope.deletePaperworkDelivery = function (deliveryListItem)\r\n {\r\n PaperworkDeliveriesService.deletePaperworkDelivery(deliveryListItem, $scope.appInfo.paperwork.batch.Key)\r\n .then(function (data)\r\n {\r\n //update record selector list\r\n $scope.appInfo.paperwork.deliveries.deliveriesList = data.FuelDeliveriesList;\r\n }\r\n );\r\n };\r\n\r\n $scope.displayCommentsModalForm = function ()\r\n {\r\n $scope.showCommentsEntryModalForm = true;\r\n };\r\n\r\n $scope.perLoadFreightModalFormDeferred = undefined;\r\n\r\n $scope.displayPerLoadFreightModalForm = function ()\r\n {\r\n\r\n $scope.perLoadFreightModalFormDeferred = $q.defer();\r\n\r\n $scope.freightModalFormDelegate.fuelDeliveryFreight = angular.copy($scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryFreight);\r\n\r\n $scope.showPerLoadFreightEntryModalForm = true;\r\n\r\n return $scope.perLoadFreightModalFormDeferred.promise;\r\n\r\n };\r\n\r\n $scope.editPerLoadFreight = function ()\r\n {\r\n $scope.displayPerLoadFreightModalForm().then(function ()\r\n { // ok handler\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryFreight = angular.copy($scope.freightModalFormDelegate.fuelDeliveryFreight);\r\n $scope.freightModalFormDelegate.fuelDeliveryFreight = {};\r\n $scope.perLoadFreightModalFormDeferred = undefined;\r\n $scope.showPerLoadFreightEntryModalForm = false;\r\n }, function ()\r\n { // cancel handler\r\n $scope.perLoadFreightModalFormDeferred = undefined;\r\n $scope.showPerLoadFreightEntryModalForm = false;\r\n });\r\n };\r\n\r\n $scope.hideModals = function ()\r\n {\r\n $scope.showDeleteConfirmationModal = false;\r\n $scope.showCommentsEntryModalForm = false;\r\n $scope.showPerLoadFreightEntryModalForm = false;\r\n validatorSvc.clearAllValidations();\r\n };\r\n\r\n $scope.getFilteredTanksList = function (productKey)\r\n {\r\n var tanks = $scope.appInfo.paperwork.deliveries.context.SiteTanks;\r\n var siteTankProductLookup = $scope.appInfo.paperwork.deliveries.context.SiteTankProductLookup;\r\n\r\n var data = [];\r\n\r\n angular.forEach(siteTankProductLookup.findAll({ProductKey: productKey}), function (authorizedTank)\r\n {\r\n\r\n var tank = tanks.find({ProductKey: authorizedTank.TankProductKey});\r\n\r\n if (angular.isDefined(tank))\r\n {\r\n data.push(tank);\r\n }\r\n });\r\n\r\n return data;\r\n };\r\n\r\n $scope.deliveryIsEditable = function (delivery)\r\n {\r\n if (delivery === undefined)\r\n {\r\n delivery = $scope.appInfo.paperwork.deliveries.fuelDelivery;\r\n }\r\n\r\n if ($(\"#deliveriesGrid\").attr(\"k-editable\") === \"false\")\r\n {\r\n return false;\r\n } else if (delivery.Status > 2) { // scheduled (0) or verified (1) or entered (2) = true else false\r\n return false;\r\n } else if ($scope.appInfo.paperwork.context.lockPaperworkAfterDru && delivery.DRUPosted) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n var deliveryGridRowValidation =\r\n {\r\n validator: function (deliveryProduct, parms)\r\n {\r\n var isValid = true;\r\n\r\n var $row = $(\"#deliveriesGrid\").data(\"kendoGrid\").tbody.find(\"tr[data-uid='\" + deliveryProduct.uid + \"']\");\r\n\r\n //gross quantity validation\r\n if ($scope.appInfo.paperwork.deliveries.context.ShowGrossUnits)\r\n {\r\n\r\n var errorGrossQty = [], warningGrossQty = [];\r\n\r\n if (deliveryProduct.DelivGrossQty === 0)\r\n {\r\n isValid = false;\r\n\r\n errorGrossQty.push(localStrings.getLocalizedString(\"GTZeroError\"));\r\n }\r\n\r\n if ((deliveryProduct.DelivGrossQty > 0) && (deliveryProduct.DelivGrossQty > deliveryProduct.SelectedTank.Capacity ))\r\n {\r\n\r\n warningGrossQty.push(localStrings.getLocalizedString(\"QuantityExceedsTank\"));\r\n\r\n }\r\n\r\n $scope.processGridColumnValidationNotification($row, 'DelivGrossQty', errorGrossQty, warningGrossQty);\r\n }\r\n\r\n //net quantity validation\r\n if ($scope.appInfo.paperwork.deliveries.context.ShowNetUnits)\r\n {\r\n\r\n var errorNetQty = [], warningNetQty = [];\r\n\r\n if (deliveryProduct.DelivNetQty === 0)\r\n {\r\n isValid = false;\r\n\r\n errorNetQty.push(localStrings.getLocalizedString(\"GTZeroError\"));\r\n }\r\n\r\n if ((deliveryProduct.DelivNetQty > 0) && (deliveryProduct.DelivNetQty > deliveryProduct.SelectedTank.Capacity ))\r\n {\r\n warningNetQty.push(localStrings.getLocalizedString(\"QuantityExceedsTank\"));\r\n }\r\n\r\n $scope.processGridColumnValidationNotification($row, 'DelivNetQty', errorNetQty, warningNetQty);\r\n }\r\n\r\n return isValid;\r\n }\r\n };\r\n\r\n $scope.showErrorTooltip = function (el) {\r\n //$scope.setupGridColumnValidationNotificationUI(el);\r\n\r\n var fieldName = el.attr('data-field');\r\n\r\n el.qtip({\r\n id: \"qtip-\" + fieldName,\r\n content: {\r\n text: \"\"\r\n },\r\n position: {\r\n adjust: {\r\n x: 15, y: -30\r\n }\r\n },\r\n style: {\r\n classes: \"toolTipStyle\"\r\n }\r\n });\r\n\r\n el.qtip('disable', true);\r\n\r\n el.qtip('option', 'content.text', localStrings.getLocalizedString('DelivDetailsRequired'));\r\n el.qtip('option', 'style.classes', 'toolTipStyle-error');\r\n el.qtip('disable', false);\r\n };\r\n\r\n $scope.validateDeliveries = function ()\r\n {\r\n // checks if control is not null, undefined and so on ...\r\n if (!$(\"#deliveriesGrid\").data(\"kendoGrid\"))\r\n return true;\r\n\r\n var deliveriesGridRowsCount = $(\"#deliveriesGrid\").data(\"kendoGrid\").dataSource.data().length;\r\n\r\n if (deliveriesGridRowsCount === 0 && !$(\"#appForm\").hasClass(\"ng-dirty\")) {\r\n return true;\r\n }\r\n \r\n if (!validatorSvc.executeValidations()) {\r\n return deliveriesGridRowsCount === 0;\r\n }\r\n\r\n var $gridActionFooter = $(\"#petronetGridActionFooterRow\");\r\n var $gridActionFooterRowMiddle = $(\"#petronetGridActionFooterRowMiddle\");\r\n\r\n $gridActionFooter.removeClass(\"td-error\");\r\n $gridActionFooterRowMiddle.removeClass(\"td-error\");\r\n\r\n var isValid = true;\r\n\r\n if (deliveriesGridRowsCount === 0) {\r\n\r\n $gridActionFooter.addClass(\"td-error\");\r\n $gridActionFooterRowMiddle.addClass(\"td-error\");\r\n\r\n $scope.showErrorTooltip($gridActionFooter);\r\n $scope.showErrorTooltip($gridActionFooterRowMiddle);\r\n\r\n return false;\r\n }\r\n\r\n var deliveriesGrid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n\r\n angular.forEach(deliveriesGrid.dataSource.data(), function (delivery)\r\n {\r\n isValid = isValid && deliveryGridRowValidation.validator(delivery);\r\n });\r\n\r\n return isValid;\r\n };\r\n\r\n $scope.getStatusDescription = function ()\r\n {\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Status === 0)\r\n {\r\n return 'Scheduled';\r\n } else if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Status === 1)\r\n {\r\n return 'Verified';\r\n }\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Status === 2)\r\n {\r\n return 'Entered';\r\n }\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Status === 3)\r\n {\r\n return 'Posted';\r\n }\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Status === 4)\r\n {\r\n return 'Confirmed';\r\n }\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Status === 5)\r\n {\r\n return 'Reconciled';\r\n }\r\n };\r\n\r\n var liftDateValidation =\r\n {\r\n name: 'validateLiftDate',\r\n validationMessage: '',\r\n validationMessageWrn: '',\r\n validatorError: function (liftDateTime, parms)\r\n {\r\n var isValid = true;\r\n\r\n return isValid;\r\n },\r\n validatorWarning: function (liftDateTime, parms)\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(liftDateTime))\r\n {\r\n return true;\r\n }\r\n\r\n var hasWarning = false;\r\n var warningMsg = '';\r\n\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.DelivDateTime > liftDateTime)\r\n {\r\n warningMsg = localStrings.getLocalizedString(\"DeliveryDateNot\");\r\n hasWarning = true;\r\n }\r\n\r\n var maxDateTime = $scope.addDaysToDate($scope.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate), 1);\r\n var minDateTime = $scope.addDaysToDate($scope.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate), -1);\r\n\r\n if ((liftDateTime > $scope.formatDateTime(maxDateTime)) || (liftDateTime < $scope.formatDateTime(minDateTime)))\r\n {\r\n if (warningMsg !== '')\r\n {\r\n warningMsg = warningMsg + '\\r\\n';\r\n }\r\n warningMsg = warningMsg + localStrings.getLocalizedString(\"LiftDateNotWithin\");\r\n hasWarning = true;\r\n }\r\n\r\n this.validationMessageWrn = warningMsg;\r\n\r\n return !hasWarning;\r\n }\r\n };\r\n\r\n $scope.validateLiftDate = new pdi.ng.validate.PdiValidation(liftDateValidation);\r\n\r\n var deliveryDateValidation =\r\n {\r\n name: 'validateDeliveryDate',\r\n validationMessage: '',\r\n validationMessageWrn: '',\r\n validatorError: function (deliveryDateTime, parms)\r\n {\r\n var isValid = true;\r\n\r\n return isValid;\r\n },\r\n validatorWarning: function (deliveryDateTime, parms)\r\n {\r\n var hasWarning = false;\r\n\r\n var maxDateTime = $scope.addDaysToDate($scope.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate), 1);\r\n var minDateTime = $scope.addDaysToDate($scope.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate), -1);\r\n\r\n if ((deliveryDateTime > $scope.formatDateTime(maxDateTime)) || (deliveryDateTime < $scope.formatDateTime(minDateTime)))\r\n {\r\n this.validationMessageWrn = localStrings.getLocalizedString(\"DeliveryDateNotWithin\");\r\n hasWarning = true;\r\n }\r\n\r\n return !hasWarning;\r\n }\r\n };\r\n\r\n $scope.validateDeliveryDate = new pdi.ng.validate.PdiValidation(deliveryDateValidation);\r\n\r\n\r\n $scope.viewDelivery = function (deliveryKey)\r\n {\r\n PaperworkDeliveriesService.getDelivery(\r\n deliveryKey,\r\n $scope.appInfo.paperwork.batch.Key\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = {};\r\n\r\n data.LiftDatetime = globalizationSvc.formatDateTime(data.LiftDatetime, 'g');\r\n data.DelivDateTime = globalizationSvc.formatDateTime(data.DelivDateTime, 'g');\r\n\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = data;\r\n\r\n $scope.freightModalFormDelegate.fuelDeliveryFreight = $scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryFreight;\r\n\r\n // initalize product filtered tanks list\r\n angular.forEach($scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryProducts, function (deliveryProduct)\r\n {\r\n deliveryProduct.FilteredTanksList = $scope.getFilteredTanksList(deliveryProduct.ProdKey);\r\n deliveryProduct.SelectedTank = deliveryProduct.FilteredTanksList.find({TankNo: deliveryProduct.FuelDeliveryTanks[0].TankNo});\r\n });\r\n\r\n $scope.initializeDeliveriesGrid();\r\n\r\n $scope.changeView(1);\r\n\r\n });\r\n };\r\n\r\n $scope.editPerLoadFreightOkHandler = function ()\r\n {\r\n\r\n if (!validatorSvc.executeValidationsForScope($scope.freightModalFormDelegate))\r\n {\r\n return;\r\n }\r\n\r\n // workaround for the above code does not set the validatity of the model correctly. maybe a timing issue\r\n $timeout(function ()\r\n {\r\n\r\n var hasError = $(\"#deliveryFreightTable\").find(\".td-error\");\r\n\r\n if (hasError.length > 0)\r\n {\r\n return;\r\n }\r\n\r\n $scope.perLoadFreightModalFormDeferred.resolve();\r\n }, 100);\r\n };\r\n\r\n $scope.editPerLoadFreightCancelHandler = function ()\r\n {\r\n $scope.perLoadFreightModalFormDeferred.reject();\r\n };\r\n\r\n })\r\n .controller('enterPaperworkDeliveriesFreightModalCtrl', function ($scope, $rootScope, $routeParams, PaperworkService, $filter,\r\n PaperworkDeliveriesService, $location, WebFunctions, validatorSvc, $timeout, localizationSvc, globalizationSvc)\r\n {\r\n 'use strict';\r\n\r\n $scope.modalInfo = {};\r\n $scope.kInputOptions = {\r\n culture: globalizationSvc.getLocale(),\r\n format: \"n\",\r\n decimals: 2,\r\n spinners: false\r\n };\r\n\r\n var parentController = angular.element('#deliveriesForm').scope();\r\n\r\n parentController.freightModalFormDelegate = $scope;\r\n\r\n $scope.fuelDeliveryFreight = {};\r\n\r\n $scope.addDeliveryFreightRow = function ()\r\n {\r\n var newFreightRow = {\r\n \"CalcAmt\": 0,\r\n \"DelProdKey\": null,\r\n \"FrtVndInvKey\": null,\r\n \"FrtVndInvPndKey\": null,\r\n \"FrtRuleKey\": null,\r\n \"FuelDelKey\": $scope.appInfo.paperwork.deliveries.fuelDelivery.Key,\r\n \"InvcAmt\": 0,\r\n \"Key\": 0,\r\n \"Override\": -1,\r\n \"ReconUserID\": null,\r\n \"Reconciled\": 0,\r\n \"Type\": 6,\r\n \"Timestamp\": \"\"\r\n };\r\n\r\n $scope.fuelDeliveryFreight.push(newFreightRow);\r\n };\r\n\r\n\r\n var freightRowValidation =\r\n {\r\n name: 'validateFreightRow',\r\n validationMessage: '',\r\n validatorError: function (freight, parms)\r\n {\r\n var isValid = true;\r\n\r\n //reset Errors\r\n freight.freightRuleValidation = {hasErrors: false, errorDescription: \"\"};\r\n\r\n if (angular.isUndefinedOrNullOrEmpty(freight.FrtRuleKey))\r\n {\r\n isValid = false;\r\n freight.freightRuleValidation = { hasErrors: true, errorDescription: localStrings.getLocalizedString(\"Required\") };\r\n }\r\n\r\n if (isValid)\r\n { //cleanup view model\r\n freight.freightRuleValidation = {};\r\n }\r\n\r\n return isValid;\r\n }\r\n };\r\n\r\n $scope.validateFreightRow = new pdi.ng.validate.PdiValidation(freightRowValidation);\r\n\r\n })\r\n .controller('enterPaperworkDealerFormsCtrl', function ($scope, $rootScope, $routeParams, PaperworkService, $filter, PaperworkDealerFormsService, $location, WebFunctions, $timeout, templates, globalizationSvc, setupNav)\r\n {\r\n 'use strict';\r\n $scope.dealerFormsLoaded = false;\r\n\r\n // controller destructor\r\n $scope.$on(\"$destroy\", function handler()\r\n {\r\n $rootScope.scopesToValidate = [];\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n $scope.appInfo.paperwork.viewOnly = $location.$$path.indexOf('/ViewPaperworkDealerForms/') > -1;\r\n\r\n $scope.formsEditable = true;\r\n\r\n if ($routeParams.paperworkKey)\r\n {\r\n $scope.appInfo.paperwork.paperworkKey = $routeParams.paperworkKey;\r\n }\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = '1';\r\n $scope.appInfo.paperwork.batch = {};\r\n\r\n // TODO To add the ability to add this to every possible field, we would run a foreach for each field in loadDealerForms and then attach this with their precision\r\n $scope.appInfo.paperwork.kOptions = {\r\n culture: globalizationSvc.getLocale(),\r\n format: \"n\",\r\n decimals: 2,\r\n spinners: false,\r\n min: -999999999\r\n };\r\n\r\n if (!$scope.appInfo.paperwork.context)\r\n {\r\n PaperworkService.getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, true).then(\r\n function (data)\r\n {\r\n $scope.appInfo.paperwork.context = {};\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.selectedSite = data.SelectedSiteKey;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n }\r\n );\r\n }\r\n\r\n if ($scope.appInfo.paperwork.paperworkKey > 0)\r\n {\r\n //We are loading a known existing paperwork batch\r\n PaperworkService.OpenPaperworkBatchByKey(\r\n $scope.appInfo.paperwork.paperworkKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n $scope.appInfo.paperwork.viewOnly\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.batch = data.PaperworkBatch.PaperworkBatch;\r\n $scope.appInfo.paperwork.apps = data.PaperworkBatch.PaperworkApps;\r\n $scope.appInfo.paperwork.form = data.PaperworkBatch.PaperworkForm;\r\n $scope.appInfo.paperwork.siteInfo = data.PaperworkBatch.PaperworkSiteInfo;\r\n \r\n // resolve if this is the first or last page\r\n var res = setupNav.firstLastPage('DRDFE',$scope.appInfo.paperwork.apps);\r\n $scope.locationInfo.sideMenuData.isFirstPage = res.isFirstPage;\r\n $scope.locationInfo.sideMenuData.isLastPage = res.isLastPage;\r\n \r\n $rootScope.$broadcast('event:PaperworkLoaded', $scope.appInfo.paperwork.viewOnly, $scope.appInfo.paperwork.paperworkKey);\r\n\r\n var nextApp = true;\r\n angular.forEach($scope.appInfo.paperwork.apps, function (app, index)\r\n {\r\n if (app.MenuCode === 'DRDFE')\r\n {\r\n $scope.loadDealerForms();\r\n nextApp = false;\r\n }\r\n });\r\n if (nextApp)\r\n {\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n }\r\n }, function ()\r\n {\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n });\r\n } else\r\n {\r\n //todo: goback...\r\n }\r\n $scope.locationInfo.sideMenuData.pwSubMenu = '3';\r\n };\r\n\r\n var newPWBatchLoadedListener = $rootScope.$on('event:NewPaperworkBatchLoaded', function (event, data)\r\n {\r\n $scope.loadDealerForms();\r\n });\r\n\r\n $scope.$on('$destroy', newPWBatchLoadedListener);\r\n\r\n $scope.loadDealerForms = function ()\r\n {\r\n angular.forEach($scope.appInfo.paperwork.context.paperworkSites, function (site, index)\r\n {\r\n if (site.SiteKey === $scope.appInfo.paperwork.batch.SiteKey)\r\n $scope.appInfo.paperwork.context.selectedSiteObj = site;\r\n });\r\n\r\n PaperworkDealerFormsService.loadDealerForms($scope.appInfo.paperwork.batch.Key).then(function (data)\r\n {\r\n // if(data.count == 0){\r\n // TODO: No forms, do something...\r\n // }\r\n $scope.appInfo.paperwork.dealerForms = data.DealerForms;\r\n $scope.setupDisplayValues();\r\n\r\n $scope.dealerFormsLoaded = true;\r\n\r\n $scope.formsEditable = !($scope.appInfo.paperwork.context.lockPaperworkAfterDru && $scope.appInfo.paperwork.dealerForms.Header.Updated);\r\n\r\n $timeout(function(){\r\n if (!$scope.formsEditable) {\r\n $('#sectionDealerForms input').attr(\"disabled\", true);\r\n }\r\n });\r\n\r\n $scope.updateDealerForms();\r\n $scope.setFocus();\r\n });\r\n };\r\n\r\n $scope.setupDisplayValues = function () {\r\n $scope.appInfo.paperwork.dealerForms.AllFieldsDisplay = {};\r\n\r\n angular.forEach($scope.appInfo.paperwork.dealerForms.AllFields, function (field, index) {\r\n var newObject = {};\r\n\r\n angular.forEach(Object.keys(field), function (property, index) {\r\n if (property === \"DataIDValue\")\r\n newObject[property] = globalizationSvc.formatNumeric(field[property], \"n2\");\r\n });\r\n\r\n $scope.appInfo.paperwork.dealerForms.AllFieldsDisplay[field.Key] = newObject;\r\n });\r\n };\r\n\r\n var PageStage = $rootScope.$on('event:PageStage', function (event, args)\r\n {\r\n if (args === 'DRDFE' && !$scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.saveDealerForms('', false, true);\r\n } \r\n });\r\n $scope.$on('$destroy', PageStage);\r\n\r\n $scope.next = function (path)\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly)\r\n $scope.saveDealerForms(path, false, true);\r\n else\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, false));\r\n };\r\n\r\n $scope.previous = function (path)\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly)\r\n $scope.saveDealerForms(path, false, false, true);\r\n else\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, true));\r\n };\r\n\r\n $scope.close = function ()\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.saveDealerForms('', false, false);\r\n } else\r\n {\r\n $scope.goTo(\"/Paperwork/EnterPaperwork/\");\r\n }\r\n };\r\n\r\n $scope.submit = function ()\r\n {\r\n $scope.saveDealerForms('', true, false);\r\n };\r\n\r\n $scope.submitPaperwork = function (submit)\r\n {\r\n var fuelMetersAppInfo = $scope.appInfo.paperwork.apps[0];\r\n\r\n //If we have fuelMeters and fuelMeters are required, but not saved; then throw error\r\n if (fuelMetersAppInfo.HasData === 0 && fuelMetersAppInfo.IsRequired !== 0) {\r\n $timeout(function () {\r\n $scope.modalifier.showSavedError();\r\n }, 100);\r\n return;\r\n }\r\n\r\n var submitPaperworkCmdParms =\r\n {\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n EmailAddress: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n SubmitPaperwork: submit,\r\n PreviouslySubmitted: $scope.appInfo.paperwork.batch.HasBeenSubmitted\r\n };\r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms).then(function (data)\r\n {\r\n if (submit)\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n });\r\n };\r\n\r\n $scope.saveDealerForms = function (path, submit, close, isPrevious)\r\n {\r\n isPrevious = isPrevious ? isPrevious : false;\r\n\r\n if ($scope.appInfo.paperwork.dealerForms) {\r\n $scope.appInfo.paperwork.dealerForms.Header.UserName = $scope.appInfo.paperwork.form.UserName;\r\n $scope.appInfo.paperwork.form.Caption = $scope.appInfo.paperwork.dealerForms.DealerFormVersion.Caption;\r\n PaperworkDealerFormsService.saveDealerForms($scope.appInfo.paperwork.dealerForms.Header,\r\n $scope.appInfo.paperwork.dealerForms.AllFields).then(function (data) {\r\n $scope.appInfo.paperwork.dealerForms = data.DealerForms;\r\n $scope.setupDisplayValues();\r\n\r\n if (submit) {\r\n $scope.submitPaperwork(true);\r\n return;\r\n } else if (close) {\r\n $scope.submitPaperwork(false);\r\n return;\r\n }\r\n });\r\n }\r\n if (path.length > 0) {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, false, isPrevious));\r\n }\r\n };\r\n\r\n $scope.setFocus = function ()\r\n {\r\n var focusSet = false;\r\n for (var x = 0; x < $scope.appInfo.paperwork.dealerForms.Rows[0].length; x++)\r\n {\r\n for (var y = 0; y < $scope.appInfo.paperwork.dealerForms.Rows.length; y++)\r\n {\r\n var key = $scope.appInfo.paperwork.dealerForms.Rows[y][x];\r\n if (key > 0)\r\n {\r\n if (!$scope.appInfo.paperwork.dealerForms.AllFields[key].DisplayOnly && !$scope.appInfo.paperwork.dealerForms.AllFields[key].IsCalculated && !focusSet)\r\n {\r\n $scope.appInfo.paperwork.dealerForms.AllFields[key].setFocus = true;\r\n focusSet = true;\r\n }\r\n else\r\n $scope.appInfo.paperwork.dealerForms.AllFields[key].setFocus = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n $scope.onDealerFormChange = function (index, value) {\r\n $scope.appInfo.paperwork.dealerForms.AllFields[index].DataIDValue = parseFloat(globalizationSvc.convertStringToNumber($scope.appInfo.paperwork.dealerForms.AllFieldsDisplay[index].DataIDValue));\r\n };\r\n\r\n $scope.updateDealerForms = function ()\r\n {\r\n angular.forEach($scope.appInfo.paperwork.dealerForms.CalcFields, function (calcField, index)\r\n {//look through all the calc field references\r\n \r\n $scope.appInfo.paperwork.dealerForms.AllFields[calcField.Key].DataIDValue = 0;//We actually store all values in AllFields collection\r\n angular.forEach($scope.appInfo.paperwork.dealerForms.Calcuations, function (calc, index)\r\n {\r\n if (calc.ResultTypeKey === calcField.TypeKey)\r\n {//If the result of the calculation is stored on this calc field then...\r\n angular.forEach($scope.appInfo.paperwork.dealerForms.AllFields, function (field, index)\r\n {\r\n $scope.appInfo.paperwork.dealerForms.AllFieldsDisplay[index].DataIDValue = globalizationSvc.formatNumeric($scope.appInfo.paperwork.dealerForms.AllFields[index].DataIDValue, \"n2\");\r\n\r\n if (calc.CalcTypeKey === field.TypeKey)\r\n {//If this field is the calc type from this calculation then\r\n if (calc.Operation === 0)\r\n {//Add\r\n $scope.appInfo.paperwork.dealerForms.AllFields[calcField.Key].DataIDValue =\r\n $scope.appInfo.paperwork.dealerForms.AllFields[calcField.Key].DataIDValue +\r\n field.DataIDValue;//Store the data back in the AllFields collection.\r\n } else\r\n {//Subtract\r\n $scope.appInfo.paperwork.dealerForms.AllFields[calcField.Key].DataIDValue =\r\n $scope.appInfo.paperwork.dealerForms.AllFields[calcField.Key].DataIDValue -\r\n field.DataIDValue;//Store the data back in the AllFields collection.\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n };\r\n })\r\n .controller('inventorySummaryCtrl', function ($scope, $rootScope, WebFunctions, $timeout, templates)\r\n {\r\n 'use strict';\r\n\r\n // controller destructor\r\n $scope.$on(\"$destroy\", function handler()\r\n {\r\n $rootScope.scopesToValidate = [];\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = '3';\r\n\r\n $timeout(function ()\r\n {\r\n var inventorySideMenuController = angular.element('#inventorySummarySideMenu').scope();\r\n\r\n inventorySideMenuController.setSiteAndDate();\r\n });\r\n\r\n\r\n };\r\n })\r\n .controller(\"paperworkReportsSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function () {\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 31;\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n };\r\n })\r\n .controller(\"paperworkReportSideMenuCtrl\", function ($scope, PaperworkService, PaperworkReportsService, validatorSvc, reportingService, globalizationSvc) {\r\n 'use strict';\r\n $scope.initialize = function () {\r\n\r\n if (!$scope.locationInfo.sideMenuData.subMenu) {\r\n $scope.goTo(\"/Paperwork/Reports\");\r\n return;\r\n }\r\n\r\n //There is a race condition when reloading the page\r\n //Check if the date selector is undefined, if it is then initialize it\r\n if (angular.isUndefinedOrNullOrEmpty($scope.dateSelector)) {\r\n $scope.initializeDateSelector();\r\n }\r\n\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.displaySelector = true;\r\n $scope.dateSelector.selection = 0;\r\n $scope.dateSelector.hideAllDays = true;\r\n\r\n var report = $scope.getReportFromSubMenu($scope.locationInfo.sideMenuData.subMenu);\r\n\r\n if (!report) {\r\n $scope.goTo(\"/Paperwork/Reports\");\r\n return;\r\n }\r\n\r\n PaperworkReportsService\r\n .getPaperworkReportSites(report.Name, $scope.appInfo.webUser.CurrentAuthorization.CustContKey, false)\r\n .then(function (data) {\r\n if (data.Successful && !angular.isUndefinedOrNullOrEmpty(data.PaperworkReportSites)) {\r\n $scope.appInfo.paperwork.reports.PaperworkReportSites = data.PaperworkReportSites;\r\n $scope.appInfo.paperwork.reports.site = data.PaperworkReportSites[0];\r\n }\r\n else {\r\n $scope.modalifier.showSetupError();\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.getReportFromSubMenu = function (subMenu) {\r\n if ($scope.appInfo.paperwork.reports.paperworkReports) {\r\n return $scope.appInfo.paperwork.reports.paperworkReports\r\n .filter(function (item) {\r\n return item.Name === subMenu;\r\n })[0];\r\n }\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args) {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format) {\r\n if (!validatorSvc.executeValidations()) {\r\n return;\r\n }\r\n\r\n var report = $scope.getReportFromSubMenu($scope.locationInfo.sideMenuData.subMenu);\r\n\r\n if (!report) {\r\n $scope.goTo(\"/Paperwork/Reports\");\r\n return;\r\n }\r\n\r\n PaperworkService\r\n .ValidatePaperworkSiteDateForContact(\r\n $scope.appInfo.paperwork.reports.site.Key,\r\n $scope.urlFormatDate($scope.dateSelector.startDate, true),\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n false)\r\n .then(function (data) {\r\n var qs = \"reportName=\" + report.Name +\r\n \"&reportSubjectArea=\" + report.SubjectArea +\r\n \"&isStoreReport=\" + \"1\" +\r\n \"&RP-Site=\" + $scope.appInfo.paperwork.reports.site.Id +\r\n \"&RP-BegDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-EndDate=\" + $scope.dateSelector.endDate +\r\n \"&RP-Language=\" + globalizationSvc.getLocale().slice(0, 2) +\r\n \"&RP-UseLatest=\" + \"0\";\r\n\r\n if (format) {\r\n reportingService.exportReport(qs, format);\r\n }\r\n else {\r\n reportingService.renderReport(qs);\r\n }\r\n });\r\n };\r\n })\r\n .controller('paperworkReportCtrl', function ($scope, $rootScope, WebFunctions, templates) {\r\n 'use strict';\r\n\r\n // controller destructor\r\n $scope.$on(\"$destroy\", function handler() {\r\n $rootScope.scopesToValidate = [];\r\n });\r\n\r\n $scope.initialize = function () {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry)) {\r\n $scope.goTo(\"/Home\");\r\n return;\r\n }\r\n\r\n if (!$scope.locationInfo.sideMenuData.subMenu) {\r\n $scope.goTo(\"/Paperwork/Reports\");\r\n return;\r\n }\r\n\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 31;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportsSideMenu\");\r\n };\r\n })\r\n .controller(\"paperworkSideMenuCtrl\", function ($scope, PaperworkService, $rootScope, $interval)\r\n {\r\n 'use strict';\r\n\r\n /*\r\n Use $interval to periodically refresh the paperwork lock.\r\n When the user navigates away from the page the $destroy listener is triggered to kill off the $interval.\r\n Likewise, the $interval is stopped when the paperwork is submitted in services.paperwork.\r\n This is paired with a query in CustomerRepository in EntWeb that wipes out Petronet Locks if they are > 20 minutes old.\r\n */\r\n\r\n var intervalPromise;\r\n var paperworkBatchKey = 0;\r\n var intervalTime = 120000;//Every 2 mins\r\n\r\n function refreshLock() {\r\n if (paperworkBatchKey > 0) {\r\n console.log(\"Lock refreshed for Batch#\" + paperworkBatchKey);\r\n PaperworkService.RefreshPaperworkLock(paperworkBatchKey);\r\n }\r\n }\r\n\r\n $scope.startLockInterval = function (data) {\r\n $scope.stopLockInterval();\r\n intervalPromise = $interval(refreshLock, intervalTime);\r\n };\r\n\r\n $scope.stopLockInterval = function () {\r\n $interval.cancel(intervalPromise);\r\n };\r\n\r\n //When we load a paperwork batch, detect if we need to periodically refresh the lock\r\n var pwLockListener = $rootScope.$on('event:PaperworkLoaded', function (event, viewOnly, data) {\r\n if (!viewOnly && !angular.isUndefinedOrNullOrEmpty(data)) {\r\n paperworkBatchKey = data;\r\n $scope.startLockInterval();\r\n }\r\n });\r\n\r\n //When paperwork is submitted stop the lock refresh\r\n var pwSubmitListener = $rootScope.$on('event:PaperworkSubmitted', function () {\r\n $scope.stopLockInterval();\r\n paperworkBatchKey = 0;\r\n });\r\n\r\n //When we navigate away from this page destroy the listeners and interval\r\n $scope.$on('$destroy', function () {\r\n $scope.stopLockInterval();\r\n pwLockListener();\r\n pwSubmitListener();\r\n paperworkBatchKey = 0;\r\n });\r\n\r\n })\r\n .factory(\"setupNav\", [function($location)\r\n {\r\n\r\n return {\r\n getRouterPath: getRouterPath,\r\n navigateToPage: navigateToPage,\r\n firstLastPage: firstLastPage,\r\n getSinglePath: getSinglePath,\r\n resolveCurrentPageMenuCode: resolveCurrentPageMenuCode\r\n };\r\n\r\n function getRouterPath (app, paperworkKey, isView){\r\n if (app && paperworkKey) {\r\n var path = '';\r\n var pathMode = !isView?'Enter':'View';\r\n \r\n if (app.DealerFormVersionKey > 0 && !app.MenuCode) {\r\n app.MenuCode = 'DRDFE';\r\n }\r\n\r\n switch (app.MenuCode) {\r\n case 'DREFD':\r\n path = `/Paperwork/${pathMode}PaperworkDeliveries/` + paperworkKey;\r\n break;\r\n case 'DRDFE':\r\n path = `/Paperwork/${pathMode}PaperworkDealerForms/` + paperworkKey;\r\n break;\r\n case 'DREGS':\r\n path = `/Paperwork/${pathMode}PaperworkTanks/` + paperworkKey;\r\n break;\r\n case 'DREGM':\r\n path = `/Paperwork/${pathMode}Paperwork/` + paperworkKey;\r\n break;\r\n default:\r\n path = '/Home';\r\n }\r\n \r\n return path;\r\n }\r\n }\r\n\r\n function getSinglePath(menuCode, paperworkKey, isView, noKey){\r\n \r\n if (menuCode && paperworkKey) {\r\n var path = '';\r\n var pathMode = !isView?'Enter':'View';\r\n if (noKey) paperworkKey = '';\r\n\r\n switch (menuCode) {\r\n case 'DREFD':\r\n path = `/Paperwork/${pathMode}PaperworkDeliveries/` + paperworkKey;\r\n break;\r\n case 'DRDFE':\r\n path = `/Paperwork/${pathMode}PaperworkDealerForms/` + paperworkKey;\r\n break;\r\n case 'DREGS':\r\n path = `/Paperwork/${pathMode}PaperworkTanks/` + paperworkKey;\r\n break;\r\n case 'DREGM':\r\n path = `/Paperwork/${pathMode}Paperwork/` + paperworkKey;\r\n break;\r\n default:\r\n path = '/Home';\r\n }\r\n \r\n return path;\r\n }\r\n }\r\n\r\n function navigateToPage(currentPage, apps, paperworkKey, isView, isPrevious){\r\n if (!currentPage || !apps || !paperworkKey)\r\n return;\r\n\r\n // find current page based on the menu code\r\n var menuOrder = apps.findIndex(function(el){\r\n return el.MenuCode === currentPage;\r\n });\r\n\r\n return !isPrevious? getRouterPath(apps[menuOrder + 1], paperworkKey, isView): getRouterPath(apps[menuOrder - 1], paperworkKey, isView);\r\n }\r\n \r\n function firstLastPage (menuCode, apps){\r\n var result = {isFirstPage: false, isLastPage: false};\r\n apps.find(function(item){if (item.DealerFormVersionKey > 0) item.MenuCode = 'DRDFE';});\r\n apps[0].isFirstPage = true;\r\n apps[apps.length - 1].isLastPage = true;\r\n\r\n apps.forEach(function(element){\r\n if (element.MenuCode === menuCode) {\r\n result.isFirstPage = element.isFirstPage;\r\n result.isLastPage = element.isLastPage;\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n function resolveCurrentPageMenuCode(path){\r\n var result = '';\r\n \r\n if (path.indexOf('/EnterPaperwork/') > -1) result = 'DREGM';\r\n if (path.indexOf('/EnterPaperworkDeliveries/') > -1) result = 'DREFD';\r\n if (path.indexOf('/EnterPaperworkTanks/') > -1) result = 'DREGS';\r\n if (path.indexOf('/EnterPaperworkDealerForms/') > -1) result = 'DRDFE';\r\n\r\n return result;\r\n }\r\n }]\r\n);\r\n","/**\r\n * Created by jvitoria on 1/6/2015.\r\n */\r\nangular.module('pnReportSettings', ['core.ajax'])\r\n .directive('reportSettings', ['ReportSettingsService', 'templates', 'localizationSvc', function (ReportSettingsService, templates, localizationSvc)\r\n {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n showSettingsBar: '@',\r\n allowLoad: '@',\r\n allowSave: '@',\r\n allowExport: '@',\r\n allowCsv: '@',\r\n allowXml: '@',\r\n allowPdf: '@',\r\n allowExcel: '@',\r\n exportReportData: '&',\r\n saveOptions: '='\r\n },\r\n controller: function ($rootScope, $scope)\r\n {\r\n $scope.initReportSettings = function ()\r\n {\r\n $scope.exportOptions = [];\r\n if ($scope.allowCsv !== 'false')\r\n { $scope.exportOptions.push({id: '2', name: 'CSV'}); }\r\n if ($scope.allowXml !== 'false')\r\n { $scope.exportOptions.push({id: '7', name: 'XML'}); }\r\n if ($scope.allowPdf !== 'false')\r\n { $scope.exportOptions.push({id: '1', name: 'PDF'}); }\r\n if ($scope.allowExcel !== 'false')\r\n { $scope.exportOptions.push({id: '3', name: 'Excel'}); }\r\n if ($scope.exportOptions.length > 0)\r\n { $scope.selectedExportOptions = $scope.exportOptions[0].id; }\r\n\r\n if (!$rootScope.reportSettings)\r\n {\r\n $rootScope.reportSettings = {loadOptions: {}, saveOptions: {}};\r\n }\r\n };\r\n },\r\n\r\n link: function (scope, element, attrs) {\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"ReportSettingsLocalization\");\r\n if (!attrs.showSettingsBar)\r\n { attrs.showSettingsBar = true; }\r\n if (!attrs.allowLoad)\r\n { attrs.allowLoad = true; }\r\n if (!attrs.allowSave)\r\n { attrs.allowSave = true; }\r\n if (!attrs.allowExport)\r\n { attrs.allowExport = true; }\r\n\r\n scope.modalInfo = {saveSettingsName: ''};\r\n scope.showModalLoad = false;\r\n scope.showModalSave = false;\r\n scope.showModalConfirmSave = false;\r\n scope.selectedKey = 0;\r\n scope.selectedReportContactKey = 0;\r\n scope.selectedDescription = \"\";\r\n\r\n scope.canDelete = function (key)\r\n {\r\n return scope.$parent.$parent.appInfo.webUser.CurrentAuthorization.CustContKey === key;\r\n };\r\n\r\n scope.exportData = function ()\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(scope.exportReportData()))\r\n return;\r\n scope.exportReportData();\r\n };\r\n\r\n scope.applyReportSettings = function ()\r\n {\r\n if (scope.selectedKey === 0)\r\n {\r\n scope.$parent.notifier.show(localStrings.getLocalizedString(\"PleaseSelectReport\"), 'error');\r\n return;\r\n }\r\n scope.$root.reportSettings.unwrapReportSettings();\r\n scope.showModalLoad = false;\r\n };\r\n\r\n scope.deleteReportSettings = function (key)\r\n {\r\n var apply = function ()\r\n {\r\n ReportSettingsService.saveReportSettings\r\n (\r\n scope.$parent.$parent.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n scope.$parent.$parent.appInfo.webUser.CurrentAuthorization.CustKey,\r\n \"\",\r\n \"\",\r\n 8,\r\n scope.$root.reportSettings.reportKey,\r\n key\r\n ).then\r\n (function ()\r\n {\r\n scope.getReportSettings(true);\r\n });\r\n };\r\n\r\n scope.$parent.$parent.modalifier.confirm(localStrings.getLocalizedString(\"DeleteSelectedReportSettings\"), apply);\r\n };\r\n\r\n scope.getReportSettings = function (notify)\r\n {\r\n ReportSettingsService.getReportSettings(\r\n scope.$parent.$parent.appInfo.webUser.CurrentAuthorization.CustKey,\r\n scope.$root.reportSettings.reportKey\r\n ).then\r\n (\r\n function (data)\r\n {\r\n scope.returnedReportSettings = data.ReportSettings;\r\n if (scope.returnedReportSettings.ARWebSettings.length === 0 && notify)\r\n scope.$parent.notifier.show(localStrings.getLocalizedString(\"SelectionCriteriaNoResults\"), 'warning');\r\n }\r\n );\r\n };\r\n\r\n scope.saveSettings = function ()\r\n {\r\n if (!scope.returnedReportSettings)\r\n scope.getReportSettings(false);\r\n scope.showModalSave = !scope.showModalSave;\r\n };\r\n\r\n scope.loadSettings = function ()\r\n {\r\n scope.getReportSettings(true);\r\n scope.showModalLoad = !scope.showModalLoad;\r\n };\r\n\r\n scope.saveConfirmReportSettings = function ()\r\n {\r\n scope.showModalSave = false;\r\n if (scope.selectedKey > 0 && scope.selectedDescription === scope.modalInfo.saveSettingsName)\r\n {\r\n scope.showModalConfirmSave = true;\r\n return;\r\n }\r\n scope.selectedKey = 0;\r\n scope.saveReportSettings();\r\n };\r\n\r\n scope.saveReportSettings = function ()\r\n {\r\n if (scope.selectedKey > 0)\r\n scope.deleteReportSettings(true);\r\n if (angular.isDefined(scope.$root.reportSettings.wrapReportSettings))\r\n {\r\n scope.$root.reportSettings.wrapReportSettings();\r\n ReportSettingsService.saveReportSettings\r\n (\r\n scope.$parent.$parent.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n scope.$parent.$parent.appInfo.webUser.CurrentAuthorization.CustKey,\r\n scope.modalInfo.saveSettingsName,\r\n scope.$root.reportSettings.saveOptions,\r\n 4,\r\n scope.$root.reportSettings.reportKey,\r\n -1\r\n );\r\n\r\n scope.showModalConfirmSave = false;\r\n scope.showModalSave = false;\r\n }\r\n else\r\n scope.$parent.notifier.show(localStrings.getLocalizedString(\"ProcessFailedError\"), 'error');\r\n };\r\n\r\n scope.selectKey = function (item)\r\n {\r\n scope.selectedKey = item.Key;\r\n scope.selectedDescription = item.Description;\r\n scope.modalInfo.saveSettingsName = item.Description;\r\n scope.modalInfo.saveSettingsKey = item.Key;\r\n\r\n scope.$root.reportSettings.loadOptions = angular.fromJson(item.Options);\r\n };\r\n },\r\n templateUrl: templates.getTemplate(\"ReportSettings\") //'reportSettings/reportSettings.tpl.html'\r\n };\r\n }])\r\n\r\n .factory('ReportSettingsService', function ($q, apiService)\r\n {\r\n return {\r\n getReportSettings: function (custKey, reportKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetReportSettings/',\r\n data: {\r\n CustKey: custKey,\r\n RptKey: reportKey\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.ErrorMessages);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n saveReportSettings: function (custContKey, custKey, description, options, recStatus, reportKey, settingsKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/saveReportSettings/',\r\n data: {\r\n CustContKey: custContKey,\r\n CustKey: custKey,\r\n Description: description,\r\n Options: angular.toJson(options, false),\r\n RecStatus: recStatus,\r\n ReportKey: reportKey,\r\n SettingsKey: settingsKey\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.ErrorMessages);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n });\r\n","/**\r\n * Created by rhampton on 2/26/14.\r\n */\r\nangular.module(\"pnAccountPayments\", ['ngSanitize', 'core.objects', 'services.payments', 'core.directives'])\r\n .config(function ($provide, $routeProvider, templateProvider)\r\n {\r\n //http://localhost/arcustweb/Templates/MakeAPayment\"\r\n\r\n $routeProvider.when(\"/Account/Payments/MakeAPayment\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"MakeAPayment\"),\r\n controller: \"MakeAPaymentCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/MakeAPayment/:paymentKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"MakeAPayment\"),\r\n controller: \"MakeAPaymentCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/AccountVerifyPayment\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"AccountVerifyPayment\"),\r\n controller: \"VerifyPaymentCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Payments/AccountConfirmPayment\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"AccountConfirmPayment\"),\r\n controller: \"ConfirmPaymentCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/ViewScheduledPayments\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewScheduledPayments\"),\r\n controller: \"ScheduledPaymentHistoryCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/ViewPaymentAccounts\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewPaymentAccounts\"),\r\n controller: \"PaymentAccountsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/EditPaymentAccount\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EditPaymentAccount\"),\r\n controller: \"EditAccountCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/EditPaymentAccount/:paymentAccountKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EditPaymentAccount\"),\r\n controller: \"EditAccountCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/VerifyPaymentAccount\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"VerifyPaymentAccount\"),\r\n controller: \"VerifyAccountCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/ConfirmPaymentAccount/:paymentAccountKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ConfirmPaymentAccount\"),\r\n controller: \"ConfirmAccountCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/PaymentAccountVerification/:paymentAccountKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"PaymentAccountVerification\"),\r\n controller: \"AccountVerificationCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/PaymentAccountVerificationVerify/:paymentAccountKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"PaymentAccountVerificationVerify\"),\r\n controller: \"AccountVerificationVerificationCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/PaymentAccountVerificationConfirmation/:paymentAccountKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"PaymentAccountVerificationConfirmation\"),\r\n controller: \"AccountVerificationConfirmationCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/TermsAndConditions/\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TermsAndConditions\"),\r\n controller: \"TermsAndConditionsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/PaymentAccountVerificationFailure/\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"PaymentAccountVerificationFailure\"),\r\n controller: \"AccountVerificationFailCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n ;\r\n })\r\n .controller(\"TermsAndConditionsCtrl\", function ($scope, $http, $q, $routeParams, $filter, PaymentService, validatorSvc, WebFunctions, templates, localStrings)\r\n {\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPayments))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n validatorSvc.clearValidationScopes();\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenuData = {};\r\n if ($scope.checkCurrentUserPermission($scope.webFunctions.AddandEditWebPayments))\r\n $scope.locationInfo.sideMenuData.subMenu = '4';\r\n else\r\n $scope.locationInfo.sideMenuData.subMenu = '5';\r\n\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n PaymentService.getTermsAndConditions($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms).then(function (data)\r\n {\r\n $scope.theTermsAndConditions = data;\r\n });\r\n };\r\n\r\n $scope.declineTerms = function ()\r\n {\r\n $scope.goTo(\"/Home\");\r\n };\r\n\r\n $scope.acceptTerms = function ()\r\n {\r\n if (!$scope.agreeToTerms)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"PleaseAcceptTermsConditions\"), 'error');\r\n return;\r\n }\r\n\r\n PaymentService.acceptTermsAndConditions(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings = data.CustomerWebPaymentSettings;\r\n if ($scope.checkCurrentUserPermission($scope.webFunctions.AddandEditWebPayments) &&\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.ActiveAccountCount > 0)\r\n $scope.goTo('/Account/Payments/ViewScheduledPayments');\r\n else if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.ActiveAccountCount > 0)\r\n $scope.goTo('/Account/Payments/ViewPaymentAccounts');\r\n else\r\n $scope.goTo('/Account/Payments/EditPaymentAccount');\r\n });\r\n };\r\n\r\n })\r\n .controller(\"MakeAPaymentCtrl\", function ($scope, $http, $q, $routeParams, $filter, PaymentService, validatorSvc, WebFunctions, templates, localStrings, localizationSvc, globalizationSvc, $rootScope)\r\n {\r\n 'use strict';\r\n $scope.paymentKey = 0;\r\n $scope.customText = \"\";\r\n $scope.kendo = {};\r\n\r\n $scope.kendo.invoicesGrid = {};\r\n $scope.kendo.invoicesGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"Selected\",\r\n width: 35,\r\n attributes: {class: \"alignCenter\"},\r\n filterable: false,\r\n sortable: false,\r\n headerTemplate: \"\",\r\n template: \"\"\r\n },\r\n {\r\n field: \"DueDate1\",\r\n title: localStrings.getLocalizedString(\"DueDate\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Balance\",\r\n title: localStrings.getLocalizedString(\"AmtDue\"),\r\n format: \"{0:c}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"RefNo\",\r\n title: localStrings.getLocalizedString(\"InvoiceNum\"),\r\n attributes: {class: \"alignLeftt\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"InvoiceDate\",\r\n title: localStrings.getLocalizedString(\"InvoiceDate\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Amount\",\r\n title: localStrings.getLocalizedString(\"OrigAmt\"),\r\n format: \"{0:c}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n }\r\n ],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n $scope.kendo.invoicesGridInit = function (ds)\r\n {\r\n ds.each(function (charge)\r\n {\r\n charge.DueDate1 = Date.create(charge.DueDate1).format('{MM}/{dd}/{yyyy}');\r\n charge.InvoiceDate = Date.create(charge.InvoiceDate).format('{MM}/{dd}/{yyyy}');\r\n charge.Balance = globalizationSvc.formatCurrency(charge.Balance);\r\n charge.Amount = globalizationSvc.formatCurrency(charge.Amount);\r\n });\r\n\r\n $scope.kendo.invoicesGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.invoicesGridDS.read();\r\n $scope.kendo.invoicesGrid.dataSource.data($scope.kendo.invoicesGridDS.data());\r\n };\r\n $scope.kendo.creditsGrid = {};\r\n $scope.kendo.creditsGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"Selected\",\r\n width: 35,\r\n attributes: {class: \"alignCenter\"},\r\n filterable: false,\r\n sortable: false,\r\n headerTemplate: \"\",\r\n template: \"\"\r\n },\r\n {\r\n field: \"RefDate\",\r\n title: localStrings.getLocalizedString(\"Date\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"TranCodeDescription\",\r\n title: localStrings.getLocalizedString(\"PaymentType\"),\r\n attributes: {class: \"alignLeftt\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"UnAppAmount\",\r\n title: localStrings.getLocalizedString(\"Amt\"),\r\n format: \"{0:c}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"RefNo\",\r\n title: localStrings.getLocalizedString(\"ReferenceNum\"),\r\n attributes: {class: \"alignLeftt\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n }\r\n ],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n $scope.kendo.creditsGridInit = function (ds)\r\n {\r\n ds.each(function (charge)\r\n {\r\n charge.RefDate = Date.create(charge.RefDate).format('{MM}/{dd}/{yyyy}');\r\n charge.UnAppAmount = globalizationSvc.formatCurrency(charge.UnAppAmount);\r\n });\r\n\r\n $scope.kendo.creditsGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.creditsGridDS.read();\r\n $scope.kendo.creditsGrid.dataSource.data($scope.kendo.creditsGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.appInfo.webPaymentLocked = false;\r\n $scope.appInfo.paymentControlOptions = {\r\n format: 'c',\r\n culture: globalizationSvc.getLocale(),\r\n spinners: false\r\n };\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPayments) || !$scope.paymentsEnabled())\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"1\";\r\n PaymentService.lockPayments($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n $scope.initializePart2();\r\n },\r\n function (err)\r\n {\r\n $scope.appInfo.webPaymentLocked = true;\r\n }\r\n );\r\n };\r\n\r\n $scope.initializePart2 = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.invoiceWarning = false;\r\n\r\n if ($routeParams.paymentKey)\r\n {\r\n $scope.paymentKey = $routeParams.paymentKey.toNumber();\r\n }\r\n\r\n if ($scope.paymentKey < 0 && !angular.isUndefinedOrNullOrEmpty($scope.appInfo.webPayment))\r\n {\r\n //You should only get here by clicking the change button on verify payment\r\n //We reset invoice selection if payment type is select invoices\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType === \"2\") {\r\n var invoicesValueArr = $scope.InvoiceValues();\r\n $scope.selctedInvoicesValue = invoicesValueArr[0];\r\n $scope.selctedInvoicesValueDisplay = invoicesValueArr[1];\r\n }\r\n $scope.setUpView();\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Status !== 0)\r\n {\r\n $scope.goTo(\"/Account/Payments/AccountConfirmPayment\");\r\n }\r\n } else\r\n {\r\n $scope.appInfo.webPayment = {};\r\n $scope.appInfo.webPayment.WebPaymentWithContext = {};\r\n PaymentService.getPayment($scope.appInfo.webUser.CurrentAuthorization.CustKey, $scope.paymentKey).then(function (data)\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext = data;\r\n\r\n if (parseInt($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType, 10) === 2) {\r\n $scope.lockInvoices();\r\n $scope.appInfo.webPayment.WebPaymentWithContext = data;\r\n }\r\n\r\n PaymentService.getScheduledPayments(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey, \"\", \"01/01/1900\", \"01/01/2079\", true, false, false\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.HasPendingPayments = data.CustomerScheduledPayments.any({ Status: 0 });\r\n $scope.appInfo.webPayment.WebPaymentWithContext.HasPendingBudgetPayments = data.CustomerScheduledPayments.any({ Status: 0, PaymentType: 4 }) && !data.CustomerScheduledPayments.any({ Key: $scope.paymentKey, Status: 0, PaymentType: 4 });\r\n });\r\n\r\n $scope.setUpView();\r\n\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Status !== 0)\r\n $scope.goTo(\"/Account/Payments/AccountConfirmPayment\");\r\n });\r\n }\r\n\r\n $scope.selctedInvoicesValue = 0.00;\r\n $scope.selctedCreditsValue = 0.00;\r\n $scope.totalInvoiceAmount = 0.00;\r\n\r\n $scope.getWebProfileMessage(18);\r\n };\r\n\r\n $scope.setPaymentType = function (value)\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = value;\r\n };\r\n\r\n $scope.setUpView = function ()\r\n {\r\n var minDateTime = new Date(\"0001-01-01T00:00:00\".replace(/-/g, \"/\").replace(/T/g, \" \"));\r\n var lastStatementDate = new Date($scope.appInfo.webPayment.WebPaymentWithContext.LastStatementDate.replace(/-/g, \"/\").replace(/T/g, \" \"));\r\n $scope.isStatementCustomer = $scope.appInfo.webPayment.WebPaymentWithContext.IsStatementCustomer;\r\n $scope.isStatementCustomer = lastStatementDate !== minDateTime;\r\n $scope.isStatementCustomer = $scope.isStatementCustomer && $scope.appInfo.webPayment.WebPaymentWithContext.LastStatementAmount > 0;\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Key === 0)\r\n {\r\n // we keep Budget Balance payment type when changing budget web payment\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType !== \"4\") {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = ($scope.isStatementCustomer && $scope.appInfo.webPayment.WebPaymentWithContext.HasUnpaidStatement) ? '1' : '0';\r\n }\r\n }\r\n\r\n $scope.isBudgetCustomer = $scope.appInfo.webPayment.WebPaymentWithContext.IsBudgetCustomer;\r\n $scope.isBBEnabled = $scope.appInfo.webPayment.WebPaymentWithContext.IsBBEnabled;\r\n // we do not want to display negative baudget balance\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.BudgetBalance.toNumber() < 0) {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.BudgetBalance = '0.00';\r\n }\r\n\r\n $scope.isInvoiceCustomer = $scope.appInfo.webPayment.WebPaymentWithContext.IsOpenItemCustomer && $scope.appInfo.webPayment.WebPaymentWithContext.Invoices.length > 0;\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.IsPrepaidCustomer)\r\n {\r\n $scope.isStatementCustomer = false;\r\n $scope.isInvoiceCustomer = false;\r\n }\r\n $scope.appInfo.webPayment.WebPaymentWithContext.WebMinEFTDate = $scope.formatDate($scope.appInfo.webPayment.WebPaymentWithContext.WebMinEFTDate);\r\n $scope.appInfo.webPayment.WebPaymentWithContext.WebMaxEFTDate = $scope.formatDate($scope.appInfo.webPayment.WebPaymentWithContext.WebMaxEFTDate);\r\n\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Key === 0)\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentDate = $scope.appInfo.webPayment.WebPaymentWithContext.WebMinEFTDate;\r\n }\r\n else\r\n {\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Status < 2)\r\n {\r\n if (new Date($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentDate) < new Date($scope.appInfo.webPayment.WebPaymentWithContext.WebMinEFTDate))\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentDate = $scope.appInfo.webPayment.WebPaymentWithContext.WebMinEFTDate;\r\n $scope.notifier.show(localStrings.getLocalizedString(\"PaymentDateNoLongerValid\"), 'warning');\r\n }\r\n }\r\n else\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentDate = $scope.formatDate($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentDate);\r\n }\r\n\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount.toNumber() || 0;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n $scope.formatCurrencies();\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType === 4) {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = '4';\r\n }\r\n $scope.viewSetupComplete = true;\r\n };\r\n\r\n $scope.InvoiceValues = function ()\r\n {\r\n var theValue = 0.00;\r\n var theGrossValue = 0.00;\r\n var theDiscount = 0.00;\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.kendo.invoicesGrid.dataSource))\r\n angular.forEach($scope.kendo.invoicesGrid.dataSource.data(), function (charge, index)\r\n {\r\n if (charge.Selected)\r\n {\r\n if (new Date($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentDate) <= new Date(charge.TermsDiscountDate))\r\n {\r\n theGrossValue = theGrossValue + parseFloat(globalizationSvc.convertStringToNumber(charge.Balance));\r\n theDiscount = theDiscount + charge.TermsDiscount;\r\n theValue = theValue + (Math.round((parseFloat(globalizationSvc.convertStringToNumber(charge.Balance)) - charge.TermsDiscount) * 10000) / 10000);\r\n } else\r\n {\r\n theGrossValue = theGrossValue + parseFloat(globalizationSvc.convertStringToNumber(charge.Balance)); \r\n theDiscount = theDiscount + 0;\r\n theValue = theValue + parseFloat(globalizationSvc.convertStringToNumber(charge.Balance));\r\n }\r\n }\r\n });\r\n\r\n $scope.selctedInvoicesValue = theValue;\r\n $scope.selctedInvoicesGrossValue = theGrossValue;\r\n $scope.selctedInvoicesGrossValueDisplay = globalizationSvc.formatCurrency(theGrossValue);\r\n $scope.selctedInvoicesDiscountValue = theDiscount;\r\n $scope.selctedInvoicesDiscountValueDisplay = globalizationSvc.formatCurrency(theDiscount);\r\n\r\n theValue = 0;\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.kendo.creditsGrid.dataSource))\r\n angular.forEach($scope.kendo.creditsGrid.dataSource.data(), function (credit, index)\r\n {\r\n if (credit.Selected)\r\n {\r\n theValue = theValue + parseFloat(globalizationSvc.convertStringToNumber(credit.UnAppAmount));\r\n }\r\n });\r\n\r\n $scope.selctedCreditsValue = parseFloat(theValue);\r\n $scope.selctedCreditsValueDisplay = globalizationSvc.formatCurrency(theValue);\r\n\r\n $scope.totalInvoiceAmount = Math.round(($scope.selctedInvoicesValue - $scope.selctedCreditsValue) * 10000) / 10000;\r\n if ($scope.totalInvoiceAmount < 0)\r\n {\r\n $scope.totalInvoiceAmount = 0.0;\r\n }\r\n $scope.totalInvoiceAmountDisplay = globalizationSvc.formatCurrency(Math.round(($scope.selctedInvoicesValue - $scope.selctedCreditsValue) * 10000) / 10000);\r\n\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = $scope.totalInvoiceAmount;\r\n return [$scope.selctedInvoicesValue, globalizationSvc.formatCurrency($scope.selctedInvoicesValue)];\r\n };\r\n\r\n $scope.getCssClasses = function (ngModelController)\r\n {\r\n return {\r\n error: ngModelController && ngModelController.$invalid && ngModelController.$dirty,\r\n success: ngModelController && ngModelController.$valid && ngModelController.$dirty\r\n };\r\n };\r\n\r\n $scope.showError = function (ngModelController, error)\r\n {\r\n return ngModelController.$error[error];\r\n };\r\n\r\n $scope.setScheduledPaymentAmount = function () {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = globalizationSvc.convertStringToNumber($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay);\r\n };\r\n\r\n $scope.verifyPayment = function ()\r\n {\r\n // pay by invoice\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType === \"2\") {\r\n //set selected invoices\r\n var grid = $scope.kendo.invoicesGrid;\r\n\r\n //set invoices that are selected in grid\r\n grid.dataItems().forEach(function (item) {\r\n var invoice = $scope.appInfo.webPayment.WebPaymentWithContext.Invoices.find({Key: item.Key});\r\n\r\n if (angular.isDefined(invoice)) {\r\n invoice.Selected = item.Selected;\r\n }\r\n\r\n });\r\n\r\n //set selected credits\r\n var gridCr = $scope.kendo.creditsGrid;\r\n\r\n //set invoices that are selected in grid\r\n gridCr.dataItems().forEach(function (item) {\r\n var credit = $scope.appInfo.webPayment.WebPaymentWithContext.Credits.find({Key: item.Key});\r\n\r\n if (angular.isDefined(credit)) {\r\n credit.Selected = item.Selected;\r\n }\r\n\r\n });\r\n }\r\n\r\n //update who made this payment\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CustKey = $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Key === 0)\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CreatedByCustContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.LastModifiedByCustContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Status = 0;\r\n //CustPmtAcctKey has been set to a string from the kendo accounts dropdown, so cast it back to a number\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CustPmtAcctKey = $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CustPmtAcctKey.toNumber();\r\n\r\n //handle the selected payment type\r\n switch ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType)\r\n {\r\n case '1':\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = $scope.appInfo.webPayment.WebPaymentWithContext.LastStatementAmount;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n break;\r\n\r\n case '2':\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CreditAmount = $scope.selctedCreditsValue;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.GrossAmount = $scope.selctedInvoicesGrossValue;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = $scope.totalInvoiceAmount;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.DiscountAmount = $scope.selctedInvoicesDiscountValue;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CreditAmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CreditAmount);\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.GrossAmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.GrossAmount);\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.DiscountAmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.DiscountAmount);\r\n break;\r\n\r\n case '3':\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = $scope.appInfo.webPayment.WebPaymentWithContext.AccountBalance;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n break;\r\n\r\n case '4':\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = $scope.appInfo.webPayment.WebPaymentWithContext.BudgetBalance;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n break;\r\n\r\n default:\r\n var amount = $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount.toNumber() || 0;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = amount;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n break;\r\n }\r\n\r\n //ensure that payment amount is greater than 0\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n //passed all tests; continue with process\r\n $scope.$cancelPromptToSave();\r\n $scope.goTo(\"/Account/Payments/AccountVerifyPayment\");\r\n };\r\n\r\n $scope.paymentIsValid = function ()\r\n {//Return true if there are errors.\r\n\r\n var elem = $('#paymentSelection');\r\n elem.css(\"border\", \"\");\r\n\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount &&\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount !== '')\r\n {\r\n var theValue = $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount.toString().replace(/$/g, \"\");\r\n theValue = parseFloat(theValue);\r\n if (theValue > 0)\r\n return false;\r\n }\r\n\r\n elem.css('border', '1px solid red');\r\n\r\n return true;\r\n };\r\n\r\n var paymentDateValidation =\r\n {\r\n _localStrings: localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\"),\r\n name: 'validateLiftDate',\r\n validationMessage: '',\r\n validationMessageWrn: '',\r\n validatorError: function (liftDateTime, parms)\r\n {\r\n var isValid = true;\r\n var minDate = new Date($scope.appInfo.webPayment.WebPaymentWithContext.WebMinEFTDate);\r\n var maxDate = new Date($scope.appInfo.webPayment.WebPaymentWithContext.WebMaxEFTDate);\r\n var liftDate = new Date(liftDateTime);\r\n\r\n if (Date.create(liftDateTime).format('{MM}/{dd}/{yyyy}') === \"Invalid Date\" || (liftDate < minDate) || (liftDate > maxDate)) {\r\n /*this.validationMessage = \"Please select or enter a payment date between \" +\r\n minDate.format('{MM}/{dd}/{yyyy}') + \" and \" +\r\n maxDate.format('{MM}/{dd}/{yyyy}') + \".\";*/\r\n\r\n var replacementParms = [ minDate.format('{MM}/{dd}/{yyyy}'), maxDate.format('{MM}/{dd}/{yyyy}')];\r\n\r\n this.validationMessage = paymentDateValidation._localStrings.getLocalizedString(\"PaymentDateValidationMsg\", replacementParms);\r\n\r\n return false;\r\n }\r\n\r\n return isValid;\r\n },\r\n validatorWarning: function (liftDateTime, parms)\r\n {\r\n var hasWarning = false;\r\n return !hasWarning;\r\n }\r\n };\r\n\r\n $scope.validatePaymentDate = new pdi.ng.validate.PdiValidation(paymentDateValidation);\r\n\r\n $scope.lockInvoices = function ()\r\n {\r\n PaymentService.lockInvoices($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = '2';\r\n $scope.invoicesLocked = true;\r\n $scope.kendo.invoicesGridInit.delay(10, $scope.appInfo.webPayment.WebPaymentWithContext.Invoices);\r\n $scope.kendo.creditsGridInit.delay(10, $scope.appInfo.webPayment.WebPaymentWithContext.Credits);\r\n },\r\n function (err)\r\n {\r\n $scope.invoicesLocked = false;\r\n $scope.invoiceWarning = true;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = '0';\r\n }\r\n );\r\n };\r\n\r\n $scope.unlockInvoices = function (paymentType)\r\n {\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType !== '2')\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = paymentType;\r\n }\r\n PaymentService.unockInvoices($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n $scope.invoicesLocked = false;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = paymentType;\r\n };\r\n\r\n $scope.checkAll = function (grid, id)\r\n {\r\n var checked = document.getElementById(id).checked || false;\r\n grid.dataItems().forEach(function (item)\r\n {\r\n item.Selected = checked;\r\n });\r\n };\r\n\r\n $scope.formatCurrencies = function () { \r\n var paymentsInfo = $scope.appInfo.webPayment.WebPaymentWithContext;\r\n\r\n var lastStmtAmt = paymentsInfo.LastStatementAmount;\r\n var acctBalance = paymentsInfo.AccountBalance;\r\n var budgetBalance = paymentsInfo.BudgetBalance;\r\n\r\n paymentsInfo.LastStatementAmountDisplay = globalizationSvc.formatCurrency(lastStmtAmt);\r\n paymentsInfo.AccountBalanceDisplay = globalizationSvc.formatCurrency(acctBalance);\r\n paymentsInfo.BudgetAmountDisplay = globalizationSvc.formatCurrency(budgetBalance);\r\n };\r\n })\r\n .controller(\"VerifyPaymentCtrl\", function ($scope, $http, $q, PaymentService, WebFunctions, templates, globalizationSvc)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPayments) || !$scope.paymentsEnabled())\r\n $scope.goTo(\"/Home\"); \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n $scope.getWebProfileMessage(18);\r\n $scope.isBudgetPayment = $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType === \"4\";\r\n $scope.isBudgetCustomer = $scope.appInfo.webPayment.WebPaymentWithContext.IsBudgetCustomer;\r\n $scope.isBBEnabled = $scope.appInfo.webPayment.WebPaymentWithContext.IsBBEnabled;\r\n $scope.budgetBalanceChanged = false;\r\n };\r\n $scope.confirmPayment = function () {\r\n //validate budget billing state if budget payment\r\n if ($scope.isBudgetPayment) {\r\n PaymentService.getBudgetPaymentContext($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data) {\r\n $scope.isBudgetCustomer = data.IsBudgetCustomer;\r\n $scope.isBBEnabled = data.IsBBEnabled;\r\n $scope.budgetBalanceChanged = $scope.appInfo.webPayment.WebPaymentWithContext.BudgetBalance !== data.BudgetBalance;\r\n if ($scope.isBBEnabled && $scope.isBudgetCustomer && !$scope.budgetBalanceChanged) {\r\n $scope.savePayment();\r\n }\r\n }\r\n );\r\n } else {\r\n $scope.savePayment();\r\n }\r\n };\r\n $scope.savePayment = function () {\r\n //create variable of webpayment data\r\n var webPayment = $scope.appInfo.webPayment;\r\n\r\n //for each invoice, convert the string balance to a number so it properly gets sent to controller\r\n webPayment.WebPaymentWithContext.Invoices.forEach(function (item) {\r\n item.Balance = (globalizationSvc.convertStringToNumber(item.Balance)); \r\n });\r\n\r\n //for each credit, convert unappAmmount and amount to numbers\r\n webPayment.WebPaymentWithContext.Credits.forEach(function (item) {\r\n item.Amount = (globalizationSvc.convertStringToNumber(item.Amount));\r\n item.UnAppAmount = (globalizationSvc.convertStringToNumber(item.UnAppAmount));\r\n });\r\n\r\n PaymentService.savePayment(webPayment.WebPaymentWithContext).then(\r\n function (data) {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment = data.CustomerScheduledPayment;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.Invoices = data.Invoices;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.Credits = data.Credits;\r\n $scope.goTo(\"/Account/Payments/AccountConfirmPayment\");\r\n PaymentService.unLockPayments($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n PaymentService.unockInvoices($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n }\r\n );\r\n };\r\n $scope.changePayment = function ()\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.Invoices.forEach(function (item) {\r\n item.Selected = false;\r\n });\r\n\r\n $scope.appInfo.webPayment.WebPaymentWithContext.Credits.forEach(function (item) {\r\n item.Selected = false;\r\n });\r\n\r\n PaymentService.unLockPayments($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n PaymentService.unockInvoices($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n\r\n PaymentService.getBudgetPaymentContext($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data) {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.IsBudgetCustomer = data.IsBudgetCustomer;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.IsBBEnabled = data.IsBBEnabled;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.BudgetBalance = data.BudgetBalance;\r\n }\r\n );\r\n $scope.goTo(\"/Account/Payments/MakeAPayment/-1\");\r\n };\r\n })\r\n .controller(\"ConfirmPaymentCtrl\", function ($scope, $http, $q, PaymentService, WebFunctions, templates, globalizationSvc)\r\n {\r\n 'use strict';\r\n //Once you come bace from saving the payment type will be an integer not a string so drop the quotes.\r\n\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPayments) || !$scope.paymentsEnabled())\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType === '2')\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CreditAmount = $scope.reCalculateCreditValues();\r\n $scope.getWebProfileMessage(21);\r\n };\r\n $scope.reCalculateCreditValues = function ()\r\n {\r\n var theValue = 0;\r\n angular.forEach($scope.appInfo.webPayment.WebPaymentWithContext.Credits, function (credit, index)\r\n {\r\n if (credit.Selected)\r\n theValue = parseFloat(theValue) + parseFloat(credit.UnAppAmount);\r\n });\r\n return theValue;\r\n };\r\n\r\n })\r\n .controller(\"ScheduledPaymentHistorySideMenuCtrl\", function ($scope, $http, $q, PaymentService, WebFunctions)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.paymentHistory = {\r\n scheduled: 'true',\r\n processed: 'false',\r\n canceled: 'false'\r\n };\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.selection = 13;\r\n PaymentService.getScheduledPaymentHistoryContext($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.locationInfo.sideMenuData.paymentHistory = {\r\n scheduled: true,\r\n processed: false,\r\n canceled: false,\r\n accounts: data.CustomerPaymentAccounts\r\n };\r\n });\r\n };\r\n })\r\n .controller(\"ScheduledPaymentHistoryCtrl\", function ($scope, $http, $q, PaymentService, WebFunctions, $filter, templates, validatorSvc, localStrings, globalizationSvc)\r\n {\r\n 'use strict';\r\n\r\n $scope.scheduledPayments = [];\r\n $scope.kendo = {};\r\n $scope.kendo.pmntGrid = {};\r\n $scope.kendo.pmntGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n title: localStrings.getLocalizedString(\"Account\"),\r\n field: \"CustPmtAcctDescription\",\r\n width: 150,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Amount\",\r\n title: localStrings.getLocalizedString(\"Amount\"),\r\n width: 100,\r\n format: \"{0:c}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"FormattedDate\",\r\n title: localStrings.getLocalizedString(\"PaymentDate\"),\r\n width: 100,\r\n format: \"{0:MM/dd/yyyy}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"StatusDescription\",\r\n title: localStrings.getLocalizedString(\"Status\"),\r\n width: 75,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"FormattedActivityDate\",\r\n title: localStrings.getLocalizedString(\"LastActivity\"),\r\n width: 100,\r\n format: \"{0:MM/dd/yyyy}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Key\",\r\n title: localStrings.getLocalizedString(\"Confirmation\"),\r\n width: 90,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Created\",\r\n title: localStrings.getLocalizedString(\"Entered\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {mode: \"row\", extra: false},\r\n //height: $(document).height() - 375,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.pmntGridInit = function ()\r\n {\r\n $scope.scheduledPayments.each(function (payment) {\r\n payment.Amount = globalizationSvc.formatNumeric(payment.Amount);\r\n });\r\n \r\n $scope.kendo.pmntGridDS = new kendo.data.DataSource({\r\n data: $scope.scheduledPayments,\r\n schema: {\r\n model: {\r\n fields: {\r\n CustPmtAcctDescription: {\r\n editable: false\r\n },\r\n Amount: {\r\n editable: false\r\n },\r\n FormattedDate: {\r\n editable: false\r\n },\r\n StatusDescription: {\r\n editable: false\r\n },\r\n FormattedActivityDate: {\r\n editable: false\r\n },\r\n Key: {\r\n editable: false\r\n },\r\n Created: {\r\n editable: false\r\n }\r\n }\r\n }\r\n },\r\n batch: true\r\n });\r\n\r\n $scope.kendo.pmntGridDS.read();\r\n $scope.kendo.pmntGrid.dataSource.data($scope.kendo.pmntGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPayments))\r\n {\r\n $scope.goTo(\"/Account/Payments/ViewPaymentAccounts\");\r\n } \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\"); //'account/payments/paymentSideMenu.tpl.html';\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"4\";\r\n $scope.getWebProfileMessage(19);\r\n $scope.scheduledPayments = [];\r\n $scope.predicate = 'FormattedDate';\r\n $scope.reverse = true;\r\n $scope.cancelPaymentKey = -1;\r\n $scope.cancelConfirm = false;\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n if (!($scope.locationInfo.sideMenuData.paymentHistory.scheduled ||\r\n $scope.locationInfo.sideMenuData.paymentHistory.processed ||\r\n $scope.locationInfo.sideMenuData.paymentHistory.canceled))\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"AtLeastOneOption\"), 'error');\r\n return;\r\n }\r\n\r\n PaymentService.getScheduledPayments($scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.locationInfo.sideMenuData.paymentHistory.selectedAccount,\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate,\r\n $scope.locationInfo.sideMenuData.paymentHistory.scheduled,\r\n $scope.locationInfo.sideMenuData.paymentHistory.processed,\r\n $scope.locationInfo.sideMenuData.paymentHistory.canceled).then(function (data)\r\n {\r\n if (data.CustomerScheduledPayments.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"ScheduledPaymentsHist\"));\r\n }\r\n $scope.scheduledPayments = data.CustomerScheduledPayments;\r\n angular.forEach($scope.scheduledPayments, function (element)\r\n {\r\n element.Amount = globalizationSvc.formatCurrency(element.Amount);\r\n element.FormattedDate = $filter('date')(element.PaymentDate, 'MM/dd/yyyy');\r\n element.FormattedActivityDate = $filter('date')(element.LastModifiedDateTime, 'MM/dd/yyyy');\r\n element.FormattedCreatedDate = $filter('date')(element.CreatedDateTime, 'MM/dd/yyyy');\r\n element.Created = element.FormattedCreatedDate + ' ' + localStrings.getLocalizedString(\"By\") + ' ' + element.CreatedByCustContEmailAddress;\r\n });\r\n\r\n $scope.kendo.pmntGridInit();\r\n });\r\n };\r\n\r\n $scope.confirmCancelPayment = function (paymentKey)\r\n {\r\n $scope.cancelPaymentKey = paymentKey;\r\n $scope.cancelConfirm = true;\r\n };\r\n\r\n $scope.cancelPayment = function (paymentKey)\r\n {\r\n PaymentService.getPayment($scope.appInfo.webUser.CurrentAuthorization.CustKey, paymentKey).then(function (data)\r\n {\r\n var WebPaymentWithContext = data;\r\n WebPaymentWithContext.CustomerScheduledPayment.Status = 1;\r\n WebPaymentWithContext.CustomerScheduledPayment.LastModifiedByCustContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n PaymentService.savePayment(WebPaymentWithContext).then(function (data)\r\n {\r\n $scope.$parent.applyAction();\r\n });\r\n });\r\n $scope.cancelConfirm = false;\r\n };\r\n })\r\n .controller(\"paymentSideMenuCtrl\", function ($scope, WebFunctionGroups, PaymentService, $rootScope, $interval)\r\n {\r\n 'use strict';\r\n if (!$scope.checkCurrentUserPermissions(WebFunctionGroups.Payments))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n /*\r\n Use $interval to periodically refresh the locks.\r\n When the user navigates away from the page the $destroy listener is triggered to kill off the $interval.\r\n Likewise, the $interval is stopped when the payment/invoices are unlocked.\r\n This is paired with a query in CustomerRepository in EntWeb that wipes out Petronet Locks if they are > 20 minutes old.\r\n */\r\n\r\n var intervalPromise;\r\n var lockData;\r\n var invoicesLocked;\r\n var intervalTime = 120000;//Every 2 mins\r\n\r\n function refreshLock() {\r\n if (!angular.isUndefinedOrNullOrEmpty(lockData)) {\r\n if (!invoicesLocked) {\r\n console.log(\"Payments lock refreshed\");\r\n PaymentService.lockPayments(lockData.CustContKey, lockData.EmailAddress, lockData.CustomerKey, true);\r\n } else {\r\n console.log(\"Payments and Invoices lock refreshed\");\r\n PaymentService.lockPaymentsAndInvoices(lockData.CustContKey, lockData.EmailAddress, lockData.CustomerKey);\r\n }\r\n }\r\n }\r\n\r\n function resetValues() {\r\n invoicesLocked = false;\r\n lockData = null;\r\n }\r\n\r\n $scope.startLockInterval = function (data) {\r\n $scope.stopLockInterval();\r\n intervalPromise = $interval(refreshLock, intervalTime);\r\n };\r\n\r\n $scope.stopLockInterval = function () {\r\n $interval.cancel(intervalPromise);\r\n };\r\n\r\n //Start periodic refresh on lock\r\n var paymentLockListener = $rootScope.$on('event:PaymentLocked', function (event, data) {\r\n if (!angular.isUndefinedOrNullOrEmpty(data)) {\r\n lockData = data;\r\n $scope.startLockInterval();\r\n }\r\n });\r\n\r\n var invoiceLockListener = $rootScope.$on('event:InvoiceLocked', function (event, data) {\r\n if (!angular.isUndefinedOrNullOrEmpty(data)) {\r\n lockData = data;\r\n invoicesLocked = true;\r\n }\r\n });\r\n\r\n //Stop the interval when unlocked\r\n var paymentUnlockListener = $rootScope.$on('event:PaymentUnlocked', function () {\r\n $scope.stopLockInterval();\r\n resetValues();\r\n });\r\n\r\n var invoiceUnlockListener = $rootScope.$on('event:InvoiceUnlocked', function () {\r\n invoicesLocked = false;\r\n });\r\n\r\n //Destroy the listeners and intervals when we navigate away from this page \r\n $scope.$on('$destroy', function () {\r\n $scope.stopLockInterval();\r\n paymentUnlockListener();\r\n invoiceUnlockListener();\r\n paymentLockListener();\r\n invoiceLockListener();\r\n resetValues();\r\n });\r\n\r\n })\r\n .controller(\"PaymentAccountsCtrl\", function ($scope, $http, $q, $rootScope, $route, PaymentAccountService, WebFunctions, $filter, templates, localStrings, globalizationSvc)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.acctGrid = {};\r\n $scope.kendo.acctGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n title: localStrings.getLocalizedString(\"AccountName\"),\r\n field: \"Description\",\r\n attributes: {class: \"alignLeft\"},\r\n template: \"\",\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"Status\"),\r\n field: \"AccountStatusDesc\",\r\n attributes: {class: \"alignLeft\"},\r\n width: 150,\r\n template: \"{{dataItem.AccountStatusDesc}} {{dataItem.AccountStatusDesc}}\",\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"LastPayment\"),\r\n field: \"FormattedActivityDate\",\r\n width: 150,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"NextScheduledPayment\"),\r\n field: \"NextPaymentText\",\r\n width: 200,\r\n attributes: {class: \"alignLeft\"},\r\n template: \"{{dataItem.NextPaymentText}}\",\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \" \",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {mode: \"row\", extra: false},\r\n //height: $(document).height() - 375,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.acctGridInit = function ()\r\n {\r\n $scope.kendo.acctGridDS = new kendo.data.DataSource({\r\n data: $scope.WebPaymentAccounts,\r\n schema: {\r\n model: {\r\n fields: {\r\n Description: {\r\n editable: false\r\n },\r\n AccountStatusDesc: {\r\n editable: false\r\n },\r\n FormattedActivityDate: {\r\n editable: false\r\n },\r\n NextPaymentText: {\r\n editable: false\r\n }\r\n }\r\n }\r\n },\r\n batch: true\r\n });\r\n\r\n $scope.kendo.acctGridDS.read();\r\n $scope.kendo.acctGrid.dataSource.data($scope.kendo.acctGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n $scope.predicate = 'SortOrder';\r\n $scope.reverse = false;\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n $scope.getWebProfileMessage(12);\r\n $scope.refresh();\r\n };\r\n\r\n $scope.refresh = function ()\r\n {\r\n PaymentAccountService.getPaymentAccountList($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.WebPaymentAccounts = data;\r\n angular.forEach($scope.WebPaymentAccounts, function (element)\r\n {\r\n element.FormattedActivityDate = element.AccountLastActivity === '0001-01-01T00:00:00' ? null : $filter('date')(element.AccountLastActivity, 'MM/dd/yyyy');\r\n element.FormattedPaymentDate = element.AccountNextPayment === '0001-01-01T00:00:00' ? null : $filter('date')(element.AccountNextPayment, 'MM/dd/yyyy');\r\n element.NextPaymentText = element.FormattedPaymentDate === null ? null : element.FormattedPaymentDate + ' ' + localStrings.getLocalizedString(\"For\") + ' ' + globalizationSvc.formatCurrency(element.AccountNextPaymentAmmount);\r\n });\r\n $scope.kendo.acctGridInit();\r\n });\r\n };\r\n })\r\n .controller(\"EditAccountCtrl\", function ($scope, $http, $q, $routeParams, $filter, PaymentAccountService, validatorSvc, WebFunctions, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.editableAccount = false;\r\n $scope.paymentAccountKey = 0; \r\n $scope.customText = \"\";\r\n $scope.initializeEditAcount = function ()\r\n {\r\n $scope.AccountTypes =\r\n [\r\n { key: 0, descr: localStrings.getLocalizedString(\"Checking\") },\r\n { key: 1, descr: localStrings.getLocalizedString(\"Savings\") }\r\n ];\r\n\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n validatorSvc.clearValidationScopes();\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"7\";\r\n\r\n if ($routeParams.paymentAccountKey)\r\n {\r\n $scope.paymentAccountKey = $routeParams.paymentAccountKey;\r\n }\r\n\r\n if ($scope.paymentAccountKey < 0)\r\n {//Edit from verify page\r\n $scope.WebPaymentAccount = PaymentAccountService.WebPaymentAccount;\r\n $scope.editableAccount = $scope.WebPaymentAccount.AccountStatus <= 1 || $scope.WebPaymentAccount.AccountStatus === 5;\r\n } else if ($scope.paymentAccountKey > 0)\r\n {//Existing\r\n PaymentAccountService.getPaymentAccount($scope.paymentAccountKey, $scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.WebPaymentAccount = data;\r\n $scope.WebPaymentAccount.AccountTypeDescr = $scope.AccountTypes[$scope.WebPaymentAccount.AccountType].descr;\r\n $scope.WebPaymentAccount.LastModifiedByCustContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n $scope.editableAccount = $scope.WebPaymentAccount.AccountStatus <= 1 || $scope.WebPaymentAccount.AccountStatus === 5;\r\n });\r\n } else if ($scope.paymentAccountKey === 0)\r\n {//New\r\n $scope.WebPaymentAccount = new CustomerPaymentAccount(\r\n {\r\n CustKey: $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n CreatedByCustContKey: $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n LastModifiedByCustContKey: $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n AccountStatus: 0,\r\n AccountStatusDesc: localStrings.getLocalizedString(\"New\"),\r\n Key: 0\r\n }\r\n );\r\n $scope.editableAccount = true;\r\n }\r\n };\r\n\r\n $scope.routingNumberIsValid = false;\r\n\r\n $scope.setAccountStatus = function (status)\r\n {\r\n if (status !== 0 && status !== 8)\r\n return;\r\n PaymentAccountService.getPaymentAccount($scope.WebPaymentAccount.Key, $scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.WebPaymentAccount = data;\r\n $scope.WebPaymentAccount.AccountStatus = status;\r\n PaymentAccountService.savePaymentAccount($scope.WebPaymentAccount).then(\r\n function (data)\r\n {\r\n $scope.WebPaymentAccount = data;//refresh once you save to update timestamps\r\n $scope.goTo('Account/Payments/ViewPaymentAccounts');\r\n },\r\n function (data)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AddAccount\"), localStrings.getLocalizedString(\"ErrorSavingAccount\") + data);\r\n }\r\n );\r\n });\r\n };\r\n\r\n $scope.verifyPaymentAccount = function ()\r\n {\r\n if ($scope.editableAccount)\r\n {\r\n $scope.WebPaymentAccount.AccountTypeDescr = $scope.AccountTypes[$scope.WebPaymentAccount.AccountType].descr;\r\n PaymentAccountService.validateRoutingNumber($scope.WebPaymentAccount.BankRoutingNo).then(\r\n function (data)\r\n {\r\n $scope.routingNumberIsValid = true;\r\n $scope.verifyPaymentAccountOverride();\r\n },\r\n function (error)\r\n {\r\n $scope.routingNumberIsValid = false;\r\n $scope.verifyPaymentAccountOverride();\r\n });\r\n } else\r\n {\r\n $scope.verifyPaymentAccountOverride();\r\n }\r\n };\r\n\r\n $scope.verifyPaymentAccountOverride = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n PaymentAccountService.WebPaymentAccount = $scope.WebPaymentAccount;\r\n $scope.$cancelPromptToSave();\r\n $scope.goTo(\"/Account/Payments/VerifyPaymentAccount\");\r\n };\r\n\r\n var routingNumberValidation =\r\n {\r\n name: 'validateRoutingNumber',\r\n validationMessage: localStrings.getLocalizedString(\"InvalidRoutingNumber\"),\r\n validatorError: function (val)\r\n {\r\n return $scope.routingNumberIsValid;\r\n }\r\n };\r\n\r\n $scope.validateRoutingNumber = new pdi.ng.validate.PdiValidation(routingNumberValidation);\r\n\r\n $scope.confirmDeactivate = function ()\r\n {\r\n var yes = function ()\r\n {\r\n $scope.setAccountStatus(8);\r\n };\r\n\r\n var no = function ()\r\n {\r\n return;\r\n };\r\n\r\n $scope.modalifier.confirm(localStrings.getLocalizedString(\"DeactivateAccount\"), yes, no);\r\n };\r\n\r\n $scope.confirmClose = function ()\r\n {\r\n var no = function ()\r\n {\r\n $scope.goTo('Account/Payments/ViewPaymentAccounts');\r\n };\r\n\r\n if ($scope.acctInfo.$dirty)\r\n {\r\n $scope.modalifier.confirm(localStrings.getLocalizedString(\"UnsavedChanges\"), $scope.verifyPaymentAccount, no);\r\n }\r\n else\r\n no();\r\n };\r\n })\r\n .controller(\"VerifyAccountCtrl\", function ($scope, $http, $q, $routeParams, $filter, PaymentAccountService, validatorSvc, WebFunctions, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.customText = \"\";\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"8\";\r\n\r\n $scope.WebPaymentAccount = PaymentAccountService.WebPaymentAccount;\r\n };\r\n\r\n $scope.routingNumberIsValid = false;\r\n\r\n $scope.confirmPaymentAccount = function ()\r\n {\r\n PaymentAccountService.savePaymentAccount($scope.WebPaymentAccount).then(\r\n function (data)\r\n {\r\n $scope.goTo(\"/Account/Payments/ConfirmPaymentAccount/\" + data.Key);\r\n },\r\n function (data)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AddAccount\"), localStrings.getLocalizedString(\"ErrorSavingAccount\") + data);\r\n }\r\n );\r\n };\r\n\r\n $scope.changePaymentAccount = function ()\r\n {\r\n $scope.goTo(\"/Account/Payments/EditPaymentAccount/-1\");\r\n };\r\n })\r\n .controller(\"ConfirmAccountCtrl\", function ($scope, $http, $q, $routeParams, $filter, PaymentAccountService, WebFunctions, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.AccountTypes =\r\n [\r\n { key: 0, descr: localStrings.getLocalizedString(\"Checking\") },\r\n { key: 1, descr: localStrings.getLocalizedString(\"Savings\") }\r\n ];\r\n $scope.paymentAccountKey = 0;\r\n $scope.customText = \"\";\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"9\";\r\n\r\n if ($routeParams.paymentAccountKey)\r\n {\r\n $scope.paymentAccountKey = $routeParams.paymentAccountKey;\r\n }\r\n\r\n if ($routeParams.paymentAccountKey <= 0)\r\n {\r\n $scope.goTo(\"/Home\");\r\n } else if ($routeParams.paymentAccountKey > 0)\r\n {\r\n PaymentAccountService.getPaymentAccount($scope.paymentAccountKey, $scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.WebPaymentAccount = data;\r\n $scope.WebPaymentAccount.AccountTypeDescr = $scope.AccountTypes[$scope.WebPaymentAccount.AccountType].descr;\r\n $scope.WebPaymentAccount.AccountNoVerify = $scope.WebPaymentAccount.AccountNo;\r\n });\r\n }\r\n };\r\n })\r\n .controller(\"AccountVerificationCtrl\", function ($scope, PaymentAccountService, $filter, validatorSvc, WebFunctions, $routeParams, templates)\r\n {\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n $scope.goTo(\"/Home\");\r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n\r\n $scope.appInfo.verifyAccount = {};\r\n validatorSvc.clearValidationScopes();\r\n if ($routeParams.paymentAccountKey)\r\n $scope.appInfo.verifyAccount.webPaymentAccountKey = $routeParams.paymentAccountKey;\r\n else\r\n $scope.goTo(\"/Account/Payments/ViewPaymentAccounts\");\r\n\r\n $scope.appInfo.verifyAccount = {};\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n\r\n PaymentAccountService.getPaymentAccountList($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.appInfo.verifyAccount.webPaymentAccountDesc = $filter(\"filter\")(data, {Key: $scope.appInfo.verifyAccount.webPaymentAccountKey})[0].Description;\r\n $scope.appInfo.verifyAccount.WebPaymentAccounts = $filter(\"filter\")(data, {AccountStatus: 4});\r\n });\r\n $scope.getWebProfileMessage(15);\r\n };\r\n\r\n $scope.verifyPaymentAccount = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n $scope.goTo(\"/Account/Payments/PaymentAccountVerificationVerify/\" + $routeParams.paymentAccountKey);\r\n };\r\n })\r\n .controller(\"AccountVerificationVerificationCtrl\", function ($scope, PaymentAccountService, $filter, validatorSvc, WebFunctions, $routeParams, templates)\r\n {\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n $scope.goTo(\"/Home\");\r\n\r\n if ($routeParams.paymentAccountKey)\r\n $scope.appInfo.verifyAccount.webPaymentAccountKey = $routeParams.paymentAccountKey;\r\n else\r\n $scope.goTo(\"/Account/Payments/ViewPaymentAccounts\");\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n\r\n $scope.getWebProfileMessage(15);\r\n };\r\n\r\n $scope.confirmPaymentAccount = function ()\r\n {\r\n PaymentAccountService.getPaymentAccount($scope.appInfo.verifyAccount.webPaymentAccountKey, $scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n var amt1 = parseFloat($scope.appInfo.verifyAccount.amount1);\r\n var amt2 = parseFloat($scope.appInfo.verifyAccount.amount2);\r\n if ((data.VerificationAmount1 !== amt1 && data.VerificationAmount1 !== amt2) ||\r\n (data.VerificationAmount2 !== amt1 && data.VerificationAmount2 !== amt2))\r\n {\r\n data.AccountStatus = 6;\r\n PaymentAccountService.savePaymentAccount(data);\r\n $scope.goTo(\"/Account/Payments/PaymentAccountVerificationFailure/\");\r\n return;\r\n }\r\n data.AccountStatus = 7;\r\n PaymentAccountService.savePaymentAccount(data);\r\n $scope.goTo(\"/Account/Payments/PaymentAccountVerificationConfirmation/\" + $routeParams.paymentAccountKey);\r\n });\r\n };\r\n\r\n $scope.verifyPaymentAccount = function ()\r\n {\r\n $scope.goTo(\"/Account/Payments/PaymentAccountVerification/\" + $routeParams.paymentAccountKey);\r\n };\r\n\r\n })\r\n .controller(\"AccountVerificationConfirmationCtrl\", function ($scope, PaymentAccountService, $filter, validatorSvc, WebFunctions, $routeParams, templates)\r\n {\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n $scope.goTo(\"/Home\");\r\n\r\n if (!$routeParams.paymentAccountKey)\r\n $scope.goTo(\"/Account/Payments/ViewPaymentAccounts\");\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n\r\n PaymentAccountService.getPaymentAccountList($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.appInfo.verifyAccount.WebPaymentAccounts = $filter(\"filter\")(data, {AccountStatus: 4});\r\n });\r\n $scope.getWebProfileMessage(16);\r\n };\r\n })\r\n .controller(\"AccountVerificationFailCtrl\", function ($scope, PaymentAccountService, $filter, validatorSvc, WebFunctions, $routeParams, templates)\r\n {\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts))\r\n $scope.goTo(\"/Home\");\r\n\r\n $scope.appInfo.verifyAccount = {};\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n\r\n PaymentAccountService.getPaymentAccountList($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.appInfo.verifyAccount.WebPaymentAccounts = $filter(\"filter\")(data, {AccountStatus: 4});\r\n });\r\n $scope.getWebProfileMessage(17);\r\n };\r\n });","/**\r\n * Created by rhampton on 8/13/2014.\r\n */\r\nangular.module(\"pnAdmin\", ['ngSanitize', 'core.objects', 'services.payments', 'core.directives', 'core.enums','core.security'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider.when(\"/Account/Profile/YourProfile\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"YourProfile\"),\r\n controller: \"EditUserCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n ).when(\"/Account/Profile/YourProfile/:contactKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"YourProfile\"),\r\n controller: \"EditUserCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n ).when(\"/Account/Profile/Contacts\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Contacts\"),\r\n controller: \"ListContactsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n ).when(\"/Account/Profile/AddContact\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"AddContact\"),\r\n controller: \"AddUserCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n ).when(\"/Account/Profile/AccountSettings\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"AccountSettings\"),\r\n controller: \"AccountSettingsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n ).when(\"/Account/Profile/ResetPassword\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ProfileResetPassword\"),\r\n controller: \"SetPasswordCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n ).when(\"/Account/Profile/AuditLog\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"AuditLog\"),\r\n controller: \"auditLogCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n );\r\n })//AccountSettings\r\n .controller(\"ProfileSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n\r\n };\r\n\r\n })\r\n .controller(\"ListContactsCtrl\", function ($scope, userAccountService, WebFunctions, $filter, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.contactsGrid = {};\r\n $scope.kendo.contactsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var selectedRows = this.select();\r\n var dataItem = this.dataItem(selectedRows[0]);\r\n $scope.goTo(\"/Account/Profile/YourProfile/\" + dataItem.Key);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"DisplayName\",\r\n title: localStrings.getLocalizedString(\"Contact\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"EmailAddress\",\r\n title: localStrings.getLocalizedString(\"Email\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"WebActive\",\r\n title: localStrings.getLocalizedString(\"Active\"),\r\n width: 50,\r\n template: \"\",\r\n filterable: false\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n //height: $(document).height() - 375,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.contactsGridInit = function ()\r\n {\r\n $scope.kendo.contactsGridDS = new kendo.data.DataSource({\r\n data: $scope.CustomerContacts,\r\n schema: {\r\n model: {\r\n fields: {\r\n DisplayName: {\r\n editable: false\r\n },\r\n EmailAddress: {\r\n editable: false\r\n },\r\n WebActive: {\r\n editable: false\r\n }\r\n }\r\n }\r\n },\r\n batch: true\r\n });\r\n\r\n $scope.kendo.contactsGridDS.read();\r\n $scope.kendo.contactsGrid.dataSource.data($scope.kendo.contactsGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.ManageContactsAndSecurity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ProfileSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n $scope.CustomerContacts = [];\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.CustomerContacts.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"Contacts\"));\r\n return;\r\n }\r\n\r\n angular.forEach(data.CustomerContacts, function (item)\r\n {\r\n item.DisplayName = item.FirstName + ' ' + item.LastName;\r\n });\r\n $scope.CustomerContacts = $filter('orderBy')(data.CustomerContacts, 'DisplayName');\r\n $scope.kendo.contactsGridInit();\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n };\r\n })\r\n .controller(\"EditUserCtrl\", function ($q, $scope, $filter, WebFunctions, userAccountService, constantLists, $route, $routeParams, WebUserSvc, validatorSvc, $location, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.data = {};\r\n $scope.kendo = {};\r\n\r\n function expandWFGrids(expand)\r\n {\r\n $scope.showAccountFNs = expand;\r\n $scope.showFuelFNs = expand;\r\n $scope.showOrdersFNs = expand;\r\n $scope.showPaperworkFNs = expand;\r\n $scope.showCustomPagesFNs = expand;\r\n }\r\n\r\n function setDependancies()\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty($scope.data.CustomerContact) || $scope.data.CustomerContact.AllWebFunctions)\r\n return;\r\n\r\n var wbfns = $scope.data.CustomerContact.CustomerContactWebFunctions;\r\n\r\n angular.forEach(wbfns, function (item)\r\n {\r\n switch (item.WebFnKey)\r\n {\r\n case 5:\r\n //View Cards => Edit cards\r\n var view = $filter('filter')(wbfns, {WebFnKey: 4}, true)[0];\r\n if (view.Selected)\r\n {\r\n item.Disabled = false;\r\n }\r\n else\r\n {\r\n item.Selected = false;\r\n item.Disabled = true;\r\n }\r\n break;\r\n\r\n case 6:\r\n //View Card Transactions => View Card Transactions Alerts\r\n var trans = $filter('filter')(wbfns, {WebFnKey: 3}, true)[0];\r\n if (trans.Selected)\r\n {\r\n item.Disabled = false;\r\n }\r\n else\r\n {\r\n item.Selected = false;\r\n item.Disabled = true;\r\n }\r\n break;\r\n\r\n case 15:\r\n //Acount Activity => View Credit Info\r\n var acct = $filter('filter')(wbfns, {WebFnKey: 1}, true)[0];\r\n if (acct.Selected)\r\n {\r\n item.Disabled = false;\r\n }\r\n else\r\n {\r\n item.Selected = false;\r\n item.Disabled = true;\r\n }\r\n break;\r\n }\r\n });\r\n }\r\n\r\n $scope.$watch(\"data.CustomerContact.CustomerContactWebFunctions\", setDependancies, true);\r\n\r\n $scope.textMessagePhoneNumbers = [\r\n {\r\n value: -1,\r\n text: localStrings.getLocalizedString(\"None\")\r\n },\r\n {\r\n value: 0,\r\n text: localStrings.getLocalizedString(\"Phone\")\r\n },\r\n {\r\n value: 1,\r\n text: localStrings.getLocalizedString(\"AltPhone\")\r\n },\r\n {\r\n value: 2,\r\n text: localStrings.getLocalizedString(\"AltPhone2\")\r\n }\r\n ];\r\n\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n $scope.checkForAppliedProfile();\r\n\r\n if (!$scope.appInfo) $scope.appInfo = {};\r\n\r\n $scope.appInfo.editUser = {\r\n modalMultiSave: {\r\n shown: false\r\n },\r\n modalCopySecurity: {\r\n shown: false,\r\n copyContact: {},\r\n clearSecurity: false\r\n },\r\n modalResetPassword: {\r\n shown: false,\r\n controls: {\r\n password: '',\r\n verify: '',\r\n displayTitle: localStrings.getLocalizedString(\"EnterVerifyPassword\")\r\n },\r\n webUser: {\r\n Timestamp: '',\r\n Answer: '',\r\n AnswerClear: '',\r\n GUID: '',\r\n Id: '',\r\n Key: '',\r\n Password: '',\r\n PasswordClear: '',\r\n Question: '',\r\n Reset: '',\r\n Validated: ''\r\n },\r\n error: {\r\n display: false,\r\n text: ''\r\n }\r\n },\r\n modalChangeEmail: {\r\n shown: $location.hash() === 'Email',\r\n email: \"\",\r\n pendingSave: false\r\n }\r\n };\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ProfileSideMenu\");\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"1\"\r\n };\r\n\r\n $scope.phoneTypes = constantLists.phoneTypes(localStrings);\r\n $scope.secretQuestions = constantLists.secretQuestions(localStrings);\r\n $scope.data = {};\r\n $scope.kendo = {};\r\n\r\n $scope.clearButton = {\r\n clearButton: false\r\n };\r\n\r\n $scope.canResetPassword = (!angular.isUndefinedOrNullOrEmpty($scope.appInfo.passwordComplexity) && !$scope.appInfo.passwordComplexity.EnforcePasswordComplexity) ||\r\n (WebUserSvc.getNextPasswordResetDate($scope.appInfo.webUser) < 0);\r\n\r\n $scope.hideActiveCheckbox = $scope.hideWebActiveControl($scope.$parent.webFunctions);\r\n\r\n if ($routeParams.contactKey)\r\n {\r\n $scope.customerContactKey = $routeParams.contactKey;\r\n $scope.editWebUser = parseInt($scope.customerContactKey, 10) === $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.Key;\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n //If we are managing someone other than ourselves we need to check to see if the user has permissions.\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.ManageContactsAndSecurity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n }\r\n else\r\n {\r\n $scope.editWebUser = true;\r\n $scope.customerContactKey = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.Key;\r\n $scope.appInfo.webUser.AnswerClear = $scope.appInfo.webUser.Answer;\r\n $scope.appInfo.webUser.AnswerClear2 = $scope.appInfo.webUser.Answer;\r\n $scope.copyUser();\r\n }\r\n\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.CustomerContacts.length === 0)\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"Contacts\"));\r\n\r\n angular.forEach(data.CustomerContacts, function (item)\r\n {\r\n item.DisplayName = item.FirstName + ' ' + item.LastName;\r\n });\r\n $scope.CopyContacts = $filter('orderBy')(data.CustomerContacts, 'DisplayName');\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n\r\n userAccountService.loadContactContext($scope.customerContactKey).then(function (data)\r\n {\r\n data.CustomerContact.WebQuestionAnswer2 = data.CustomerContact.WebQuestionAnswer;\r\n if(data.CustomerContact.TextAddressPhone == null) data.CustomerContact.TextAddressPhone = -1;\r\n\r\n $scope.data = data;\r\n $scope.setAllWebFunctions(false);\r\n setTimeout(function ()\r\n {\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.editUserForm)) {\r\n $scope.$apply($scope.editUserForm.$setPristine());\r\n }\r\n }, 1500);\r\n });\r\n };\r\n\r\n $scope.copyUser = function ()\r\n {\r\n $scope.appInfo.editUser.modalResetPassword.webUser =\r\n {\r\n Timestamp: $scope.appInfo.webUser.Timestamp,\r\n Answer: $scope.appInfo.webUser.Answer,\r\n AnswerClear: $scope.appInfo.webUser.AnswerClear,\r\n GUID: $scope.appInfo.webUser.Guid,\r\n Id: $scope.appInfo.webUser.Id,\r\n Key: $scope.appInfo.webUser.Key,\r\n Password: $scope.appInfo.webUser.Password,\r\n PasswordClear: $scope.appInfo.webUser.Password,\r\n Question: $scope.appInfo.webUser.Question,\r\n Reset: true,\r\n Validated: false\r\n };\r\n };\r\n\r\n $scope.hideWebActiveControl = function (wbFns) {\r\n return $scope.checkCurrentUserPermission(WebFunctions.ManageContactsAndSecurity) ? false : true;\r\n };\r\n\r\n $scope.setAllWebFunctions = function (expand)\r\n {\r\n if ($scope.data.CustomerContact.AllWebFunctions)\r\n {\r\n angular.forEach($scope.data.CustomerContact.CustomerContactWebFunctions, function (item)\r\n {\r\n item.Selected = true;\r\n item.Disabled = true;\r\n });\r\n }\r\n else\r\n {\r\n angular.forEach($scope.data.CustomerContact.CustomerContactWebFunctions, function (item)\r\n {\r\n item.Disabled = false;\r\n });\r\n }\r\n expandWFGrids(expand);\r\n };\r\n\r\n $scope.saveContact = function ()\r\n {\r\n validatorSvc.executeValidations();\r\n\r\n //Validations for both Your Profile and Contacts pages\r\n if ($('#editUserAltEmail').hasClass('validation-error') || $('#editUserEmail').hasClass('validation-error'))\r\n return;\r\n\r\n //Validations only for the Your Profile page\r\n if ($scope.editWebUser)\r\n {\r\n if ($scope.kendo.secretQuestion.$angular_scope.scopeValidationErrors.length > 0)\r\n {\r\n return;\r\n }\r\n\r\n }\r\n\r\n if ($scope.data.MatchingContactCount > 1)\r\n {\r\n $scope.appInfo.editUser.modalMultiSave.shown = true;\r\n return;\r\n }\r\n $scope.saveContactOnly();\r\n };\r\n\r\n /*\r\n * Save contat only and save all contacts will still update the names on all contacts sharing the\r\n * current email address.\r\n * */\r\n $scope.saveContactOnly = function ()\r\n {\r\n $scope.data.CustomerContact.ApplyToAll = false;\r\n $scope.appInfo.editUser.modalMultiSave.shown = false;\r\n $scope.save();\r\n };\r\n\r\n $scope.saveAllContacts = function ()\r\n {\r\n $scope.data.CustomerContact.ApplyToAll = true;\r\n $scope.appInfo.editUser.modalMultiSave.shown = false;\r\n $scope.save();\r\n };\r\n\r\n $scope.save = function ()\r\n {\r\n var contact = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact;\r\n $scope.data.CustomerContact.EditorName = contact.FirstName + \" \" + contact.LastName;\r\n $scope.data.CustomerContact.EditorEmailAddress = $scope.appInfo.webUser.Id;\r\n\r\n $scope.data.CustomerContact.PhoneFormatted = $filter('tel')($scope.data.CustomerContact.Phone);\r\n $scope.data.CustomerContact.AltPhoneFormatted = $filter('tel')($scope.data.CustomerContact.AltPhone);\r\n $scope.data.CustomerContact.AltPhone2Formatted = $filter('tel')($scope.data.CustomerContact.AltPhone2);\r\n $scope.data.CustomerContact.FAXFormatted = $filter('tel')($scope.data.CustomerContact.FAX);\r\n\r\n userAccountService.saveContact($scope.data.CustomerContact).then(function (data)\r\n {\r\n $scope.data.CustomerContact = data.CustomerContact;\r\n if ($scope.appInfo.webUser.Answer !== $scope.appInfo.webUser.AnswerClear)\r\n $scope.saveWebUser();\r\n else\r\n {\r\n if($scope.appInfo.editUser.modalChangeEmail.pendingSave)\r\n $scope.logout();\r\n else\r\n $route.reload();\r\n }\r\n\r\n });\r\n };\r\n\r\n //This part get's messy because we need to save the web user and relaod it into the current application scope\r\n //with out bothering the users...\r\n $scope.saveWebUser = function ()\r\n {\r\n /*If this isn;t the current logged in contact dont update the web user informtion.\r\n This shouldn;t be possible anyway.*/\r\n if (!$scope.editWebUser) return;\r\n\r\n var webUser = angular.copy($scope.appInfo.webUser);\r\n webUser.Id = $scope.data.CustomerContact.EmailAddress;\r\n webUser.Question = $scope.appInfo.webUser.Question;\r\n webUser.AnswerClear = $scope.appInfo.webUser.AnswerClear;\r\n\r\n var token = WebUserSvc.getLoggedInWebUserToken();\r\n WebUserSvc.retrieveWebUserData(token, $scope.appInfo.profileKey).then(function (data) {\r\n webUser.Timestamp = data.Timestamp;\r\n webUser.GUID = null;\r\n\r\n WebUserSvc.saveWebUser(webUser, false).then(function (data) {\r\n var currentCustomerId = $scope.appInfo.webUser.CurrentAuthorization.Customer.ID;\r\n WebUserSvc.retrieveSelectedProfile($scope.appInfo.webUser.Id, $scope.appInfo.profileKey).then(function (data) {\r\n $scope.appInfo.webUser = data;\r\n\r\n if ($scope.appInfo.editUser.modalChangeEmail.pendingSave)\r\n $scope.logout();\r\n else\r\n $route.reload();\r\n });\r\n });\r\n });\r\n };\r\n\r\n $scope.setEditUserSelectedAuthorization = function (id)\r\n {\r\n for (var x = 0; x < $scope.appInfo.webUser.WebAuthorizations.length; x++)\r\n {\r\n if ($scope.appInfo.webUser.WebAuthorizations[x].Customer.ID === id)\r\n {\r\n $scope.appInfo.webUser.CurrentAuthorization = $scope.appInfo.webUser.WebAuthorizations[x];\r\n return;\r\n }\r\n }\r\n };\r\n\r\n $scope.updateContactSecurity = function ()\r\n {\r\n var customerContactKey = $scope.appInfo.editUser.modalCopySecurity.copyContact;\r\n userAccountService.loadContactContext(customerContactKey).then(function (data)\r\n {\r\n var webFunctions = data.CustomerContact.CustomerContactWebFunctions;\r\n var currentContactWebFunctions = $scope.data.CustomerContact.CustomerContactWebFunctions;\r\n $scope.data.CustomerContact.AllWebFunctions = true;\r\n for (var i = 0; i < webFunctions.length; i++)\r\n {\r\n for (var x = 0; x < currentContactWebFunctions.length; x++)\r\n {\r\n if (currentContactWebFunctions[x].WebFnKey === webFunctions[i].WebFnKey)\r\n {\r\n if ($scope.appInfo.editUser.modalCopySecurity.clearSecurity)\r\n currentContactWebFunctions[x].Selected = false;\r\n if (webFunctions[i].Selected)\r\n currentContactWebFunctions[x].Selected = true;\r\n if (!currentContactWebFunctions[x].Selected)\r\n $scope.data.CustomerContact.AllWebFunctions = false;\r\n }\r\n }\r\n }\r\n expandWFGrids(false);\r\n $scope.appInfo.editUser.modalCopySecurity.shown = false;\r\n });\r\n };\r\n\r\n $scope.resetPassword = function ()\r\n {\r\n $scope.goTo('/Account/Profile/ResetPassword');\r\n };\r\n\r\n $scope.questionChanged = function (e)\r\n {\r\n if ($scope.kendo.secretQuestion.$angular_scope.$parent.editUserForm.question.$dirty)\r\n {\r\n $scope.appInfo.webUser.AnswerClear = '';\r\n $scope.appInfo.webUser.AnswerClear2 = '';\r\n }\r\n };\r\n\r\n $scope.showChangeEmailModal = function()\r\n {\r\n if ($location.hash() === 'Email')\r\n {\r\n $route.reload();\r\n } else\r\n {\r\n $location.hash('Email');\r\n }\r\n };\r\n\r\n $scope.hideChangeEmailModal = function()\r\n {\r\n $location.hash('');\r\n };\r\n\r\n $scope.saveChangeEmail = function()\r\n {\r\n validatorSvc.executeValidations();\r\n if ($('#changeEmail').hasClass('validation-error'))\r\n return;\r\n\r\n $scope.appInfo.editUser.modalChangeEmail.shown = false;\r\n $scope.appInfo.editUser.modalChangeEmail.pendingSave = true;\r\n $scope.data.CustomerContact.EmailAddress = $scope.appInfo.editUser.modalChangeEmail.email;\r\n $scope.saveContact();\r\n };\r\n })\r\n .controller(\"AddUserCtrl\", function ($q, $scope, $filter, WebFunctions, userAccountService, validatorSvc, $routeParams, WebUserSvc, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.appInfo.addUser = {\r\n shown: true,\r\n copyContacts: [],\r\n contact: userAccountService.getBlankContact()\r\n };\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.ManageContactsAndSecurity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ProfileSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.CustomerContacts.length === 0)\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"AddContact\"));\r\n\r\n angular.forEach(data.CustomerContacts, function (item)\r\n {\r\n item.DisplayName = item.FirstName + ' ' + item.LastName;\r\n });\r\n $scope.appInfo.addUser.copyContacts = $filter('orderBy')(data.CustomerContacts, 'DisplayName');\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n $scope.appInfo.addUser.shown = true;\r\n };\r\n\r\n $scope.createContact = function ()\r\n {\r\n var validationsPassed = true;\r\n if (!validatorSvc.executeValidations()) {\r\n //Bypass shared scope validations with Contacts/Your Profile pages; we only care about add new contact validations\r\n angular.forEach($scope.scopeValidationErrors, function (value, key) {\r\n if (value.model !== \"data.CustomerContact.EmailAddress\")\r\n validationsPassed = false;\r\n });\r\n }\r\n\r\n if (!validationsPassed)\r\n return;\r\n\r\n if ($scope.updateContactSecurity())\r\n return;\r\n\r\n var contact = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact;\r\n $scope.appInfo.addUser.contact.EditorName = contact.FirstName + \" \" + contact.LastName;\r\n $scope.appInfo.addUser.contact.EditorEmailAddress = $scope.appInfo.webUser.Id;\r\n $scope.appInfo.addUser.contact.CustKey = $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n\r\n userAccountService.saveContact($scope.appInfo.addUser.contact).then(function (data)\r\n {\r\n $scope.appInfo.addUser.shown = false;\r\n\r\n if(data.CustomerContact && data.CustomerContact.CustKey === 0)\r\n {\r\n $scope.goTo(\"Account/Profile/Contacts\");\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AddNewContact\"),\r\n localStrings.getLocalizedString(\"NewContactNotCreated\"));\r\n }\r\n else\r\n {\r\n $scope.goTo(\"/Account/Profile/YourProfile/\" + data.CustomerContact.Key);\r\n }\r\n });\r\n\r\n };\r\n\r\n $scope.updateContactSecurity = function ()\r\n {\r\n if (!$scope.appInfo.addUser.copyContact) return false;\r\n //if (!$scope.appInfo.addUser.copyContact.Key) return false;\r\n\r\n var customerContactKey = $scope.appInfo.addUser.copyContact;\r\n userAccountService.loadContactContext(customerContactKey).then(function (data)\r\n {\r\n $scope.appInfo.addUser.contact.CustomerContactWebFunctions = data.CustomerContact.CustomerContactWebFunctions;\r\n $scope.appInfo.addUser.contact.AllWebFunctions = data.CustomerContact.AllWebFunctions;\r\n var contact = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact;\r\n $scope.appInfo.addUser.contact.EditorName = contact.FirstName + \" \" + contact.LastName;\r\n $scope.appInfo.addUser.contact.EditorEmailAddress = $scope.appInfo.webUser.Id;\r\n $scope.appInfo.addUser.contact.CustKey = $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n userAccountService.saveContact($scope.appInfo.addUser.contact).then(function (data)\r\n {\r\n $scope.appInfo.addUser.shown = false;\r\n\r\n if (data.CustomerContact && data.CustomerContact.CustKey === 0) {\r\n $scope.goTo(\"Account/Profile/Contacts\");\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AddNewContact\"),\r\n localStrings.getLocalizedString(\"NewContactNotCreated\"));\r\n }\r\n else {\r\n $scope.goTo(\"/Account/Profile/YourProfile/\" + data.CustomerContact.Key);\r\n }\r\n });\r\n });\r\n return true;\r\n };\r\n\r\n $scope.closeAddUser = function ()\r\n {\r\n $scope.appInfo.addUser.shown = false;\r\n $scope.appInfo.addUser = {};\r\n $scope.goTo(\"/Account/Profile/Contacts\");\r\n };\r\n })\r\n .controller(\"AccountSettingsCtrl\", function ($scope, $filter, WebFunctions, userAccountService, validatorSvc, customerService, WebUserSvc, templates, localStrings, globalizationSvc)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.ViewCreditInformation))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ProfileSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"4\";\r\n $scope.appInfo.pageInfo = {\r\n contacts: [],\r\n primaryCreditContact: 0,\r\n sendBalanceAlerts: $scope.appInfo.webUser.CurrentAuthorization.Customer.SendBalanceAlerts !== 0,\r\n sendBalanceAlertText: localStrings.getLocalizedString(\"SendAlertsBalanceExceeds\"),\r\n balanceAlertThreshold: $scope.appInfo.webUser.CurrentAuthorization.Customer.BalanceAlertThreshold,\r\n prepaidBalance: $scope.appInfo.webUser.CurrentAuthorization.Customer.CrPrePaidBalance !== 0,\r\n balanceAlertThresholdDisplay: globalizationSvc.formatCurrency($scope.appInfo.webUser.CurrentAuthorization.Customer.BalanceAlertThreshold)\r\n };\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.CustomerContacts.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"AccountSettings\"));\r\n }\r\n else\r\n {\r\n angular.forEach(data.CustomerContacts, function (item) {\r\n item.DisplayName = item.FirstName + ' ' + item.LastName;\r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.Customer.CreditContKey === item.Key) {\r\n $scope.appInfo.pageInfo.primaryCreditContact = item.Key;\r\n }\r\n });\r\n $scope.appInfo.pageInfo.contacts = $filter('orderBy')(data.CustomerContacts, 'DisplayName');\r\n $scope.appInfo.pageInfo.primaryCreditContact = ($scope.appInfo.pageInfo.primaryCreditContact === 0) ? $scope.appInfo.pageInfo.contacts[0].Key\r\n : $scope.appInfo.pageInfo.primaryCreditContact;\r\n }\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n if ($scope.appInfo.pageInfo.prepaidBalance)\r\n $scope.appInfo.pageInfo.sendBalanceAlertText = localStrings.getLocalizedString(\"SendAlertsBalanceBelow\");\r\n };\r\n\r\n // This method is used to format the text of the input box whenever we lose focus\r\n $scope.formatCurrency = function ()\r\n {\r\n // If the text is empty or null then do not try to format it\r\n if (angular.isUndefinedOrNullOrEmpty($scope.appInfo.pageInfo.balanceAlertThresholdDisplay))\r\n return;\r\n\r\n // Convert the string to a number and parse it as a float\r\n var num = parseFloat(globalizationSvc.convertStringToNumber($scope.appInfo.pageInfo.balanceAlertThresholdDisplay));\r\n\r\n // Format the number back into a currency string to be displayed\r\n num = globalizationSvc.formatCurrency(num);\r\n\r\n // Set the display value to the currency string\r\n $scope.appInfo.pageInfo.balanceAlertThresholdDisplay = num;\r\n };\r\n\r\n $scope.saveAccountSettings = function ()\r\n {\r\n validatorSvc.clearAllValidations();\r\n\r\n if ($scope.appInfo.pageInfo.sendBalanceAlerts && !validatorSvc.executeValidations())\r\n return;\r\n\r\n // Convert the display value to a number and parse it as a float so we can save a number and not some currency string\r\n $scope.appInfo.pageInfo.balanceAlertThreshold = parseFloat(globalizationSvc.convertStringToNumber($scope.appInfo.pageInfo.balanceAlertThresholdDisplay));\r\n\r\n customerService.saveCustomerAccountSettings($scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.appInfo.pageInfo.primaryCreditContact,\r\n $scope.appInfo.pageInfo.balanceAlertThreshold,\r\n $scope.appInfo.pageInfo.sendBalanceAlerts).then(function (data)\r\n {\r\n $scope.resetDirtyFlags($scope.settingsForm);\r\n //Reload the web user once customer data has been changed.\r\n var currentCustomerId = $scope.appInfo.webUser.CurrentAuthorization.Customer.ID;\r\n WebUserSvc.retrieveSelectedProfile($scope.appInfo.webUser.Id, $scope.appInfo.profileKey).then(function (data)\r\n {\r\n $scope.appInfo.webUser = data;\r\n for (var x = 0; x < $scope.appInfo.webUser.WebAuthorizations.length; x++)\r\n {\r\n if ($scope.appInfo.webUser.WebAuthorizations[x].Customer.ID === currentCustomerId)\r\n {\r\n $scope.appInfo.webUser.CurrentAuthorization = $scope.appInfo.webUser.WebAuthorizations[x];\r\n return;\r\n }\r\n }\r\n $scope.initialize();\r\n });\r\n // This will function will call will take whatever was saved and convert it back to a currency string to be displayed after save\r\n $scope.formatCurrency();\r\n });\r\n };\r\n })\r\n .controller(\"SetPasswordCtrl\", function ($scope, Authentication, $filter, WebFunctions, userAccountService, validatorSvc, customerService, WebUserSvc, WebProfileService, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.appInfo) $scope.appInfo = {};\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ProfileSideMenu\");\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"1\"\r\n };\r\n\r\n var profileKey = ($scope.appInfo && $scope.appInfo.profileKey) ? $scope.appInfo.profileKey : 0;\r\n WebProfileService.getWebProfileMessage(profileKey, 27).then(function (data)\r\n {\r\n $scope.customMessage = data.isBlank() ? localStrings.getLocalizedString(\"ExpiredPassword\") : data;\r\n });\r\n\r\n $scope.appInfo.pageInfo = {\r\n controls: {\r\n oldPassword: '',\r\n password: '',\r\n verify: '',\r\n displayTitle: localStrings.getLocalizedString(\"EnterVerifyPassword\")\r\n },\r\n webUser: {\r\n Timestamp: $scope.appInfo.webUser.Timestamp,\r\n Answer: $scope.appInfo.webUser.Answer,\r\n AnswerClear: $scope.appInfo.webUser.AnswerClear,\r\n GUID: $scope.appInfo.webUser.Guid,\r\n Id: $scope.appInfo.webUser.Id,\r\n Key: $scope.appInfo.webUser.Key,\r\n Password: $scope.appInfo.webUser.Password,\r\n OldPassword: '',\r\n PasswordClear: '',\r\n Question: $scope.appInfo.webUser.Question,\r\n Reset: false, // password reset is only true for forgot password and false for change password\r\n Validated: false\r\n },\r\n error: {\r\n display: false,\r\n text: ''\r\n },\r\n success: false\r\n };\r\n };\r\n\r\n $scope.submitPassword = function ()\r\n {\r\n //$scope.resetPassword.error = [];\r\n\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n $scope.setNewPassword();\r\n };\r\n\r\n $scope.setNewPassword = function ()\r\n {\r\n\r\n $scope.appInfo.pageInfo.webUser.OldPassword = $scope.appInfo.pageInfo.controls.oldPassword;\r\n $scope.appInfo.pageInfo.webUser.PasswordClear = $scope.appInfo.pageInfo.controls.password;\r\n\r\n WebUserSvc.resetWebUserPassword($scope.appInfo.pageInfo.webUser).then(\r\n function (data)\r\n {\r\n //store the new webuser record so the timestamps match the db\r\n $scope.appInfo.pageInfo.webUser = data;\r\n\r\n if (data.Validated === true)\r\n {\r\n // If password reset was successful then we need to login again since we dont store anything in local storage so we need a new token.\r\n Authentication.login($scope.appInfo.webUser.Id, $scope.appInfo.pageInfo.controls.password, \"\").then(function (data) {\r\n var user = data;\r\n var token = user.Token;\r\n amplify.store('pnuser-token', token);\r\n\r\n //Reload the web user once the password has been set.\r\n var currentCustomerId = $scope.appInfo.webUser.CurrentAuthorization.Customer.ID;\r\n WebUserSvc.retrieveWebUserData(token, $scope.appInfo.profileKey).then(function (data) {\r\n $scope.appInfo.webUser = data;\r\n for (var x = 0; x < $scope.appInfo.webUser.WebAuthorizations.length; x++) {\r\n if ($scope.appInfo.webUser.WebAuthorizations[x].Customer.ID === currentCustomerId) {\r\n $scope.appInfo.webUser.CurrentAuthorization = $scope.appInfo.webUser.WebAuthorizations[x];\r\n return;\r\n }\r\n }\r\n },\r\n function (err) {\r\n });\r\n\r\n });\r\n //display the conformation page\r\n $scope.appInfo.pageInfo.success = true;\r\n\r\n }\r\n },\r\n function (err)\r\n {\r\n angular.forEach(err, function (item)\r\n {\r\n $scope.notifier.show(item, localStrings.getLocalizedString(\"Error\"));\r\n });\r\n }\r\n );\r\n };\r\n\r\n $scope.clearErrors = function ()\r\n {\r\n validatorSvc.clearAllValidations();\r\n };\r\n })\r\n .controller(\"auditLogCtrl\", function ($scope, templates, localStrings) {\r\n 'use strict';\r\n\r\n $scope.locationInfo.sideMenuData = {\r\n auditLog: {\r\n auditResults: []\r\n }\r\n };\r\n $scope.kendo = {};\r\n $scope.kendo.auditLogGrid = {};\r\n $scope.kendo.auditLogGridOptions = {\r\n autoBind: false,\r\n change: function (e) {\r\n var selectedRows = this.select();\r\n var dataItem = this.dataItem(selectedRows[0]);\r\n $scope.goTo(\"/Account/Profile/YourProfile/\" + dataItem.Key);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"AudEntryUserID\",\r\n title: localStrings.getLocalizedString(\"ChangedBy\"),\r\n sortable: true,\r\n width: 120,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntryDateTime\",\r\n title: localStrings.getLocalizedString(\"DateTime\"),\r\n sortable: true,\r\n width: 130,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntryAction\",\r\n title: localStrings.getLocalizedString(\"Type\"),\r\n width: 50,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntryMenuCode\",\r\n title: localStrings.getLocalizedString(\"SubjArea\"),\r\n sortable: true,\r\n width: 80,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntryDescription\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n sortable: true,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntDtlsFieldDesc\",\r\n title: localStrings.getLocalizedString(\"FieldName\"),\r\n sortable: true,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntDtlsOldValue\",\r\n title: localStrings.getLocalizedString(\"OldValue\"),\r\n sortable: true,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntDtlsNewValue\",\r\n title: localStrings.getLocalizedString(\"NewValue\"),\r\n sortable: true,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.$parent.auditLogGridInit = function () {\r\n $scope.kendo.auditLogGrid.dataSource.data($scope.locationInfo.sideMenuData.auditLog.auditResults);\r\n };\r\n\r\n $scope.initialize = function () {\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ProfileSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n };\r\n })\r\n .controller(\"auditLogSideMenuCtrl\", function ($scope, validatorSvc, userAccountService, WebFunctions, reportingService, WebProfileService, localizationSvc) {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n $scope.initialize = function () {\r\n\r\n validatorSvc.clearValidationScopes();\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenuLocation = 5;\r\n setTimeout(function() {\r\n $scope.locationInfo.sideMenuData.auditLog = {\r\n includeAdds: true,\r\n includeChanges: true,\r\n includeDeletes: true,\r\n includeActions: true,\r\n subjectArea: null,\r\n changedBy: null,\r\n showContacts: false\r\n };\r\n }, 0);\r\n $scope.subjectAreas = [\r\n { Key: null, Description: localStrings.getLocalizedString(\"All\") },\r\n { Key: \"ARW\", Description: localStrings.getLocalizedString(\"Account\") },\r\n { Key: \"CPW\", Description: localStrings.getLocalizedString(\"FuelCards\") },\r\n { Key: \"ODW\", Description: localStrings.getLocalizedString(\"Orders\") },\r\n { Key: \"DRW\", Description: localStrings.getLocalizedString(\"Paperwork\") },\r\n { Key: \"UAL\", Description: localStrings.getLocalizedString(\"Login\") }\r\n ];\r\n $scope.contactList = [\r\n { EmailAddress: null, DisplayName: localStrings.getLocalizedString(\"Any\") }\r\n ];\r\n if ($scope.checkCurrentUserPermission(WebFunctions.ManageContactsAndSecurity)) {\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data) {\r\n if (data.Successful) {\r\n if (data.CustomerContacts.length === 0) {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"Contacts\"), localStrings.getLocalizedString(\"NoResultsFound\"));\r\n return;\r\n }\r\n\r\n angular.forEach(data.CustomerContacts, function (item) {\r\n item.DisplayName = item.EmailAddress;\r\n });\r\n $scope.contactList = data.CustomerContacts\r\n .sortBy('EmailAddress')\r\n .unique('EmailAddress')\r\n .add({ EmailAddress: null, DisplayName: localStrings.getLocalizedString(\"Any\") }, 0);\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n $scope.locationInfo.sideMenuData.auditLog.showContacts = true;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.auditLog.changedBy = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress;\r\n }\r\n $scope.$root.reportSettings.reportKey = 33;\r\n };\r\n\r\n $scope.applyAction = function () {\r\n if (!validatorSvc.executeValidations()) return;\r\n if(!$scope.locationInfo.sideMenuData.auditLog.includeAdds &&\r\n !$scope.locationInfo.sideMenuData.auditLog.includeChanges &&\r\n !$scope.locationInfo.sideMenuData.auditLog.includeDeletes &&\r\n !$scope.locationInfo.sideMenuData.auditLog.includeActions)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AuditLog\"), localStrings.getLocalizedString(\"AtLeastOneType\"));\r\n return;\r\n }\r\n var subjectArea = $scope.locationInfo.sideMenuData.auditLog.subjectArea;\r\n var changedBy = $scope.locationInfo.sideMenuData.auditLog.changedBy;\r\n if(subjectArea === 'null')\r\n subjectArea = null;\r\n if(changedBy === 'null')\r\n changedBy = null;\r\n WebProfileService.getWebAudits(\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate,\r\n subjectArea,\r\n $scope.locationInfo.sideMenuData.auditLog.includeAdds,\r\n $scope.locationInfo.sideMenuData.auditLog.includeChanges,\r\n $scope.locationInfo.sideMenuData.auditLog.includeDeletes,\r\n $scope.locationInfo.sideMenuData.auditLog.includeActions,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n changedBy\r\n ).then(function (data) {\r\n $scope.locationInfo.sideMenuData.auditLog.auditResults = data.WebAuditEntries.each(function(item) {\r\n item.AudEntryDateTime = Date.create(item.AudEntryDateTime).format('{MM}/{dd}/{yyyy} {12hr}:{mm} {tt}');\r\n });\r\n if (data.WebAuditEntries.length === 0) {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AuditLog\"), localStrings.getLocalizedString(\"NoResultsFound\"));\r\n return;\r\n }\r\n $scope.auditLogGridInit();\r\n });\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n $scope.locationInfo.sideMenuData.auditLog.includeAdds = $scope.reportSettings.loadOptions.includeAdds;\r\n $scope.locationInfo.sideMenuData.auditLog.includeChanges = $scope.reportSettings.loadOptions.includeChanges;\r\n $scope.locationInfo.sideMenuData.auditLog.includeDeletes = $scope.reportSettings.loadOptions.includeDeletes;\r\n $scope.locationInfo.sideMenuData.auditLog.includeActions = $scope.reportSettings.loadOptions.includeActions;\r\n\r\n var subjectArea = $scope.reportSettings.loadOptions.subjectArea;\r\n var changedBy = $scope.reportSettings.loadOptions.changedBy;\r\n if(subjectArea === 'null')\r\n subjectArea = null;\r\n if(changedBy === 'null')\r\n changedBy = null;\r\n $scope.locationInfo.sideMenuData.auditLog.subjectArea = subjectArea;\r\n $scope.locationInfo.sideMenuData.auditLog.changedBy = changedBy;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n $scope.reportSettings.saveOptions.includeAdds = $scope.locationInfo.sideMenuData.auditLog.includeAdds;\r\n $scope.reportSettings.saveOptions.includeChanges = $scope.locationInfo.sideMenuData.auditLog.includeChanges;\r\n $scope.reportSettings.saveOptions.includeDeletes = $scope.locationInfo.sideMenuData.auditLog.includeDeletes;\r\n $scope.reportSettings.saveOptions.includeActions = $scope.locationInfo.sideMenuData.auditLog.includeActions;\r\n $scope.reportSettings.saveOptions.subjectArea = $scope.locationInfo.sideMenuData.auditLog.subjectArea;\r\n $scope.reportSettings.saveOptions.changedBy = $scope.locationInfo.sideMenuData.auditLog.changedBy;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n var subjectArea = $scope.locationInfo.sideMenuData.auditLog.subjectArea;\r\n var changedBy = $scope.locationInfo.sideMenuData.auditLog.changedBy;\r\n var qs = \"reportName=\" + 'AuditLog' +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-StartDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-EndDate=\" + $scope.dateSelector.endDate +\r\n \"&RP-IncludeAdds=\" + $scope.locationInfo.sideMenuData.auditLog.includeAdds +\r\n \"&RP-IncludeChanges=\" + $scope.locationInfo.sideMenuData.auditLog.includeChanges +\r\n \"&RP-IncludeDeletes=\" + $scope.locationInfo.sideMenuData.auditLog.includeDeletes +\r\n \"&RP-IncludeActions=\" + $scope.locationInfo.sideMenuData.auditLog.includeActions;\r\n if(subjectArea !== 'null')\r\n qs = qs + \"&RP-SubjectArea=\" + subjectArea;\r\n if(changedBy !== 'null')\r\n qs = qs + \"&RP-ChangedBy=\" + changedBy;\r\n\r\n reportingService.exportReport(qs, args.format);\r\n });\r\n });\r\n","/**\r\n * Created by rhampton on 3/24/14.\r\n */\r\nangular.module(\"pnAccountReports\", ['core.objects'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/Account/Reports/RecentActivity\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"RecentActivity\"),\r\n controller: \"recentActivityCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/Invoices\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Invoices\"),\r\n controller: \"invoicesCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/PaymentHistory\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"PaymentHistory\"),\r\n controller: \"paymentHistoryCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/TransactionHistory\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TransactionHistory\"),\r\n controller: \"transactionHistoryCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/ScheduledPayments\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ScheduledPayments\"),\r\n controller: \"scheduledPaymentsCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/UnappliedPayments\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"UnappliedPayments\"),\r\n controller: \"unappliedPaymentsCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/CreditCardActivity\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"CreditCardActivity\"),\r\n controller: \"creditCardActivityCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/TenNinetyNine\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TenNinetyNine\"),\r\n controller: \"tenNinetyNineCtrl\"\r\n }\r\n )\r\n\r\n;\r\n})\r\n.controller('reportSideMenuCtrl', function ($scope, WebFunctions)\r\n{\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n };\r\n })\r\n .controller('reportSideMenuInvoicesCtrl', function ($scope, validatorSvc, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.invoices) $scope.locationInfo.sideMenuData.invoices = {};\r\n $scope.locationInfo.sideMenuData.invoices.reportType = 'InvoiceByDateRange';\r\n $scope.locationInfo.sideMenuData.invoices.reportTypeDetail = 'InvoiceByDateRangeDetail';\r\n $scope.locationInfo.sideMenuData.invoices.outstandingOnly = 'True';\r\n $scope.locationInfo.sideMenuData.invoices.showReportDetail = 'False';\r\n $scope.$root.reportSettings.reportKey = 2;\r\n\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.selection = 13;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.invoices.outstandingOnly = $scope.reportSettings.loadOptions.outstandingOnly;\r\n $scope.locationInfo.sideMenuData.invoices.showReportDetail = $scope.reportSettings.loadOptions.showReportDetail;\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.outstandingOnly = $scope.locationInfo.sideMenuData.invoices.outstandingOnly;\r\n $scope.reportSettings.saveOptions.showReportDetail = $scope.locationInfo.sideMenuData.invoices.showReportDetail;\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var reportName = $scope.locationInfo.sideMenuData.invoices.showReportDetail === 'True' ?\r\n $scope.locationInfo.sideMenuData.invoices.reportTypeDetail :\r\n $scope.locationInfo.sideMenuData.invoices.reportType;\r\n\r\n var qs = \"reportName=\" + reportName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-HideZeroBalance=\" + $scope.locationInfo.sideMenuData.invoices.outstandingOnly +\r\n \"&RP-startDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-endDate=\" + $scope.dateSelector.endDate +\r\n \"&RP-showReportDetail=\" + $scope.locationInfo.sideMenuData.invoices.showReportDetail;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller('reportSideMenuTransactionHistoryCtrl', function ($scope, validatorSvc, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.transactionHistory) $scope.locationInfo.sideMenuData.transactionHistory = {};\r\n $scope.locationInfo.sideMenuData.transactionHistory.reportType = 'TransactionHistory';\r\n $scope.locationInfo.sideMenuData.transactionHistory.showReportDetail = 'False';\r\n $scope.$root.reportSettings.reportKey = 6;\r\n\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var qs = \"reportName=\" + $scope.locationInfo.sideMenuData.transactionHistory.reportType +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-startDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-endDate=\" + $scope.dateSelector.endDate;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller('reportSideMenuCreditCardActivityCtrl', function ($scope, validatorSvc, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.creditCardActivity) $scope.locationInfo.sideMenuData.creditCardActivity = {};\r\n $scope.locationInfo.sideMenuData.creditCardActivity.groupByDate = 0;\r\n $scope.locationInfo.sideMenuData.creditCardActivity.showReportDetail = 'False';\r\n $scope.locationInfo.sideMenuData.creditCardActivity.pending = '0';\r\n $scope.$root.reportSettings.reportKey = 7;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.creditCardActivity.groupByDate = $scope.reportSettings.saveOptions.groupByDate;\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n $scope.setReport();\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.groupByDate = $scope.locationInfo.sideMenuData.creditCardActivity.groupByDate;\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var reportType = $scope.locationInfo.sideMenuData.creditCardActivity.groupByDate === 1 ? 'CreditCardActivityByDate' : 'CreditCardActivityByDescription';\r\n var qs = \"reportName=\" + reportType +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-startDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-endDate=\" + $scope.dateSelector.endDate;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller('reportSideMenuScheduledPaymentsCtrl', function ($scope, validatorSvc, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.scheduledPayments) $scope.locationInfo.sideMenuData.scheduledPayments = {};\r\n $scope.locationInfo.sideMenuData.scheduledPayments.reportType = 'ScheduledPaymentsAndEfts';\r\n $scope.locationInfo.sideMenuData.scheduledPayments.reportTypeDetail = 'ScheduledPaymentsAndEftsDetail';\r\n\r\n $scope.locationInfo.sideMenuData.scheduledPayments.showReportDetail = 'False';\r\n $scope.locationInfo.sideMenuData.scheduledPayments.pending = '0';\r\n $scope.$root.reportSettings.reportKey = 5;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.scheduledPayments.pending = $scope.reportSettings.loadOptions.pending;\r\n $scope.locationInfo.sideMenuData.scheduledPayments.showReportDetail = $scope.reportSettings.loadOptions.showReportDetail;\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.pending = $scope.locationInfo.sideMenuData.scheduledPayments.pending;\r\n $scope.reportSettings.saveOptions.showReportDetail = $scope.locationInfo.sideMenuData.scheduledPayments.showReportDetail;\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var reportName = $scope.locationInfo.sideMenuData.scheduledPayments.showReportDetail === 'True' ?\r\n $scope.locationInfo.sideMenuData.scheduledPayments.reportTypeDetail :\r\n $scope.locationInfo.sideMenuData.scheduledPayments.reportType;\r\n\r\n var qs = \"reportName=\" + reportName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-startDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-endDate=\" + $scope.dateSelector.endDate +\r\n \"&RP-pending=\" + $scope.locationInfo.sideMenuData.scheduledPayments.pending +\r\n \"&RP-showReportDetail=\" + $scope.locationInfo.sideMenuData.scheduledPayments.showReportDetail;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller('reportSideMenuPaymentHistoryCtrl', function ($scope, validatorSvc, $rootScope, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.paymentHistory) $scope.locationInfo.sideMenuData.paymentHistory = {};\r\n $scope.locationInfo.sideMenuData.paymentHistory.showReportDetail = false;\r\n $scope.$root.reportSettings.reportKey = 3;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.paymentHistory.showReportDetail = $scope.reportSettings.loadOptions.showReportDetail;\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.showReportDetail = $scope.locationInfo.sideMenuData.paymentHistory.showReportDetail;\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var rptName = $scope.locationInfo.sideMenuData.paymentHistory.showReportDetail ? 'PaymentHistoryIAD' : 'PaymentHistory';\r\n var qs = \"reportName=\" + rptName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-startDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-endDate=\" + $scope.dateSelector.endDate;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller('reportSideMenuTenNinetyNineCtrl', function ($scope, validatorSvc, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.tenNinetyNine) $scope.locationInfo.sideMenuData.tenNinetyNine = {};\r\n $scope.locationInfo.sideMenuData.tenNinetyNine.reportType = '1099-KByDate';\r\n $scope.locationInfo.sideMenuData.tenNinetyNine.useDateRange = '1';\r\n $scope.$root.reportSettings.reportKey = 8;\r\n $scope.exportReport = false;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var qs = \"reportName=\" + $scope.locationInfo.sideMenuData.tenNinetyNine.reportType +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-StartDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-EndDate=\" + $scope.dateSelector.endDate;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller(\"recentActivityCtrl\", function ($scope, WebFunctions, WebFunctionGroups, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermissions(WebFunctionGroups.AccountReports) || !$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n if ($scope.checkCurrentUserPermissions(WebFunctionGroups.AccountPayments))\r\n $scope.goTo(\"/Account/Payments/ViewScheduledPayments\");\r\n else\r\n $scope.goTo(\"/Account/Profile/YourProfile\");\r\n return;\r\n }\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.recentActivity) $scope.locationInfo.sideMenuData.recentActivity = {};\r\n $scope.locationInfo.sideMenuData.recentActivity.reportType = '/RecentActivity';\r\n $scope.locationInfo.sideMenuData.subMenu = \"1\";\r\n $scope.custKey = $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n $scope.exportReport = \"false\";\r\n $scope.applyAction();\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n var qs = \"reportName=\" + $scope.locationInfo.sideMenuData.recentActivity.reportType +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller(\"invoicesCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.invoices) $scope.locationInfo.sideMenuData.invoices = {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n };\r\n })\r\n .controller(\"paymentHistoryCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n })\r\n .controller(\"transactionHistoryCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"8\";\r\n })\r\n .controller(\"scheduledPaymentsCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n })\r\n .controller(\"creditCardActivityCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"6\";\r\n })\r\n .controller(\"unappliedPaymentsCtrl\", function ($scope, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"4\";\r\n $scope.locationInfo.sideMenuData.unappliedPayments = {};\r\n $scope.locationInfo.sideMenuData.unappliedPayments.reportType = '/UnappliedPayments';\r\n $scope.applyAction();\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n var qs = \"reportName=\" + $scope.locationInfo.sideMenuData.unappliedPayments.reportType +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller(\"tenNinetyNineCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"7\";\r\n })\r\n;","/**\r\n * Created by jvitoria on 7/12/2015.\r\n */\r\nangular.module(\"pnDocAccount\", ['ngSanitize', 'core.objects', 'core.directives'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider.when(\"/Documents/Account/Statements\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Statements\"),\r\n controller: \"statementsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"DocumentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Documents/Account/Notifications\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Notifications\"),\r\n controller: \"notificationsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"DocumentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Documents/Account/Advice\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Advice\"),\r\n controller: \"adviceCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"DocumentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n ;\r\n })\r\n .controller(\"docAccountSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n };\r\n })\r\n .controller(\"statementsSideMenuCtrl\", function ($scope, localizationSvc)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"DateSelectorLocalization\"); \r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.options = [\r\n {name: localStrings.getLocalizedString(\"AllDays\"), value: 13},\r\n {name: localStrings.getLocalizedString(\"Today\"), value: 0},\r\n {name: localStrings.getLocalizedString(\"Yesterday\"), value: 1},\r\n {name: localStrings.getLocalizedString(\"ThisWeek\"), value: 3},\r\n {name: localStrings.getLocalizedString(\"ThisMonth\"), value: 4},\r\n {name: localStrings.getLocalizedString(\"ThisYear\"), value: 5},\r\n {name: localStrings.getLocalizedString(\"PriorWeek\"), value: 6},\r\n {name: localStrings.getLocalizedString(\"PriorMonth\"), value: 7},\r\n {name: localStrings.getLocalizedString(\"PriorYear\"), value: 8},\r\n {name: localStrings.getLocalizedString(\"LastSevenDays\"), value: 9},\r\n {name: localStrings.getLocalizedString(\"LastThirtyDays\"), value: 10},\r\n {name: localStrings.getLocalizedString(\"SelectDates\"), value: 11},\r\n {name: localStrings.getLocalizedString(\"SelectDays\"), value: 12}];\r\n };\r\n })\r\n .controller(\"statementsCtrl\", function ($scope, validatorSvc, WebFunctions, documentService, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n validatorSvc.clearValidationScopes();\r\n $scope.kendo = {};\r\n $scope.kendo.statementsGrid = {};\r\n $scope.kendo.statementsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var dataItem = this.dataItem(this.select()[0]);\r\n if (!dataItem.StmtEdocKey)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"Documents\"), localStrings.getLocalizedString(\"SelectedDocumentNoLonger\"));\r\n return;\r\n }\r\n else\r\n $scope.openEdoc(dataItem.StmtEdocKey);\r\n\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"StmtDateTime\",\r\n title: localStrings.getLocalizedString(\"StatementDate\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.statementsGridInit = function (ds)\r\n {\r\n $scope.kendo.statementsGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.statementsGridDS.read();\r\n $scope.kendo.statementsGrid.dataSource.data($scope.kendo.statementsGridDS.data());\r\n };\r\n\r\n function getStatements()\r\n {\r\n documentService.getStatements(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate).then(function (data)\r\n {\r\n if (data.Success)\r\n {\r\n if (data.Data.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"Statements\"));\r\n return;\r\n }\r\n\r\n data.Data.each(function (stmt)\r\n {\r\n stmt.StmtDateTime = Date.create(stmt.StmtDateTime).format('{MM}/{dd}/{yyyy}');\r\n });\r\n\r\n $scope.kendo.statementsGridInit(data.Data);\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Documents/Account/Notifications\");\r\n }\r\n\r\n //set the side menu location info\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"AccountSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"1\";\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n getStatements();\r\n };\r\n })\r\n .controller(\"notificationsSideMenuCtrl\", function ($scope, userAccountService, localizationSvc)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"DocumentsLocalization\");\r\n $scope.kendo = {};\r\n\r\n function getContactsContext()\r\n {\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data) {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.CustomerContacts)) {\r\n $scope.modalifier.showSetupError();\r\n return;\r\n }\r\n\r\n angular.forEach(data.CustomerContacts, function (item) {\r\n item.fullName = item.FirstName + ' ' + item.LastName;\r\n });\r\n\r\n $scope.locationInfo.sideMenuData.notifications.contacts = data.CustomerContacts.findAll({ Active: -1 }).sortBy('fullName');\r\n $scope.locationInfo.sideMenuData.notifications.contacts.add({Key: null, fullName: localStrings.getLocalizedString(\"Any\")}, 0);\r\n });\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n $scope.locationInfo.sideMenuData.notifications = {\r\n contact: null,\r\n contacts: {},\r\n type: null,\r\n types: [{ key: null, value: localStrings.getLocalizedString(\"Any\") },\r\n { key: 0, value: localStrings.getLocalizedString(\"CreditLimit\") },\r\n { key: 1, value: localStrings.getLocalizedString(\"PrepaidBalance\") },\r\n { key: 2, value: localStrings.getLocalizedString(\"PastDuePayment\") },\r\n { key: 3, value: localStrings.getLocalizedString(\"OtherCreditCorrespondence\") },\r\n { key: 4, value: localStrings.getLocalizedString(\"ProductsServices\") },\r\n { key: 5, value: localStrings.getLocalizedString(\"GeneralBusinessCorrespondence\") }]\r\n };\r\n getContactsContext();\r\n };\r\n })\r\n .controller(\"notificationsCtrl\", function ($scope, validatorSvc, $sce, documentService, templates, localStrings)\r\n {\r\n 'use strict';\r\n validatorSvc.clearValidationScopes();\r\n $scope.kendo = {};\r\n $scope.kendo.notificationsGrid = {};\r\n $scope.kendo.notificationsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var dataItem = this.dataItem(this.select()[0]);\r\n if (!dataItem)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"Notifications\"), localStrings.getLocalizedString(\"SelectedDocumentNoLonger\"));\r\n return;\r\n }\r\n\r\n $scope.handleRowClick(dataItem);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"NotcDescription\",\r\n title: localStrings.getLocalizedString(\"SubjectTitle\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"NotcType\",\r\n title: localStrings.getLocalizedString(\"Type\"),\r\n width: 200,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"RcptEmail\",\r\n title: localStrings.getLocalizedString(\"Recipient\"),\r\n width: 200,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"NotcDate\",\r\n title: localStrings.getLocalizedString(\"Date\"),\r\n width: 100,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: [],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.notificationsGridInit = function (ds)\r\n {\r\n $scope.kendo.notificationsGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n //$scope.resizeKendoGrid($scope.kendo.notificationsGrid, ds.length || 0, 295);\r\n\r\n $scope.kendo.notificationsGridDS.read();\r\n $scope.kendo.notificationsGrid.dataSource.data($scope.kendo.notificationsGridDS.data());\r\n };\r\n\r\n function getNotifications()\r\n {\r\n documentService.getNotifications(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.locationInfo.sideMenuData.notifications.contact,\r\n $scope.locationInfo.sideMenuData.notifications.type,\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate\r\n ).then(function (data)\r\n {\r\n if (data.Success)\r\n {\r\n if (data.Data.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"Notifications\"));\r\n return;\r\n }\r\n\r\n data.Data.each(function (note)\r\n {\r\n note.NotcDate = Date.create(note.NotcDate).format('{MM}/{dd}/{yyyy}');\r\n note.EmailBody = $sce.trustAsHtml(note.EmailBody);\r\n if (note.DispType === 1 || note.DispType === 3)\r\n {\r\n //note.NotcDescription = '';\r\n note.NotcType = 'Attachment';\r\n //note.RcptEmail = '';\r\n //note.NotcDate = '';\r\n }\r\n });\r\n\r\n $scope.kendo.notificationsGridInit(data.Data);\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n }\r\n\r\n $scope.$parent.applyAction = function () {\r\n if (!validatorSvc.executeValidations()) return;\r\n getNotifications();\r\n };\r\n\r\n $scope.handleRowClick = function handleRowClick(item)\r\n {\r\n switch (item.DispType)\r\n {\r\n case 0:\r\n $scope.emailPopUp = item;\r\n $scope.emailPopUp.show = true;\r\n break;\r\n\r\n case 1:\r\n case 2:\r\n if (item.EdocDtlKey > 0) $scope.openEdoc(item.EdocDtlKey);\r\n else\r\n scope.notifier.show(localStrings.getLocalizedString(\"DocumentNotRetrieved\"), 'error');\r\n break;\r\n\r\n case 3:\r\n if (item.AttachGUID !== null) $scope.openAttachment(item.AttachGUID);\r\n else\r\n scope.notifier.show(localStrings.getLocalizedString(\"DocumentNotRetrieved\"), 'error');\r\n break;\r\n }\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n //set the side menu location info\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"AccountSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n $scope.emailPopUp = {show: false};\r\n };\r\n })\r\n .controller('adviceSideMenuCtrl', function ($scope, $filter, WebFunctions, validatorSvc, documentService, templates, localizationSvc)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"DocumentsLocalization\");\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"AccountSideMenu\");\r\n\r\n $scope.locationInfo.sideMenuData.tenNinetyNineAdvice = {\r\n yearsBack: 5\r\n };\r\n $scope.exportReport = false;\r\n };\r\n })\r\n .controller(\"adviceCtrl\", function ($scope, $filter, WebFunctions, templates, localStrings, validatorSvc, documentService)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.adviceGrid = {};\r\n $scope.kendo.adviceGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var dataItem = this.dataItem(this.select()[0]);\r\n if(!dataItem.EdocDtlKey)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"Documents\"), localStrings.getLocalizedString(\"SelectedDocumentNoLonger\"));\r\n return;\r\n }\r\n\r\n $scope.openEdoc(dataItem.EdocDtlKey);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"PmtYear\",\r\n title: localStrings.getLocalizedString(\"AdviceYear\"),\r\n width: 100,\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"DateTimeFormatted\",\r\n title: localStrings.getLocalizedString(\"ProcessDate\"),\r\n width: 150,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Name\",\r\n title: localStrings.getLocalizedString(\"BusinessEntity\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"PaymentType\",\r\n title: localStrings.getLocalizedString(\"PaymentType\"),\r\n width: 150,\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: [],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n $scope.predicate = 'DateTimeFormatted';\r\n $scope.reverse = false;\r\n $scope.modalifier.hide();\r\n\r\n documentService.Get1099AdviceList(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.locationInfo.sideMenuData.tenNinetyNineAdvice.yearsBack).then(\r\n function (data)\r\n {\r\n if (data.Success)\r\n {\r\n if (data.Data.length === 0) {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"TenNinetyNineKAdvice\"));\r\n }\r\n else\r\n {\r\n data.Data.each(function (element)\r\n {\r\n element.DateTimeFormatted = $filter('date')(element.DateTime, 'MM/dd/yyyy');\r\n element.PmtYear = element.PmtYear.toString();\r\n });\r\n\r\n $scope.kendo.adviceGridInit(data.Data);\r\n }\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n };\r\n\r\n $scope.kendo.adviceGridInit = function (ds)\r\n {\r\n $scope.kendo.adviceGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.adviceGridDS.read();\r\n $scope.kendo.adviceGrid.dataSource.data($scope.kendo.adviceGridDS.data());\r\n };\r\n\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n //set the side menu location info\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"AccountSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n };\r\n })\r\n;","/**\r\n * Created by jvitoria on 9/5/14.\r\n */\r\nangular.module(\"pnFuelCardsCards\", ['core.objects'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/FuelCards/Cards/ViewCards\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewCards\"),\r\n controller: \"viewCardsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsCardsLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/FuelCards/Cards/AddCards\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"AddCards\"),\r\n controller: \"addCardsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsCardsLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/FuelCards/Cards/AddTemplates\",\r\n {\r\n templateUrl: \"fuelCards/cards/addTemplates/addTemplates.tpl.html\",\r\n controller: \"addTemplatesCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsCardsLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/FuelCards/Cards/Departments\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Departments\"),\r\n controller: \"departmentsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsCardsLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/FuelCards/Cards/DepartmentSetup\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"DepartmentSetup\"),\r\n controller: \"departmentSetupCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsCardsLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/FuelCards/Cards/Locations\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Locations\"),\r\n controller: \"locationsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsCardsLocalization\");\r\n }\r\n }\r\n })\r\n ;\r\n })\r\n .controller('fuelCardsCardsSideMenuCtrl', function ($scope, $rootScope, FuelCardsService)\r\n {\r\n 'use strict';\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n };\r\n })\r\n .controller(\"viewCardsCtrl\", function ($scope, FuelCardsService, WebFunctions, WebFunctionGroups, customerService, validatorSvc, $filter, $q, $timeout, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n if (!$scope.appInfo.fuelCards)\r\n $scope.appInfo.fuelCards = {};\r\n $scope.appInfo.fuelCards.viewCards = {shown: true};\r\n $scope.appInfo.fuelCards.modalEdit = {shown: false};\r\n $scope.appInfo.fuelCards.modalPin = {shown: false};\r\n $scope.appInfo.fuelCards.modalReissue = {shown: false};\r\n $scope.appInfo.fuelCards.modalDeactivate = {shown: false};\r\n $scope.appInfo.fuelCards.modalChangeCardNo = {shown: false, mode: 'edit'};\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.viewCardsGrid = {};\r\n $scope.kendo.viewCardsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var dataItem = this.dataItem(this.select()[0]);\r\n $scope.displayFuelCard(dataItem.Key);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"Description\",\r\n title: localStrings.getLocalizedString(\"CardDescription\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Status\",\r\n title: localStrings.getLocalizedString(\"Status\"),\r\n width: 100,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"ActivationDate\",\r\n title: localStrings.getLocalizedString(\"ActivationDate\"),\r\n width: 100,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"ExpirationDate\",\r\n title: localStrings.getLocalizedString(\"ExpirationDate\"),\r\n width: 100,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \" \",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n //height: $(document).height() - 375,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.viewCardsGridInit = function ()\r\n {\r\n $scope.kendo.viewCardsGridDS = new kendo.data.DataSource({\r\n data: $scope.appInfo.fuelCards.viewCards.cards\r\n });\r\n\r\n $scope.kendo.viewCardsGridDS.read();\r\n $scope.kendo.viewCardsGrid.dataSource.data($scope.kendo.viewCardsGridDS.data());\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n $scope.appInfo.fuelCards.viewCards.cards = [];\r\n $scope.modalifier.hide();\r\n $scope.appInfo.fuelCards.viewCards.shown = true;\r\n $scope.appInfo.fuelCards.modalEdit.shown = false;\r\n $scope.appInfo.fuelCards.modalReissue.shown = false;\r\n $scope.appInfo.fuelCards.modalReissue.shown = false;\r\n $scope.appInfo.fuelCards.modalDeactivate.shown = false;\r\n FuelCardsService.getCards\r\n (\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.locationInfo.sideMenuData.viewCards.cardFormat,\r\n $scope.locationInfo.sideMenuData.viewCards.cardNumber,\r\n $scope.locationInfo.sideMenuData.viewCards.active === \"True\" ? -1 : 0,\r\n $scope.locationInfo.sideMenuData.viewCards.expired === \"True\" ? -1 : 0,\r\n $scope.locationInfo.sideMenuData.viewCards.pending === \"True\" ? -1 : 0,\r\n $scope.locationInfo.sideMenuData.viewCards.locked === \"True\" ? -1 : 0,\r\n $scope.locationInfo.sideMenuData.viewCards.cancelled === \"True\" ? -1 : 0,\r\n $scope.locationInfo.sideMenuData.viewCards.department,\r\n $scope.locationInfo.sideMenuData.viewCards.template\r\n ).then\r\n (\r\n function (data)\r\n {\r\n if (data.Cards.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"Cards\"));\r\n return;\r\n }\r\n\r\n $scope.appInfo.fuelCards.viewCards.cards = [];\r\n angular.forEach(data.Cards, function (item)\r\n {\r\n var desc = item.NumberMasked + ' - ' + item.Description;\r\n desc += item.Template === -1 ? ' (Template)' : '';\r\n\r\n var status = $filter('filter')($scope.appInfo.fuelCards.statusCodes, {Key: item.Status});\r\n\r\n var act = $filter('date')(item.ActivationDate, 'MM/dd/yyyy') || '';\r\n var exp = $filter('date')(item.ExpirationDate, 'MM/dd/yyyy') || '';\r\n\r\n $scope.appInfo.fuelCards.viewCards.cards.push({\r\n Key: item.Key,\r\n Sort: item.Description,\r\n Description: desc,\r\n Status: status[0].Description,\r\n ActivationDate: act,\r\n ExpirationDate: exp\r\n });\r\n });\r\n $scope.kendo.viewCardsGridInit();\r\n }\r\n );\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n //if user doesnt have permission for the section landing page, test to see if they can land on another one\r\n //before sending them to the home page\r\n if (!$scope.checkCurrentUserPermissions(WebFunctionGroups.FuelCardsCards))\r\n {\r\n if ($scope.checkCurrentUserPermissions(WebFunctionGroups.FuelCardsTrans))\r\n $scope.goTo(\"/FuelCards/Transactions/TransactionDetails\");\r\n else if ($scope.checkCurrentUserPermissions(WebFunctionGroups.FuelCardsPrices))\r\n $scope.goTo(\"/FuelCards/Prices/LookupPrices\");\r\n else\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 40;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsCardsSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"0\";\r\n\r\n $scope.appInfo.fuelCards.statusCodes = [\r\n { Key: '0', Description: localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"Active\")) },\r\n { Key: '1', Description: localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"Cancelled\")) },\r\n { Key: '2', Description: localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"Expired\")) },\r\n { Key: '3', Description: localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"Locked\")) },\r\n { Key: '4', Description: localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"Pending\")) }\r\n ];\r\n $scope.appInfo.fuelCards.viewCards.cards = [];\r\n FuelCardsService.getCardsContext(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey\r\n ).then(\r\n function (data) {\r\n $scope.appInfo.fuelCards.formats = $filter('orderBy')(data.CardFormats, 'Description');\r\n $scope.appInfo.fuelCards.embossingReasons = $filter('orderBy')(data.CardEmbossingReasons, 'Description');\r\n $scope.appInfo.fuelCards.deactivateReasons = $filter('orderBy')(data.CardDeactivationReasons, 'Description');\r\n $scope.appInfo.fuelCards.states = data.States;\r\n $scope.appInfo.fuelCards.alertRules = $filter('orderBy')(data.CardAlertRules, 'ID');\r\n $scope.appInfo.fuelCards.templates = $filter('orderBy')(data.CustomerCardTemplates, 'Description');\r\n $scope.appInfo.fuelCards.company = data.Company;\r\n }\r\n );\r\n\r\n FuelCardsService.getCardsDepartments($scope.appInfo.webUser.CurrentAuthorization.CustKey)\r\n .then(function (data) {\r\n if (data.Successful) {\r\n $scope.appInfo.fuelCards.departments = $filter('orderBy')(data.Departments, 'Description');\r\n }\r\n }\r\n );\r\n\r\n customerService.getCustomerLocations($scope.appInfo.webUser.CurrentAuthorization.CustKey, 2)\r\n .then(function (data) {\r\n if (data.Successful) {\r\n $scope.appInfo.fuelCards.locations = $filter('orderBy')(data.Locations, 'Description');\r\n }\r\n }\r\n );\r\n\r\n $scope.hideModals();\r\n };\r\n\r\n $scope.saveCards = function (state)\r\n {\r\n var recStatus = 0;\r\n var closeModal = false;\r\n var card = $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0];\r\n\r\n if (card.Description.isBlank())\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"Required\"), 'error');\r\n $scope.setFocusOnReady('#efc-description');\r\n return;\r\n }\r\n\r\n switch (state)\r\n {\r\n case 'save':\r\n recStatus = 16;\r\n break;\r\n\r\n case 'saveAndClose':\r\n recStatus = 16;\r\n closeModal = true;\r\n break;\r\n\r\n case 'saveCN':\r\n recStatus = 16;\r\n card.Number_Formatted = null;\r\n card.Number_Masked = null;\r\n break;\r\n\r\n case 'add':\r\n recStatus = 4;\r\n break;\r\n\r\n case 'template':\r\n\r\n if (!$scope.isValidForWebTemplate(card))\r\n return;\r\n\r\n recStatus = 4;\r\n card.Number = 0;\r\n card.NumberMasked = null;\r\n card.Template = \"-1\";\r\n card.PIN = null;\r\n card.Activation_Date = null;\r\n card.Expiration_Date = null;\r\n card.Cards_Issued = '0';\r\n card.Emboss_Date = null;\r\n card.Emboss_Line_1 = null;\r\n card.Emboss_Line_2 = null;\r\n card.Emboss_Line_3 = null;\r\n card.Export_To_Embosser = '0';\r\n card.Marked_For_Export = '0';\r\n card.Last_Emboss_Date = null;\r\n card.CardDeactRsn_Key = 0;\r\n card.Deactivation_Date = null;\r\n card.HasTransactions = '0';\r\n card.Key = 0;\r\n card.TimeStamp = null;\r\n card.Status = $scope.securityOptions.allowPending ? '4' : '0';\r\n closeModal = true;\r\n break;\r\n }\r\n\r\n FuelCardsService.saveCards\r\n (\r\n recStatus,\r\n card,\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardCFs[0],\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n ).then\r\n (\r\n function (data)\r\n {\r\n if (!closeModal)\r\n $scope.displayFuelCard(card.Key);\r\n else\r\n $scope.initialize();\r\n\r\n $scope.resetDirtyFlags($scope.editCards);\r\n }\r\n );\r\n };\r\n\r\n $scope.displayFuelCard = function (key)\r\n {\r\n FuelCardsService.getCardDetails\r\n (\r\n key,\r\n $scope.checkCurrentUserPermission(WebFunctions.ViewCardNumbers)\r\n ).then\r\n (\r\n function (data)\r\n {\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails = data.CardDetails;\r\n $scope.appInfo.fuelCards.modalEdit.origCardDetails = angular.copy(data.CardDetails);\r\n\r\n $scope.setSecurityOptions();\r\n $scope.resetDirtyFlags($scope.editCards);\r\n }\r\n );\r\n };\r\n\r\n $scope.displayModelPin = function (state)\r\n {\r\n switch (state)\r\n {\r\n case 'display':\r\n $scope.saveChangesPrompt();\r\n validatorSvc.clearAllValidations();\r\n $scope.appInfo.fuelCards.modalPin.PIN1 = null;\r\n $scope.appInfo.fuelCards.modalPin.PIN2 = null;\r\n $scope.appInfo.fuelCards.modalPin.error = false;\r\n $scope.appInfo.fuelCards.modalPin.shown = true;\r\n break;\r\n\r\n case 'save':\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].PIN = $scope.appInfo.fuelCards.modalPin.PIN1;\r\n $scope.appInfo.fuelCards.modalPin.shown = false;\r\n $scope.saveCards('save');\r\n break;\r\n }\r\n };\r\n\r\n $scope.displayModelReissue = function (state)\r\n {\r\n switch (state)\r\n {\r\n case 'display':\r\n $scope.saveChangesPrompt();\r\n $scope.appInfo.fuelCards.modalReissue.selection = $scope.appInfo.fuelCards.embossingReasons[0].Key;\r\n $scope.appInfo.fuelCards.modalReissue.shown = true;\r\n break;\r\n\r\n case 'save':\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].CardEmbRsn_Key = $scope.appInfo.fuelCards.modalReissue.selection;\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].Export_To_Embosser = '-1';\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].Emboss_Date = new Date();\r\n $scope.appInfo.fuelCards.modalReissue.shown = false;\r\n $scope.saveCards('save');\r\n break;\r\n }\r\n };\r\n\r\n $scope.displayModelDeactReasons = function (state)\r\n {\r\n switch (state)\r\n {\r\n case 'display':\r\n $scope.saveChangesPrompt();\r\n $scope.appInfo.fuelCards.modalDeactivate.selection = $scope.appInfo.fuelCards.deactivateReasons[0].Key;\r\n $scope.appInfo.fuelCards.modalDeactivate.shown = true;\r\n break;\r\n\r\n case 'save':\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].CardDeactRsn_Key = $scope.appInfo.fuelCards.modalDeactivate.selection;\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].Status = '1';\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].Deactivation_Date = new Date().toISOString().slice(0, 19);\r\n $scope.appInfo.fuelCards.modalDeactivate.shown = false;\r\n $scope.saveCards('save');\r\n break;\r\n }\r\n };\r\n\r\n $scope.displayChangeCardNo = function (command)\r\n {\r\n switch (command)\r\n {\r\n case 'open':\r\n $scope.saveChangesPrompt().then(\r\n function ()\r\n {\r\n $scope.saveCards('save');\r\n $scope.appInfo.fuelCards.modalChangeCardNo.mode = 'edit';\r\n $scope.appInfo.fuelCards.modalChangeCardNo.shown = true;\r\n },\r\n function ()\r\n {\r\n $scope.appInfo.fuelCards.modalChangeCardNo.mode = 'edit';\r\n $scope.appInfo.fuelCards.modalChangeCardNo.shown = true;\r\n }\r\n );\r\n break;\r\n\r\n case 'save':\r\n if ($scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].HasTransactions === '-1')\r\n $scope.appInfo.fuelCards.modalChangeCardNo.mode = 'confirm';\r\n else\r\n {\r\n $scope.saveCards('saveCN');\r\n $scope.displayChangeCardNo(localStrings.getLocalizedString(\"Close\"));\r\n }\r\n break;\r\n\r\n case 'confirm':\r\n $scope.saveCards('saveCN');\r\n $scope.displayChangeCardNo(localStrings.getLocalizedString(\"Close\"));\r\n break;\r\n\r\n case 'close':\r\n $scope.appInfo.fuelCards.modalChangeCardNo.shown = false;\r\n $scope.appInfo.fuelCards.modalChangeCardNo.mode = 'edit';\r\n break;\r\n }\r\n };\r\n\r\n $scope.hideModals = function ()\r\n {\r\n $scope.appInfo.fuelCards.viewCards.shown = true;\r\n $scope.appInfo.fuelCards.modalEdit.shown = false;\r\n $scope.appInfo.fuelCards.modalReissue.shown = false;\r\n $scope.appInfo.fuelCards.modalReissue.shown = false;\r\n $scope.appInfo.fuelCards.modalDeactivate.shown = false;\r\n $scope.appInfo.fuelCards.modalChangeCardNo.shown = false;\r\n validatorSvc.clearAllValidations();\r\n };\r\n\r\n $scope.isValidForWebTemplate = function (card)\r\n {\r\n var isValid = true;\r\n var format = $filter('filter')($scope.appInfo.fuelCards.formats, {Key: card.CardFmt_Key}, true)[0] || {};\r\n\r\n if (angular.isUndefinedOrNullOrEmpty(format) || format.VisibleOnWeb === 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"CardFormatInvalid\"), 'error');\r\n return false;\r\n }\r\n\r\n if (card.Template === '-1')\r\n {\r\n angular.forEach($scope.appInfo.fuelCards.templates, function (item)\r\n {\r\n if (card.Description === item.Description)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"TemplateDescriptionUnique\"), 'error');\r\n isValid = false;\r\n }\r\n\r\n //if(card.Number === item.Number)\r\n //{\r\n // $scope.notifier.show('Template card number must be unique', 'error');\r\n // isValid = false;\r\n //}\r\n });\r\n }\r\n\r\n //physical card w/o auto number or pending\r\n if (format.PhysicalCard === -1 && format.AutoNo === 0 && format.AllowPending === 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"PhysicalCardsError\"), 'error');\r\n isValid = false;\r\n }\r\n\r\n //expiration dates\r\n if (format.UseExpirationDates === -1 && format.DefaultLifetimeSelection === 0 && format.AllowDefaultByCustomer === 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ExpirationDateConfiguredError\"), 'error');\r\n isValid = false;\r\n }\r\n\r\n //expiration dates\r\n if (format.UseExpirationDates === -1 && format.AllowDefaultByCustomer === -1)\r\n {\r\n\r\n var nextDate = angular.isUndefinedOrNullOrEmpty(card.Next_Exp_Date) ? new Date('01/01/1900') : new Date(card.Next_Exp_Date);\r\n var expDate = angular.isUndefinedOrNullOrEmpty(card.Expiration_Date) ? new Date('01/01/1900') : new Date(card.Expiration_Date);\r\n var today = new Date();\r\n\r\n if (expDate <= today && nextDate <= today)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"MissingExpirationDate\"), 'error');\r\n isValid = false;\r\n }\r\n }\r\n\r\n return isValid;\r\n };\r\n\r\n $scope.saveChangesPrompt = function ()\r\n {\r\n var deferred = $q.defer();\r\n if ($scope.editCards.$dirty)\r\n $scope.modalifier.confirm(localStrings.getLocalizedString(\"UnsavedChanges\"), deferred.resolve, deferred.reject);\r\n else\r\n deferred.reject();\r\n\r\n return deferred.promise;\r\n };\r\n\r\n $scope.setSecurityOptions = function ()\r\n {\r\n\r\n $scope.securityOptions = {\r\n readOnly: true,\r\n formTitle: '',\r\n\r\n viewCardNumber: false,\r\n displayCardNumber: '',\r\n canChangeCardNo: false,\r\n\r\n showVehicleInfo: false,\r\n showCardAuths: false,\r\n showProdSite: false,\r\n showTaxExemeptions: false,\r\n showEmbossingAlert: false,\r\n\r\n showChangePin: false,\r\n showReissue: false,\r\n reissueTitle: '',\r\n showDeactivate: false,\r\n showSaveTemplate: false,\r\n\r\n shipToLocation: '',\r\n cardType: '',\r\n department: '',\r\n format: '',\r\n state: '',\r\n cardStatus: '',\r\n deactivationReason: '',\r\n embossingReason: '',\r\n alertRule: ''\r\n };\r\n\r\n function keyLookup(list, match, field, value)\r\n {\r\n if(!Object.isArray(list) || list.length === 0 || angular.isUndefinedOrNullOrEmpty(match)|| angular.isUndefinedOrNullOrEmpty(field))\r\n return value;\r\n\r\n var item = list.find({Key: match});\r\n\r\n if (item)\r\n return item[field];\r\n else\r\n return value;\r\n }\r\n\r\n var card = $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0];\r\n var format = $filter('filter')($scope.appInfo.fuelCards.formats, {Key: card.CardFmt_Key}, true)[0];\r\n\r\n //sanity check\r\n if (!card || !format)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"Cards\"), localStrings.getLocalizedString(\"CardSelectionFailed\"));\r\n return;\r\n }\r\n\r\n //form options\r\n $scope.securityOptions.readOnly = !($scope.checkCurrentUserPermission(WebFunctions.EditCards) &&\r\n (format.AllowEditAfterEmbossed === -1 ||\r\n card.Cards_Issued === '0'));\r\n $scope.securityOptions.formTitle = $scope.securityOptions.readOnly ? localStrings.getLocalizedString(\"ViewCard\") : localStrings.getLocalizedString(\"EditCard\");\r\n $scope.securityOptions.formTitle += card.Template === \"-1\" ? ' Template' : '';\r\n $scope.securityOptions.allowPending = format.AllowPending === -1;\r\n\r\n //card number options\r\n $scope.securityOptions.autoNo = format.AutoNo === -1;\r\n $scope.securityOptions.maxCardNoLength = format.Mask.match(/0/g).length || 20;\r\n $scope.securityOptions.canChangeCardNo = !$scope.securityOptions.readOnly && !$scope.securityOptions.autoNo && $scope.checkCurrentUserPermission(WebFunctions.ViewCardNumbers);\r\n\r\n // section visibility options\r\n $scope.securityOptions.showEmbossingAlert = card.Export_To_Embosser === '-1';\r\n $scope.securityOptions.showCardAuths = $scope.securityOptions.readOnly ||\r\n card.CardAlertRule_Key > 0 ||\r\n card.Max_Trans_PerDay > 0 ||\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardCFs.length > 0;\r\n $scope.securityOptions.showVehicleInfo = format.AllowVehicleInfo === -1;\r\n $scope.securityOptions.showProdSite = card.Auth_By_Product !== '0' && card.Single_Site_Auth_Site_Key !== 0;\r\n $scope.securityOptions.showTaxExemeptions = $scope.appInfo.fuelCards.modalEdit.cardDetails.CardTaxExs.length > 0;\r\n\r\n // button options\r\n $scope.securityOptions.showSave = !$scope.securityOptions.readOnly;\r\n $scope.securityOptions.showChangePin = !$scope.securityOptions.readOnly && format.AllowPIN !== 0;\r\n $scope.securityOptions.showReissue = !$scope.securityOptions.readOnly;\r\n $scope.securityOptions.reissueTitle = format.PhysicalCard === 0 ? localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"ActivateCard\")) : localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"ReissueCard\"));\r\n $scope.securityOptions.showDeactivate = !$scope.securityOptions.readOnly;\r\n $scope.securityOptions.showSaveTemplate = $scope.checkCurrentUserPermission(WebFunctions.AddNewCards);\r\n\r\n // child field lookups\r\n $scope.securityOptions.shipToLocation = keyLookup($scope.appInfo.fuelCards.locations, card.CustLocKey, 'ID', '(Default)');\r\n $scope.securityOptions.format = format.Description;\r\n $scope.securityOptions.department = keyLookup($scope.appInfo.fuelCards.departments, card.CardDptKey, 'Description', '');\r\n $scope.securityOptions.state = keyLookup($scope.appInfo.fuelCards.states, card.Vehicle_State_Key, 'Description', '');\r\n $scope.securityOptions.cardType = card.Type === \"0\" ? 'Card Holder' : 'Vehicle Card';\r\n $scope.securityOptions.cardStatus = keyLookup($scope.appInfo.fuelCards.statusCodes, card.Status, 'Description', '');\r\n $scope.securityOptions.deactivationReason = keyLookup($scope.appInfo.fuelCards.deactivateReasons, card.CardDeactRsn_Key, 'Description', '');\r\n $scope.securityOptions.embossingReason = keyLookup($scope.appInfo.fuelCards.embossingReasons, card.CardEmbRsn_Key, 'Description', '');\r\n $scope.securityOptions.alertRule = keyLookup($scope.appInfo.fuelCards.alertRules, card.CardAlertRule_Key, 'ID', '');\r\n\r\n //show the card detail screen\r\n $scope.appInfo.fuelCards.viewCards.shown = false;\r\n $scope.appInfo.fuelCards.modalEdit.shown = true;\r\n };\r\n })\r\n .controller(\"viewCardsSideMenuCtrl\", function ($scope, FuelCardsService, WebFunctions, reportingService, $filter)\r\n {\r\n 'use strict';\r\n $scope.cols = [];\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.viewCards) $scope.locationInfo.sideMenuData.viewCards = [];\r\n $scope.locationInfo.sideMenuData.viewCards.reportType = 'ViewCards';\r\n $scope.locationInfo.sideMenuData.viewCards.cardFormat = '0';\r\n $scope.locationInfo.sideMenuData.viewCards.cardNumber = '';\r\n $scope.locationInfo.sideMenuData.viewCards.active = 'True';\r\n $scope.locationInfo.sideMenuData.viewCards.expired = 'False';\r\n $scope.locationInfo.sideMenuData.viewCards.pending = 'False';\r\n $scope.locationInfo.sideMenuData.viewCards.locked = 'False';\r\n $scope.locationInfo.sideMenuData.viewCards.cancelled = 'False';\r\n $scope.$root.reportSettings.reportKey = 20;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.viewCards.cardFormat = $scope.reportSettings.loadOptions.cardFormat;\r\n $scope.locationInfo.sideMenuData.viewCards.cardNumber = $scope.reportSettings.loadOptions.cardNumber;\r\n $scope.locationInfo.sideMenuData.viewCards.active = $scope.reportSettings.loadOptions.active;\r\n $scope.locationInfo.sideMenuData.viewCards.expired = $scope.reportSettings.loadOptions.expired;\r\n $scope.locationInfo.sideMenuData.viewCards.pending = $scope.reportSettings.loadOptions.pending;\r\n $scope.locationInfo.sideMenuData.viewCards.locked = $scope.reportSettings.loadOptions.locked;\r\n $scope.locationInfo.sideMenuData.viewCards.cancelled = $scope.reportSettings.loadOptions.cancelled;\r\n $scope.locationInfo.sideMenuData.viewCards.department = $scope.reportSettings.loadOptions.department;\r\n $scope.locationInfo.sideMenuData.viewCards.template = $scope.reportSettings.loadOptions.template;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.cardFormat = $scope.locationInfo.sideMenuData.viewCards.cardFormat;\r\n $scope.reportSettings.saveOptions.cardNumber = $scope.locationInfo.sideMenuData.viewCards.cardNumber;\r\n $scope.reportSettings.saveOptions.active = $scope.locationInfo.sideMenuData.viewCards.active;\r\n $scope.reportSettings.saveOptions.expired = $scope.locationInfo.sideMenuData.viewCards.expired;\r\n $scope.reportSettings.saveOptions.pending = $scope.locationInfo.sideMenuData.viewCards.pending;\r\n $scope.reportSettings.saveOptions.locked = $scope.locationInfo.sideMenuData.viewCards.locked;\r\n $scope.reportSettings.saveOptions.cancelled = $scope.locationInfo.sideMenuData.viewCards.cancelled;\r\n $scope.reportSettings.saveOptions.department = $scope.locationInfo.sideMenuData.viewCards.department;\r\n $scope.reportSettings.saveOptions.template = $scope.locationInfo.sideMenuData.viewCards.template;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n var format = $scope.locationInfo.sideMenuData.viewCards.cardFormat === '' ? '0' :\r\n $scope.locationInfo.sideMenuData.viewCards.cardFormat;\r\n var active = $scope.locationInfo.sideMenuData.viewCards.active === \"True\" ? -1 : 0;\r\n var expired = $scope.locationInfo.sideMenuData.viewCards.expired === \"True\" ? -1 : 0;\r\n var pending = $scope.locationInfo.sideMenuData.viewCards.pending === \"True\" ? -1 : 0;\r\n var locked = $scope.locationInfo.sideMenuData.viewCards.locked === \"True\" ? -1 : 0;\r\n var cancelled = $scope.locationInfo.sideMenuData.viewCards.cancelled === \"True\" ? -1 : 0;\r\n var department = $scope.locationInfo.sideMenuData.viewCards.department === '' ? '0':\r\n $scope.locationInfo.sideMenuData.viewCards.department;\r\n\r\n var qs = \"reportName=\" + 'CustomerCardList' +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-CardFormatKey=\" + format +\r\n \"&RP-CardNumDesc=\" + $scope.locationInfo.sideMenuData.viewCards.cardNumber +\r\n \"&RP-IsActive=\" + active +\r\n \"&RP-IsExpired=\" + expired +\r\n \"&RP-IsPending=\" + pending +\r\n \"&RP-IsLocked=\" + locked +\r\n \"&RP-IsCancelled=\" + cancelled +\r\n \"&RP-Department=\" + department +\r\n \"&RP-Template=\" + $scope.locationInfo.sideMenuData.viewCards.template +\r\n \"&RP-CanViewCardNumbers=\" + $scope.checkCurrentUserPermission(WebFunctions.ViewCardNumbers);\r\n\r\n reportingService.exportReport(qs, args.format);\r\n });\r\n })\r\n .controller(\"addCardsCtrl\", function ($scope, $compile, FuelCardsService, WebFunctions, $filter, validatorSvc, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.columns = [\r\n {\r\n field: \"description\",\r\n title: localStrings.getLocalizedString(\"CardDescription\"),\r\n attributes: {class: \"alignLeft\"},\r\n editor: function (element, options)\r\n {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"class\", \"k-input k-textbox\")\r\n .attr(\"maxlength\", 30)\r\n .prop('required', true)\r\n .attr(\"data-required-msg\", localStrings.getLocalizedString(\"Required\"))\r\n .appendTo(element);\r\n\r\n $('')\r\n .attr(\"data-for\", options.field)\r\n .attr(\"class\", \"k-invalid-msg\")\r\n .appendTo(element);\r\n }\r\n },\r\n {\r\n field: \"number\",\r\n title: localStrings.getLocalizedString(\"CardNumber\"),\r\n width: 160,\r\n attributes: {class: \"alignLeft\"},\r\n editor: function (element, options)\r\n {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"maxlength\", $scope.context.maxCardNoLength)\r\n .prop('required', true)\r\n .attr(\"data-required-msg\", localStrings.getLocalizedString(\"Required\"))\r\n .appendTo(element)\r\n .kendoNumericTextBox({\r\n decimals: 0,\r\n format: \"#\",\r\n min: 0,\r\n spinners: false\r\n });\r\n\r\n $('')\r\n .attr(\"data-for\", options.field)\r\n .attr(\"class\", \"k-invalid-msg\")\r\n .appendTo(element);\r\n }\r\n },\r\n {\r\n field: \"PIN\",\r\n title: localStrings.getLocalizedString(\"PIN\"),\r\n width: 120,\r\n attributes: {class: \"alignLeft\"},\r\n editor: function (element, options)\r\n {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"maxlength\", 16)\r\n .appendTo(element)\r\n .kendoNumericTextBox({\r\n decimals: 0,\r\n format: \"#\",\r\n min: 0,\r\n spinners: false\r\n });\r\n }\r\n },\r\n {\r\n field: \"vehicleID\",\r\n title: localStrings.getLocalizedString(\"VehicleID\"),\r\n width: 100,\r\n attributes: {class: \"alignLeft\"},\r\n editor: function (element, options)\r\n {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"class\", \"k-input k-textbox\")\r\n .attr(\"maxlength\", 20)\r\n .appendTo(element);\r\n\r\n $('')\r\n .attr(\"data-for\", options.field)\r\n .attr(\"class\", \"k-invalid-msg\")\r\n .appendTo(element);\r\n }\r\n },\r\n {\r\n field: \"licenseNo\",\r\n title: localStrings.getLocalizedString(\"LicenseNo\"),\r\n width: 100,\r\n attributes: {class: \"alignLeft\"},\r\n editor: function (element, options)\r\n {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"class\", \"k-input k-textbox\")\r\n .attr(\"maxlength\", 15)\r\n .appendTo(element);\r\n\r\n $('')\r\n .attr(\"data-for\", options.field)\r\n .attr(\"class\", \"k-invalid-msg\")\r\n .appendTo(element);\r\n }\r\n },\r\n {\r\n field: \"state\",\r\n title: localStrings.getLocalizedString(\"LicenseState\"),\r\n width: 60,\r\n template: \"#=state.Code#\",\r\n attributes: {class: \"alignLeft\"},\r\n editor: function (element, options)\r\n {\r\n $scope.kendo.stateList = $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .appendTo(element)\r\n .kendoDropDownList({\r\n autoBind: false,\r\n dataSource: $scope.context.states,\r\n dataTextField: \"Code\",\r\n dataValueField: \"Key\",\r\n optionLabel: {\r\n Key: null,\r\n Code: \"\"\r\n }\r\n });\r\n }\r\n },\r\n {\r\n title: ' ',\r\n template: \"\",\r\n width: 50\r\n },\r\n {\r\n title: ' ',\r\n template: \"\",\r\n width: 50\r\n }\r\n ];\r\n $scope.kendo.addCardsGridOptions = {\r\n autoBind: true,\r\n columns: $scope.kendo.columns,\r\n dataSource: new kendo.data.DataSource({\r\n data: [],\r\n schema: {\r\n model: {\r\n id: \"description\",\r\n fields: {\r\n key: {\r\n type: \"number\",\r\n editable: false,\r\n nullable: false,\r\n validation: false\r\n },\r\n description: {\r\n type: \"string\",\r\n editable: true,\r\n nullable: true,\r\n validation: false\r\n },\r\n number: {\r\n type: \"number\",\r\n editable: true,\r\n nullable: true,\r\n validation: {\r\n unique: function (input)\r\n {\r\n if (input.attr(\"name\") === \"number\" && input.val() !== '')\r\n {\r\n var matches = $scope.kendo.addCardsGrid.dataSource.data().toJSON().findAll({number: input.val().toNumber()}) || [];\r\n input.attr(\"data-unique-msg\", localStrings.getLocalizedString(\"MustBeUnique\"));\r\n return matches.length <= 1;\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n },\r\n PIN: {\r\n type: \"number\",\r\n editable: true,\r\n nullable: true,\r\n validation: false\r\n },\r\n vehicleID: {\r\n type: \"string\",\r\n editable: true,\r\n nullable: true,\r\n validation: false\r\n },\r\n licenseNo: {\r\n type: \"string\",\r\n editable: true,\r\n nullable: true,\r\n validation: false\r\n }, state: {\r\n editable: true,\r\n defaultValue: {Key: null, Code: \"\"}\r\n }\r\n }\r\n }\r\n }\r\n }),\r\n editable: {\r\n mode: \"inline\",\r\n update: true,\r\n destroy: true,\r\n createAt: \"bottom\"\r\n },\r\n filterable: false,\r\n messages: {\r\n commands: {\r\n cancel: \"\",\r\n canceledit: \"\",\r\n create: \"\",\r\n destroy: \"\",\r\n edit: \"\",\r\n save: \"\",\r\n select: \"\",\r\n update: \"\"\r\n }\r\n },\r\n mobile: true,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: true,\r\n sortable: true\r\n };\r\n\r\n function addFooterBar()\r\n {\r\n var addCardAction = $('
    ').appendTo($('#addCardsGrid'));\r\n $compile(addCardAction)($scope);\r\n }\r\n\r\n $scope.$on(\"kendoWidgetCreated\", function (event, widget)\r\n {\r\n if (widget === $scope.kendo.addCardsGrid)\r\n {\r\n addFooterBar();\r\n\r\n $scope.kendo.addCardsGrid.table.on(\"keydown\", function (e)\r\n {\r\n if (e.keyCode === kendo.keys.TAB && e.target.closest(\"td\").getAttribute(\"data-container-for\") === \"state\")\r\n {\r\n $scope.addRow();\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n $scope.kendo.addCardsGrid.tbody.on(\"click\", \"tr:not(.k-grid-edit-row)\", function (e)\r\n {\r\n $scope.kendo.addCardsGrid.editRow($scope.kendo.addCardsGrid.tbody.find(\"tr.k-state-selected\"));\r\n });\r\n }\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddNewCards) || !$scope.checkCurrentUserPermission(WebFunctions.EditCards))\r\n {\r\n $scope.goTo(\"/Home\");\r\n return;\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 40;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsCardsSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData)\r\n {\r\n $scope.locationInfo.sideMenuData = {};\r\n }\r\n $scope.locationInfo.sideMenuData.subMenu = '1';\r\n\r\n $scope.context = {\r\n template: {},\r\n format: {},\r\n showCardNo: false,\r\n showPIN: false,\r\n showVehInfo: false\r\n };\r\n\r\n FuelCardsService.getCardsContext($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n if (!data.Successful)\r\n {\r\n $scope.modalifier.showSetupError();\r\n return;\r\n }\r\n\r\n $scope.context.formats = data.CardFormats;\r\n $scope.context.states = data.States;\r\n $scope.context.templates = data.CustomerCardTemplates.sortBy('Description');\r\n\r\n validateTemplates();\r\n\r\n if ($scope.context.templates.length === 0)\r\n {\r\n var msg = $scope.checkCurrentUserPermission(WebFunctions.AddNewCards) ? ' ' + localStrings.getLocalizedString(\"CreateOneOr\") + ' ' : ' ';\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AddCards\"), localStrings.getLocalizedString(\"NoCardTemplates\") + msg + localStrings.getLocalizedString(\"ContactAccountAdmin\"));\r\n $scope.context.templateKey = 0;\r\n }\r\n else\r\n $scope.context.templateKey = $scope.context.templates[0].Key;\r\n\r\n // Need to make sure the template details are loaded when the add cards page is loaded\r\n if ($scope.context.templateKey > 0) {\r\n $scope.getTemplate($scope.context.templateKey);\r\n }\r\n });\r\n };\r\n\r\n $scope.addRow = function ()\r\n {\r\n if ($scope.kendo.templateDropDown.value().isBlank())\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AddCards\"), localStrings.getLocalizedString(\"ValidTemplateRequired\"));\r\n return;\r\n }\r\n\r\n $scope.kendo.addCardsGrid.saveChanges();\r\n $scope.kendo.addCardsGrid.addRow();\r\n };\r\n\r\n $scope.getTemplate = function (key)\r\n {\r\n if (!key)\r\n {\r\n return;\r\n }\r\n\r\n FuelCardsService.getCardDetails(key).then(\r\n function (data)\r\n {\r\n if (!data.Successful)\r\n {\r\n $scope.modalifier.showSetupError();\r\n return;\r\n }\r\n\r\n //store complete card object\r\n $scope.context.templateDetails = data.CardDetails;\r\n\r\n //get selected template and format\r\n $scope.context.template = $filter('filter')($scope.context.templates, {Key: key.toNumber()}, true)[0];\r\n $scope.context.format = $filter('filter')($scope.context.formats, {Key: $scope.context.templateDetails.CardInfos[0].CardFmt_Key}, true)[0];\r\n $scope.context.maxCardNoLength = $scope.context.format.Mask.match(/0/g).length || 20;\r\n\r\n $scope.kendo.addCardsGrid.cancelRow();\r\n var cols = $scope.kendo.columns.clone();\r\n\r\n if ($scope.context.template.PhysicalCard !== -1)\r\n cols.remove({field: 'number'});\r\n\r\n if ($scope.context.template.AllowPIN === -1)\r\n cols.remove({field: 'PIN'});\r\n\r\n if ($scope.context.format.AllowVehicleInfo === -1)\r\n {\r\n cols.remove({field: 'vehicleID'});\r\n cols.remove({field: 'licenseNo'});\r\n cols.remove({field: 'state'});\r\n }\r\n\r\n $scope.kendo.addCardsGrid.setOptions({\r\n columns: cols\r\n });\r\n\r\n addFooterBar();\r\n });\r\n };\r\n\r\n $scope.saveCards = function ()\r\n {\r\n $scope.kendo.addCardsGrid.saveChanges();\r\n\r\n if ($scope.kendo.addCardsGrid.tbody.find(\".k-invalid\").length > 0)\r\n return;\r\n\r\n var cards = $scope.kendo.addCardsGrid.dataSource.data();\r\n\r\n //make sure there is at least one card to save\r\n if (angular.isUndefinedOrNullOrEmpty(cards))\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoCardsToSave\"), 'error');\r\n return;\r\n }\r\n\r\n //process each card entry for save\r\n angular.forEach(\r\n cards,\r\n function (item)\r\n {\r\n //create a complete card record from the selected template and push to the DB\r\n var newCard = angular.copy($scope.context.templateDetails.CardInfos[0]);\r\n\r\n newCard.Cust_Key = $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n newCard.Description = item.description;\r\n newCard.Number = item.number;\r\n newCard.PIN = item.PIN;\r\n newCard.Expiration_Date = $scope.context.template.SetExpirationDate;\r\n newCard.VehicleID = item.vehicleID;\r\n newCard.Vehicle_License_No = item.licenseNo;\r\n newCard.Vehicle_State_Key = item.state.Key;\r\n newCard.Template = 0;\r\n newCard.Status = newCard.CardFmt_Allow_Pending === '-1' ? '4' : '0';\r\n\r\n FuelCardsService.addCard(\r\n 4,\r\n newCard,\r\n $scope.context.templateDetails.CardCFs[0],\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey).then(\r\n function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (!data.CardNumberValid)\r\n //notify on failure\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"CardNumberUnique\"), 'error');\r\n }\r\n else\r\n {\r\n //remove saved cards\r\n var result = getCard();\r\n var i = cards.indexOf(result);\r\n cards.splice(i, 1);\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesSaved\"), \"success\");\r\n }\r\n }\r\n else\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"RecordNotSaved\"), 'error');\r\n }\r\n });\r\n\r\n //javascript closure to capture index and hold it until the promise returns\r\n /*jshint latedef: false */\r\n var getCard = (function ()\r\n {\r\n var myItem = item;\r\n return function ()\r\n {\r\n return myItem;\r\n };\r\n })();\r\n });\r\n };\r\n\r\n /*jshint latedef: false */\r\n var validateTemplates = function ()\r\n {\r\n for (var i = $scope.context.templates.length - 1; i >= 0; i--)\r\n {\r\n if ($scope.context.templates[i].PhysicalCard === -1 && !($scope.context.templates[i].AutoNoKey === -1 ||\r\n $scope.context.templates[i].AllowPending === -1))\r\n {\r\n $scope.context.templates.splice(i, 1);\r\n }\r\n }\r\n };\r\n\r\n })\r\n .controller(\"locationsCtrl\", function ($scope, FuelCardsService, customerService, validatorSvc, $filter, WebFunctions, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.kendo = {};\r\n $scope.kendo.locationsGrid = {};\r\n $scope.kendo.locationsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var selectedRows = this.select();\r\n var dataItem = this.dataItem(selectedRows[0]);\r\n $scope.selectLocation(dataItem);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"ID\",\r\n title: localStrings.getLocalizedString(\"ID\"),\r\n width: 100,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Description\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Address1\",\r\n title: localStrings.getLocalizedString(\"Address\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"City\",\r\n title: localStrings.getLocalizedString(\"City\"),\r\n width: 125,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"County\",\r\n title: localStrings.getLocalizedString(\"County\"),\r\n width: 125,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"State\",\r\n title: localStrings.getLocalizedString(\"StateProvince\"),\r\n width: 90,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"PostalCode\",\r\n title: localStrings.getLocalizedString(\"PostalCode\"),\r\n width: 90,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.locationsGridInit = function ()\r\n {\r\n $scope.kendo.locationsGridDS = new kendo.data.DataSource({\r\n data: $scope.appInfo.fuelCards.locations.results\r\n });\r\n\r\n $scope.kendo.locationsGridDS.read();\r\n $scope.kendo.locationsGrid.dataSource.data($scope.kendo.locationsGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.checkForAppliedProfile();\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 40;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsCardsSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n if (!$scope.appInfo.fuelCards.states)\r\n {\r\n FuelCardsService.getCardsContext(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey\r\n ).then(\r\n function (data)\r\n {\r\n $scope.appInfo.fuelCards.states = data.States;\r\n }\r\n );\r\n }\r\n $scope.appInfo.fuelCards.locations = {\r\n results: [],\r\n selected: {},\r\n disableCtrls: true,\r\n LocIDFormat: 1,\r\n LocIDLength: 10\r\n };\r\n\r\n $scope.canAddorSave = $scope.checkCurrentUserPermission(WebFunctions.ViewCards) && ($scope.checkCurrentUserPermission(WebFunctions.AddNewCards) ||\r\n $scope.checkCurrentUserPermission(WebFunctions.EditCards));\r\n\r\n validatorSvc.clearValidationScopes();\r\n\r\n if (!$scope.appInfo.fuelCards.states)\r\n {\r\n FuelCardsService.getCardsContext(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey\r\n ).then(\r\n function (data)\r\n {\r\n $scope.appInfo.fuelCards.states = data.States;\r\n $scope.appInfo.fuelCards.states.unshift({Key: 0, Name: ' '});\r\n $scope.pullLocations();\r\n }\r\n );\r\n }\r\n else\r\n $scope.pullLocations();\r\n $scope.predicate = 'ID';\r\n $scope.reverse = false;\r\n };\r\n\r\n $scope.addLocation = function ()\r\n {\r\n $scope.clearLocation();\r\n $scope.appInfo.fuelCards.locations.disableCtrls = false;\r\n };\r\n\r\n $scope.clearLocation = function ()\r\n {\r\n angular.copy(FuelCardsService.blankLocation, $scope.appInfo.fuelCards.locations.selected);\r\n $scope.appInfo.fuelCards.locations.disableCtrls = true;\r\n validatorSvc.clearAllValidations();\r\n };\r\n\r\n $scope.deleteLocation = function (location)\r\n {\r\n var yes = function ()\r\n {\r\n $scope.pushLocation(8, location);\r\n };\r\n\r\n $scope.modalifier.confirm(localStrings.getLocalizedString(\"DeleteLocation\"), yes);\r\n };\r\n\r\n $scope.saveLocation = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n if ($scope.appInfo.fuelCards.locations.selected.Key === 0)\r\n {\r\n $scope.appInfo.fuelCards.locations.selected.CustKey = $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n $scope.appInfo.fuelCards.locations.selected.Type = 2;\r\n $scope.pushLocation(4, $scope.appInfo.fuelCards.locations.selected);\r\n } else\r\n $scope.pushLocation(16, $scope.appInfo.fuelCards.locations.selected);\r\n };\r\n\r\n $scope.selectLocation = function (location)\r\n {\r\n $scope.clearLocation();\r\n angular.copy(location, $scope.appInfo.fuelCards.locations.selected);\r\n $scope.appInfo.fuelCards.locations.disableCtrls = !$scope.checkCurrentUserPermission(WebFunctions.EditCards);\r\n };\r\n\r\n $scope.pullLocations = function ()\r\n {\r\n customerService.getCustomerLocations($scope.appInfo.webUser.CurrentAuthorization.CustKey, 2)\r\n .then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.Locations.length > 0)\r\n {\r\n $scope.appInfo.fuelCards.locations.LocIDFormat = data.LocIDFormat || 0;\r\n $scope.appInfo.fuelCards.locations.LocIDLength = data.LocIDLength || 10;\r\n $scope.appInfo.fuelCards.locations.results = data.Locations\r\n .each(function (loc, i)\r\n {\r\n var state = $scope.appInfo.fuelCards.states.find({Key: loc.StateKey});\r\n loc.State = state ? state.Code : null;\r\n })\r\n .sortBy('Description');\r\n $scope.selectLocation($scope.appInfo.fuelCards.locations.results[0]);\r\n $scope.kendo.locationsGridInit();\r\n $scope.kendo.locationsGridInit();\r\n }\r\n else\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoResults\"), 'warning');\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n }\r\n );\r\n\r\n };\r\n\r\n $scope.pushLocation = function (status, location)\r\n {\r\n customerService.saveCustomerLocations(\r\n status,\r\n location,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n )\r\n .then(function (data)\r\n {\r\n $scope.clearLocation();\r\n $scope.pullLocations();\r\n $scope.resetDirtyFlags($scope.appInfo.fuelCards.locations.locationsForm);\r\n }\r\n );\r\n };\r\n\r\n $scope.updatePhone = function ()\r\n {\r\n $scope.appInfo.fuelCards.locations.selected.Phone = $scope.appInfo.fuelCards.locations.selected.PhoneFormatted.replace(/[^0-9]/g, '');\r\n };\r\n })\r\n .controller(\"departmentsCtrl\", function ($scope, $filter, $timeout, FuelCardsService, validatorSvc, WebFunctions, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.cols = [];\r\n $scope.kendo = {departmentsGridReady: false};\r\n $scope.kendo.departmentsGrid = {};\r\n $scope.kendo.departmentsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var dataItem = this.dataItem(this.select()[0]);\r\n $scope.selectRow(dataItem.deptKey);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"deptName\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"cell1Value\",\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"cell2Value\",\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"cell3Value\",\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"cell4Value\",\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"cell5Value\",\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n //height: $(document).height() - 375,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.departmentsGridInit = function ()\r\n {\r\n $scope.kendo.departmentsGridDS = new kendo.data.DataSource({\r\n data: $scope.tableArray\r\n });\r\n\r\n $scope.kendo.departmentsGridDS.read();\r\n $scope.kendo.departmentsGrid.dataSource.data($scope.kendo.departmentsGridDS.data());\r\n\r\n if ($scope.cols[0])\r\n $(\"#departmentsGrid th[data-field=cell1Value] a\").html($scope.cols[0].FieldName);\r\n else\r\n $scope.kendo.departmentsGrid.hideColumn(1);\r\n\r\n if ($scope.cols[1])\r\n $(\"#departmentsGrid th[data-field=cell2Value] a\").html($scope.cols[1].FieldName);\r\n else\r\n $scope.kendo.departmentsGrid.hideColumn(2);\r\n\r\n if ($scope.cols[2])\r\n $(\"#departmentsGrid th[data-field=cell3Value] a\").html($scope.cols[2].FieldName);\r\n else\r\n $scope.kendo.departmentsGrid.hideColumn(3);\r\n\r\n if ($scope.cols[3])\r\n $(\"#departmentsGrid th[data-field=cell4Value] a\").html($scope.cols[3].FieldName);\r\n else\r\n $scope.kendo.departmentsGrid.hideColumn(4);\r\n\r\n if ($scope.cols[4])\r\n $(\"#departmentsGrid th[data-field=cell5Value] a\").html($scope.cols[4].FieldName);\r\n else\r\n $scope.kendo.departmentsGrid.hideColumn(5);\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 40;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsCardsSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n $scope.departments = [];\r\n $scope.fields = [];\r\n $scope.values = [];\r\n $scope.selDept = {};\r\n $scope.selVals = [];\r\n $scope.disableControls = true;\r\n\r\n $scope.canAddorSave = $scope.checkCurrentUserPermission(WebFunctions.ViewCards) && ($scope.checkCurrentUserPermission(WebFunctions.AddNewCards) ||\r\n $scope.checkCurrentUserPermission(WebFunctions.EditCards));\r\n\r\n validatorSvc.clearValidationScopes();\r\n $scope.pullDepartments();\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.tableArray))\r\n $scope.selectRow($scope.tableArray[0].deptKey);\r\n };\r\n\r\n $scope.createObjects = function (data)\r\n {\r\n $scope.display = {\r\n hideCol1: true,\r\n hideCol2: true,\r\n hideCol3: true,\r\n hideCol4: true,\r\n hideCol5: true,\r\n disableControls: true\r\n };\r\n\r\n if (data.Successful)\r\n {\r\n $scope.departments = data.Departments || [];\r\n $scope.fields = data.Fields || [];\r\n $scope.values = data.Values || [];\r\n\r\n if ($scope.departments.length === 0 && $scope.fields.length === 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoResults\"), 'warning');\r\n }\r\n }\r\n else\r\n {\r\n $scope.modalifier.showSetupError();\r\n return;\r\n }\r\n\r\n //(rare) catch any empty field names and give them a default value\r\n angular.forEach($scope.fields, function (item)\r\n {\r\n if (item.Key > 0 && item.FieldName.isBlank())\r\n item.FieldName = localStrings.getLocalizedString(\"DeptField\") + ' ' + item.FieldNumber;\r\n });\r\n\r\n // No depts defined, create empty binding objs\r\n if ($scope.departments.length === 0)\r\n {\r\n $scope.selDept = {\r\n \"CustKey\": $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n \"Description\": \"\",\r\n \"Key\": 0,\r\n \"TimeStamp\": \"\"\r\n };\r\n\r\n // create a blank value obj for any defined fields\r\n angular.forEach($scope.fields, function (field)\r\n {\r\n $scope.selVals.push({\r\n \"CardDptFldKey\": field.Key,\r\n \"CardDptKey\": 0,\r\n \"FieldValue\": \"\",\r\n \"Key\": 0,\r\n \"TimeStamp\": \"\"\r\n });\r\n });\r\n }\r\n else\r\n // depts exist, create any needed empty values for fields not previously defined\r\n {\r\n var temp = {};\r\n angular.forEach($scope.departments, function (dept)\r\n {\r\n angular.forEach($scope.fields, function (field)\r\n {\r\n temp = ($filter('filter')($scope.values, {\r\n CardDptKey: dept.Key,\r\n CardDptFldKey: field.Key\r\n }));\r\n if (temp.length === 0)\r\n {\r\n $scope.values.push({\r\n \"CardDptFldKey\": field.Key,\r\n \"CardDptKey\": dept.Key,\r\n \"FieldValue\": \"\",\r\n \"Key\": 0,\r\n \"TimeStamp\": \"\"\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n if ($scope.departments.length > 0 && $scope.fields.length > 0)\r\n $scope.makeTable();\r\n\r\n if ($scope.departments.length > 0 && $scope.fields.length === 0)\r\n $scope.loadTable();\r\n\r\n if ($scope.departments.length === 0)\r\n $scope.tableArray = [];\r\n\r\n validatorSvc.clearAllValidations();\r\n\r\n $scope.kendo.departmentsGridInit();\r\n };\r\n\r\n $scope.deleteDept = function ()\r\n {\r\n var yes = function ()\r\n {\r\n $scope.pushDepartments(8);\r\n };\r\n\r\n $scope.modalifier.confirm(localStrings.getLocalizedString(\"DeleteDepartment\"), yes);\r\n };\r\n\r\n $scope.pullDepartments = function ()\r\n {\r\n FuelCardsService.getCardsDepartments($scope.appInfo.webUser.CurrentAuthorization.CustKey)\r\n .then(function (data)\r\n {\r\n $scope.createObjects(data);\r\n $scope.resetDirtyFlags($scope.departmentForm);\r\n }\r\n );\r\n };\r\n\r\n $scope.pushDepartments = function (recStatus)\r\n {\r\n if (recStatus !== 8 && !validatorSvc.executeValidations())\r\n return;\r\n\r\n if (angular.isUndefinedOrNullOrEmpty(recStatus))\r\n recStatus = $scope.selDept.Key === 0 ? 4 : 16;\r\n\r\n $scope.selDept.Description = $scope.selDept.newDesc;\r\n\r\n FuelCardsService.saveCardsDepartments(\r\n recStatus,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n [$scope.selDept],\r\n null,\r\n $scope.selVals,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n )\r\n .then(function (data)\r\n {\r\n $scope.selDept = {};\r\n $scope.selVals = [];\r\n $scope.display.disableControls = true;\r\n $scope.createObjects(data);\r\n $scope.resetDirtyFlags($scope.departmentForm);\r\n }\r\n );\r\n\r\n $scope.selDept = {};\r\n $scope.selVals = [];\r\n $scope.display.disableControls = true;\r\n\r\n };\r\n\r\n $scope.addRow = function ()\r\n {\r\n $scope.display.disableControls = !$scope.canAddorSave;\r\n $scope.selDept = {\r\n CustKey: $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n Description: \"\",\r\n Key: 0,\r\n TimeStamp: ''\r\n };\r\n\r\n $scope.selVals = [];\r\n\r\n angular.forEach($scope.fields, function (item)\r\n {\r\n $scope.selVals.push({\r\n CardDptFldKey: item.Key,\r\n CardDptKey: 0,\r\n FieldValue: '',\r\n Key: 0,\r\n TimeStamp: ''\r\n });\r\n });\r\n\r\n $scope.setFocusOnReady(\"#fc-dept-description\");\r\n };\r\n\r\n $scope.selectRow = function (key)\r\n {\r\n validatorSvc.clearAllValidations();\r\n var dept = $filter('filter')($scope.departments, {Key: key}, true)[0];\r\n $scope.selDept = dept;\r\n $scope.selDept.newDesc = dept.Description;\r\n $scope.selVals = $scope.values.findAll({CardDptKey: dept.Key}).sortBy(function (n)\r\n {\r\n return $scope.fields.find({Key: n.CardDptFldKey}).FieldNumber;\r\n });\r\n $scope.display.disableControls = !$scope.canAddorSave;\r\n\r\n $scope.setFocusOnReady(\"#fc-dept-description\");\r\n };\r\n\r\n $scope.makeTable = function ()\r\n {\r\n $scope.tableArray = [];\r\n\r\n //get columns into the righ torder\r\n $scope.cols = $filter('orderBy')($scope.fields, 'FieldNumber');\r\n\r\n angular.forEach($scope.departments, function (dept)\r\n {\r\n var row = {};\r\n row.deptKey = dept.Key;\r\n row.deptName = dept.Description;\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.cols[0]))\r\n {\r\n var cell1 = $filter('filter')($scope.values, {\r\n CardDptKey: dept.Key,\r\n CardDptFldKey: $scope.cols[0].Key\r\n })[0];\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty(cell1))\r\n {\r\n row.cell1Key = cell1.Key;\r\n row.cell1Value = cell1.FieldValue;\r\n $scope.display.hideCol1 = false;\r\n }\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.cols[1]))\r\n {\r\n var cell2 = $filter('filter')($scope.values, {\r\n CardDptKey: dept.Key,\r\n CardDptFldKey: $scope.cols[1].Key\r\n })[0];\r\n if (!angular.isUndefinedOrNullOrEmpty(cell2))\r\n {\r\n row.cell2Key = cell2.Key;\r\n row.cell2Value = cell2.FieldValue;\r\n $scope.display.hideCol2 = false;\r\n }\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.cols[2]))\r\n {\r\n var cell3 = $filter('filter')($scope.values, {\r\n CardDptKey: dept.Key,\r\n CardDptFldKey: $scope.cols[2].Key\r\n })[0];\r\n if (!angular.isUndefinedOrNullOrEmpty(cell3))\r\n {\r\n row.cell3Key = cell3.Key;\r\n row.cell3Value = cell3.FieldValue;\r\n $scope.display.hideCol3 = false;\r\n }\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.cols[3]))\r\n {\r\n var cell4 = $filter('filter')($scope.values, {\r\n CardDptKey: dept.Key,\r\n CardDptFldKey: $scope.cols[3].Key\r\n })[0];\r\n if (!angular.isUndefinedOrNullOrEmpty(cell4))\r\n {\r\n row.cell4Key = cell4.Key;\r\n row.cell4Value = cell4.FieldValue;\r\n $scope.display.hideCol4 = false;\r\n }\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.cols[4]))\r\n {\r\n var cell5 = $filter('filter')($scope.values, {\r\n CardDptKey: dept.Key,\r\n CardDptFldKey: $scope.cols[4].Key\r\n })[0];\r\n if (!angular.isUndefinedOrNullOrEmpty(cell5))\r\n {\r\n row.cell5Key = cell5.Key;\r\n row.cell5Value = cell5.FieldValue;\r\n $scope.display.hideCol5 = false;\r\n }\r\n }\r\n\r\n $scope.tableArray.push(row);\r\n });\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.tableArray))\r\n $scope.tableArray = $filter('orderBy')($scope.tableArray, 'department');\r\n };\r\n\r\n $scope.loadTable = function ()\r\n {\r\n $scope.tableArray = [];\r\n angular.forEach($scope.departments, function (dept)\r\n {\r\n $scope.tableArray.push({deptKey: dept.Key, deptName: dept.Description});\r\n });\r\n };\r\n })\r\n .controller(\"departmentSetupCtrl\", function ($scope, FuelCardsService, validatorSvc, $filter, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n\r\n $scope.initialize = function ()\r\n {\r\n\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 40;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsCardsSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"4\";\r\n\r\n $scope.formDisabled = $scope.checkCurrentUserPermission(WebFunctions.ViewCards) && !($scope.checkCurrentUserPermission(WebFunctions.AddNewCards) ||\r\n $scope.checkCurrentUserPermission(WebFunctions.EditCards));\r\n validatorSvc.clearValidationScopes();\r\n $scope.pullFields();\r\n };\r\n\r\n $scope.setFields = function ()\r\n {\r\n validatorSvc.clearAllValidations();\r\n $scope.fields = [{}, {}, {}, {}, {}];\r\n for (var index = 0; index < 5; ++index)\r\n {\r\n var match = $filter('filter')($scope.results, {FieldNumber: index + 1})[0];\r\n if (angular.isUndefinedOrNullOrEmpty(match))\r\n {\r\n $scope.fields[index] = {\r\n \"CustKey\": $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n \"FieldName\": \"\",\r\n \"FieldNumber\": index + 1,\r\n \"Key\": 0,\r\n \"TimeStamp\": \"\"\r\n };\r\n }\r\n else\r\n {\r\n $scope.fields[index] = match;\r\n }\r\n }\r\n\r\n $scope.setFocusOnReady(\"#fc-deptSU-content input:first\");\r\n };\r\n\r\n $scope.clickCancel = function ()\r\n {\r\n $scope.setFields();\r\n };\r\n\r\n $scope.clickSave = function ()\r\n {\r\n //fire off validations\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n //remove any empty records\r\n for (var i = $scope.fields.length - 1; i >= 0; i--)\r\n {\r\n if ($scope.fields[i].Key === 0 && $scope.fields[i].FieldName === '')\r\n $scope.fields.splice(i, 1);\r\n }\r\n\r\n //save the fields\r\n $scope.pushFields();\r\n };\r\n\r\n $scope.pullFields = function ()\r\n {\r\n FuelCardsService.getCardsDepartments($scope.appInfo.webUser.CurrentAuthorization.CustKey)\r\n .then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n $scope.results = data.Fields || [];\r\n }\r\n else\r\n {\r\n $scope.modalifier.showSetupError();\r\n $scope.results = [];\r\n }\r\n $scope.setFields();\r\n }\r\n );\r\n\r\n };\r\n\r\n $scope.pushFields = function ()\r\n {\r\n FuelCardsService.saveCardsDepartments(\r\n 5,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n null,\r\n $scope.fields,\r\n null,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n )\r\n .then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.Successful)\r\n {\r\n $scope.results = data.Fields || [];\r\n $scope.resetDirtyFlags($scope.deptSetupForm);\r\n }\r\n else\r\n {\r\n $scope.results = [];\r\n }\r\n $scope.setFields();\r\n }\r\n }\r\n );\r\n };\r\n });","/**\r\n * Created by jvitoria on 9/5/14.\r\n */\r\nangular.module(\"pnFuelCardsPrices\", ['core.objects'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/FuelCards/Prices/LookupPrices\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"LookupPrices\"),\r\n controller: \"pricesLookupCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsPricesLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/FuelCards/Prices/PriceNoticeSettings\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"PriceNoticeSettings\"),\r\n controller: \"priceNoticeSettingsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsPricesLocalization\");\r\n }\r\n }\r\n });\r\n })\r\n\r\n .controller('fuelCardsPricesSideMenuCtrl', function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n };\r\n })\r\n\r\n .controller(\"pricesLookupCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CPPriceNotices))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 42;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsPricesSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"0\";\r\n };\r\n })\r\n\r\n .controller(\"pricesLookupSideMenuCtrl\", function ($scope, $filter, FuelCardsService, reportingService, localizationSvc, $timeout)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"FuelCardsPricesLocalization\");\r\n $scope.initialize = function ()\r\n {\r\n\r\n // instantiate variables\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.lookupPrices = {\r\n reportType: 'PricesLookup',\r\n site: 0,\r\n product: 0,\r\n groupBy: 4\r\n };\r\n $scope.context = {\r\n sites: [{ CustContCPSite_Site_Key: 0, Site_Description: localStrings.getLocalizedString(\"Any\") }],\r\n products: [{ ProdAliasGrp_Key: 0, ProdAliasGrp_Description: localStrings.getLocalizedString(\"Any\") }],\r\n maxCPDays: 7\r\n };\r\n\r\n //set save / load settings parameter\r\n $scope.$root.reportSettings.reportKey = 30;\r\n\r\n //get context data for drop-downs\r\n FuelCardsService.getPriceNoticesSettings(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.Customer.CPPrcNtcRuleKey).then(\r\n function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.PriceNoticesSettingsSites.length > 0)\r\n {\r\n $scope.context.sites = $scope.context.sites.concat($filter('filter')(data.PriceNoticesSettingsSites, {Site_Selected: '-1'}));\r\n $scope.context.sites = $filter('orderBy')($scope.context.sites, 'Site_Description');\r\n }\r\n else\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoSitesConfigured\"), 'warning');\r\n }\r\n\r\n if (data.PriceNoticesSettingsGroups.length > 0)\r\n {\r\n //pull All Products record from the array and handle separately\r\n data.PriceNoticesSettingsGroups.splice(0, 1);\r\n\r\n $scope.context.products = $scope.context.products.concat($filter('filter')(data.PriceNoticesSettingsGroups, {ProdAliasGrp_Selected: '-1'}));\r\n $scope.context.products = $filter('orderBy')($scope.context.products, 'ProdAliasGrp_Description');\r\n }\r\n else\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoProductsConfigured\"), 'warning');\r\n }\r\n\r\n $scope.context.maxCPDays = data.CPPriceRuleMaxDays;\r\n }\r\n else\r\n $scope.notifier.show(localStrings.getLocalizedString(\"FailedLoadContextualData\"), 'error');\r\n }\r\n );\r\n\r\n //Override default date selector options\r\n $scope.dateSelector.selection = 13;\r\n $scope.dateSelector.maxNumOfDays = $scope.context.maxCPDays || 7;\r\n $scope.dateSelector.overrideDefaults = true;\r\n $timeout(function () {\r\n $scope.dateSelector.options = [\r\n { name: localStrings.getLocalizedString(\"AllDays\"), value: 13 },\r\n { name: localStrings.getLocalizedString(\"Today\"), value: 0 },\r\n { name: localStrings.getLocalizedString(\"Yesterday\"), value: 1 },\r\n { name: localStrings.getLocalizedString(\"Tomorrow\"), value: 2 },\r\n { name: localStrings.getLocalizedString(\"LastSevenDays\"), value: 9 },\r\n { name: localStrings.getLocalizedString(\"SelectDays\"), value: 12 }];\r\n }, 0);\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.lookupPrices = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.lookupPrices;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n // Notify the user their date selection exceeds the configured limit\r\n var maxCPDays = [$scope.context.maxCPDays];\r\n if ((Date.parse($scope.dateSelector.endDate) - Date.parse($scope.dateSelector.startDate)) > ($scope.context.maxCPDays * 86400000))\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"PricingLimitedTo\", maxCPDays), 'warning');\r\n $scope.dateSelector.numOfDays = $scope.context.maxCPDays;\r\n }\r\n\r\n var qs = \"reportName=\" + 'CPPriceNotices' +\r\n \"&RP-CustContKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustContKey +\r\n \"&RP-FromDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-ThruDate=\" + $scope.dateSelector.endDate +\r\n \"&RP-SiteKey=\" + $scope.locationInfo.sideMenuData.lookupPrices.site +\r\n \"&RP-ProductKey=\" + $scope.locationInfo.sideMenuData.lookupPrices.product +\r\n \"&RP-GroupBy=\" + $scope.locationInfo.sideMenuData.lookupPrices.groupBy;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n\r\n .controller(\"priceNoticeSettingsCtrl\", function ($scope, FuelCardsService, WebFunctions, $filter, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.kendo = {};\r\n $scope.kendo.productsGrid = {};\r\n $scope.kendo.productsGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"ProdAliasGrp_Selected\",\r\n title: localStrings.getLocalizedString(\"Select\"),\r\n width: 70,\r\n attributes: {class: \"alignCenter\"},\r\n filterable: false,\r\n template: \"\"\r\n },\r\n {\r\n field: \"ProdAliasGrp_Description\",\r\n title: localStrings.getLocalizedString(\"Product\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n }\r\n ],\r\n dataSource: [],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n $scope.kendo.sitesGrid = {};\r\n $scope.kendo.sitesGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"Site_Description\",\r\n title: localStrings.getLocalizedString(\"SiteDescription\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Site_Address1\",\r\n title: localStrings.getLocalizedString(\"Address\"),\r\n width: 150,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Site_City\",\r\n title: localStrings.getLocalizedString(\"City\"),\r\n width: 150,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"State_Code\",\r\n title: localStrings.getLocalizedString(\"State\"),\r\n width: 60,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Site_Zip\",\r\n title: localStrings.getLocalizedString(\"Zip\"),\r\n width: 60,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: [],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n $scope.kendo.siteSearchGrid = {};\r\n $scope.kendo.siteSearchGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"ProdAliasGrp_Selected\",\r\n title: localStrings.getLocalizedString(\"Select\"),\r\n width: 70,\r\n attributes: {class: \"alignCenter\"},\r\n filterable: false,\r\n template: \"\"\r\n },\r\n {\r\n field: \"Site_Description\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Site_Address1\",\r\n title: localStrings.getLocalizedString(\"Address\"),\r\n width: 150,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Site_City\",\r\n title: localStrings.getLocalizedString(\"City\"),\r\n width: 150,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"State_Code\",\r\n title: localStrings.getLocalizedString(\"State\"),\r\n width: 60,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Site_Zip\",\r\n title: localStrings.getLocalizedString(\"Zip\"),\r\n width: 60,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: true,\r\n selectable: \"row\",\r\n sortable: true,\r\n height:250 \r\n };\r\n\r\n $scope.kendo.siteSearchGridInit = function (ds)\r\n {\r\n $scope.kendo.siteSearchGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.siteSearchGridDS.read();\r\n $scope.kendo.siteSearchGrid.dataSource.data($scope.kendo.siteSearchGridDS.data());\r\n };\r\n\r\n $scope.kendo.sitesGridInit = function (ds)\r\n {\r\n $scope.kendo.sitesGridDS = new kendo.data.DataSource({\r\n data: ds,\r\n schema: {\r\n model: {\r\n fields: {\r\n Site_Description: {\r\n editable: false\r\n },\r\n Site_Address1: {\r\n editable: false\r\n },\r\n Site_City: {\r\n editable: false\r\n },\r\n State_Code: {\r\n editable: false\r\n },\r\n Site_Zip: {\r\n editable: false\r\n },\r\n Site_Selected: {\r\n editable: false\r\n }\r\n }\r\n }\r\n },\r\n //filter: [\r\n // {field: \"Site_Selected\", operator: \"eq\", value: \"'-1'\"}\r\n //],\r\n batch: true\r\n });\r\n\r\n $scope.kendo.sitesGridDS.read();\r\n $scope.kendo.sitesGrid.dataSource.data($scope.kendo.sitesGridDS.data());\r\n };\r\n\r\n $scope.kendo.productsGridInit = function (ds)\r\n {\r\n $scope.kendo.productsGridDS = new kendo.data.DataSource({\r\n data: ds,\r\n schema: {\r\n model: {\r\n fields: {\r\n ProdAliasGrp_Selected: {\r\n editable: false\r\n },\r\n ProdAliasGrp_Description: {\r\n editable: false\r\n }\r\n }\r\n }\r\n },\r\n batch: true\r\n });\r\n\r\n $scope.kendo.productsGridDS.read();\r\n $scope.kendo.productsGrid.dataSource.data($scope.kendo.productsGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CPPriceNotices))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 42;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsPricesSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"1\";\r\n $scope.getWebProfileMessage(5);\r\n $scope.initPriceNoticesSettings();\r\n $scope.initModalSiteSelector();\r\n };\r\n\r\n $scope.initPriceNoticesSettings = function ()\r\n {\r\n $scope.appInfo.fuelCards.priceNoticesSettings = {};\r\n $scope.appInfo.fuelCards.priceNoticesSettings.methods = {};\r\n $scope.appInfo.fuelCards.priceNoticesSettings.allProducts = {\r\n CustContCPProd_Key: -1,\r\n CustContCPProd_CustCont_Key: null,\r\n ProdAliasGrp_Key: -1,\r\n ProdAliasGrp_ID: \"All\",\r\n ProdAliasGrp_Description: localStrings.getLocalizedString(\"AllProducts\"),\r\n ProdAliasGrp_Selected: \"0\",\r\n ts: null\r\n };\r\n $scope.refreshPriceNoticesSettings();\r\n };\r\n\r\n $scope.refreshPriceNoticesSettings = function ()\r\n {\r\n\r\n FuelCardsService.getPriceNoticesSettings(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n ).then\r\n (\r\n function (data)\r\n {\r\n //pull All Products record from the array and handle separately\r\n if (data.PriceNoticesSettingsGroups.length > 0)\r\n $scope.appInfo.fuelCards.priceNoticesSettings.allProducts = data.PriceNoticesSettingsGroups.splice(0, 1)[0] || [];\r\n\r\n $scope.kendo.sitesGridInit(data.PriceNoticesSettingsSites.sortBy('Site_Description'));\r\n $scope.kendo.productsGridInit(data.PriceNoticesSettingsGroups.sortBy('ProdAliasGrp_Description'));\r\n $scope.appInfo.fuelCards.priceNoticesSettings.methods = data.PriceNoticesSettingsMethods;\r\n\r\n $scope.kendo.sitesGrid.dataItems().forEach(function (item)\r\n {\r\n if (item.Site_Selected === '0')\r\n {\r\n $(\"tr[data-uid='\" + item.uid + \"']\").hide();\r\n }\r\n });\r\n }\r\n );\r\n\r\n if (!$scope.appInfo.fuelCards.company)\r\n {\r\n FuelCardsService.getCardsContext(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CompKey\r\n ).then(\r\n function (data)\r\n {\r\n $scope.appInfo.fuelCards.states = data.States;\r\n $scope.appInfo.fuelCards.company = data.Company;\r\n }\r\n );\r\n }\r\n };\r\n\r\n $scope.initModalSiteSelector = function ()\r\n {\r\n $scope.appInfo.fuelCards.modalSiteSelector = {};\r\n $scope.appInfo.fuelCards.modalSiteSelector.shown = false;\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch = {};\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.city = null;\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.state = '';\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.postal = null;\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.limit = false;\r\n $scope.appInfo.fuelCards.modalSiteSelector.toManyResults = false;\r\n $scope.appInfo.fuelCards.modalSiteSelector.maxResults = 100;\r\n };\r\n\r\n $scope.showModalSiteSelector = function ()\r\n {\r\n $scope.initModalSiteSelector();\r\n $scope.appInfo.fuelCards.modalSiteSelector.shown = true;\r\n };\r\n\r\n $scope.retrieveSites = function ()\r\n {\r\n FuelCardsService.getSearchSites(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.city,\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.state,\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.postal,\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.limit\r\n ).then\r\n (\r\n function (data)\r\n {\r\n $scope.kendo.siteSearchGridInit(data.SearchSites.sortBy('Site_Description'));\r\n\r\n if (data.SearchSites.length === 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoResults\"), 'warning');\r\n return;\r\n }\r\n\r\n \r\n if ($scope.kendo.siteSearchGridDS.data().length > $scope.appInfo.fuelCards.modalSiteSelector.maxResults)\r\n $scope.appInfo.fuelCards.modalSiteSelector.toManyResults = true;\r\n else\r\n $scope.appInfo.fuelCards.modalSiteSelector.toManyResults = false;\r\n }\r\n );\r\n };\r\n\r\n $scope.checkAllProducts = function ()\r\n {\r\n angular.forEach($scope.kendo.productsGridDS.data(), function (item)\r\n {\r\n item.ProdAliasGrp_Selected = $scope.appInfo.fuelCards.priceNoticesSettings.allProducts.ProdAliasGrp_Selected || '0';\r\n });\r\n };\r\n\r\n $scope.disableNotices = function ()\r\n {\r\n angular.forEach($scope.appInfo.fuelCards.priceNoticesSettings.methods, function (item)\r\n {\r\n item.EmailSelected = '0';\r\n item.AltEmailSelected = '0';\r\n item.PhoneTextSelected = '0';\r\n });\r\n };\r\n\r\n $scope.addSites = function ()\r\n {\r\n angular.forEach($scope.kendo.siteSearchGridDS.data(), function (site)\r\n {\r\n if (site.CustContCPSite_Key === 0 && site.Site_Selected === '-1')\r\n {\r\n $scope.kendo.sitesGridDS.add(site);\r\n }\r\n });\r\n $scope.initModalSiteSelector();\r\n };\r\n\r\n $scope.removeSite = function (row)\r\n {\r\n row.Site_Selected = '0';\r\n $(\"tr[data-uid='\" + row.uid + \"']\").hide();\r\n };\r\n\r\n $scope.savePriceNoticeSettings = function ()\r\n {\r\n var products = $scope.kendo.productsGridDS.data().toJSON();\r\n var sites = $scope.kendo.sitesGridDS.data().toJSON();\r\n var hasProducts = products.any({ProdAliasGrp_Selected: '-1'});\r\n var hasSites = sites.any({Site_Selected: '-1'});\r\n if (!hasProducts || !hasSites)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"PriceNoticeSettings\"), localStrings.getLocalizedString(\"AtLeastOneProduct\"));\r\n return;\r\n }\r\n\r\n //put All Products back in its array for save\r\n products.unshift($scope.appInfo.fuelCards.priceNoticesSettings.allProducts);\r\n\r\n FuelCardsService.savePriceNoticeSettings(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n sites,\r\n products,\r\n $scope.appInfo.fuelCards.priceNoticesSettings.methods\r\n ).then\r\n (\r\n function (data)\r\n {\r\n $scope.initialize();\r\n }\r\n );\r\n };\r\n })\r\n;","/**\r\n * Created by jvitoria on 9/5/14.\r\n */\r\nangular.module(\"pnFuelCardsTransactions\", ['core.objects'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/FuelCards/Transactions/TransactionDetails\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TransactionDetails\"),\r\n controller: \"transactionDetailsCtrl\"\r\n })\r\n .when(\"/FuelCards/Transactions/TransactionSummary\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TransactionSummary\"),\r\n controller: \"transactionSummaryCtrl\"\r\n })\r\n .when(\"/FuelCards/Transactions/TransactionByInvoice\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TransactionByInvoice\"),\r\n controller: \"transactionByInvoiceCtrl\"\r\n })\r\n .when(\"/FuelCards/Transactions/TransactionTaxRecap\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TransactionTaxRecap\"),\r\n controller: \"transactionTaxRecapCtrl\"\r\n })\r\n .when(\"/FuelCards/Transactions/TaxDetails\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TaxDetails\"),\r\n controller: \"taxDetailsCtrl\"\r\n })\r\n .when(\"/FuelCards/Transactions/TaxSummary\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TaxSummary\"),\r\n controller: \"taxSummaryCtrl\"\r\n })\r\n .when(\"/FuelCards/Transactions/TransactionAlerts\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TransactionAlerts\"),\r\n controller: \"transactionsAlertsCtrl\"\r\n });\r\n })\r\n\r\n .controller('fuelCardsTransactionsSideMenuCtrl', function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.appInfo.fuelCards)\r\n $scope.appInfo.fuelCards = {};\r\n if (!$scope.appInfo.fuelCards)\r\n $scope.appInfo.fuelCards.transactionAlerts = {};\r\n };\r\n })\r\n\r\n .controller(\"transactionDetailsCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"0\";\r\n };\r\n })\r\n\r\n .controller(\"transactionDetailsSideMenuCtrl\", function ($scope, validatorSvc, reportingService, WebFunctions)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n $scope.$root.reportSettings.reportKey = 22;\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"0\",\r\n transactionDetails: {\r\n cardNoDesc: '',\r\n inclUnbilled: true,\r\n inclBilled: false,\r\n groupBy: \"0\",\r\n inclAdditionalInfo: false,\r\n viewCardNumbers: $scope.checkCurrentUserPermission(WebFunctions.ViewCardNumbers) || false\r\n }\r\n };\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.transactionDetails = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.transactionDetails;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var rptName = 'CardTransactionDetails';\r\n var additionalInfoReportName = $scope.appInfo.webUser.CurrentAuthorization.Customer.CPInvcRecapSumTaxesByInvcGrp ? 'CardTransactionDetailsByTaxInvGroups' : 'CardTransactionDetailsIAD';\r\n rptName = $scope.locationInfo.sideMenuData.transactionDetails.inclAdditionalInfo ? additionalInfoReportName : rptName;\r\n\r\n var qs = \"reportName=\" + rptName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-CardNoDesc=\" + $scope.locationInfo.sideMenuData.transactionDetails.cardNoDesc +\r\n \"&RP-BegDate=\" + $scope.urlFormatDate($scope.dateSelector.startDate) +\r\n \"&RP-EndDate=\" + $scope.urlFormatDate($scope.dateSelector.endDate) +\r\n \"&RP-InclBilled=\" + $scope.locationInfo.sideMenuData.transactionDetails.inclBilled +\r\n \"&RP-InclUnbilled=\" + $scope.locationInfo.sideMenuData.transactionDetails.inclUnbilled +\r\n \"&RP-GroupBy=\" + $scope.locationInfo.sideMenuData.transactionDetails.groupBy +\r\n \"&RP-ViewCardNumbers=\" + $scope.locationInfo.sideMenuData.transactionDetails.viewCardNumbers;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n\r\n $scope.updateOptions = function ()\r\n {\r\n if ($scope.locationInfo.sideMenuData.transactionDetails.inclUnbilled === false && $scope.locationInfo.sideMenuData.transactionDetails.inclBilled === false)\r\n {\r\n $scope.locationInfo.sideMenuData.transactionDetails.inclUnbilled = true;\r\n }\r\n };\r\n })\r\n\r\n .controller(\"transactionSummaryCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"1\";\r\n };\r\n })\r\n\r\n .controller(\"transactionSummarySideMenuCtrl\", function ($scope, validatorSvc, reportingService, WebFunctions)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n $scope.$root.reportSettings.reportKey = 23;\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"1\",\r\n transactionSummary: {\r\n cardNoDesc: '',\r\n invoiceNo: '',\r\n inclUnbilled: true,\r\n enableUnbilled: true,\r\n inclBilled: true,\r\n enableBilled: true,\r\n recap1: 4,\r\n recap2: 0\r\n }\r\n };\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.transactionSummary = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n $scope.updateOptions();\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.transactionSummary;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var qs = \"reportName=\" + 'CardTransactionSummary' +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-CardNoDesc=\" + $scope.locationInfo.sideMenuData.transactionSummary.cardNoDesc +\r\n \"&RP-InvoiceNo=\" + $scope.locationInfo.sideMenuData.transactionSummary.invoiceNo +\r\n \"&RP-BegDate=\" + $scope.urlFormatDate($scope.dateSelector.startDate) +\r\n \"&RP-EndDate=\" + $scope.urlFormatDate($scope.dateSelector.endDate) +\r\n \"&RP-InclBilled=\" + $scope.locationInfo.sideMenuData.transactionSummary.inclBilled +\r\n \"&RP-InclUnbilled=\" + $scope.locationInfo.sideMenuData.transactionSummary.inclUnbilled +\r\n \"&RP-Recap1=\" + $scope.locationInfo.sideMenuData.transactionSummary.recap1 +\r\n \"&RP-Recap2=\" + $scope.locationInfo.sideMenuData.transactionSummary.recap2 +\r\n \"&RP-ViewCardNumbers=\" + $scope.checkCurrentUserPermission(WebFunctions.ViewCardNumbers) || false;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n\r\n $scope.updateOptions = function ()\r\n {\r\n if ($scope.locationInfo.sideMenuData.transactionSummary.invoiceNo === '')\r\n {\r\n $scope.locationInfo.sideMenuData.transactionSummary.enableUnbilled = true;\r\n $scope.locationInfo.sideMenuData.transactionSummary.enableBilled = true;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.transactionSummary.inclUnbilled = false;\r\n $scope.locationInfo.sideMenuData.transactionSummary.inclBilled = true;\r\n $scope.locationInfo.sideMenuData.transactionSummary.enableUnbilled = false;\r\n $scope.locationInfo.sideMenuData.transactionSummary.enableBilled = false;\r\n }\r\n\r\n if ($scope.locationInfo.sideMenuData.transactionSummary.inclUnbilled === false && $scope.locationInfo.sideMenuData.transactionSummary.inclBilled === false)\r\n {\r\n $scope.locationInfo.sideMenuData.transactionSummary.inclUnbilled = true;\r\n }\r\n };\r\n })\r\n\r\n .controller(\"transactionByInvoiceCtrl\", function ($scope, validatorSvc, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n validatorSvc.clearValidationScopes();\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n };\r\n })\r\n\r\n .controller(\"transactionByInvoiceSideMenuCtrl\", function ($scope, reportingService, WebFunctions, validatorSvc)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n $scope.$root.reportSettings.reportKey = 24;\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"2\",\r\n transactionByInvoice: {\r\n invoiceNo: '',\r\n groupBy: 0,\r\n inclAdditionalInfo: false\r\n }\r\n };\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.transactionByInvoice = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.transactionByInvoice;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var rptName = 'CardTransactionsByInvoice';\r\n var additionalInfoReportName = $scope.appInfo.webUser.CurrentAuthorization.Customer.CPInvcRecapSumTaxesByInvcGrp ? 'CardTransactionsByInvoiceWithTaxInvGroups' : 'CardTransactionsByInvoiceIAD';\r\n rptName = $scope.locationInfo.sideMenuData.transactionByInvoice.inclAdditionalInfo ? additionalInfoReportName : rptName;\r\n\r\n var qs = \"reportName=\" + rptName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-InvoiceNo=\" + $scope.locationInfo.sideMenuData.transactionByInvoice.invoiceNo +\r\n \"&RP-BegDate=\" + $scope.urlFormatDate($scope.dateSelector.startDate) +\r\n \"&RP-EndDate=\" + $scope.urlFormatDate($scope.dateSelector.endDate) +\r\n \"&RP-GroupBy=\" + $scope.locationInfo.sideMenuData.transactionByInvoice.groupBy +\r\n \"&RP-ViewCardNumbers=\" + $scope.checkCurrentUserPermission(WebFunctions.ViewCardNumbers) || false;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n\r\n .controller(\"taxDetailsCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n };\r\n })\r\n\r\n .controller(\"taxDetailsSideMenuCtrl\", function ($scope, validatorSvc, reportingService, FuelCardsService, WebFunctions, localizationSvc)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"FuelCardsTransactionsLocalization\");\r\n $scope.initialize = function ()\r\n {\r\n\r\n validatorSvc.clearValidationScopes();\r\n FuelCardsService.getTaxAuthorities(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey\r\n ).then(\r\n function (data)\r\n {\r\n $scope.appInfo.fuelCards.taxAuthorities = data.TaxAuthorities;\r\n $scope.appInfo.fuelCards.taxAuthorities.unshift({ Key: 0, Description: localStrings.getLocalizedString(\"None\") });\r\n\r\n $scope.$root.reportSettings.reportKey = 25;\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"3\",\r\n taxDetails: {\r\n invoiceNo: '',\r\n taxAuthKey: '0',\r\n groupBy1: 1,\r\n enableGroupBy1None: true,\r\n groupBy2: 0,\r\n enableGroupBy2: true,\r\n groupBy3: 0,\r\n enableGroupBy3: false,\r\n inclTransDetail: true,\r\n inclAdditionalInfo: false,\r\n enableInclAdditionalInfo: true\r\n }\r\n };\r\n \r\n }\r\n );\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n $scope.updateOptions();\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.taxDetails;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var rptName = 'CardTaxDetails';\r\n rptName += $scope.locationInfo.sideMenuData.taxDetails.inclTransDetail ? 'IT' : 'NT';\r\n rptName = $scope.locationInfo.sideMenuData.taxDetails.inclAdditionalInfo ? 'CardTaxDetailsIAD' : rptName;\r\n\r\n var taxAuthKey = $scope.locationInfo.sideMenuData.taxDetails.taxAuthKey ? $scope.locationInfo.sideMenuData.taxDetails.taxAuthKey : '0';\r\n\r\n var qs = \"reportName=\" + rptName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-InvoiceNo=\" + $scope.locationInfo.sideMenuData.taxDetails.invoiceNo +\r\n \"&RP-BegDate=\" + $scope.urlFormatDate($scope.dateSelector.startDate) +\r\n \"&RP-EndDate=\" + $scope.urlFormatDate($scope.dateSelector.endDate) +\r\n \"&RP-TaxAuthKey=\" + taxAuthKey +\r\n \"&RP-GroupBy1=\" + $scope.locationInfo.sideMenuData.taxDetails.groupBy1 +\r\n \"&RP-GroupBy2=\" + $scope.locationInfo.sideMenuData.taxDetails.groupBy2 +\r\n \"&RP-GroupBy3=\" + $scope.locationInfo.sideMenuData.taxDetails.groupBy3;\r\n \r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n\r\n $scope.updateOptions = function ()\r\n {\r\n if ($scope.locationInfo.sideMenuData.taxDetails.inclTransDetail === true)\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.enableInclAdditionalInfo = true;\r\n $scope.locationInfo.sideMenuData.taxDetails.enableGroupBy1None = true;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.enableInclAdditionalInfo = false;\r\n $scope.locationInfo.sideMenuData.taxDetails.inclAdditionalInfo = false;\r\n if ($scope.locationInfo.sideMenuData.taxDetails.groupBy1 === \"0\")\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.groupBy1 = \"1\";\r\n $scope.notifier.show(localStrings.getLocalizedString(\"IncludeTransactionDetailsWarning\"), 'warning');\r\n }\r\n $scope.locationInfo.sideMenuData.taxDetails.enableGroupBy1None = false;\r\n }\r\n\r\n if ($scope.locationInfo.sideMenuData.taxDetails.groupBy1 === \"0\")\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.groupBy2 = \"0\";\r\n $scope.locationInfo.sideMenuData.taxDetails.enableGroupBy2 = false;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.enableGroupBy2 = true;\r\n }\r\n\r\n if ($scope.locationInfo.sideMenuData.taxDetails.groupBy2 === \"0\")\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.groupBy3 = \"0\";\r\n $scope.locationInfo.sideMenuData.taxDetails.enableGroupBy3 = false;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.enableGroupBy3 = true;\r\n }\r\n };\r\n })\r\n\r\n .controller(\"taxSummaryCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"4\";\r\n };\r\n })\r\n\r\n .controller(\"taxSummarySideMenuCtrl\", function ($scope, validatorSvc, reportingService, WebFunctions)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n $scope.$root.reportSettings.reportKey = 26;\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"4\",\r\n taxSummary: {\r\n invoiceNo: '',\r\n groupBy1: \"1\",\r\n groupBy2: \"0\",\r\n groupBy3: \"0\",\r\n enableGroupBy2: true,\r\n enableGroupBy3: false\r\n }\r\n };\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.taxSummary = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n $scope.updateOptions();\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.taxSummary;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var rptName = 'CardTaxSummary';\r\n rptName = $scope.appInfo.webUser.CurrentAuthorization.Customer.CPInvcRecapSumTaxesByInvcGrp ? 'CardTaxSummaryByTaxInvGroups' : rptName;\r\n\r\n var qs = \"reportName=\" + rptName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-InvoiceNo=\" + $scope.locationInfo.sideMenuData.taxSummary.invoiceNo +\r\n \"&RP-BegDate=\" + $scope.urlFormatDate($scope.dateSelector.startDate) +\r\n \"&RP-EndDate=\" + $scope.urlFormatDate($scope.dateSelector.endDate) +\r\n \"&RP-GroupBy1=\" + $scope.locationInfo.sideMenuData.taxSummary.groupBy1 +\r\n \"&RP-GroupBy2=\" + $scope.locationInfo.sideMenuData.taxSummary.groupBy2 +\r\n \"&RP-GroupBy3=\" + $scope.locationInfo.sideMenuData.taxSummary.groupBy3;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n\r\n $scope.updateOptions = function ()\r\n {\r\n if ($scope.locationInfo.sideMenuData.taxSummary.groupBy1 === \"0\")\r\n {\r\n $scope.locationInfo.sideMenuData.taxSummary.groupBy2 = \"0\";\r\n $scope.locationInfo.sideMenuData.taxSummary.enableGroupBy2 = false;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.taxSummary.enableGroupBy2 = true;\r\n }\r\n\r\n if ($scope.locationInfo.sideMenuData.taxSummary.groupBy2 === \"0\")\r\n {\r\n $scope.locationInfo.sideMenuData.taxSummary.groupBy3 = \"0\";\r\n $scope.locationInfo.sideMenuData.taxSummary.enableGroupBy3 = false;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.taxSummary.enableGroupBy3 = true;\r\n }\r\n };\r\n })\r\n\r\n .controller(\"transactionsAlertsCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"6\";\r\n };\r\n })\r\n\r\n .controller(\"transactionsAlertsSideMenuCtrl\", function ($scope, validatorSvc, reportingService, WebFunctions)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.transactionsAlerts) $scope.locationInfo.sideMenuData.transactionsAlerts = {};\r\n $scope.locationInfo.sideMenuData.transactionsAlerts.reportType = 'fuelCardsTransactionsAlerts';\r\n $scope.locationInfo.sideMenuData.transactionsAlerts.reportCount = '10';\r\n $scope.$root.reportSettings.reportKey = 28;\r\n };\r\n\r\n $scope.refreshTransactionAlerts = function ()\r\n {\r\n $scope.appInfo.fuelCards.transactionAlerts = {};\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.transactionsAlerts = $scope.reportSettings.loadOptions.controls;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.transactionsAlerts;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var qs = \"reportName=CPAlertReportsArchive\" +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-NumberToReturn=\" + $scope.locationInfo.sideMenuData.transactionsAlerts.reportCount;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n\r\n .controller(\"transactionTaxRecapCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"7\";\r\n };\r\n })\r\n\r\n .controller(\"transactionTaxRecapSideMenuCtrl\", function ($scope, validatorSvc, reportingService, WebFunctions)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n $scope.kendo = {};\r\n $scope.$root.reportSettings.reportKey = 34;\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"7\",\r\n transactionTaxRecap: {\r\n cardNoDesc: '',\r\n inclUnbilled: true,\r\n enableUnbilled: true,\r\n inclBilled: true,\r\n enableBilled: true,\r\n groupBy: 0,\r\n recap1: 0,\r\n recap2: 0,\r\n showTaxRecap: false\r\n }\r\n };\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.transactionTaxRecap = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n $scope.updateOptions();\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.transactionTaxRecap;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var rptName = \r\n $scope.appInfo.webUser.CurrentAuthorization.Customer.CPInvcRecapSumTaxesByInvcGrp ? 'CardTransactionwithTaxRecapsAndTaxInvoiceGroups' : 'CardTransactionwithTaxRecaps';\r\n var qs = \"reportName=\" + rptName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-CardNoDesc=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.cardNoDesc +\r\n \"&RP-BegDate=\" + $scope.urlFormatDate($scope.dateSelector.startDate) +\r\n \"&RP-EndDate=\" + $scope.urlFormatDate($scope.dateSelector.endDate) +\r\n \"&RP-InclBilled=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.inclBilled +\r\n \"&RP-InclUnbilled=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.inclUnbilled +\r\n \"&RP-GroupBy=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.groupBy +\r\n \"&RP-RecapBy1=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.recap1 +\r\n \"&RP-RecapBy2=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.recap2 +\r\n \"&RP-ShowTaxRecapByGroupBy=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.showTaxRecap;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n\r\n $scope.updateOptions = function ()\r\n {\r\n if ($scope.locationInfo.sideMenuData.transactionTaxRecap.inclUnbilled === false && $scope.locationInfo.sideMenuData.transactionTaxRecap.inclBilled === false)\r\n {\r\n $scope.locationInfo.sideMenuData.transactionTaxRecap.inclUnbilled = true;\r\n }\r\n };\r\n });","/**\r\n * Created by rhampton on 7/25/2014.\r\n */\r\nangular.module(\"pnOrders\", ['core.objects', 'services.orders', 'core.directives'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/Orders/EditOrder/:ordKey?\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EditOrder\"),\r\n controller: \"editOrderCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Orders/DisplayOrder/:ordKey?\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"DisplayOrder\"),\r\n controller: \"displayOrderCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Orders/OpenOrders\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"OpenOrders\"),\r\n controller: \"openOrdersCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Orders/OrderHistory\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"OrderHistory\"),\r\n controller: \"orderHistoryCtrl\"\r\n }\r\n );\r\n })\r\n .controller(\"ordersSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n $scope.checkForAppliedProfile();\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 20;\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.canOpenAddOrders = $scope.appInfo.webUser.CurrentAuthorization.CanAddEditWebOrders;\r\n };\r\n })\r\n .controller(\"displayOrderCtrl\", function ($scope, $filter, $route, $routeParams, validatorSvc, WebProfileService, customerService,\r\n userAccountService, ordersService, templates, localStrings, globalizationSvc)\r\n {\r\n 'use strict';\r\n\r\n function hasErrors(errors)\r\n {\r\n var errorsDisplayed = false;\r\n angular.forEach(errors, function (item)\r\n {\r\n $scope.notifier.show(item, 'error');\r\n errorsDisplayed = true;\r\n });\r\n\r\n return errorsDisplayed;\r\n }\r\n\r\n function getOrderContext()\r\n {\r\n // Do not try to load an order if the user info isnt loaded\r\n if (!$scope.appInfo.userLoaded) {\r\n $scope.goTo('Orders/OpenOrders/');\r\n return;\r\n }\r\n\r\n ordersService.getOrdersContext($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.WOGSettings))\r\n {\r\n $scope.modalifier.showSetupError();\r\n $scope.displayOrders.show.buttonBar = false;\r\n return;\r\n }\r\n\r\n $scope.displayOrders.context.WOGSettings = data.WOGSettings[0] || [];\r\n $scope.displayOrders.context.PONumber = data.PONumber;\r\n $scope.displayOrders.context.DeliveryDT = data.DeliveryDT;\r\n\r\n setButtonVisiblity();\r\n }\r\n );\r\n }\r\n\r\n function handleCancelOrder()\r\n {\r\n $scope.displayOrders.show.cancelCommentModal = false;\r\n ordersService.saveOrderDetails($scope.displayOrders.orderDetails).then(\r\n function (data)\r\n {\r\n if (hasErrors(data.OrderDetails.Errors))\r\n {\r\n enableButton();\r\n return;\r\n }\r\n\r\n $scope.notifier.show(localStrings.getLocalizedString(\"SavedChanges\"), \"success\");\r\n $scope.goTo('Orders/OpenOrders/');\r\n });\r\n }\r\n\r\n function handlePendingOrder()\r\n {\r\n ordersService.saveOrderDetails($scope.displayOrders.orderDetails).then(\r\n function (data)\r\n {\r\n //notify and drop out on errors\r\n if (angular.isUndefinedOrNullOrEmpty(data.OrderDetails.OrdKey) || data.OrderDetails.OrdKey === 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesNotSaved\"), \"error\");\r\n enableButton();\r\n return;\r\n }\r\n\r\n if (hasErrors(data.OrderDetails.Errors))\r\n {\r\n enableButton();\r\n return;\r\n }\r\n\r\n //notify and handle success\r\n $scope.notifier.show(localStrings.getLocalizedString(\"SavedChanges\"), \"success\");\r\n $scope.goTo('Orders/EditOrder/' + data.OrderDetails.OrdKey);\r\n });\r\n }\r\n\r\n function handleReOpenOrder()\r\n {\r\n var yes = function ()\r\n {\r\n ordersService.saveOrderDetails($scope.displayOrders.orderDetails).then(\r\n function (data)\r\n {\r\n if (hasErrors(data.OrderDetails.Errors))\r\n {\r\n enableButton();\r\n return;\r\n }\r\n\r\n $scope.goTo('Orders/EditOrder/' + data.OrderDetails.OrdKey);\r\n });\r\n };\r\n\r\n var no = function () {\r\n enableButton();\r\n };\r\n\r\n $scope.modalifier.confirm(localStrings.getLocalizedString(\"IfYouReopenOrder\") + '
    ' + localStrings.getLocalizedString(\"MayNoLonger\") + '

    ' + localStrings.getLocalizedString(\"WishToContinue\"), yes, no);\r\n }\r\n\r\n function handleSubmitOrder()\r\n {\r\n ordersService.saveOrderDetails($scope.displayOrders.orderDetails).then(\r\n function (data)\r\n {\r\n if (hasErrors(data.OrderDetails.Errors))\r\n {\r\n enableButton();\r\n return;\r\n }\r\n\r\n //notify and handle success\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesBeenSubmitted\"), \"success\");\r\n $route.reload();\r\n });\r\n }\r\n\r\n function enableButton() {\r\n $('#displayOrderReOpen').removeAttr('disabled');\r\n $('#displayOrderSubmit').removeAttr('disabled');\r\n $('#displayOrderCancel').removeAttr('disabled');\r\n $('#displayOrderCancelComment').removeAttr('disabled');\r\n }\r\n\r\n function setButtonVisiblity()\r\n {\r\n // show buttons based ont he order status\r\n switch ($scope.displayOrders.orderDetails.OrdStatusKey)\r\n {\r\n case 16:\r\n $scope.displayOrders.show.reopenBtn = false;\r\n $scope.displayOrders.show.submitBtn = submitOnHold();\r\n $scope.displayOrders.show.cancelBtn = true;\r\n break;\r\n\r\n case 0:\r\n case 1:\r\n $scope.displayOrders.show.reopenBtn = true;\r\n $scope.displayOrders.show.submitBtn = false;\r\n $scope.displayOrders.show.cancelBtn = true;\r\n break;\r\n\r\n case 10:\r\n $scope.displayOrders.show.reopenBtn = false;\r\n $scope.displayOrders.show.submitBtn = false;\r\n $scope.displayOrders.show.cancelBtn = true;\r\n break;\r\n\r\n default:\r\n $scope.displayOrders.show.reopenBtn = false;\r\n $scope.displayOrders.show.submitBtn = false;\r\n $scope.displayOrders.show.cancelBtn = false;\r\n break;\r\n }\r\n }\r\n\r\n function submitOnHold()\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty($scope.displayOrders.context.WOGSettings))\r\n return false;\r\n else\r\n return $scope.displayOrders.context.WOGSettings.SubmitOnHold || $scope.displayOrders.context.WOGSettings.CrStatus !== 1;\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n //clear any residual validations from the scope\r\n validatorSvc.clearValidationScopes();\r\n\r\n //set the side menu location info\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.addOrder = $scope.locationInfo.sideMenuData.addOrder || {};\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 20;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OrdersSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n\r\n //start with a clean data structure\r\n $scope.displayOrders = {\r\n show: {\r\n reopenBtn: false,\r\n submitBtn: false,\r\n cancelBtn: false,\r\n tankIDCol: false,\r\n cancelCommentModal: false\r\n },\r\n context: {},\r\n orderDetails: ordersService.blankOrderHeaderObj()\r\n };\r\n\r\n $scope.globalizationSvc = globalizationSvc;\r\n\r\n //get the credit hold message\r\n WebProfileService.getWebProfileMessage($scope.appInfo.profileKey, 25).then(function (data)\r\n {\r\n $scope.displayOrders.context.creditHoldMessage = data;\r\n });\r\n\r\n getOrderContext();\r\n\r\n //get the order to be displayed\r\n if ($routeParams.ordKey)\r\n {\r\n ordersService.getOrderDetails($routeParams.ordKey).then(\r\n function (data)\r\n {\r\n $scope.displayOrders.orderDetails = data.OrderDetails || {};\r\n\r\n //get the tank/product context for this location\r\n $scope.getLocationDetails();\r\n\r\n setButtonVisiblity();\r\n }\r\n );\r\n }\r\n };\r\n\r\n $scope.getLocationDetails = function getLocationDetails()\r\n {\r\n $scope.displayOrders.context.tanksAndEquipment = [];\r\n ordersService.getOrderLocationInfo($scope.displayOrders.orderDetails.CustLocKey, $scope.displayOrders.orderDetails.ReqDelivDateTime).then(\r\n function (data)\r\n {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.TanksAndEquipment))\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoTankInformation\"), 'error');\r\n return;\r\n }\r\n else\r\n {\r\n $scope.displayOrders.context.tanksAndEquipment = data.TanksAndEquipment;\r\n }\r\n\r\n //use default directions if the order has none\r\n if (angular.isUndefinedOrNullOrEmpty($scope.displayOrders.orderDetails.OrdDelivDirections))\r\n $scope.displayOrders.orderDetails.OrdDelivDirections = data.DeliveryDirections;\r\n\r\n //determine if TankID column is shown\r\n $scope.displayOrders.show.tankIDCol = false;\r\n angular.forEach($scope.displayOrders.context.tanksAndEquipment, function (item)\r\n {\r\n // check if ID is null or undefined first\r\n if (item.ID) {\r\n $scope.displayOrders.show.tankIDCol = !item.ID.isBlank();\r\n }\r\n\r\n //match and copy over the qty to be displayed\r\n if (!angular.isUndefinedOrNullOrEmpty(item.TankNumber)) {\r\n var tank = $filter('filter')($scope.displayOrders.orderDetails.OrderDetails, { TankNumber: item.TankNumber }, true)[0];\r\n item.Quantity = angular.isUndefinedOrNullOrEmpty(tank) ? 0 : globalizationSvc.formatNumeric(tank.OrderQty);\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty(item.EquipmentKey)) {\r\n var equipment = $filter('filter')($scope.displayOrders.orderDetails.OrderDetails, { EquipmentKey: item.EquipmentKey }, true)[0];\r\n item.Quantity = angular.isUndefinedOrNullOrEmpty(equipment) ? 0 : globalizationSvc.formatNumeric(equipment.OrderQty);\r\n }\r\n \r\n });\r\n }\r\n );\r\n };\r\n\r\n $scope.hasAnyTanks = function () {\r\n return hasAnyItems('TankNumber');\r\n };\r\n\r\n $scope.hasAnyEquipment = function () {\r\n return hasAnyItems('EquipmentKey');\r\n };\r\n\r\n function hasAnyItems(keyProperty) {\r\n if ($scope.displayOrders.context && $scope.displayOrders.context.tanksAndEquipment) {\r\n for (var i = 0; i < $scope.displayOrders.context.tanksAndEquipment.length; i++) {\r\n if ($scope.displayOrders.context.tanksAndEquipment[i][keyProperty]) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n $scope.saveOrder = function saveOrder(command)\r\n {\r\n $scope.displayOrders.orderDetails.Command = command;\r\n $scope.displayOrders.orderDetails.OrdCreatedByContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n\r\n switch (command)\r\n {\r\n case 'Pending':\r\n handlePendingOrder();\r\n break;\r\n\r\n case 'Submit':\r\n handleSubmitOrder();\r\n break;\r\n\r\n case 'ReOpen':\r\n handleReOpenOrder();\r\n break;\r\n\r\n case 'Cancel':\r\n handleCancelOrder();\r\n break;\r\n }\r\n };\r\n\r\n $scope.cancelCommentModalDialogClose = function () {\r\n enableButton();\r\n };\r\n\r\n })\r\n .controller(\"editOrderCtrl\", function ($scope, $filter, $route, $routeParams, validatorSvc, WebProfileService, customerService, userAccountService, ordersService, templates, localStrings, globalizationSvc, $timeout)\r\n {\r\n 'use strict';\r\n\r\n $scope.editOrders = {\r\n show: {\r\n buttonBar: true,\r\n shipTo: false,\r\n tankIDCol: false,\r\n submitBtn: false,\r\n cancelCommentModal: false\r\n },\r\n locations: undefined,\r\n contacts: undefined,\r\n context: {},\r\n orderDetails: {}\r\n };\r\n\r\n $scope.prevCustLocKey = undefined;\r\n $scope.hideTankAndEquipment = false;\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.ordersGrid = {};\r\n $scope.kendo.ordersGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"TankNumber\",\r\n title: localStrings.getLocalizedString(\"Tank\"),\r\n attributes: {class: \"alignCenter\"},\r\n width: 50,\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"TankID\",\r\n title: localStrings.getLocalizedString(\"ID\"),\r\n width: 100,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Product\",\r\n title: localStrings.getLocalizedString(\"Product\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"OrderQty\",\r\n title: localStrings.getLocalizedString(\"Quantity\"),\r\n width: 100,\r\n format: \"{0:n0}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n },\r\n template: '',\r\n editor: function (element, options)\r\n {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"class\", \"alignRight\")\r\n .appendTo(element)\r\n .kendoNumericTextBox({\r\n decimals: 0,\r\n format: \"#\",\r\n min: 0,\r\n spinners: false\r\n });\r\n\r\n $('')\r\n .attr(\"data-for\", options.field)\r\n .attr(\"class\", \"k-invalid-msg\")\r\n .appendTo(element);\r\n }\r\n }\r\n ],\r\n dataSource: [],\r\n editable: true,\r\n filterable: false,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n $scope.kendo.ordersEquipmentGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"EquipmentID\",\r\n title: localStrings.getLocalizedString(\"Equipment\"),\r\n width: 200,\r\n attributes: { class: \"alignLeft\" },\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n },\r\n template: \"# if (EquipmentID) { # #:EquipmentID# - #:EquipmentDescription# # } # \"\r\n },\r\n {\r\n field: \"Product\",\r\n title: localStrings.getLocalizedString(\"Product\"),\r\n attributes: { class: \"alignLeft\" },\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"OrderQty\",\r\n title: localStrings.getLocalizedString(\"Quantity\"),\r\n width: 100,\r\n format: \"{0:n0}\",\r\n attributes: { class: \"alignRight\" },\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n },\r\n editor: function (element, options) {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"class\", \"alignRight\")\r\n .appendTo(element)\r\n .kendoNumericTextBox({\r\n decimals: 0,\r\n format: \"#\",\r\n min: 0,\r\n spinners: false\r\n });\r\n\r\n $('')\r\n .attr(\"data-for\", options.field)\r\n .attr(\"class\", \"k-invalid-msg\")\r\n .appendTo(element);\r\n }\r\n }\r\n ],\r\n dataSource: [],\r\n editable: true,\r\n filterable: false,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.ordersGridInit = function (ds, showIdCol)\r\n {\r\n $scope.kendo.ordersGridDS = new kendo.data.DataSource({\r\n data: ds,\r\n schema: {\r\n model: {\r\n id: \"TankNumber\",\r\n fields: {\r\n TankNumber: {\r\n type: \"number\",\r\n editable: false,\r\n nullable: false,\r\n validation: false\r\n },\r\n TankID: {\r\n type: \"string\",\r\n editable: true,\r\n nullable: true,\r\n validation: false\r\n },\r\n Product: {\r\n type: \"string\",\r\n editable: false,\r\n nullable: false,\r\n validation: false\r\n },\r\n OrderQty: {\r\n type: \"number\",\r\n editable: true,\r\n nullable: false,\r\n validation: {\r\n capacity: function (e)\r\n {\r\n if(e.is('[name=OrderQty]'))\r\n {\r\n var rowData = $scope.kendo.ordersGrid.dataItem(e.closest('tr'));\r\n var val = e.getKendoNumericTextBox().value();\r\n\r\n rowData.OrderQty = val; //stop kendo from zeroing out the value on error\r\n\r\n if (e.val().isBlank())\r\n {\r\n e.attr(\"data-capacity-msg\", localStrings.getLocalizedString(\"Required\"));\r\n return false;\r\n }\r\n\r\n if (val < 0)\r\n {\r\n e.attr(\"data-capacity-msg\", localStrings.getLocalizedString(\"MinValueZero\"));\r\n return false;\r\n }\r\n\r\n if (val > rowData.MaxVolume)\r\n {\r\n var rowDataMaxVolume = [rowData.MaxVolume];\r\n e.attr(\"data-capacity-msg\", localStrings.getLocalizedString(\"MaxValue\", rowDataMaxVolume));\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n $scope.kendo.ordersGridDS.read();\r\n $scope.kendo.ordersGrid.dataSource.data($scope.kendo.ordersGridDS.data());\r\n\r\n if (showIdCol)\r\n $scope.kendo.ordersGrid.showColumn(1);\r\n else\r\n $scope.kendo.ordersGrid.hideColumn(1);\r\n };\r\n $scope.kendo.ordersEquipmentGridInit = function (ds) {\r\n $scope.kendo.ordersEquipmentGridDS = new kendo.data.DataSource({\r\n data: ds,\r\n schema: {\r\n model: {\r\n id: \"EquipmentKey\",\r\n fields: {\r\n EquipmentKey: {\r\n type: \"number\",\r\n editable: false\r\n },\r\n EquipmentID: {\r\n type: \"string\",\r\n editable: false\r\n },\r\n EquipmentDescription: {\r\n type: \"string\",\r\n editable: false\r\n },\r\n Product: {\r\n type: \"string\",\r\n editable: false\r\n },\r\n OrderQty: {\r\n type: \"number\",\r\n editable: true,\r\n nullable: false,\r\n validation: {\r\n capacity: function (e) {\r\n if (e.is('[name=OrderQty]')) {\r\n var rowData = $scope.kendo.ordersEquipmentGrid.dataItem(e.closest('tr'));\r\n var val = e.getKendoNumericTextBox().value();\r\n\r\n rowData.OrderQty = val; //stop kendo from zeroing out the value on error\r\n\r\n if (e.val().isBlank()) {\r\n e.attr(\"data-capacity-msg\", localStrings.getLocalizedString(\"Required\"));\r\n return false;\r\n }\r\n\r\n if (val < 0) {\r\n e.attr(\"data-capacity-msg\", localStrings.getLocalizedString(\"MinValueZero\"));\r\n return false;\r\n }\r\n\r\n // If equipment does not have ActualSize or RatedSize (MaxVolume) -> we won't be validating MaxVolume\r\n if (!angular.isUndefinedOrNullOrEmpty(rowData.MaxVolume)) {\r\n if (val > rowData.MaxVolume) {\r\n var rowDataMaxVolume = [rowData.MaxVolume];\r\n e.attr(\"data-capacity-msg\", localStrings.getLocalizedString(\"MaxValue\", rowDataMaxVolume));\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n $scope.kendo.ordersEquipmentGridDS.read();\r\n $scope.kendo.ordersEquipmentGrid.dataSource.data($scope.kendo.ordersEquipmentGridDS.data());\r\n };\r\n\r\n var validateOrderDate =\r\n {\r\n name: 'validateOrderDate',\r\n validationMessage: localStrings.getLocalizedString(\"RequestedDeliveryDateTimeIs\") + '
    ' + localStrings.getLocalizedString(\"NotAvailable\"),\r\n validatorError: function ()\r\n {\r\n if ($scope.editOrders.orderDetails.Command === 'Cancel')\r\n {\r\n return true;\r\n }\r\n\r\n if ($scope.editOrders.orderDetails.ReqDelivDateTime.isBlank()) {\r\n return false;\r\n }\r\n\r\n var valueDate = new Date($scope.editOrders.orderDetails.ReqDelivDateTime);\r\n var nowDate = new Date();\r\n\r\n return valueDate < nowDate ? false : true;\r\n }\r\n };\r\n var savedTankData = [], dataBetweenDateChanges = [];\r\n $scope.validateOrderDate = new pdi.ng.validate.PdiValidation(validateOrderDate);\r\n\r\n function hasErrors(errors)\r\n {\r\n var errorsDisplayed = false;\r\n angular.forEach(errors, function (item)\r\n {\r\n $scope.notifier.show(item, 'error');\r\n errorsDisplayed = true;\r\n });\r\n\r\n return errorsDisplayed;\r\n }\r\n\r\n function getContactsContext()\r\n {\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.CustomerContacts))\r\n {\r\n $scope.modalifier.showSetupError();\r\n $scope.editOrders.show.buttonBar = false;\r\n return;\r\n }\r\n\r\n angular.forEach(data.CustomerContacts, function (item)\r\n {\r\n item.fullName = item.FirstName + ' ' + item.LastName;\r\n });\r\n\r\n $scope.editOrders.contacts = data.CustomerContacts.findAll({Active: -1}).sortBy('fullName');\r\n\r\n });\r\n }\r\n\r\n function getCreditHoldMsg()\r\n {\r\n WebProfileService.getWebProfileMessage($scope.appInfo.profileKey, 25).then(function (data)\r\n {\r\n $scope.editOrders.context.creditHoldMessage = data;\r\n });\r\n }\r\n\r\n function getLocationsContext()\r\n {\r\n ordersService.getOrderCustomerLocations($scope.appInfo.webUser.CurrentAuthorization.CustKey, $scope.editOrders.orderDetails.ReqDelivDateTime || $scope.editOrders.context.MinDateTime).then(\r\n function (data) {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.OrderLocations)) {\r\n $scope.modalifier.showSetupError();\r\n $scope.editOrders.show.buttonBar = false;\r\n return;\r\n }\r\n\r\n $scope.editOrders.locations = data.OrderLocations.remove({ Active: 0 }).sortBy('Description');\r\n\r\n if ($scope.editOrders.locations.length > 1)\r\n $scope.editOrders.show.shipTo = true;\r\n else {\r\n $scope.editOrders.show.shipTo = false;\r\n }\r\n\r\n if (angular.isUndefinedOrNullOrEmpty($routeParams.ordKey)) {\r\n // in case of a new order, remove all locations without valid tanks / equipment\r\n $scope.editOrders.locations = $scope.editOrders.locations.remove({ HasValidTankOrEquipment: 0 });\r\n $scope.editOrders.orderDetails.CustLocKey = $scope.editOrders.locations[0].Key;\r\n $scope.updateCustomerLocationData();\r\n } else {\r\n // in case of an existing order, remove all locations without valid tanks / equipment except location on order\r\n $scope.editOrders.locations = $scope.editOrders.locations.filter(function (l) {\r\n return l.HasValidTankOrEquipment !== 0 || l.Key === $scope.editOrders.orderDetails.CustLocKey;\r\n });\r\n $scope.editOrders.locations.sort(function (l) {\r\n return l.CustLocKey - (l.CustLocKey === $scope.editOrders.orderDetails.CustLocKey ? l.Key + 1 : l.CustLocKey - 2);\r\n });\r\n }\r\n });\r\n }\r\n\r\n function getOrderContext()\r\n {\r\n ordersService.getOrdersContext($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.WOGSettings))\r\n {\r\n $scope.modalifier.showSetupError();\r\n $scope.editOrders.show.buttonBar = false;\r\n return;\r\n }\r\n\r\n $scope.editOrders.context.WOGSettings = data.WOGSettings[0] || [];\r\n $scope.editOrders.context.PONumber = data.PONumber;\r\n $scope.editOrders.context.DeliveryDT = data.DeliveryDT;\r\n\r\n $scope.editOrders.show.submitBtn = data.WOGSettings.SubmitOnHold || data.WOGSettings.CrStatus !== 1;\r\n getLocationsContext();\r\n }\r\n );\r\n }\r\n\r\n function loadExistingOrder()\r\n {\r\n ordersService.getOrderDetails($routeParams.ordKey).then(\r\n function (data)\r\n {\r\n savedTankData = data.OrderDetails.OrderDetails.clone();\r\n data.OrderDetails.OrderDetails = [];\r\n $scope.editOrders.orderDetails = data.OrderDetails;\r\n $scope.editOrders.context.DeliveryDT = data.OrderDetails.ReqDelivDateTime;\r\n $scope.editOrders.show.cancelBtn = true;\r\n\r\n $scope.editOrders.orderDetails.CustContKey = $scope.editOrders.orderDetails.CustContKey.toNumber();\r\n $scope.prevCustLocKey = $scope.initialOrderCustLocKey = $scope.editOrders.orderDetails.CustLocKey;\r\n $scope.updateCustomerLocationData();\r\n }\r\n );\r\n }\r\n\r\n function loadNewOrder()\r\n {\r\n $scope.editOrders.orderDetails = new ordersService.blankOrderHeaderObj();\r\n\r\n $scope.editOrders.orderDetails.CustContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n\r\n }\r\n Number.isInteger = Number.isInteger || function (value) {\r\n return typeof value === \"number\" &&\r\n isFinite(value) &&\r\n Math.floor(value) === value;\r\n };\r\n function qtyValidityStates(items) {\r\n return items.map(\r\n function (order) {\r\n if (!Number.isInteger(order.OrderQty)) {\r\n return false;\r\n }\r\n\r\n if (order.OrderQty < 0) {\r\n return false;\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty(order.MaxVolume) && order.OrderQty > order.MaxVolume) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n );\r\n }\r\n\r\n // This returns an array of boolean values\r\n // use .every to see if all the values are true or false\r\n function validOrderQtys(items) {\r\n return (qtyValidityStates(items).every(Boolean));\r\n }\r\n\r\n function validOrder()\r\n {\r\n $scope.orderQtyWarning = {\r\n show: false,\r\n text: ''\r\n };\r\n\r\n var orderTotal = ($scope.kendo.ordersGrid.dataSource.data().toJSON().sum('OrderQty') || 0) + ($scope.kendo.ordersEquipmentGrid.dataSource.data().toJSON().sum('OrderQty') || 0);\r\n var OrdQtyParams = [$scope.editOrders.context.WOGSettings.OrdMinQty, $scope.editOrders.context.WOGSettings.OrdMaxQty];\r\n\r\n if (!validOrderQtys($scope.kendo.ordersGrid.dataSource.data()) || !validOrderQtys($scope.kendo.ordersEquipmentGrid.dataSource.data())) {\r\n $scope.orderQtyWarning = {\r\n show: true,\r\n text: localStrings.getLocalizedString(\"InvalidTankQuantity\")\r\n };\r\n }\r\n\r\n if (orderTotal < $scope.editOrders.context.WOGSettings.OrdMinQty)\r\n {\r\n $scope.orderQtyWarning = {\r\n show: true,\r\n text: localStrings.getLocalizedString(\"DoesNotMeetMinimum\", OrdQtyParams)\r\n };\r\n }\r\n\r\n if (orderTotal > $scope.editOrders.context.WOGSettings.OrdMaxQty)\r\n {\r\n $scope.orderQtyWarning = {\r\n show: true,\r\n text: localStrings.getLocalizedString(\"OrderExceedsMaximum\", OrdQtyParams)\r\n };\r\n }\r\n\r\n return validatorSvc.executeValidations() && !$scope.orderQtyWarning.show;\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n $scope.checkForAppliedProfile();\r\n\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.addOrder = $scope.locationInfo.sideMenuData.addOrder || {};\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 20;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OrdersSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n\r\n getContactsContext();\r\n getOrderContext();\r\n getCreditHoldMsg();\r\n\r\n if ($routeParams.ordKey) {\r\n loadExistingOrder();\r\n }\r\n else {\r\n loadNewOrder();\r\n }\r\n };\r\n\r\n $scope.saveOrder = function saveOrder(command) {\r\n // If command is submit we need to save the details before we submit them.\r\n if (command === 'Submit') {\r\n $scope.editOrders.orderDetails.Command = 'Pending';\r\n } else {\r\n $scope.editOrders.orderDetails.Command = command;\r\n }\r\n\r\n if (!validOrder()) {\r\n enableButton();\r\n return;\r\n }\r\n\r\n $scope.resetDirtyFlags($scope.editOrders.editForm);\r\n\r\n $scope.editOrders.orderDetails.OrdCreatedByContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n $scope.editOrders.orderDetails.OrderDetails = $scope.kendo.ordersGrid.dataSource.data().toJSON().concat($scope.kendo.ordersEquipmentGrid.dataSource.data().toJSON());\r\n ordersService.saveOrderDetails($scope.editOrders.orderDetails).then(\r\n function (data) {\r\n //notify and drop out on errors\r\n if (angular.isUndefinedOrNullOrEmpty(data.OrderDetails.OrdKey) || data.OrderDetails.OrdKey === 0) {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesNotSaved\"), \"error\");\r\n hasErrors(data.OrderDetails.Errors);\r\n enableButton();\r\n return;\r\n }\r\n\r\n if (hasErrors(data.OrderDetails.Errors)) {\r\n enableButton();\r\n return;\r\n }\r\n\r\n if ($scope.editOrders.orderDetails.Command !== command) {\r\n data.OrderDetails.Command = command;\r\n\r\n ordersService.saveOrderDetails(data.OrderDetails).then(\r\n function (submit) {\r\n //notify and drop out on errors\r\n if (angular.isUndefinedOrNullOrEmpty(submit.OrderDetails.OrdKey) || submit.OrderDetails.OrdKey === 0) {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesNotSaved\"), \"error\");\r\n hasErrors(submit.OrderDetails.Errors);\r\n enableButton();\r\n return;\r\n }\r\n\r\n if (hasErrors(submit.OrderDetails.Errors)) {\r\n enableButton();\r\n return;\r\n }\r\n });\r\n }\r\n\r\n //notify and handle success\r\n switch (command) {\r\n case 'Pending':\r\n $scope.notifier.show(localStrings.getLocalizedString(\"SavedChanges\"), \"success\");\r\n $scope.goTo('Orders/EditOrder/' + data.OrderDetails.OrdKey);\r\n loadExistingOrder();\r\n enableButton();\r\n break;\r\n\r\n case 'Submit':\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesBeenSubmitted\"), \"success\");\r\n $scope.goTo('Orders/DisplayOrder/' + data.OrderDetails.OrdKey);\r\n break;\r\n\r\n case 'Cancel':\r\n $scope.notifier.show(localStrings.getLocalizedString(\"SavedChanges\"), \"success\");\r\n $scope.goTo('Orders/OpenOrders/');\r\n break;\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.cancelCommentModalDialogClose = function () {\r\n enableButton();\r\n };\r\n\r\n function enableButton() {\r\n $('#editOrderPending').removeAttr('disabled');\r\n $('#editOrderSubmit').removeAttr('disabled');\r\n $('#editOrderCancel').removeAttr('disabled');\r\n $('#editOrderCancelComment').removeAttr('disabled');\r\n }\r\n\r\n function mergeTankData(target, source)\r\n {\r\n //filter out records with non-existent tank / equipment\r\n target = target.filter(function (t) {\r\n for (var i = 0; i < source.length; i++) {\r\n if ((t.TankNumber && source[i].TankNumber === t.TankNumber) || (t.EquipmentKey && source[i].EquipmentKey === t.EquipmentKey)) {\r\n return true;\r\n }\r\n }\r\n if (t.TankNumber && $scope.initialOrderCustLocKey === $scope.editOrders.orderDetails.CustLocKey) {\r\n $scope.notifier.show(\"Tank #\" + t.TankNumber + \" is no longer valid for this customer's location and will be removed from the order. Please click save or resubmit the order to proceed\", 'warning');\r\n }\r\n return false;\r\n });\r\n //iterate through each item(s) in the source array\r\n source.each(function (s)\r\n {\r\n var t = null;\r\n if (s.EquipmentKey) {\r\n t = target.find({ EquipmentKey: s.EquipmentKey });\r\n if (!t) {\r\n t = {};\r\n target.add(t);\r\n }\r\n } else {\r\n //look for a matching item in the target\r\n t = target.find({TankNumber: s.TankNumber});\r\n\r\n //not matching item so lets make one\r\n if (!t)\r\n t = target\r\n .add(new ordersService.blankOrderDetailsObj())\r\n .last();\r\n }\r\n\r\n //if the source property value is empty, copy over the target value\r\n for (var p in s)\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(t[p]))\r\n t[p] = s[p];\r\n }\r\n\r\n //set null quantity to zero\r\n if (angular.isUndefinedOrNullOrEmpty(t['OrderQty'])) t['OrderQty'] = 0;\r\n });\r\n\r\n $scope.editOrders.orderDetails.OrderDetails = target.filter(function (t) { return t.TankNumber; }).sortBy('TankNumber');\r\n $scope.editOrders.orderDetails.OrderEquipmentDetails = target.filter(function (t) { return t.EquipmentKey; }).sortBy('EquipmentID');\r\n savedTankData = [];\r\n }\r\n\r\n function copyTankData(source)\r\n {\r\n var finalItems = [];\r\n //iterate through each item (s) in the source array\r\n source.each(function (s)\r\n {\r\n var existing = dataBetweenDateChanges.find({ CustFuelTankKey: s.CustFuelTankKey });\r\n\r\n if (existing) {\r\n finalItems.push(existing);\r\n } else {\r\n //set null quantity to zero\r\n if (angular.isUndefinedOrNullOrEmpty(s['OrderQty'])) s['OrderQty'] = 0;\r\n finalItems.push(s);\r\n }\r\n });\r\n\r\n $scope.editOrders.orderDetails.OrderDetails = finalItems.sortBy('TankNumber');\r\n }\r\n function copyEquipmentData(source) {\r\n var finalItems = [];\r\n source.each(function (s) {\r\n var existing = dataBetweenDateChanges.find({ EquipmentKey: s.EquipmentKey });\r\n if (existing) {\r\n finalItems.push(existing);\r\n } else {\r\n //set null quantity to zero\r\n if (angular.isUndefinedOrNullOrEmpty(s['OrderQty'])) s['OrderQty'] = 0;\r\n finalItems.push(s);\r\n }\r\n });\r\n\r\n $scope.editOrders.orderDetails.OrderEquipmentDetails = finalItems.sortBy('EquipmentID');\r\n }\r\n\r\n var updateCustomerLocationDataLock = 0;\r\n $scope.updateCustomerLocationData = function() {\r\n\r\n if (angular.isUndefinedOrNullOrEmpty($scope.editOrders.orderDetails.CustLocKey) || angular.isUndefinedOrNullOrEmpty($scope.editOrders.orderDetails.ReqDelivDateTime)) {\r\n return;\r\n }\r\n\r\n if (updateCustomerLocationDataLock === 0) {\r\n updateCustomerLocationDataLock++;\r\n // because of equipment we have to send also date parameter\r\n ordersService.getOrderLocationInfo($scope.editOrders.orderDetails.CustLocKey, $scope.editOrders.orderDetails.ReqDelivDateTime).then( // OMG this is string instead of date!\r\n function (data) {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.TanksAndEquipment)) {\r\n $scope.editOrders.show.buttonBar = false;\r\n $scope.notifier.show('Could not find any tank information for the selected Ship To location', 'error');\r\n $scope.hideTankAndEquipment = true;\r\n updateCustomerLocationDataLock--;\r\n return;\r\n }\r\n else {\r\n var validTankOrEquipment = true;\r\n if (!savedTankData.isEmpty()) {\r\n mergeTankData(savedTankData, data.TanksAndEquipment);\r\n // check if order customer location has valid tank and / or equipment\r\n validTankOrEquipment = $scope.editOrders.orderDetails.OrderDetails.length > 0 || $scope.editOrders.orderDetails.OrderEquipmentDetails.length > 0;\r\n }\r\n else {\r\n copyTankData(data.TanksAndEquipment.filter(function (te) { return te.TankNumber; }));\r\n copyEquipmentData(data.TanksAndEquipment.filter(function (te) { return te.EquipmentKey; }));\r\n if ($scope.editOrders.orderDetails.OrderDetails.length <= 0) {\r\n $scope.notifier.show('Could not find any tank information for the selected Ship To location', 'warning');\r\n }\r\n }\r\n dataBetweenDateChanges = [];\r\n\r\n $scope.hideTankAndEquipment = !validTankOrEquipment;\r\n $scope.editOrders.show.buttonBar = validTankOrEquipment;\r\n }\r\n\r\n $scope.editOrders.context.DeliveryDT = data.DeliveryDT;\r\n\r\n if (angular.isUndefinedOrNullOrEmpty($scope.editOrders.orderDetails.OrdDelivDirections) ||\r\n angular.isUndefinedOrNullOrEmpty($scope.editOrders.orderDetails.OrdKey)) {\r\n $scope.editOrders.orderDetails.OrdDelivDirections = data.DeliveryDirections;\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.prevCustLocKey) &&\r\n ($scope.prevCustLocKey) !== ($scope.editOrders.orderDetails.CustLocKey)) {\r\n $scope.editOrders.orderDetails.OrdDelivDirections = data.DeliveryDirections;\r\n $scope.prevCustLocKey = $scope.editOrders.orderDetails.CustLocKey;\r\n }\r\n\r\n $scope.kendo.ordersGridInit($scope.editOrders.orderDetails.OrderDetails, !$scope.editOrders.orderDetails.OrderDetails.all({ ID: \"\" }));\r\n $scope.kendo.ordersEquipmentGridInit($scope.editOrders.orderDetails.OrderEquipmentDetails);\r\n updateCustomerLocationDataLock--;\r\n }, function (error) {\r\n updateCustomerLocationDataLock--;\r\n throw error;\r\n }\r\n );\r\n }\r\n };\r\n\r\n $scope.$watch('editOrders.context.DeliveryDT', function updateDateTime()\r\n {\r\n let requestedDT, suggestedDT, theWinner;\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.editOrders.orderDetails.ReqDelivDateTime) && \r\n !isNaN(Date.parse($scope.editOrders.orderDetails.ReqDelivDateTime))) {\r\n requestedDT = new Date($scope.editOrders.orderDetails.ReqDelivDateTime.replace(/-/g, \"/\").replace(/T/g, \" \"));\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.editOrders.context.DeliveryDT) && \r\n !isNaN(Date.parse($scope.editOrders.context.DeliveryDT)))\r\n {\r\n let temp = $scope.editOrders.context.DeliveryDT;\r\n suggestedDT = new Date(temp.replace(/-/g, \"/\").replace(/T/g, \" \"));\r\n }\r\n\r\n if (requestedDT >= suggestedDT) {\r\n theWinner = requestedDT;\r\n }\r\n\r\n //save for validation\r\n $scope.editOrders.context.MinDateTime = theWinner;\r\n $scope.editOrders.orderDetails.ReqDelivDateTime = $filter('date')(new Date(theWinner), 'MM/dd/yyyy h:mm a');\r\n });\r\n\r\n $scope.$watch('editOrders.orderDetails.ReqDelivDateTime', function (reqDelivDateTimeString, oldReqDelivDateTimeString) {\r\n // OMG using strings instead of Date objects :(...\r\n if (updateCustomerLocationDataLock === 0) {\r\n if (reqDelivDateTimeString !== oldReqDelivDateTimeString &&\r\n !angular.isUndefinedOrNullOrEmpty(oldReqDelivDateTimeString) && !angular.isUndefinedOrNullOrEmpty(reqDelivDateTimeString) &&\r\n angular.isString(oldReqDelivDateTimeString) && angular.isString(reqDelivDateTimeString)) {\r\n var oldReqDelivDateTime = new Date(oldReqDelivDateTimeString.replace(/-/g, \"/\").replace(/T/g, \" \"));\r\n var reqDelivDateTime = new Date(reqDelivDateTimeString.replace(/-/g, \"/\").replace(/T/g, \" \"));\r\n\r\n if (oldReqDelivDateTime.toDateString() !== reqDelivDateTime.toDateString()) {\r\n // user changed date => get equipment list for that date\r\n // we save quantities - so we will be able to merge them with new values, because a lot of items might be the same when you just change a date.\r\n dataBetweenDateChanges = $scope.kendo.ordersGrid.dataSource.data().toJSON().concat($scope.kendo.ordersEquipmentGrid.dataSource.data().toJSON());\r\n $scope.updateCustomerLocationData();\r\n }\r\n }\r\n }\r\n });\r\n\r\n $scope.hasAnyTanks = function () {\r\n return $scope.editOrders.orderDetails.OrderDetails && $scope.editOrders.orderDetails.OrderDetails.length > 0 && !\r\n $scope.hideTankAndEquipment;\r\n };\r\n\r\n $scope.hasAnyEquipment = function () {\r\n return $scope.editOrders.orderDetails.OrderEquipmentDetails && $scope.editOrders.orderDetails.OrderEquipmentDetails.length > 0 && !\r\n $scope.hideTankAndEquipment;\r\n };\r\n })\r\n .controller(\"openOrdersCtrl\", function ($scope, ordersService, templates, localStrings)\r\n {\r\n 'use strict'; \r\n $scope.checkForAppliedProfile();\r\n\r\n if (!$scope.appInfo.webUser.CurrentAuthorization.CanAddEditWebOrders) {\r\n $scope.goTo('Orders/OrderHistory');\r\n }\r\n\r\n function getOpenOrders()\r\n {\r\n ordersService.getOpenOrders($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (!angular.isUndefinedOrNullOrEmpty(data.OpenOrders))\r\n {\r\n $scope.openOrders = data.OpenOrders;\r\n $scope.kendo.ordersGridInit();\r\n }\r\n else\r\n $scope.notifier.show(localStrings.getLocalizedString(\"SelectionCriteriaNoResults\"), 'warning');\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n }\r\n );\r\n }\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.ordersGrid = {};\r\n $scope.kendo.ordersGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"Number\",\r\n title: localStrings.getLocalizedString(\"Order\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"PONumber\",\r\n title: localStrings.getLocalizedString(\"PONumber\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"LocDescription\",\r\n title: localStrings.getLocalizedString(\"ShipTo\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Contact\",\r\n title: localStrings.getLocalizedString(\"Contact\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"DeliveryDate\",\r\n title: localStrings.getLocalizedString(\"DateTime\"),\r\n width: 130,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Status\",\r\n title: localStrings.getLocalizedString(\"Status\"),\r\n width: 130,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"EnteredBy\",\r\n title: localStrings.getLocalizedString(\"EnteredBy\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.ordersGridInit = function ()\r\n {\r\n $scope.kendo.ordersGridDS = new kendo.data.DataSource({\r\n data: $scope.openOrders,\r\n schema: {\r\n parse: function (response)\r\n {\r\n $.each(response, function (idx, elem)\r\n {\r\n if (elem.DeliveryDate && typeof elem.DeliveryDate === \"string\")\r\n {\r\n elem.DeliveryDate = Date.create(elem.DeliveryDate).format('{MM}/{dd}/{yyyy} {12hr}:{mm} {tt}');\r\n }\r\n });\r\n return response;\r\n }\r\n }\r\n });\r\n\r\n $scope.kendo.ordersGridDS.read();\r\n $scope.kendo.ordersGrid.dataSource.data($scope.kendo.ordersGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n\r\n if (!$scope.appInfo.webUser.CurrentAuthorization.CanAddEditWebOrders)\r\n $scope.goTo('Orders/OrderHistory');\r\n\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.openOrders = $scope.locationInfo.sideMenuData.openOrders || {};\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 20;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OrdersSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"1\";\r\n\r\n $scope.openOrders = [];\r\n getOpenOrders();\r\n };\r\n\r\n $scope.openOrder = function openOrder(order)\r\n {\r\n switch (order.Status)\r\n {\r\n case 'Pending':\r\n $scope.goTo('Orders/EditOrder/' + order.Key);\r\n break;\r\n\r\n default:\r\n $scope.goTo('Orders/DisplayOrder/' + order.Key);\r\n break;\r\n }\r\n };\r\n })\r\n .controller(\"orderHistoryCtrl\", function ($scope, customerService, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.orders = $scope.locationInfo.sideMenuData.orders || {};\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 20;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OrdersSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n };\r\n })\r\n .controller(\"orderHistorySideMenuCtrl\", function ($scope, validatorSvc, customerService, WebFunctions, $filter, reportingService, Authentication, localizationSvc)\r\n {\r\n 'use strict';\r\n // $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.ViewOrderHistoryandPriceNotices))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 20;\r\n $scope.locationInfo.sideMenuData.orders = {\r\n quotes: \"-1\",\r\n ordered: \"-1\",\r\n dispatched: \"-1\",\r\n delivered: \"-1\",\r\n billed: \"-1\",\r\n fuel: \"-1\",\r\n warehouse: \"-1\",\r\n noninventory: \"-1\",\r\n location: 0,\r\n productSearchText: '',\r\n packageSearchText: '',\r\n orderInvoiceBOLSearchTerm: '',\r\n reportType: 'Orders',\r\n showReportDetail: false\r\n };\r\n $scope.$root.reportSettings.reportKey = 13;\r\n\r\n customerService.getCustomerLocations($scope.appInfo.webUser.CurrentAuthorization.CustKey, 1).then(function (data)\r\n {\r\n $scope.locations = $filter('filter')(data.Locations, {Active: '!0'});\r\n $scope.locations.unshift({\r\n Active: -1,\r\n Description: localStrings.getLocalizedString(\"All\"),\r\n Key: 0\r\n });\r\n setTimeout(function() {\r\n $scope.locationInfo.sideMenuData.orders.location = 0;\r\n }, 0);\r\n });\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.orders = $scope.reportSettings.saveOptions.orders;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.orders = $scope.locationInfo.sideMenuData.orders;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n\r\n var reportName = $scope.locationInfo.sideMenuData.orders.showReportDetail ?\r\n \"OrdersDetailed\" : $scope.locationInfo.sideMenuData.orders.reportType;\r\n\r\n var qs = \"reportName=\" + reportName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-IncludeStatusOpen=\" + $scope.locationInfo.sideMenuData.orders.quotes +\r\n \"&RP-IncludeStatusOrdered=\" + $scope.locationInfo.sideMenuData.orders.ordered +\r\n \"&RP-IncludeStatusDispatched=\" + $scope.locationInfo.sideMenuData.orders.dispatched +\r\n \"&RP-IncludeStatusDelivered=\" + $scope.locationInfo.sideMenuData.orders.delivered +\r\n \"&RP-IncludeStatusBilled=\" + $scope.locationInfo.sideMenuData.orders.billed +\r\n \"&RP-IncludeTypeFuel=\" + $scope.locationInfo.sideMenuData.orders.fuel +\r\n \"&RP-IncludeTypeWarehouse=\" + $scope.locationInfo.sideMenuData.orders.warehouse +\r\n \"&RP-StartDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-EndDate=\" + $scope.dateSelector.endDate +\r\n \"&RP-ShipToKey=\" + $scope.locationInfo.sideMenuData.orders.location +\r\n \"&RP-ProductSearchTerm=\" + $scope.locationInfo.sideMenuData.orders.productSearchText +\r\n \"&RP-PackageSearchTerm=\" + $scope.locationInfo.sideMenuData.orders.packageSearchText +\r\n \"&RP-IncludeTypeNonInventory=\" + $scope.locationInfo.sideMenuData.orders.noninventory +\r\n \"&RP-OrderInvoiceBOLSearchTerm=\" + $scope.locationInfo.sideMenuData.orders.orderInvoiceBOLSearchTerm;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n\r\n };\r\n })\r\n;","/**\r\n * Created by rhampton on 7/25/2014.\r\n */\r\nangular.module(\"pnODPricing\", ['core.objects', 'services.payments', 'core.directives'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/Orders/BulkFuelPrices\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"BulkFuelPrices\"),\r\n controller: \"bulkFuelPricesCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Orders/WarehousePrices\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"WarehousePrices\"),\r\n controller: \"warehousePricesCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n }\r\n }\r\n }\r\n );\r\n })\r\n .controller(\"odPricingSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n };\r\n })\r\n .controller(\"bulkFuelPricesCtrl\", function ($scope, bulkFuelPriceNoticesService, $filter, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.bulkPricesGrid = {};\r\n $scope.kendo.bulkPricesGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var selectedRows = this.select();\r\n var dataItem = this.dataItem(selectedRows[0]);\r\n $scope.openEdoc(dataItem.EdocDtlKey);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"EffDateTimeFormatted\",\r\n title: localStrings.getLocalizedString(\"ReportDate\"),\r\n width: 100,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Location\",\r\n title: localStrings.getLocalizedString(\"Location\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.bulkPricesGridInit = function ()\r\n {\r\n $scope.kendo.bulkPricesGridDS = new kendo.data.DataSource({\r\n data: $scope.appInfo.bulkFuelPrices\r\n });\r\n\r\n $scope.kendo.bulkPricesGridDS.read();\r\n $scope.kendo.bulkPricesGrid.dataSource.data($scope.kendo.bulkPricesGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 21;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OdPricingSideMenu\");\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"1\",\r\n bulkFuelPrices: {\r\n location: 0\r\n }\r\n };\r\n if (!$scope.appInfo.bulkFuelPrices) $scope.appInfo.bulkFuelPrices = [];\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n $scope.modalifier.hide();\r\n $scope.predicate = 'EffDateTimeFormatted';\r\n $scope.reverse = false;\r\n bulkFuelPriceNoticesService.loadBulkFuelPrices($scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.locationInfo.sideMenuData.bulkFuelPrices.location,\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate).then(function (data)\r\n {\r\n if (data.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"BulkFuelPrices\"));\r\n }\r\n $scope.appInfo.bulkFuelPrices = data;\r\n angular.forEach($scope.appInfo.bulkFuelPrices, function (element)\r\n {\r\n element.EffDateTimeFormatted = $filter('date')(element.EffDateTime, 'MM/dd/yyyy');\r\n });\r\n $scope.kendo.bulkPricesGridInit();\r\n });\r\n };\r\n })\r\n .controller(\"bulkFuelPricesSideMenuCtrl\", function ($scope, templates, customerService, $filter, localizationSvc)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 21;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OdPricingSideMenu\");\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"1\",\r\n bulkFuelPrices: {\r\n location: 0\r\n }\r\n };\r\n $scope.$root.reportSettings.reportKey = 16;\r\n customerService.getCustomerLocations($scope.appInfo.webUser.CurrentAuthorization.CustKey, 1).then(function (data)\r\n {\r\n $scope.locations = $filter('filter')(data.Locations, {Active: '!0'});\r\n $scope.locations.unshift({\r\n Active: -1,\r\n Description: localStrings.getLocalizedString(\"All\"),\r\n Key: 0\r\n });\r\n $scope.locationInfo.sideMenuData.bulkFuelPrices.location = 0;\r\n });\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.bulkFuelPrices = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.bulkFuelPrices;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n })\r\n .controller(\"warehousePricesCtrl\", function ($scope, warehousePriceNoticesService, $filter, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.warehousePricesGrid = {};\r\n $scope.kendo.warehousePricesGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var selectedRows = this.select();\r\n var dataItem = this.dataItem(selectedRows[0]);\r\n $scope.openEdoc(dataItem.EdocDtlKey);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"EffDateTimeFormatted\",\r\n title: localStrings.getLocalizedString(\"ReportDate\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.warehousePricesGridInit = function ()\r\n {\r\n $scope.kendo.warehousePricesGridDS = new kendo.data.DataSource({\r\n data: $scope.appInfo.warehousePrices\r\n });\r\n\r\n $scope.kendo.warehousePricesGridDS.read();\r\n $scope.kendo.warehousePricesGrid.dataSource.data($scope.kendo.warehousePricesGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 21;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OdPricingSideMenu\");\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"2\",\r\n warehousePrices: {}\r\n };\r\n if (!$scope.appInfo.warehousePrices) $scope.appInfo.warehousePrices = [];\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n $scope.modalifier.hide();\r\n $scope.predicate = 'EffDateTimeFormatted';\r\n $scope.reverse = false;\r\n warehousePriceNoticesService.loadWarehousePrices($scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate).then(function (data)\r\n {\r\n if (data.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"WarehousePrices\"));\r\n }\r\n $scope.appInfo.warehousePrices = data;\r\n angular.forEach($scope.appInfo.warehousePrices, function (element)\r\n {\r\n element.EffDateTimeFormatted = $filter('date')(element.EffDateTime, 'MM/dd/yyyy');\r\n });\r\n $scope.kendo.warehousePricesGridInit();\r\n });\r\n };\r\n\r\n\r\n })\r\n .controller(\"warehousePricesSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n $scope.$root.reportSettings.reportKey = 31;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.warehousePrices = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.warehousePrices;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n })\r\n;","/**\r\n * Created by rhampton on 2/28/14.\r\n */\r\nangular.module('services.httpService', []);","/**\r\n * Created by rhampton on 2/17/2015.\r\n */\r\nangular.module('core.constants', []).factory('constantLists', function(localizationSvc){\r\n var secretQuestions = [];\r\n var phoneTypes = [];\r\n\r\n var getSecretQuestions = function (localStrings) {\r\n if (angular.isUndefinedOrNullOrEmpty(localStrings)) {\r\n localStrings = localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n\r\n if (secretQuestions.length === 0) {\r\n secretQuestions[0] = localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"SecretQuestion1\"));\r\n secretQuestions[1] = localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"SecretQuestion2\"));\r\n secretQuestions[2] = localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"SecretQuestion3\"));\r\n secretQuestions[3] = localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"SecretQuestion4\"));\r\n secretQuestions[4] = localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"SecretQuestion5\"));\r\n secretQuestions[5] = localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"SecretQuestion6\"));\r\n }\r\n\r\n return secretQuestions;\r\n };\r\n\r\n var getPhoneTypes = function (localStrings) {\r\n if (angular.isUndefinedOrNullOrEmpty(localStrings)) {\r\n localStrings = localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n\r\n if (phoneTypes.length === 0) {\r\n phoneTypes[0] = { key: 4, value: localStrings.getLocalizedString(\"Unknown\") };\r\n phoneTypes[1] = { key: 1, value: localStrings.getLocalizedString(\"Home\") };\r\n phoneTypes[2] = { key: 2, value: localStrings.getLocalizedString(\"Mobile\") };\r\n phoneTypes[3] = { key: 3, value: localStrings.getLocalizedString(\"Other\") };\r\n phoneTypes[4] = { key: 0, value: localStrings.getLocalizedString(\"Work\") };\r\n }\r\n\r\n return phoneTypes;\r\n };\r\n return {\r\n secretQuestions: getSecretQuestions,\r\n phoneTypes: getPhoneTypes\r\n };\r\n});\r\n","/* ==============================================================================\r\n\r\nCore Enums\r\n\r\n Contains the core enum related code\r\n\r\n ============================================================================= */\r\nangular.module('core.enums', []).service('Modules', function ()\r\n{\r\n\r\n var All = 'All';\r\n var BulkFuel = 'BulkFuel';\r\n var CardLock = 'CardLock';\r\n var Retail = 'Retail';\r\n var Wholesale = 'Wholesale';\r\n\r\n return {\r\n All: All,\r\n BulkFuel: BulkFuel,\r\n CardLock: CardLock,\r\n Retail: Retail,\r\n Wholesale: Wholesale\r\n };\r\n}).service('WebFunctions', function ()\r\n{\r\n var AccountActivity = 1;\r\n var PaperworkEntry = 2;\r\n var CardTransactions = 3;\r\n var ViewCards = 4;\r\n var EditCards = 5;\r\n var CardAlerts = 6;\r\n var AddNewCards = 7;\r\n var AddandEditWebPaymentAccounts = 8;\r\n var AddandEditWebPayments = 9;\r\n //var ViewCreditBalanceInformation = 10;\r\n var CPPriceNotices = 11;\r\n var ViewCardNumbers = 12;\r\n var ViewNotificationsSenttoOtherContacts = 13;\r\n var ManageContactsAndSecurity = 14;\r\n var ViewCreditInformation = 15;\r\n var ViewOrderHistoryandPriceNotices = 16;\r\n var AddAndEditBulkFuelOrders = 17;\r\n var ViewCustomPages = 18;\r\n return {\r\n AccountActivity: AccountActivity,\r\n PaperworkEntry: PaperworkEntry,\r\n CardTransactions: CardTransactions,\r\n ViewCards: ViewCards,\r\n EditCards: EditCards,\r\n CardAlerts: CardAlerts,\r\n AddNewCards: AddNewCards,\r\n AddandEditWebPaymentAccounts: AddandEditWebPaymentAccounts,\r\n AddandEditWebPayments: AddandEditWebPayments,\r\n //ViewCreditBalanceInformation : ViewCreditBalanceInformation,\r\n CPPriceNotices: CPPriceNotices,\r\n ViewCardNumbers: ViewCardNumbers,\r\n ViewNotificationsSenttoOtherContacts: ViewNotificationsSenttoOtherContacts,\r\n ManageContactsAndSecurity: ManageContactsAndSecurity,\r\n ViewCreditInformation: ViewCreditInformation,\r\n ViewOrderHistoryandPriceNotices: ViewOrderHistoryandPriceNotices,//BulkFuel\r\n AddAndEditBulkFuelOrders: AddAndEditBulkFuelOrders,//BulkFuel\r\n ViewCustomPages: ViewCustomPages\r\n\r\n };\r\n}).service('WebFunctionGroups', function (WebFunctions)\r\n{\r\n var x = WebFunctions;\r\n var All = [x.AccountActivity, x.PaperworkEntry, x.CardTransactions, x.ViewCards, x.EditCards, x.CardAlerts,\r\n x.AddNewCards, x.AddandEditWebPaymentAccounts, x.AddandEditWebPayments, x.ViewCreditInformation,\r\n x.CPPriceNotices, x.ViewCardNumbers, x.ViewNotificationsSenttoOtherContacts, x.ManageContactsAndSecurity,\r\n x.ViewOrderHistoryandPriceNotices, x.AddAndEditBulkFuelOrders];\r\n var Account = [x.AccountActivity, x.CardTransactions, x.AddandEditWebPaymentAccounts, x.AddandEditWebPayments];\r\n var Payments = [x.AddandEditWebPaymentAccounts, x.AddandEditWebPayments];\r\n var Orders = [/*x.AccountActivity,*/ x.ViewOrderHistoryandPriceNotices, x.AddAndEditBulkFuelOrders];//BulkFuel && Warehouse\r\n var Paperwork = [x.PaperworkEntry];\r\n var FuelCards = [x.CardTransactions, x.ViewCards, x.EditCards, x.CardAlerts, x.AddNewCards, x.CPPriceNotices];\r\n var Comments = All;\r\n var Documents = All;\r\n var AccountReports = [x.AccountActivity];\r\n var AccountPayments = [x.AddandEditWebPaymentAccounts, x.AddandEditWebPayments];\r\n var AccountAlerts = [x.AddandEditWebPayments];\r\n var FuelCardsCards = [x.ViewCards, x.EditCards, x.AddNewCards];\r\n var FuelCardsTrans = [x.CardTransactions];\r\n var FuelCardsPrices = [x.CPPriceNotices];\r\n var CustomPages = [x.ViewCustomPages];\r\n return {\r\n All: All,\r\n Account: Account,\r\n Orders: Orders,\r\n Paperwork: Paperwork,\r\n Payments: Payments,\r\n FuelCards: FuelCards,\r\n Comments: Comments,\r\n Documents: Documents,\r\n AccountReports: AccountReports,\r\n AccountPayments: AccountPayments,\r\n AccountAlerts: AccountAlerts,\r\n FuelCardsCards: FuelCardsCards,\r\n FuelCardsTrans: FuelCardsTrans,\r\n FuelCardsPrices: FuelCardsPrices,\r\n CustomPages: CustomPages\r\n };\r\n}).service('WebFunctionModules', function (WebFunctions)\r\n{\r\n return {\r\n checkWebFunctionModules: function (webFunction, isBulkFuel, isCardLock, isRetail, isWholesale, isWebEft, customer)\r\n {\r\n if (webFunction === WebFunctions.CardTransactions) return isCardLock;\r\n if (webFunction === WebFunctions.ViewCards) return isCardLock;\r\n if (webFunction === WebFunctions.EditCards) return isCardLock;\r\n if (webFunction === WebFunctions.CardAlerts) return isCardLock;\r\n if (webFunction === WebFunctions.AddNewCards) return isCardLock;\r\n if (webFunction === WebFunctions.AddandEditWebPaymentAccounts) return isWebEft;\r\n if (webFunction === WebFunctions.AddandEditWebPayments) return isWebEft;\r\n if (webFunction === WebFunctions.CPPriceNotices) return isCardLock && (customer.CPPrcNtcRuleKey !== null && customer.CPPrcNtcRuleKey > 0);\r\n if (webFunction === WebFunctions.ViewCardNumbers) return isCardLock;\r\n if (webFunction === WebFunctions.ViewOrderHistoryandPriceNotices) return (isBulkFuel || isWholesale);\r\n if (webFunction === WebFunctions.AddAndEditBulkFuelOrders) return (isBulkFuel || isWholesale);\r\n //for all other web functions assume that any module access is fine.\r\n return true;\r\n }\r\n };\r\n});","\r\n\r\n/* ==============================================================================\r\n\r\n CORE.ERROR MODULE\r\n\r\n Defines the error module and it all it's module dependencies\r\n\r\n ============================================================================= */\r\nangular.module('core.error', []);\r\n\r\n\r\n\r\n/* ==============================================================================\r\n\r\n CORE.ERROR SERVICE\r\n\r\n Contains helpful error handling and publishing methods\r\n\r\n ============================================================================= */\r\nangular.module('core.error').factory('NotificationService', function ($rootScope) {\r\n 'use strict';\r\n function handle(event, settings, opResults, status, headers, config) {\r\n var data = {\r\n settings: settings,\r\n opResults: opResults,\r\n status: status,\r\n headers: headers,\r\n config: config\r\n };\r\n $rootScope.$broadcast('event:' + event, data);\r\n }\r\n return {\r\n handleError: function (settings, opResults, status, headers, config) {\r\n handle('Error', settings, opResults, status, headers, config);\r\n },\r\n handleFailure: function (settings, opResults, status, headers, config) {\r\n handle('Failed', settings, opResults, status, headers, config);\r\n },\r\n handleSuccess: function (settings, opResults, status, headers, config) {\r\n handle('Success', settings, opResults, status, headers, config);\r\n }\r\n };\r\n});","angular.module('core.objects', [])\r\n .factory(\"Payment\",function(HttpUtil){\r\n 'use strict';\r\n var paymentInfo = {};\r\n return {\r\n paymentInfo : paymentInfo\r\n };\r\n })\r\n .factory(\"HttpUtil\",function($http, $q){\r\n 'use strict';\r\n return {};\r\n });","/* ==============================================================================\r\n\r\n CORE.SECURITY MODULE\r\n\r\n Contains all security related code\r\n\r\n ============================================================================= */\r\nangular.module('core.security', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n AUTH INTERCEPTOR\r\n\r\n Adds the Auth Token to the Http headers collection\r\n if the token is present.\r\n\r\n ============================================================================= */\r\nangular.module('core.security').factory('AuthInterceptor', function ($q, $rootScope, $location, $interval)\r\n{\r\n function logout()\r\n {\r\n $rootScope.sessionExpired = true;\r\n }\r\n\r\n return {\r\n\r\n request: function (config)\r\n {\r\n $interval.cancel($rootScope.sessionTimeout);\r\n config.headers = config.headers || {};\r\n\r\n // If the auth token is present\r\n if (amplify.store('pnuser-token') !== undefined)\r\n {\r\n // Add it to the http headers collection to be read by our\r\n // server-side authentication code\r\n var token = amplify.store('pnuser-token');\r\n config.headers.Authentication = token;\r\n //Update expiration time for the user token\r\n amplify.store('pnuser-token', token, {expires: $rootScope.timeout});\r\n if ($rootScope.timeout > 0)\r\n {\r\n $rootScope.sessionTimeout = $interval(function ()\r\n {\r\n logout();\r\n }, $rootScope.timeout);\r\n }\r\n } else\r\n {\r\n if ($location.$$path !== \"/\" &&\r\n $location.$$path.search(/(SignUp|ResetPassword|SetPassword|ContactUs|SiteDisabled|unsubscribe)/i) === -1)\r\n logout();\r\n }\r\n\r\n return config || $q.when(config);\r\n }\r\n\r\n };\r\n\r\n});\r\n\r\n/* ==============================================================================\r\n\r\n AUTHENTICATION SERVICE\r\n\r\n Contains the core authentication related code\r\n\r\n ============================================================================= */\r\nangular.module('core.security').factory('Authentication', function ($q, $rootScope, apiService, $location, $analytics)\r\n{\r\n\r\n return {\r\n isAuthenticated: function ()\r\n {\r\n var deferred = $q.defer(),\r\n token = amplify.store('pnuser-token');\r\n\r\n if (token === undefined)\r\n {\r\n $rootScope.isAuthenticated = false;\r\n deferred.reject('authentication:auth-token not valid');\r\n }\r\n else\r\n {\r\n $rootScope.isAuthenticated = true;\r\n deferred.resolve('authentication:auth-token is valid');\r\n }\r\n return deferred.promise;\r\n },\r\n login: function (userId, password, impersonationGuid)\r\n {\r\n var deferred = $q.defer();\r\n var data = {\r\n \"WebUserId\": userId || '',\r\n \"WebUserPassword\": password || '',\r\n 'ImpersonationGuid': impersonationGuid || ''\r\n };\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/Login',\r\n data: data\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n $rootScope.loginInfo.userId = data.Data.ImpersonatedUserId;\r\n $rootScope.loginInfo.userKey = data.Data.ImpersonatedKey;\r\n $rootScope.loginInfo.userType = data.Data.ImpersonatedType;\r\n $rootScope.loginInfo.impersonatorUserId = data.Data.ImpersonatorUserId;\r\n $rootScope.loginInfo.impersonatorUserKey = data.Data.ImpersonatorKey;\r\n $rootScope.loginInfo.impersonatorUserType = data.Data.ImpersonatorType;\r\n\r\n // Create Google Analytics Login event with Web User Key\r\n $analytics.eventTrack('Successful Login', { category: 'User Access', label: data.Data.Key });\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n // Create Google Analytics Login event with Web User Key\r\n $analytics.eventTrack('Failed Login', { category: 'User Access', label: data.Errors[0] || 'Valid login credentials required' });\r\n deferred.reject(data.ErrorMessages);\r\n }\r\n );\r\n \r\n return deferred.promise;\r\n },\r\n userToken: function ()\r\n {\r\n if (amplify.store('pnuser-token') !== undefined)\r\n {\r\n return amplify.store('pnuser-token');\r\n } else\r\n {\r\n $location.path('/');\r\n }\r\n }\r\n };\r\n});\r\n\r\n/* ==============================================================================\r\n\r\n USER SERVICE\r\n\r\n Contains the core USER related code\r\n\r\n ============================================================================= */\r\nangular.module('core.security')\r\n .factory('WebUserSvc', function ($q, $rootScope, Authentication, apiService)\r\n {\r\n var webUser;\r\n\r\n function removeEmptySiteMenuEntries(data)\r\n {\r\n if (!data.Data.WebUser || !data.Data.WebUser.CurrentAuthorization || !data.Data.WebUser.CurrentAuthorization.SiteLayout)\r\n {\r\n return;\r\n }\r\n\r\n data.Data.WebUser.CurrentAuthorization.SiteLayout.SubMenu.remove(function (menu)\r\n {\r\n return !data.Data.WebUser.CurrentAuthorization.SiteLayout.SideMenu.any({ParentKey:menu.Key});\r\n });\r\n }\r\n\r\n function retrieveWebUserFromAPI(user)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetWebUser/' + user,\r\n params: {}\r\n });\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n removeEmptySiteMenuEntries(data);\r\n webUser = data.Data.WebUser;\r\n deferred.resolve(webUser);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n\r\n function retrieveWebUserFromAPIWithToken(token, profile) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetWebUserByToken/',\r\n data: {\r\n ProfileKey: profile,\r\n Token: token\r\n }\r\n });\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n removeEmptySiteMenuEntries(data);\r\n webUser = data.Data.WebUser;\r\n deferred.resolve(webUser);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n\r\n function retrieveSelectedProfileFromAPI(user, profile)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetWebUserAndProfile/' + user + '/' + profile,\r\n params: {}\r\n });\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n removeEmptySiteMenuEntries(data);\r\n webUser = data.Data.WebUser;\r\n deferred.resolve(webUser);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n\r\n function getWebUser()\r\n {\r\n return webUser;\r\n }\r\n\r\n return {\r\n getLoggedInWebUserToken: function ()\r\n {\r\n var token = amplify.store('pnuser-token');\r\n\r\n if (token === undefined)\r\n {\r\n $rootScope.isAuthenticated = false;\r\n return;\r\n }\r\n $rootScope.isAuthenticated = true;\r\n \r\n return token;\r\n },\r\n getWebUserProfile: function () {\r\n return amplify.store('pnWebProfile');\r\n },\r\n getCurrentAuthorization: function () {\r\n return amplify.store('pnAuthIndex');\r\n },\r\n retrieveWebUser: function (user)\r\n {\r\n var deferred = $q.defer();\r\n retrieveWebUserFromAPI(user).then(function (data) {\r\n deferred.resolve(data);\r\n });\r\n return deferred.promise;\r\n },\r\n retrieveWebUserData: function (token, profile) {\r\n var deferred = $q.defer();\r\n retrieveWebUserFromAPIWithToken(token, profile).then(function (data) {\r\n deferred.resolve(data);\r\n });\r\n return deferred.promise;\r\n },\r\n retrieveWebUserFromAPI: retrieveWebUserFromAPI,\r\n retrieveWebUserFromAPIWithToken: retrieveWebUserFromAPIWithToken,\r\n retrieveSelectedProfile: function (user, profile)\r\n {\r\n var deferred = $q.defer();\r\n retrieveSelectedProfileFromAPI(user, profile).then(function (data) {\r\n deferred.resolve(data);\r\n });\r\n return deferred.promise;\r\n },\r\n getWebUserForSignup: function (webUser)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetWebUserForSignup/' + webUser.GUID,\r\n params: {}\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n signupWebUser: function (webUser)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SignupWebUser/',\r\n data: webUser\r\n }\r\n );\r\n apiService.executeAndSuppressErrors(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getWebUserForPasswordReset: function (webUser)\r\n {\r\n var deferred = $q.defer(webUser);\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetWebUserForPasswordReset/' + webUser.GUID,\r\n params: {}\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n verifyWebUserSecretQuestionAnswer: function (webUser)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/VerifyWebUserSecretQuestionAnswer/' + webUser.GUID + '/' + webUser.AnswerClear,\r\n params: {}\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n resetWebUserPassword: function (webUser)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/ResetWebUserPassword/',\r\n data: webUser\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccessAndSuppressErrors(apiSvcSettings).then(\r\n function (data)\r\n {\r\n webUser = data.Data;\r\n deferred.resolve(webUser);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n processForgotMyPassword: function (email)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/ProcessWebUserResetPassword/',\r\n params: {\r\n webUserId: email\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.ErrorMessages);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n saveWebUser: function (webUser, quiet)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveWebUser/',\r\n data: webUser\r\n }\r\n );\r\n if (quiet)\r\n {\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n webUser = data.Data.WebUser;\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n } else\r\n {\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n webUser = data.Data.WebUser;\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n }\r\n return deferred.promise;\r\n },\r\n validatePasswordComplexity: function (webUserKey, password, isLogin)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/ValidatePasswordComplexity/',\r\n data: {\r\n WebUserKey: webUserKey,\r\n Password: password,\r\n IsLogin: isLogin,\r\n }\r\n }\r\n );\r\n apiService.executeAndSuppressErrors(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.resolve(data.Errors);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getNextPasswordResetDate: function (webUser)\r\n {\r\n var one_day = 1000 * 60 * 60 * 24;\r\n // Convert both dates to milliseconds\r\n var date1_ms = new Date(Date.parse(webUser.PWCreatedDate));\r\n var date2_ms = new Date().getTime();\r\n var difference_ms = date1_ms - date2_ms;\r\n return Math.round(difference_ms / one_day);\r\n },\r\n getWebUser: getWebUser,\r\n resolveWebUser: function () {\r\n var deferred = $q.defer();\r\n var _user = this.getWebUser();\r\n var _token = this.getLoggedInWebUserToken();\r\n var _profile = this.getWebUserProfile();\r\n\r\n // We have the user already\r\n if (!angular.isUndefinedOrNullOrEmpty(_user)) deferred.resolve();\r\n\r\n // Get the user if we can\r\n else if (!angular.isUndefinedOrNullOrEmpty(_token) && !angular.isUndefinedOrNullOrEmpty(_profile))\r\n this.retrieveWebUserData(_token, _profile).then(function () { deferred.resolve(); });\r\n\r\n // User is not able to be retrieved\r\n else deferred.resolve();\r\n\r\n return deferred.promise;\r\n }\r\n };\r\n }\r\n);","/**\r\n * Created by rhampton on 6/17/2014.\r\n */\r\n\r\n\r\n/* ==============================================================================\r\n\r\n CORE.DIRECTIVES MODULE\r\n\r\n Defines the module namespace for the core.directives\r\n\r\n ============================================================================= */\r\nangular.module('core.directives', []);\r\n\r\n/* ==============================================================================\r\n\r\n Modal Dialog\r\n\r\n Shows and hides a modal dialog centered on the page.\r\n\r\n ============================================================================= */\r\nangular.module('core.directives')\r\n .directive('modalDialog', function ($rootScope)\r\n {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n show: '=',\r\n closeDialog: '&',\r\n closeText: '@',\r\n autoClose: '@'\r\n },\r\n replace: true, // Replace with the template below\r\n transclude: true, // we want to insert custom content inside the directive\r\n link: function (scope, element, attrs)\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(attrs.autoClose))\r\n {\r\n attrs.autoClose = true;\r\n } else\r\n {\r\n attrs.autoClose = scope.$eval(attrs.autoClose);\r\n }\r\n\r\n scope.dialogStyle = {};\r\n if (attrs.width)\r\n scope.dialogStyle.width = attrs.width;\r\n if (attrs.height)\r\n scope.dialogStyle.height = attrs.height;\r\n\r\n\r\n },\r\n controller: function ($scope, $element, $attrs)\r\n {\r\n\r\n $scope.hideModal = function (source)\r\n {\r\n if ((source === 1) && (!$attrs.autoClose))\r\n {\r\n return;\r\n } // if clicked outside of modal and autoClose is set to false then don't close modal\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.closeDialog()))\r\n {\r\n $scope.closeDialog();\r\n }\r\n\r\n $scope.show = false;\r\n };\r\n },\r\n template: \"
    \"\r\n };\r\n })\r\n .directive('parseInt', [function ()\r\n {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elem, attrs, controller)\r\n {\r\n controller.$formatters.push(function (modelValue)\r\n {\r\n return '' + modelValue;\r\n });\r\n\r\n controller.$parsers.push(function (viewValue)\r\n {\r\n return parseInt(viewValue, 10);\r\n });\r\n }\r\n };\r\n }])\r\n .directive('parseFloat', [function ()\r\n {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elem, attrs, controller)\r\n {\r\n controller.$formatters.push(function (modelValue)\r\n {\r\n return '' + modelValue;\r\n });\r\n\r\n controller.$parsers.push(function (viewValue)\r\n {\r\n return parseFloat(viewValue);\r\n });\r\n }\r\n };\r\n }])\r\n .directive('parseDate', function ()\r\n {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attr, ngModelCtrl)\r\n {\r\n function fromUser(text)\r\n {\r\n var transformedInput = text.replace(/[^0-9/]/, '');\r\n if (transformedInput !== text)\r\n {\r\n ngModelCtrl.$setViewValue(transformedInput);\r\n ngModelCtrl.$render();\r\n }\r\n return transformedInput;\r\n }\r\n\r\n ngModelCtrl.$parsers.push(fromUser);\r\n }\r\n };\r\n })\r\n .directive('dynamicHtml', function ($compile)\r\n {\r\n return {\r\n restrict: 'A',\r\n replace: true,\r\n link: function (scope, ele, attrs)\r\n {\r\n scope.$watch(attrs.dynamic, function (html)\r\n {\r\n ele.html(html);\r\n $compile(ele.contents())(scope);\r\n });\r\n }\r\n };\r\n })\r\n .directive('money', function ($filter)\r\n {\r\n 'use strict';\r\n var NUMBER_REGEXP = /^\\s*(\\-|\\+)?(\\d+|(\\d*(\\.\\d*)))\\s*$/;\r\n\r\n function link(scope, el, attrs, ngModelCtrl)\r\n {\r\n var min = parseFloat(attrs.min || 0);\r\n var precision = parseFloat(attrs.precision || 2);\r\n var symbol = attrs.symbol || '';\r\n var lastValidValue;\r\n\r\n function unFormatNumber(number)\r\n {\r\n number += '';\r\n\r\n if (number.toString().indexOf(',') > -1)\r\n {\r\n number = number.replace(/,/g, \"\");\r\n }\r\n if (number.toString().indexOf('$') > -1)\r\n {\r\n number = number.replace(/\\$/g, \"\");\r\n }\r\n if (number.length === 0)// || isNaN(number))\r\n return \"0\";\r\n return number;\r\n }\r\n\r\n function formatViewValue(value)\r\n {\r\n value = unFormatNumber(value);\r\n value = ngModelCtrl.$isEmpty(value) ? '' : '' + symbol + formatNumber(value, precision);\r\n lastValidValue = value;\r\n return value;\r\n }\r\n\r\n ngModelCtrl.$formatters.push(formatViewValue);\r\n\r\n function formatNumber(val, decimalPlaces)\r\n {\r\n val = unFormatNumber(val);\r\n val = parseFloat(val).toFixed(decimalPlaces);\r\n val = addCommas(val);\r\n return val;\r\n }\r\n\r\n function addCommas(nStr)\r\n {\r\n nStr += '';\r\n var x = nStr.split('.');\r\n var x1 = x[0];\r\n var x2 = x.length > 1 ? '.' + x[1] : '';\r\n var rgx = /(\\d+)(\\d{3})/;\r\n while (rgx.test(x1))\r\n {\r\n x1 = x1.replace(rgx, '$1' + ',' + '$2');\r\n }\r\n return x1 + x2;\r\n }\r\n\r\n ngModelCtrl.$parsers.push(function (value)\r\n {\r\n value = unFormatNumber(value);\r\n if (angular.isUndefined(value))\r\n {\r\n value = '';\r\n }\r\n // value = unFormatNumber(value);\r\n // Handle leading decimal point, like \".5\"\r\n if (value.indexOf('.') === 0)\r\n {\r\n value = '0' + value;\r\n }\r\n\r\n // Allow \"-\" inputs only when min < 0\r\n if (value.indexOf('-') === 0)\r\n {\r\n if (min >= 0)\r\n {\r\n value = null;\r\n ngModelCtrl.$setViewValue('');\r\n ngModelCtrl.$render();\r\n } else if (value === '-')\r\n {\r\n value = '';\r\n }\r\n }\r\n\r\n var empty = ngModelCtrl.$isEmpty(value);\r\n if (empty || NUMBER_REGEXP.test(value))\r\n {\r\n lastValidValue = (value === '') ? null : (empty ? value : parseFloat(value));\r\n } else\r\n {\r\n // Render the last valid input in the field\r\n ngModelCtrl.$setViewValue(formatViewValue(lastValidValue));\r\n ngModelCtrl.$render();\r\n }\r\n\r\n ngModelCtrl.$setValidity('number', true);\r\n return lastValidValue;\r\n });\r\n\r\n function applyFormat()\r\n {\r\n var value = unFormatNumber(ngModelCtrl.$modelValue);\r\n if (!isNaN(value))\r\n {\r\n ngModelCtrl.$viewValue = formatViewValue(value);\r\n lastValidValue = ngModelCtrl.$viewValue;\r\n ngModelCtrl.$render();\r\n }\r\n }\r\n\r\n el.bind('blur', applyFormat);\r\n el.bind('change', applyFormat);\r\n\r\n return applyFormat();\r\n }\r\n\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: link\r\n };\r\n })\r\n .directive('customAutofocus', function ()\r\n {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs)\r\n {\r\n scope.$watch(function ()\r\n {\r\n return scope.$eval(attrs.customAutofocus);\r\n }, function (newValue)\r\n {\r\n if (newValue === true)\r\n {\r\n element[0].select();\r\n element[0].focus();\r\n //use focus function instead of autofocus attribute to avoid cross browser problem.\r\n // And autofocus should only be used to mark an element to be focused when page loads.\r\n }\r\n });\r\n }\r\n };\r\n })\r\n .directive(\"toolTips\", function ($compile)\r\n {\r\n var clone = $compile('
    {{text}}
    ');\r\n\r\n function link(scope, el, attr)\r\n {\r\n if (scope.text && scope.text.length > 0)\r\n {\r\n el.qtip({\r\n position: {\r\n at: \"right middle\"\r\n },\r\n style: {\r\n tip: {\r\n corner: \"left top\"\r\n },\r\n classes: \"toolTipStyle\"\r\n },\r\n content: {\r\n text: function ()\r\n {\r\n return scope.$apply(function ()\r\n {\r\n return clone(scope);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n return {\r\n restrict: 'A',\r\n link: link,\r\n scope: {\r\n text: \"=toolTips\"\r\n }\r\n };\r\n })\r\n .directive('strength', ['$parse', function ($parse)\r\n {\r\n return {\r\n require: 'ngModel',\r\n restrict: 'A',\r\n scope: {\r\n passwordComplexity: \"=\",\r\n passwordMeterScore: \"=\"\r\n },\r\n link: function (scope, elem, attrs, ctrl)\r\n {\r\n ctrl.$parsers.unshift(function (viewValue)\r\n {\r\n var pwdValidLength, pwdHasLetter, pwdHasNumber, pwdHasSpecial;\r\n\r\n if (scope.passwordComplexity.EnforcePasswordComplexity)\r\n {\r\n pwdValidLength = (viewValue && viewValue.length >= scope.passwordComplexity.PasswordMinLength ? true : false);\r\n pwdHasLetter = (viewValue && (viewValue.match(/[A-Z]/g) && viewValue.match(/[A-Z]/g).length >= scope.passwordComplexity.PasswordMinUpperCase)) ? true : false;\r\n pwdHasNumber = (viewValue && (viewValue.match(/\\d/g) && viewValue.match(/\\d/g).length >= scope.passwordComplexity.PasswordMinNumbers)) ? true : false;\r\n pwdHasSpecial = (viewValue && (viewValue.match(/[^a-zA-Z0-9]/g) && viewValue.match(/[^a-zA-Z0-9]/g).length >= scope.passwordComplexity.PasswordMinUpperCase)) ? true : false;\r\n\r\n } else\r\n {\r\n pwdValidLength = (viewValue && viewValue.length >= 7 ? true : false);\r\n pwdHasLetter = (viewValue && /[A-Z]/.test(viewValue)) ? true : false;\r\n pwdHasNumber = (viewValue && /\\d/.test(viewValue)) ? true : false;\r\n pwdHasSpecial = (viewValue && /[^a-zA-Z0-9]/.test(viewValue)) ? true : false;\r\n }\r\n\r\n var score = +(viewValue.length) +\r\n (/[A-Z]/.test(viewValue) ? 1 : 0 ) +\r\n (/[a-z]/.test(viewValue) ? 1 : 0 ) +\r\n (/\\d/.test(viewValue) ? 1 : 0) +\r\n (/[^a-zA-Z0-9]/.test(viewValue) ? 1 : 0);\r\n\r\n var total = viewValue.length > 7 ? viewValue.length + 4 : 11;\r\n scope.passwordMeterScore = score / total;\r\n\r\n if (pwdValidLength && pwdHasLetter && pwdHasNumber && pwdHasSpecial)\r\n {\r\n ctrl.$setValidity('pwd', true);\r\n } else\r\n {\r\n ctrl.$setValidity('pwd', false);\r\n }\r\n return viewValue;\r\n });\r\n }\r\n };\r\n }])\r\n .directive('match', ['$parse', function ($parse)\r\n {\r\n return {\r\n require: 'ngModel',\r\n restrict: 'A',\r\n link: function (scope, elem, attrs, ctrl)\r\n {\r\n scope.$watch(function ()\r\n {\r\n return (ctrl.$pristine && angular.isUndefined(ctrl.$modelValue)) || $parse(attrs.match)(scope) === ctrl.$modelValue;\r\n }, function (currentValue)\r\n {\r\n ctrl.$setValidity('match', currentValue);\r\n });\r\n }\r\n };\r\n }])\r\n .directive('imageSlider', ['$interval', '$timeout', function ($interval, $timeout)\r\n {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n imageArray: '='\r\n },\r\n template: \"
    \",\r\n link: function (scope, elem, attrs, ctrl)\r\n {\r\n var start,\r\n stop,\r\n advance;\r\n\r\n // reverse thru the array and remove non-active images\r\n for (var i = scope.imageArray.length - 1; i >= 0; i--)\r\n {\r\n if (!scope.imageArray[i].Active)\r\n scope.imageArray.splice(i, 1);\r\n }\r\n\r\n scope.slider = {\"index\": 0};\r\n\r\n start = function ()\r\n {\r\n if (advance)\r\n return;\r\n\r\n advance = $interval(function ()\r\n {\r\n if (scope.slider.index === scope.imageArray.length - 1)\r\n scope.slider.index = 0;\r\n else\r\n ++scope.slider.index;\r\n }, 7000);\r\n };\r\n\r\n start();\r\n\r\n stop = function ()\r\n {\r\n if (advance)\r\n {\r\n $interval.cancel(advance);\r\n advance = undefined;\r\n }\r\n };\r\n\r\n scope.getPrevImage = function (index)\r\n {\r\n scope.pauseAutoAdvance();\r\n if (index === 0)\r\n scope.slider.index = scope.imageArray.length - 1;\r\n else\r\n scope.slider.index = index - 1;\r\n };\r\n\r\n scope.getNextImage = function (index)\r\n {\r\n scope.pauseAutoAdvance();\r\n if (index === scope.imageArray.length - 1)\r\n scope.slider.index = 0;\r\n else\r\n scope.slider.index = index + 1;\r\n };\r\n\r\n scope.pauseAutoAdvance = function ()\r\n {\r\n if (advance)\r\n {\r\n stop();\r\n $timeout(start, 20000);\r\n }\r\n };\r\n\r\n scope.$on('$destroy', function ()\r\n {\r\n stop();\r\n }\r\n );\r\n\r\n }\r\n };\r\n }])\r\n .directive('alphaNumeric', function ()\r\n {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, modelCtrl)\r\n {\r\n modelCtrl.$parsers.push(function (inputValue)\r\n {\r\n // this next if is necessary for when using ng-required on your input.\r\n // In such cases, when a letter is typed first, this parser will be called\r\n // again, and the 2nd time, the value will be undefined\r\n if (inputValue === undefined) return '';\r\n var transformedInput = attrs.alphaNumeric === '0' ? inputValue.replace(/[^0-9]/g, '') : inputValue.replace(/[^a-zA-Z0-9]/g, '');\r\n if (transformedInput !== inputValue)\r\n {\r\n modelCtrl.$setViewValue(transformedInput);\r\n modelCtrl.$render();\r\n }\r\n\r\n return transformedInput;\r\n });\r\n }\r\n };\r\n })\r\n .directive('autoresize', function ($window)\r\n {\r\n return function ($scope)\r\n {\r\n $scope.initializeWindowSize = function ()\r\n {\r\n $scope.maxHeight = Math.max(\r\n document.body.scrollHeight, document.documentElement.scrollHeight,\r\n document.body.offsetHeight, document.documentElement.offsetHeight,\r\n document.body.clientHeight, document.documentElement.clientHeight,\r\n window.innerHeight\r\n );\r\n $scope.windowHeight = $window.innerHeight;\r\n return $scope.windowWidth = $window.innerWidth;\r\n };\r\n $scope.initializeWindowSize();\r\n $scope.$watch('__height', function (newHeight, oldHeight)\r\n {\r\n $scope.initializeWindowSize();\r\n });\r\n return angular.element($window).bind('resize', function ()\r\n {\r\n $scope.initializeWindowSize();\r\n return $scope.$apply();\r\n });\r\n };\r\n })\r\n .directive('customContent', function ($compile)\r\n {\r\n return function (scope, el, attrs)\r\n {\r\n el.replaceWith($compile(attrs.html)(scope));\r\n };\r\n })\r\n .directive('onCloseFn', function ()\r\n {\r\n /*\r\n on-close-fn=\"myClosingActions()\"\r\n on-close-message='Thanks for visiting out site.'\r\n\r\n $scope.myClosingActions returns: true to display the stock browser 'Leaving Page' with your message,\r\n false displays nothing\r\n */\r\n return {\r\n scope: {\r\n onCloseFn: '&',\r\n onCloseMessage: '@'\r\n },\r\n link: function ($scope, elem, attrs)\r\n {\r\n window.onbeforeunload = function ()\r\n {\r\n if ($scope.onCloseFn())\r\n {\r\n return $scope.onCloseMessage || ' ';\r\n }\r\n };\r\n\r\n $scope.$on('$destroy', function ()\r\n {\r\n window.onbeforeunload = null;\r\n });\r\n }\r\n };\r\n })\r\n .directive('onLeaveFn', function ()\r\n {\r\n /*\r\n on-leave-fn=\"myClosingActions()\"\r\n on-leave-message='You have unsaved changes. Leaving the page will result in data lose.'\r\n\r\n $scope.myClosingActions returns: true to display the stock browser 'Leaving Page' with your message,\r\n false displays nothing\r\n */\r\n return {\r\n scope: {\r\n onLeaveIfFn: '&',\r\n onLeaveMessage: '@'\r\n },\r\n link: function ($scope, elem, attrs)\r\n {\r\n\r\n var $locationChangeStartUnbind = $scope.$on('$locationChangeStart', function (event, next, current)\r\n {\r\n if ($scope.onLeaveIfFn())\r\n {\r\n if (!confirm($scope.onLeaveMessage || 'Leave this page?'))\r\n {\r\n event.preventDefault();\r\n }\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', function ()\r\n {\r\n $locationChangeStartUnbind();\r\n });\r\n }\r\n };\r\n })\r\n .directive('promptToSave', ['$timeout', function ($timeout)\r\n {\r\n return {\r\n link: function ($scope, elem, attrs, ctrl)\r\n {\r\n var menu = $scope.locationInfo.menuLocation,\r\n subMenu = $scope.locationInfo.subMenuLocation,\r\n sideMenu = $scope.locationInfo.sideMenuData.subMenu;\r\n\r\n $scope.$cancelPromptToSave = $scope.$on('$locationChangeStart', function (event, next, current)\r\n {\r\n var result = elem.find(\".ng-dirty:not(form)\").length + elem.find(\".k-dirty-cell\").length + elem.find(\".k-dirty\").length;\r\n\r\n if (result > 0)\r\n {\r\n var confirmPopUpText = \"This page may have unsaved changes.\\n\\nContinue without saving?\";\r\n if ($scope.localizationFilesInitialized)\r\n {\r\n var localizedString = $scope.pnLocalizationCtrl.localizations.getCachedLocalizationsContainer(\"AppLocalization\");\r\n confirmPopUpText = localizedString.stringFromCharacterEntity(localizedString.getLocalizedString(\"UnsavedChanges\") + \"\\n\\n\" + localizedString.getLocalizedString(\"ContinueWithoutSaving\"));\r\n }\r\n\r\n var response = confirm(confirmPopUpText);\r\n\r\n if (!response)\r\n {\r\n event.preventDefault();\r\n $scope.locationInfo.menuLocation = menu;\r\n $scope.locationInfo.subMenuLocation = subMenu;\r\n if ($scope.locationInfo.sideMenuData.pendingNav)\r\n $timeout.cancel($scope.locationInfo.sideMenuData.pendingNav);\r\n $scope.locationInfo.sideMenuData.subMenu = sideMenu;\r\n }\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', function ()\r\n {\r\n $scope.$cancelPromptToSave();\r\n });\r\n }\r\n };\r\n }])\r\n .directive('processingOverlay', function ($rootScope, $window, $timeout)\r\n {\r\n return {\r\n restrict: 'EA',\r\n replace: true,\r\n link: function (scope, element, attrs)\r\n {\r\n var overlayContainer = document.getElementById('processingOverlay');\r\n overlayContainer.style.width = '994px';\r\n\r\n var mainContent = document.getElementsByClassName(\"main-content\")[0];\r\n\r\n $rootScope.$watch('mainContent.clientHeight', function ()\r\n {\r\n setHeight();\r\n });\r\n\r\n $rootScope.$watch('showLoader', function (show)\r\n {\r\n if (show)\r\n {\r\n overlayContainer.style.display = 'block';\r\n $timeout(function ()\r\n {\r\n setHeight();\r\n });\r\n }\r\n else\r\n {\r\n overlayContainer.style.display = 'none';\r\n }\r\n });\r\n\r\n function setHeight()\r\n {\r\n $(\"#processingOverlay\").height(mainContent.clientHeight);\r\n }\r\n },\r\n template: '
    '\r\n\r\n\r\n };\r\n })\r\n .directive('postRender', ['$timeout', function ($timeout) {\r\n // Use this directive when you need to reliably call a function after the element renders\r\n return {\r\n scope: {\r\n postRender: '&'\r\n },\r\n restrict: 'A',\r\n terminal: true,\r\n transclude: true,\r\n link: function (scope, element, attrs) {\r\n $timeout(scope.postRender, 0);\r\n }\r\n };\r\n }])\r\n;","\r\nangular.module('pdi.extensions', [])\r\n .factory('dateTimeFormatPatterns', function() {\r\n 'use strict';\r\n\r\n function formatForCulture(type, formatType) {\r\n\r\n var formatStr = '';\r\n\r\n if (formatType === 1) //kendo\r\n {\r\n if (type === 0) { //date\r\n\r\n formatStr = \"mm/dd/yyyy\";\r\n\r\n } else if (type === 1) { //time\r\n\r\n formatStr = \"hh:mm t\";\r\n\r\n } else { //date and time\r\n\r\n formatStr = \"mm/dd/yyyy hh:mm t\";\r\n }\r\n } else if (formatType === 2) { //input mask\r\n if (type === 0) { //date\r\n\r\n formatStr = \"m/d/yyyy\";\r\n\r\n } else if (type === 1) { //time\r\n\r\n formatStr = \"hh:mm t\";\r\n\r\n } else { //date and time\r\n\r\n formatStr = \"datetime12us\";\r\n }\r\n } else {\r\n if (type === 0) { //date\r\n\r\n formatStr = \"MM/dd/yyyy\";\r\n\r\n } else if (type === 1) { //time\r\n\r\n formatStr = \"HH:mm a\";\r\n\r\n } else { //date and time\r\n\r\n formatStr = \"MM/dd/yyyy hh:mm a\";\r\n }\r\n\r\n }\r\n\r\n return formatStr;\r\n }\r\n\r\n return {\r\n kendoDateFormat: formatForCulture(0, 1),\r\n kendoTimeFormat: formatForCulture(1, 1),\r\n kendoDateTimeFormat: formatForCulture(2, 1),\r\n inputMaskDateFormat: formatForCulture(0, 2),\r\n inputMaskTimeFormat: formatForCulture(1, 2),\r\n inputMaskDateTimeFormat: formatForCulture(2, 2),\r\n dateFormat: formatForCulture(0, 0),\r\n timeFormat: formatForCulture(1, 0),\r\n dateTimeFormat: formatForCulture(2,0)\r\n };\r\n })\r\n\r\n .directive('kendoDatePicker', [\r\n '$timeout', 'dateTimeFormatPatterns', function($timeout, dateTimeFormatPatterns) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n require: '?ngModel',\r\n link: function(scope, element, attrs, ctrl) {\r\n\r\n var ntbCtrl;\r\n\r\n $timeout(function() {\r\n ntbCtrl = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n if (ntbCtrl !== undefined) {\r\n ntbCtrl.format = dateTimeFormatPatterns.kendoDateFormat;\r\n $(element).inputmask(dateTimeFormatPatterns.inputMaskDateFormat, { clearMaskOnLostFocus: false });\r\n }\r\n\r\n },300);\r\n\r\n }\r\n };\r\n\r\n }\r\n ])\r\n\r\n .directive('kendoDateTimePicker', [\r\n '$timeout', 'dateTimeFormatPatterns', function($timeout, dateTimeFormatPatterns) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n require: '?ngModel',\r\n link: function(scope, element, attrs, ctrl) {\r\n\r\n var ntbCtrl;\r\n\r\n $timeout(function() {\r\n ntbCtrl = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n if (ntbCtrl !== undefined) {\r\n ntbCtrl.format = dateTimeFormatPatterns.kendoDateTimeFormat;\r\n $(element).inputmask(dateTimeFormatPatterns.inputMaskDateTimeFormat, { clearMaskOnLostFocus: false });\r\n }\r\n },300);\r\n\r\n }\r\n };\r\n\r\n }\r\n ])\r\n\r\n .directive('kendoTimePicker', [\r\n '$timeout', 'dateTimeFormatPatterns', function($timeout, dateTimeFormatPatterns) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n require: '?ngModel',\r\n link: function(scope, element, attrs, ctrl) {\r\n\r\n var ntbCtrl;\r\n\r\n $timeout(function() {\r\n ntbCtrl = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n if (ntbCtrl !== undefined) {\r\n ntbCtrl.format = dateTimeFormatPatterns.kendoTimeFormat;\r\n $(element).inputmask(dateTimeFormatPatterns.inputMaskTimeFormat, { clearMaskOnLostFocus: false });\r\n }\r\n },300);\r\n }\r\n };\r\n\r\n }\r\n ]);\r\n\r\n\r\n ","// pdi.ng namespace setup\r\nvar pdi = pdi || {};\r\npdi.ng = pdi.ng || {};\r\npdi.ng.validate = pdi.ng.validate || {};\r\n\r\n//***************************************************************************************\r\n// helper functions\r\n//***************************************************************************************\r\n\r\nangular.isUndefinedOrNullOrEmpty = function(val) {\r\n 'use strict';\r\n return (angular.isUndefined(val) || val === null || val === '' || val.length === 0);\r\n};\r\n\r\nString.format = function () {\r\n 'use strict';\r\n\r\n // The string containing the format items (e.g. \"{0}\")\r\n // will and always has to be the first argument.\r\n // analogous to the C# String.format function\r\n var theString = arguments[0];\r\n\r\n if (angular.isUndefined(theString)) return;\r\n\r\n // start with the second argument (i = 1)\r\n for (var i = 1; i < arguments.length; i++) {\r\n // \"gm\" = RegEx options for Global search (more than one instance)\r\n // and for Multiline search\r\n var regEx = new RegExp(\"\\\\{\" + (i - 1) + \"\\\\}\", \"gm\");\r\n theString = theString.replace(regEx, arguments[i]);\r\n }\r\n\r\n return theString;\r\n};\r\n\r\nfunction toBoolean(value) {\r\n 'use strict';\r\n if (typeof value === 'function' || angular.isUndefined(value)) {\r\n value = true;\r\n } else if (value && value.length !== 0) {\r\n var v = angular.$$lowercase(\"\" + value);\r\n value = !(v === 'f' || v === '0' || v === 'false' || v === 'no' || v === 'n' || v === '[]');\r\n } else {\r\n value = false;\r\n }\r\n return value;\r\n}\r\n\r\npdi.ng.validate.PdiValidation =\r\n function (validation, parms) {\r\n 'use strict';\r\n return function() {\r\n return {\r\n name: validation.name,\r\n validatorParms: parms || {},\r\n validationMessage: validation.validationMessage || 'Error: Validation message is not defined for ' + validation.name,\r\n validatorError: validation.validatorError,\r\n validationMessageWrn: validation.validationMessageWrn || 'Error: Validation message is not defined for ' + validation.name,\r\n validatorWarning: validation.validatorWarning,\r\n executionExplicit: validation.executionExplicit || true // if true then the validation is not executed on model value changed and must be explicitly executed through 'executeValidations' broadcast\r\n };\r\n };\r\n };\r\n\r\n//validation UI default functions\r\npdi.ng.validate.processElementErrorNotification = function(validationAttr, hasError, element, attrs) {\r\n 'use strict';\r\n\r\n if (attrs.ngModel === undefined) { return; }\r\n\r\n var propertyName = attrs.ngModel.split('.').join('-');\r\n\r\n var validationValidationMsg = $('#' + validationAttr + '-' + propertyName);\r\n\r\n function errFocusHdlr() {\r\n $(\"#error-\" + validationAttr + \"-\" + propertyName).attr('style', 'display: inline-block !important;');\r\n }\r\n\r\n function errBlurHdlr() {\r\n $(\"#error-\" + validationAttr + \"-\" + propertyName).attr('style', 'display: none !important;');\r\n }\r\n\r\n function errClickHdlr() {\r\n $(\"#error-\" + validationAttr + \"-\" + propertyName).attr('style', 'display: inline-block !important;');\r\n\r\n function hideError() {\r\n $(\"#error-\" + validationAttr + \"-\" + propertyName).attr('style', 'display: none !important;');\r\n }\r\n\r\n setTimeout(hideError, 3000);\r\n }\r\n\r\n validationValidationMsg.toggle(hasError);\r\n\r\n var kendoDropDwnElm;\r\n var currentElement = $(element);\r\n\r\n if (hasError) {\r\n element.addClass(\"validation-error\");\r\n validationValidationMsg.attr('style', 'display: inline-block !important;');\r\n\r\n if (currentElement.data(\"kendoComboBox\")) {\r\n //var kendoDropDwnElm = angular.element(element[0].previousSibling.firstChild); // input element of kendo combobox with class k-input\r\n kendoDropDwnElm = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n kendoDropDwnElm.input.bind(\"focus\", errFocusHdlr);\r\n kendoDropDwnElm.input.bind(\"blur\", errBlurHdlr);\r\n\r\n } else if (currentElement.data(\"kendoDropDownList\")) {\r\n kendoDropDwnElm = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n kendoDropDwnElm.span.bind(\"click\", errClickHdlr);\r\n\r\n } else {\r\n element.bind(\"focus\", errFocusHdlr);\r\n element.bind(\"blur\", errBlurHdlr);\r\n }\r\n\r\n } else {\r\n\r\n element.removeClass(\"validation-error\");\r\n validationValidationMsg.attr('style', 'display: none !important;');\r\n\r\n if (currentElement.data(\"kendoComboBox\")) {\r\n\r\n kendoDropDwnElm = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n kendoDropDwnElm.input.unbind(\"focus\", errFocusHdlr);\r\n kendoDropDwnElm.input.unbind(\"blur\", errBlurHdlr);\r\n\r\n } else if (currentElement.data(\"kendoDropDownList\")) {\r\n kendoDropDwnElm = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n kendoDropDwnElm.span.unbind(\"click\", errClickHdlr);\r\n\r\n } else {\r\n element.unbind(\"focus\", errFocusHdlr);\r\n element.unbind(\"blur\", errBlurHdlr);\r\n }\r\n }\r\n\r\n return;\r\n};\r\n\r\npdi.ng.validate.processElementWarningNotification = function(validationAttr, hasWarning, element, attrs) {\r\n 'use strict';\r\n\r\n if (attrs.ngModel === undefined) { return; }\r\n\r\n var propertyName = attrs.ngModel.split('.').join('-');\r\n\r\n var validationValidationMsg = $('#' + validationAttr + '-' + propertyName + '-wrn');\r\n\r\n function wrnFocusHdlr() {\r\n $(\"#warning-\" + validationAttr + \"-\" + propertyName).attr('style', 'display: inline-block !important;');\r\n }\r\n\r\n function wrnBlurHdlr() {\r\n $(\"#warning-\" + validationAttr + \"-\" + propertyName).attr('style', 'display: none !important;');\r\n }\r\n\r\n var currentElement = $(element);\r\n\r\n if (hasWarning) {\r\n element.addClass(\"validation-warning\");\r\n validationValidationMsg.attr('style', 'display: inline-block !important;');\r\n\r\n if ((currentElement.data(\"kendoComboBox\")) || (currentElement.data(\"kendoDropDownList\"))) {\r\n var kendoDropDwnElm = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n kendoDropDwnElm.input.bind(\"focus\", wrnFocusHdlr);\r\n kendoDropDwnElm.input.bind(\"blur\", wrnBlurHdlr);\r\n } else {\r\n element.bind(\"focus\", wrnFocusHdlr);\r\n element.bind(\"blur\", wrnBlurHdlr);\r\n }\r\n\r\n\r\n } else {\r\n\r\n element.removeClass(\"validation-warning\");\r\n validationValidationMsg.attr('style', 'display: none !important;');\r\n\r\n if ((currentElement.data(\"kendoComboBox\")) || (currentElement.data(\"kendoDropDownList\"))) {\r\n var kendoDropDwnElm1 = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n kendoDropDwnElm1.input.unbind(\"focus\", wrnFocusHdlr);\r\n kendoDropDwnElm1.input.unbind(\"blur\", wrnBlurHdlr);\r\n } else {\r\n element.unbind(\"focus\", wrnFocusHdlr);\r\n element.unbind(\"blur\", wrnBlurHdlr);\r\n }\r\n }\r\n\r\n return;\r\n};\r\n\r\npdi.ng.validate.processValidationNotification = function(element, attrs, compile, scope) {\r\n 'use strict';\r\n\r\n element.removeClass(\"summaryerror\");\r\n element.removeClass(\"summarywarning\");\r\n element.removeClass(\"gridvalidationsummary\");\r\n\r\n var output = \"\";\r\n function returnOutput(){\r\n return output;\r\n }\r\n\r\n if (scope.scopeValidationErrors.length > 0) {\r\n\r\n for (var i = 0; i <= scope.scopeValidationErrors.length - 1; i++) {\r\n\r\n if (attrs.name === scope.scopeValidationErrors[i].name) {\r\n element.addClass(\"gridvalidationsummary\");\r\n element.addClass(\"summaryerror\");\r\n\r\n var validationErr = scope.scopeValidationErrors[i];\r\n output += \"
    \" + validationErr.msg + \"
    \";\r\n\r\n element.qtip({\r\n content: returnOutput(),\r\n position: {\r\n viewport: $(window),\r\n my: 'left center',\r\n at: 'top right',\r\n collision: 'fit flip',\r\n adjust: { y: 7, screen: true }\r\n },\r\n show: { delay: 0 },\r\n hide: { fixed: true },\r\n style: { classes: 'ui-tooltip-pdiError' }\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n }\r\n else if (scope.scopeValidationWarnings.length > 0) {\r\n\r\n for (var x = 0; x <= scope.scopeValidationWarnings.length - 1; x++) {\r\n\r\n if (attrs.name === scope.scopeValidationWarnings[x].name) {\r\n\r\n element.addClass(\"gridvalidationsummary\");\r\n element.addClass(\"summarywarning\");\r\n\r\n var validationWrn = scope.scopeValidationWarnings[x];\r\n output += \"
    \" + validationWrn.msg + \"
    \";\r\n\r\n element.qtip({\r\n content: returnOutput(),\r\n position: {\r\n viewport: $(window),\r\n my: 'left center',\r\n at: 'top right',\r\n collision: 'fit flip',\r\n adjust: { y: 7, screen: true }\r\n },\r\n show: { delay: 0 },\r\n hide: { fixed: true },\r\n style: { classes: 'ui-tooltip-pdiWarning' }\r\n });\r\n }\r\n }\r\n }\r\n\r\n compile(element)(scope);\r\n\r\n return;\r\n};\r\n\r\npdi.ng.validate.processValidationsSummaryNotification = function(element, attrs, compile, scope) {\r\n 'use strict';\r\n\r\n element.removeClass(\"summaryerror\");\r\n element.removeClass(\"summarywarning\");\r\n element.removeClass(\"gridvalidationsummary\");\r\n\r\n if (scope.scopeValidationErrors.length > 0) {\r\n element.addClass(\"gridvalidationsummary\");\r\n element.addClass(\"summaryerror\");\r\n\r\n element.qtip({\r\n content: function() {\r\n var output = \"\";\r\n\r\n for (var i = 0; i <= scope.scopeValidationErrors.length - 1; i++) {\r\n\r\n var validationErr = scope.scopeValidationErrors[i];\r\n\r\n output += \"
    \" + validationErr.msg + \"
    \";\r\n\r\n }\r\n\r\n return output;\r\n },\r\n position: {\r\n viewport: $(window),\r\n my: 'left center',\r\n at: 'top right',\r\n collision: 'fit flip',\r\n adjust: { y: 7, screen: true }\r\n },\r\n show: { delay: 0 },\r\n hide: { fixed: true },\r\n style: { classes: 'ui-tooltip-pdiError' }\r\n });\r\n\r\n }\r\n else if (scope.scopeValidationWarnings.length > 0) {\r\n element.addClass(\"gridvalidationsummary\");\r\n element.addClass(\"summarywarning\");\r\n\r\n element.qtip({\r\n content: function() {\r\n var output = \"\";\r\n\r\n for (var i = 0; i <= scope.scopeValidationWarnings.length - 1; i++) {\r\n\r\n var validationWrn = scope.scopeValidationWarnings[i];\r\n\r\n output += \"
    \" + validationWrn.msg + \"
    \";\r\n\r\n }\r\n\r\n return output;\r\n },\r\n position: {\r\n viewport: $(window),\r\n my: 'left center',\r\n at: 'top right',\r\n collision: 'fit flip',\r\n adjust: { y: 7, screen: true }\r\n },\r\n show: { delay: 0 },\r\n hide: { fixed: true },\r\n style: { classes: 'ui-tooltip-pdiWarning' }\r\n });\r\n }\r\n\r\n compile(element)(scope);\r\n\r\n return;\r\n};\r\n\r\npdi.ng.validate.createElementValidationMessageError = function(validationAttr, validationMsg, element, attrs, scope, compile) {\r\n 'use strict';\r\n\r\n var propertyName = attrs.ngModel.split('.').join('-');\r\n var currentElement = $(element);\r\n\r\n var validationMessageElement = angular.element(\r\n '
    ' +\r\n '
      ' +\r\n '
    • ' + validationMsg + '
    • ' +\r\n '
    ');\r\n if (currentElement.data(\"kendoComboBox\")) {\r\n element.after(validationMessageElement);\r\n } else if (currentElement.data(\"kendoDropDownList\")) {\r\n $(element[0]).parent().after(validationMessageElement);\r\n } else if (currentElement.data(\"kendoDatePicker\")) {\r\n $(element[0]).closest(\".k-datepicker\").after(validationMessageElement);\r\n } else if (currentElement.data(\"kendoDateTimePicker\")) {\r\n $(element[0]).closest(\".k-datetimepicker\").after(validationMessageElement);\r\n } else {\r\n //check to see if element has a clear button to clear contents\r\n // if so add error after clear button instead of element\r\n var clearBtnElm = element.siblings(\".clear-input-button\");\r\n if (clearBtnElm.length > 0) {\r\n clearBtnElm.after(validationMessageElement);\r\n } else {\r\n element.after(validationMessageElement);\r\n }\r\n }\r\n compile(validationMessageElement)(scope);\r\n validationMessageElement.hide();\r\n\r\n return;\r\n};\r\n\r\npdi.ng.validate.createElementValidationMessageWarning = function (validationAttr, validationMsg, element, attrs, scope, compile) {\r\n 'use strict';\r\n\r\n var propertyName = attrs.ngModel.split('.').join('-');\r\n var currentElement = $(element);\r\n\r\n var validationMessageElement = angular.element(\r\n '
    ' +\r\n '
      ' +\r\n '
    • ' + validationMsg + '
    • ' +\r\n '
    ');\r\n\r\n if (currentElement.data(\"kendoComboBox\")) {\r\n element.after(validationMessageElement);\r\n } else if (currentElement.data(\"kendoDropDownList\")) {\r\n $(element[0]).parent().after(validationMessageElement);\r\n } else if (currentElement.data(\"kendoDatePicker\")) {\r\n $(element[0]).closest(\".k-datepicker\").after(validationMessageElement);\r\n } else if (currentElement.data(\"kendoDateTimePicker\")) {\r\n $(element[0]).closest(\".k-datetimepicker\").after(validationMessageElement);\r\n } else {\r\n //check to see if element has a clear button to clear contents\r\n // if so add error after clear button instead of element\r\n var clearBtnElm = element.siblings(\".clear-input-button\");\r\n if (clearBtnElm.length > 0) {\r\n clearBtnElm.after(validationMessageElement);\r\n } else {\r\n element.after(validationMessageElement);\r\n }\r\n }\r\n compile(validationMessageElement)(scope);\r\n validationMessageElement.hide();\r\n\r\n return;\r\n};\r\n\r\npdi.ng.validate.removeElementValidationMessage = function(element, attrs, scope, compile) {\r\n 'use strict';\r\n\r\n var currentElement = $(element);\r\n\r\n if (element.hasClass('summaryerror')) {\r\n element.removeClass(\"summaryerror\");\r\n element.removeClass(\"summarywarning\");\r\n element.removeClass(\"gridvalidationsummary\");\r\n }\r\n\r\n if (currentElement.data(\"kendoDropDownList\")) {\r\n element.parent().siblings().each(function() {\r\n var $this = $(this);\r\n\r\n if ($this.hasClass('validationBar')) {\r\n $this.remove();\r\n }\r\n\r\n compile()(scope);\r\n });\r\n } else {\r\n element.parent().children().each(function() {\r\n var $this = $(this);\r\n\r\n if ($this.hasClass('validationBar')) {\r\n $this.remove();\r\n }\r\n\r\n compile()(scope);\r\n });\r\n }\r\n\r\n return;\r\n};\r\n\r\n//pdi validation defaults\r\n\r\npdi.ng.validate.requiredMsgDefault = '';\r\npdi.ng.validate.minLengthMsgDefault = '';\r\npdi.ng.validate.maxLengthMsgDefault = '';\r\npdi.ng.validate.valueRuleRngMsgDefault = '';\r\npdi.ng.validate.valueRuleGtMsgDefault = '';\r\npdi.ng.validate.valueRuleLtMsgDefault = '';\r\npdi.ng.validate.ptrnEmailMsgDefault = '';\r\n\r\nvar pdiRequiredExecutionExplicitDefault = true;\r\nvar pdiMinLengthExecutionExplicitDefault = true;\r\nvar pdiMaxLengthExecutionExplicitDefault = true;\r\nvar pdiMaxLengthEnforceMaxConstraintDefault = false;\r\nvar pdiValueRuleRangeExecutionExplicitDefault = true;\r\nvar pdiValueRuleGreaterThanExecutionExplicitDefault = true;\r\nvar pdiValueRuleLessThanExecutionExplicitDefault = true;\r\nvar pdiEmailValidataionExecutionExplicitDefault = true;\r\n\r\n\r\nfunction evaluateIfConditions(ifExpr, scope) {\r\n 'use strict';\r\n return toBoolean(scope.$eval(ifExpr));\r\n}\r\n\r\nangular.module('pdi.validate', [])\r\n .service('validatorSvc', [\r\n '$rootScope', function($rootScope) {\r\n\r\n $rootScope.scopesToValidate = [];\r\n $rootScope.formModelWatchers = [];\r\n\r\n function executeValidationsForScope(scope) {\r\n 'use strict';\r\n\r\n for (var cs = scope.$$childHead; cs; cs=cs.$$nextSibling) {\r\n executeValidationsForScope(cs);\r\n }\r\n\r\n if (angular.isUndefinedOrNullOrEmpty(scope.scopeValidations)) {\r\n return true;\r\n }\r\n\r\n // broadcast event for elements to clear their errors/warnings and notification UI\r\n scope.$broadcast('clearElementValidationNotifications', {});\r\n scope.$broadcast('clearSummaryValidationNotifications', {});\r\n\r\n var validation;\r\n\r\n //clear arrays\r\n scope.scopeValidationErrors = [];\r\n scope.scopeValidationWarnings.length = [];\r\n\r\n var hadError = false;\r\n var validatorResult = {};\r\n\r\n for (var i = 0; i <= scope.scopeValidations.length - 1; i++) {\r\n validation = scope.scopeValidations[i];\r\n\r\n hadError = false;\r\n\r\n // check to see if element already has an error if so don't eval addition element validations\r\n if (validation.attrs.errors.length === 0) {\r\n //validate errors\r\n validatorResult = validation.validator().validateErrors();\r\n\r\n if (validatorResult !== undefined) {\r\n if (validatorResult.hasError) {\r\n scope.scopeValidationErrors.push(validatorResult);\r\n validation.attrs.errors.push(validatorResult);\r\n\r\n if (validation.attrs.ngModelCtrl.$setValidity !== undefined) {\r\n validation.attrs.ngModelCtrl.$setValidity(validatorResult.name, false);\r\n }\r\n\r\n hadError = true;\r\n }\r\n }\r\n\r\n if (!hadError) {\r\n validatorResult = validation.validator().validateWarnings();\r\n\r\n if (validatorResult !== undefined) {\r\n if (validatorResult.hasWarning) {\r\n scope.scopeValidationWarnings.push(validatorResult);\r\n validation.attrs.warnings.push(validatorResult);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n scope.$broadcast('processElementValidationNotifications', {});\r\n scope.$broadcast('processSummaryValidationNotifications', {});\r\n\r\n return (scope.scopeValidationErrors.length === 0);\r\n }\r\n\r\n return {\r\n executeValidations: function() {\r\n 'use strict';\r\n\r\n var isValid = true;\r\n\r\n for (var i = 0; i <= $rootScope.scopesToValidate.length - 1; i++) {\r\n var validatorResult = executeValidationsForScope($rootScope.scopesToValidate[i].scope);\r\n isValid = isValid && validatorResult;\r\n }\r\n\r\n return isValid;\r\n },\r\n executeValidationsForScope: executeValidationsForScope,\r\n addScopeToValidate: function(scope, view) {\r\n 'use strict';\r\n\r\n var addScope = true;\r\n\r\n //check to see if scope already added to validate\r\n for (var i = 0; i <= $rootScope.scopesToValidate.length - 1; i++) {\r\n if ($rootScope.scopesToValidate[i].scopeID === scope.$id) {\r\n addScope = false;\r\n break;\r\n }\r\n }\r\n\r\n if (addScope) {\r\n $rootScope.scopesToValidate.push({ scopeID: scope.$id, scope: scope, view: view });\r\n\r\n for (var cs = scope.$$childHead; cs; cs=cs.$$nextSibling) {\r\n $rootScope.scopesToValidate.push({ scopeID: cs.$id, scope: cs, view: view });\r\n }\r\n }\r\n },\r\n clearValidationScopes: function() {\r\n 'use strict';\r\n $rootScope.scopesToValidate = [];\r\n// $rootScope.formModelWatchers = [];\r\n },\r\n clearAllValidations: function() {\r\n $rootScope.$broadcast('clearElementValidationNotifications', {});\r\n }\r\n };\r\n }\r\n ])\r\n\r\n .directive('pdiValidations', ['validatorSvc', '$compile', '$timeout', function (validatorSvc, $compile, $timeout) {\r\n\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function(scope, element, attrs, ctrl) {\r\n 'use strict';\r\n if ((!ctrl) || ( attrs.pdiValidations==='')) { return; }\r\n\r\n attrs.ngModelCtrl = ctrl;\r\n\r\n var model = attrs.ngModel;\r\n\r\n var pdivalidation = scope.$eval(attrs.pdiValidations);\r\n\r\n var validatorFn = function() {\r\n\r\n return {\r\n validateErrors: function() {\r\n\r\n if (pdivalidation.validatorError === undefined) { return; }\r\n\r\n var validatorParms = pdivalidation.validatorParms;\r\n\r\n var elementValue = scope.$eval(model); //element.val().trimRight();\r\n var expression = pdivalidation.validatorError(elementValue, validatorParms);\r\n\r\n if (angular.isObject(expression) && angular.isFunction(expression.then)) {\r\n // expression is a promise\r\n var deferred = $q.defer();\r\n expression.then(function() {\r\n deferred.resolve(\"\");\r\n }, function() {\r\n var error = { name: pdivalidation.name, model: model, msg: pdivalidation.validationMessage, hasError: true };\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n } else if (!expression) {\r\n // expression false\r\n return { name: pdivalidation.name, model: model, msg: pdivalidation.validationMessage, hasError: true };\r\n }\r\n },\r\n validateWarnings: function() {\r\n\r\n if (pdivalidation.validatorWarning === undefined) { return; }\r\n\r\n var validatorParms = pdivalidation.validatorParms;\r\n\r\n var elementValue = scope.$eval(model); //element.val().trimRight();\r\n var expression = pdivalidation.validatorWarning(elementValue, validatorParms);\r\n\r\n\r\n if (!expression) {\r\n return { name: pdivalidation.name, model: model, msg: pdivalidation.validationMessageWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: pdivalidation.name, model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n /*angular.forEach(attrs.pdiValidations, function(index) {\r\n\r\n var validateErrors = (attrs.pdiValidations[index].validatorError) ? true : false;\r\n var validateWarnings = (attrs.pdiValidations[index].validatorWarning) ? true : false;\r\n\r\n var validatorFn = function() {\r\n\r\n return {\r\n validateErrors: function() {\r\n\r\n if (!validateErrors) return;\r\n\r\n var elementValue = element.val().trimRight();\r\n var expression = pdivalidation.validatorError(elementValue);\r\n\r\n if (!expression) {\r\n return { name: pdivalidation.name + key, model: model, msg: pdivalidation.validationMessage, hasError: true };\r\n }\r\n },\r\n validateWarnings: function() {\r\n\r\n if (!validateWarnings) return;\r\n\r\n var elementValue = element.val().trimRight();\r\n var expression = pdivalidation.validatorWarning(elementValue);\r\n\r\n if (angular.isObject(expression) && angular.isFunction(expression.then)) {\r\n // expression is a promise\r\n expression.then(function() {\r\n }, function() {\r\n attrs.warnings.push({ name: pdivalidation.name + key, model: model, msg: pdivalidation.validationMessageWrn });\r\n });\r\n return;\r\n } else if (!expression) {\r\n // expression false\r\n attrs.warnings.push({ name: pdivalidation.name + key, model: model, msg: pdivalidation.validationMessageWrn });\r\n return;\r\n }\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: pdivalidation.name + key, model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n //attrs.validations.push(({ name: pdivalidation.name + key, model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 }));\r\n\r\n });*/\r\n },\r\n controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) {\r\n 'use strict';\r\n\r\n $scope.scopeValidations = $scope.scopeValidations || [];\r\n $scope.scopeValidationErrors = $scope.scopeValidationErrors || [];\r\n $scope.scopeValidationWarnings = $scope.scopeValidationWarnings || [];\r\n\r\n validatorSvc.addScopeToValidate($scope);\r\n\r\n $attrs.validations = [];\r\n $attrs.errors = [];\r\n $attrs.warnings = [];\r\n\r\n $attrs.ngModelCtrl = {};\r\n\r\n $attrs.hasWarnings = false;\r\n\r\n this.addValidation = function(validation) {\r\n $attrs.validations.push(validation);\r\n };\r\n\r\n $scope.$on('executeValidationsForScope', function () {\r\n validatorSvc.executeValidationsForScope($scope);\r\n });\r\n\r\n //used to forced process the error/waring and display the notification UI for the element'\r\n $scope.$on('processElementValidationNotifications', function () {\r\n if (!angular.isUndefined($attrs.showValidationNotification) && !$scope.$eval($attrs.showValidationNotification)) { return; }\r\n\r\n if ($attrs.errors.length > 0) {\r\n pdi.ng.validate.createElementValidationMessageError($attrs.errors[0].name, $attrs.errors[0].msg, $element, $attrs, $scope, $compile);\r\n pdi.ng.validate.processElementErrorNotification($attrs.errors[0].name, true, $element, $attrs);\r\n } else if ($attrs.warnings.length > 0) {\r\n pdi.ng.validate.createElementValidationMessageWarning($attrs.warnings[0].name, $attrs.warnings[0].msg, $element, $attrs, $scope, $compile);\r\n pdi.ng.validate.processElementWarningNotification($attrs.warnings[0].name, true, $element, $attrs);\r\n }\r\n });\r\n\r\n //used to forced clear element error/warning and clear the notification UI'\r\n $scope.$on('clearElementValidationNotifications', function () {\r\n\r\n pdi.ng.validate.removeElementValidationMessage($element, $attrs, $scope, $compile);\r\n\r\n if ($attrs.errors.length > 0) {\r\n pdi.ng.validate.processElementErrorNotification($attrs.errors[0].name, false, $element, $attrs);\r\n }\r\n\r\n if ($attrs.warnings.length > 0) {\r\n pdi.ng.validate.processElementWarningNotification($attrs.warnings[0].name, false, $element, $attrs);\r\n }\r\n\r\n //clear element arrays\r\n $attrs.errors.length = 0;\r\n $attrs.warnings.length = 0;\r\n });\r\n }]\r\n };\r\n }\r\n ])\r\n\r\n .directive('pdiValidation', ['$rootScope', 'validatorSvc', '$compile', '$timeout', function ($rootScope, validatorSvc, $compile, $timeout) {\r\n\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n terminal: true,\r\n template: '
    ',\r\n link: function (scope, element, attrs) {\r\n 'use strict';\r\n\r\n if (attrs.errorValidatorFn !== undefined || attrs.warningValidatorFn !== undefined) {\r\n\r\n var ctrlIndex = scope.scopeValidations.length + 1;\r\n\r\n attrs.name = 'pdiValidation' + ctrlIndex.toString();\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n\r\n if (attrs.errorValidatorFn === undefined) return;\r\n\r\n var validatorResult = scope.$eval(attrs.errorValidatorFn);\r\n\r\n if (validatorResult) { //has errors\r\n return { name: 'pdiValidation' + ctrlIndex.toString(), msg: attrs.validationErrorMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n\r\n if (attrs.warningValidatorFn === undefined) return;\r\n\r\n var validatorResult = attrs.warningValidatorFn();\r\n\r\n if (validatorResult) { //has warnings\r\n return { name: 'pdiValidation' + ctrlIndex.toString(), msg: attrs.validationWarningMsg, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiValidation' + ctrlIndex.toString(), element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n }\r\n },\r\n controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) {\r\n 'use strict';\r\n\r\n $scope.scopeValidations = $scope.scopeValidations || [];\r\n $scope.scopeValidationErrors = $scope.scopeValidationErrors || [];\r\n $scope.scopeValidationWarnings = $scope.scopeValidationWarnings || [];\r\n\r\n validatorSvc.addScopeToValidate($scope);\r\n\r\n $attrs.validations = [];\r\n $attrs.errors = [];\r\n $attrs.warnings = [];\r\n\r\n $attrs.ngModelCtrl = {};\r\n\r\n $attrs.hasWarnings = false;\r\n\r\n //used to forced process the error/waring and display the notification UI for the element'\r\n $scope.$on('processElementValidationNotifications', function () {\r\n pdi.ng.validate.processValidationNotification($element, $attrs, $compile, $scope);\r\n });\r\n\r\n //used to forced clear element error/warning and clear the notification UI'\r\n $scope.$on('clearElementValidationNotifications', function () {\r\n\r\n pdi.ng.validate.processValidationNotification($element, $attrs, $compile, $scope);\r\n pdi.ng.validate.removeElementValidationMessage($element, $attrs, $scope, $compile);\r\n\r\n //clear element arrays\r\n $attrs.errors.length = 0;\r\n $attrs.warnings.length = 0;\r\n });\r\n }]\r\n };\r\n }])\r\n\r\n .directive('pdiValidationsSummary', ['$rootScope', 'validatorSvc', '$compile', '$timeout', function ($rootScope, validatorSvc, $compile, $timeout) {\r\n\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n terminal: true,\r\n template: '
    ',\r\n link: function (scope, element, attrs) {\r\n 'use strict';\r\n\r\n if (attrs.data !== undefined && attrs.formModel !== undefined) {\r\n var newScope = $rootScope.$new();\r\n\r\n var appHtml = $('[ng-controller]').html();\r\n var ele = angular.element(appHtml);\r\n\r\n newScope[attrs.formModel] = scope.$eval(attrs.data);\r\n\r\n var view = $compile(ele)(newScope);\r\n\r\n validatorSvc.addScopeToValidate(newScope, view);\r\n\r\n //used to forced process the error/waring and display the notification UI for the element'\r\n newScope.$on('processSummaryValidationNotifications', function () {\r\n pdi.ng.validate.processValidationsSummaryNotification(element, attrs, $compile, newScope);\r\n });\r\n\r\n //used to forced clear element error/warning and clear the notification UI'\r\n newScope.$on('clearSummaryValidationNotifications', function () {\r\n pdi.ng.validate.processValidationsSummaryNotification(element, attrs, $compile, newScope);\r\n });\r\n\r\n var addFormModelWatcher = true;\r\n\r\n //check to see if form model already added to array\r\n for (var i = 0; i <= $rootScope.formModelWatchers.length - 1; i++) {\r\n if ($rootScope.formModelWatchers[i].formModel === attrs.formModel) {\r\n addFormModelWatcher = false;\r\n break;\r\n }\r\n }\r\n\r\n if (addFormModelWatcher) {\r\n\r\n var watchUnBinder =$rootScope.$watch(function () {\r\n return scope.$eval(attrs.formModel);\r\n }, function (newValue, oldValue) {\r\n if (oldValue === undefined) {\r\n return;\r\n }\r\n\r\n $timeout(function() {\r\n scope.$parent.$broadcast('clearElementValidationNotifications', {});\r\n validatorSvc.executeValidations();\r\n scope.$parent.$broadcast('processElementValidationNotifications', {});\r\n });\r\n });\r\n\r\n $rootScope.formModelWatchers.push({ formModel: attrs.formModel, unBinderFn: watchUnBinder });\r\n }\r\n }\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiRequired', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // required-validation-msg\r\n // required-execution-explicit\r\n // required-if-expr\r\n // required-validation-msg-wrn\r\n // required-if-expr-wrn\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.requiredValidationMsg) || ((!attrs.requiredValidationMsg) && (!attrs.requiredValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.requiredValidationMsgWrn) ? true : false;\r\n\r\n var requiredValidationMsg = attrs.requiredValidationMsg || pdi.ng.validate.requiredMsgDefault || 'required validation undefined';\r\n var requiredValidationMsgWrn = attrs.requiredValidationMsgWrn;\r\n var requiredExecutionExplicit = attrs.requiredExecutionExplicit || pdiRequiredExecutionExplicitDefault;\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n\r\n if (attrs.disabled) { return; } // if element is disabled then don't enforce validations on the element\r\n\r\n if (!validateErrors) return;\r\n\r\n if (evaluateIfConditions(attrs.requiredIfExpr, scope) &&\r\n (ctrl.$isEmpty(ctrl.$viewValue))) {\r\n\r\n return { name: 'pdiRequired', model:model, msg: requiredValidationMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n\r\n if (!validateWarnings) return;\r\n\r\n if (evaluateIfConditions(attrs.requiredIfExprWrn, scope) &&\r\n (ctrl.$isEmpty(ctrl.$viewValue))) {\r\n\r\n return { name: 'pdiRequired', model: model, msg: requiredValidationMsgWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiRequired', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiMinlength', ['validatorSvc', function (validatorSvc) {\r\n\r\n //usage\r\n //minlengthValidationMsg: '=',\r\n // minlengthExecutionExplicit: '=',\r\n // minlengthIfExpr: '@',\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.minlengthValidationMsg) || ((!attrs.minlengthValidationMsg) && (!attrs.minlengthValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.minlengthValidationMsgWrn) ? true : false;\r\n\r\n var minlengthValidationMsg = attrs.minlengthValidationMsg || 'minLength validation undefined';\r\n var minlengthValidationMsgWrn = attrs.minlengthValidationMsgWrn;\r\n var minlengthExecutionExplicit = attrs.minlengthExecutionExplicit || pdiMinLengthExecutionExplicitDefault;\r\n\r\n minlengthValidationMsg = String.format(minlengthValidationMsg, attrs.pdiMinlength);\r\n minlengthValidationMsgWrn = String.format(minlengthValidationMsgWrn, attrs.pdiMinlength);\r\n\r\n var validatorFn = function() {\r\n return {\r\n validateErrors: function() {\r\n\r\n if (!validateErrors) return;\r\n\r\n if (evaluateIfConditions(attrs.minlengthIfExpr, scope) &&\r\n (ctrl.$isEmpty(ctrl.$viewValue) || ctrl.$viewValue.length < attrs.pdiMinlength)) {\r\n\r\n return { name: 'pdiMinlength', model: model, msg: minlengthValidationMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function() {\r\n\r\n if (!validateWarnings) return;\r\n\r\n if (evaluateIfConditions(attrs.minlengthIfExprWrn, scope) &&\r\n (ctrl.$isEmpty(ctrl.$viewValue) || ctrl.$viewValue.length < attrs.pdiMinlength)) {\r\n\r\n return { name: 'pdiMinlength', model: model, msg: minlengthValidationMsgWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiMinlength', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiMaxlength', ['validatorSvc', function (validatorSvc) {\r\n\r\n //usage\r\n //maxlengthValidationMsg: '=',\r\n // maxlengthExecutionExplicit: '=',\r\n // maxlengthIfExpr: '@',\r\n // enforceMaxConstraint: '='\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function(scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.maxlengthValidationMsg) || ((!attrs.maxlengthValidationMsg) && (!attrs.maxlengthValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.maxlengthValidationMsgWrn) ? true : false;\r\n\r\n var enforceMaxConstraint = attrs.enforcemaxconstraint || pdiMaxLengthEnforceMaxConstraintDefault;\r\n\r\n var ifConditions = evaluateIfConditions(attrs.maxlengthIfExpr, scope);\r\n\r\n // if enforceMaxConstraint is true then the max length will be enforce through the UI by preventing\r\n // input of more that specified length and not through validation.\r\n if (enforceMaxConstraint && ifConditions) {\r\n element.bind('keypress', function(event) {\r\n // Once the limit has been met or exceeded, prevent all keypresses from working\r\n if (element.val().length >= attrs.pdiMaxlength) {\r\n // Except backspace\r\n if (event.keyCode !== 8) {\r\n event.preventDefault();\r\n }\r\n }\r\n });\r\n } else {\r\n\r\n var maxlengthValidationMsg = attrs.maxlengthValidationMsg || 'maxLength validation undefined';\r\n var maxlengthValidationMsgWrn = attrs.maxlengthValidationMsgWrn;\r\n var maxlengthExecutionExplicit = attrs.maxlengthExecutionExplicit || pdiMaxLengthExecutionExplicitDefault;\r\n\r\n maxlengthValidationMsg = String.format(maxlengthValidationMsg, attrs.pdiMaxlength);\r\n maxlengthValidationMsgWrn = String.format(maxlengthValidationMsgWrn, attrs.pdiMaxlength);\r\n\r\n var validatorFn = function() {\r\n return {\r\n validateErrors: function() {\r\n\r\n if (!validateErrors) return;\r\n\r\n if (ifConditions && (ctrl.$viewValue.length > attrs.pdiMaxlength)) {\r\n\r\n return { name: 'pdiMaxlength', model: model, msg: maxlengthValidationMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function() {\r\n\r\n if (!validateWarnings) return;\r\n\r\n if (ifConditions && (ctrl.$viewValue.length > attrs.pdiMaxlength)) {\r\n\r\n return { name: 'pdiMaxlength', model: model, msg: maxlengthValidationMsgWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiMaxlength', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n }\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiValueruleRange', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // valuerule-rng-validation-msg\r\n // valuerule-rng-execution-explicit\r\n // valuerule-rng-if-expr\r\n // valuerule-rng-validation-msg-wrn\r\n // valuerule-rng-if-expr-wrn\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.valueruleRngValidationMsg) || ((!attrs.valueruleRngValidationMsg) && (!attrs.valueruleRngValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.valueruleRngValidationMsgWrn) ? true : false;\r\n\r\n var rangeParms = attrs.pdiValueruleRange.split(',');\r\n\r\n if (rangeParms.length !== 2) return;\r\n\r\n var lowerLimit = rangeParms[0].toNumber();\r\n var upperLimit = rangeParms[1].toNumber();\r\n\r\n var valueRuleRngValidationMsg = attrs.valueruleRngValidationMsg || 'valueRuleRng validation undefined';\r\n var valueRuleRngValidationMsgWrn = attrs.valueruleRngValidationMsgWrn;\r\n var valueRuleRngExecutionExplicit = attrs.valueruleRngExecutionExplicit || pdiValueRuleRangeExecutionExplicitDefault;\r\n\r\n valueRuleRngValidationMsg = String.format(valueRuleRngValidationMsg, lowerLimit, upperLimit);\r\n valueRuleRngValidationMsgWrn = String.format(valueRuleRngValidationMsgWrn, lowerLimit, upperLimit);\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n\r\n if (!validateErrors) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleRngIfExpr, scope) &&\r\n (ctrl.$viewValue.toNumber() < lowerLimit || ctrl.$viewValue.toNumber() > upperLimit)) {\r\n\r\n return { name: 'pdiValueruleRange', model: model, msg: valueRuleRngValidationMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n\r\n if (!validateWarnings) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleRngIfExprWrn, scope) &&\r\n (parseInt(ctrl.$viewValue, 10) < lowerLimit || parseInt(ctrl.$viewValue, 10) > upperLimit)) {\r\n\r\n return { name: 'pdiValueruleRange', model: model, msg: valueRuleRngValidationMsgWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiValueruleRange', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiValueruleGreaterthan', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // valuerule-gt-validation-msg\r\n // valuerule-gt-execution-explicit\r\n // valuerule-gt-if-expr\r\n // valuerule-gt-validation-msg-wrn\r\n // valuerule-gt-if-value-expr\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.valueruleGtValidationMsg) || ((!attrs.valueruleGtValidationMsg) && (!attrs.valueruleGtValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.valueruleGtValidationMsgWrn) ? true : false;\r\n\r\n var valueruleGtValidationMsg = attrs.valueruleGtValidationMsg || 'valueRuleGT validation undefined';\r\n var valueruleGtValidationMsgWrn = attrs.valueruleGtValidationMsgWrn;\r\n var valueRuleGtExecutionExplicit = attrs.valueruleGtExecutionExplicit || pdiValueRuleGreaterThanExecutionExplicitDefault;\r\n\r\n valueruleGtValidationMsg = String.format(valueruleGtValidationMsg, attrs.pdiValueruleGreaterthan);\r\n valueruleGtValidationMsgWrn = String.format(valueruleGtValidationMsgWrn, attrs.pdiValueruleGreaterthan);\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n\r\n if (!validateErrors) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleGtIfExpr, scope) &&\r\n (parseFloat(ctrl.$viewValue) <= attrs.pdiValueruleGreaterthan)) {\r\n\r\n return { name: 'pdiValueruleGreaterthan', model: model, msg: valueruleGtValidationMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n\r\n if (!validateWarnings) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleGtIfExprWrn, scope) &&\r\n (parseFloat(ctrl.$viewValue) <= attrs.pdiValueruleGreaterthan)) {\r\n\r\n return { name: 'pdiValueruleGreaterthan', model: model, msg: valueruleGtValidationMsgWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiValueruleGreaterthan', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiValueruleLessthan', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // valuerule-lt-validation-msg\r\n // valuerule-lt-execution-explicit\r\n // valuerule-lt-if-expr\r\n // valuerule-lt-validation-msg-wrn\r\n // valuerule-lt-if-expr-wrn\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.valueruleLtValidationMsg) || ((!attrs.valueruleLtValidationMsg) && (!attrs.valueruleLtValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.valueruleLtValidationMsgWrn) ? true : false;\r\n\r\n var valueruleLtValidationMsg = attrs.valueruleLtValidationMsg || 'valueRuleLT validation undefined';\r\n var valueruleLtValidationMsgWrn = attrs.valueruleLtValidationMsgWrn;\r\n var valueRuleLtExecutionExplicit = attrs.valueruleLtExecutionExplicit || pdiValueRuleLessThanExecutionExplicitDefault;\r\n\r\n valueruleLtValidationMsg = String.format(valueruleLtValidationMsg, attrs.pdiValueruleLessthan);\r\n valueruleLtValidationMsgWrn = String.format(valueruleLtValidationMsgWrn, attrs.pdiValueruleLessthan);\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n\r\n if (!validateErrors) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleLtIfExpr, scope) &&\r\n (parseInt(ctrl.$viewValue, 10) >= attrs.pdiValueruleLessthan)) {\r\n\r\n return { name: 'pdiValueruleLessthan', model: model, msg: valueruleLtValidationMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n\r\n if (!validateWarnings) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleLtIfExprWrn, scope) &&\r\n (parseInt(ctrl.$viewValue, 10) >= attrs.pdiValueruleLessthan)) {\r\n\r\n return { name: 'pdiValueruleLessthan', model: model, msg: valueruleLtValidationMsgWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiValueruleLessthan', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiValueIsNumeric', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // pdi-value-is-numeric\r\n // pdi-value-is-numeric-msg\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.pdiValueIsNumeric || (!attrs.pdiValueIsNumeric && !attrs.pdiValueIsNumeric)) ? true : false;\r\n var validateWarnings = true;\r\n var ptrnValidationMsg = attrs.pdiValueIsNumericMsg || 'pdiValueIsNumeric validation undefined';\r\n\r\n var validatorFn = function () {\r\n return {\r\n validateErrors: function () {\r\n if (!validateWarnings) return;\r\n\r\n if (!isNaN(ctrl.$viewValue)) {\r\n return;\r\n }\r\n\r\n return { name: 'pdiValueIsNumeric', model: model, msg: ptrnValidationMsg, hasError: true };\r\n },\r\n validateWarnings: function () {\r\n if (!validateWarnings || angular.isUndefinedOrNullOrEmpty(ctrl.$viewValue)) return;\r\n }\r\n };\r\n };\r\n scope.scopeValidations.push({ name: 'pdiValueIsNumeric', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiDateIsGreaterEqualTo', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // pdi-date-is-greater-equal-to\r\n // pdi-date-is-greater-equal-to-from-date\r\n // pdi-date-is-greater-equal-to-msg\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.pdiDateIsGreaterEqualToMsg || (!attrs.pdiDateIsGreaterEqualToMsg && !attrs.pdiDateIsGreaterEqualToMsgWrn)) ? true : false;\r\n var validateWarnings = true;\r\n var ptrnValidationMsg = attrs.pdiDateIsGreaterEqualToMsg || 'pdiDateIsGreaterEqualTo validation undefined';\r\n\r\n var validatorFn = function () {\r\n var fromDate = attrs.pdiDateIsGreaterEqualToFromDate;\r\n var thruDate = ctrl.$viewValue;\r\n\r\n return {\r\n validateErrors: function () {\r\n if (!validateWarnings) return;\r\n if (Date.parse(thruDate) >= Date.parse(fromDate)) {\r\n return;\r\n }\r\n return { name: 'pdiDateIsGreaterEqualTo', model: model, msg: ptrnValidationMsg, hasError: true };\r\n },\r\n validateWarnings: function () {\r\n if (!validateWarnings || angular.isUndefinedOrNullOrEmpty(ctrl.$viewValue)) return;\r\n }\r\n };\r\n };\r\n scope.scopeValidations.push({ name: 'pdiDateIsGreaterEqualTo', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiPatternEmail', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // ptrn-email-validation-msg\r\n // ptrn-email-execution-explicit\r\n // ptrn-email-validation-msg-wrn\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.ptrnEmailValidationMsg) || ((!attrs.ptrnEmailValidationMsg) && (!attrs.ptrnEmailValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.ptrnEmailValidationMsgWrn) ? true : false;\r\n\r\n var ptrnValidationMsg = attrs.ptrnEmailValidationMsg || 'ptrnEmail validation undefined';\r\n var ptrnValidationMsgWrn = attrs.ptrnEmailValidationMsgWrn;\r\n var ptrnExecutionExplicit = attrs.prtnEmailExecutionExplicit || pdiEmailValidataionExecutionExplicitDefault;\r\n\r\n var regExPattern = new RegExp(/^[A-Za-z0-9_\\+-]+(\\.[A-Za-z0-9_\\+-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*\\.([A-Za-z]+)$/);\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n\r\n if (!validateErrors || angular.isUndefinedOrNullOrEmpty(ctrl.$viewValue)) return;\r\n\r\n var emails = ctrl.$viewValue.split(';');\r\n\r\n // process errors on element\r\n for (var i = 0 ; i <= emails.length - 1; i++) {\r\n if (!regExPattern.test(emails[i].trim())){\r\n ptrnValidationMsg = String.format(ptrnValidationMsg, emails[i]);\r\n return { name: 'pdiPatternEmail', model: model, msg: ptrnValidationMsg, hasError: true };\r\n }\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n\r\n if (!validateWarnings || angular.isUndefinedOrNullOrEmpty(ctrl.$viewValue)) return;\r\n\r\n var emails = ctrl.$viewValue.split(';');\r\n\r\n // process errors on element\r\n for (var i = 0 ; i <= emails.length - 1; i++) {\r\n if (!regExPattern.test(emails[i])){\r\n ptrnValidationMsgWrn = String.format(ptrnValidationMsgWrn, emails[i]);\r\n\r\n return { name: 'pdiPatternEmail', model: model, msg: ptrnValidationMsgWrn, hasWarning: true };\r\n }\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiPatternEmail', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n }\r\n };\r\n }])\r\n .directive('pdiValueruleMatchElement', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // valuerule-match-element-validation-msg\r\n // valuerule-match-element-execution-explicit\r\n // valuerule-match-element-if-expr\r\n // valuerule-match-element-validation-msg-wrn\r\n // valuerule-match-element-if-expr-wrn\r\n // valuerule-ng-model-match (this is the model value to compare against)\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls, $parse) {\r\n 'use strict';\r\n\r\n if (ctrls.length !==2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n var match = attrs.valueruleNgModelMatch;\r\n\r\n var validateErrors = (attrs.valueruleMatchElementValidationMsg) || ((!attrs.valueruleMatchElementValidationMsg) && (!attrs.valueruleMatchElementValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.valueRuleMatchElementValidationMsgWrn) ? true : false;\r\n\r\n var matchElementValidationMsg = attrs.valueruleMatchElementValidationMsg || 'validation undefined';\r\n var matchElementValidationMsgWrn = attrs.valueruleMatchElementValidationMsgWrn;\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n if (!validateErrors) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleMatchElementIfExpr, scope)) {\r\n var matchValue = scope.$eval(match);\r\n var modelValue = scope.$eval(model);\r\n if (matchValue !== modelValue) {\r\n return { name: 'pdiValueruleMatchElement', model: model, msg: matchElementValidationMsg, hasError: true };\r\n }\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n if (!validateWarnings) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleMatchElementIfExprWrn, scope)) {\r\n var matchValue = scope.$eval(match);\r\n var modelValue = scope.$eval(model);\r\n if (matchValue !== modelValue) {\r\n return { name: 'pdiValueruleMatchElement', model: model, msg: matchElementValidationMsgWrn, hasWarning: true };\r\n }\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiValueruleMatchElement', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n }\r\n };\r\n }]);\r\n","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nfunction CustomerPaymentAccount(account){\r\n this.AccountNo = account.AccountNo;\r\n this.AccountNoVerify = account.AccountNoVerify;\r\n this.AccountNoMasked = account.AccountNoMasked;\r\n this.AccountStatus = account.AccountStatus;\r\n this.AccountStatusDesc = account.AccountStatusDesc;\r\n this.AccountType = account.AccountType;\r\n this.BankRoutingNo = account.BankRoutingNo;\r\n this.CreatedDateTime = account.CreatedDateTime;\r\n this.CreatedByCustContKey = account.CreatedByCustContKey;\r\n this.CustKey = account.CustKey;\r\n this.Description = account.Description;\r\n this.Key = account.Key;\r\n this.LastModifiedDateTime = account.LastModifiedDateTime;\r\n this.LastModifiedByCustContKey = account.LastModifiedByCustContKey;\r\n this.PrenoteDate = account.PrenoteDate;\r\n this.RejectedEmailSent = account.RejectedEmailSent;\r\n this.VerificationAmount1 = account.VerificationAmount1;\r\n this.VerificationAmount2 = account.VerificationAmount2;\r\n this.VerificationDate = account.VerificationDate;\r\n this.TimeStamp = account.TimeStamp;\r\n this.IsDefault = account.IsDefault;\r\n this.AccountLastActivity = account.AccountLastActivity;\r\n this.AccountNextPaymentKey = account.AccountNextPaymentKey;\r\n this.AccountNextPayment = account.AccountNextPayment;\r\n this.AccountNextPaymentAmmount = account.AccountNextPaymentAmmount;\r\n this.ScheduledPaymentCount = account.ScheduledPaymentCount;\r\n}\r\n\r\n\r\n\r\nangular.module('services.paymentAccounts', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.paymentAccounts',[]).factory('PaymentAccountService', function($q, ajax, apiService) {\r\n 'use strict';\r\n var WebPaymentAccount = {};\r\n return{\r\n WebPaymentAccount:WebPaymentAccount,\r\n getPaymentAccountList : function(customerKey){\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/WebPaymentAccounts/' + customerKey,\r\n params: {}\r\n });\r\n var deferred = $q.defer();\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getPaymentAccount : function(customerPaymentAccountKey, customerKey){\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/WebPaymentAccount/' + customerPaymentAccountKey + '/' + customerKey,\r\n params: {}\r\n });\r\n var deferred = $q.defer();\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n savePaymentAccount : function(webPaymentAccount){\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method:'POST',\r\n url:'../api/WebPaymentAccount',\r\n data: webPaymentAccount\r\n }\r\n );\r\n var deferred = $q.defer();\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n validateRoutingNumber : function(routingNumber){\r\n var deferred = $q.defer();\r\n ajax.get('../api/WebPaymentAccountValidateRoutingNumber', routingNumber)\r\n .then(function(data, status, config, headers){\r\n var routingNubmerisValid = true;\r\n deferred.resolve(routingNubmerisValid);\r\n })\r\n .catch(function(data, status, config, headers){\r\n var routingNubmerisValid = data;\r\n deferred.reject(routingNubmerisValid);\r\n });\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by jvitoria on 4/1/2015.\r\n */\r\n/* ==============================================================================\r\n\r\n CORE.FILTERS MODULE\r\n\r\n Defines the module namespace for the core.filters\r\n\r\n ============================================================================= */\r\nangular.module('core.filters', []);\r\n\r\n\r\nangular.module('core.filters')\r\n .filter('htmlToPlaintext', function() {\r\n return function(text) {\r\n return String(text).replace(/<[^>]+>/gm, '');\r\n };\r\n })\r\n .filter('tel', function () {\r\n return function (tel) {\r\n if (!tel) { return ''; }\r\n\r\n var value = tel.toString().trim().replace(/^\\+/, '');\r\n\r\n if (value.match(/[^0-9]/)) {\r\n return tel;\r\n }\r\n\r\n var country, city, number;\r\n\r\n switch (value.length) {\r\n case 10: // +1PPP####### -> C (PPP) ###-####\r\n country = 1;\r\n city = value.slice(0, 3);\r\n number = value.slice(3);\r\n break;\r\n\r\n case 11: // +CPPP####### -> CCC (PP) ###-####\r\n country = value[0];\r\n city = value.slice(1, 4);\r\n number = value.slice(4);\r\n break;\r\n\r\n case 12: // +CCCPP####### -> CCC (PP) ###-####\r\n country = value.slice(0, 3);\r\n city = value.slice(3, 5);\r\n number = value.slice(5);\r\n break;\r\n\r\n default:\r\n return tel;\r\n }\r\n\r\n if (country === 1) {\r\n country = \"\";\r\n }\r\n\r\n number = number.slice(0, 3) + '-' + number.slice(3);\r\n\r\n return (country + \" (\" + city + \") \" + number).trim();\r\n };\r\n });","angular.module('core.providers', [])\r\n .provider('template', [function() {\r\n\r\n this.$get = function() {\r\n return {};\r\n };\r\n\r\n this.getTemplate = function(templateName) {\r\n var absurl = window.location.protocol + \"//\" + window.location.hostname + window.location.pathname;\r\n var indexOfAppRel = absurl.toLowerCase().indexOf(\"app_release\");\r\n var templateUrl = absurl.substring(0,indexOfAppRel) + \"templates/\" + templateName;\r\n return templateUrl;\r\n };\r\n\r\n }])\r\n .constant('templates', function(templateProvider) { return templateProvider; });","angular.module('services.browser', [])\r\n .factory('BrowserService', function ($window)\r\n {\r\n return {\r\n getBrowserType: function ()\r\n {\r\n var userAgent = $window.navigator.userAgent;\r\n var browsers = {chrome: /chrome/i, safari: /safari/i, firefox: /firefox/i, ie: /mozilla/i};\r\n for (var key in browsers) {\r\n if (browsers[key].test(userAgent)) {\r\n return key;\r\n }\r\n }\r\n return 'ie';\r\n }\r\n };\r\n });","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\nangular.module('services.bulkFuelPriceNotices', ['core.ajax']);\r\n\r\nangular.module('services.bulkFuelPriceNotices',[]).service('bulkFuelPriceNoticesService', function($q, apiService) {\r\n 'use strict';\r\n return {\r\n loadBulkFuelPrices: function(custKey, custLocKey, startDate, endDate) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetBulkFuelPriceNotices/',\r\n data: {\r\n CustKey:custKey,\r\n CustLocKey:custLocKey,\r\n StartDate:startDate,\r\n EndDate:endDate\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.contactUs', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.contactUs',[]).service('ContactUs', function($q, apiService, $filter) {\r\n 'use strict';\r\n return {\r\n loadContactUsContext: function() {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetContactUsContext/',\r\n data: {}\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n saveMessage: function(message) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/PostContactUsMessage/',\r\n data: message\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\nangular.module('services.customers', ['core.ajax']);\r\n\r\nangular.module('services.customers',[]).service('customerService', function($q, apiService) {\r\n 'use strict';\r\n function execute(apiSvcSettings, deferred){\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n }\r\n\r\n function executeAndNotify(apiSvcSettings, deferred){\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n }\r\n return {\r\n saveCustomerAccountSettings: function (custKey, contactKey, alertAmount, sendAlerts)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveCustomerARWebAccountSettings/',\r\n data: {\r\n CustomerKey: custKey,\r\n PrimaryContactKey: contactKey,\r\n AlertAmount: alertAmount,\r\n SendBalanceAlerts: sendAlerts\r\n }\r\n }\r\n );\r\n executeAndNotify(apiSvcSettings, deferred);\r\n return deferred.promise;\r\n },\r\n getCustomerLocations: function (custKey, locType) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetCustomerLocations/',\r\n data: {\r\n CustKey:custKey,\r\n LocationType:locType\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n saveCustomerLocations: function (recStatus, location, custContKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveCustomerLocations/',\r\n data: {\r\n CustContKey: custContKey,\r\n RecStatus:recStatus,\r\n Location:location\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n services.documents MODULE\r\n ============================================================================= */\r\nangular.module('services.documents', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n DocumentService\r\n ============================================================================= */\r\nangular.module('services.documents', []).factory('documentService', function ($q, ajax, apiService)\r\n{\r\n\r\n 'use strict';\r\n return {\r\n getNotifications: function (custkey, custContKey, type, beginDate, endDate)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetNotificationsList/',\r\n data: {\r\n CustKey: custkey,\r\n CustContKey: custContKey === \"null\" ? null : custContKey,\r\n Type: type === \"null\" ? null : type,\r\n BeginDate: beginDate,\r\n EndDate: endDate\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getStatements: function (custkey, beginDate, endDate)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetStatementsList/',\r\n data: {\r\n CustKey: custkey,\r\n BeginDate: beginDate,\r\n EndDate: endDate\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n listDocuments: function (referenceNumber, description, startDate, endDate, customerKey, documentType, contactKey)\r\n {\r\n var deferred = $q.defer();\r\n var listAttachmentsCmdParms = {\r\n ReferenceNumber: referenceNumber,\r\n Description: description,\r\n StartDate: startDate,\r\n EndDate: endDate,\r\n CustomerKey: customerKey,\r\n DocumentType: documentType,\r\n ContactKey: contactKey\r\n };\r\n\r\n var apiSvcSettings = new ApiServiceSettings({\r\n method: 'POST',\r\n url: '../api/ListAttachments',\r\n data: listAttachmentsCmdParms\r\n });\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n var documetnList = data.Data;\r\n deferred.resolve(documetnList);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n Get1099AdviceList: function (cust, yb)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/Get1099AdviceList/',\r\n data: {\r\n CustKey: cust,\r\n YearsBack: yb\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","angular.module('services.edoc', ['core.ajax'])\n .service('EdocService', function ($q, apiService) {\n 'use strict';\n \n /**\n * the blob object is only valid for the window it is on,\n * once the window closes the url if captured is no longer valid\n * @param {any} edoc\n * @returns {blob}\n **/\n function createBlob(edoc) {\n var bytes = edoc.EdocStream;\n var type = edoc.MimeType;\n\n var raw = atob(bytes);\n var uint8Array = new Uint8Array(raw.length);\n for (var i = 0; i < raw.length; i++) {\n uint8Array[i] = raw.charCodeAt(i);\n }\n var blob = new Blob([uint8Array], { type: type });\n\n return blob;\n }\n\n /**\n * Takes the specified parameters and generates a edoc blob url\n * @param {number} edocKey\n * @returns {Promise}\n **/\n var renderEdoc = function (edocKey) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'POST',\n url: '../api/EdocDetailsSecure',\n data: {\n EdocKey: edocKey\n }\n }\n );\n apiService.execute(apiSvcSettings).then(\n function (data) {\n deferred.resolve(data.Data);\n }\n );\n return deferred.promise;\n };\n\n /**\n * Takes the specified parameters and generates a edoc blob url\n * @param {string} parameters\n * @returns {Promise}\n */\n var renderEdocByRefNo = function (parameters) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'POST',\n url: '../api/EdocDetailsSecure/GetByRefNo',\n data: {\n Parameters: parameters\n }\n }\n );\n apiService.execute(apiSvcSettings).then(\n function (data) {\n deferred.resolve(data.Data);\n }\n );\n return deferred.promise;\n };\n\n /**\n * Take the edoc stream and turn it into a blob url and then display it in our pdf viewer\n * If mime type is text/html then that means the document doesnt exist and we need to redirect \n * to the DocumentNotAvailable endpoint\n * @param {any} edoc\n * @returns {string}\n **/\n var createUrl = function (edoc){\n if (edoc) {\n var url;\n \n if (edoc.MimeType === 'text/html'){\n url = '../api/DocumentNotAvailable';\n return url;\n }\n \n var blob = createBlob(edoc);\n var file = URL.createObjectURL(blob);\n url = \"static/pdfjs/web/viewer.html?file=\" + encodeURIComponent(file);\n\n return url;\n }\n };\n\n return {\n renderEdoc: renderEdoc,\n renderEdocByRefNo: renderEdocByRefNo,\n createUrl: createUrl\n };\n });","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.encrypt', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.encrypt',[]).service('encryptData', function($q, apiService) {\r\n 'use strict';\r\n var encrypt = function(value) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/EncryptString/',\r\n data: {\r\n Value: value\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n };\r\n\r\n return {\r\n encrypt: encrypt\r\n };\r\n});","/* ==============================================================================\r\n\r\n SERVICES.FuelCards MODULE\r\n\r\n Defines the module namespace for the Fuel Cards services\r\n\r\n ============================================================================= */\r\nangular.module('services.FuelCards', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n FuelCards SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving data to the database.\r\n\r\n ============================================================================= */\r\nangular.module('services.FuelCards', [])\r\n .factory('FuelCardsService', function ($q, apiService)\r\n {\r\n 'use strict';\r\n function setDatesToNull(obj)\r\n {\r\n for (var prop in obj)\r\n {\r\n var value = obj[prop];\r\n if (typeof value === 'object')\r\n {\r\n setDatesToNull(value);\r\n }\r\n else\r\n {\r\n if (['1900-01-01T00:00:00', '0001-01-01T00:00:00', '2079-06-06T00:00:00'].indexOf(obj[prop]) > -1)\r\n obj[prop] = null;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n getCards: function (customerContactKey, customerKey, cardFormat, cardNumDesc, isActive, isExpired, isPending, isLocked, isCancelled, department, template)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetCards/',\r\n data: {\r\n CustomerContactKey: customerContactKey,\r\n CustomerKey: customerKey,\r\n CardFormatKey: cardFormat,\r\n CardNumDesc: cardNumDesc,\r\n IsActive: isActive,\r\n IsExpired: isExpired,\r\n IsPending: isPending,\r\n IsLocked: isLocked,\r\n IsCancelled: isCancelled,\r\n Department: department,\r\n Template: template\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n setDatesToNull(data.Data);\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getCardDetails: function (cardKey, canViewCardNumbers)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetCardDetails/',\r\n data: {\r\n CardKey: cardKey,\r\n CanViewCardNumbers:canViewCardNumbers\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n setDatesToNull(data.Data);\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getCardsContext: function (customerKey, compKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetCardsContext/',\r\n data: {\r\n CustomerKey: customerKey,\r\n CompanyKey: compKey\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getTaxAuthorities: function (custKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetTaxAuthorities/',\r\n data: {\r\n CustomerKey: custKey\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n addCard: function (recStatus, card, cardCF, custContKey)\r\n {\r\n setDatesToNull(card);\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveCards/',\r\n data: {\r\n Card: card,\r\n CardCF: cardCF,\r\n recStatus: recStatus,\r\n CustContKey: custContKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n saveCards: function (recStatus, card, cardCF, custContKey)\r\n {\r\n setDatesToNull(card);\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveCards/',\r\n data: {\r\n Card: card,\r\n CardCF: cardCF,\r\n recStatus: recStatus,\r\n CustContKey: custContKey\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getLookupPrices: function (custContKey, daysBack)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetCardPriceNotices/',\r\n data: {\r\n CustContKey: custContKey,\r\n DaysBack: daysBack\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getPriceNoticesSettings: function (custContKey, cpPriceNoticeRuleKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPriceNoticesSettings/',\r\n data: {\r\n CustContKey: custContKey,\r\n CPPriceRuleKey: cpPriceNoticeRuleKey\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getSearchSites: function (custContKey, city, state, postal, limit)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetSearchSites/',\r\n data: {\r\n CustContKey: custContKey,\r\n City: city,\r\n State: state,\r\n Zip: postal,\r\n Limit: limit\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n savePriceNoticeSettings: function (custContKey, sites, groups, methods)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SavePriceNoticesSettings/',\r\n data: {\r\n CustContKey: custContKey,\r\n PriceNoticesSettingsSites: sites,\r\n PriceNoticesSettingsGroups: groups,\r\n PriceNoticesSettingsMethods: methods\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n blankLocation: {\r\n Key: 0,\r\n ID: '',\r\n Description: '',\r\n Address1: '',\r\n Address2: '',\r\n City: '',\r\n County: '',\r\n StateKey: 0,\r\n PostalCode: '',\r\n Active: -1,\r\n Name: '',\r\n Phone: '',\r\n PhoneFormatted: '',\r\n Email: ''\r\n },\r\n\r\n getCardsDepartments: function (custKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetCardsDepartments/',\r\n data: {\r\n CustKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n saveCardsDepartments: function (recStatus, custKey, depts, fields, vals, custContKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveCardsDepartments/',\r\n data: {\r\n RecStatus: recStatus,\r\n CustKey: custKey,\r\n CustContKey: custContKey,\r\n Departments: depts,\r\n Fields: fields,\r\n Values: vals\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n });\r\n","/* ==============================================================================\nservices.globalizations.js MODULE\n============================================================================= */\nangular.module('services.globalizations', ['core.ajax']);\n\n/* ==============================================================================\nglobalizationSvc\n============================================================================= */\nangular.module('services.globalizations',[]).factory('globalizationSvc', function() {\n\n 'use strict';\n \n // Set the locale to the browser language, if it is null then set it to en-US\n var locale = (window.navigator.language === 'en-US' || window.navigator.language === 'fr-CA') ? window.navigator.language : 'en-US';\n\n return {\n getLocale: function () {\n return locale;\n },\n\n formatCurrency : function(num) {\n // Set the currency id based on the locale, default to USD\n var curID = (locale === 'fr-CA') ? 'CAD' : 'USD';\n\n return num.toLocaleString(locale, {style: 'currency', currency: curID});\n },\n\n formatNumeric: function (num, format) {\n return kendo.toString(num, format, locale);\n },\n\n // See https://docs.telerik.com/kendo-ui/globalization/intl/dateformatting for formats\n formatDateTime: function (dateString, format) {\n if (!dateString || dateString === \"\")\n {\n return \"\";\n }\n \n\n var date = new Date(dateString);\n return kendo.toString(date, format, locale);\n },\n\n convertStringToNumber: function (num) {\n if (typeof (num) === 'number')\n return num;\n\n if (locale === 'en-US') {\n num = num.replace(/[,$]/g, \"\");\n }\n else if (locale === 'fr-CA') {\n num = num.replace(/[$\\s]/g, \"\").replace(\",\", \".\");\n }\n\n return num;\n }\n };\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n services.home MODULE\r\n ============================================================================= */\r\nangular.module('services.home', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n homeService\r\n ============================================================================= */\r\nangular.module('services.home',[]).factory('homeService', function($q, ajax, apiService) {\r\n\r\n 'use strict';\r\n return{\r\n loadHomePageInformation : function(custContKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/Home/',\r\n data: {\r\n CustomerContactKey: custContKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","angular.module('services.localizations', [])\r\n .factory('localizationSvcFactory', function ($rootScope) {\r\n var _cachedLocalizations = [];\r\n\r\n var service = {\r\n setLocalizations: function (localizations) {\r\n _cachedLocalizations[localizations] = $rootScope.$eval(localizations);\r\n },\r\n setCachedLocalizations: function () {\r\n var localizationFilesContainer = $(\"#localizationFiles\");\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty(localizationFilesContainer)) {\r\n angular.forEach(localizationFilesContainer.children(), function (item) {\r\n _cachedLocalizations[item.id] = $rootScope.$eval(item.innerText);\r\n });\r\n }\r\n },\r\n getCachedLocalizationsContainer: function (page) {\r\n return {\r\n getLocalizedString: function (string, replacementParms) {\r\n var doesNotExist = angular.isUndefinedOrNullOrEmpty;\r\n\r\n var replaceString = function (result, replacementParms) {\r\n for (var i = 0; i < replacementParms.length; i++) {\r\n result = result.replace(\"{\" + i.toString() + \"}\", replacementParms[i]);\r\n }\r\n return result;\r\n };\r\n\r\n var decodeToUTF8 = function (text) {\r\n return text.replace(/&#(\\d+);/g, function (match, number) {\r\n return String.fromCharCode(number);\r\n });\r\n };\r\n\r\n var getCachedLocalizationsFor = function (page) {\r\n\r\n // load all the localizations defined in the index page\r\n if (doesNotExist(_cachedLocalizations)) {\r\n service.setCachedLocalizations();\r\n }\r\n\r\n var result = _cachedLocalizations[page];\r\n\r\n // if page not found in cache try to recreate it \r\n return result ? result : service.setLocalizations(page);\r\n };\r\n\r\n var fmtResult = function (r, rp) {\r\n return (rp && rp.constructor === Array) ? replaceString(r, rp) : r;\r\n };\r\n\r\n var getStringFrom = function (page) {\r\n return fmtResult(getCachedLocalizationsFor(page)[string], replacementParms);\r\n };\r\n\r\n var result = getStringFrom(page);\r\n\r\n // if we can't find the string check the shared AppLocalization\r\n result = result ? result : getStringFrom(['AppLocalization']);\r\n\r\n // if we found a string return its decoded version to UTF 8 otherwise return the id\r\n return result ? decodeToUTF8(result) : string;\r\n\r\n },\r\n stringFromCharacterEntity: function (str) {\r\n // If we need translated string for an input field (e.g. secret questions editable combo-box) \r\n // we can not use ng-bind-html or k-value-template that fixing encoding issues.\r\n // We need to fix encoding issues via this function. \r\n // If someone finds a better solution for fixing the encoding issue, where it will be possible to get directly corrected text, \r\n // do not hesitate and change this.\r\n return $('').html(str).text();\r\n }\r\n };\r\n }\r\n };\r\n\r\n return service;\r\n })\r\n .factory('localizationSvc', function (localizationSvcFactory)\r\n {\r\n return localizationSvcFactory;\r\n })\r\n .directive('pnLocalizationsSvc', function (templates, localizationSvc)\r\n {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n link: function (scope, element, attrs)\r\n {\r\n localizationSvc.setLocalizations(element.text().trim());\r\n },\r\n templateUrl: function(element, attrs) {\r\n return templates.getTemplate(attrs.moduleName);\r\n }\r\n };\r\n })\r\n .directive('pnLocalizations', function (templates, localizationSvcFactory)\r\n {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n controllerAs: 'pnLocalizationCtrl',\r\n link: function (scope, element, attrs)\r\n {\r\n scope.pnLocalizationCtrl.localizations.setLocalizations(element.text().trim());\r\n },\r\n templateUrl: function(element, attrs) {\r\n return templates.getTemplate(attrs.moduleName);\r\n },\r\n controller: function () {\r\n var self = this;\r\n self.$onInit = function () {\r\n self.localizations = localizationSvcFactory;\r\n };\r\n }\r\n };\r\n })\r\n .directive('pnTemplate', function (templates)\r\n {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n templateUrl: function(element, attrs) {\r\n return templates.getTemplate(attrs.templateName);\r\n }\r\n };\r\n })\r\n;","/* ==============================================================================\n services.logging MODULE\n ============================================================================= */\nangular.module('services.logging', ['core.ajax']);\n\n/* ==============================================================================\n LoggingService\n ============================================================================= */\nangular.module('services.logging', []).factory('LoggingService', function ($q, apiService) {\n 'use strict';\n\n return {\n logErrors: function(error) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'POST',\n url: '../api/Logging/',\n data: {\n ExceptionMessage: error.ExceptionMessage,\n Stacktrace: error.Stacktrace\n }\n }\n );\n apiService.execute(apiSvcSettings).then(\n function(data) {\n deferred.resolve(data);\n }\n );\n return deferred.promise;\n }\n };\n});","/**\r\n * Created by jvitoria on 6/18/2015.\r\n */\r\n/* ==============================================================================\r\n services.orders MODULE\r\n ============================================================================= */\r\nangular.module('services.orders', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n ordersService\r\n ============================================================================= */\r\nangular.module('services.orders', [])\r\n .factory('ordersService', function ($q, ajax, apiService)\r\n {\r\n 'use strict';\r\n return {\r\n getOpenOrders: function getOpenOrders(custKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/GetOpenOrders/',\r\n data: {\r\n CustKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getOrderCustomerLocations: function getOrderCustomerLocations(custKey, requestedDeliveryDate) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/GetOrderCustomerLocations/',\r\n data: {\r\n CustKey: custKey,\r\n RequestedDeliveryDate: requestedDeliveryDate\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getOrdersContext: function getOrdersContext(custKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/GetOrdersContext/',\r\n data: {\r\n CustKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getOrderLocationInfo: function getOrderLocationInfo(custLocKey, requestedDeliveryDate)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/GetOrderLocationInfo/',\r\n data: {\r\n CustLocKey: custLocKey,\r\n RequestedDeliveryDate: requestedDeliveryDate\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getOrderDetails: function getOrderDetails(ordKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/GetOrderDetails/',\r\n data: {\r\n OrdKey: ordKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n saveOrderDetails: function saveOrderDetails(orderDetails)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/SaveOrderDetails/',\r\n data: {\r\n OrderDetails: orderDetails\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n blankOrderHeaderObj: function blankOrderHeaderObj()\r\n {\r\n return {\r\n Command: null,\r\n Comment: null,\r\n CustContKey: null,\r\n CustContName: null,\r\n CustContPhone: null,\r\n CustLocAddress: null,\r\n CustLocCity: null,\r\n CustLocDesc: null,\r\n CustLocKey: null,\r\n CustLocState: null,\r\n CustLocZip: null,\r\n Errors: [],\r\n LangID: 'EN',\r\n OrdCreatedByContKey: null,\r\n OrdDelivDirections: null,\r\n OrdDelivNotes: null,\r\n OrderDetails: [],\r\n OrdKey: null,\r\n OrdNumber: null,\r\n OrdStatus: null,\r\n OrdStatusKey: null,\r\n OrdType: 0,\r\n PONumber: null,\r\n ReqDelivDateTime: null,\r\n Timestamp: null\r\n };\r\n },\r\n\r\n blankOrderDetailsObj: function blankOrderDetailsObj()\r\n {\r\n return {\r\n CustFuelTankKey: null,\r\n ID: null,\r\n MaxVolume: null,\r\n OrderQty: 0,\r\n OrdFuelKey: null,\r\n OrdKey: null,\r\n Product: null,\r\n ProductKey: null,\r\n TankNumber: null,\r\n TimeStamp: null\r\n };\r\n }\r\n\r\n };\r\n });\r\n\r\n","angular.module('services.pages', ['core.ajax']);\nangular.module('services.pages', [])\n .factory('PagesService', function ($q, apiService) {\n 'use strict';\n var localCache = {};\n var Cache = {\n add: function (name, object, expiration) {\n var exp = expiration || 0;\n var now = new Date().getTime();\n localCache[name] = {\n data: object,\n inserted: now,\n expiration: (exp === 0) ? 0 : (now + exp * 1000)\n };\n },\n get: function (name) {\n var now = new Date().getTime();\n if (\n (Object.keys(localCache).indexOf(name) !== -1 && localCache[name].expiration === 0) || (Object.keys(localCache).indexOf(name) !== -1 && localCache[name].expiration > now)\n ) {\n return localCache[name].data;\n }\n else {\n //remove expired object from cache\n if (Object.keys(localCache).indexOf(name) !== -1) {\n delete localCache[name];\n }\n return null;\n }\n },\n exists: function (name) {\n var now = new Date().getTime();\n // if object exists and expiration is 0 (never expires) return true\n // if object exists and expiration is above NOW, return true\n // if object exists and expiration is bellow NOW return false and force services to retrieve new data\n return (\n (Object.keys(localCache).indexOf(name) !== -1 && localCache[name].expiration === 0) || (Object.keys(localCache).indexOf(name) !== -1 && localCache[name].expiration > now)\n ) ? true : false;\n }\n };\n return {\n getWebProfileSiteLayout: function (profileKey) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'GET',\n url: '../api/GetWebProfileSiteLayout/' + profileKey + '/',\n skipValidations: true\n }\n );\n if (Cache.exists(\"getWebProfileSiteLayout\")) {\n deferred.resolve(Cache.get(\"getWebProfileSiteLayout\"));\n }\n else {\n apiService.execute(apiSvcSettings).then(\n function (data) {\n Cache.add(\"getWebProfileSiteLayout\", data.Data);\n deferred.resolve(data.Data);\n },\n function (data) {\n deferred.reject(data.ErrorMessages);\n }\n );\n }\n return deferred.promise;\n },\n getAccessToken: function (profileKey, nodeKey) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'GET',\n url: '../api/GetAccessToken/' + profileKey + '/' + nodeKey + '/',\n skipValidations: true\n }\n );\n apiService.execute(apiSvcSettings).then(\n function (data) {\n deferred.resolve(data.Data);\n },\n function (data) {\n deferred.reject(data.ErrorMessages);\n }\n );\n return deferred.promise;\n }\n };\n });\n","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.paperwork', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.paperwork',[]).factory('PaperworkService', function($q, apiService, $filter, $rootScope) {\r\n 'use strict';\r\n return{\r\n getPaperworkContext : function(customerContactKey, ignoreStatus){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkContext/',\r\n data: {\r\n CustomerContactKey:customerContactKey,\r\n IgnoreStatus: ignoreStatus\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getNextPaperworkDate : function(siteKey, ignoreStatus){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetNextPaperworkDate/',\r\n data: {\r\n SiteKey: siteKey,\r\n IgnoreStatus: ignoreStatus\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data.NextPaperworkDate);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getPaperworkBatchesByDate : function(siteKey, startDate, endDate, unposted){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkBatchesByDate/',\r\n data: {\r\n SiteKey:siteKey,\r\n StartDate:startDate,\r\n EndDate:endDate,\r\n Unposted:unposted\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data.PaperworkBatches);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n OpenPaperworkBatch : function(siteKey, paperworkDate, customerContactKey, emailAddress, readOnly){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkBatchForEdit/',\r\n data: {\r\n BatchKey : 0,//Batch key is 0 to ensure the paperwork opens by site and date.(New Paperwork)\r\n SiteKey : typeof(siteKey) === \"object\" ?\r\n typeof(siteKey.SiteKey) === \"number\" ? siteKey.SiteKey : 0 :\r\n typeof(siteKey) === \"number\" ? siteKey : 0,\r\n PaperworkDate : paperworkDate,\r\n ContactKey: customerContactKey,\r\n EmailAddress : emailAddress,\r\n ReadOnly : readOnly\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n OpenPaperworkBatchByKey : function(batchKey, customerContactKey, emailAddress, readonly){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkBatchForEditByKey/',\r\n data: {\r\n BatchKey : batchKey,\r\n ContactKey: customerContactKey,\r\n EmailAddress : emailAddress,\r\n ReadOnly : readonly\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n SubmitPaperwork : function(submitPaperworkCmdParms){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SubmitPaperworkBatch/',\r\n data: submitPaperworkCmdParms\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n $rootScope.$broadcast('event:PaperworkSubmitted', {});\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n ValidatePaperworkSiteDateForContact : function(siteKey, paperworkDate, customerContactKey, forEntry){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/ValidatePaperworkSiteDateForContact/',\r\n data: {\r\n SiteKey : siteKey,\r\n PaperworkDate : paperworkDate,\r\n ContactKey: customerContactKey,\r\n ForEntry: forEntry\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n RefreshPaperworkLock: function (paperworkBatchKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/RefreshPaperworkLock/',\r\n data: {\r\n PaperworkBatchKey: paperworkBatchKey,\r\n RefreshLock: true\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.paperworkDealerForms', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.paperworkDealerForms',[]).service('PaperworkDealerFormsService', function($q, apiService, $filter) {\r\n 'use strict';\r\n var netReadings = 0;\r\n var beginningAndEndingReadings = 1;\r\n var calculatedBasedOnUnitsAndPerUnitAmount = 2;\r\n\r\n return {\r\n loadDealerForms: function (paperworkBatchKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkDealerForms/',\r\n data: {\r\n PaperworkBatchKey:paperworkBatchKey\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n saveDealerForms:function(header, forms){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SavePaperworkDealerForms/',\r\n data: {\r\n DealerFormsHeader:header,\r\n DealerForms:forms\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.paperworkTanks', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.paperworkDeliveries',[]).service('PaperworkDeliveriesService', function($q, apiService, $filter) {\r\n 'use strict';\r\n\r\n return {\r\n getDeliveriesWithContext: function (paperworkBatchKey ,forViewOnly) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetPaperworkDeliveriesWithContext/',\r\n params: { paperworkBatchKey: paperworkBatchKey, forViewOnly: forViewOnly }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getDelivery: function (deliveryKey, paperworkBatchKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetPaperworkDelivery/',\r\n params: { deliveryKey: deliveryKey, paperworkBatchKey: paperworkBatchKey }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getSiteFuelAuthorizedOrigins: function (paperworkBatchKey, vendorKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetSiteFuelAuthorizedOrigins/',\r\n params: { paperworkBatchKey: paperworkBatchKey, vendorKey: vendorKey }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n savePaperworkDelivery: function(deliveryHeader, delivery) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SavePaperworkDelivery/',\r\n data: {\r\n DeliveryHeader: deliveryHeader,\r\n FuelDelivery: delivery\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n deletePaperworkDelivery: function(delivery, paperworkBatchKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/DeletePaperworkDelivery/',\r\n params: { paperworkBatchKey: paperworkBatchKey },\r\n data: delivery\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\nangular.module('services.paperworkMeters', ['core.ajax'])\r\n\r\n.service('PaperworkMetersService', function($q, apiService, globalizationSvc) {\r\n 'use strict';\r\n\r\n var beginningAndEndingReadings = 1;\r\n var calculatedBasedOnUnitsAndPerUnitAmount = 2;\r\n\r\n function calculateNet(begin, end)\r\n {\r\n begin = globalizationSvc.convertStringToNumber(begin);\r\n end = globalizationSvc.convertStringToNumber(end);\r\n var diff = end - begin;\r\n\r\n if(parseFloat(end) < parseFloat(begin))\r\n {\r\n var max = begin.toString();\r\n var nMax = \"\";\r\n for(var i = 0;i< max.length; i++)\r\n {\r\n if(max[i] === \".\")\r\n break;\r\n nMax += \"9\";\r\n }\r\n var dMax = parseFloat(nMax) + 1;//Will wound to the next whole \"10\" id 99 to 100.\r\n diff = dMax - begin + end;\r\n }\r\n return parseFloat(diff);\r\n }\r\n\r\n return {\r\n loadMetersForEntry: function (paperworkBatchKey, profitcenterKey, paperworkDate) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkMeters/',\r\n data: {\r\n ProfitCenterKey:profitcenterKey,\r\n PaperworkDate:paperworkDate,\r\n PaperworkBatchKey:paperworkBatchKey\r\n\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n netAmountCalc: function (meter) {\r\n if (meter.FuelPositionDollarReading !== calculatedBasedOnUnitsAndPerUnitAmount) return;\r\n var netUnits = globalizationSvc.convertStringToNumber(meter.NetUnits);\r\n var rtlPrice = globalizationSvc.convertStringToNumber(meter.RtlPrice);\r\n if (netUnits > 0 && rtlPrice > 0) {\r\n meter.NetAmount = rtlPrice * netUnits;\r\n }\r\n },\r\n calcPerUnit: function (meter, priceToleranceAmount, checkRetailPrice, checkAveragePrice, showRtlPrice) {\r\n //Check average price * compare to previous value\r\n var netUnits = globalizationSvc.convertStringToNumber(meter.NetUnits);\r\n var netAmounts = globalizationSvc.convertStringToNumber(meter.NetAmount);\r\n var rtlPrice = globalizationSvc.convertStringToNumber(meter.RtlPrice);\r\n if (netUnits > 0 && netAmounts > 0) {\r\n meter.CalcPrice = netAmounts / netUnits;\r\n } else {\r\n // If retail price is available then fall back to that like FIME \r\n // Otherwise set the average to zero so we dont give them a bad calculation\r\n if (rtlPrice > 0 && showRtlPrice) {\r\n meter.CalcPrice = rtlPrice;\r\n } else {\r\n meter.CalcPrice = 0;\r\n }\r\n }\r\n },\r\n calculateNetAmountFromEnd: function (meter, index) {\r\n if (meter.FuelPositionDollarReading !== beginningAndEndingReadings) { return; }\r\n\r\n meter.NetAmount = calculateNet(meter.BeginAmount, meter.EndAmount);\r\n },\r\n calculateNetUnitsFromEnd: function (meter, index) {\r\n if (meter.FuelPositionUnitReading !== beginningAndEndingReadings) { return; }\r\n\r\n meter.NetUnits = calculateNet(meter.BeginUnits, meter.EndUnits);\r\n },\r\n calculatePageAmountTotals: function (meters) {\r\n var totalDollar = 0.0;\r\n meters.forEach((meter) => {\r\n var theVal = globalizationSvc.convertStringToNumber(meter.NetAmount);\r\n var pumpTestVal = globalizationSvc.convertStringToNumber(meter.TestAmount);\r\n totalDollar = totalDollar + parseFloat(theVal) - parseFloat(pumpTestVal);\r\n });\r\n return totalDollar;\r\n },\r\n calculatePageUnitTotals: function (meters) {\r\n var totalUnits = 0.0;\r\n meters.forEach((meter) => {\r\n var theVal = globalizationSvc.convertStringToNumber(meter.NetUnits);\r\n var pumpTestVal = globalizationSvc.convertStringToNumber(meter.TestUnits);\r\n totalUnits = totalUnits + parseFloat(theVal) - parseFloat(pumpTestVal);\r\n });\r\n return totalUnits;\r\n },\r\n updateMeters: function (meters) {\r\n meters.forEach((meter) => {\r\n meter.BeginUnits = typeof(meter.BeginUnits) === 'string' ? globalizationSvc.convertStringToNumber(meter.BeginUnits) : meter.BeginUnits;\r\n meter.BeginAmount = typeof(meter.BeginAmount) === 'string'? globalizationSvc.convertStringToNumber(meter.BeginAmount) : meter.BeginAmount;\r\n meter.TestUnits = typeof(meter.TestUnits) === 'string' ? globalizationSvc.convertStringToNumber(meter.TestUnits) : meter.TestUnits;\r\n meter.TestAmount = typeof(meter.TestAmount) === 'string' ? globalizationSvc.convertStringToNumber(meter.TestAmount) : meter.TestAmount;\r\n });\r\n },\r\n savePaperworkMeters: function(meterHeaders, meters)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SavePaperworkMeters/',\r\n data: {\r\n PaperworkMeterHeader: meterHeaders,\r\n PaperworkMeters: meters\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\n * Created by mmagic on 06/02/2022.\n */\n/* ==============================================================================\n\n SERVICES.PaperworkReports MODULE\n\n Defines the module namespace for the paperwork reports services\n\n ============================================================================= */\nangular.module('services.paperworkReports', ['core.ajax'])\n\n/* ==============================================================================\n\n Paperwork Reports SERVICE\n\n Contains services that retrieving paperwork reports.\n\n ============================================================================= */\n.service('PaperworkReportsService', function($q, apiService) {\n 'use strict';\n\n return {\n getPaperworkReports: function (customerContactKey) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'POST',\n url: '../api/GetPaperworkReports/',\n data: {\n CustomerContactKey: customerContactKey\n },\n skipValidations: true\n }\n );\n apiService.execute(apiSvcSettings).then(\n function (data) {\n deferred.resolve(data.Data);\n }\n );\n return deferred.promise;\n },\n\n getPaperworkReportSites: function (reportName, customerContactKey) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'POST',\n url: '../api/GetPaperworkReportSites/',\n data: {\n ReportName: reportName,\n CustomerContactKey: customerContactKey\n },\n skipValidations: true\n }\n );\n apiService.execute(apiSvcSettings).then(\n function (data) {\n deferred.resolve(data.Data);\n }\n );\n return deferred.promise;\n }\n };\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.paperworkTanks', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.paperworkTanks',[]).service('PaperworkTanksService', function($q, apiService, $filter) {\r\n 'use strict';\r\n var netReadings = 0;\r\n var beginningAndEndingReadings = 1;\r\n var calculatedBasedOnUnitsAndPerUnitAmount = 2;\r\n\r\n function unFormatNumber(number)\r\n {\r\n if(number.toString().indexOf(',') > -1) {\r\n number = number.replace( /,/g , \"\");\r\n }\r\n if(number.toString().indexOf('$') > -1) {\r\n number = number.replace( /\\$/g , \"\");\r\n }\r\n if(number.length === 0)// || isNaN(number))\r\n return \"0\";\r\n return number;\r\n }\r\n function convertTemp(temp, siteUOM, tankUOM){\r\n if(siteUOM === tankUOM) return temp;//no conversion necessary.\r\n if(tankUOM === 0) return (temp * 1.8) + 32; //Convert c to fl\r\n return (temp - 32) * 0.5555555556;//Convert f to c\r\n }\r\n function convertLinearUnits(units, siteUOM, tankUOM){\r\n if(siteUOM === tankUOM) return units;//no conversion necessary.\r\n if(tankUOM === 0) return units * 0.3937; //Convert cm to in\r\n return units * 2.54;//Convert in to cm\r\n }\r\n function convertVolumeToSiteUnits(units, siteUOM, tankUOM){\r\n if(siteUOM === tankUOM) return units;//no conversion necessary.\r\n if(siteUOM === 0) return units * 0.264172; //Convert liters to gal\r\n return units * 3.785412;//Convert gal to liters\r\n }\r\n function getVolume(tankCharts, tank, depth){\r\n var tankUOM = tank.UnitOfMeasure;\r\n var siteUOM = tank.MeasurementType;\r\n var tankChartKey = tank.TankTypeKey;\r\n var tankChart = tankCharts[tankChartKey + \"\"];\r\n\r\n var tankTypeUnits = convertLinearUnits(depth, siteUOM, tankUOM);\r\n var nStr = tankTypeUnits + '';\r\n var x = nStr.split('.');\r\n var wholeNumber = parseInt(x[0], 10) - 1;//subtract 1 from actual number to get index.\r\n var decimalNumber = parseFloat(x.length > 1 ? '0.' + x[1] : '0.0');//Partial units.\r\n var baseAmount = 0;\r\n var partialAmount = 0.00;\r\n if(wholeNumber > 0 && wholeNumber < tankChart.length) {\r\n baseAmount = tankChart[wholeNumber].Volume;\r\n }\r\n if(decimalNumber > 0 && (wholeNumber + 1) < tankChart.length){\r\n var nextAmount = tankChart[wholeNumber + 1].Volume;\r\n var avg = nextAmount - baseAmount;\r\n partialAmount = avg * decimalNumber;\r\n }\r\n if(wholeNumber >= tankChart.length)\r\n baseAmount = tankChart[tankChart.length-1].Volume;\r\n var units = baseAmount + partialAmount;\r\n return convertVolumeToSiteUnits(units, siteUOM, tankUOM);\r\n }\r\n return {\r\n loadTanks: function (paperworkBatchKey, siteKey, paperworkDate) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkTanks/',\r\n data: {\r\n PaperworkBatchKey:paperworkBatchKey,\r\n SiteKey:siteKey,\r\n PaperworkDate:paperworkDate\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n calculateTankDepth: function(tank, isMetric){\r\n var base = isMetric?100:12;\r\n var units = (tank.LargeUnits * base) +\r\n tank.SmallUnits +\r\n tank.PartialUnits;\r\n return units;\r\n },\r\n calculateWaterDepth: function(tank){\r\n var units = tank.WaterSmallUnits +\r\n tank.WaterPartialUnits;\r\n return units;\r\n },\r\n getVolumeFromTankChart: function(tank, tankCharts){\r\n return getVolume(tankCharts, tank, tank.Depth);\r\n },\r\n getMaxVolumeFromTankChart: function (tank, tankCharts) {\r\n var tankUOM = tank.UnitOfMeasure;\r\n var siteUOM = tank.MeasurementType;\r\n var tankChartKey = tank.TankTypeKey;\r\n var tankChart = tankCharts[tankChartKey + \"\"];\r\n var maxVolume = tankChart[tankChart.length - 1].Volume;\r\n return convertVolumeToSiteUnits(maxVolume, siteUOM, tankUOM);\r\n },\r\n getWaterVolumeFromTankChart: function(tank, tankCharts){\r\n return getVolume(tankCharts, tank, tank.WaterDepth);\r\n },\r\n adjustVolumeForTemperature: function(useTempCorrections, tank, tempCharts){\r\n if(!useTempCorrections || tank.TmpChartKey <= 0)\r\n return tank.Quantity;\r\n //var tankUOM = tank.UnitOfMeasure;\r\n //var siteUOM = tank.MeasurementType;\r\n var temperature = tank.Temperature;//$scope.convertTemp(tank.Temperature,siteUOM,tankUOM);\r\n var tmpChartKey = tank.TmpChartKey;\r\n var tempChart = tempCharts[tmpChartKey + \"\"];\r\n var conversionFactor = 1;\r\n for(var x=0; x= temperature){//look for the temperature or the next greatest temperature.\r\n conversionFactor = tempChart[x].ConvFactor;\r\n break;\r\n }\r\n conversionFactor = tempChart[x].ConvFactor;//This will set it to the max conversion factor if none is found.\r\n }\r\n var qty = tank.Quantity;\r\n var wQty = tank.WaterQuantity;\r\n if(tank.TmpChartUseNetQty)\r\n return ((qty - wQty) / conversionFactor) + wQty;\r\n return qty / conversionFactor;\r\n\r\n },\r\n savePaperworkTanks: function(tankHeaders, tanks) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SavePaperworkTanks/',\r\n data: {\r\n PaperworkTankHeader: tankHeaders,\r\n PaperworkTanks: tanks\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.payments', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.payments',[]).factory('PaymentService', function($q, ajax, apiService, $rootScope) {\r\n\r\n 'use strict';\r\n return{\r\n getPayment : function(customerKey, webPaymentKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = {\r\n method:'POST',\r\n url:'../api/RetrieveWebPayment/',\r\n data: {\r\n CustomerKey:customerKey,\r\n WebPaymentKey:webPaymentKey\r\n }\r\n };\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n // Let's return our promise back to the caller\r\n return deferred.promise;\r\n },\r\n getBudgetPaymentContext: function (customerKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = {\r\n method: 'POST',\r\n url: '../api/BudgetWebPaymentContext/',\r\n data: {\r\n CustomerKey: customerKey\r\n }\r\n };\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n savePayment : function(payment){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = {\r\n method:'POST',\r\n url:'../api/WebPayment/',\r\n data: {\r\n CustomerScheduledPayment : payment.CustomerScheduledPayment,\r\n Invoices : payment.Invoices,\r\n Credits : payment.Credits\r\n }\r\n };\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getScheduledPaymentHistoryContext: function(customerKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = {\r\n method:'POST',\r\n url:'../api/WebPaymentHistoryContext/',\r\n data: {\r\n CustomerKey:customerKey\r\n }\r\n };\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getScheduledPayments: function(customerKey, accountKey, startDate, endDate, scheduled, processed, cancelled){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = {\r\n method:'POST',\r\n url:'../api/WebPaymentHistory/',\r\n data: {\r\n CustomerKey: customerKey,\r\n AccountKey: accountKey,\r\n StartDate: startDate,\r\n EndDate: endDate,\r\n Scheduled: scheduled,\r\n Canceled: cancelled,\r\n Processed: processed\r\n }\r\n };\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n lockPayments: function (custContKey, emailAddress, custKey, skipBroadcast) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/LockCustomerPayments/',\r\n data: {\r\n CustContKey: custContKey,\r\n EmailAddress: emailAddress,\r\n CustomerKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n if(data.Data.CmdSuccess)\r\n {\r\n if (!skipBroadcast) { $rootScope.$broadcast('event:PaymentLocked', { CustContKey: custContKey, EmailAddress: emailAddress, CustomerKey: custKey }); }\r\n deferred.resolve(data.Data);\r\n }else{\r\n deferred.reject(data.Data);\r\n }\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n unLockPayments: function(custContKey, emailAddress, custKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method:'POST',\r\n url:'../api/UnLockCustomerPayments/',\r\n data: {\r\n CustContKey: custContKey,\r\n EmailAddress: emailAddress,\r\n CustomerKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n $rootScope.$broadcast('event:PaymentUnlocked', {});\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n lockInvoices: function (custContKey, emailAddress, custKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method:'POST',\r\n url:'../api/LockCustomerInvoices/',\r\n data: {\r\n CustContKey: custContKey,\r\n EmailAddress: emailAddress,\r\n CustomerKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n if(data.Data.CmdSuccess)\r\n {\r\n $rootScope.$broadcast('event:InvoiceLocked', { CustContKey: custContKey, EmailAddress: emailAddress, CustomerKey: custKey });\r\n deferred.resolve(data.Data);\r\n }else{\r\n deferred.reject(data.Data);\r\n }\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n unockInvoices: function(custContKey, emailAddress, custKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method:'POST',\r\n url:'../api/UnLockCustomerInvoices/',\r\n data: {\r\n CustContKey: custContKey,\r\n EmailAddress: emailAddress,\r\n CustomerKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n $rootScope.$broadcast('event:InvoiceUnlocked', {});\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n lockPaymentsAndInvoices: function (custContKey, emailAddress, custKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/LockBothPaymentsAndInvoices/',\r\n data: {\r\n CustContKey: custContKey,\r\n EmailAddress: emailAddress,\r\n CustomerKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n if (data.Data.CmdSuccess) {\r\n deferred.resolve(data.Data);\r\n } else {\r\n deferred.reject(data.Data);\r\n }\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getTermsAndConditions: function(termsKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method:'POST',\r\n url:'../api/GetLegalTerms/',\r\n data: {\r\n LegalTermKey: termsKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n ); return deferred.promise;\r\n },\r\n acceptTermsAndConditions: function(termsKey, custKey, contactKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method:'POST',\r\n url:'../api/AcceptLegalTerms/',\r\n data: {\r\n LegalTermKey: termsKey,\r\n CustomerKey: custKey,\r\n CustomerContactKey: contactKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n ); return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n Profile SERVICE\r\n\r\n Contains the core profile related code\r\n\r\n ============================================================================= */\r\nangular.module('services.WebProfile', ['core.ajax']);\r\n\r\nangular.module('services.WebProfile', []).factory('WebProfileService', function ($q, $rootScope, ajax, apiService)\r\n{\r\n 'use strict';\r\n function retrieveWebProfileFromAPI(profile)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/WebProfile/',\r\n data: {\r\n WebProfileKey: profile\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n\r\n function retrieveWebProfileMessageFromAPI(webProfileKey, messageType)\r\n {\r\n var deferred = $q.defer();\r\n\r\n if (webProfileKey.toNumber() < 1)\r\n {\r\n deferred.resolve({\r\n Key: 0,\r\n Text: '',\r\n Timestamp: null,\r\n Type: null,\r\n WebProfileKey: 0\r\n });\r\n }\r\n else\r\n {\r\n var ca = ($rootScope.$$childHead.appInfo && $rootScope.$$childHead.appInfo.webUser && $rootScope.$$childHead.appInfo.webUser.CurrentAuthorization) ?\r\n $rootScope.$$childHead.appInfo.webUser.CurrentAuthorization : null;\r\n var custKey = ca ? ca.CustKey : null;\r\n var contactKey = ca ? ca.CustContKey : null;\r\n\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/WebProfileMessage/',\r\n data: {\r\n WebProfileKey: webProfileKey,\r\n MessageType: messageType,\r\n CustomerKey: custKey,\r\n ContactKey: contactKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data.WebProfileMessage);\r\n }\r\n );\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function iniializeFromApi()\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = {};\r\n\r\n apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/Init/',\r\n params: {}\r\n });\r\n\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function getWebAudits(beginDate, endDate, menuCode, includeAdds, includeChanges, includeDeletes, includeEvents, custKey, nameEmail)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetWebAuditEntries/',\r\n data: {\r\n BeginDate : beginDate,\r\n EndDate: endDate,\r\n MenuCode: menuCode,\r\n IncludeAdds: includeAdds,\r\n IncludeChanges: includeChanges,\r\n IncludeDeletes: includeDeletes,\r\n IncludeEvents: includeEvents,\r\n CustKey: custKey,\r\n NameEmail: nameEmail,\r\n MaxRows: 500\r\n }\r\n });\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function getARCustWebSheet()\r\n {\r\n return [].slice.call(document.styleSheets).find({title: \"ARCustWebCSS\"});\r\n }\r\n\r\n function setProfileColor(pcolor)\r\n {\r\n if (!$rootScope.profileClasses) {\r\n $rootScope.profileClasses = [];\r\n }\r\n else {\r\n resetStyle('backgroundColor', \"rgb(254, 254, 254)\", $rootScope.profileClasses);\r\n resetStyle('color', \"rgb(254, 254, 254)\", $rootScope.profileClasses);\r\n }\r\n cssOverrideStyle('backgroundColor', \"rgb(254, 254, 254)\", '#' + pcolor, $rootScope.profileClasses);\r\n cssOverrideStyle('color', \"rgb(254, 254, 254)\", '#' + pcolor, $rootScope.profileClasses);\r\n }\r\n\r\n function setLandingColor(pcolor)\r\n {\r\n if (!$rootScope.landingClasses) {\r\n $rootScope.landingClasses = [];\r\n }\r\n else {\r\n if ($rootScope.profileClasses) {\r\n resetStyle('backgroundColor', \"rgb(254, 254, 254)\", $rootScope.profileClasses);\r\n resetStyle('color', \"rgb(254, 254, 254)\", $rootScope.profileClasses);\r\n }\r\n resetStyle('backgroundColor', \"rgb(253, 253, 253)\", $rootScope.landingClasses);\r\n resetStyle('color', \"rgb(253, 253, 253)\", $rootScope.landingClasses);\r\n }\r\n\r\n cssOverrideStyle('backgroundColor', \"rgb(253, 253, 253)\", '#' + pcolor, $rootScope.landingClasses);\r\n cssOverrideStyle('color', \"rgb(253, 253, 253)\", '#' + pcolor, $rootScope.landingClasses);\r\n }\r\n\r\n function cssOverrideStyle(attribute, match, value, classNames)\r\n {\r\n var pdiSheet = getARCustWebSheet();\r\n if (!angular.isUndefinedOrNullOrEmpty(pdiSheet)) {\r\n var rules = pdiSheet.cssRules || pdiSheet.rules;\r\n for (var i = 0; i < rules.length; ++i) {\r\n if (!angular.isUndefinedOrNullOrEmpty(rules[i].style) && rules[i].style[attribute] === match) {\r\n rules[i].style[attribute] = value;\r\n classNames.push([rules[i].selectorText, rules[i].style[attribute]]);\r\n }\r\n }\r\n }\r\n else\r\n $scope.notifier.show('Stylesheet could not be loaded.', 'error');\r\n\r\n }\r\n\r\n function resetStyle(attribute, match, classNames)\r\n {\r\n var pdiSheet = getARCustWebSheet();\r\n if (!angular.isUndefinedOrNullOrEmpty(pdiSheet)) {\r\n var rules = pdiSheet.cssRules || pdiSheet.rules;\r\n for (var x = 0; x < classNames.length; x++) {\r\n for (var i = 0; i < rules.length; ++i) {\r\n if (!angular.isUndefinedOrNullOrEmpty(rules[i].style) && rules[i].selectorText === classNames[x][0] && rules[i].style[attribute] === classNames[x][1]) {\r\n rules[i].style[attribute] = match;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function cssOverrideAllStyle(attribute, value)\r\n {\r\n var pdiSheet = getARCustWebSheet();\r\n if (!angular.isUndefinedOrNullOrEmpty(pdiSheet)) {\r\n var rules = pdiSheet.cssRules || pdiSheet.rules;\r\n\r\n for (var i = 0; i < rules.length; ++i) {\r\n if (attribute in rules[i].style)\r\n rules[i].style[attribute] = value;\r\n }\r\n }\r\n }\r\n\r\n function cssAddStyle(selector, attribute, value)\r\n {\r\n var pdiSheet = getARCustWebSheet();\r\n if (!angular.isUndefinedOrNullOrEmpty(pdiSheet)) {\r\n var rules = pdiSheet.cssRules || pdiSheet.rules;\r\n var index = rules.length;\r\n\r\n if (\"insertRule\" in pdiSheet) {\r\n pdiSheet.insertRule(selector + \"{ \" + attribute + \": \" + value + \" }\", index);\r\n }\r\n else {\r\n pdiSheet.addRule(selector, attribute + \": \" + value, index);\r\n }\r\n }\r\n }\r\n\r\n return {\r\n setProfileColor: setProfileColor,\r\n setLandingColor: setLandingColor,\r\n setWebProfile: function (profile)\r\n {\r\n var deferred = $q.defer();\r\n if (amplify.store(\"pnprofile\")) {\r\n setLandingColor(amplify.store(\"pnprofile\").ArWebProfile.PrimaryColor);\r\n deferred.resolve(amplify.store(\"pnprofile\"));\r\n } else {\r\n retrieveWebProfileFromAPI(profile).then(function (data)\r\n {\r\n var webProfileWithContext = angular.fromJson(JSON.parse(data)).WebProfileWithContext;\r\n setLandingColor(webProfileWithContext.ArWebProfile.PrimaryColor);\r\n amplify.store(\"pnprofile\", webProfileWithContext);\r\n deferred.resolve(webProfileWithContext);\r\n });\r\n }\r\n return deferred.promise;\r\n },\r\n initialize: function ()\r\n {\r\n var deferred = $q.defer();\r\n var sCfg;\r\n var timeout = parseInt(20, 10) * 60 * 1000;\r\n\r\n iniializeFromApi().then(function (data)\r\n {\r\n sCfg = data.Configuration;\r\n setLandingColor(sCfg.LandingPrimaryColor);\r\n timeout = parseInt(sCfg.Timeout, 10) * 60 * 1000;\r\n $rootScope.timeout = timeout;\r\n deferred.resolve(data);\r\n });\r\n \r\n return deferred.promise;\r\n },\r\n initializeSiteDisabled: function ()\r\n {\r\n var deferred = $q.defer();\r\n\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetSiteDisabledSystemSettings/',\r\n params: {}\r\n });\r\n\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n setLandingColor(data.Data.Configuration.LandingPrimaryColor);\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n\r\n return deferred.promise;\r\n },\r\n getWebProfileMessage: function (webProfileKey, messageType)\r\n {\r\n var deferred = $q.defer();\r\n {\r\n retrieveWebProfileMessageFromAPI(webProfileKey, messageType).then(function (data)\r\n {\r\n deferred.resolve(data.Text);\r\n });\r\n }\r\n return deferred.promise;\r\n },\r\n getWebAudits: getWebAudits\r\n };\r\n});\r\n","angular.module('services.reporting', ['core.ajax'])\n.service('reportingService', function ($q, apiService) {\n 'use strict';\n\n function renderReportApi (parameters) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'POST',\n url: '../api/RenderSSRS',\n data: {\n Parameters: parameters\n }\n }\n );\n apiService.execute(apiSvcSettings).then(\n function (data) {\n deferred.resolve(data.Data);\n }\n );\n return deferred.promise;\n }\n\n /**\n * the blob object is only valid for the window it is on,\n * once the window closes the url if captured is no longer valid\n * @param {any} report\n **/\n function createBlob(report) {\n var bytes = report.ReportBytes;\n var type = report.MimeType;\n\n var raw = atob(bytes);\n var uint8Array = new Uint8Array(raw.length);\n for (var i = 0; i < raw.length; i++) {\n uint8Array[i] = raw.charCodeAt(i);\n }\n var blob = new Blob([uint8Array], { type: type });\n\n return blob;\n }\n\n function download(blobUrl, filename) {\n var a = document.createElement(\"a\");\n if (a.click) {\n // Use a.click() if available. Otherwise, Chrome might show\n // \"Unsafe JavaScript attempt to initiate a navigation change\n // for frame with URL\" and not open the PDF at all.\n // Supported by (not mentioned = untested):\n // - Firefox 6 - 19 (4- does not support a.click, 5 ignores a.click)\n // - Chrome 19 - 26 (18- does not support a.click)\n // - Opera 9 - 12.15\n // - Internet Explorer 6 - 10\n // - Safari 6 (5.1- does not support a.click)\n a.href = blobUrl;\n a.target = \"_parent\";\n // Use a.download if available. This increases the likelihood that\n // the file is downloaded instead of opened by another PDF plugin.\n if (\"download\" in a) {\n a.download = filename;\n }\n // must be in the document for IE and recent Firefox versions.\n // (otherwise .click() is ignored)\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.parentNode.removeChild(a);\n } else {\n if (window.top === window &&\n blobUrl.split(\"#\")[0] === window.location.href.split(\"#\")[0]) {\n // If _parent == self, then opening an identical URL with different\n // location hash will only cause a navigation, not a download.\n var padCharacter = blobUrl.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n blobUrl = blobUrl.replace(/#|$/, padCharacter + \"$&\");\n }\n window.open(blobUrl, \"_parent\");\n }\n }\n\n /**\n * Takes the specified parameters and renders a report in the pdfjs viewer\n * @param {string} parms\n **/\n var renderReport = function (parms) {\n var dataParams = parms + \"&export=False\";\n\n renderReportApi(dataParams).then(function (report) {\n if (report) {\n var url = \"static/pdfjs/web/viewer.html?file=\";\n\n var blob = createBlob(report);\n var file = URL.createObjectURL(blob);\n url = url + encodeURIComponent(file);\n\n $(\"#Main\").attr(\"src\", url);\n }\n });\n };\n\n /**\n * Takes the specified parameters and report format and\n * generates a report that is downloaded\n * @param {string} parms\n * @param {string} format\n **/\n var exportReport = function (parms, format) {\n var dataParams = parms + \"&export=True&exportFormat=\" + format;\n\n renderReportApi(dataParams).then(function (report) {\n if (report) {\n var blob = createBlob(report);\n var isIE = false || !!document.documentMode;\n if (isIE) { // support for ie11\n window.navigator.msSaveBlob(blob, report.Filename);\n } else {\n var file = URL.createObjectURL(blob);\n var filename = report.Filename;\n download(file, filename);\n\n // Releases the resource after the file is downloaded\n URL.revokeObjectURL(file);\n }\n }\n });\n };\n\n return {\n renderReport: renderReport,\n exportReport: exportReport\n };\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n Profile SERVICE\r\n\r\n Contains the core profile related code\r\n\r\n ============================================================================= */\r\nangular.module('services.reports', ['core.ajax']);\r\n\r\nangular.module('services.reports', []).factory('ReportServiceService', function ($q, $rootScope, ajax, apiService)\r\n{\r\n 'use strict';\r\n return {\r\n encrypt: function(data) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/EncryptString/',\r\n data: data\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\nangular.module('services.userAccounts', ['core.ajax']);\r\n\r\nangular.module('services.userAccounts', []).service('userAccountService', function ($q, apiService)\r\n{\r\n 'use strict';\r\n function execute(apiSvcSettings, deferred)\r\n {\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n }\r\n\r\n function executeAndNotify(apiSvcSettings, deferred)\r\n {\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n }\r\n\r\n return {\r\n loadContactContext: function (customerContactKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetContactContext/',\r\n data: {\r\n CustomerContactKey: customerContactKey\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n execute(apiSvcSettings, deferred);\r\n return deferred.promise;\r\n },\r\n listContacts: function (customer)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/ListCustomerContacts/',\r\n data: {\r\n CustomerKey: customer\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n execute(apiSvcSettings, deferred);\r\n return deferred.promise;\r\n },\r\n getBlankContact: function ()\r\n {\r\n var contact = {\r\n Active: -1,\r\n AltEmailAddress: \"\",\r\n AltExt: \"\",\r\n AltExt2: \"\",\r\n AltPhone: \"\",\r\n AltPhone2: \"\",\r\n AltPhone2Formatted: \"\",\r\n AltPhone2Type: -1,\r\n AltPhoneFormatted: \"\",\r\n AltPhoneType: -1,\r\n AltSpdDial: \"\",\r\n AltSpdDial2: \"\",\r\n CnSalKey: null,\r\n CPPrcNtcAllProducts: 0,\r\n CPPrcNtcChgByDateTime: null,\r\n CPPrcNtcChgByUser: null,\r\n CPPrcNtcSignupDateTime: null,\r\n CPPrcNtcSignupUser: null,\r\n CreatedBy: \"\",\r\n CustKey: 0,\r\n EmailAddress: \"\",\r\n EmailAddressOrig: \"\",\r\n Ext: \"\",\r\n FAX: \"\",\r\n FAXExt: \"\",\r\n FAXFormatted: \"\",\r\n FAXSpdDial: \"\",\r\n FaxPrefix: \"\",\r\n FirstName: \"\",\r\n Greeting: \"\",\r\n Key: -1,\r\n LastChgBy: \"\",\r\n LastName: \"\",\r\n Notes: \"\",\r\n Phone: \"\",\r\n PhoneFormatted: \"\",\r\n PhoneType: -1,\r\n ReceiveMarketingLetters: false,\r\n SpdDial: \"\",\r\n TextAddressPhone: -1,\r\n TextAddressTextMsgDomKey: -1,\r\n Title: \"\",\r\n WebActive: false,\r\n AllWebFunctions: false,\r\n WebMustChgPwd: -1,\r\n WebPWAccessSingleSite: 0,\r\n WebPWAccessSiteKey: null,\r\n WebPwd: \"\",\r\n WebQuestionAnswer: \"\",\r\n WebQuestionType: -1,\r\n Timestamp: \"\",\r\n EditorName: null,\r\n EditorEmailAddress: null,\r\n ApplyToAll: false,\r\n CustomerContactWebFunctions: [],\r\n CustomerContactWebAlerts: [],\r\n ConfirmEmail: \"\"\r\n };\r\n return contact;\r\n },\r\n saveContact: function (customerContact)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveContact/',\r\n data: {\r\n CustomerContact: customerContact\r\n }\r\n }\r\n );\r\n executeAndNotify(apiSvcSettings, deferred);\r\n return deferred.promise;\r\n },\r\n unsubscribeContact: function (contKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/UnsubscribeContact/',\r\n data: {\r\n ContactKey: contKey\r\n }\r\n }\r\n );\r\n execute(apiSvcSettings, deferred);\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\nangular.module('services.warehousePriceNotices', ['core.ajax']);\r\n\r\nangular.module('services.warehousePriceNotices',[]).service('warehousePriceNoticesService', function($q, apiService) {\r\n 'use strict';\r\n return {\r\n loadWarehousePrices: function(custKey, startDate, endDate) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetWarehousePriceNotices/',\r\n data: {\r\n CustKey:custKey,\r\n StartDate:startDate,\r\n EndDate:endDate\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});"]}