{"version":3,"sources":["../../src/provider-api/module.js","../../src/provider-api/services/AppointmentRepository.js","../../src/provider-api/services/AttachmentApprovalRepository.js","../../src/provider-api/services/AttachmentRepository.js","../../src/provider-api/services/BlockedSlotBehavior.js","../../src/provider-api/services/CalendarRepository.js","../../src/provider-api/services/CustomDiagnosisRepository.js","../../src/provider-api/services/DiagnosisRepository.js","../../src/provider-api/services/drugs/DosingService.js","../../src/provider-api/services/drugs/DrugRepository.js","../../src/provider-api/services/ExternalPatientsRepository.js","../../src/provider-api/services/FinancialCenterService.js","../../src/provider-api/services/fnc/EpaRepository.js","../../src/provider-api/services/fnc/FncDxRepository.js","../../src/provider-api/services/fnc/FncPlanRepository.js","../../src/provider-api/services/fnc/FncRepository.js","../../src/provider-api/services/fnc/FncRxRepository.js","../../src/provider-api/services/fnc/FncVisitInfoRepository.js","../../src/provider-api/services/fnc/VisitCommentRepository.js","../../src/provider-api/services/GeneralNotesRepository.js","../../src/provider-api/services/history/HxMedicationRepository.js","../../src/provider-api/services/history/MedicalDevicesRepository.js","../../src/provider-api/services/imo/ImoDiagnosisRepository.js","../../src/provider-api/services/imo/ImoDiagnosisService.js","../../src/provider-api/services/ListService.js","../../src/provider-api/services/locks/Locker.js","../../src/provider-api/services/locks/LockManager.js","../../src/provider-api/services/locks/LockRepository.js","../../src/provider-api/services/locks/MessageLocker.js","../../src/provider-api/services/locks/VisitLocker.js","../../src/provider-api/services/MessageRepository.js","../../src/provider-api/services/MetadataRepository.js","../../src/provider-api/services/MetadataService.js","../../src/provider-api/services/NoteRepository.js","../../src/provider-api/services/patients/ChargeCaptureRepository.js","../../src/provider-api/services/patients/DiagnosisSummaryRepository.js","../../src/provider-api/services/patients/PatientAttachmentRepository.js","../../src/provider-api/services/patients/PatientRecallsRepository.js","../../src/provider-api/services/patients/PatientRepository.js","../../src/provider-api/services/patients/VisitRepository.js","../../src/provider-api/services/PersonRepository.js","../../src/provider-api/services/PharmacyRepository.js","../../src/provider-api/services/prm/GatewayService.js","../../src/provider-api/services/prm/LoginInitializationService.js","../../src/provider-api/services/prm/PdpmpModalService.js","../../src/provider-api/services/prm/PdpmpRepository.js","../../src/provider-api/services/prm/PrmLoginService.js","../../src/provider-api/services/prm/SettingRepository.js","../../src/provider-api/services/PrmUserRepository.js","../../src/provider-api/services/ProcedureRepository.js","../../src/provider-api/services/providers/ProviderRepository.js","../../src/provider-api/services/sigwriter/SigWriterRepository.js","../../src/provider-api/services/users/settings/LicenseService.js","../../src/provider-api/services/users/settings/SettingService.js","../../src/provider-api/services/validation/ValidationResult.js","../../src/provider-api/services/validation/ValidationWarnings.js","../../src/provider-api/services/VersionService.js"],"names":["angular","module","factory","AprimaRestangular","MetadataRepository","$q","moment","AprimaAnalytics","SingleAccessSet","apptListeners","modifiedCalendarIdsForCalendarList","modifiedCalendarIdsForDashboard","getAppointment","uid","appComponent","subRoute","timing","startTiming","restangular","get","all","one","then","appt","getClone","copy","finally","stop","updateAppointment","put","Calendar","add","Id","createAppointment","post","getAppointmentsInternal","calendarId","params","restangularOptions","getList","when","getAppointmentDetails","getAppointmentMetadata","$scope","getMetadata","getDashboardAppointments","calendar","isString","ignoreCache","options","date","format","offsetMinutes","utcOffset","contains","getAppointments","getGroupAppointmentMetadata","getBlockingEventAppointmentMetadata","getEventAppointmentMetadata","getGroupAppointment","getEventAppointment","addListener","callback","indexOf","push","removeListener","pop","getBlockingEventAppointment","updatePatientAppointment","createPatientAppointment","updateGroupAppointment","createGroupAppointment","updateEventAppointment","createEventAppointment","updateBlockingEventAppointment","createBlockingEventAppointment","approve","messageUid","attachmentUid","aprimaRestangular","getAttachment","attachmentId","requestSettings","applicationComponent","disableInLinePdf","inlinePDF","queryString","page","height","width","getAttachmentStaticUrl","getAttachmentRetainOriginalFormat","Object","blockedSlotBehavior","window","defineProperties","None","value","writable","enumerable","configurable","Override","BookInAddition","constant","getDayTemplate","getAppointmentOpenSlots","search","startDate","appointmentTypeId","Error","routePrefix","getdiagnoses","_","partial","abortable","promisesToAbort","paramsObj","result","route","getFn","restElement","data","isNil","reject","api","JSON","stringify","customGet","element","customGET","getDiagnoses","searchString","records","codeType","getModifiers","DosingServiceTs","convertToCommonUnit","dosageUnits","dosageAmount","getDoseRangeInfo","ageInDays","medId","gcnSeqNo","weightKg","heightCm","gestationalAge","doseTypeIndicator","icdCode","promise","toPromise","getMinMaxWarning","sigInstructions","rxParameters","patientDetails","getDosingDetailsFull","visitId","patientId","defaultValue","getVariableDoseRanges","mapDoseParams","Guid","getDrugFormularyInfo","getDrugRepresentativeFormularies","eRxEligibilityId","relVisitMedicationId","pharmacyId","days","dispenseAsWritten","totalQuantity","unitOfMeasureId","previousPMBCParameters","previousRFSParameters","providerId","url","empty","encodeURIComponent","Date","getTime","getDrugFormularyDetail","nddDrugScreening","drug","otherDrugs","previousMedicationSigId","customPOST","Drug","OtherDrugs","PreviousMedicationSigUid","storage","storageKey","requestExternalPatients","set","getExternalPatients","externalPatientListId","defaults","startOf","toJSON","remove","getExternalPatient","hospitalRoundId","addExternalPatient","command","editExternalPatient","HospitalRoundId","customPUT","getAddExternalPatientModelMetadata","getEditExternalPatientModelMetadata","dischargePatient","AprimaCache","ServerInfoRepository","defaultCache","Default","httpMode","getDefault","defaultToMain","serviceSiteId","requiredFeature","cache","isFeatureSupported","withHttpConfig","canSendEpaRequest","sendEpaRequest","postImoDiagnoses","postDiagnoses","deleteDiagnosis","diagnosisId","deleteDiagnoses","diagnosisIds","DeviceSettings","Bridge","getPlans","inactivatePlan","plan","isPrm","fireEvent","PatientId","VisitDate","VisitId","VisitUid","VisitDiagnosisId","VisitDiagnosisUid","catch","error","console","log","saveDefaults","planConfigurationId","configuration","updatePlan","getClinicalNotes","getContext","createVisitFromAppt","appointmentId","clinicalNoteTypeId","AppointmentId","ClinicalNoteTypeId","getAuthCode","patientCaseId","visitDate","addPrescription","prescription","changeMedication","relPatientMedicationId","Prescription","RelPatientMedicationId","changeMedicationFromHistoryOnly","deleteRx","editPrescription","editPrescriptionDiagnosis","problems","getAuthorizedPrescriberList","sigType","getDrugScreeningResults","getNddDrugScreeningResultsFromPatient","getNddDrugScreeningResults","getPrescriberRights","getSigwriterNddDrugScreeningResults","medicationSigId","MedicationSigId","getVisitMedStatus","getVisitMedStatuses","relVisitMedicationIdList","relVisitMedicationIds","Results","getVisitPrescriptions","refillMedication","refillMedicationFromPreviousVisit","SelectedRelVisitMedicationId","startChange","startChangeFromHistoryOnly","startCppMedication","cppMedicationId","startRefill","startRefillFromPreviousVisit","startRefills","relPatientMedicationIds","updateRxPharmacies","RelVisitMedicationIds","PharmacyId","getQueuedMedications","deleteQueuedMedication","updateRxRefill","refillQty","medicaitonDays","create","visitInfo","save","scope","getVisitComment","visitCommentType","visitComment","updateVisitComment","visitCommentTypeDto","service","searchText","generalNoteTypeId","includeInactive","generalNoteTypeUid","getGeneralNoteType","noteTypeOrId","cachedItem","generalNoteTypeCache","plain","saveGeneralNoteTypeSetting","noteTypeKey","generalNoteType","NoteTypeKey","GeneralNoteType","skippedSigwriter","dto","SkippedSigwriter","deleteMedication","medication","RelPatientMedicationUid","getMedicationListFilters","subtype","getPatientTakesNoMeds","getPrescriptionHistory","filterId","FilterId","getPrescriptionHistoryForDiscontinueCancel","RelPatientMedicationIds","getTransitionOfCare","setMedicationFilter","setMedicationFilterDto","setPatientTakesNoMeds","patientTakesNoMeds","setTransitionOfCare","transitionOfCare","getPatientMedStatus","getPatientMedStatuses","relPatientMedicationIdList","discontinueCancelMedications","isRxOnPatientAllergyList","getCompareInfoForDiscontinueCancel","getMedicalDeviceParseUdi","uniqueDeviceId","searchCriteria","UniqueDeviceIdentifier","getMedicalDeviceLookup","deviceId","DeviceIdentifier","getMedicalDevices","createMedicalDevice","createDeviceAttributes","updateMedicalDevice","updateDeviceAttributes","PatientMedicalDeviceHistoryId","displayMedicalDeviceHistory","groupingId","ImoPatient","term","terms","detail","details","count","regularGet","patient","createPatientParams","CountOnly","hasAge","PatientAge","standardizedAge","hasGender","PatientGender","standardizedGender","ImoDiagnosisRepository","code","localCache","getSingle","ImoTerms","codes","ImoDetails","aprimaCache","getData","LexicalCode","isArray","isEmpty","codesToBeLoaded","forEach","item","LexicalCodes","ListRepository","MessageTypes","RequestTypes","medicationsListTypeRegex","getLists","lists","listPromises","map","mapValues","listType","scopeProperty","allPromises","removeHttpError","listData","response","message","status","addHttpError","responseListType","queryListType","name","listParams","test","replace","split","internalGetList","list","plainList","listName","durations","getMinutesDurationObject","getHoursDurationObject","types","subTypes","supportedTypes","SupportedMessageTypesForCreate","Types","supportedSubTypes","SubTypes","filter","t","findIndex","id","messageTypeId","messageSubTypeId","Name","find","MessageTypeId","union","sortBy","getListJs","Lists","getDefaultCache","minutes","prefix","suffix","opts","Description","hours","LockManager","$log","Locker","objArr","lockType","objId","objName","length","self","this","objs","obj","$on","event","args","currentLock","LockInfo","InstanceId","oldLock","newLock","unlock","prototype","lock","LockInstanceId","info","lockInfo","LockType","ObjectId","LockRepository","$rootScope","$interval","CurrentUser","refreshInterval","locks","refreshLocks","isAuthenticated","each","refreshLock","lockResponse","$broadcast","isLocked","objectId","l","findLock","toLowerCase","instanceId","getLocks","cloneDeep","startRefreshingLocks","stopRefreshingLocks","cancel","unsupportedLockTypePromise","getRestangularizedLock","lockObjId","getQueryStringObj","qs","isNewLockingSupported","isLockTypeSupported","startsWith","m","customDELETE","MessageLocker","messageId","call","constructor","VisitLocker","visit","Restangular","messageListeners","getAll","messageFilterId","userId","emitUpdateMessage","i","getDashboardMessages","getMessage","updateBadges","savePhoneMessage","saveTaskMessage","savePortalMessage","replyToPortalMessage","getPhoneMessageDetails","getTaskMessageDetails","getPortalMessageDetails","createTaskMessage","getTaskMessageMetadata","createPhoneMessage","getPhoneMessageMetadata","createPortalMessage","getPortalMessageMetadata","getAttachmentApprovalMessage","saveAttachmentApprovalMessage","getServiceOrderApprovalMessage","saveServiceOrderApprovalMessage","getRxRefillMessage","saveRxRefillMessage","getRxRefillMessageV2","saveRxRefillMessageV2","getPharmacyRefillMessage","request","msg","RefillRequest","hasOwnProperty","PrescribedMedication","Comment","MedicationComment","MedicationDate","Duration","MedicationName","ProductCode","MedicationNdc","ProductCodeDescription","PotencyUnitCode","MedicationPotencyUnitCode","Quantity","MedicationQuantity","QuantityQualifierTerm","MedicationQuantityQualifier","Sig","MedicationSig","Strength","MedicationStrength","StrengthUnits","MedicationStrengthUnits","savePharmacyRefillMessage","getPharmacyRefillMessageMetadata","getPatientPortalMessageRoutingType","$filter","LocalStorageRepository","typeName","metadata","getKey","deferred","defer","resolve","getMetadataFromStorage","getMetadataFromServer","parseRawMetadata","setKey","rawMetadata","Fields","metadataParser","fields","field","propertyName","dots","FieldName","shift","ElementMetadata","Minimum","toDate","Maximum","getObjectFromMetadata","attrs","stack","ngModel","reduce","prop","convertNgModelExprToMetadataExpr","ngModelExpr","getNotes","getProviderChargeCaptures","providerUid","getChargeCapture","patientUid","chargeCaptureUid","chargeCaptureId","getChargeCaptureMetadata","createChargeCapture","editChargeCapture","removeChargeCapture","getDiagnosisSummaries","getDiagnosisSummary","summaryId","modifiedPatientIds","defaultIgnoreCache","getPatientAttachments","getPatientAttachmentGroup","relAttachmentGroupId","addPatientAttachment","patientAttachment","getAddPatientAttachmentMetadata","getRecalls","visitCacheSet","medicationsCacheSet","getPatient","getDemographics","geteRxEligibilities","getAllergies","getPrimaryInsurance","getProblems","internalGetProblems","getActiveProblems","getMedications","getRemarks","getRecentVisits","getOrders","getObservationResults","dataFilter","getVitals","vitalsDefaultSettingId","obsDefaultSettingId","getPatientVitalsDefaultSettingId","observationDefaultSettingId","getObservations","getHealthMaintenanceReminders","getObservationValues","observationOrderId","createPatient","getCreatePatientMetadata","getMostRecentObservationValues","updatePatientPhoto","patientPhoto","getPharmacies","getEmVisits","getMedicationsByGroup","medications","group","medicationsExist","drugClasses","groupValue","DrugClassName","undefined","label","active","IsActive","getPatientDetails","getAccounts","getPatientCases","getPatientInformation","appointmentUid","visitUid","accountUid","deletePatientPharmacy","patientPharmacyUid","setPharmacyOrder","activeOnly","getVisit","getVisitDetail","getVisitDocument","createVisit","$emit","Patient","getVisitByAppointment","getVisitDocumentForVisitText","updatePersonPhoto","getPharmacy","getPharmacyByMasterPharmacyId","searchPharmacies","query","searchPharmaciesIncludeAllMailOrders","includeAllMailOrders","GatewayServiceTs","findClientServer","clientId","gatewayPrefix","LoginInitializationServiceTs","initializeFromPrmLogin","userLoginInfo","initializeFromDesktopLogin","vals","preLogin","gatewayUrl","appServerUrl","username","finishPrmLogin","updateVersionInfo","PdpmpModalServiceTs","openModal","config","shouldAllowModal","PdpmpRepositoryTs","createReport","getConfiguration","PrmLoginServiceTs","login","password","clientFeatures","SettingRepositoryTs","getProviderEpcsSettings","siteId","getUser","searchUsers","inputSearch","quicksearch","getProcedures","getProviderSupervisorListByProviderId","getProviderById","getSupervisorList","getDefaultSupervisor","linkSupervisorDto","checkIsSpecialtyId","ndc","rxnorm","getDirectionsSettings","checkIsSpecialtyMedication","ProviderId","SigType","CheckIsSpecialtyMedication","getDrugCptList","medid","getDrugSettings","initializeDefaultSig","currentRx","providerDefaultSigId","saveDefaultSig","createModifyDefaultSigDto","ProviderDefaultSigId","getDefaultSigMetadata","hasFdbDosingLicense","licenses","getCurrentUserLicenses","HasFdbDosing","hasImoDiagnosisLicense","HasImoDiagnosis","SettingServiceTs","loadSettings","updateNativeSettings","updatePatientDashboardConfiguration","dashboardConfiguration","deletePatientDashboardConfiguration","getSigWriterSettings","imperialUnitsAllowed","getPatientDashboardWidgets","getAppointmentsListSettings","setAppointmentsListSettings","settings","getMessagesListSettings","setMessagesListSettings","getAppointmentsBadgeSettings","setAppointmentsBadgeSettings","getDashboardTileSettings","setDashboardTileSettings","getKdbConfigurationId","renderingProviderId","billingProviderId","getKdbConfigurationIdByVisit","getDrugSearchIncludeInactive","ObjUtil","ValidationResult","mapFromApi","resultObj","HasWarning","Message","hasWarning","defineReadonlyProps","insuranceExclusion","accountId","inOfficeHours","endDate","VersionServiceTs","checkVersions","ensureVersions","SupportedApiVersions","MinClientVersion"],"mappings":"AAAAA,QAAQC,OAAO,sBAAuB,CAClC,cACA,sBACA,SAGA,cACA,gBACA,gBACA,yBCTJD,QAAQC,OAAO,uBAAuBC,QAAQ,wBAC1C,CAAC,oBAAqB,qBAAsB,KAAM,SAAU,kBAAmB,kBAC3E,SAAUC,kBAAmBC,mBAAoBC,GAAIC,OAAQC,gBAAiBC,iBAC1E,aAEA,IAAIC,cAAgB,GAChBC,mCAAqC,IAAIF,gBACzCG,gCAAkC,IAAIH,gBAE1C,SAASI,eAAgBC,IAAKC,aAAcC,UACxC,IAAIC,OAAST,gBAAgBU,YAAYH,cAAgB,wBAAyB,MAAO,kBAErFI,YAAcf,kBAAkBgB,MACpC,OAAOD,YAAYE,IAAI,gBAAkBL,UAAY,KAAKM,IAAIR,KAAKM,MAAMG,KAAK,SAASC,MAOnF,OAJAA,KAAKC,SAAW,WACZ,OAAON,YAAYO,KAAKF,OAGrBA,OACRG,QAAQV,OAAOW,MAuCtB,IAAIC,kBAAoB,SAAUL,MAC9B,IAAIP,OAAST,gBAAgBU,YAAY,wBAAyB,MAAO,qBACzE,OAAOM,KAAKM,MACPH,QAAQV,OAAOW,MACfD,QAAQ,WACFH,KAAKO,WACJpB,mCAAmCqB,IAAIR,KAAKO,SAASE,IACrDrB,gCAAgCoB,IAAIR,KAAKO,SAASE,QAK9DC,kBAAoB,SAAUV,KAAMR,UACpC,IAAIC,OAAST,gBAAgBU,YAAY,wBAAyB,MAAO,qBACzE,OAAOd,kBAAkBgB,MAAMC,IAAI,gBAAkBL,UAAY,KAC5DmB,KAAKX,MACLG,QAAQV,OAAOW,MACfD,QAAQ,WACFH,KAAKO,WACJpB,mCAAmCqB,IAAIR,KAAKO,SAASE,IACrDrB,gCAAgCoB,IAAIR,KAAKO,SAASE,QAmFlE,SAASG,wBAAyBC,WAAYC,OAAQC,mBAAoBxB,cACtE,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,wBAAyB,MAAO,mBACzF,OAAIsB,WACOjC,kBAAkBgB,IAAImB,oBACxBlB,IAAI,aAAegB,WAAa,iBAChCG,QAAQF,QACRX,QAAQV,OAAOW,MAGjBtB,GAAGmC,KAAK,IAGnB,MAAO,CACHC,sBAxJJ,SAAgC5B,IAAKC,cACjC,OAAOF,eAAeC,IAAKC,eAwJ3B4B,uBAzIJ,SAAiCC,QAC7B,IAAI3B,OAAST,gBAAgBU,YAAY,wBAAyB,MAAO,0BACzE,OAAOb,mBAAmBwC,YAAY,oBAAqBD,QAAQjB,QAAQV,OAAOW,OAwIlFkB,yBA5DJ,SAAkCC,SAAUR,mBAAoBxB,cACzDd,QAAQ+C,SAAST,sBAChBxB,aAAewB,mBACfA,mBAAqB,MAGzBA,mBAAqBA,oBAAsB,CAAEU,aAAa,GAE1D,IAAIZ,WAAaU,SAASd,IAAM,KAC5BiB,QAAU,CACVC,KAAM5C,SAAS6C,OAAO,cACtBC,cAAe9C,SAAS+C,aAK5B,OAFAf,mBAAmBU,YAAcrC,gCAAgC2C,SAASlB,aAAeE,mBAAmBU,YAErGb,wBAAwBC,WAAYa,QAASX,mBAAoBxB,eA6CxEyC,gBA7BJ,SAAyBnB,WAAYC,OAAQC,mBAAoBxB,cAU7D,OATGd,QAAQ+C,SAAST,sBAChBxB,aAAewB,mBACfA,mBAAqB,OAGzBA,mBAAqBA,oBAAsB,CAAEU,aAAa,IAEvCA,YAActC,mCAAmC4C,SAASlB,aAAeE,mBAAmBU,YAExGb,wBAAwBC,WAAYC,OAAQC,mBAAoBxB,eAoBvE0C,4BAvIJ,SAAsCb,QAClC,IAAI3B,OAAST,gBAAgBU,YAAY,wBAAyB,MAAO,0BACzE,OAAOb,mBAAmBwC,YAAY,wBAAyBD,QAAQjB,QAAQV,OAAOW,OAsItF8B,oCAnIJ,SAA8Cd,QAC1C,IAAI3B,OAAST,gBAAgBU,YAAY,wBAAyB,MAAO,0BACzE,OAAOb,mBAAmBwC,YAAY,2BAA4BD,QAAQjB,QAAQV,OAAOW,OAkIzF+B,4BA/HJ,SAAsCf,QAClC,IAAI3B,OAAST,gBAAgBU,YAAY,wBAAyB,MAAO,0BACzE,OAAOb,mBAAmBwC,YAAY,mBAAoBD,QAAQjB,QAAQV,OAAOW,OA8HjFgC,oBA3JJ,SAA8B9C,IAAKC,cAC/B,OAAOF,eAAeC,IAAKC,aAAc,iBA2JzC8C,oBAxJJ,SAA8B/C,IAAKC,cAC/B,OAAOF,eAAeC,IAAKC,aAAc,WAwJzC+C,YA/CJ,SAAqBC,UACbrD,eAAiBqD,UAAYrD,cAAcsD,QAAQD,UAAY,GAC/DrD,cAAcuD,KAAKF,WA8CvBG,eA1CJ,SAAwBH,UAChBrD,eAAiBqD,UAA+C,GAAnCrD,cAAcsD,QAAQD,WACnDrD,cAAcyD,IAAIJ,WAyCtBK,4BAvJJ,SAAsCtD,IAAKC,cACvC,OAAOF,eAAeC,IAAKC,aAAc,oBAuJzCsD,yBAtGJ,SAAmC7C,MAC/B,OAAOK,kBAAkBL,OAsGzB8C,yBAvFJ,SAAmC9C,MAC/B,OAAOU,kBAAkBV,OAuFzB+C,uBApGJ,SAAiC/C,MAC7B,OAAOK,kBAAkBL,OAoGzBgD,uBArFJ,SAAiChD,MAC7B,OAAOU,kBAAkBV,KAAM,iBAqF/BiD,uBAlGJ,SAAiCjD,MAC7B,OAAOK,kBAAkBL,OAkGzBkD,uBAnFJ,SAAiClD,MAC7B,OAAOU,kBAAkBV,KAAM,WAmF/BmD,+BAhGJ,SAAyCnD,MACrC,OAAOK,kBAAkBL,OAgGzBoD,+BAjFJ,SAAyCpD,MACrC,OAAOU,kBAAkBV,KAAM,wBCnH/CvB,QAAQC,OAAO,uBAAuBC,QAAQ,+BAAgC,CAAC,oBAC3E,SAAUC,mBACN,aAQA,MAAO,CACHyE,QAPU,SAAUC,WAAYC,eAEhC,OADkB3E,kBAAkBgB,MACjBE,IAAI,YAAawD,YAAYxD,IAAI,UAAWyD,eAAe5C,YCN1FlC,QAAQC,OAAO,uBACVC,QAAQ,uBAAwB,CAAC,oBAAqB,kBAAmB,SAAU6E,kBAAmBxE,iBACnG,aAsBA,MAAO,CACHyE,cArBgB,SAAUC,aAAcC,gBAAiBC,qBAAsBC,kBAC/E,IAAIpE,OAAST,gBAAgBU,YAAYkE,sBAAwB,uBAAwB,MAAO,iBAC5FE,WAAY,iBACfC,YAAc,SAAWJ,gBAAgBK,KAAO,WAAaL,gBAAgBM,OAAS,UAAYN,gBAAgBO,MAAQ,cAAgBJ,UAE3I,OAAON,kBAAkB5D,MAAME,IAAI,eAAiB4D,aAAeK,aAAanE,MAAMO,QAAQV,OAAOW,OAiBrG+D,uBAdyB,SAAUT,aAAcE,sBACjD,IAAInE,OAAST,gBAAgBU,YAAYkE,sBAAwB,uBAAwB,MAAO,0BAEhG,OAAOJ,kBAAkB5D,MAAME,IAAI,mBAAqB4D,cAAc9D,MAAMO,QAAQV,OAAOW,OAY3FgE,kCAToC,SAAUV,aAAcE,sBAC5D,IAAInE,OAAST,gBAAgBU,YAAYkE,sBAAwB,uBAAwB,MAAO,qCAEhG,OAAOJ,kBAAkB5D,MAAME,IAAI,eAAiB4D,aADlC,8BAC8D9D,MAAMO,QAAQV,OAAOW,WCrBjH,SAAU3B,QAAS4F,QACf,aAEA,IAAIC,oBAAsB,GAwBXC,OAAOF,OAvBfG,iBAAiBF,oBAAqB,CACzCG,KAAM,CACFC,MAAO,OACPC,UAAU,EACVC,YAAY,EACZC,cAAc,GAElBC,SAAU,CACNJ,MAAO,WACPC,UAAU,EACVC,YAAY,EACZC,cAAc,GAElBE,eAAgB,CACZL,MAAO,iBACPC,UAAU,EACVC,YAAY,EACZC,cAAc,KAKtBpG,QAAQC,OAAO,uBAAuBsG,SAAS,sBAAuBV,qBA1B1E,CA2BGC,OAAO9F,SC3BVA,QAAQC,OAAO,uBAAuBC,QAAQ,qBAC1C,CAAC,oBAAqB,KAClB,SAAUC,kBAAmBE,IACzB,aAEA,MAAO,CACHmG,eAIJ,SAAwBpE,WAAYC,QAEhC,GAAID,WACA,OAAOjC,kBAAkBgB,MACpBC,IAAI,aAAegB,WAAa,gBAChCG,QAAQF,QAGjB,OAAOhC,GAAGmC,KAAK,KAXfiE,wBAeJ,SAAiCC,QAC7B,OAAIA,OAIAA,OAAOtE,WAIPsE,OAAOxD,MAIXwD,OAAS,CACLtE,WAAYsE,OAAOtE,WACnBuE,UAAWD,OAAOxD,KAClB0D,kBAAmBF,OAAOE,mBAGvBzG,kBAAkBgB,MACpBC,IAAI,aAAaC,IAAIqF,OAAOtE,YAAYhB,IAAI,qBAC5CmB,QAAQmE,SAXFrG,GAAGmC,KAAK,IAAIqE,MAAM,yBAJlBxG,GAAGmC,KAAK,IAAIqE,MAAM,+BAJlBxG,GAAGmC,KAAK,IAAIqE,MAAM,uCCxB7C,SAAU7G,SACN,aAwDD8F,OAAO9F,QAtDEC,OAAO,uBAAuBC,QAAQ,4BAA6B,CACvE,KACA,kBACA,oBAIJ,SACIG,GACAE,gBACAJ,mBAEA,IAAI2G,YAAc,mBAOlB,MALc,CACVC,aAAcC,EAAEC,QAAQF,aAAc,MACtCG,UAKJ,SAAmBC,iBACf,MAAO,CACHJ,aAAcC,EAAEC,QAAQF,aAAcI,oBAK9C,SAASJ,aAAaI,gBAAgBC,WAClC,IAAIC,OAKT,SAAaF,gBAAiBG,MAAOjF,OAAQkF,OACxC,IAAIC,YAAcrH,kBAAkBgB,MAAMC,IAAI0F,aAAa1F,IAAIkG,OAC5DH,kBACCK,YAAcA,YAAYN,UAAUC,kBAGxC,OAAOI,MAAMC,YAAanF,QAAQf,KAAK,SAASmG,MAC5C,OAAGT,EAAEU,MAAMD,MACApH,GAAGsH,OAAO,OAASC,IAAM,+BAAiCC,KAAKC,UAAUzF,SAG7EoF,OAhBAtG,CAAIgG,gBAAgB,eAAeC,UAAUW,WACxD,OAAOV,OAmBX,SAASU,UAAUC,QAAS3F,QACxB,OAAO2F,QAAQC,UAAU,GAAI5F,YArDzC,GCAArC,QAAQC,OAAO,uBACVC,QAAQ,sBAAuB,CAAC,oBAAqB,SAAU6E,mBAC5D,aAwBA,MAAO,CACHmD,aAvBe,SAAUC,aAAcC,QAASC,UAGnD,IAAI/C,YAAc,gBAFf8C,QAAUA,SAAW,IAcrB,OAPI9C,aAHA+C,SAEmB,UAAbA,SACS,cAEA,aAJA,kBAOnB/C,aAAe6C,aAERpD,kBAAkB5D,MAAMC,IAAI,aAAekE,aAAa/C,WAS/D+F,aANe,WACf,OAAOvD,kBAAkB5D,MAAMC,IAAI,uBAAuBmB,eCvBtE,SAAUvC,SACN,aAsED8F,OAAO9F,QApEEC,OAAO,uBAAuBC,QAAQ,gBAAiB,CAC3D,KACA,kBAIJ,SACIG,GACAkI,iBAYA,MATc,CACVC,oBA0CJ,SAA6BC,YAAaC,cACtC,OAAOH,gBAAgBC,oBAAoBC,YAAaC,eA1CxDC,iBASJ,SACIC,UACAC,MACAC,SACAC,SACAC,SACAC,eACAC,kBACAC,SAEA,IAAIC,QAAUb,gBAAgBI,iBAC1BC,UACAC,MACAC,SACAC,SACAC,SACAC,eACAC,kBACAC,SACFE,YACF,OAAOhJ,GAAGmC,KAAK4G,UA5BfE,iBA+BJ,SAA0BC,gBAAiBC,aAAcC,gBACrD,IAAIL,QAAUb,gBAAgBe,iBAAiBC,gBAAiBC,aAAcC,gBAAgBJ,YAC9F,OAAOhJ,GAAGmC,KAAK4G,UAhCfM,qBA2CJ,SAA8BC,QAASC,UAAWC,cAC9C,IAAIT,QAAUb,gBAAgBmB,qBAAqBC,QAASC,UAAWC,cAAcR,YACrF,OAAOhJ,GAAGmC,KAAK4G,UA5CfU,sBA+CJ,SAA+BhB,UAC3B,IAAIM,QAAUb,gBAAgBuB,sBAAsBhB,UAAUO,YAC9D,OAAOhJ,GAAGmC,KAAK4G,UAhDfW,cAiCJ,SAAuBR,gBAAiBC,aAAcC,gBAClD,OAAOlB,gBAAgBwB,cAAcR,gBAAiBC,aAAcC,qBAtDhF,GCAAzJ,QAAQC,OAAO,uBAAuBC,QAAQ,iBAC1C,CAAC,IAAK,oBAAqB,kBAAmB,OAC1C,SAAU8G,EAAG7G,kBAAmBI,gBAAiByJ,MAC7C,aAEA,MAAO,CACHC,qBAOJ,SAA8BpB,MAAOe,UAAWtH,oBAC5CA,mBAAqBA,oBAAsB,CAACU,aAAa,GAEzD,IAAIhC,OAAST,gBAAgBU,YAAY,iBAAkB,MAAO,2BAElE,OADkBd,kBAAkBgB,IAAImB,oBACrBlB,IAAI,SAAWyH,MAAQ,0BAA4Be,WACnDrH,UACAb,QAAQV,OAAOW,OAblCuI,iCAgBJ,SAA0CrB,MAAOsB,iBAAkBP,UAAWQ,qBAAsBC,WAAYC,KAAMC,kBAAmBC,cAAeC,gBAAiBC,uBAAwBC,sBAAuBC,WAAYtI,oBAChOA,mBAAqBA,oBAAsB,CAACU,aAAa,GAEzD,IAAIhC,OAAST,gBAAgBU,YAAY,iBAAkB,MAAO,uCAC9DC,YAAcf,kBAAkBgB,IAAImB,oBACpCuI,IAAM,SAAWhC,MACX,+BAAiCsB,kBAAoBH,KAAKc,SAC1D,UAAYR,MAAQ,IACpB,uBAAyBC,mBAAqB,IAC9C,kCAAoCH,sBAAwB,IAC5D,eAAiBR,WAAa,IAC9B,gBAAkBS,YAAcL,KAAKc,SACrC,mBAAqBN,eAAiB,IACtC,qBAAuBC,iBAAmB,IAC1C,4BAA8BC,uBAAyBK,mBAAmBL,wBAA0B,IACpG,2BAA6BC,sBAAwBI,mBAAmBJ,uBAAyB,IACjG,gBAAkBC,YAAcZ,KAAKc,UACpCjC,MAAQ,GAAK,iBAAkB,IAAKmC,MAAQC,WACvD,OAAO/J,YAAYG,IAAIwJ,KACJ1J,MACAO,QAAQV,OAAOW,OAnClCuJ,uBAsCJ,SAAgCrC,MAAOe,UAAWtH,oBAC9CA,mBAAqBA,oBAAsB,CAACU,aAAa,GAEzD,IAAIhC,OAAST,gBAAgBU,cAE7B,OADkBd,kBAAkBgB,IAAImB,oBACrBlB,IAAI,SAAWyH,MAAQ,oBAAsBe,WAAWrH,UAAUb,QAAQV,OAAOW,OA1CpGwJ,iBA6CJ,SAA0BvB,UAAWwB,KAAMC,WAAYC,yBACnD,IAAItK,OAAST,gBAAgBU,YAAY,iBAAkB,MAAO,oBAElE,OADkBd,kBAAkBgB,MACjBE,IAAI,YAAcuI,UAAY,iBAC9B2B,WAAW,CACRC,KAAMJ,KACNK,WAAYJ,WACZK,yBAA0BJ,0BAE7B5J,QAAQV,OAAOW,WC/DlD3B,QAAQC,OAAO,uBAAuBC,QAAQ,6BAA8B,CAAC,oBAAqB,qBAAsB,kBAAmB,UAAW,IAClJ,SAAUC,kBAAmBC,mBAAoBG,gBAAiBoL,QAAS3E,GACvE,aAEA,IAAI4E,WAAa,gCAMjB,SAASC,wBAAwBxE,QAE7B,OADAsE,QAAQG,IAAIF,YAAY,GACjBvE,OAiDX,MAAO,CACH0E,oBA/CJ,SAA6BC,sBAAuB1J,mBAAoBxB,cACpEwB,mBAAqB0E,EAAEiF,SAAS3J,oBAAsB,GAAI,CAACU,YATpD2I,QAAQxK,IAAIyK,cAAe,IAWlC,IAAI5K,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,uBAErF,OADkBX,kBAAkBgB,IAAImB,oBACrBlB,IAAI,oBAAsB4K,uBAAuBzJ,QAAQ,CACxEW,KAAM5C,SAAS4L,QAAQ,OAAOC,WAC/BzK,QAAQ,WACPV,OAAOW,OAEJW,mBAAmBU,aAClB2I,QAAQS,OAAOR,eAqCvBS,mBAhCJ,SAA4BC,iBACxB,OAAOnM,kBAAkBgB,MAAMC,IAAI,oBAAoBC,IAAI,YAAYA,IAAIiL,iBAAiBnL,OAgC5FoL,mBA7BJ,SAA4BC,SACxB,OAAOrM,kBAAkBgB,MAAMC,IAAI,oBAAoBc,KAAKsK,SAASlL,KAAKuK,0BA6B1EY,oBA1BJ,SAA6BD,SACzB,OAAOrM,kBAAkBgB,MAAMC,IAAI,oBAAoBC,IAAI,YAAYA,IAAImL,QAAQE,iBAAiBC,UAAUH,SAASlL,KAAKuK,0BA0B5He,mCAvBJ,SAA4CjK,QACxC,OAAOvC,mBAAmBwC,YAAY,qBAAsBD,SAuB5DkK,oCApBJ,SAA6ClK,QACzC,OAAOvC,mBAAmBwC,YAAY,sBAAuBD,SAoB7DmK,iBAjBJ,SAA0BR,iBACtB,OAAOnM,kBAAkBgB,MACpBC,IAAI,oBACJC,IAAIiL,iBACJpK,KAAK,GAAI,CACNwK,gBAAiBJ,kBAEpBhL,KAAKuK,8BC1DtB,SAAU7L,SACN,aAKAA,QAAQC,OAAO,uBAAuBC,QAHpB,yBAGyC,CACvD,IACA,KACA,kBACA,cACA,oBACA,uBAIJ,SACI8G,EACA3G,GACAE,gBACAwM,YACA5M,kBACA6M,sBAEA,IAAIC,aAAeF,YAAYG,QAAQC,SAMvC,MAJc,CACVC,WAKJ,SAAoBC,cAAezC,WAAY0C,cAAelL,YAQ1D,OAGJ,SAAakF,MAAOjF,OAAQkL,gBAAiBC,OACzC,GAAGD,kBAAoBP,qBAAqBS,mBAAmBF,iBAC3D,OAAOlN,GAAGmC,KAAK,MAGnB,IAAIxB,OAAST,gBAAgBU,YA7CnB,yBA6C4C,MAAOqG,OAO7D,OANanH,kBAAkBgB,MAC1BE,IA9CG,mBA8CYiG,OACfoG,eAAe,CAACF,MAAOA,QACvBrM,IAAIkB,QACJX,QAAQV,OAAOW,MAdPR,CAAI,UANJ,CACTkM,gBAAiBA,cACjBzC,WAAYA,WACZ0C,cAAeA,cACflL,WAAYA,YAEoB,yBAA0B6K,mBAvC1E,CA2DGnH,OAAO9F,SC3DV,SAAUA,SACN,aAgCD8F,OAAO9F,QA9BEC,OAAO,uBAAuBC,QAAQ,gBAAiB,CAC3D,oBAIJ,SACIC,mBAOA,MALc,CACVwN,kBAMJ,WAII,OAHcxN,kBAAkBgB,MAC3BE,IAAI,sBAAuB,oBAC3BF,OARLyM,eAYJ,SAAwBxD,sBAKpB,OAJcjK,kBAAkBgB,MAC3BE,IAAI,KAAM+I,sBACVhJ,IAAI,eACJc,YA7BjB,GCAA,WACI,aAEAlC,QAAQC,OAAO,uBAAuBC,QAAQ,kBAAmB,CAC7D,oBAIJ,SACIC,mBAEA,MAAO,CACH+H,aAOJ,SAAsB0B,UAAWD,SAC7B,OAAOxJ,kBAAkBgB,MACpBE,IAAI,WAAYuI,WAChBvI,IAAI,MAAOsI,SACXvI,IAAI,MACJmB,WAXLsL,iBAcJ,SAA0BjE,UAAWD,QAAStC,QAC1C,OAAOlH,kBAAkBgB,MACpBE,IAAI,WAAYuI,WAChBvI,IAAI,MAAOsI,SACXvI,IAAI,WACJc,KAAKmF,SAlBVyG,cAqBJ,SAAuBlE,UAAWD,QAAStC,QACvC,OAAOlH,kBAAkBgB,MACpBE,IAAI,WAAYuI,WAChBvI,IAAI,MAAOsI,SACXvI,IAAI,MACJc,KAAKmF,SAzBV0G,gBA4BJ,SAAyBnE,UAAWD,QAASqE,aACzC,OAAO7N,kBAAkBgB,MACpBE,IAAI,WAAYuI,WAChBvI,IAAI,MAAOsI,SACXtI,IAAI,KAAM2M,aACV5B,UAhCL6B,gBAmCJ,SAAyBrE,UAAWD,QAASuE,cACzC,OAAO/N,kBAAkBgB,MACpBE,IAAI,WAAYuI,WAChBvI,IAAI,MAAOsI,SACXvI,IAAI,MACJgL,OAAO,CACJ8B,aAAcA,oBAzDlC,GCAA,WACI,aACAlO,QAAQC,OAAO,uBAAuBC,QAAQ,oBAAqB,CAAC,oBAAqB,iBAAkB,KAAM,SAC7G,SAAUC,kBAAmBgO,eAAgB9N,GAAI+N,QAC7C,MAAO,CACHC,SAMJ,SAAkBzE,UAAWD,SACzB,IAAIkB,IAAM,YAAcjB,UAAY,QAAUD,QAAU,QACxD,OAAOxJ,kBAAkBgB,IAAI,CAAE6B,aAAa,IAAQ5B,IAAIyJ,KAAKtI,WAP7D+L,eAUJ,SAAwBC,KAAM3E,WAC1B,GAAGuE,eAAeK,MACdJ,OAAOK,UAAU,uBAAwB,CACrCC,UAAW9E,UACX+E,UAAWJ,KAAKI,UAChBC,QAASL,KAAKM,SACdC,iBAAkBP,KAAKQ,wBAG1B,CACD,IAAIlE,IAAM,YAAcjB,UAAY,QAAU2E,KAAKM,SAAW,wBAA0BN,KAAKQ,kBAC7F5O,kBAAkBgB,IAAI,CAAE6B,aAAa,IAAQ5B,IAAIyJ,KAAK3I,OACjDZ,KAAK,WACF8M,OAAOK,UAAU,wBAAyBF,KAAKQ,qBAElDC,MAAM,SAAUC,OACbC,QAAQC,IAAI,iCAAmCF,WAzB3DG,aA8BJ,SAAsBxF,UAAWD,QAAS0F,oBAAqBC,eAE3D,IAAIzE,IAAM,YAAcjB,UAAY,QAAUD,QAAU,kBAAoB0F,oBAC5E,OAAOlP,kBAAkBgB,IAAI,CAAE6B,aAAa,IAAQ5B,IAAIyJ,KAAK3I,KAAKoN,gBAhClEC,WAmCJ,SAAoBhB,MAChB,OAAOA,KAAK1M,WA5C5B,GCAA,WACI,aAEA7B,QAAQC,OAAO,uBAAuBC,QAAQ,gBAAiB,CAC3D,kBACA,oBAIJ,SACIK,gBACAJ,mBAEA,MAAO,CACHqP,iBAMJ,SAA0B5E,YACtB,IAAI5J,OAAST,gBAAgBU,YAAY,gBAAiB,MAAO,oBAEjE,OADkBd,kBAAkBgB,MAE/BC,IAAI,yBAA2BwJ,YAC/BrI,UACAb,QAAQV,OAAOW,OAXpB8N,WAcJ,SAAoB7F,UAAWD,SAC3B,IAAI3I,OAAST,gBAAgBU,YAAY,gBAAiB,MAAO,cAEjE,OADkBd,kBAAkBgB,MAE/BE,IAAI,YAAcuI,UAAY,QAAUD,QAAU,YAClDxI,MACAO,QAAQV,OAAOW,OAnBpB+N,oBAsBJ,SAA6BC,cAAeC,oBACxC,IAAI5O,OAAST,gBAAgBU,YAAY,gBAAiB,MAAO,uBAEjE,OADkBd,kBAAkBgB,MAE/BC,IAAI,OACJc,KAAK,CACF2N,cAAeF,cACfG,mBAAoBF,qBAEvBlO,QAAQV,OAAOW,OA9BpBoO,YAiCJ,SAAqBC,cAAeC,WAChC,IAAIjP,OAAST,gBAAgBU,YAAY,gBAAiB,MAAO,eAEjE,OADkBd,kBAAkBgB,MAE/BE,IAAI,mBAAoB2O,eACxB/H,UAAU,oBAAqB,CAC5BgI,UAAWA,YAEdvO,QAAQV,OAAOW,WA1DhC,GCAA,SAAU3B,SACN,aAEAA,QAAQC,OAAO,uBAAuBC,QAAQ,kBAAmB,CAC7D,oBACA,kBAIJ,SACIC,kBACAI,iBAEA,MAAO,CACH2P,gBA6BJ,SAAyBtG,UAAWD,QAASwG,cACzC,IAAInP,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,mBAEnE,OADkBd,kBAAkBgB,MAE/BC,IAAI,YAAcwI,UAAY,QAAUD,QAAU,uBAClDzH,KAAKiO,cACLzO,QAAQV,OAAOW,OAlCpByO,iBAgLJ,SAA0BxG,UAAWD,QAAS0G,uBAAwBF,cAC9D,IAAInP,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,oBAEnE,OADkBd,kBAAkBgB,MACjBC,IAAI,YAAcwI,UAAY,QAAUD,QAAU,2BAChEzH,KAAK,CACFoO,aAAcH,aACdI,uBAAwBF,yBAE/B3O,QAAQV,OAAOW,OAvLpB6O,gCA0LJ,SAAyC5G,UAAWD,QAAS0G,uBAAwBF,cACjF,IAAInP,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,mCAEnE,OADkBd,kBAAkBgB,MACjBC,IAAI,YAAcwI,UAAY,QAAUD,QAAU,6CAChEzH,KAAK,CACFoO,aAAcH,aACdI,uBAAwBF,yBAE/B3O,QAAQV,OAAOW,OAjMhB8O,SAmCJ,SAAkBrG,sBACd,OAAOjK,kBAAkBgB,MACpBE,IAAI,SAAU+I,sBACdgC,UArCLsE,iBAkDJ,SAA0B9G,UAAWD,QAASwG,cAC1C,IAAInP,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,oBAEnE,OADkBd,kBAAkBgB,MAE/BC,IAAI,YAAcwI,UAAY,QAAUD,QAAU,wBAClDzH,KAAKiO,cACLzO,QAAQV,OAAOW,OAvDpBgP,0BA0DJ,SAAmC/G,UAAWD,QAASS,qBAAsBwG,UACzE,IAAI5P,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,6BAEnE,OADkBd,kBAAkBgB,MAE/BC,IAAI,YAAcwI,UAAY,QAAUD,QAAU,OAASS,qBAAuB,8BAClFlI,KAAK0O,UACLlP,QAAQV,OAAOW,OA/DpBkP,4BAsCJ,SAAqCC,SACjC,IAAI9P,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,+BACnE,OAAOd,kBAAkBgB,MACAC,IAAI,mCACJmB,QAAQ,CACLuO,QAASA,UAEZpP,QAAQV,OAAOW,OA5CxCoP,wBAiEJ,SAAiCnH,UAAWD,SACxC,IAAI3I,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,iBAEnE,OADkBd,kBAAkBgB,MACjBE,IAAI,YAAcuI,UAAY,QAAUD,QAAU,iBAClDxI,MACAO,QAAQV,OAAOW,OArElCqP,sCAwEJ,SAA+CpH,WAC3C,IAAI5I,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,yCAEnE,OADkBd,kBAAkBgB,MACjBE,IAAI,YAAcuI,UAAY,wBAC9BzI,MACAO,QAAQV,OAAOW,OA5ElCsP,2BA+EJ,SAAoCrH,UAAWD,SAC3C,IAAI3I,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,oBAEnE,OADkBd,kBAAkBgB,MACjBE,IAAI,YAAcuI,UAAY,QAAUD,QAAU,oBAClDxI,MACAO,QAAQV,OAAOW,OAnFlCuP,oBAsFJ,WACI,IAAIlQ,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,uBACnE,OAAOd,kBAAkBgB,MACAE,IAAI,2BACJF,MACAO,QAAQV,OAAOW,OA1FxCwP,oCA6FJ,SAA6CvH,UAAWD,QAASyB,KAAMgG,iBACnE,IAAIpQ,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,0BAEnE,OADkBd,kBAAkBgB,MACjBC,IAAI,YAAcwI,UAAY,QAAUD,QAAU,8BAClDzH,KAAK,CACFsJ,KAAMJ,KACNiG,gBAAiBD,kBAEpB1P,QAAQV,OAAOW,OApGlC2P,kBAuGJ,SAAkClH,sBAC9B,IAAIpJ,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,4BAUnE,OATkBd,kBAAkBgB,MAG/BC,IAAI,OACJA,IAAI,MACJC,IAAI,0BAA2B+I,sBAC/BjJ,MACAO,QAAQV,OAAOW,OA/GpB4P,oBAoHJ,SAAoCC,0BAChC,IAAIxQ,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,8BAC/DC,YAAcf,kBAAkBgB,MAChCkB,OAAS,CACToP,sBAAuBD,0BAmB3B,OAhBctQ,YACTE,IAAI,OACJA,IAAI,MACJA,IAAI,2BACJ6G,UAAU,GAAI5F,QACdf,KAAK,SAASmG,MACX,OAAIA,MAASA,KAAKiK,QAMXjK,KAAKiK,QALDrR,GAAGsH,OAAO,4CAOxBjG,QAAQV,OAAOW,OAxIpBgQ,sBA6IJ,SAA+B/H,UAAWD,SACtC,IAAI3I,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,yBACnE,OAAOd,kBAAkBgB,MACAC,IAAI,YAAcwI,UAAY,QAAUD,QAAU,OAClDpH,UACAb,QAAQV,OAAOW,OAjJxCiQ,iBAwLJ,SAA0BhI,UAAWD,QAAS0G,uBAAwBF,cAClE,IAAInP,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,oBAEnE,OADkBd,kBAAkBgB,MACjBC,IAAI,YAAcwI,UAAY,QAAUD,QAAU,0BAClDzH,KAAK,CACFoO,aAAcH,aACdI,uBAAwBF,yBAE3B3O,QAAQV,OAAOW,OA/LlCkQ,kCAkMJ,SAA2CjI,UAAWD,QAASS,qBAAsB+F,cACjF,IAAInP,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,qCAYnE,OAXkBd,kBAAkBgB,MAG/BE,IAAI,WAAYuI,WAChBvI,IAAI,MAAOsI,SACXvI,IAAI,yCACJc,KAAK,CACFoO,aAAcH,aACd2B,6BAA8B1H,uBAEjC1I,QAAQV,OAAOW,OA7MpBoQ,YAiNJ,SAAqBnI,UAAWD,QAAS0G,uBAAwBS,SAC7D,IAAI9P,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,eAEnE,OADkBd,kBAAkBgB,MACjBE,IAAI,YAAcuI,UAAY,QAAUD,QAAU,oBAChExI,IAAI,CACDkP,uBAAwBA,uBACxBS,QAASA,UAEZpP,QAAQV,OAAOW,OAxNpBqQ,2BA2NJ,SAAoCpI,UAAWD,QAAS0G,uBAAwBS,SAC5E,IAAI9P,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,8BAEnE,OADkBd,kBAAkBgB,MACjBE,IAAI,YAAcuI,UAAY,QAAUD,QAAU,sCACpExI,IAAI,CACDkP,uBAAwBA,uBACxBS,QAASA,UAEZpP,QAAQV,OAAOW,OAlOhBsQ,mBAqOJ,SAA4BrI,UAAWD,QAASuI,gBAAiBpB,SAC7D,IAAI9P,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,sBAEnE,OADkBd,kBAAkBgB,MACjBE,IAAI,YAAcuI,UAAY,QAAUD,QAAU,4BAClDxI,IAAI,CACD+Q,gBAAiBA,gBACjBpB,QAASA,UAEZpP,QAAQV,OAAOW,OA5OlCwQ,YA+OJ,SAAqBvI,UAAWD,QAAS0G,uBAAwBS,SAC7D,IAAI9P,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,eAEnE,OADkBd,kBAAkBgB,MACjBE,IAAI,YAAcuI,UAAY,QAAUD,QAAU,mBAClDxI,IAAI,CACDkP,uBAAwBA,uBACxBS,QAASA,UAEZpP,QAAQV,OAAOW,OAtPlCyQ,6BAyPJ,SAAsCxI,UAAWD,QAASS,qBAAsB0G,SAC5E,IAAI9P,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,gCAWnE,OAVkBd,kBAAkBgB,MAG/BE,IAAI,WAAYuI,WAChBvI,IAAI,MAAOsI,SACX1B,UAAU,iCAAkC,CACzCmC,qBAAsBA,qBACtB0G,QAASA,UAEZpP,QAAQV,OAAOW,OAnQpB0Q,aAuQJ,SAAsBzI,UAAWD,QAAS2I,wBAAyBxB,SAC/D,IAAI9P,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,gBAEnE,OADkBd,kBAAkBgB,MACjBE,IAAI,YAAcuI,UAAY,QAAUD,QAAU,oBAClDxI,IAAI,CACDmR,wBAAyBA,wBACzBxB,QAASA,UAEZpP,QAAQV,OAAOW,OA9QlC4Q,mBAiRJ,SAA4Bd,sBAAuB7H,UAAWS,YAC1D,IAAIrJ,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,sBACnE,OAAOd,kBAAkBgB,MACpBC,IAAI,mBACJc,KAAK,CAACsQ,sBAAuBf,sBAAuB/C,UAAW9E,UAAW6I,WAAYpI,aACtF3I,QAAQV,OAAOW,OArRpB+Q,qBA2IJ,SAA8B9I,WAC1B,IAAI5I,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,yBACnE,OAAOd,kBAAkBgB,MACAC,IAAI,YAAcwI,UAAY,kBAC9BrH,UACAb,QAAQV,OAAOW,OA/IxCgR,uBAkJJ,SAAgCvI,sBAC5B,OAAOjK,kBAAkBgB,MACAE,IAAI,iBAAkB+I,sBACtBgC,UApJzBwG,eAsRJ,SAAwBhJ,UAAWD,QAASS,qBAAsByI,UAAWC,gBACzE,IAAI9R,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,oBAEnE,OADkBd,kBAAkBgB,MAE/BC,IAAI,YAAcwI,UAAY,QAAUD,QAAU,OAAOS,qBAAqB,WAAWyI,UAAU,SAASC,gBAC5G5Q,OACAR,QAAQV,OAAOW,WApUhC,CAuUG3B,SCvUH,SAAUA,SACN,aAuDD8F,OAAO9F,QArDEC,OAAO,uBAAuBC,QAAQ,yBAA0B,CACpE,kBACA,oBACA,qBAIJ,SACIK,gBACAJ,kBACAC,oBASA,MAPc,CACV2S,OAQJ,SAAyBC,WACrB,IAAIhS,OAAST,gBAAgBU,YAAY,gBAAiB,MAAO,mBAEjE,OADkBd,kBAAkBgB,MAE/BC,IAAI,kBACJc,KAAK8Q,WACLtR,QAAQV,OAAOW,OAbpBsR,KAgBJ,SAAuBD,WACnB,IAAIhS,OAAST,gBAAgBU,YAAY,gBAAiB,MAAO,iBAEjE,OADkBd,kBAAkBgB,MAE/BC,IAAI,kBACJuL,UAAUqG,WACVtR,QAAQV,OAAOW,OArBpBR,IAwBJ,SAAsBwI,SAClB,IAAI3I,OAAST,gBAAgBU,YAAY,gBAAiB,MAAO,gBAEjE,OADkBd,kBAAkBgB,MAE/BE,IAAI,MAAOsI,SACX1B,UAAU,cACVvG,QAAQV,OAAOW,OA7BpBiB,YAgCJ,SAA+BsQ,OAC3B,IAAIlS,OAAST,gBAAgBU,YAAY,wBAAyB,MAAO,wBACzE,OAAOb,mBAAmBwC,YAAY,aAAcsQ,OAAOxR,QAAQV,OAAOW,WArDtF,GCAA,WACI,aAEA3B,QAAQC,OAAO,uBAAuBC,QAAQ,yBAA0B,CACpE,kBACA,oBAIJ,SACIK,gBACAJ,mBAEA,MAAO,CACHgT,gBAIJ,SAAyBxJ,QAASyJ,kBAC9B,IAAIpS,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,cAE1E,OADkBd,kBAAkBgB,MAE/BE,IAAI,gBAAkBsI,SACtBxI,IAAI,CAAEkS,aAAiBD,mBACvB1R,QAAQV,OAAOW,OATpB2R,mBAYJ,SAA4BC,qBACxB,IAAIvS,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,cAE1E,OADkBd,kBAAkBgB,MAE/BE,IAAI,wBACJkK,WAAWgI,qBACX7R,QAAQV,OAAOW,WAjChC,GCAA,SAAU3B,SACN,aAiFD8F,OAAO9F,QA/EEC,OAAO,uBAAuBC,QAAQ,yBAA0B,CACpE,KACA,cACA,oBAIJ,SACIG,GACA0M,YACA5M,mBAEA,IAAIqT,QAAU,CACV9M,OASJ,SAAgB+M,WAAYC,kBAAmBC,iBAS3C,OARcxT,kBAAkBgB,MAC3BC,IAAI,iBACJmB,QAAQ,CACLkR,WAAYA,WACZG,mBAAoBF,kBACpBC,gBAAiBA,mBAdzBE,mBAoBJ,SAA4BC,cACxB,IAAIC,WAAaC,qBAAqBxS,SAASsS,cAC/C,GAAGC,WACC,OAAO1T,GAAGmC,KAAKuR,YAkBnB,OAfc5T,kBAAkBgB,MAC3BC,IAAI,sBACJD,IAAI2S,cACJxS,KAAK,SAASmG,MACX,OAAIA,MAIDA,KAAKwM,QACJxM,KAAOA,KAAKwM,SAEhBD,qBAAqBnS,IAAIiS,aAAcrM,MAChCA,MAPIpH,GAAGsH,OAAO,yCA9B7BuM,2BA2CJ,SAAoCC,YAAaC,iBAkB7C,OAjBcjU,kBAAkBgB,MAC3BE,IAAI,WAAY,sBAChBsL,UAAU,CACP0H,YAAaF,YACbG,gBAAiBF,kBAEpB9S,KAAK,SAASmG,MAQX,OAPGA,MAAQA,KAAK4M,aAAe5M,KAAK6M,gBAChCN,qBAAqBnS,IAAI4F,KAAK4M,YAAa5M,KAAK6M,iBAGhDN,qBAAqB5H,OAAO+H,aAGzB1M,SAvDfuM,qBAAuBjH,YAAYG,QAEvC,OAAOsG,WAvBf,GCAA,SAAUxT,SACN,aAEAA,QAAQC,OAAO,uBAAuBC,QAAQ,yBAA0B,CACpE,kBACA,oBAIJ,SACIK,gBACAJ,mBAGA,MAAO,CACH+P,gBAiBJ,SAAyBtG,UAAWD,QAAS4K,iBAAkBpE,cAC3D,IAAInP,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,mBACtEC,YAAcf,kBAAkBgB,MAChCqT,IAAM,CACNlE,aAAcH,aACdsE,iBAAkBF,iBAClB3F,QAASjF,SAEb,OAAOzI,YACFE,IAAI,YAAcwI,UAAY,oBAC9B1H,KAAKsS,KACL9S,QAAQV,OAAOW,OA3BpB+S,iBA8BJ,SAA0BC,WAAYhL,SAClC,IAAI3I,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,oBAC1E,OAAOd,kBAAkBgB,MACpBE,IAAI,gBAAiBsI,SACrBtI,IAAI,aAAcsT,WAAWC,yBAC7BxI,SACA1K,QAAQV,OAAOW,OAnCpBkT,yBAsCJ,SAAkCC,SAC9B,IAAI9T,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,4BACtEqE,YAAc,YAAcwP,QAChC,OAAO3U,kBAAkBgB,MACAE,IAAI,qBAAuBiE,aAC3BnE,MACAO,QAAQV,OAAOW,OA3CxCoT,sBAuDJ,SAA+BnL,UAAWD,SACtC,IAAI3I,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,yBACtEC,YAAcf,kBAAkBgB,MAChCkB,OAAS,CACTuM,QAASjF,SAEb,OAAOzI,YACFG,IAAI,YAAcuI,UAAY,uBAC9BzI,IAAIkB,QACJX,QAAQV,OAAOW,OA/DpBqT,uBAkEJ,SAAgCpL,UAAWD,QAASsL,UAChD,IAAIjU,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,0BAC/DC,YAAcf,kBAAkBgB,MAChCkB,OAAS,CACT6S,SAAUD,SACVrG,QAASjF,SAEb,OAAOzI,YAAYG,IAAI,YAAcuI,UAAa,eAC/BzI,IAAIkB,QACJX,QAAQV,OAAOW,OA1ElCwT,2CA6EJ,SAAoDvL,UAAWD,QAAS2I,yBACpE,IAAItR,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,8CACtEoB,OAAS,CACT+S,wBAAyB9C,wBACzB1D,QAASjF,SAIb,OAFkBxJ,kBAAkBgB,MAG/BE,IAAI,YAAcuI,UAAY,iCAC9BzI,IAAIkB,QACJX,QAAQV,OAAOW,OAvFpB0T,oBAwGJ,SAA6BzL,UAAWD,SACpC,IAAI3I,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,uBACtEC,YAAcf,kBAAkBgB,MAChCkB,OAAS,CACTuM,QAASjF,SAEb,OAAOzI,YACFG,IAAI,YAAcuI,UAAY,qBAC9BzI,IAAIkB,QACJX,QAAQV,OAAOW,OAhHpB2T,oBA0CJ,SAA6BC,wBACzB,IAAIvU,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,uBAE1E,OADkBd,kBAAkBgB,MAE/BC,IAAI,qBACJc,KAAKqT,wBACL7T,QAAQV,OAAOW,OA/CpB6T,sBAkHJ,SAA+B5L,UAAWD,QAAS8L,oBAC/C,IAAIzU,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,yBACtEC,YAAcf,kBAAkBgB,MAChCkB,OAAS,CACTuM,QAASjF,SAEb,OAAOzI,YACFE,IAAI,YAAcwI,UAAY,uBAC9B1H,KAAKuT,mBAAoBpT,QACzBX,QAAQV,OAAOW,OA1HpB+T,oBAiKJ,SAA6B9L,UAAWD,QAASgM,kBAC7C,IAAI3U,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,uBACtEC,YAAcf,kBAAkBgB,MAChCkB,OAAS,CACTuM,QAASjF,SAEb,OAAOzI,YACFE,IAAI,YAAcwI,UAAY,qBAC9B1H,KAAKyT,iBAAkBtT,QACvBX,QAAQV,OAAOW,OAzKpBiU,oBA4HJ,SAAoCvF,wBAChC,IAAIrP,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,8BAS1E,OARkBd,kBAAkBgB,MAG/BC,IAAI,WACJC,IAAI,4BAA6BgP,wBACjClP,MACAO,QAAQV,OAAOW,OAnIpBkU,sBAwIJ,SAAsCC,4BAClC,IAAI9U,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,gCAmB1E,OAlBkBd,kBAAkBgB,MAI/BC,IAAI,WACJA,IAAI,6BACJmK,WAAWuK,4BACXxU,KAAK,SAASmG,MACX,OAAIA,MAASA,KAAKiK,QAMXjK,KAAKiK,QALDrR,GAAGsH,OAAO,4CAOxBjG,QAAQV,OAAOW,OAzJpBoU,6BA0KJ,SAAsCnM,UAAW4K,KAC7C,IAAIxT,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,gCAE1E,OADkBd,kBAAkBgB,MAE/BC,IAAI,YAAcwI,UAAY,yCAC9B1H,KAAKsS,KACL9S,QAAQV,OAAOW,OA/KpBqU,yBAmFJ,SAAkCpM,UAAWD,QAAS0G,wBAClD,IAAIrP,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,4BACtEoB,OAAS,CACTkO,uBAAwBF,uBACxBzB,QAASjF,SAIb,OAFkBxJ,kBAAkBgB,MAG/BE,IAAI,YAAcuI,UAAY,2CAC9BzI,IAAIkB,QACJX,QAAQV,OAAOW,OA7FpBsU,mCAiLJ,SAA4CrM,UAAWyG,wBACnD,IAAIrP,OAAST,gBAAgBU,YAAY,yBAA0B,MAAO,sCAE1E,OADkBd,kBAAkBgB,MAE/BE,IAAI,YAAcuI,UAAY,yCAA2CyG,wBACzElP,MACAO,QAAQV,OAAOW,WApNhC,CAuNG3B,SCvNHA,QAAQC,OAAO,uBAAuBC,QAAQ,2BAC1C,CAAC,oBACG,SAASC,mBACL,aA8CA,MAAO,CACH+V,yBA7CJ,SAAkCC,gBAC9B,IAAIC,eAAiB,CACjBC,uBAAyBF,gBAI7B,OADkBhW,kBAAkBgB,MACjBE,IAAI,2BAA2B4G,UAAU,YAAamO,iBAwCzEE,uBArCJ,SAAgCC,SAAUJ,gBACtC,IAAIC,eAAiB,CACjBI,iBAAmBD,SACnBF,uBAAyBF,gBAI7B,OADkBhW,kBAAkBgB,MACjBE,IAAI,2BAA2B4G,UAAU,SAAUmO,iBA+BtEK,kBA5BJ,SAA2B7M,UAAWD,SAClC,IAAIyM,eAAiB,CACjB1H,UAAY9E,UACZgF,QAAUjF,SAId,OADkBxJ,kBAAkBgB,MACjBE,IAAI,mCAAmC4G,UAAU2B,UAAY,IAAKwM,iBAsBrFM,oBAnBJ,SAA6BC,wBAEzB,OADkBxW,kBAAkBgB,MACjBC,IAAI,kCAAoCuV,uBAAuBjI,UAAY,KAAKxM,KAAKyU,yBAkBxGC,oBAfJ,SAA6BC,wBAEzB,OADkB1W,kBAAkBgB,MACjBE,IAAI,kCAAoCwV,uBAAuBnI,UAAY,WAAamI,uBAAuBC,+BAA+BnK,UAAUkK,yBAc3KE,4BAXJ,SAAqCnN,UAAWoN,YAE5C,OADkB7W,kBAAkBgB,MACjBE,IAAI,kCAAoCuI,UAAY,WAAaoN,WAAa,YAAY7V,WC9C7H,SAAUnB,SACN,aAyGD8F,OAAO9F,QAvGEC,OAAO,uBAAuBC,QAAQ,yBAA0B,CACpE,KACA,kBACA,oBACA,aAIJ,SACIG,GACAE,gBACAJ,kBACA8W,YAEA,IAAInQ,YAAc,cAWlB,MATc,CACVoQ,KAAMlQ,EAAEC,QAAQiQ,KAAM,MACtBC,MAAOnQ,EAAEC,QAAQkQ,MAAO,MACxBC,OAAQpQ,EAAEC,QAAQmQ,OAAQ,MAC1BC,QAASrQ,EAAEC,QAAQoQ,QAAS,MAC5BC,MAAOtQ,EAAEC,QAAQqQ,MAAO,MACxBpQ,UAKJ,SAAmBC,iBACf,MAAO,CACH+P,KAAMlQ,EAAEC,QAAQiQ,KAAM/P,iBACtBgQ,MAAOnQ,EAAEC,QAAQkQ,MAAOhQ,iBACxBiQ,OAAQpQ,EAAEC,QAAQmQ,OAAQjQ,iBAC1BkQ,QAASrQ,EAAEC,QAAQoQ,QAASlQ,iBAC5BmQ,MAAOtQ,EAAEC,QAAQqQ,MAAOnQ,oBAIhC,SAAS+P,KAAK/P,gBAAiBC,WAC3B,IAAIC,OAASlG,IAAIgG,gBAAiB,QAASC,UAAWmQ,YACtD,OAAOlQ,OAGX,SAAS8P,MAAMhQ,gBAAiBC,UAAWoQ,SACvC,IAAInV,OAASoV,oBAAoBrQ,UAAWoQ,SAExCnQ,OAASlG,IAAIgG,gBAAiB,QAAS9E,OAAQ0F,WACnD,OAAOV,OAGX,SAAS+P,OAAOjQ,gBAAiBC,WAC7B,IAAIC,OAASlG,IAAIgG,gBAAiB,eAAgBC,UAAWmQ,YAC7D,OAAOlQ,OAGX,SAASgQ,QAAQlQ,gBAAiBC,WAC9B,IAAIC,OAASlG,IAAIgG,gBAAiB,eAAgBC,UAAWW,WAC7D,OAAOV,OAGX,SAASiQ,MAAMnQ,gBAAiBC,UAAWoQ,SACvC,IAAInV,OAASoV,oBAAoBrQ,UAAWoQ,SAC5CnV,OAAOqV,WAAY,EAEnB,IAAIrQ,OAASlG,IAAIgG,gBAAiB,QAAS9E,OAAQ0F,WACnD,OAAOV,OAGX,SAASoQ,oBAAoBrQ,UAAWoQ,SAUpC,OATApQ,UAAYA,WAAa,GACtBoQ,mBAAmBP,aACfO,QAAQG,SACPvQ,UAAUwQ,WAAaJ,QAAQK,iBAEhCL,QAAQM,YACP1Q,UAAU2Q,cAAgBP,QAAQQ,qBAGnC5Q,UAGX,SAASjG,IAAIgG,gBAAiBG,MAAOjF,OAAQkF,OACzC,IAAIC,YAAcrH,kBAAkBgB,MAAMC,IAAI0F,aAAa1F,IAAIkG,OAK/D,OAJGH,kBACCK,YAAcA,YAAYN,UAAUC,kBAGjCI,MAAMC,YAAanF,QAAQf,KAAK,SAASmG,MAC5C,OAAGT,EAAEU,MAAMD,MACApH,GAAGsH,OAAO,OAASC,IAAM,+BAAiCC,KAAKC,UAAUzF,SAG7EoF,OAIf,SAAS8P,WAAWvP,QAAS3F,QACzB,OAAO2F,QAAQ7G,IAAIkB,QAGvB,SAAS0F,UAAUC,QAAS3F,QACxB,OAAO2F,QAAQC,UAAU,GAAI5F,YAvGzC,GCAA,SAAUrC,SACN,aA+GD8F,OAAO9F,QA7GEC,OAAO,uBAAuBC,QAAQ,sBAAuB,CACjE,IACA,KACA,cACA,yBAIJ,SACI8G,EACA3G,GACA0M,YACAkL,wBASA,MAPc,CACVf,KAQJ,SAAcgB,KAAMC,YAEhB,OADaC,UAAUF,KAAMnL,YAAYsL,SAAUF,WAAYF,uBAAuBf,OARtFC,MAYJ,SAAemB,MAAOH,YAElB,OADa5V,QAAQ+V,MAAOvL,YAAYsL,SAAUF,WAAYF,uBAAuBd,QAZrFC,OAgBJ,SAAgBc,KAAMC,YAElB,OADaC,UAAUF,KAAMnL,YAAYwL,WAAYJ,WAAYF,uBAAuBb,SAhBxFC,QAoBJ,SAAiBiB,MAAOH,YAEpB,OADa5V,QAAQ+V,MAAOvL,YAAYwL,WAAYJ,WAAYF,uBAAuBZ,WAK3F,SAASe,UAAUF,KAAMM,YAAaL,WAAYM,SAG9C,IAAIpR,QAFJ8Q,WAAaA,YAAc,IAEHD,OAASM,YAAYrX,IAAI+W,MACjD,OAAG7Q,QAAUA,OAAOqR,cAAgBR,KACzB7X,GAAGmC,KAAK6E,QAGZoR,QAAQP,MAAM5W,KAAK,SAASmG,MAC/B,OAAIA,MAASA,KAAKiR,aAIfjR,KAAKwM,QACJxM,KAAOA,KAAKwM,SAEhBkE,WAAWD,MAAQzQ,KACnB+Q,YAAY3W,IAAIqW,KAAMzQ,MACfA,MARIpH,GAAGsH,OAAO,iCAY7B,SAASpF,QAAQ+V,MAAOE,YAAaL,WAAYM,SAC7C,GAAGzR,EAAE2R,QAAQL,QACT,GAAGtR,EAAE4R,QAAQN,OACT,OAAOjY,GAAGmC,KAAK,SAInB8V,MAAQ,CAACA,OAGbH,WAAaA,YAAc,GAC3B,IAAI9Q,OAAS,GACTwR,gBAAkB,GAWtB,OAVA7R,EAAE8R,QAAQR,MAAO,SAASJ,MACtB,IAAIa,KAAOZ,WAAWD,OAASM,YAAYrX,IAAI+W,MAC5Ca,MAAQA,KAAKL,cAAgBR,KAC5B7Q,OAAOrD,KAAK+U,MAGZF,gBAAgB7U,KAAKkU,QAI1BlR,EAAE4R,QAAQC,iBACFxY,GAAGmC,KAAK6E,QAGZoR,QAAQ,CACXO,aAAcH,kBACfvX,KAAK,SAASmG,MACb,OAAIA,MAASA,KAAKiK,SAIlB1K,EAAE8R,QAAQrR,KAAKiK,QAAS,SAASwF,MAC7BiB,WAAWjB,KAAKwB,aAAexB,KAC/BsB,YAAY3W,IAAIqV,KAAKwB,YAAaxB,MAClC7P,OAAOrD,KAAKkT,QAET7P,QARIhH,GAAGsH,OAAO,0CApGrC,GCAA,SAAU3H,SACN,aA8MD8F,OAAO9F,QA5MEC,OAAO,uBAAuBC,QAAQ,cAAe,CACzD,IACA,KACA,kBACA,cACA,iBACA,eACA,eAMJ,SACI8G,EACA3G,GACAE,gBACAwM,YACAkM,eACAC,aACAC,cAGA,IACIlM,aADAmM,yBAA2B,iBAQ/B,MALc,CACV7W,QAASA,QACT8W,SA6DJ,SAAkBC,MAAO3W,OAAQwC,sBAC7B,IAEIoU,cAFYvS,EAAE2R,QAAQW,OAAStS,EAAEwS,IAAMxS,EAAEyS,WAEhBH,MAAO,SAASI,SAAUC,eACnD,OAAOpX,QAAQmX,SAAU/W,OAAQgX,cAAexU,wBAGhDyU,YAAcvZ,GAAGe,IAAImY,cAEtB5W,SACCiX,YAAcA,YACTtY,KAAK,SAASmG,MAEX,OADA9E,OAAOkX,gBAAgBV,aAAaW,UAC7BrS,MACR,SAASsS,UACR,IAAIC,QAAU,GAGd,OAFAA,QAAQ,KAAOD,SAASE,QAAUF,SAASL,SAC3C/W,OAAOuX,aAAaH,SAAUC,QAASb,aAAaW,UAC7CzZ,GAAGsH,OAAOoS,aAI7B,OAAOH,cAlEX,SAASrX,QAAQmX,SAAU/W,OAAQgX,cAAexU,sBAC9C,IAEIiE,QAEA+Q,iBAJAC,cAAgBV,UAAYA,SAASW,MAAQX,SAC7CY,WAAaZ,UAAYA,SAASrX,OAElCrB,OAAST,gBAAgBU,YAAYkE,sBAAwB,cAAe,MAAO,WAAaiV,eA2BpG,OAxBGhB,yBAAyBmB,KAAKH,eAE7BA,cAAgB,gBADhBD,iBAAmBC,cAAcI,QAAQpB,yBAA0B,KAGnEe,iBAAmBC,cAAcK,MAAM,KAAK,GAGhDrR,QAAUsR,gBAAgBN,cAAeE,YACpChZ,KAAK,SAAUqZ,MACZ,IAAIC,UAAYD,MAAQA,KAAK1G,MAAQ0G,KAAK1G,QAAU0G,KAEpD,OAAOC,WACR,SAASb,UAER,OADAA,SAASL,SAAWS,iBACb9Z,GAAGsH,OAAOoS,YAGtBpX,QAAUgX,gBACTvQ,QAAUA,QAAQ9H,KAAK,SAASqZ,MAE5B,OADAhY,OAAOgX,eAAiBgB,QAKzBvR,QAAQ1H,QAAQV,OAAOW,MAsClC,SAAS+Y,gBAAgBG,SAAUP,YAC/B,GAAiB,wBAAbO,SAAoC,CAEpC,IAAIC,UAYkB,CACtBC,yBAAyB,IACzBA,yBAAyB,IACzBA,yBAAyB,IACzBA,yBAAyB,IACzBA,yBAAyB,IACzBA,yBAAyB,IAEzBC,uBAAuB,GACvBA,uBAAuB,GACvBA,uBAAuB,GACvBA,uBAAuB,IAtBvB,OAAO3a,GAAGmC,KAAKsY,WAEd,GAAgB,mCAAbD,SACJ,OA+CGxa,GAAGe,IAAI,CAACsZ,gBAAgB,eAAgB,MAAOA,gBAAgB,kBAAmB,QACpFpZ,KAAK,SAASgY,OACX,IAAI2B,MAAMC,SAENC,eAAiBjC,aAAakC,+BAA+BC,MAC7DC,kBAAoBpC,aAAakC,+BAA+BG,SA0BpE,OAxBAN,MAAQjU,EAAEsS,MAAM,IAAIkC,OAAO,SAAUC,GACjC,OAAmD,GAA3CzU,EAAE0U,UAAUP,eAAgB,CAACQ,GAAIF,EAAEzZ,OAC5CwX,IAAI,SAASiC,GACZ,MAAO,CACHG,cAAeH,EAAEzZ,GACjB6Z,iBAAkB,KAClBxB,KAAMoB,EAAEK,KACRvO,gBAAiBvG,EAAE+U,KAAKZ,eAAgB,CAACQ,GAAIF,EAAEzZ,KAAKuL,mBAEzDtH,QAEHiV,SAAWlU,EAAEsS,MAAM,IAAIkC,OAAO,SAAUC,GACpC,OAAsD,GAA9CzU,EAAE0U,UAAUJ,kBAAmB,CAACK,GAAIF,EAAEzZ,OAC/CwX,IAAI,SAASiC,GACZ,MAAO,CACHG,cAAeH,EAAEO,cACjBH,iBAAkBJ,EAAEzZ,GACpBqY,KAAMoB,EAAEK,KACRvO,gBAAiBvG,EAAE+U,KAAKT,kBAAmB,CAACK,GAAIF,EAAEzZ,KAAKuL,mBAE5DtH,QAEQe,EAAEA,EAAEiV,MAAMhB,MAAOC,WAAWgB,OAAO,QAAQjW,UAzE9D,IAAImD,QAAU6P,eAAekD,UAAUtB,SAAUP,WA3FrD,WACSrN,eACDA,aAAeF,YAAYqP,OAG/B,OAAOnP,aAsFsDoP,IAC7D,OAAOhc,GAAGmC,KAAK4G,SAqBnB,SAAS2R,yBAAyBuB,QAASC,OAAQC,QAC/C,IAAIC,KAAOzV,EAAEiF,SAAS,CAClBqQ,QAASA,QACTC,OAAQA,OACRC,OAAQA,QACT,CACCD,OAAQD,QACRE,OAAQ,YAIZ,MAAO,CACHxa,GAAIsa,QACJI,YAAaD,KAAKF,OAAS,IAAME,KAAKD,QAI9C,SAASxB,uBAAuB2B,OAC5B,OAAO5B,yBAAiC,GAAR4B,MAAYA,MAAO,aAvK/D,GCAA3c,QAAQC,OAAO,uBAAuBC,QAAQ,SAC1C,CAAC,cAAe,OAAQ,IACpB,SAAU0c,YAAaC,KAAM7V,GACzB,aAKA,SAAS8V,OAAOC,OAAQpa,OAAQqa,SAAUC,MAAOC,SAC7C,IAAIH,QAAW/V,EAAE2R,QAAQoE,UAAYA,OAAOI,OACxC,MAAM,IAAItW,MAAM,mCAGpB,IAAImW,SACA,MAAM,IAAInW,MAAM,4BAGpB,IAAIuW,KAAOC,KACXD,KAAKE,KAAOtW,EAAE2R,QAAQoE,QAAUA,OAAS,CAACA,QAC1CK,KAAKza,OAASA,OACdya,KAAKJ,SAAWA,SAChB,IAAIO,IAAMH,KAAKE,KAAK,GAIpB,GAHAF,KAAKH,MAAQA,OAASM,IAAIvb,GAC1Bob,KAAKF,QAAUA,SAEXE,KAAKH,MACL,MAAM,IAAIpW,MAAM,uEAGjBlE,SACCA,OAAO6a,IAAI,gBAAiB,SAAUC,MAAOC,MACzC1W,EAAE8R,QAAQsE,KAAKE,KAAM,SAASC,KAC1B,IAAII,YAAcJ,IAAIK,SAElBD,aAAeA,YAAYE,aAAeH,KAAKI,QAAQD,aACvDN,IAAIK,SAAWF,KAAKK,aAKhCpb,OAAO6a,IAAI,WAAY,WACnBJ,KAAKY,YAiDjB,OA5CAlB,OAAOmB,UAAY,CACfC,KAAM,WACF,IAAId,KAAOC,KACPC,KAAOF,KAAKE,KAGhB,OAAOV,YAAYsB,KAAKb,KAAKL,SAAUK,KAAKJ,OACvC3b,KAAK,SAAU4c,MAMZ,OALAlX,EAAE8R,QAAQwE,KAAM,SAASC,KACrBA,IAAIK,SAAWM,KACfX,IAAIY,eAAiBD,KAAKL,aAGvBK,MACR,SAAUnE,UACT8C,KAAKuB,KAAK,2BAA6BhB,KAAKF,QAAU,KAAOnD,UAC7D/S,EAAE8R,QAAQwE,KAAM,SAASC,KACrBA,IAAIK,SAAW7D,SAAStS,UAIxCuW,OAAQ,SAAgBK,UACpB,IAAIjB,KAAOC,KACPC,KAAOF,KAAKE,KAGhB,KAFAe,SAAWA,UAAYf,KAAK,GAAGM,UAG3B,MAAM,IAAI/W,MAAM,iBAAmBuW,KAAKF,QAAU,qCAGtD,OAAON,YAAYoB,OAAOK,SAASC,SAAUD,SAASE,UACjDjd,KAAK,SAAU4c,MACZlX,EAAE8R,QAAQwE,KAAM,SAASC,KACrBA,IAAIK,SAAWM,QAEpB,SAAUnE,UACT8C,KAAKuB,KAAK,6BAA+BhB,KAAKF,QAAU,KAAOnD,UAC/D/S,EAAE8R,QAAQwE,KAAM,SAASC,KACrBA,IAAIK,SAAW7D,SAAStS,WAMrCqV,UC1FnB9c,QAAQC,OAAO,uBAAuBC,QAAQ,cAAe,CAAC,iBAAkB,OAAQ,IAAK,aAAc,YAAa,KAAM,cAC1H,SAAUse,eAAgB3B,KAAM7V,EAAGyX,WAAYC,UAAWre,GAAIse,aAC1D,aAEA,IACIC,gBADAC,MAAQ,GAwCZ,SAASC,eACAD,OAAUA,MAAM1B,QAAWwB,YAAYI,iBAI5C/X,EAAEgY,KAAKH,MAAOI,aAGlB,SAASA,YAAYf,MACjBM,eAAeN,KAAKA,KAAKI,SAAUJ,KAAKK,SAAUL,KAAKL,YAClDvc,KAAK,SAAU4d,cACZA,aAAeA,aAAajL,QAE5BjN,EAAEoF,OAAOyS,MAAOX,MAChBW,MAAM7a,KAAKkb,cAEXT,WAAWU,WAAW,gBAAiB,CAACrB,QAASI,KAAMH,QAASmB,aAAcE,UAAU,KACzF,SAAUrF,UACT8C,KAAK5N,MAAM,2BACX4N,KAAK5N,MAAM8K,UAEX/S,EAAEoF,OAAOyS,MAAOX,MAChBO,WAAWU,WAAW,gBAAiB,CAACrB,QAASI,KAAMH,QAAShE,SAAStS,KAAM2X,UAAU,MAYrG,MAAO,CACHlB,KApEJ,SAAclB,SAAUqC,UACpB,OAAOb,eAAeN,KAAKlB,SAAUqC,UAChC/d,KAAK,SAAUge,GAGZ,OAFAT,MAAM7a,KAAKsb,EAAErL,SAENqL,KAgEftB,OA5DJ,SAAgBhB,SAAUqC,UACtB,IAAI1B,YAdR,SAAkBX,SAAUqC,UACxB,OAAOrY,EAAE+U,KAAK8C,MAAO,CAACP,SAAUtB,SAAUuB,SAAUc,WAalCE,CAASvC,SAAUqC,UAErC,OAAK1B,YAIEa,eAAeR,OAAOL,YAAYW,SAAUX,YAAYY,SAAUZ,YAAYE,YAChFvc,KAAK,WACF0F,EAAEoF,OAAOyS,MAAO,SAAUS,GACtB,OAAOA,EAAEhB,SAASkB,gBAAkB7B,YAAYW,SAASkB,eACrDF,EAAEf,SAASiB,gBAAkB7B,YAAYY,SAASiB,eAClDF,EAAEzB,WAAW2B,gBAAkB7B,YAAYE,WAAW2B,iBAE/D,SAAUzF,UACT8C,KAAK5N,MAAM,4BAA8BoQ,UACzCxC,KAAK5N,MAAM8K,YAZR1Z,GAAGsH,OAAO,IAAId,MAAM,uCAyD/BuY,SAzCJ,SAAkBpC,SAAUqC,SAAUI,YAClC,OAAOjB,eAAeY,SAASpC,SAAUqC,SAAUI,aAyCnDC,SAAU,WACN,OAAO1Y,EAAE2Y,UAAUd,QAEvBC,aAAcA,aACdc,qBAhBJ,WACIhB,gBAAkBF,UAAUI,aAAc,MAgB1Ce,oBAbJ,WACInB,UAAUoB,OAAOlB,sBC3E7B5e,QAAQC,OAAO,uBAAuBC,QAAQ,iBAAkB,CAAC,oBAAqB,uBAAwB,cAAe,KAAM,IAC/H,SAAUC,kBAAmB6M,qBAAsB2R,YAAate,GAAI2G,GAChE,aAEA,IAAI+Y,2BAA6B1f,GAAGsH,OAAO,IAAId,MAAM,+CAErD,SAASmZ,uBAAuBC,WAC5B,OAAO9f,kBAAkBgB,MAAME,IAAI,QAAS4e,WAGhD,SAASC,kBAAkBT,YACvB,IAAIU,GAAK,GAMT,OAJIV,aACAU,GAAGV,WAAaA,YAGbU,GAGX,SAASC,wBACL,OAAOpT,qBAAqBS,mBAAmB,kBAGnD,SAAS4S,oBAAoBrD,UACzB,OAAOoD,yBAA2BpZ,EAAEsZ,WAAWtD,SAASwC,cAAe,WA0D3E,MAAO,CACHtB,KAxDJ,SAAclB,SAAUiD,UAAWR,YAC/B,OAAIW,wBACOJ,uBAAuBC,WACzBtT,UAAU,GAAIqQ,SAAUkD,kBAAkBT,aAG1CY,oBAAoBrD,UAIlB7c,kBAAkBgB,MAAMC,IAAI,WAAa6e,WAAWtT,UAAU,CACjE4R,SAAU0B,UACV3B,SAAUtB,SACVa,WAAY4B,YAAcd,YAAYpI,UACvC,QACEjV,KAAK,SAAUif,GAEZ,OADAA,EAAEjC,SAAWiC,EAAEjC,UAAY,UACpBiC,IAVJR,4BAkDf/B,OAnCJ,SAAgBhB,SAAUiD,UAAWR,YACjC,OAAIW,wBACOJ,uBAAuBC,WACzBO,aAAaxD,SAAUkD,kBAAkBT,aAGzCY,oBAAoBrD,UAIlB7c,kBAAkBgB,MAAMC,IAAI,WAAa6e,WAAWO,aAAa,QAH7DT,4BA6BfX,SAtBJ,SAAkBpC,SAAUiD,UAAWR,YACnC,OAAIW,wBACOJ,uBAAuBC,WACzB5e,IAAI2b,UACJ7b,IAAI+e,kBAAkBT,aAGtBY,oBAAoBrD,UAQlB3c,GAAGsH,OAAO,IAAId,MAAM,yEAPhBkZ,gCCxE3B/f,QAAQC,OAAO,uBAAuBC,QAAQ,gBAC1C,CAAC,SACG,SAAU4c,QACN,aAEA,SAAS2D,cAAczG,QAASrX,OAAQqa,SAAU0D,WAC9C5D,OAAO6D,KAAKtD,KAAMrD,QAASrX,OAAQqa,UAAY,UAAW0D,UAAW,WAMzE,OAHAD,cAAcxC,UAAYrY,OAAOmN,OAAO+J,OAAOmB,UAAW,KAClC2C,YAAcH,iBCVlDzgB,QAAQC,OAAO,uBAAuBC,QAAQ,cAC1C,CAAC,SACG,SAAU4c,QACN,aAEA,SAAS+D,YAAYC,MAAOne,OAAQqa,SAAUrT,SAC1CmT,OAAO6D,KAAKtD,KAAMyD,MAAOne,OAAQqa,UAAY,YAAarT,QAAS,SAMvE,OAHAkX,YAAY5C,UAAYrY,OAAOmN,OAAO+J,OAAOmB,UAAW,KAClC2C,YAAcC,eCVhD7gB,QAAQC,OAAO,uBAAuBC,QAClC,oBAAqB,CAAC,oBAAqB,cAAe,KAAM,SAAU,qBAAsB,kBAC5F,SAAU6gB,YAAapC,YAAate,GAAI+N,OAAQhO,mBAAoBG,iBAEhE,aAEA,IAAIygB,iBAAmB,GAEvB,SAASC,OAAOC,gBAAiB5e,mBAAoBxB,cACjDwB,mBAAqBA,oBAAsB,CAAEU,aAAa,GAC1D,IAAIhC,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,eACrF,OAAOigB,YAAY5f,IAAImB,oBAAoBlB,IAAI,SAAWud,YAAYxd,MAAMggB,OAAS,aAChF5e,QAAQ,CACL0S,SAAUiM,kBAEbxf,QAAQV,OAAOW,MAkCxB,SAASyf,oBACL,GAAIJ,iBACA,IAAK,IAAIK,EAAIL,iBAAiB7D,OAAS,EAAQ,GAALkE,EAAQA,IAC9CL,iBAAiBK,KAiS7B,MAAO,CACHJ,OAAQA,OACRK,qBArUJ,SAA8BJ,iBAC1B,OAAIA,gBACOD,OAAOC,iBAGP7gB,GAAGmC,KAAK,KAiUnB+e,WAjTJ,SAAoBb,UAAW5f,cAC3B,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,cACrF,OAAOigB,YAAY5f,MAAME,IAAI,YAAcqf,WAAWvf,MACjDG,KAAK,SAAUif,GAEZ,OADAnS,OAAOoT,eACAjB,IAEV7e,QAAQV,OAAOW,OA2SpB8f,iBAhSJ,SAA0BzH,QAASlZ,cAC/B,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,oBACrF,OAAOigB,YAAY5f,MAAME,IAAI,YAAYsL,UAAUqN,QAAS,SAAWA,QAAQhY,GAAI,GAAI,IAClFV,KAAK,SAAUmG,MAEZ,OADA2Z,oBACO3Z,OAEV/F,QAAQV,OAAOW,OA0RpB+f,gBAvRJ,SAAyB1H,QAASlZ,cAC9B,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,mBACrF,OAAOigB,YAAY5f,MAAME,IAAI,YAAYsL,UAAUqN,QAAS,QAAUA,QAAQhY,GAAI,GAAI,IACjFV,KAAK,SAAUmG,MAEZ,OADA2Z,oBACO3Z,OAEV/F,QAAQV,OAAOW,OAiRpBggB,kBA9QJ,SAA2B3H,QAASlZ,cAChC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,mBACrF,OAAOigB,YAAY5f,MAAME,IAAI,YAAYsL,UAAUqN,QAAS,UAAYA,QAAQhY,GAAI,GAAI,IACnFV,KAAK,SAAUmG,MAEZ,OADA2Z,oBACO3Z,OAEV/F,QAAQV,OAAOW,OAwQpBigB,qBAvPJ,SAA8B5H,QAASlZ,cACnC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,wBACrF,OAAOigB,YAAY5f,MAAME,IAAI,YAAYsL,UAAUqN,QAAS,UAAYA,QAAQhY,GAAK,SAAU,GAAI,IAC9FV,KAAK,SAAUmG,MAEZ,OADA2Z,oBACO3Z,OAEV/F,QAAQV,OAAOW,OAiPpBkgB,uBA9OJ,SAAgCnB,UAAW5f,cACvC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,mBASrF,OARkBigB,YAAY5f,MACGE,IAAI,kBAAoBqf,WAAWvf,MAC3DG,KAAK,SAAUif,GAEZ,OADAnS,OAAOoT,eACAjB,IAEV7e,QAAQV,OAAOW,OAuOxBmgB,sBAlOJ,SAA+BpB,UAAW5f,cACtC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,kBASrF,OARkBigB,YAAY5f,MACGE,IAAI,iBAAmBqf,WAAWvf,MAC1DG,KAAK,SAAUif,GAEZ,OADAnS,OAAOoT,eACAjB,IAEV7e,QAAQV,OAAOW,OA2NxBogB,wBAtNJ,SAAiCrB,UAAW5f,cACxC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,oBAUrF,OATkBigB,YAAY5f,MACGE,IAAI,mBAAqBqf,WAAWvf,MAC5DG,KAAK,SAAUif,GAGZ,OAFAnS,OAAOoT,eACPJ,oBACOb,IAEV7e,QAAQV,OAAOW,OA8MxBqgB,kBA/FJ,SAA2BhI,SACvB,IAAIhZ,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,qBAErE,OADkB8f,YAAY5f,MACXC,IAAI,kBAAkBc,KAAK8X,SAAStY,QAAQV,OAAOW,OA6FtEsgB,uBA1FJ,SAAgCtf,QAC5B,IAAI3B,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,gCACrE,OAAOb,mBAAmBwC,YAAY,oBAAqBD,QAAQjB,QAAQV,OAAOW,OAyFlFugB,mBArEJ,SAA4BlI,SACxB,IAAIhZ,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,sBAErE,OADkB8f,YAAY5f,MACXC,IAAI,mBAAmBc,KAAK8X,SAAStY,QAAQV,OAAOW,OAmEvEwgB,wBAhEJ,SAAiCxf,QAC7B,IAAI3B,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,4BACrE,OAAOb,mBAAmBwC,YAAY,qBAAsBD,QAAQjB,QAAQV,OAAOW,OA+DnFkC,YAzUJ,SAAqBC,UACbkd,kBAAoBld,UAAYkd,iBAAiBjd,QAAQD,UAAY,GACrEkd,iBAAiBhd,KAAKF,WAwU1BG,eApUJ,SAAwBH,UAChBkd,kBAAoBld,UAAkD,GAAtCkd,iBAAiBjd,QAAQD,WACzDkd,iBAAiB9c,IAAIJ,WAmUzBse,oBA1FJ,SAA6BpI,SACzB,IAAIhZ,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,uBAErE,OADkB8f,YAAY5f,MACXC,IAAI,oBAAoBc,KAAK8X,SAAStY,QAAQV,OAAOW,OAwFxE0gB,yBA/EJ,SAAkC1f,QAC9B,IAAI3B,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,kCACrE,OAAOb,mBAAmBwC,YAAY,sBAAuBD,QAAQjB,QAAQV,OAAOW,OA8EpF2gB,6BAhEJ,SAAsC5B,UAAW5f,cAC7C,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,gBAUrF,OARkBigB,YAAY5f,MACGE,IAAI,qBAAsBqf,WAAWvf,MAC7DG,KAAK,SAAUif,GAEZ,OADAnS,OAAOoT,eACAjB,IAEV7e,QAAQV,OAAOW,OAwDxB4gB,8BAlRJ,SAAuC/V,QAAS1L,cAC5C,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,iBAUrF,OATkBigB,YAAY5f,MAEGE,IAAI,YAAYsL,UAAUH,QAAS,aAAeA,QAAQxK,GAAI,GAAI,IAC9FV,KAAK,SAAUmG,MAEZ,OADA2Z,oBACO3Z,OAEV/F,QAAQV,OAAOW,OA0QpB6gB,+BAnDJ,SAAwC9B,UAAW5f,cAC/C,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,kCAWrF,OATkBigB,YAAY5f,MAEGE,IAAI,uCAAwCqf,WAAWvf,MACnFG,KAAK,SAAUmG,MAEZ,OADA2G,OAAOoT,eACA/Z,OAEV/F,QAAQV,OAAOW,OA0CpB8gB,gCApCJ,SAAyCzI,QAASlZ,cAC9C,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,mCASrF,OARkBigB,YAAY5f,MACGE,IAAI,YAAYsL,UAAUqN,QAAS,+BAAiCA,QAAQhY,GAAI,GAAI,IAChHV,KAAK,SAAUmG,MAEZ,OADA2Z,oBACO3Z,OAEV/F,QAAQV,OAAOW,OA6BpB+gB,mBArNJ,SAA4BhC,UAAW5f,cACnC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,sBAUrF,OATkBigB,YAAY5f,MACGE,IAAI,sBAAwBqf,WAAWvf,MAC/DG,KAAK,SAAUif,GAGZ,OAFAnS,OAAOoT,eACPJ,oBACOb,IAEV7e,QAAQV,OAAOW,OA6MxBghB,oBAxMJ,SAA6B3I,QAASlZ,cAClC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,uBACrF,OAAOigB,YAAY5f,MAAME,IAAI,YAAYsL,UAAUqN,QAAS,aAAeA,QAAQhY,GAAI,GAAI,IACtFV,KAAK,SAAUmG,MAEZ,OADA2Z,oBACO3Z,OAEV/F,QAAQV,OAAOW,OAkMpBihB,qBA/LJ,SAA8BlC,UAAW5f,cACrC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,wBAUrF,OATkBigB,YAAY5f,MACGE,IAAI,yBAA2Bqf,WAAWvf,MAClEG,KAAK,SAAUif,GAGZ,OAFAnS,OAAOoT,eACPJ,oBACOb,IAEV7e,QAAQV,OAAOW,OAuLxBkhB,sBAlLJ,SAA+B7I,QAASlZ,cACpC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,yBACrF,OAAOigB,YAAY5f,MAAME,IAAI,YAAYsL,UAAUqN,QAAS,eAAgB,GAAI,IAC3E1Y,KAAK,SAAUmG,MAEZ,OADA2Z,oBACO3Z,OAEV/F,QAAQV,OAAOW,OA4KpBmhB,yBAzKJ,SAAkCpC,UAAW5f,cACzC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,4BAWrF,OAVkBigB,YAAY5f,MACGE,IAAI,4BAA8Bqf,WAAWvf,MACrEG,KAAK,SAAUif,GAIZ,OAHAnS,OAAOoT,eACPJ,qBAWR2B,SADqBC,IATWzC,IAUfyC,IAAIC,iBAKrBF,QAAQG,eAAe,0BACvBH,QAAQI,qBAAuB,CAC3BC,QAASL,QAAQM,kBACjBrY,KAAM+X,QAAQO,eAEdC,SAAUR,QAAQO,eAClBxH,KAAMiH,QAAQS,eACdC,YAAaV,QAAQW,cACrBC,uBAAwBZ,QAAQW,cAAgBX,QAAQW,cAAgB,SAAW,KACnFE,gBAAiBb,QAAQc,0BACzBC,SAAUf,QAAQgB,mBAClBC,sBAAuBjB,QAAQkB,4BAC/BC,IAAKnB,QAAQoB,cACbC,SAAUrB,QAAQsB,mBAClBC,cAAevB,QAAQwB,2BA7BnBhE,EAiCLyC,IAxBX,IAA6BA,IACrBD,UAPKrhB,QAAQV,OAAOW,OAgKxB6iB,0BA/HJ,SAAmCxK,QAASlZ,cACxC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,oBAAqB,MAAO,6BACrF,OAAOigB,YAAY5f,MAAME,IAAI,YAAYsL,UAAUqN,QAAS,mBAAqBA,QAAQhY,GAAI,GAAI,IAC5FV,KAAK,SAAUmG,MAEZ,OADA2Z,oBACO3Z,OAEV/F,QAAQV,OAAOW,OAyHpB8iB,iCAtHJ,SAA0C9hB,QACtC,IAAI3B,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,oCACrE,OAAOb,mBAAmBwC,YAAY,wBAAyBD,QAAQjB,QAAQV,OAAOW,OAqHtF+iB,mCAjGJ,WACI,IAAI1jB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,sCAErE,OADkB8f,YAAY5f,MACXE,IAAI,sCAAsCF,MAAMO,QAAQV,OAAOW,WCrRlG,SAAU3B,SACN,aAmHD8F,OAAO9F,QAjHEC,OAAO,uBAAuBC,QAAQ,qBAAsB,CAChE,UACA,KACA,oBACA,yBACA,SAIJ,SACIykB,QACAtkB,GACA0E,kBACA6f,uBACAtkB,QAQA,MALc,CACVsC,YA4BJ,SAAwCiiB,SAAUliB,QAC9C,OAfJ,SAAgCkiB,UAC5B,IAAIC,SAAWF,uBAAuBG,OAAOA,OAAOF,UAAW,YAC3DG,SAAW3kB,GAAG4kB,QAEdH,SACAE,SAASE,QAAQJ,UAGjBE,SAASrd,OAAO,+BAGpB,OAAOqd,SAAS5b,QAIT+b,CAAuBN,UACzB7V,MAAM,WACH,OArBZ,SAA+B6V,UAC3B,OAAO9f,kBAAkB5D,MAAME,IAAI,YAAcwjB,UAAU1jB,MAoB5CikB,CAAsBP,UAAUvjB,KAAK,SAAUwjB,UAClD,OAAOO,iBAAiBP,cAG/BxjB,KAAK,SAAUwjB,UAEZ,OADAF,uBAAuBU,OAAOP,OAAOF,UAAWC,SAAU,YACnDA,WAEVxjB,KAAK,SAASwjB,UAKX,OAJGniB,SACCA,OAAOmiB,SAAWA,UAGfA,YA3CfO,iBAAkBA,kBAKtB,SAASN,OAAOF,UACZ,MAAO,YAAcA,SAyCzB,SAASQ,iBAAiBE,aAEtB,OADAA,YAAYC,OAIhB,SAASC,eAAeX,UACpB,IAAIY,OAAS,GAEb1e,EAAE8R,QAAQgM,SAASU,OAAQ,SAAUG,OAKjC,IAJA,IAEIC,aAFAC,KAAOF,MAAMG,UAAUrL,MAAM,KAC7B8C,IAAMmI,OAGW,EAAdG,KAAK1I,QACRyI,aAAeC,KAAKE,QACfL,OAAOE,gBACRF,OAAOE,cAAgB,IAG3BrI,IAAMmI,OAAOE,cAGjBA,aAAeC,KAAKE,SACpBxI,IAAIqI,cAAgBD,OAEXK,kBACLL,MAAMH,OAASC,eAAeE,MAAMK,wBAC7BL,MAAMK,kBAGqB,GAAnCL,MAAMG,UAAU/hB,QAAQ,SAAmD,GAAnC4hB,MAAMG,UAAU/hB,QAAQ,WAC5D4hB,MAAMM,UAELN,MAAMM,QAAU3lB,OAAOqlB,MAAMM,SAASC,UAGvCP,MAAMQ,UAELR,MAAMQ,QAAU7lB,OAAOqlB,MAAMQ,SAASD,aAKlD,OAAOR,OA1CcD,CAAeF,aAC7BA,gBAvEnB,GCAAvlB,QAAQC,OAAO,uBACVC,QAAQ,kBACT,CAAC,WACG,aAoCA,MAAO,CACHkmB,sBAnCJ,SAA+BtB,SAAUuB,OACrC,GAAKvB,SAAL,CAEA,IACIwB,MADQD,MAAME,QACA9L,MAAM,KACpB8C,IAAMuH,SAASU,OAWnB,OATAc,MAAMP,SAENxI,IAAM+I,MAAME,OAAO,SAAUjJ,IAAKkJ,MAC9B,OAAIlJ,KAAOA,IAAI2F,eAAeuD,MACnBlJ,IAAIkJ,MAERlJ,KACRA,QAEgB,IAoBnBmJ,iCAfJ,SAA0CC,aACtC,GAAIA,YAAJ,CAEA,IAAIL,MAAQK,YAAYlM,MAAM,KAE9B,OAAoB,IAAjB6L,MAAMnJ,OACE,mBAAqBmJ,MAAM,GAI/B,WCpCnBtmB,QAAQC,OAAO,uBACVC,QAAQ,iBAAkB,CAAC,oBAAqB,SAAU6E,mBACvD,aAMA,MAAO,CACH6hB,SALW,SAAU3R,UACxB,OAAOlQ,kBAAkB5D,MAAMC,IAAI,SAAW6T,UAAU1S,eCLjE,SAAUvC,SACN,aAIAA,QAAQC,OAAO,uBAAuBC,QAAQ,0BAA2B,CACrE,KACA,oBACA,qBACA,uBAKJ,SACIG,GACAF,kBACAC,mBACA4M,sBAWA,MATc,CACV6Z,0BAWJ,SAAmCC,aAC/B,OAAI9Z,qBAAqBS,mBA9BC,4BAmCbtN,kBAAkBgB,MAC1BE,IAAI,0BAA2BylB,aAC/B3lB,MANMd,GAAGmC,KAAK,KAZnBukB,iBAuBJ,SAA0BC,WAAYC,kBAClC,OAAIja,qBAAqBS,mBA3CC,4BAsDVtN,kBAAkBgB,MAC7BE,IAAI,wBAAyB2lB,YAC7B/e,UAAU,kBAAmB,CAC1Bif,gBAAiBD,mBAZL9mB,kBAAkBgB,MAC7BE,IAAI,gBAAiB2lB,YACrB7lB,OA3BTgmB,yBA2CJ,SAAkCxkB,QAG9B,OAFcvC,mBAAmBwC,YAAY,sBAAuBD,SA3CpEykB,oBAgDJ,SAA6B5a,SAKzB,OAJcrM,kBAAkBgB,MAC3BC,IAAI,iBACJc,KAAKsK,UAlDV6a,kBAuDJ,SAA2BL,WAAYxa,SAKnC,OAJcrM,kBAAkBgB,MAC3BE,IAAI,iBACJsL,UAAUH,UAzDf8a,oBA8DJ,SAA6BL,kBACzB,OAAIja,qBAAqBS,mBAtFC,4BA0FZtN,kBAAkBgB,MAC3BE,IAAI,uBAAwB4lB,kBAC5B9lB,MALMd,GAAGsH,OAAO,yEA1FjC,CAqGG7B,OAAO9F,SCrGVA,QAAQC,OAAO,uBAAuBC,QAAQ,6BAC1C,CAAC,oBAAqB,kBAAmB,uBAAwB,SAAUC,kBAAmBI,gBAAiByM,sBAC3G,aAEA,MAAO,CACHua,sBAIJ,SAA+B3d,UAAWtH,oBACtC,CAAA,GAAI0K,qBAAqBS,mBAAmB,oBAAqB,CAC7DnL,mBAAqBA,oBAAsB,CAACU,aAAa,GACzD,IAAIhC,OAAST,gBAAgBU,YAAY,6BAA8B,MAAO,2BAC1EC,YAAcf,kBAAkBgB,IAAImB,oBACxC,OAAOpB,YACFG,IAAI,YAAcuI,UAAY,yBAC9BzI,MACAO,QAAQV,OAAOW,MAGpB,MAAM,IAAIkF,MAAM,wDAdpB2gB,oBAkBJ,SAA6B5d,UAAW6d,UAAWnlB,oBAC/C,CAAA,GAAI0K,qBAAqBS,mBAAmB,oBAAqB,CAC7DnL,mBAAqBA,oBAAsB,CAACU,aAAa,GACzD,IAAIhC,OAAST,gBAAgBU,YAAY,6BAA8B,MAAO,yBAC1EC,YAAcf,kBAAkBgB,IAAImB,oBACxC,OAAOpB,YACFG,IAAI,YAAcuI,UAAY,wBAA0B6d,WACxDtmB,MACAO,QAAQV,OAAOW,MAGpB,MAAM,IAAIkF,MAAM,0DCnChC7G,QAAQC,OAAO,uBAAuBC,QAAQ,8BAC1C,CAAC,oBAAqB,kBAAmB,iBAAkB,qBAAsB,kBAC7E,SAAUC,kBAAmBI,gBAAiB4N,eAAgB/N,mBAAoBI,iBAC9E,aAEA,IAAIknB,mBAAqB,IAAIlnB,gBACzBmnB,mBAAqBxZ,eAAeK,MA0CxC,MAAO,CACHoZ,sBAzCJ,SAA+Bhe,UAAWtH,mBAAoB6C,sBAC1D,IAAInE,OAAST,gBAAgBU,YAAYkE,sBAAwB,8BAA+B,MAAO,yBAIvG,OAFA7C,mBAAqBA,oBAAsB,CAACU,YAAa2kB,qBACtC3kB,YAAc0kB,mBAAmBpkB,SAASsG,YAActH,mBAAmBU,YACvF7C,kBAAkBgB,IAAImB,oBACxBjB,IAAI,WAAYuI,WAChBvI,IAAI,eACJF,MACAO,QAAQV,OAAOW,OAiCpBkmB,0BA9BJ,SAAmCje,UAAWke,qBAAsBxlB,mBAAoB6C,sBACpF,IAAInE,OAAST,gBAAgBU,YAAYkE,sBAAwB,8BAA+B,MAAO,6BAGvG,OADA7C,mBAAqBA,oBAAsB,CAACU,YAAa2kB,oBAClDxnB,kBAAkBgB,IAAImB,oBACxBjB,IAAI,WAAYuI,WAChBvI,IAAI,cAAeymB,sBACnB3mB,MACAO,QAAQV,OAAOW,OAuBpBomB,qBApBJ,SAA8Bne,UAAWoe,kBAAmB7iB,sBACxD,IAAInE,OAAST,gBAAgBU,YAAYkE,sBAAwB,8BAA+B,MAAO,wBAEvG,OAAOhF,kBAAkBgB,MACpBE,IAAI,WAAYuI,WAChBvI,IAAI,eACJkK,WAAWyc,mBACXtmB,QAAQV,OAAOW,MACfD,QAAQ,WACLgmB,mBAAmB3lB,IAAI6H,cAY/Bqe,gCARJ,SAAyCtlB,QACrC,OAAOvC,mBAAmBwC,YAAY,uBAAwBD,aC7C9E3C,QAAQC,OAAO,uBAAuBC,QAAQ,2BAC1C,CAAC,oBAAqB,kBAClB,SAAUC,kBAAmBI,iBACzB,aAEA,MAAO,CACH2nB,WAGJ,SAAoBvM,IAChB,IAAI3a,OAAST,gBAAgBU,YAAY,2BAA4B,MAAO,eAC5E,OAAOd,kBAAkBgB,MAAME,IAAI,WAAYsa,IAAIpZ,QAAQ,WAAWb,QAAQV,OAAOW,WCXrG,SAAU3B,SACN,aAuVD8F,OAAO9F,QArVEC,OAAO,uBAAuBC,QAAQ,oBAAqB,CAC/D,aACA,kBACA,oBACA,iBACA,yBACA,qBACA,kBAIJ,SACIue,WACAle,gBACAJ,kBACAgO,eACAyW,uBACAxkB,mBACAI,iBAGA,IAAI2nB,cAAgB,IAAI3nB,gBACpB4nB,oBAAsB,IAAI5nB,gBAC1BmnB,mBAAqBxZ,eAAeK,MAwCxC,OAtCAiQ,WAAWjB,IAAI,gBAAiB,SAASC,MAAOhB,MAC5C0L,cAAcpmB,IAAI0a,KAAK7S,WACvBwe,oBAAoBrmB,IAAI0a,KAAK7S,aAGnB,CACVye,WAkCJ,SAAoBxnB,IAAKyB,mBAAoB6C,sBACtC6B,EAAEjE,SAAST,sBAAwB6C,uBAClCA,qBAAuB7C,mBACvBA,mBAAqB,MAEzBA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAYkE,sBAAwB,oBAAqB,MAAO,cAG7F,OADkBhF,kBAAkBgB,IAAImB,oBACrBjB,IAAI,WAAYR,KAAKM,MAAMO,QAAQV,OAAOW,OA1C7D2mB,gBAqDJ,SAAyBznB,IAAKyB,oBAC1BA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,4BAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,YAAcR,IAAM,iBAAiBM,MAAMO,QAAQV,OAAOW,OAxDjF4mB,oBA2DJ,SAA6B1nB,IAAKyB,oBAC9BA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,gCAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,YAAcR,IAAM,qBAAqBM,MAAMO,QAAQV,OAAOW,OA9DrF6mB,aAiEJ,SAAsB3nB,IAAKyB,oBACvBA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,yBAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,YAAcR,IAAM,cAAcM,MAAMO,QAAQV,OAAOW,OApE9E4B,gBAuEJ,SAAyB1C,IAAKyB,oBAC1BA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,4BAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,YAAcR,IAAM,iBAAiBM,MAAMO,QAAQV,OAAOW,OA1EjF8mB,oBA6EJ,SAA6B5nB,IAAKyB,oBAC9BA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,iCAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,YAAcR,IAAM,sBAAsBM,MAAMO,QAAQV,OAAOW,OAhFtF+mB,YAmFJ,SAAqB7nB,IAAKyB,oBACtB,OAAOqmB,oBAAoB9nB,KAAK,EAAMyB,qBAnFtCsmB,kBAsFJ,SAA2B/nB,IAAKyB,oBAC5B,OAAOqmB,oBAAoB9nB,KAAK,EAAOyB,qBAtFvCumB,eAAgBA,eAChBC,WAwJJ,SAAoBjoB,IAAKyB,oBACrBA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,uBAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,YAAcR,IAAM,YAAYM,MAAMO,QAAQV,OAAOW,OA3J5EonB,gBA8JJ,SAAyBloB,IAAKyB,oBAC1BA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAAsBQ,cAAc7kB,SAASzC,MACvG,IAAIG,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,sBAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,YAAcR,IAAM,iBAAiBM,MAAMO,QAAQV,OAAOW,OAjKjFqnB,UAoKJ,SAAmBnoB,IAAKyB,oBACpBA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,sBAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,YAAcR,IAAM,WAAW0B,UAAUb,QAAQV,OAAOW,OAvK/EsnB,sBA0KJ,SAA+BpoB,IAAK2a,OAAQlZ,oBACxCA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,mCACjEC,YAAcf,kBAAkBgB,IAAImB,oBACpCD,OAAS,CACT6mB,WAAY1N,QAEhB,OAAOta,YAAYG,IAAI,WAAYR,KAAKoH,UAAU,qBAAsB5F,QAAQX,QAAQV,OAAOW,OAhL/FwnB,UAoMJ,SAAmBtoB,IAAKuoB,uBAAwB9mB,oBAC5CA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,sBACjEooB,oBAAsBD,wBAA0BxE,uBAAuB0E,oCAAsC,GAEjH,OADkBnpB,kBAAkBgB,IAAImB,oBAEnCjB,IAAI,WAAYR,KAChBoH,UAAU,SAAU,CACjBshB,4BAA6BF,sBAEhC3nB,QAAQV,OAAOW,OA7MpB6nB,gBAgNJ,SAAyB3oB,IAAK2a,OAAQlZ,oBAClCA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,4BAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,WAAYR,KAAKoH,UAAU,eAAgB,CAACihB,WAAY1N,SAAS9Z,QAAQV,OAAOW,OAnNvG8nB,8BAsNJ,SAAuC5oB,IAAKyB,oBACxCA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,4CAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,YAAcR,IAAM,+BAA+BM,MAAMO,QAAQV,OAAOW,OAzN/F+nB,qBA0LJ,SAA8B9f,UAAW+f,mBAAoBrnB,oBACzDA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,kCAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,WAAYuI,WAAWvI,IAAI,qBAAsBsoB,oBAAoBxoB,MAAMO,QAAQV,OAAOW,OA7LjHioB,cAkOJ,SAAuBpS,SACnB,IAAIxW,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,iBAErE,OADkBd,kBAAkBgB,MACjBC,IAAI,aAAac,KAAKsV,SAAS9V,QAAQV,OAAOW,OApOjEkoB,yBAuOJ,SAAkClnB,QAC9B,IAAI3B,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,4BACrE,OAAOb,mBAAmBwC,YAAY,kBAAmBD,QAAQjB,QAAQV,OAAOW,OAxOhFmoB,+BA6KJ,SAAwCjpB,IAAK2a,OAAQlZ,oBACjDA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,8CACjEC,YAAcf,kBAAkBgB,IAAImB,oBACpCD,OAAS,CACT6mB,WAAY1N,QAEhB,OAAOta,YAAYG,IAAI,WAAYR,KAAKoH,UAAU,iCAAkC5F,QAAQX,QAAQV,OAAOW,OAnL3GooB,mBA0OJ,SAA4BngB,UAAWogB,aAAc7kB,sBACjD,IAAInE,OAAST,gBAAgBU,YAAYkE,sBAAwB,oBAAqB,MAAO,sBAE7F,OAAOhF,kBAAkBgB,MACpBE,IAAI,WAAYuI,WAChBvI,IAAI,SACJsL,UAAUqd,cACVtoB,QAAQV,OAAOW,OAhPpBsoB,cAuNJ,SAAuBppB,IAAKyB,oBACxBA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,0BAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,YAAcR,IAAM,eAAeM,MAAMO,QAAQV,OAAOW,OA1N/EuoB,YAkPJ,SAAqBrpB,IAAKyB,oBACtBA,mBAAqBA,oBAAsB,CAAEU,YAAc2kB,oBAC3D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,eAErE,OADkBd,kBAAkBgB,MACjBE,IAAI,YAAaR,KAAKO,IAAI,aAAamB,UAAUb,QAAQV,OAAOW,OArPnFwoB,sBAyFJ,SAA+BtpB,IAAKyB,oBAChC,OAAOumB,eAAehoB,IAAKyB,oBAAoBhB,KAAK,SAAS8oB,aAWzD,IAVA,IAQIC,MARAhjB,OAAS,CACT+iB,YAAcA,YACdE,kBAAmB,GAInBC,YAAc,GACdC,WAAa,aAGRnJ,EAAI,EAAGA,EAAI+I,YAAYjN,OAAQkE,IAAK,CACzC,IAAI1M,WAAayV,YAAY/I,GAEzBmJ,aAAe7V,WAAW8V,qBAEZC,IAAVL,OACAE,YAAYvmB,KAAKqmB,OAGrBA,MAAQ,CACJM,MAAOhW,WAAW8V,cAClBG,QAAQ,EACRR,YAAa,IAGjBI,WAAaH,MAAMM,OAIvBN,MAAMD,YAAYpmB,KAAK2Q,YAEnBA,WAAWkW,WACXR,MAAMO,QAAS,EACfvjB,OAAOijB,kBAAmB,GAUlC,OANGD,OACCE,YAAYvmB,KAAKqmB,OAGrBhjB,OAAOkjB,YAAcA,YAEdljB,UArIXyjB,kBAsBJ,SAA2BjqB,IAAKyB,oBAC5BA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,qBAGrE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,YAAcR,IAAM,YAAYM,MAAMO,QAAQV,OAAOW,OA1B5EopB,YAsPJ,SAAqBnhB,WACjB,IAAI5I,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,eAErE,OADkBd,kBAAkBgB,MAE/BE,IAAI,WAAYuI,WAChBrH,QAAQ,YACRb,QAAQV,OAAOW,OA3PpBqpB,gBA8PJ,SAAyBphB,WACrB,IAAI5I,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,mBAErE,OADkBd,kBAAkBgB,MAE/BE,IAAI,WAAYuI,WAChBrH,QAAQ,gBACRb,QAAQV,OAAOW,OAnQpBspB,sBAsQJ,SAA+BjE,WAAYkE,eAAgBC,SAAUC,WAAY9oB,oBAC7EA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,yBAErE,OADkBd,kBAAkBgB,IAAImB,oBACrBjB,IAAI,sBAAwB2lB,WAAa,IAAMkE,eAAiB,IAAMC,SAAW,IAAMC,YAAYjqB,MAAMO,QAAQV,OAAOW,OAzQ3I0pB,sBA4QJ,SAA+BC,oBAC3B,IAAItqB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,+BAErE,OADkBd,kBAAkBgB,MACjBE,IAAI,qBAAqBiqB,oBAAoBlf,SAAS1K,QAAQV,OAAOW,OA9QxF4pB,iBAiRJ,SAA0B5Q,KAAK/Q,WAC3B,IAAI5I,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,+BAErE,OADkBd,kBAAkBgB,MACjBC,IAAI,YAAYwI,UAAU,mBAAmB1H,KAAKyY,MAAMjZ,QAAQV,OAAOW,QAhN9F,SAASgnB,oBAAoB9nB,IAAK8S,gBAAiBrR,oBAC/CA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAC1D,IAAI3mB,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,wBACjEC,YAAcf,kBAAkBgB,IAAImB,oBACxC,OAAOpB,YAAYG,IAAI,WAAYR,KAAK0B,QAAQ,WAAY,CAACipB,YAAa7X,kBAAkBjS,QAAQV,OAAOW,MAG/G,SAASknB,eAAehoB,IAAKyB,oBACzBA,mBAAqBA,oBAAsB,CAAEU,YAAa2kB,oBAAsBS,oBAAoB9kB,SAASzC,MAE7G,IAAIG,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,2BACjEC,YAAcf,kBAAkBgB,IAAImB,oBACxC,OAAOpB,YAAYG,IAAI,YAAcR,IAAM,gBAAgBM,MAAMO,QAAQV,OAAOW,UA/I5F,GCAA3B,QAAQC,OAAO,uBAAuBC,QAAQ,kBAC1C,CAAC,oBAAqB,kBAAmB,aAAc,SAAUC,kBAAmBI,gBAAiBke,YACjG,aAEA,MAAO,CACHgN,SAQJ,SAAkB7hB,UAAWD,SACzB,IAAI3I,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,kBAEnE,OADkBd,kBAAkBgB,MAE/BE,IAAI,YAAcuI,UAAY,WAAaD,SAC3CxI,MACAO,QAAQV,OAAOW,OAbpB+pB,eAgBJ,SAAwB/hB,SACpB,IAAI3I,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,oBAEnE,OADkBd,kBAAkBgB,MAE/BE,IAAI,UAAYsI,SAChBxI,MACAO,QAAQV,OAAOW,OArBpBgqB,iBAwBJ,SAA0B/hB,UAAWD,SACjC,IAAI3I,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,sBAEnE,OADkBd,kBAAkBgB,MAE/BE,IAAI,YAAcuI,UAAY,WAAaD,QAAU,aACrDxI,MACAO,QAAQV,OAAOW,OA7BpBiqB,YAgCJ,SAAqB9K,OACjB,IAAI9f,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,gBAEnE,OADkBd,kBAAkBgB,MAE/BC,IAAI,UACJc,KAAK4e,OACLpf,QAAQV,OAAOW,MACfD,QAAQ,WACL+c,WAAWoN,MAAM,gBAAiB,CAACjiB,UAAWkX,MAAMgL,QAAQ9pB,QAvCpE+pB,sBA2CJ,SAA+Bpc,eAC3B,IAAI3O,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,yBAEnE,OADkBd,kBAAkBgB,MAE/BE,IAAI,qBAAuBsO,eAC3BxO,MACAO,QAAQV,OAAOW,OAhDpBqqB,6BAmDJ,SAAsCpiB,UAAWD,SAC7C,IAAI3I,OAAST,gBAAgBU,YAAY,kBAAmB,MAAO,qCAEnE,OADkBd,kBAAkBgB,MAE/BE,IAAI,YAAcuI,UAAY,WAAaD,QAAU,sBACrDxI,MACAO,QAAQV,OAAOW,WCnEhC3B,QAAQC,OAAO,uBAAuBC,QAAQ,mBAAoB,CAC9D,kBACA,oBACA,SACIK,gBACAJ,mBAEA,aAEA,MAAO,CACH8rB,kBAGJ,SAA2BriB,UAAWogB,aAAc7kB,sBAChD,IAAInE,OAAST,gBAAgBU,YAAYkE,sBAAwB,mBAAoB,MAAO,qBAE5F,OAAOhF,kBAAkBgB,MACpBE,IAAI,UAAWuI,WACfvI,IAAI,SACJsL,UAAUqd,cACVtoB,QAAQV,OAAOW,WCpBhC3B,QAAQC,OAAO,uBAAuBC,QAAQ,qBAC1C,CAAC,oBAAqB,qBAAsB,KAAM,SAAU,kBAAmB,cAC3E,SAAUC,kBAAmBC,mBAAoBC,GAAIC,OAAQC,gBAAiBwM,aAC1E,aAEA,IAAIE,aAEJ,MAAO,CACHif,YAcJ,SAAqBvQ,GAAI7a,cACrB,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,qBAAsB,MAAO,eAEtF,OAAOX,kBAAkBgB,MAAMC,IAAI,oBAAoBC,IAAIsa,IAAIxa,MAAMO,QAAQV,OAAOW,OAhBpFwqB,8BAmBJ,SAAuCxQ,GAAI7a,cACvC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,qBAAsB,MAAO,iCAEtF,OAAOX,kBAAkBgB,MAAMC,IAAI,0BAA0BC,IAAIsa,IAAIxa,MAAMO,QAAQV,OAAOW,OArB1FyqB,iBAwBJ,SAA0B3Y,WAAY3S,cAClC,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,qBAAsB,MAAO,eAEtF,OAAOX,kBAAkBgB,MAAMC,IAAI,oBAAoBsM,eAAe,CAACF,MAAO6O,oBAAoB9Z,QAAQ,CAAC8pB,MAAO5Y,aAAa/R,QAAQV,OAAOW,OA1B9I2qB,qCA6BJ,SAA8C7Y,WAAY3S,cACtD,IAAIE,OAAST,gBAAgBU,YAAYH,cAAgB,qBAAsB,MAAO,eAEtF,OAAOX,kBAAkBgB,MAAMC,IAAI,oBAAoBsM,eAAe,CAACF,MAAO6O,oBAAoB9Z,QAAQ,CAAC8pB,MAAO5Y,WAAY8Y,sBAAsB,IAAO7qB,QAAQV,OAAOW,QA7B9K,SAAS0a,kBAKL,OAJKpP,eACDA,aAAeF,YAAYG,QAAQC,UAGhCF,iBCnBvB,WACI,aAEAjN,QAAQC,OAAO,uBAAuBC,QAAQ,iBAAkB,CAC5D,KACA,mBAIJ,SACIG,GACAmsB,kBAEA,MAAO,CACHC,iBAGJ,SAA0BC,SAAUC,eAChC,IAAIvjB,QAAUojB,iBAAiBC,iBAAiBC,SAAUC,eAAetjB,YACzE,OAAOhJ,GAAGmC,KAAK4G,cAnB3B,GCAA,WACI,aAEApJ,QAAQC,OAAO,uBAAuBC,QAAQ,6BAA8B,CACxE,KACA,+BAIJ,SACIG,GACAusB,8BAEA,MAAO,CACHC,uBAOJ,SAAgCC,eAC5B,IAAI1jB,QAAUwjB,6BAA6BC,uBAAuBC,eAClE,OAAOzsB,GAAGmC,KAAK4G,UARf2jB,2BAWJ,SAAoCC,MAChC,IAAI5jB,QAAUwjB,6BAA6BG,2BAA2BC,MACtE,OAAO3sB,GAAGmC,KAAK4G,UAZf6jB,SAeJ,SAAkBC,WAAYC,aAAcT,SAAUU,UAClD,OAAOR,6BAA6BK,SAASC,WAAYC,aAAcT,SAAUU,WAfjFC,eAkBJ,WACIT,6BAA6BS,kBAlB7BC,kBAqBJ,SAA2BR,eACvBF,6BAA6BU,kBAAkBR,oBAxC3D,GCAA,WACI,aAEA9sB,QAAQC,OAAO,uBAAuBC,QAAQ,oBAAqB,CAC/D,KACA,sBAIJ,SACIG,GACAktB,qBAEA,MAAO,CACHC,UAIJ,SAAmBC,OAAQngB,cAAe1D,UAAWgB,WAAYjB,QAAS+W,WACtE,IAAItX,QAAUmkB,oBAAoBC,UAAUC,OAAQngB,cAAe1D,UAAWgB,WAAYjB,QAAS+W,WAAWrX,YAC9G,OAAOhJ,GAAGmC,KAAK4G,UALfskB,iBAQJ,SAA0BD,QACtB,OAAOF,oBAAoBG,iBAAiBD,aAxBxD,GCAA,WACI,aAEAztB,QAAQC,OAAO,uBAAuBC,QAAQ,kBAAmB,CAC7D,KACA,oBAIJ,SACIG,GACAstB,mBAEA,MAAO,CACHC,aAIJ,SAAsBtgB,cAAe1D,UAAWgB,WAAYjB,QAAS+W,WACjE,IAAItX,QAAUukB,kBAAkBC,aAAatgB,cAAe1D,UAAWgB,WAAYjB,QAAS+W,WAAWrX,YACvG,OAAOhJ,GAAGmC,KAAK4G,UALfykB,iBAQJ,WACI,IAAIzkB,QAAUukB,kBAAkBE,mBAAmBxkB,YACnD,OAAOhJ,GAAGmC,KAAK4G,cAzB3B,GCAA,WACI,aAEApJ,QAAQC,OAAO,uBAAuBC,QAAQ,kBAAmB,CAC7D,KACA,oBAIJ,SACIG,GACAytB,mBAEA,MAAO,CACHC,MAGJ,SAAeX,SAAUY,SAAU7M,OAAQ8M,gBACvC,IAAI7kB,QAAU0kB,kBAAkBC,MAAMX,SAAUY,SAAU7M,OAAQ8M,gBAAgB5kB,YAClF,OAAOhJ,GAAGmC,KAAK4G,cAnB3B,GCAA,WACI,aAEApJ,QAAQC,OAAO,uBAAuBC,QAAQ,oBAAqB,CAC/D,KACA,sBAIJ,SACIG,GACA6tB,qBAEA,MAAO,CACHC,wBAGJ,SAAiChN,OAAQiN,QACrC,IAAIhlB,QAAU8kB,oBAAoBC,wBAAwBhN,OAAQiN,QAAQ/kB,YAC1E,OAAOhJ,GAAGmC,KAAK4G,cAnB3B,GCAA,SAAUpJ,SACR,aA0CC8F,OAAO9F,QAxCAC,OAAO,uBAAuBC,QAAQ,oBAAqB,CACjE,kBACA,oBAIF,SACEK,gBACAJ,mBAOE,MALc,CACZkuB,QAMF,SAAiBxtB,KACf,IAAIG,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,WAErE,OADkBd,kBAAkBgB,MACjBC,IAAI,kBACpBC,IAAIR,KACJM,MACAO,QAAQV,OAAOW,OAXlB2sB,YAcF,SAAqBC,aAEnBA,YAAcA,YAAY/T,QAAQ,SAAU,IAE5C,IAAIxZ,OAAST,gBAAgBU,YAAY,oBAAqB,MAAO,eAGrE,OAFkBd,kBAAkBgB,MAGnCE,IAAI,+BACJF,IAAI,CAACqtB,YAAaD,cAClB7sB,QAAQV,OAAOW,WAvCxB,GCAA3B,QAAQC,OAAO,uBACVC,QAAQ,sBAAuB,CAAC,oBAAqB,SAAU6E,mBAC5D,aAQA,MAAO,CACH0pB,cAPgB,SAAUtmB,cAC7B,IAAI7C,YAAc,gCAAkC6C,aAEjD,OAAOpD,kBAAkB5D,MAAMC,IAAI,cAAgBkE,aAAa/C,eCP5E,WACI,aAEAvC,QAAQC,OAAO,uBAAuBC,QAAQ,qBAAsB,CAChE,oBACA,kBAIJ,SACIC,kBACAI,iBAEA,MAAO,CACHmuB,sCAMJ,SAA+C9jB,YAE3C,IAAI5J,OAAST,gBAAgBU,YAAY,qBAAsB,MAAO,yCAEtE,OADkBd,kBAAkBgB,MAE/BE,IAAI,YAAcuJ,WAAa,gBAC/BzJ,MACAO,QAAQV,OAAOW,OAZpBgtB,gBAeJ,SAAyB/jB,YACrB,IAAI5J,OAAST,gBAAgBU,YAAY,qBAAsB,MAAO,eAEtE,OADkBd,kBAAkBgB,MAE/BE,IAAI,YAAcuJ,YAClBzJ,MACAO,QAAQV,OAAOW,OApBpBitB,kBAuBJ,WACI,IAAI5tB,OAAST,gBAAgBU,YAAY,qBAAsB,MAAO,eAEtE,OADkBd,kBAAkBgB,MAE/BE,IAAI,kBACJF,MACAO,QAAQV,OAAOW,OA5BpBktB,qBA+BJ,SAA8BC,mBAC1B,IAAI9tB,OAAST,gBAAgBU,YAAY,qBAAsB,MAAO,wBAEtE,OADkBd,kBAAkBgB,MAEnCE,IAAI,+BACJF,IAAI2tB,mBACJptB,QAAQV,OAAOW,WAtD5B,GCAA3B,QAAQC,OAAO,uBAAuBC,QAAQ,sBAC1C,CAAC,oBAAqB,kBAAmB,qBACrC,SAAUC,kBAAmBI,gBAAiBH,oBAC1C,aAEA,MAAO,CACH2uB,mBASJ,SAA4BC,IAAKC,OAAQrkB,YACrC,IAAI5J,OAAST,gBAAgBU,YAAY,sBAAuB,MAAO,sBACvE,OAAOd,kBAAkBgB,MACpBE,IAAI,mBAAqB2tB,IAAM,IAAMC,OAAS,OAASrkB,YACvDzJ,MACAO,QAAQV,OAAOW,OAbpButB,sBAgBJ,SAA+B9jB,KAAMR,WAAYkG,QAASnH,QAASwlB,4BAC/D,IAAIjuB,YAAcf,kBAAkBgB,MAChC4hB,QAAU,CACVvX,KAAMJ,KACNgkB,WAAYxkB,WACZykB,QAASve,QACTlC,QAASjF,QACT2lB,2BAA4BH,4BAE5BnuB,OAAST,gBAAgBU,YAAY,sBAAuB,MAAO,yBACvE,OAAOC,YACFE,IAAI,aAAewJ,WAAa,wBAChC1I,KAAK6gB,SACLrhB,QAAQV,OAAOW,OA5BpB4tB,eA+BJ,SAAwBC,OACpB,IAAIxuB,OAAST,gBAAgBU,YAAY,sBAAuB,MAAO,kBAEvE,OADkBd,kBAAkBgB,MACjBC,IAAI,yBAA2BouB,OAC/BjtB,UACAb,QAAQV,OAAOW,SAnClC8tB,gBAsCJ,SAAyB3e,QAAS1F,KAAMR,WAAYhB,UAAWD,QAASrH,oBACpEA,mBAAqBA,oBAAsB,CAACU,aAAa,GACzD,IAAI9B,YAAcf,kBAAkBgB,IAAImB,oBACpCygB,QAAU,CACVvX,KAAMJ,KACNsD,UAAW9E,UACXylB,QAASve,QACTlC,QAASjF,SAET3I,OAAST,gBAAgBU,YAAY,sBAAuB,MAAO,mBACvE,OAAOC,YACFE,IAAI,aAAewJ,WAAa,kBAChC1I,KAAK6gB,SACLrhB,QAAQV,OAAOW,OAlDpB+tB,qBA6DJ,SAA8BC,UAAWC,qBAAsBttB,oBAE3DA,mBAAqBA,oBAAsB,CAACU,aAAa,GACzD,IAAIhC,OAAST,gBAAgBU,YAAY,sBAAuB,MAAO,0BACnEC,YAAcf,kBAAkBgB,IAAImB,oBACpCD,OAAS,qBAAyB,IAAMutB,qBAAuB,GACnE,OAAO1uB,YAAYE,IAAI,gCAAkCiB,QAAQH,KAAKytB,WAAWjuB,QAAQV,OAAOW,OAlEhGkuB,eAqEJ,SAAwBC,0BAA2BxtB,oBAE/CA,mBAAqBA,oBAAsB,CAACU,aAAa,GACzD,IAAIhC,OAAST,gBAAgBU,YAAY,sBAAuB,MAAO,oBACnEC,YAAcf,kBAAkBgB,IAAImB,oBACpCD,OAAUytB,0BAA8C,qBAAI,IAAMA,0BAA0BC,qBAAuB,GACvH,OAAO7uB,YAAYE,IAAI,qBAAuBiB,QAAQH,KAAK4tB,2BAA2BpuB,QAAQV,OAAOW,OA1ErGquB,sBA6EJ,SAAgCrtB,QAC5B,IAAI3B,OAAST,gBAAgBU,YAAY,sBAAuB,MAAO,yBACvE,OAAOb,mBAAmBwC,YAAY,yBAA0BD,QAAQjB,QAAQV,OAAOW,WC3FvG,SAAU3B,SACN,aAEAA,QAAQC,OAAO,uBAAuBC,QAAQ,iBAAkB,CAC5D,yBAIJ,SACI0kB,wBAEA,MAAO,CACHqL,oBAIJ,WACI,IAAIC,SAAWtL,uBAAuBuL,yBACtC,OAAQD,UACDA,SAASE,cANhBC,uBASJ,WACI,IAAIH,SAAWtL,uBAAuBuL,yBACtC,OAAQD,UACDA,SAASI,qBAzB5B,CA4BGtwB,SC5BHA,QAAQC,OAAO,uBAAuBC,QAAQ,iBAC1C,CAAC,KAAM,mBACH,SAAUG,GAAIkwB,kBACV,aAEA,MAAO,CACHC,aAoBJ,WACI,IAAIpnB,QAAUmnB,iBAAiBC,eAC/B,OAAOnwB,GAAGmC,KAAK4G,UArBfqnB,qBAwBJ,WACIF,iBAAiBE,wBAxBjBC,oCA2BJ,SAA6CC,wBACzC,IAAIvnB,QAAUmnB,iBAAiBG,oCAAoCC,wBACnE,OAAOtwB,GAAGmC,KAAK4G,UA5BfwnB,oCA+BJ,SAA6CD,wBACzC,IAAIvnB,QAAUmnB,iBAAiBK,oCAAoCD,wBACnE,OAAOtwB,GAAGmC,KAAK4G,UAhCfynB,qBAmCJ,WACI,IAAIznB,QAAUmnB,iBAAiBM,uBAAuBxnB,YACtD,OAAOhJ,GAAGmC,KAAK4G,UApCf0nB,qBAuCJ,WACI,OAAOP,iBAAiBO,wBAvCxBC,2BA0CJ,WACI,OAAOR,iBAAiBQ,8BA1CxBC,4BA6CJ,WACI,OAAOT,iBAAiBS,+BA7CxBC,4BAgDJ,SAAqCC,UACjCX,iBAAiBU,4BAA4BC,WAhD7CC,wBAmDJ,WACI,OAAOZ,iBAAiBY,2BAnDxBC,wBAsDJ,SAAiCF,UAC7BX,iBAAiBa,wBAAwBF,WAtDzCG,6BAyDJ,WACI,OAAOd,iBAAiBc,gCAzDxBC,6BA4DJ,SAAsCJ,UAClCX,iBAAiBe,6BAA6BJ,WA5D9CK,yBA+DJ,WACI,OAAOhB,iBAAiBgB,4BA/DxBC,yBAkEJ,SAAkCN,UAC9BX,iBAAiBiB,yBAAyBN,WAlE1CO,sBAqEJ,SAA+BtQ,OAAQuQ,oBAAqBC,mBACxD,IAAIvoB,QAAUmnB,iBAAiBkB,sBAAsBtQ,OAAQuQ,oBAAqBC,mBAClF,OAAOtxB,GAAGmC,KAAK4G,UAtEfwoB,6BAyEJ,SAAsCzQ,OAAQxX,SAC1C,IAAIP,QAAUmnB,iBAAiBqB,6BAA6BzQ,OAAQxX,SACpE,OAAOtJ,GAAGmC,KAAK4G,UA1EfyoB,6BA6EJ,SAAsCjnB,YAClC,IAAIxB,QAAUmnB,iBAAiBsB,6BAA6BjnB,YAC5D,OAAOvK,GAAGmC,KAAK4G,cCtG/B,SAAUpJ,SACN,aA8BD8F,OAAO9F,QA5BEC,OAAO,uBAAuBC,QAAQ,mBAAoB,CAC9D,UAIJ,SACI4xB,SAIA,OADAC,iBAAiBC,WAUjB,SAAoBC,WAChB,OAAIA,UAIG,IAAIF,iBAAiBE,UAAUC,WAAYD,UAAUE,SAHjD,IAAIJ,kBAXZA,iBAEP,SAASA,iBAAiBK,WAAYpY,SAClC8X,QAAQO,oBAAoBhV,KAAM,CAC9B+U,aAAcA,WACdpY,QAASA,SAAW,SAlBpC,GCAA,SAAUha,SACN,aAKAA,QAAQC,OAAO,uBAAuBC,QAHpB,qBAGyC,CACvD,IACA,KACA,kBACA,cACA,oBACA,uBACA,mBAIJ,SACI8G,EACA3G,GACAE,gBACAwM,YACA5M,kBACA6M,qBACA+kB,kBAGA,IAAI9kB,aAAeF,YAAYG,QAAQC,SAOvC,MALc,CACVmlB,mBAMJ,SAA4B1nB,WAAYhB,UAAW2oB,WAO/C,OADapxB,IAAI,sBALJ,CACTyJ,WAAYA,WACZhB,UAAWA,UACX2oB,UAAWA,WAEiC,oCAAqCtlB,eAXrFulB,cAeJ,SAAuBpwB,WAAYuE,UAAW8rB,SAO1C,OADatxB,IAAI,eALJ,CACTiB,WAAYA,WACZuE,UAAWA,UACX8rB,QAASA,SAE4B,6BAA8BxlB,gBAI3E,SAAS9L,IAAImG,MAAOjF,OAAQkL,gBAAiBC,OACzC,GAAGD,kBAAoBP,qBAAqBS,mBAAmBF,iBAC3D,OAAOlN,GAAGmC,KAAK,IAAIuvB,kBAGvB,IAAI/wB,OAAST,gBAAgBU,YA1DnB,qBA0D4C,MAAOqG,OAC7D,OAAOnH,kBAAkBgB,MACpBE,IA3DG,WA2DYiG,OACfoG,eAAe,CAACF,MAAOA,QACvBrM,IAAIkB,QACJf,KAAK,SAASmG,MACX,OAAOsqB,iBAAiBC,WAAWvqB,QAEtC/F,QAAQV,OAAOW,UArEhC,CAyEGmE,OAAO9F,SCzEVA,QAAQC,OAAO,uBACVC,QAAQ,iBAAkB,CAAC,mBAAoB,SAAUwyB,kBACtD,aAQA,MAAO,CACHC,cAPJ,SAAuB7F,eACnB,OAAO4F,iBAAiBE,eAAe9F,eAAexrB,KAAK,WACvD,OAAOoxB,iBAAiBC,cAAc7F,cAAc+F,qBAAsB/F,cAAcgG","file":"aprima-provider-api.min.js","sourcesContent":["angular.module('aprima-provider-api', [\r\n 'restangular',\r\n 'angularLocalStorage',\r\n 'lodash',\r\n\r\n //aprima\r\n 'aprima-core',\r\n 'aprima-bridge',\r\n 'aprima-config',\r\n 'aprima-legacy-common'\r\n]);\r\n","angular.module('aprima-provider-api').factory('AppointmentRepository',\r\n ['AprimaRestangular', 'MetadataRepository', '$q', 'moment', 'AprimaAnalytics', 'SingleAccessSet',\r\n function (AprimaRestangular, MetadataRepository, $q, moment, AprimaAnalytics, SingleAccessSet) {\r\n 'use strict';\r\n\r\n var apptListeners = [];\r\n var modifiedCalendarIdsForCalendarList = new SingleAccessSet();\r\n var modifiedCalendarIdsForDashboard = new SingleAccessSet();\r\n\r\n function getAppointment (uid, appComponent, subRoute) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'AppointmentRepository', 'api', 'getAppointment');\r\n\r\n var restangular = AprimaRestangular.get();\r\n return restangular.all('appointments' + (subRoute || '')).one(uid).get().then(function(appt){\r\n\r\n //for dealing with date funkiness, and avoiding adding dependencies elsewhere\r\n appt.getClone = function getClone() {\r\n return restangular.copy(appt);\r\n };\r\n\r\n return appt;\r\n }).finally(timing.stop);\r\n }\r\n\r\n function getPatientAppointment (uid, appComponent) {\r\n return getAppointment(uid, appComponent);\r\n }\r\n\r\n function getGroupAppointment (uid, appComponent) {\r\n return getAppointment(uid, appComponent, '/group-visit');\r\n }\r\n\r\n function getEventAppointment (uid, appComponent) {\r\n return getAppointment(uid, appComponent, '/event');\r\n }\r\n\r\n function getBlockingEventAppointment (uid, appComponent) {\r\n return getAppointment(uid, appComponent, '/blocking-event');\r\n }\r\n\r\n function getAppointmentMetadata ($scope) {\r\n var timing = AprimaAnalytics.startTiming('AppointmentRepository', 'api', 'getAppointmentMetadata');\r\n return MetadataRepository.getMetadata('appointmentdetail', $scope).finally(timing.stop);\r\n }\r\n\r\n function getGroupAppointmentMetadata ($scope) {\r\n var timing = AprimaAnalytics.startTiming('AppointmentRepository', 'api', 'getAppointmentMetadata');\r\n return MetadataRepository.getMetadata('groupvisitappointment', $scope).finally(timing.stop);\r\n }\r\n\r\n function getBlockingEventAppointmentMetadata ($scope) {\r\n var timing = AprimaAnalytics.startTiming('AppointmentRepository', 'api', 'getAppointmentMetadata');\r\n return MetadataRepository.getMetadata('blockingeventappointment', $scope).finally(timing.stop);\r\n }\r\n\r\n function getEventAppointmentMetadata ($scope) {\r\n var timing = AprimaAnalytics.startTiming('AppointmentRepository', 'api', 'getAppointmentMetadata');\r\n return MetadataRepository.getMetadata('eventappointment', $scope).finally(timing.stop);\r\n }\r\n\r\n var updateAppointment = function (appt) {\r\n var timing = AprimaAnalytics.startTiming('AppointmentRepository', 'api', 'updateAppointment');\r\n return appt.put()\r\n .finally(timing.stop)\r\n .finally(function() {\r\n if(appt.Calendar) {\r\n modifiedCalendarIdsForCalendarList.add(appt.Calendar.Id);\r\n modifiedCalendarIdsForDashboard.add(appt.Calendar.Id);\r\n }\r\n });\r\n };\r\n\r\n var createAppointment = function (appt, subRoute) {\r\n var timing = AprimaAnalytics.startTiming('AppointmentRepository', 'api', 'createAppointment');\r\n return AprimaRestangular.get().all('appointments' + (subRoute || ''))\r\n .post(appt)\r\n .finally(timing.stop)\r\n .finally(function() {\r\n if(appt.Calendar) {\r\n modifiedCalendarIdsForCalendarList.add(appt.Calendar.Id);\r\n modifiedCalendarIdsForDashboard.add(appt.Calendar.Id);\r\n }\r\n });\r\n };\r\n //TODO: fill in these methods below with correct logic\r\n\r\n function updatePatientAppointment (appt) {\r\n return updateAppointment(appt);\r\n }\r\n\r\n function updateGroupAppointment (appt) {\r\n return updateAppointment(appt);\r\n }\r\n\r\n function updateEventAppointment (appt) {\r\n return updateAppointment(appt);\r\n }\r\n\r\n function updateBlockingEventAppointment (appt) {\r\n return updateAppointment(appt);\r\n }\r\n\r\n function createPatientAppointment (appt) {\r\n return createAppointment(appt);\r\n }\r\n\r\n function createGroupAppointment (appt) {\r\n return createAppointment(appt, '/group-visit');\r\n }\r\n\r\n function createEventAppointment (appt) {\r\n return createAppointment(appt, '/event');\r\n }\r\n\r\n function createBlockingEventAppointment (appt) {\r\n return createAppointment(appt, '/blocking-event');\r\n }\r\n\r\n function getDashboardAppointments(calendar, restangularOptions, appComponent) {\r\n if(angular.isString(restangularOptions)) {\r\n appComponent = restangularOptions;\r\n restangularOptions = null;\r\n }\r\n\r\n restangularOptions = restangularOptions || { ignoreCache: false };\r\n\r\n var calendarId = calendar.Id || null;\r\n var options = {\r\n date: moment().format('MM-DD-YYYY'),\r\n offsetMinutes: moment().utcOffset()\r\n };\r\n\r\n restangularOptions.ignoreCache = modifiedCalendarIdsForDashboard.contains(calendarId) || restangularOptions.ignoreCache;\r\n\r\n return getAppointmentsInternal(calendarId, options, restangularOptions, appComponent);\r\n\r\n }\r\n\r\n function addListener(callback) {\r\n if (apptListeners && callback && apptListeners.indexOf(callback) < 0) {\r\n apptListeners.push(callback);\r\n }\r\n }\r\n\r\n function removeListener(callback) {\r\n if (apptListeners && callback && apptListeners.indexOf(callback) >= 0) {\r\n apptListeners.pop(callback);\r\n }\r\n }\r\n\r\n function getAppointments(calendarId, params, restangularOptions, appComponent) {\r\n if(angular.isString(restangularOptions)) {\r\n appComponent = restangularOptions;\r\n restangularOptions = null;\r\n }\r\n\r\n restangularOptions = restangularOptions || { ignoreCache: false };\r\n\r\n restangularOptions.ignoreCache = modifiedCalendarIdsForCalendarList.contains(calendarId) || restangularOptions.ignoreCache;\r\n\r\n return getAppointmentsInternal(calendarId, params, restangularOptions, appComponent);\r\n }\r\n\r\n function getAppointmentsInternal (calendarId, params, restangularOptions, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'AppointmentRepository', 'api', 'getAppointments');\r\n if (calendarId) {\r\n return AprimaRestangular.get(restangularOptions)\r\n .all('calendars/' + calendarId + '/appointments')\r\n .getList(params)\r\n .finally(timing.stop);\r\n }\r\n\r\n return $q.when([]);\r\n }\r\n\r\n return {\r\n getAppointmentDetails: getPatientAppointment,\r\n getAppointmentMetadata: getAppointmentMetadata,\r\n getDashboardAppointments: getDashboardAppointments,\r\n getAppointments: getAppointments,\r\n getGroupAppointmentMetadata: getGroupAppointmentMetadata,\r\n getBlockingEventAppointmentMetadata: getBlockingEventAppointmentMetadata,\r\n getEventAppointmentMetadata: getEventAppointmentMetadata,\r\n getGroupAppointment: getGroupAppointment,\r\n getEventAppointment: getEventAppointment,\r\n addListener: addListener,\r\n removeListener: removeListener,\r\n getBlockingEventAppointment: getBlockingEventAppointment,\r\n updatePatientAppointment: updatePatientAppointment,\r\n createPatientAppointment: createPatientAppointment,\r\n updateGroupAppointment: updateGroupAppointment,\r\n createGroupAppointment: createGroupAppointment,\r\n updateEventAppointment: updateEventAppointment,\r\n createEventAppointment: createEventAppointment,\r\n updateBlockingEventAppointment: updateBlockingEventAppointment,\r\n createBlockingEventAppointment: createBlockingEventAppointment\r\n };\r\n }]);\r\n","angular.module('aprima-provider-api').factory('AttachmentApprovalRepository', ['AprimaRestangular',\r\n function (AprimaRestangular) {\r\n 'use strict';\r\n\r\n var approve = function (messageUid, attachmentUid) {\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('aamessage', messageUid).one('approve', attachmentUid).post();\r\n };\r\n\r\n\r\n return {\r\n approve: approve\r\n };\r\n\r\n }]);","angular.module('aprima-provider-api')\r\n .factory('AttachmentRepository', ['AprimaRestangular', 'AprimaAnalytics', function (aprimaRestangular, AprimaAnalytics) {\r\n 'use strict';\r\n\r\n var getAttachment = function (attachmentId, requestSettings, applicationComponent, disableInLinePdf) {\r\n var timing = AprimaAnalytics.startTiming(applicationComponent || 'AttachmentRepository', 'api', 'getAttachment');\r\n var inlinePDF = (disableInLinePdf) ? false : true;\r\n \tvar queryString = '?page=' + requestSettings.page + '&height=' + requestSettings.height + '&width=' + requestSettings.width + '&inLinePDF=' + inlinePDF;\r\n\r\n return aprimaRestangular.get().one('attachments/' + attachmentId + queryString).get().finally(timing.stop);\r\n };\r\n\r\n var getAttachmentStaticUrl = function (attachmentId, applicationComponent) {\r\n var timing = AprimaAnalytics.startTiming(applicationComponent || 'AttachmentRepository', 'api', 'getAttachmentStaticUrl');\r\n\r\n return aprimaRestangular.get().one('attachments-url/' + attachmentId).get().finally(timing.stop);\r\n };\r\n\r\n var getAttachmentRetainOriginalFormat = function (attachmentId, applicationComponent) {\r\n var timing = AprimaAnalytics.startTiming(applicationComponent || 'AttachmentRepository', 'api', 'getAttachmentRetainOriginalFormat');\r\n var queryString = '?retainoriginalformat=true';\r\n return aprimaRestangular.get().one('attachments/' + attachmentId + queryString).get().finally(timing.stop);\r\n };\r\n\r\n return {\r\n getAttachment: getAttachment,\r\n getAttachmentStaticUrl: getAttachmentStaticUrl,\r\n getAttachmentRetainOriginalFormat: getAttachmentRetainOriginalFormat\r\n };\r\n\r\n }]);\r\n","(function(angular, Object) {\r\n 'use strict';\r\n\r\n var blockedSlotBehavior = {};\r\n Object.defineProperties(blockedSlotBehavior, {\r\n None: {\r\n value: 'None',\r\n writable: false,\r\n enumerable: true,\r\n configurable: false,\r\n },\r\n Override: {\r\n value: 'Override',\r\n writable: false,\r\n enumerable: true,\r\n configurable: false,\r\n },\r\n BookInAddition: {\r\n value: 'BookInAddition',\r\n writable: false,\r\n enumerable: true,\r\n configurable: false,\r\n },\r\n });\r\n\r\n\r\n angular.module('aprima-provider-api').constant('BlockedSlotBehavior', blockedSlotBehavior);\r\n})(window.angular, window.Object);\r\n","angular.module('aprima-provider-api').factory('CalendarRepository',\r\n ['AprimaRestangular', '$q',\r\n function (AprimaRestangular, $q) {\r\n 'use strict';\r\n\r\n return {\r\n getDayTemplate: getDayTemplate,\r\n getAppointmentOpenSlots: getAppointmentOpenSlots\r\n };\r\n\r\n function getDayTemplate(calendarId, params) {\r\n\r\n if (calendarId) {\r\n return AprimaRestangular.get()\r\n .all('calendars/' + calendarId + '/daytemplate')\r\n .getList(params);\r\n }\r\n\r\n return $q.when([]);\r\n\r\n }\r\n\r\n function getAppointmentOpenSlots(search) {\r\n if(!search) {\r\n return $q.when(new Error('search object must be defined'));\r\n }\r\n\r\n if(!search.calendarId) {\r\n return $q.when(new Error('calendarId must be defined'));\r\n }\r\n\r\n if(!search.date) {\r\n return $q.when(new Error('date must be defined'));\r\n }\r\n\r\n search = {\r\n calendarId: search.calendarId,\r\n startDate: search.date,\r\n appointmentTypeId: search.appointmentTypeId\r\n };\r\n\r\n return AprimaRestangular.get()\r\n .all('calendars').one(search.calendarId).all('opentemplateslots')\r\n .getList(search);\r\n }\r\n }]);\r\n","(function(angular){\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('CustomDiagnosisRepository', [\r\n '$q',\r\n 'AprimaAnalytics', \r\n 'AprimaRestangular', \r\n CustomDiagnosisRepository\r\n ]);\r\n\r\n function CustomDiagnosisRepository(\r\n $q, \r\n AprimaAnalytics, \r\n AprimaRestangular\r\n ) {\r\n var routePrefix = 'custom-diagnosis';\r\n\r\n var service = {\r\n getdiagnoses: _.partial(getdiagnoses, null),\r\n abortable: abortable,\r\n };\r\n \r\n return service;\r\n\r\n function abortable(promisesToAbort) {\r\n return {\r\n getdiagnoses: _.partial(getdiagnoses, promisesToAbort)\r\n };\r\n }\r\n \r\n\r\n function getdiagnoses(promisesToAbort,paramsObj){\r\n var result=get(promisesToAbort,'getdiagnoses',paramsObj,customGet);\r\n return result;\r\n }\r\n\r\n\r\n function get(promisesToAbort, route, params, getFn) {\r\n var restElement = AprimaRestangular.get().all(routePrefix).all(route);\r\n if(promisesToAbort) {\r\n restElement = restElement.abortable(promisesToAbort);\r\n }\r\n\r\n return getFn(restElement, params).then(function(data) {\r\n if(_.isNil(data)) {\r\n return $q.reject('IMO ' + api + ' request failed for params: ' + JSON.stringify(params));\r\n }\r\n\r\n return data;\r\n });\r\n }\r\n\r\n function customGet(element, params) {\r\n return element.customGET('', params);\r\n }\r\n\r\n }\r\n})(window.angular);","angular.module('aprima-provider-api')\r\n .factory('DiagnosisRepository', ['AprimaRestangular', function (aprimaRestangular) {\r\n 'use strict';\r\n\r\n var getDiagnoses = function (searchString, records, codeType) {\r\n records = records || 20;\r\n \r\n \tvar queryString = '?maxRecords=' + records;\r\n \r\n if(!codeType){\r\n queryString += '&diagnosisText=';\r\n } else if(codeType === 'ICD10'){\r\n queryString += '&icd10Code=';\r\n } else{\r\n queryString += '&icd9Code=';\r\n }\r\n \r\n queryString += searchString;\r\n\r\n return aprimaRestangular.get().all('diagnoses/' + queryString).getList();\r\n };\r\n \r\n var getModifiers = function(){\r\n return aprimaRestangular.get().all('diagnosis/modifiers').getList();\r\n };\r\n\r\n return {\r\n getDiagnoses: getDiagnoses,\r\n getModifiers: getModifiers\r\n };\r\n\r\n }]);","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('DosingService', [\r\n '$q',\r\n 'DosingServiceTs',\r\n DosingService,\r\n ]);\r\n\r\n function DosingService(\r\n $q,\r\n DosingServiceTs\r\n ) {\r\n \r\n var service = {\r\n convertToCommonUnit: convertToCommonUnit,\r\n getDoseRangeInfo: getDoseRangeInfo,\r\n getMinMaxWarning: getMinMaxWarning,\r\n getDosingDetailsFull: getDosingDetailsFull,\r\n getVariableDoseRanges: getVariableDoseRanges,\r\n mapDoseParams: mapDoseParams\r\n };\r\n\r\n return service;\r\n\r\n function getDoseRangeInfo(\r\n ageInDays,\r\n medId,\r\n gcnSeqNo,\r\n weightKg,\r\n heightCm,\r\n gestationalAge,\r\n doseTypeIndicator,\r\n icdCode\r\n ) {\r\n var promise = DosingServiceTs.getDoseRangeInfo(\r\n ageInDays,\r\n medId,\r\n gcnSeqNo,\r\n weightKg,\r\n heightCm,\r\n gestationalAge,\r\n doseTypeIndicator,\r\n icdCode\r\n ).toPromise();\r\n return $q.when(promise);\r\n }\r\n\r\n function getMinMaxWarning(sigInstructions, rxParameters, patientDetails) {\r\n var promise = DosingServiceTs.getMinMaxWarning(sigInstructions, rxParameters, patientDetails).toPromise();\r\n return $q.when(promise);\r\n }\r\n\r\n function mapDoseParams(sigInstructions, rxParameters, patientDetails){\r\n return DosingServiceTs.mapDoseParams(sigInstructions, rxParameters, patientDetails);\r\n }\r\n\r\n function convertToCommonUnit(dosageUnits, dosageAmount) {\r\n return DosingServiceTs.convertToCommonUnit(dosageUnits, dosageAmount);\r\n }\r\n\r\n function getDosingDetailsFull(visitId, patientId, defaultValue) {\r\n var promise = DosingServiceTs.getDosingDetailsFull(visitId, patientId, defaultValue).toPromise();\r\n return $q.when(promise);\r\n }\r\n\r\n function getVariableDoseRanges(gcnSeqNo) {\r\n var promise = DosingServiceTs.getVariableDoseRanges(gcnSeqNo).toPromise();\r\n return $q.when(promise);\r\n }\r\n }\r\n})(window.angular);\r\n","angular.module('aprima-provider-api').factory('DrugRepository',\r\n ['_', 'AprimaRestangular', 'AprimaAnalytics', 'Guid',\r\n function (_, AprimaRestangular, AprimaAnalytics, Guid) {\r\n 'use strict';\r\n\r\n return {\r\n getDrugFormularyInfo: getDrugFormularyInfo,\r\n getDrugRepresentativeFormularies: getDrugRepresentativeFormularies,\r\n getDrugFormularyDetail: getDrugFormularyDetail,\r\n nddDrugScreening: nddDrugScreening,\r\n };\r\n\r\n // This endpoint should not be called starting in PRM2018.\r\n function getDrugFormularyInfo(medId, patientId, restangularOptions) {\r\n restangularOptions = restangularOptions || {ignoreCache: false};\r\n \r\n var timing = AprimaAnalytics.startTiming('DrugRepository', 'api', 'get drug formulary info');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.all('drugs/' + medId + '/formularyalternatives/' + patientId)\r\n .getList()\r\n .finally(timing.stop);\r\n }\r\n \r\n function getDrugRepresentativeFormularies(medId, eRxEligibilityId, patientId, relVisitMedicationId, pharmacyId, days, dispenseAsWritten, totalQuantity, unitOfMeasureId, previousPMBCParameters, previousRFSParameters, providerId, restangularOptions) {\r\n restangularOptions = restangularOptions || {ignoreCache: false};\r\n \r\n var timing = AprimaAnalytics.startTiming('DrugRepository', 'api', 'get drug representative formularies');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n var url = 'drugs/' + medId +\r\n '/representativeformularies/' + (eRxEligibilityId || Guid.empty()) +\r\n '?days=' + (days || '') +\r\n '&dispenseAsWritten=' + (dispenseAsWritten || '') +\r\n '&proposedRelVisitMedicationId=' + (relVisitMedicationId || '') +\r\n '&patientId=' + (patientId || '') +\r\n '&pharmacyId=' + (pharmacyId || Guid.empty()) +\r\n '&totalQuantity=' + (totalQuantity || '') +\r\n '&unitOfMeasureId=' + (unitOfMeasureId || '') +\r\n '&previousPMBCParameters=' + (previousPMBCParameters ? encodeURIComponent(previousPMBCParameters) : '') +\r\n '&previousRFSParameters=' + (previousRFSParameters ? encodeURIComponent(previousRFSParameters) : '') +\r\n '&providerId=' + (providerId || Guid.empty()) +\r\n (medId ? '' : '&ignoreCache=' + (new Date()).getTime());\r\n return restangular.one(url)\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n \r\n function getDrugFormularyDetail(medId, patientId, restangularOptions){\r\n restangularOptions = restangularOptions || {ignoreCache: false};\r\n \r\n var timing = AprimaAnalytics.startTiming();\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.all('drugs/' + medId + '/formularydetail/' + patientId).getList().finally(timing.stop);\r\n }\r\n\r\n function nddDrugScreening(patientId, drug, otherDrugs, previousMedicationSigId) {\r\n var timing = AprimaAnalytics.startTiming('DrugRepository', 'api', 'nddDrugScreening');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('patients/' + patientId + '/nddscreening')\r\n .customPOST({\r\n Drug: drug,\r\n OtherDrugs: otherDrugs,\r\n PreviousMedicationSigUid: previousMedicationSigId\r\n })\r\n .finally(timing.stop);\r\n\r\n }\r\n }]);","angular.module('aprima-provider-api').factory('ExternalPatientsRepository', ['AprimaRestangular', 'MetadataRepository', 'AprimaAnalytics', 'storage', '_',\r\n function (AprimaRestangular, MetadataRepository, AprimaAnalytics, storage, _) {\r\n 'use strict';\r\n\r\n var storageKey = 'external-patients.reload-list';\r\n\r\n function isExternalPatientsModifiedSinceLastAccess () {\r\n return storage.get(storageKey) || false;\r\n }\r\n\r\n function requestExternalPatients(result) {\r\n storage.set(storageKey, true);\r\n return result;\r\n }\r\n\r\n function getExternalPatients(externalPatientListId, restangularOptions, appComponent) {\r\n restangularOptions = _.defaults(restangularOptions || {}, {ignoreCache: isExternalPatientsModifiedSinceLastAccess()});\r\n\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'PatientRepository', 'api', 'getExternalPatients');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.all('externalpatients/' + externalPatientListId).getList({\r\n date: moment().startOf('day').toJSON()\r\n }).finally(function() {\r\n timing.stop();\r\n\r\n if(restangularOptions.ignoreCache) {\r\n storage.remove(storageKey);\r\n }\r\n });\r\n }\r\n\r\n function getExternalPatient(hospitalRoundId) {\r\n return AprimaRestangular.get().all('externalpatients').one('patients').one(hospitalRoundId).get();\r\n }\r\n\r\n function addExternalPatient(command) {\r\n return AprimaRestangular.get().all('externalpatients').post(command).then(requestExternalPatients);\r\n }\r\n\r\n function editExternalPatient(command) {\r\n return AprimaRestangular.get().all('externalpatients').one('patients').one(command.HospitalRoundId).customPUT(command).then(requestExternalPatients);\r\n }\r\n\r\n function getAddExternalPatientModelMetadata($scope) {\r\n return MetadataRepository.getMetadata('addexternalpatient', $scope);\r\n }\r\n\r\n function getEditExternalPatientModelMetadata($scope) {\r\n return MetadataRepository.getMetadata('editexternalpatient', $scope);\r\n }\r\n\r\n function dischargePatient(hospitalRoundId) {\r\n return AprimaRestangular.get()\r\n .all('externalpatients')\r\n .one(hospitalRoundId)\r\n .post('', {\r\n HospitalRoundId: hospitalRoundId\r\n })\r\n .then(requestExternalPatients);\r\n }\r\n\r\n return {\r\n getExternalPatients: getExternalPatients,\r\n getExternalPatient: getExternalPatient,\r\n addExternalPatient: addExternalPatient,\r\n editExternalPatient: editExternalPatient,\r\n getAddExternalPatientModelMetadata: getAddExternalPatientModelMetadata,\r\n getEditExternalPatientModelMetadata: getEditExternalPatientModelMetadata,\r\n dischargePatient: dischargePatient\r\n };\r\n }]);","(function(angular) {\r\n 'use strict';\r\n\r\n var serviceName = 'FinancialCenterService';\r\n var mainRoute = 'financialcenters';\r\n\r\n angular.module('aprima-provider-api').factory(serviceName, [\r\n '_',\r\n '$q',\r\n 'AprimaAnalytics',\r\n 'AprimaCache',\r\n 'AprimaRestangular',\r\n 'ServerInfoRepository',\r\n FinancialCenterService,\r\n ]);\r\n\r\n function FinancialCenterService(\r\n _,\r\n $q,\r\n AprimaAnalytics,\r\n AprimaCache,\r\n AprimaRestangular,\r\n ServerInfoRepository\r\n ) {\r\n var defaultCache = AprimaCache.Default.httpMode;\r\n\r\n var service = {\r\n getDefault: getDefault,\r\n };\r\n\r\n return service;\r\n\r\n function getDefault(defaultToMain, providerId, serviceSiteId, calendarId) {\r\n var params = {\r\n defaultToMain: !!defaultToMain,\r\n providerId: providerId,\r\n serviceSiteId: serviceSiteId,\r\n calendarId: calendarId,\r\n };\r\n var result = get('default', params, 'DefaultFinancialCenter', defaultCache);\r\n return result;\r\n }\r\n\r\n function get(route, params, requiredFeature, cache) {\r\n if(requiredFeature && !ServerInfoRepository.isFeatureSupported(requiredFeature)) {\r\n return $q.when(null);\r\n }\r\n\r\n var timing = AprimaAnalytics.startTiming(serviceName, 'api', route);\r\n var result = AprimaRestangular.get()\r\n .one(mainRoute, route)\r\n .withHttpConfig({cache: cache})\r\n .get(params)\r\n .finally(timing.stop);\r\n\r\n return result;\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('EpaRepository', [\r\n 'AprimaRestangular',\r\n EpaRepository,\r\n ]);\r\n\r\n function EpaRepository(\r\n AprimaRestangular\r\n ) {\r\n var service = {\r\n canSendEpaRequest: canSendEpaRequest,\r\n sendEpaRequest: sendEpaRequest,\r\n };\r\n\r\n return service;\r\n\r\n function canSendEpaRequest() {\r\n var promise = AprimaRestangular.get()\r\n .one('complex-permissions', 'send-epa-request')\r\n .get();\r\n return promise;\r\n }\r\n\r\n function sendEpaRequest(relVisitMedicationId) {\r\n var promise = AprimaRestangular.get()\r\n .one('rx', relVisitMedicationId)\r\n .all('epa-request')\r\n .post();\r\n return promise;\r\n }\r\n }\r\n})(window.angular);\r\n","(function() {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('FncDxRepository', [\r\n 'AprimaRestangular',\r\n FncDxRepository\r\n ]);\r\n \r\n function FncDxRepository(\r\n AprimaRestangular\r\n ) {\r\n return {\r\n getDiagnoses: getDiagnoses,\r\n postImoDiagnoses: postImoDiagnoses,\r\n postDiagnoses: postDiagnoses,\r\n deleteDiagnosis: deleteDiagnosis,\r\n deleteDiagnoses: deleteDiagnoses,\r\n };\r\n\r\n function getDiagnoses(patientId, visitId) {\r\n return AprimaRestangular.get()\r\n .one('patients', patientId)\r\n .one('fnc', visitId)\r\n .all('dx')\r\n .getList();\r\n }\r\n\r\n function postImoDiagnoses(patientId, visitId, result) {\r\n return AprimaRestangular.get()\r\n .one('patients', patientId)\r\n .one('fnc', visitId)\r\n .all('dx-term')\r\n .post(result);\r\n }\r\n\r\n function postDiagnoses(patientId, visitId, result) {\r\n return AprimaRestangular.get()\r\n .one('patients', patientId)\r\n .one('fnc', visitId)\r\n .all('dx')\r\n .post(result);\r\n }\r\n\r\n function deleteDiagnosis(patientId, visitId, diagnosisId) {\r\n return AprimaRestangular.get()\r\n .one('patients', patientId)\r\n .one('fnc', visitId)\r\n .one('dx', diagnosisId)\r\n .remove();\r\n }\r\n\r\n function deleteDiagnoses(patientId, visitId, diagnosisIds) {\r\n return AprimaRestangular.get()\r\n .one('patients', patientId)\r\n .one('fnc', visitId)\r\n .all('dx')\r\n .remove({\r\n diagnosisIds: diagnosisIds,\r\n });\r\n }\r\n }\r\n})();\r\n","(function() {\r\n 'use strict';\r\n angular.module('aprima-provider-api').factory('FncPlanRepository', ['AprimaRestangular', 'DeviceSettings', '$q', 'Bridge',\r\n function (AprimaRestangular, DeviceSettings, $q, Bridge) {\r\n return {\r\n getPlans: getPlans,\r\n inactivatePlan: inactivatePlan,\r\n saveDefaults: saveDefaults,\r\n updatePlan: updatePlan\r\n };\r\n\r\n function getPlans(patientId, visitId) {\r\n var url = 'patients/' + patientId + '/fnc/' + visitId + '/plan';\r\n return AprimaRestangular.get({ ignoreCache: true }).all(url).getList();\r\n }\r\n\r\n function inactivatePlan(plan, patientId) {\r\n if(DeviceSettings.isPrm) {\r\n Bridge.fireEvent('inactivate-diagnosis', {\r\n PatientId: patientId,\r\n VisitDate: plan.VisitDate,\r\n VisitId: plan.VisitUid,\r\n VisitDiagnosisId: plan.VisitDiagnosisUid\r\n });\r\n }\r\n else {\r\n var url = 'patients/' + patientId + '/fnc/' + plan.VisitUid + '/inactivatediagnosis/' + plan.VisitDiagnosisUid;\r\n AprimaRestangular.get({ ignoreCache: true }).all(url).post()\r\n .then(function() {\r\n Bridge.fireEvent('inactivated-diagnosis', plan.VisitDiagnosisUid);\r\n })\r\n .catch(function (error) {\r\n console.log('Error inactivating diagnosis: ' + error);\r\n });\r\n }\r\n }\r\n\r\n function saveDefaults(patientId, visitId, planConfigurationId, configuration)\r\n {\r\n var url = 'patients/' + patientId + '/fnc/' + visitId + '/plan/defaults/' + planConfigurationId;\r\n return AprimaRestangular.get({ ignoreCache: true }).all(url).post(configuration);\r\n }\r\n\r\n function updatePlan(plan) {\r\n return plan.put();\r\n }\r\n }\r\n ]);\r\n})();\r\n","(function() {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('FncRepository', [\r\n 'AprimaAnalytics',\r\n 'AprimaRestangular',\r\n FncRepository\r\n ]);\r\n\r\n function FncRepository(\r\n AprimaAnalytics,\r\n AprimaRestangular\r\n ) {\r\n return {\r\n getClinicalNotes: getClinicalNotes,\r\n getContext: getContext,\r\n createVisitFromAppt: createVisitFromAppt,\r\n getAuthCode: getAuthCode,\r\n };\r\n\r\n function getClinicalNotes(providerId) {\r\n var timing = AprimaAnalytics.startTiming('FncRepository', 'api', 'getClinicalNotes');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .all('fnc/clinicalnotetypes/' + providerId)\r\n .getList()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getContext(patientId, visitId) {\r\n var timing = AprimaAnalytics.startTiming('FncRepository', 'api', 'getContext');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('patients/' + patientId + '/fnc/' + visitId + '/context')\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function createVisitFromAppt(appointmentId, clinicalNoteTypeId) {\r\n var timing = AprimaAnalytics.startTiming('FncRepository', 'api', 'createVisitFromAppt');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .all('fnc')\r\n .post({\r\n AppointmentId: appointmentId,\r\n ClinicalNoteTypeId: clinicalNoteTypeId,\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function getAuthCode(patientCaseId, visitDate) {\r\n var timing = AprimaAnalytics.startTiming('FncRepository', 'api', 'getAuthCode');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('fnc/patientcases', patientCaseId)\r\n .customGET('authorizationcode', {\r\n visitDate: visitDate,\r\n })\r\n .finally(timing.stop);\r\n }\r\n }\r\n})();","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('FncRxRepository', [\r\n 'AprimaRestangular',\r\n 'AprimaAnalytics',\r\n FncRxRepository\r\n ]);\r\n\r\n function FncRxRepository(\r\n AprimaRestangular,\r\n AprimaAnalytics\r\n ) {\r\n return {\r\n addPrescription: addPrescription,\r\n changeMedication: changeMedication,\r\n changeMedicationFromHistoryOnly: changeMedicationFromHistoryOnly,\r\n deleteRx: deleteRx,\r\n editPrescription: editPrescription,\r\n editPrescriptionDiagnosis: editPrescriptionDiagnosis,\r\n getAuthorizedPrescriberList: getAuthorizedPrescriberList,\r\n getDrugScreeningResults: getDrugScreeningResults,\r\n getNddDrugScreeningResultsFromPatient: getNddDrugScreeningResultsFromPatient,\r\n getNddDrugScreeningResults: getNddDrugScreeningResults,\r\n getPrescriberRights: getPrescriberRights,\r\n getSigwriterNddDrugScreeningResults: getSigwriterNddDrugScreeningResults,\r\n getVisitMedStatus: getVisitMedicationStatus,\r\n getVisitMedStatuses: getVisitMedicationStatuses,\r\n getVisitPrescriptions: getVisitPrescriptions,\r\n refillMedication: refillMedication,\r\n refillMedicationFromPreviousVisit: refillMedicationFromPreviousVisit,\r\n startChange: startChange,\r\n startChangeFromHistoryOnly: startChangeFromHistoryOnly,\r\n startCppMedication: startCppMedication,\r\n startRefill: startRefill,\r\n startRefillFromPreviousVisit: startRefillFromPreviousVisit,\r\n startRefills: startRefills,\r\n updateRxPharmacies: updateRxPharmacies,\r\n getQueuedMedications: getQueuedMedications,\r\n deleteQueuedMedication: deleteQueuedMedication,\r\n updateRxRefill:updateRxRefill\r\n };\r\n\r\n function addPrescription(patientId, visitId, prescription) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'addPrescription');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .all('patients/' + patientId + '/fnc/' + visitId + '/rx/addprescription')\r\n .post(prescription)\r\n .finally(timing.stop);\r\n }\r\n\r\n function deleteRx(relVisitMedicationId) {\r\n return AprimaRestangular.get()\r\n .one('fnc/rx', relVisitMedicationId)\r\n .remove();\r\n }\r\n\r\n function getAuthorizedPrescriberList(sigType) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'getAuthorizedPrescriberList');\r\n return AprimaRestangular.get()\r\n .all('fnc/rx/authorizedprescriberlist')\r\n .getList({\r\n sigType: sigType,\r\n })\r\n .finally(timing.stop); \r\n }\r\n\r\n function editPrescription(patientId, visitId, prescription) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'editPrescription');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .all('patients/' + patientId + '/fnc/' + visitId + '/rx/editprescription')\r\n .post(prescription)\r\n .finally(timing.stop);\r\n }\r\n\r\n function editPrescriptionDiagnosis(patientId, visitId, relVisitMedicationId, problems) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'editPrescriptionDiagnosis');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .all('patients/' + patientId + '/fnc/' + visitId + '/rx/' + relVisitMedicationId + '/editprescriptiondiagnosis')\r\n .post(problems)\r\n .finally(timing.stop);\r\n }\r\n\r\n function getDrugScreeningResults(patientId, visitId) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'drugScreening');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('patients/' + patientId + '/fnc/' + visitId + '/rx/screening')\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getNddDrugScreeningResultsFromPatient(patientId) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'getNddDrugScreeningResultsFromPatient');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('patients/' + patientId + '/fnc/rx/nddscreening')\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getNddDrugScreeningResults(patientId, visitId) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'nddDrugScreening');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('patients/' + patientId + '/fnc/' + visitId + '/rx/nddscreening')\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getPrescriberRights() {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'getPrescriberRights');\r\n return AprimaRestangular.get()\r\n .one('fnc/rx/prescriberrights')\r\n .get()\r\n .finally(timing.stop); \r\n }\r\n\r\n function getSigwriterNddDrugScreeningResults(patientId, visitId, drug, medicationSigId) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'sigwriterDrugScreening');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.all('patients/' + patientId + '/fnc/' + visitId + '/rx/sigwriter/nddscreening')\r\n .post({\r\n Drug: drug,\r\n MedicationSigId: medicationSigId,\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function getVisitMedicationStatus(relVisitMedicationId) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'getVisitMedicationStatus');\r\n var restangular = AprimaRestangular.get();\r\n\r\n var promise = restangular\r\n .all('fnc')\r\n .all('rx')\r\n .one('visit-medication-status', relVisitMedicationId)\r\n .get()\r\n .finally(timing.stop);\r\n\r\n return promise;\r\n }\r\n\r\n function getVisitMedicationStatuses(relVisitMedicationIdList) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'getVisitMedicationStatuses');\r\n var restangular = AprimaRestangular.get();\r\n var params = {\r\n relVisitMedicationIds: relVisitMedicationIdList,\r\n };\r\n\r\n var promise = restangular\r\n .all('fnc')\r\n .all('rx')\r\n .all('visit-medication-status')\r\n .customGET('', params)\r\n .then(function(data) {\r\n if(!data || !data.Results) {\r\n return $q.reject('Could not retrieve medication statuses');\r\n }\r\n\r\n // Results is a dictionary with the key being the RelVisitMedicationUid,\r\n // and the value being the med status\r\n return data.Results;\r\n })\r\n .finally(timing.stop);\r\n\r\n return promise;\r\n }\r\n\r\n function getVisitPrescriptions(patientId, visitId) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'getVisitPrescriptions');\r\n return AprimaRestangular.get()\r\n .all('patients/' + patientId + '/fnc/' + visitId + '/rx')\r\n .getList()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getQueuedMedications(patientId) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'getVisitPrescriptions');\r\n return AprimaRestangular.get()\r\n .all('patients/' + patientId + '/fnc/queued-rx')\r\n .getList()\r\n .finally(timing.stop);\r\n }\r\n\r\n function deleteQueuedMedication(relVisitMedicationId) {\r\n return AprimaRestangular.get()\r\n .one('/fnc/queued-rx', relVisitMedicationId)\r\n .remove();\r\n }\r\n\r\n function changeMedication(patientId, visitId, relPatientMedicationId, prescription) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'changeMedication');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.all('patients/' + patientId + '/fnc/' + visitId + '/rx/change-prescription')\r\n .post({\r\n Prescription: prescription,\r\n RelPatientMedicationId: relPatientMedicationId,\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function changeMedicationFromHistoryOnly(patientId, visitId, relPatientMedicationId, prescription) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'changeMedicationFromHistoryOnly');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.all('patients/' + patientId + '/fnc/' + visitId + '/rx/change-prescription-from-history-only')\r\n .post({\r\n Prescription: prescription,\r\n RelPatientMedicationId: relPatientMedicationId,\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function refillMedication(patientId, visitId, relPatientMedicationId, prescription) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'refillMedication');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.all('patients/' + patientId + '/fnc/' + visitId + '/rx/refillprescription')\r\n .post({\r\n Prescription: prescription,\r\n RelPatientMedicationId: relPatientMedicationId,\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function refillMedicationFromPreviousVisit(patientId, visitId, relVisitMedicationId, prescription) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'refillMedicationFromPreviousVisit');\r\n var restangular = AprimaRestangular.get();\r\n\r\n var promise = restangular\r\n .one('patients', patientId)\r\n .one('fnc', visitId)\r\n .all('rx/refill-previous-visit-prescription')\r\n .post({\r\n Prescription: prescription,\r\n SelectedRelVisitMedicationId: relVisitMedicationId,\r\n })\r\n .finally(timing.stop);\r\n return promise;\r\n }\r\n\r\n function startChange(patientId, visitId, relPatientMedicationId, sigType) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'startChange');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('patients/' + patientId + '/fnc/' + visitId + '/rx/start-change')\r\n .get({\r\n relPatientMedicationId: relPatientMedicationId,\r\n sigType: sigType,\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function startChangeFromHistoryOnly(patientId, visitId, relPatientMedicationId, sigType) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'startChangeFromHistoryOnly');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('patients/' + patientId + '/fnc/' + visitId + '/rx/start-change-from-history-only')\r\n .get({\r\n relPatientMedicationId: relPatientMedicationId,\r\n sigType: sigType,\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function startCppMedication(patientId, visitId, cppMedicationId, sigType) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'startCppMedication');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('patients/' + patientId + '/fnc/' + visitId + '/rx/start-cpp-medication')\r\n .get({\r\n cppMedicationId: cppMedicationId,\r\n sigType: sigType,\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function startRefill(patientId, visitId, relPatientMedicationId, sigType) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'startRefill');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('patients/' + patientId + '/fnc/' + visitId + '/rx/startrefill')\r\n .get({\r\n relPatientMedicationId: relPatientMedicationId,\r\n sigType: sigType,\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function startRefillFromPreviousVisit(patientId, visitId, relVisitMedicationId, sigType) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'startRefillFromPreviousVisit');\r\n var restangular = AprimaRestangular.get();\r\n\r\n var promise = restangular\r\n .one('patients', patientId)\r\n .one('fnc', visitId)\r\n .customGET('rx/start-previous-visit-refill', {\r\n relVisitMedicationId: relVisitMedicationId,\r\n sigType: sigType,\r\n })\r\n .finally(timing.stop);\r\n return promise;\r\n }\r\n\r\n function startRefills(patientId, visitId, relPatientMedicationIds, sigType) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'startRefills');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('patients/' + patientId + '/fnc/' + visitId + '/rx/startrefills')\r\n .get({\r\n relPatientMedicationIds: relPatientMedicationIds,\r\n sigType: sigType,\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function updateRxPharmacies(relVisitMedicationIds, patientId, pharmacyId) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'updateRxPharmacies');\r\n return AprimaRestangular.get()\r\n .all('fnc/rx/pharmacy')\r\n .post({RelVisitMedicationIds: relVisitMedicationIds, PatientId: patientId, PharmacyId: pharmacyId})\r\n .finally(timing.stop);\r\n }\r\n\r\n function updateRxRefill(patientId, visitId, relVisitMedicationId, refillQty, medicaitonDays) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'editPrescription');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .all('patients/' + patientId + '/fnc/' + visitId + '/rx/'+relVisitMedicationId+'/refill/'+refillQty+'/days/'+medicaitonDays)\r\n .post()\r\n .finally(timing.stop);\r\n }\r\n }\r\n})(angular);","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('FncVisitInfoRepository', [\r\n 'AprimaAnalytics',\r\n 'AprimaRestangular',\r\n 'MetadataRepository',\r\n FncVisitInfoRepository\r\n ]);\r\n\r\n function FncVisitInfoRepository(\r\n AprimaAnalytics,\r\n AprimaRestangular,\r\n MetadataRepository\r\n ) {\r\n var service = {\r\n create: createVisitInfo,\r\n save: saveVisitInfo,\r\n get: getVisitInfo,\r\n getMetadata: getVisitInfoMetadata,\r\n };\r\n\r\n return service;\r\n\r\n function createVisitInfo(visitInfo) {\r\n var timing = AprimaAnalytics.startTiming('FncRepository', 'api', 'createVisitInfo');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .all('fnc/visit-info')\r\n .post(visitInfo)\r\n .finally(timing.stop);\r\n }\r\n\r\n function saveVisitInfo(visitInfo) {\r\n var timing = AprimaAnalytics.startTiming('FncRepository', 'api', 'saveVisitInfo');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .all('fnc/visit-info')\r\n .customPUT(visitInfo)\r\n .finally(timing.stop);\r\n }\r\n\r\n function getVisitInfo(visitId) {\r\n var timing = AprimaAnalytics.startTiming('FncRepository', 'api', 'getVisitInfo');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('fnc', visitId)\r\n .customGET('visit-info')\r\n .finally(timing.stop);\r\n }\r\n\r\n function getVisitInfoMetadata (scope) {\r\n var timing = AprimaAnalytics.startTiming('AppointmentRepository', 'api', 'getVisitInfoMetadata');\r\n return MetadataRepository.getMetadata('visit-info', scope).finally(timing.stop);\r\n }\r\n }\r\n})(window.angular);\r\n","(function() {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('VisitCommentRepository', [\r\n 'AprimaAnalytics',\r\n 'AprimaRestangular',\r\n VisitCommentRepository\r\n ]);\r\n\r\n function VisitCommentRepository(\r\n AprimaAnalytics,\r\n AprimaRestangular\r\n ) {\r\n return {\r\n getVisitComment : getVisitComment,\r\n updateVisitComment : updateVisitComment,\r\n };\r\n\r\n function getVisitComment(visitId, visitCommentType) {\r\n var timing = AprimaAnalytics.startTiming('VisitCommentRepository', 'api', 'getContext');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('visitcomment/' + visitId )\r\n .get({ 'visitComment' : visitCommentType})\r\n .finally(timing.stop);\r\n }\r\n\r\n function updateVisitComment(visitCommentTypeDto) {\r\n var timing = AprimaAnalytics.startTiming('VisitCommentRepository', 'api', 'getContext');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('visitcomment/update/')\r\n .customPOST(visitCommentTypeDto)\r\n .finally(timing.stop);\r\n }\r\n }\r\n})();","(function(angular){\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('GeneralNotesRepository', [\r\n '$q',\r\n 'AprimaCache',\r\n 'AprimaRestangular',\r\n GeneralNotesRepository\r\n ]);\r\n\r\n function GeneralNotesRepository(\r\n $q,\r\n AprimaCache,\r\n AprimaRestangular\r\n ) {\r\n var service = {\r\n search: search,\r\n getGeneralNoteType: getGeneralNoteType,\r\n saveGeneralNoteTypeSetting: saveGeneralNoteTypeSetting,\r\n };\r\n\r\n var generalNoteTypeCache = AprimaCache.Default;\r\n\r\n return service;\r\n\r\n function search(searchText, generalNoteTypeId, includeInactive) {\r\n var promise = AprimaRestangular.get()\r\n .all('general-notes')\r\n .getList({\r\n searchText: searchText,\r\n generalNoteTypeUid: generalNoteTypeId,\r\n includeInactive: includeInactive,\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n function getGeneralNoteType(noteTypeOrId) {\r\n var cachedItem = generalNoteTypeCache.getClone(noteTypeOrId);\r\n if(cachedItem) {\r\n return $q.when(cachedItem);\r\n }\r\n\r\n var promise = AprimaRestangular.get()\r\n .all('general-note-types')\r\n .get(noteTypeOrId)\r\n .then(function(data) {\r\n if(!data) {\r\n return $q.reject('Could not retrieve GeneralNoteType');\r\n }\r\n\r\n if(data.plain) {\r\n data = data.plain();\r\n }\r\n generalNoteTypeCache.put(noteTypeOrId, data);\r\n return data;\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n function saveGeneralNoteTypeSetting(noteTypeKey, generalNoteType) {\r\n var promise = AprimaRestangular.get()\r\n .one('settings', 'general-note-types')\r\n .customPUT({\r\n NoteTypeKey: noteTypeKey,\r\n GeneralNoteType: generalNoteType,\r\n })\r\n .then(function(data) {\r\n if(data && data.NoteTypeKey && data.GeneralNoteType) {\r\n generalNoteTypeCache.put(data.NoteTypeKey, data.GeneralNoteType);\r\n }\r\n else {\r\n generalNoteTypeCache.remove(noteTypeKey);\r\n }\r\n\r\n return data;\r\n });\r\n\r\n return promise;\r\n }\r\n }\r\n})(window.angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('HxMedicationRepository', [\r\n 'AprimaAnalytics',\r\n 'AprimaRestangular',\r\n HxMedicationRepository,\r\n ]);\r\n\r\n function HxMedicationRepository(\r\n AprimaAnalytics,\r\n AprimaRestangular\r\n ) {\r\n\r\n return {\r\n addPrescription: addPrescription,\r\n deleteMedication: deleteMedication,\r\n getMedicationListFilters: getMedicationListFilters,\r\n getPatientTakesNoMeds: getPatientTakesNoMeds,\r\n getPrescriptionHistory: getPrescriptionHistory,\r\n getPrescriptionHistoryForDiscontinueCancel: getPrescriptionHistoryForDiscontinueCancel,\r\n getTransitionOfCare: getTransitionOfCare,\r\n setMedicationFilter: setMedicationFilter,\r\n setPatientTakesNoMeds: setPatientTakesNoMeds,\r\n setTransitionOfCare: setTransitionOfCare,\r\n getPatientMedStatus: getPatientMedicationStatus,\r\n getPatientMedStatuses: getPatientMedicationStatuses,\r\n discontinueCancelMedications: discontinueCancelMedications,\r\n isRxOnPatientAllergyList: isRxOnPatientAllergyList,\r\n getCompareInfoForDiscontinueCancel: getCompareInfoForDiscontinueCancel\r\n };\r\n\r\n function addPrescription(patientId, visitId, skippedSigwriter, prescription) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'addPrescription');\r\n var restangular = AprimaRestangular.get();\r\n var dto = {\r\n Prescription: prescription,\r\n SkippedSigwriter: skippedSigwriter,\r\n VisitId: visitId,\r\n };\r\n return restangular\r\n .all('patients/' + patientId + '/addprescription')\r\n .post(dto)\r\n .finally(timing.stop);\r\n }\r\n\r\n function deleteMedication(medication, visitId) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'deleteMedication');\r\n return AprimaRestangular.get()\r\n .one('history/visit', visitId)\r\n .one('medication', medication.RelPatientMedicationUid)\r\n .remove()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getMedicationListFilters(subtype) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'getMedicationListFilters');\r\n var queryString = '?subtype=' + subtype;\r\n return AprimaRestangular.get()\r\n .one('history/rx-filters' + queryString)\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n \r\n function setMedicationFilter(setMedicationFilterDto) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'setMedicationFilter');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .all('history/rx-filter')\r\n .post(setMedicationFilterDto)\r\n .finally(timing.stop);\r\n }\r\n\r\n function getPatientTakesNoMeds(patientId, visitId) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'getPatientTakesNoMeds');\r\n var restangular = AprimaRestangular.get();\r\n var params = {\r\n VisitId: visitId,\r\n };\r\n return restangular\r\n .one('patients/' + patientId + '/patienttakesnomeds')\r\n .get(params)\r\n .finally(timing.stop);\r\n }\r\n\r\n function getPrescriptionHistory(patientId, visitId, filterId) {\r\n var timing = AprimaAnalytics.startTiming('FncRxRepository', 'api', 'getPrescriptionHistory');\r\n var restangular = AprimaRestangular.get();\r\n var params = {\r\n FilterId: filterId,\r\n VisitId: visitId,\r\n };\r\n return restangular.one('patients/' + patientId + '/rx-history')\r\n .get(params)\r\n .finally(timing.stop);\r\n }\r\n\r\n function getPrescriptionHistoryForDiscontinueCancel(patientId, visitId, relPatientMedicationIds) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'getPrescriptionHistoryForDiscontinueCancel');\r\n var params = {\r\n RelPatientMedicationIds: relPatientMedicationIds,\r\n VisitId: visitId\r\n };\r\n var restangular = AprimaRestangular.get();\r\n\r\n return restangular\r\n .one('patients/' + patientId + '/rxhistory/discontinue-cancel')\r\n .get(params)\r\n .finally(timing.stop);\r\n }\r\n\r\n function isRxOnPatientAllergyList(patientId, visitId, relPatientMedicationId) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'isRxOnPatientAllergyList');\r\n var params = {\r\n RelPatientMedicationId: relPatientMedicationId,\r\n VisitId: visitId\r\n };\r\n var restangular = AprimaRestangular.get();\r\n\r\n return restangular\r\n .one('patients/' + patientId + '/rxhistory/on-patient-drug-allergy-list')\r\n .get(params)\r\n .finally(timing.stop);\r\n }\r\n\r\n function getTransitionOfCare(patientId, visitId) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'getTransitionOfCare');\r\n var restangular = AprimaRestangular.get();\r\n var params = {\r\n VisitId: visitId,\r\n };\r\n return restangular\r\n .one('patients/' + patientId + '/transitionofcare')\r\n .get(params)\r\n .finally(timing.stop);\r\n }\r\n\r\n function setPatientTakesNoMeds(patientId, visitId, patientTakesNoMeds) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'setPatientTakesNoMeds');\r\n var restangular = AprimaRestangular.get();\r\n var params = {\r\n VisitId: visitId,\r\n };\r\n return restangular\r\n .all('patients/' + patientId + '/patienttakesnomeds')\r\n .post(patientTakesNoMeds, params)\r\n .finally(timing.stop);\r\n }\r\n\r\n function getPatientMedicationStatus(relPatientMedicationId) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'getPatientMedicationStatus');\r\n var restangular = AprimaRestangular.get();\r\n\r\n var promise = restangular\r\n .all('history')\r\n .one('patient-medication-status', relPatientMedicationId)\r\n .get()\r\n .finally(timing.stop);\r\n\r\n return promise;\r\n }\r\n\r\n function getPatientMedicationStatuses(relPatientMedicationIdList) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'getPatientMedicationStatuses');\r\n var restangular = AprimaRestangular.get();\r\n \r\n\r\n var promise = restangular\r\n .all('history')\r\n .all('patient-medication-status')\r\n .customPOST(relPatientMedicationIdList)\r\n .then(function(data) {\r\n if(!data || !data.Results) {\r\n return $q.reject('Could not retrieve medication statuses');\r\n }\r\n\r\n // Results is a dictionary with the key being the RelPatientMedicationUid,\r\n // and the value being the med status\r\n return data.Results;\r\n })\r\n .finally(timing.stop);\r\n\r\n return promise;\r\n }\r\n \r\n function setTransitionOfCare(patientId, visitId, transitionOfCare) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'setTransitionOfCare');\r\n var restangular = AprimaRestangular.get();\r\n var params = {\r\n VisitId: visitId,\r\n };\r\n return restangular\r\n .all('patients/' + patientId + '/transitionofcare')\r\n .post(transitionOfCare, params)\r\n .finally(timing.stop);\r\n }\r\n\r\n function discontinueCancelMedications(patientId, dto) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'discontinueCancelMedications');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .all('patients/' + patientId + '/rxhistory/process-discontinue-cancel')\r\n .post(dto)\r\n .finally(timing.stop);\r\n }\r\n\r\n function getCompareInfoForDiscontinueCancel(patientId, relPatientMedicationId) {\r\n var timing = AprimaAnalytics.startTiming('HxMedicationRepository', 'api', 'getCompareInfoForDiscontinueCancel');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('patients/' + patientId + '/rxhistory/discontinue-cancel/compare/' + relPatientMedicationId)\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n }\r\n})(angular);","angular.module('aprima-provider-api').factory('MedicalDevicesRepository',\r\n ['AprimaRestangular',\r\n function(AprimaRestangular) {\r\n 'use strict';\r\n\r\n function getMedicalDeviceParseUdi(uniqueDeviceId) {\r\n var searchCriteria = {\r\n UniqueDeviceIdentifier : uniqueDeviceId\r\n };\r\n\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('history/medical-device/').customGET('parse-udi', searchCriteria);\r\n }\r\n\r\n function getMedicalDeviceLookup(deviceId, uniqueDeviceId) {\r\n var searchCriteria = {\r\n DeviceIdentifier : deviceId,\r\n UniqueDeviceIdentifier : uniqueDeviceId\r\n };\r\n\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('history/medical-device/').customGET('lookup', searchCriteria);\r\n }\r\n\r\n function getMedicalDevices(patientId, visitId) {\r\n var searchCriteria = {\r\n PatientId : patientId,\r\n VisitId : visitId\r\n };\r\n\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('history/medical-device/patient/').customGET(patientId + '/', searchCriteria);\r\n }\r\n\r\n function createMedicalDevice(createDeviceAttributes) {\r\n var restangular = AprimaRestangular.get();\r\n return restangular.all('history/medical-device/patient/' + createDeviceAttributes.PatientId + '/').post(createDeviceAttributes);\r\n }\r\n\r\n function updateMedicalDevice(updateDeviceAttributes) {\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('history/medical-device/patient/' + updateDeviceAttributes.PatientId + '/device/' + updateDeviceAttributes.PatientMedicalDeviceHistoryId).customPUT(updateDeviceAttributes);\r\n }\r\n\r\n function displayMedicalDeviceHistory(patientId, groupingId) {\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('history/medical-device/patient/' + patientId + '/device/' + groupingId + '/history').get();\r\n }\r\n\r\n return {\r\n getMedicalDeviceParseUdi: getMedicalDeviceParseUdi,\r\n getMedicalDeviceLookup: getMedicalDeviceLookup,\r\n getMedicalDevices: getMedicalDevices,\r\n createMedicalDevice: createMedicalDevice,\r\n updateMedicalDevice: updateMedicalDevice,\r\n displayMedicalDeviceHistory: displayMedicalDeviceHistory\r\n };\r\n\r\n }]);","(function(angular){\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('ImoDiagnosisRepository', [\r\n '$q',\r\n 'AprimaAnalytics', \r\n 'AprimaRestangular', \r\n 'ImoPatient',\r\n ImoDiagnosisRepository\r\n ]);\r\n\r\n function ImoDiagnosisRepository(\r\n $q, \r\n AprimaAnalytics, \r\n AprimaRestangular, \r\n ImoPatient\r\n ) {\r\n var routePrefix = 'imo-problem';\r\n\r\n var service = {\r\n term: _.partial(term, null),\r\n terms: _.partial(terms, null),\r\n detail: _.partial(detail, null),\r\n details: _.partial(details, null),\r\n count: _.partial(count, null),\r\n abortable: abortable,\r\n };\r\n \r\n return service;\r\n\r\n function abortable(promisesToAbort) {\r\n return {\r\n term: _.partial(term, promisesToAbort),\r\n terms: _.partial(terms, promisesToAbort),\r\n detail: _.partial(detail, promisesToAbort),\r\n details: _.partial(details, promisesToAbort),\r\n count: _.partial(count, promisesToAbort),\r\n };\r\n }\r\n \r\n function term(promisesToAbort, paramsObj) {\r\n var result = get(promisesToAbort, 'terms', paramsObj, regularGet);\r\n return result;\r\n }\r\n\r\n function terms(promisesToAbort, paramsObj, patient) {\r\n var params = createPatientParams(paramsObj, patient);\r\n \r\n var result = get(promisesToAbort, 'terms', params, customGet);\r\n return result;\r\n }\r\n\r\n function detail(promisesToAbort, paramsObj) {\r\n var result = get(promisesToAbort, 'detail-terms', paramsObj, regularGet);\r\n return result;\r\n }\r\n \r\n function details(promisesToAbort, paramsObj) {\r\n var result = get(promisesToAbort, 'detail-terms', paramsObj, customGet);\r\n return result;\r\n }\r\n \r\n function count(promisesToAbort, paramsObj, patient) {\r\n var params = createPatientParams(paramsObj, patient);\r\n params.CountOnly = true;\r\n \r\n var result = get(promisesToAbort, 'terms', params, customGet);\r\n return result;\r\n }\r\n\r\n function createPatientParams(paramsObj, patient) {\r\n paramsObj = paramsObj || {};\r\n if(patient instanceof ImoPatient) {\r\n if(patient.hasAge) {\r\n paramsObj.PatientAge = patient.standardizedAge;\r\n }\r\n if(patient.hasGender) {\r\n paramsObj.PatientGender = patient.standardizedGender;\r\n }\r\n }\r\n return paramsObj;\r\n }\r\n\r\n function get(promisesToAbort, route, params, getFn) {\r\n var restElement = AprimaRestangular.get().all(routePrefix).all(route);\r\n if(promisesToAbort) {\r\n restElement = restElement.abortable(promisesToAbort);\r\n }\r\n\r\n return getFn(restElement, params).then(function(data) {\r\n if(_.isNil(data)) {\r\n return $q.reject('IMO ' + api + ' request failed for params: ' + JSON.stringify(params));\r\n }\r\n\r\n return data;\r\n });\r\n }\r\n\r\n function regularGet(element, params) {\r\n return element.get(params);\r\n }\r\n\r\n function customGet(element, params) {\r\n return element.customGET('', params);\r\n }\r\n }\r\n})(window.angular);\r\n","(function(angular){\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('ImoDiagnosisService', [\r\n '_',\r\n '$q', \r\n 'AprimaCache',\r\n 'ImoDiagnosisRepository',\r\n ImoDiagnosisService\r\n ]);\r\n\r\n function ImoDiagnosisService(\r\n _,\r\n $q,\r\n AprimaCache,\r\n ImoDiagnosisRepository\r\n ) {\r\n var service = {\r\n term: term,\r\n terms: terms,\r\n detail: detail,\r\n details: details\r\n };\r\n\r\n return service;\r\n\r\n function term(code, localCache) {\r\n var result = getSingle(code, AprimaCache.ImoTerms, localCache, ImoDiagnosisRepository.term);\r\n return result;\r\n }\r\n\r\n function terms(codes, localCache) {\r\n var result = getList(codes, AprimaCache.ImoTerms, localCache, ImoDiagnosisRepository.terms);\r\n return result;\r\n }\r\n\r\n function detail(code, localCache) {\r\n var result = getSingle(code, AprimaCache.ImoDetails, localCache, ImoDiagnosisRepository.detail);\r\n return result;\r\n }\r\n\r\n function details(codes, localCache) {\r\n var result = getList(codes, AprimaCache.ImoDetails, localCache, ImoDiagnosisRepository.details);\r\n return result;\r\n }\r\n\r\n\r\n function getSingle(code, aprimaCache, localCache, getData) {\r\n localCache = localCache || {};\r\n\r\n var result = localCache[code] || aprimaCache.get(code);\r\n if(result && result.LexicalCode === code) {\r\n return $q.when(result);\r\n }\r\n\r\n return getData(code).then(function(data) {\r\n if(!data || !data.LexicalCode) {\r\n return $q.reject('Could not retrieve IMO term');\r\n }\r\n\r\n if(data.plain) {\r\n data = data.plain();\r\n }\r\n localCache[code] = data;\r\n aprimaCache.put(code, data);\r\n return data;\r\n });\r\n }\r\n\r\n function getList(codes, aprimaCache, localCache, getData) {\r\n if(_.isArray(codes)) {\r\n if(_.isEmpty(codes)) {\r\n return $q.when([]);\r\n }\r\n }\r\n else {\r\n codes = [codes];\r\n }\r\n\r\n localCache = localCache || {};\r\n var result = [];\r\n var codesToBeLoaded = [];\r\n _.forEach(codes, function(code) {\r\n var item = localCache[code] || aprimaCache.get(code);\r\n if(item && item.LexicalCode === code) {\r\n result.push(item);\r\n }\r\n else {\r\n codesToBeLoaded.push(code);\r\n }\r\n });\r\n\r\n if(_.isEmpty(codesToBeLoaded)) {\r\n return $q.when(result);\r\n }\r\n\r\n return getData({\r\n LexicalCodes: codesToBeLoaded,\r\n }).then(function(data) {\r\n if(!data || !data.Results) {\r\n return $q.reject('Could not retrieve all IMO terms');\r\n }\r\n\r\n _.forEach(data.Results, function(term) {\r\n localCache[term.LexicalCode] = term;\r\n aprimaCache.put(term.LexicalCode, term);\r\n result.push(term);\r\n });\r\n return result;\r\n });\r\n }\r\n }\r\n})(window.angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('ListService', [\r\n '_',\r\n '$q',\r\n 'AprimaAnalytics',\r\n 'AprimaCache',\r\n 'ListRepository',\r\n 'MessageTypes',\r\n 'RequestTypes',\r\n ListService\r\n ]);\r\n\r\n // Don't port this to Angular since its interface is too generic and magic.\r\n // As callers are ported to Angular, they should be calling individual typed methods on the Angular ListService.\r\n function ListService(\r\n _,\r\n $q,\r\n AprimaAnalytics,\r\n AprimaCache,\r\n ListRepository,\r\n MessageTypes,\r\n RequestTypes\r\n ) {\r\n\r\n var medicationsListTypeRegex = /^medications-/i;\r\n var defaultCache;\r\n\r\n var service = {\r\n getList: getList,\r\n getLists: getLists,\r\n };\r\n\r\n return service;\r\n\r\n function getDefaultCache() {\r\n if (!defaultCache) {\r\n defaultCache = AprimaCache.Lists;\r\n }\r\n\r\n return defaultCache;\r\n }\r\n\r\n // listType can be\r\n // string: 'listName'\r\n // or\r\n // object: { name: 'listName', params: { query: 'something'}}\r\n function getList(listType, $scope, scopeProperty, applicationComponent) {\r\n var queryListType = listType && listType.name || listType;\r\n var listParams = listType && listType.params;\r\n var promise;\r\n var timing = AprimaAnalytics.startTiming(applicationComponent || 'ListService', 'api', 'getList-' + queryListType);\r\n var responseListType;\r\n\r\n if(medicationsListTypeRegex.test(queryListType)) {\r\n responseListType = queryListType.replace(medicationsListTypeRegex, '');\r\n queryListType = 'medications/' + responseListType;\r\n } else {\r\n responseListType = queryListType.split('/')[0];\r\n }\r\n\r\n promise = internalGetList(queryListType, listParams)\r\n .then(function (list) {\r\n var plainList = list && list.plain ? list.plain() : list;\r\n\r\n return plainList;\r\n }, function(response) {\r\n response.listType = responseListType;\r\n return $q.reject(response);\r\n });\r\n\r\n if($scope && scopeProperty) {\r\n promise = promise.then(function(list){\r\n $scope[scopeProperty] = list;\r\n return list;\r\n });\r\n }\r\n\r\n return promise.finally(timing.stop);\r\n }\r\n\r\n //==============================================================================\r\n //Structure of lists as an Object:\r\n // {scopeProperty1: 'listType1', scopeProperty2: 'listType2', scopeProperty3: 'listType3'}\r\n //Returns promise that resolves to\r\n // {scopeProperty1: [list1], scopeProperty2: [list2], scopeProperty3: [list3]}\r\n //==============================================================================\r\n //Structure of lists as an Array:\r\n // ['listType1', 'listType2', 'listType3']\r\n //Returns promise that resolves to\r\n // [[list1], [list2], [list3]]\r\n function getLists(lists, $scope, applicationComponent) {\r\n var mappingFn = _.isArray(lists) ? _.map : _.mapValues;\r\n\r\n var listPromises = mappingFn(lists, function(listType, scopeProperty) {\r\n return getList(listType, $scope, scopeProperty, applicationComponent);\r\n });\r\n\r\n var allPromises = $q.all(listPromises);\r\n\r\n if($scope) {\r\n allPromises = allPromises\r\n .then(function(data) {\r\n $scope.removeHttpError(RequestTypes.listData);\r\n return data;\r\n }, function(response) {\r\n var message = {};\r\n message['is' + response.status] = response.listType;\r\n $scope.addHttpError(response, message, RequestTypes.listData);\r\n return $q.reject(response);\r\n });\r\n }\r\n\r\n return allPromises;\r\n }\r\n\r\n function internalGetList(listName, listParams) {\r\n if (listName === 'appointmentduration') {\r\n //these are not defined in the database\r\n var durations = getAppointmentDurations();\r\n return $q.when(durations);\r\n }\r\n else if(listName === 'messagetypessupportedforcreate') {\r\n return getMessageTypesSupportedForCreate();\r\n }\r\n\r\n var promise = ListRepository.getListJs(listName, listParams, getDefaultCache());\r\n return $q.when(promise);\r\n }\r\n\r\n function getAppointmentDurations() {\r\n var defaultDurationList = [\r\n getMinutesDurationObject(10),\r\n getMinutesDurationObject(15),\r\n getMinutesDurationObject(20),\r\n getMinutesDurationObject(30),\r\n getMinutesDurationObject(45),\r\n getMinutesDurationObject(60),\r\n\r\n getHoursDurationObject(2),\r\n getHoursDurationObject(3),\r\n getHoursDurationObject(4),\r\n getHoursDurationObject(8)\r\n ];\r\n\r\n return defaultDurationList;\r\n }\r\n\r\n function getMinutesDurationObject(minutes, prefix, suffix) {\r\n var opts = _.defaults({\r\n minutes: minutes,\r\n prefix: prefix,\r\n suffix: suffix\r\n }, {\r\n prefix: minutes,\r\n suffix: 'minutes'\r\n });\r\n\r\n\r\n return {\r\n Id: minutes,\r\n Description: opts.prefix + ' ' + opts.suffix\r\n };\r\n }\r\n\r\n function getHoursDurationObject(hours) {\r\n return getMinutesDurationObject(hours * 60, hours, 'hours');\r\n }\r\n\r\n function getMessageTypesSupportedForCreate() {\r\n return $q.all([internalGetList('messagetypes', null), internalGetList('messagesubtypes', null)])\r\n .then(function(lists){\r\n var types,subTypes, allTypes;\r\n\r\n var supportedTypes = MessageTypes.SupportedMessageTypesForCreate.Types,\r\n supportedSubTypes = MessageTypes.SupportedMessageTypesForCreate.SubTypes;\r\n\r\n types = _(lists[0]).filter(function (t) {\r\n return (_.findIndex(supportedTypes, {id: t.Id}) >= 0);\r\n }).map(function(t) {\r\n return {\r\n messageTypeId: t.Id,\r\n messageSubTypeId: null,\r\n name: t.Name,\r\n requiredFeature: _.find(supportedTypes, {id: t.Id}).requiredFeature\r\n };\r\n }).value();\r\n\r\n subTypes = _(lists[1]).filter(function (t) {\r\n return (_.findIndex(supportedSubTypes, {id: t.Id}) >= 0);\r\n }).map(function(t) {\r\n return {\r\n messageTypeId: t.MessageTypeId,\r\n messageSubTypeId: t.Id,\r\n name: t.Name,\r\n requiredFeature: _.find(supportedSubTypes, {id: t.Id}).requiredFeature\r\n };\r\n }).value();\r\n\r\n allTypes = _(_.union(types, subTypes)).sortBy('name').value();\r\n\r\n return allTypes;\r\n });\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","angular.module('aprima-provider-api').factory('Locker',\r\n ['LockManager', '$log', '_',\r\n function (LockManager, $log, _) {\r\n 'use strict';\r\n\r\n //objArr can be an object or an array of objects.\r\n //if it is an array of objects, the first object in the array will be used to get the lock\r\n //and the lock info will be put on all objects in the array.\r\n function Locker(objArr, $scope, lockType, objId, objName) {\r\n if(!objArr || (_.isArray(objArr) && !objArr.length)) {\r\n throw new Error('Lockable object must be defined');\r\n }\r\n\r\n if(!lockType) {\r\n throw new Error('LockType must be defined');\r\n }\r\n\r\n var self = this;\r\n self.objs = _.isArray(objArr) ? objArr : [objArr];\r\n self.$scope = $scope;\r\n self.lockType = lockType;\r\n var obj = self.objs[0];\r\n self.objId = objId || obj.Id;\r\n self.objName = objName;\r\n\r\n if(!self.objId) {\r\n throw new Error('Lockable object ID must be defined or must exist on lockable object');\r\n }\r\n\r\n if($scope) {\r\n $scope.$on('locks.updated', function (event, args) {\r\n _.forEach(self.objs, function(obj) {\r\n var currentLock = obj.LockInfo;\r\n\r\n if (currentLock && currentLock.InstanceId === args.oldLock.InstanceId) {\r\n obj.LockInfo = args.newLock;\r\n }\r\n });\r\n });\r\n\r\n $scope.$on('$destroy', function () {\r\n self.unlock();\r\n });\r\n }\r\n }\r\n\r\n Locker.prototype = {\r\n lock: function lock() {\r\n var self = this;\r\n var objs = self.objs;\r\n\r\n\r\n return LockManager.lock(this.lockType, this.objId)\r\n .then(function (lock) {\r\n _.forEach(objs, function(obj) {\r\n obj.LockInfo = lock;\r\n obj.LockInstanceId = lock.InstanceId;\r\n });\r\n\r\n return lock;\r\n }, function (response) {\r\n $log.info('Unsuccessful in locking ' + self.objName + ': ' + response);\r\n _.forEach(objs, function(obj) {\r\n obj.LockInfo = response.data;\r\n });\r\n });\r\n },\r\n unlock: function unlock(lockInfo) {\r\n var self = this;\r\n var objs = self.objs;\r\n lockInfo = lockInfo || objs[0].LockInfo;\r\n\r\n if (!lockInfo) {\r\n throw new Error('Cannot unlock ' + self.objName + ' with null or undefined LockInfo.');\r\n }\r\n\r\n return LockManager.unlock(lockInfo.LockType, lockInfo.ObjectId)\r\n .then(function (lock) {\r\n _.forEach(objs, function(obj) {\r\n obj.LockInfo = lock;\r\n });\r\n }, function (response) {\r\n $log.info('Unsuccessful in unlocking ' + self.objName + ': ' + response);\r\n _.forEach(objs, function(obj) {\r\n obj.LockInfo = response.data;\r\n });\r\n });\r\n }\r\n };\r\n\r\n return Locker;\r\n }]);","angular.module('aprima-provider-api').factory('LockManager', ['LockRepository', '$log', '_', '$rootScope', '$interval', '$q', 'CurrentUser',\r\n function (LockRepository, $log, _, $rootScope, $interval, $q, CurrentUser) {\r\n 'use strict';\r\n\r\n var locks = [],\r\n refreshInterval;\r\n\r\n function findLock(lockType, objectId) {\r\n return _.find(locks, {LockType: lockType, ObjectId: objectId});\r\n }\r\n\r\n function lock(lockType, objectId) {\r\n return LockRepository.lock(lockType, objectId)\r\n .then(function (l) {\r\n locks.push(l.plain());\r\n\r\n return l;\r\n });\r\n }\r\n\r\n function unlock(lockType, objectId) {\r\n var currentLock = findLock(lockType, objectId);\r\n\r\n if (!currentLock) {\r\n return $q.reject(new Error('Lock was not found in local cache'));\r\n }\r\n\r\n return LockRepository.unlock(currentLock.LockType, currentLock.ObjectId, currentLock.InstanceId)\r\n .then(function () {\r\n _.remove(locks, function (l) {\r\n return l.LockType.toLowerCase() === currentLock.LockType.toLowerCase() &&\r\n l.ObjectId.toLowerCase() === currentLock.ObjectId.toLowerCase() &&\r\n l.InstanceId.toLowerCase() === currentLock.InstanceId.toLowerCase();\r\n });\r\n }, function (response) {\r\n $log.error('Error unlocking lock id= ' + objectId);\r\n $log.error(response);\r\n });\r\n }\r\n\r\n function isLocked(lockType, objectId, instanceId) {\r\n return LockRepository.isLocked(lockType, objectId, instanceId);\r\n }\r\n\r\n function refreshLocks() {\r\n if (!locks || !locks.length || !CurrentUser.isAuthenticated) {\r\n return;\r\n }\r\n\r\n _.each(locks, refreshLock);\r\n }\r\n\r\n function refreshLock(lock) {\r\n LockRepository.lock(lock.LockType, lock.ObjectId, lock.InstanceId)\r\n .then(function (lockResponse) {\r\n lockResponse = lockResponse.plain();\r\n\r\n _.remove(locks, lock);\r\n locks.push(lockResponse);\r\n\r\n $rootScope.$broadcast('locks.updated', {oldLock: lock, newLock: lockResponse, isLocked: true});\r\n }, function (response) {\r\n $log.error('Error refreshing lock: ');\r\n $log.error(response);\r\n\r\n _.remove(locks, lock);\r\n $rootScope.$broadcast('locks.updated', {oldLock: lock, newLock: response.data, isLocked: false});\r\n });\r\n }\r\n\r\n function startRefreshingLocks() {\r\n refreshInterval = $interval(refreshLocks, 30000);\r\n }\r\n\r\n function stopRefreshingLocks() {\r\n $interval.cancel(refreshInterval);\r\n }\r\n \r\n return {\r\n lock: lock,\r\n unlock: unlock,\r\n isLocked: isLocked,\r\n getLocks: function() {\r\n return _.cloneDeep(locks);\r\n },\r\n refreshLocks: refreshLocks,\r\n startRefreshingLocks: startRefreshingLocks,\r\n stopRefreshingLocks: stopRefreshingLocks\r\n };\r\n }]);","angular.module('aprima-provider-api').factory('LockRepository', ['AprimaRestangular', 'ServerInfoRepository', 'CurrentUser', '$q', '_',\r\n function (AprimaRestangular, ServerInfoRepository, CurrentUser, $q, _) {\r\n 'use strict';\r\n\r\n var unsupportedLockTypePromise = $q.reject(new Error('Lock Type is not supported by older server'));\r\n\r\n function getRestangularizedLock(lockObjId) {\r\n return AprimaRestangular.get().one('locks', lockObjId);\r\n }\r\n\r\n function getQueryStringObj(instanceId) {\r\n var qs = {};\r\n\r\n if (instanceId) {\r\n qs.instanceId = instanceId;\r\n }\r\n\r\n return qs;\r\n }\r\n\r\n function isNewLockingSupported() {\r\n return ServerInfoRepository.isFeatureSupported('LockManagement');\r\n }\r\n\r\n function isLockTypeSupported(lockType) {\r\n return isNewLockingSupported() || _.startsWith(lockType.toLowerCase(), 'message');\r\n }\r\n\r\n function lock(lockType, lockObjId, instanceId) {\r\n if (isNewLockingSupported()) {\r\n return getRestangularizedLock(lockObjId)\r\n .customPUT({}, lockType, getQueryStringObj(instanceId));\r\n }\r\n else {\r\n if (!isLockTypeSupported(lockType)) {\r\n return unsupportedLockTypePromise;\r\n }\r\n\r\n return AprimaRestangular.get().all('message/' + lockObjId).customPUT({\r\n ObjectId: lockObjId,\r\n LockType: lockType,\r\n InstanceId: instanceId || CurrentUser.deviceId\r\n }, 'lock')\r\n .then(function (m) {\r\n m.LockType = m.LockType || 'Message';\r\n return m;\r\n });\r\n }\r\n }\r\n\r\n function unlock(lockType, lockObjId, instanceId) {\r\n if (isNewLockingSupported()) {\r\n return getRestangularizedLock(lockObjId)\r\n .customDELETE(lockType, getQueryStringObj(instanceId));\r\n }\r\n else {\r\n if (!isLockTypeSupported(lockType)) {\r\n return unsupportedLockTypePromise;\r\n }\r\n\r\n return AprimaRestangular.get().all('message/' + lockObjId).customDELETE('lock');\r\n }\r\n }\r\n\r\n function isLocked(lockType, lockObjId, instanceId) {\r\n if (isNewLockingSupported()) {\r\n return getRestangularizedLock(lockObjId)\r\n .one(lockType)\r\n .get(getQueryStringObj(instanceId));\r\n }\r\n else {\r\n if (!isLockTypeSupported(lockType)) {\r\n return unsupportedLockTypePromise;\r\n }\r\n\r\n //this isLocked fn was defined in an older version of the client, but the endpoint that it calls\r\n //was not implemented by the server. isLocked() was added, but it was never called so it\r\n //did not cause problems. Now if it gets called when using an older server, just short circuit to\r\n //the error case instead of attempting to make a call to the server.\r\n return $q.reject(new Error('Cannot determine whether a resource is locked using an older server.'));\r\n }\r\n }\r\n\r\n return {\r\n lock: lock,\r\n unlock: unlock,\r\n isLocked: isLocked\r\n };\r\n }]);\r\n","angular.module('aprima-provider-api').factory('MessageLocker',\r\n ['Locker',\r\n function (Locker) {\r\n 'use strict';\r\n\r\n function MessageLocker(message, $scope, lockType, messageId) {\r\n Locker.call(this, message, $scope, lockType || 'Message', messageId, 'Message');\r\n }\r\n\r\n MessageLocker.prototype = Object.create(Locker.prototype, {});\r\n MessageLocker.prototype.constructor = MessageLocker;\r\n\r\n return MessageLocker;\r\n }]);","angular.module('aprima-provider-api').factory('VisitLocker',\r\n ['Locker',\r\n function (Locker) {\r\n 'use strict';\r\n\r\n function VisitLocker(visit, $scope, lockType, visitId) {\r\n Locker.call(this, visit, $scope, lockType || 'VisitNote', visitId, 'Visit');\r\n }\r\n\r\n VisitLocker.prototype = Object.create(Locker.prototype, {});\r\n VisitLocker.prototype.constructor = VisitLocker;\r\n\r\n return VisitLocker;\r\n }]);","angular.module('aprima-provider-api').factory(\r\n 'MessageRepository', ['AprimaRestangular', 'CurrentUser', '$q', 'Bridge', 'MetadataRepository', 'AprimaAnalytics',\r\n function (Restangular, CurrentUser, $q, Bridge, MetadataRepository, AprimaAnalytics) {\r\n\r\n 'use strict';\r\n\r\n var messageListeners = [];\r\n\r\n function getAll(messageFilterId, restangularOptions, appComponent) {\r\n restangularOptions = restangularOptions || { ignoreCache: false };\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'getMessages');\r\n return Restangular.get(restangularOptions).all('users/' + CurrentUser.get().userId + '/messages')\r\n .getList({\r\n filterId: messageFilterId\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function getDashboardMessages(messageFilterId) {\r\n if (messageFilterId) {\r\n return getAll(messageFilterId);\r\n }\r\n else {\r\n return $q.when([]);\r\n }\r\n }\r\n\r\n function addListener(callback) {\r\n if (messageListeners && callback && messageListeners.indexOf(callback) < 0) {\r\n messageListeners.push(callback);\r\n }\r\n }\r\n\r\n function removeListener(callback) {\r\n if (messageListeners && callback && messageListeners.indexOf(callback) >= 0) {\r\n messageListeners.pop(callback);\r\n }\r\n }\r\n\r\n function getMessage(messageId, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'getMessage');\r\n return Restangular.get().one('messages/' + messageId).get()\r\n .then(function (m) {\r\n Bridge.updateBadges();\r\n return m;\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function emitUpdateMessage() {\r\n if (messageListeners) {\r\n for (var i = messageListeners.length - 1; i >= 0; i--) {\r\n messageListeners[i]();\r\n }\r\n }\r\n }\r\n\r\n function savePhoneMessage(message, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'savePhoneMessage');\r\n return Restangular.get().one('messages').customPUT(message, 'phone/' + message.Id, {}, {})\r\n .then(function (data) {\r\n emitUpdateMessage();\r\n return data;\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function saveTaskMessage(message, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'saveTaskMessage');\r\n return Restangular.get().one('messages').customPUT(message, 'task/' + message.Id, {}, {})\r\n .then(function (data) {\r\n emitUpdateMessage();\r\n return data;\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function savePortalMessage(message, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'saveTaskMessage');\r\n return Restangular.get().one('messages').customPUT(message, 'portal/' + message.Id, {}, {})\r\n .then(function (data) {\r\n emitUpdateMessage();\r\n return data;\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function saveAttachmentApprovalMessage(command, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'saveAAMessage');\r\n var restangular = Restangular.get();\r\n\r\n var messagePromise = restangular.one('messages').customPUT(command, 'aamessage/' + command.Id, {}, {})\r\n .then(function (data) {\r\n emitUpdateMessage();\r\n return data;\r\n })\r\n .finally(timing.stop);\r\n\r\n return messagePromise;\r\n }\r\n\r\n function replyToPortalMessage(message, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'replyToPortalMessage');\r\n return Restangular.get().one('messages').customPUT(message, 'portal/' + message.Id + '/reply', {}, {})\r\n .then(function (data) {\r\n emitUpdateMessage();\r\n return data;\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function getPhoneMessageDetails(messageId, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'getPhoneMessage');\r\n var restangular = Restangular.get(),\r\n messagePromise = restangular.one('messages/phone/' + messageId).get()\r\n .then(function (m) {\r\n Bridge.updateBadges();\r\n return m;\r\n })\r\n .finally(timing.stop);\r\n\r\n return messagePromise;\r\n }\r\n\r\n function getTaskMessageDetails(messageId, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'getTaskMessage');\r\n var restangular = Restangular.get(),\r\n messagePromise = restangular.one('messages/task/' + messageId).get()\r\n .then(function (m) {\r\n Bridge.updateBadges();\r\n return m;\r\n })\r\n .finally(timing.stop);\r\n\r\n return messagePromise;\r\n }\r\n\r\n function getPortalMessageDetails(messageId, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'getPortalMessage');\r\n var restangular = Restangular.get(),\r\n messagePromise = restangular.one('messages/portal/' + messageId).get()\r\n .then(function (m) {\r\n Bridge.updateBadges();\r\n emitUpdateMessage();\r\n return m;\r\n })\r\n .finally(timing.stop);\r\n\r\n return messagePromise;\r\n }\r\n\r\n function getRxRefillMessage(messageId, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'getRxRefillMessage');\r\n var restangular = Restangular.get(),\r\n messagePromise = restangular.one('messages/rx-refill/' + messageId).get()\r\n .then(function (m) {\r\n Bridge.updateBadges();\r\n emitUpdateMessage();\r\n return m;\r\n })\r\n .finally(timing.stop);\r\n\r\n return messagePromise;\r\n }\r\n\r\n function saveRxRefillMessage(message, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'saveRxRefillMessage');\r\n return Restangular.get().one('messages').customPUT(message, 'rx-refill/' + message.Id, {}, {})\r\n .then(function (data) {\r\n emitUpdateMessage();\r\n return data;\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function getRxRefillMessageV2(messageId, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'getRxRefillMessageV2');\r\n var restangular = Restangular.get(),\r\n messagePromise = restangular.one('messages/rx-refill-v2/' + messageId).get()\r\n .then(function (m) {\r\n Bridge.updateBadges();\r\n emitUpdateMessage();\r\n return m;\r\n })\r\n .finally(timing.stop);\r\n\r\n return messagePromise;\r\n }\r\n\r\n function saveRxRefillMessageV2(message, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'saveRxRefillMessageV2');\r\n return Restangular.get().one('messages').customPUT(message, 'rx-refill-v2', {}, {})\r\n .then(function (data) {\r\n emitUpdateMessage();\r\n return data;\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function getPharmacyRefillMessage(messageId, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'getPharmacyRefillMessage');\r\n var restangular = Restangular.get(),\r\n messagePromise = restangular.one('messages/pharmacy-refill/' + messageId).get()\r\n .then(function (m) {\r\n Bridge.updateBadges();\r\n emitUpdateMessage();\r\n m = mapToFullERxRequest(m);\r\n return m;\r\n })\r\n .finally(timing.stop);\r\n\r\n return messagePromise;\r\n }\r\n\r\n // creates the new data structure with legacy data\r\n function mapToFullERxRequest(msg) {\r\n var request = msg && msg.RefillRequest;\r\n if(!request) {\r\n return msg;\r\n }\r\n\r\n if(!request.hasOwnProperty('PrescribedMedication')) {\r\n request.PrescribedMedication = {\r\n Comment: request.MedicationComment,\r\n Date: request.MedicationDate,\r\n // the duration was previously mapped to the date for some reason\r\n Duration: request.MedicationDate,\r\n Name: request.MedicationName,\r\n ProductCode: request.MedicationNdc,\r\n ProductCodeDescription: request.MedicationNdc ? request.MedicationNdc + ' (NDC)' : null,\r\n PotencyUnitCode: request.MedicationPotencyUnitCode,\r\n Quantity: request.MedicationQuantity,\r\n QuantityQualifierTerm: request.MedicationQuantityQualifier,\r\n Sig: request.MedicationSig,\r\n Strength: request.MedicationStrength,\r\n StrengthUnits: request.MedicationStrengthUnits,\r\n };\r\n }\r\n\r\n return msg;\r\n }\r\n\r\n function savePharmacyRefillMessage(message, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'savePharmacyRefillMessage');\r\n return Restangular.get().one('messages').customPUT(message, 'pharmacy-refill/' + message.Id, {}, {})\r\n .then(function (data) {\r\n emitUpdateMessage();\r\n return data;\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function getPharmacyRefillMessageMetadata($scope) {\r\n var timing = AprimaAnalytics.startTiming('MessageRepository', 'api', 'getPharmacyRefillMessageMetadata');\r\n return MetadataRepository.getMetadata('pharmacyrefillmessage', $scope).finally(timing.stop);\r\n }\r\n\r\n function createTaskMessage(message) {\r\n var timing = AprimaAnalytics.startTiming('MessageRepository', 'api', 'createTaskMessage');\r\n var restangular = Restangular.get();\r\n return restangular.all('messages/task/').post(message).finally(timing.stop);\r\n }\r\n\r\n function getTaskMessageMetadata($scope) {\r\n var timing = AprimaAnalytics.startTiming('MessageRepository', 'api', 'getCreateTaskMessageMetadata');\r\n return MetadataRepository.getMetadata('createtaskmessage', $scope).finally(timing.stop);\r\n }\r\n\r\n function createPortalMessage(message) {\r\n var timing = AprimaAnalytics.startTiming('MessageRepository', 'api', 'createPortalMessage');\r\n var restangular = Restangular.get();\r\n return restangular.all('messages/portal/').post(message).finally(timing.stop);\r\n }\r\n\r\n function getPatientPortalMessageRoutingType() {\r\n var timing = AprimaAnalytics.startTiming('MessageRepository', 'api', 'getPatientPortalMessageRoutingType');\r\n var restangular = Restangular.get();\r\n return restangular.one('messages/patientportal/routingtype').get().finally(timing.stop);\r\n }\r\n\r\n function getPortalMessageMetadata($scope) {\r\n var timing = AprimaAnalytics.startTiming('MessageRepository', 'api', 'getCreatePortalMessageMetadata');\r\n return MetadataRepository.getMetadata('createportalmessage', $scope).finally(timing.stop);\r\n }\r\n\r\n function createPhoneMessage(message) {\r\n var timing = AprimaAnalytics.startTiming('MessageRepository', 'api', 'createPhoneMessage');\r\n var restangular = Restangular.get();\r\n return restangular.all('messages/phone/').post(message).finally(timing.stop);\r\n }\r\n\r\n function getPhoneMessageMetadata($scope) {\r\n var timing = AprimaAnalytics.startTiming('MessageRepository', 'api', 'getPortalMessageMetadata');\r\n return MetadataRepository.getMetadata('createphonemessage', $scope).finally(timing.stop);\r\n }\r\n\r\n function getAttachmentApprovalMessage(messageId, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'getAAMessage');\r\n\r\n var restangular = Restangular.get(),\r\n messagePromise = restangular.one('messages/aamessage', messageId).get()\r\n .then(function (m) {\r\n Bridge.updateBadges();\r\n return m;\r\n })\r\n .finally(timing.stop);\r\n\r\n return messagePromise;\r\n\r\n }\r\n\r\n function getServiceOrderApprovalMessage(messageId, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'getServiceOrderApprovalMessage');\r\n\r\n var restangular = Restangular.get();\r\n\r\n var messagePromise = restangular.one('messages/serviceorderapprovalmessage', messageId).get()\r\n .then(function (data) {\r\n Bridge.updateBadges();\r\n return data;\r\n })\r\n .finally(timing.stop);\r\n\r\n return messagePromise;\r\n }\r\n\r\n\r\n function saveServiceOrderApprovalMessage(message, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'MessageRepository', 'api', 'saveServiceOrderApprovalMessage');\r\n var restangular = Restangular.get();\r\n var messagePromise = restangular.one('messages').customPUT(message, 'serviceorderapprovalmessage/' + message.Id, {}, {})\r\n .then(function (data) {\r\n emitUpdateMessage();\r\n return data;\r\n })\r\n .finally(timing.stop);\r\n\r\n return messagePromise;\r\n }\r\n\r\n\r\n return {\r\n getAll: getAll,\r\n getDashboardMessages: getDashboardMessages,\r\n getMessage: getMessage,\r\n savePhoneMessage: savePhoneMessage,\r\n saveTaskMessage: saveTaskMessage,\r\n savePortalMessage: savePortalMessage,\r\n replyToPortalMessage: replyToPortalMessage,\r\n getPhoneMessageDetails: getPhoneMessageDetails,\r\n getTaskMessageDetails: getTaskMessageDetails,\r\n getPortalMessageDetails: getPortalMessageDetails,\r\n createTaskMessage: createTaskMessage,\r\n getTaskMessageMetadata: getTaskMessageMetadata,\r\n createPhoneMessage: createPhoneMessage,\r\n getPhoneMessageMetadata: getPhoneMessageMetadata,\r\n addListener: addListener,\r\n removeListener: removeListener,\r\n createPortalMessage: createPortalMessage,\r\n getPortalMessageMetadata: getPortalMessageMetadata,\r\n getAttachmentApprovalMessage: getAttachmentApprovalMessage,\r\n saveAttachmentApprovalMessage: saveAttachmentApprovalMessage,\r\n getServiceOrderApprovalMessage: getServiceOrderApprovalMessage,\r\n saveServiceOrderApprovalMessage: saveServiceOrderApprovalMessage,\r\n getRxRefillMessage: getRxRefillMessage,\r\n saveRxRefillMessage: saveRxRefillMessage,\r\n getRxRefillMessageV2: getRxRefillMessageV2,\r\n saveRxRefillMessageV2: saveRxRefillMessageV2,\r\n getPharmacyRefillMessage: getPharmacyRefillMessage,\r\n savePharmacyRefillMessage: savePharmacyRefillMessage,\r\n getPharmacyRefillMessageMetadata: getPharmacyRefillMessageMetadata,\r\n getPatientPortalMessageRoutingType: getPatientPortalMessageRoutingType\r\n };\r\n }]);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('MetadataRepository', [\r\n '$filter',\r\n '$q',\r\n 'AprimaRestangular',\r\n 'LocalStorageRepository',\r\n 'moment',\r\n MetadataRepository\r\n ]);\r\n\r\n function MetadataRepository(\r\n $filter,\r\n $q,\r\n aprimaRestangular,\r\n LocalStorageRepository,\r\n moment\r\n ) {\r\n\r\n var service = {\r\n getMetadata: getMetadataFromStorageOrServer,\r\n parseRawMetadata: parseRawMetadata,\r\n };\r\n\r\n return service;\r\n\r\n function getKey(typeName) {\r\n return 'metadata.' + typeName;\r\n }\r\n\r\n function getMetadataFromServer(typeName) {\r\n return aprimaRestangular.get().one('metadata/' + typeName).get();\r\n }\r\n\r\n function getMetadataFromStorage(typeName) {\r\n var metadata = LocalStorageRepository.getKey(getKey(typeName), 'metadata'),\r\n deferred = $q.defer();\r\n\r\n if (metadata) {\r\n deferred.resolve(metadata);\r\n }\r\n else {\r\n deferred.reject('Metadata was not in storage');\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function getMetadataFromStorageOrServer(typeName, $scope) {\r\n return getMetadataFromStorage(typeName)\r\n .catch(function () {\r\n return getMetadataFromServer(typeName).then(function (metadata){\r\n return parseRawMetadata(metadata);\r\n });\r\n })\r\n .then(function (metadata) {\r\n LocalStorageRepository.setKey(getKey(typeName), metadata, 'metadata');\r\n return metadata;\r\n })\r\n .then(function(metadata){\r\n if($scope){\r\n $scope.metadata = metadata;\r\n }\r\n\r\n return metadata;\r\n });\r\n }\r\n\r\n function parseRawMetadata(rawMetadata) {\r\n rawMetadata.Fields = metadataParser(rawMetadata);\r\n return rawMetadata;\r\n }\r\n\r\n function metadataParser(metadata) {\r\n var fields = {};\r\n\r\n _.forEach(metadata.Fields, function (field) {\r\n var dots = field.FieldName.split('.'),\r\n obj = fields,\r\n propertyName;\r\n\r\n while (dots.length > 1) {\r\n propertyName = dots.shift();\r\n if (!fields[propertyName]) {\r\n fields[propertyName] = {};\r\n }\r\n\r\n obj = fields[propertyName];\r\n }\r\n\r\n propertyName = dots.shift();\r\n obj[propertyName] = field;\r\n\r\n if(field.ElementMetadata) {\r\n field.Fields = metadataParser(field.ElementMetadata);\r\n delete field.ElementMetadata;\r\n }\r\n\r\n if(field.FieldName.indexOf('Date') >= 0 || field.FieldName.indexOf('date') >= 0){\r\n if(field.Minimum){\r\n // field.Minimum for dates should be iso8601 date string, which moment can handle\r\n field.Minimum = moment(field.Minimum).toDate();\r\n }\r\n\r\n if(field.Maximum){\r\n // field.Maximum for dates should be iso8601 date string, which moment can handle\r\n field.Maximum = moment(field.Maximum).toDate();\r\n }\r\n }\r\n });\r\n\r\n return fields;\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","angular.module('aprima-provider-api')\r\n .factory('MetadataService',\r\n [function () {\r\n 'use strict';\r\n\r\n function getObjectFromMetadata(metadata, attrs) {\r\n if (!metadata) return;\r\n\r\n var model = attrs.ngModel,\r\n stack = model.split('.'),\r\n obj = metadata.Fields;\r\n\r\n stack.shift();\r\n\r\n obj = stack.reduce(function (obj, prop) {\r\n if (obj && obj.hasOwnProperty(prop)) {\r\n return obj[prop];\r\n }\r\n return obj;\r\n }, obj);\r\n\r\n return obj ? obj : false;\r\n }\r\n\r\n //will convert the string from ngModel to a string which is used to get metadata\r\n //For example: ng-model=\"someObj.SomeField\" -> \"metadata.Fields.SomeField\"\r\n function convertNgModelExprToMetadataExpr(ngModelExpr) {\r\n if(!ngModelExpr) return;\r\n\r\n var stack = ngModelExpr.split('.');\r\n\r\n if(stack.length === 2) {\r\n return 'metadata.Fields.' + stack[1];\r\n }\r\n\r\n //cannot convert it to ngModel expression\r\n return null;\r\n }\r\n\r\n return {\r\n getObjectFromMetadata: getObjectFromMetadata,\r\n convertNgModelExprToMetadataExpr: convertNgModelExprToMetadataExpr\r\n };\r\n }]);","angular.module('aprima-provider-api')\r\n .factory('NoteRepository', ['AprimaRestangular', function (aprimaRestangular) {\r\n 'use strict';\r\n\r\n var getNotes = function (filterId) {\r\n \treturn aprimaRestangular.get().all('notes/' + filterId).getList();\r\n };\r\n\r\n return {\r\n getNotes: getNotes\r\n };\r\n }]);","(function(angular) {\r\n 'use strict';\r\n\r\n var chargeCaptureDesktopFeature = 'ChargeCaptureDesktopTile';\r\n\r\n angular.module('aprima-provider-api').factory('ChargeCaptureRepository', [\r\n '$q',\r\n 'AprimaRestangular',\r\n 'MetadataRepository',\r\n 'ServerInfoRepository',\r\n ChargeCaptureRepository,\r\n ]);\r\n\r\n\r\n function ChargeCaptureRepository(\r\n $q,\r\n AprimaRestangular,\r\n MetadataRepository,\r\n ServerInfoRepository\r\n ) {\r\n var service = {\r\n getProviderChargeCaptures: getProviderChargeCaptures,\r\n getChargeCapture: getChargeCapture,\r\n getChargeCaptureMetadata: getChargeCaptureMetadata,\r\n createChargeCapture: createChargeCapture,\r\n editChargeCapture: editChargeCapture,\r\n removeChargeCapture: removeChargeCapture,\r\n };\r\n\r\n return service;\r\n\r\n\r\n function getProviderChargeCaptures(providerUid) {\r\n if(!ServerInfoRepository.isFeatureSupported(chargeCaptureDesktopFeature)) {\r\n return $q.when([]);\r\n }\r\n\r\n\r\n var result = AprimaRestangular.get()\r\n .one('chargecaptures/provider', providerUid)\r\n .get();\r\n\r\n return result;\r\n }\r\n\r\n function getChargeCapture(patientUid, chargeCaptureUid) {\r\n if(!ServerInfoRepository.isFeatureSupported(chargeCaptureDesktopFeature)) {\r\n // call older endpoint that only accepts patientUid\r\n var oldResult = AprimaRestangular.get()\r\n .one('chargecapture', patientUid)\r\n .get();\r\n\r\n return oldResult;\r\n }\r\n\r\n\r\n // call newer endpoint that accepts patientUid and chargeCaptureUid\r\n var newResult = AprimaRestangular.get()\r\n .one('chargecapture/patient', patientUid)\r\n .customGET('chargecaptureid', {\r\n chargeCaptureId: chargeCaptureUid,\r\n });\r\n\r\n return newResult;\r\n }\r\n\r\n function getChargeCaptureMetadata($scope) {\r\n var result = MetadataRepository.getMetadata('createchargecapture', $scope);\r\n\r\n return result;\r\n }\r\n\r\n function createChargeCapture(command) {\r\n var result = AprimaRestangular.get()\r\n .all('chargecapture')\r\n .post(command);\r\n\r\n return result;\r\n }\r\n\r\n function editChargeCapture(patientUid, command) {\r\n var result = AprimaRestangular.get()\r\n .one('chargecapture')\r\n .customPUT(command);\r\n\r\n return result;\r\n }\r\n\r\n function removeChargeCapture(chargeCaptureUid) {\r\n if(!ServerInfoRepository.isFeatureSupported(chargeCaptureDesktopFeature)) {\r\n return $q.reject('Removing a eMDs Round is not supported with this server version.');\r\n }\r\n\r\n var result = AprimaRestangular.get()\r\n .one('chargecapture/remove', chargeCaptureUid)\r\n .get();\r\n\r\n return result;\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","angular.module('aprima-provider-api').factory('DiagnosisSummaryRepository',\r\n ['AprimaRestangular', 'AprimaAnalytics', 'ServerInfoRepository', function (AprimaRestangular, AprimaAnalytics, ServerInfoRepository) {\r\n 'use strict';\r\n\r\n return {\r\n getDiagnosisSummaries: getDiagnosisSummaries,\r\n getDiagnosisSummary: getDiagnosisSummary\r\n };\r\n\r\n function getDiagnosisSummaries(patientId, restangularOptions) {\r\n if (ServerInfoRepository.isFeatureSupported('DiagnosisSummary')) {\r\n restangularOptions = restangularOptions || {ignoreCache: false};\r\n var timing = AprimaAnalytics.startTiming('DiagnosisSummaryRepository', 'api', 'get diagnosis summaries');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular\r\n .one('patients/' + patientId + '/diagnosis-summaries/')\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n else {\r\n throw new Error('Unsupported feature of getting Diagnosis Summaries');\r\n }\r\n }\r\n\r\n function getDiagnosisSummary(patientId, summaryId, restangularOptions) {\r\n if (ServerInfoRepository.isFeatureSupported('DiagnosisSummary')) {\r\n restangularOptions = restangularOptions || {ignoreCache: false};\r\n var timing = AprimaAnalytics.startTiming('DiagnosisSummaryRepository', 'api', 'get diagnosis summary');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular\r\n .one('patients/' + patientId + '/diagnosis-summaries/' + summaryId)\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n else {\r\n throw new Error('Unsupported feature of getting Diagnosis Summary');\r\n }\r\n }\r\n }]);\r\n\r\n","angular.module('aprima-provider-api').factory('PatientAttachmentRepository',\r\n ['AprimaRestangular', 'AprimaAnalytics', 'DeviceSettings', 'MetadataRepository', 'SingleAccessSet',\r\n function (AprimaRestangular, AprimaAnalytics, DeviceSettings, MetadataRepository, SingleAccessSet) {\r\n 'use strict';\r\n\r\n var modifiedPatientIds = new SingleAccessSet();\r\n var defaultIgnoreCache = DeviceSettings.isPrm;\r\n\r\n function getPatientAttachments(patientId, restangularOptions, applicationComponent) {\r\n var timing = AprimaAnalytics.startTiming(applicationComponent || 'PatientAttachmentRepository', 'api', 'getPatientAttachments');\r\n\r\n restangularOptions = restangularOptions || {ignoreCache: defaultIgnoreCache};\r\n restangularOptions.ignoreCache = modifiedPatientIds.contains(patientId) || restangularOptions.ignoreCache;\r\n return AprimaRestangular.get(restangularOptions)\r\n .one('patients', patientId)\r\n .one('attachments')\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getPatientAttachmentGroup(patientId, relAttachmentGroupId, restangularOptions, applicationComponent) {\r\n var timing = AprimaAnalytics.startTiming(applicationComponent || 'PatientAttachmentRepository', 'api', 'getPatientAttachmentGroup');\r\n\r\n restangularOptions = restangularOptions || {ignoreCache: defaultIgnoreCache};\r\n return AprimaRestangular.get(restangularOptions)\r\n .one('patients', patientId)\r\n .one('attachments', relAttachmentGroupId)\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function addPatientAttachment(patientId, patientAttachment, applicationComponent) {\r\n var timing = AprimaAnalytics.startTiming(applicationComponent || 'PatientAttachmentRepository', 'api', 'addPatientAttachment');\r\n\r\n return AprimaRestangular.get()\r\n .one('patients', patientId)\r\n .one('attachments')\r\n .customPOST(patientAttachment)\r\n .finally(timing.stop)\r\n .finally(function() {\r\n modifiedPatientIds.add(patientId);\r\n });\r\n }\r\n\r\n function getAddPatientAttachmentMetadata($scope) {\r\n return MetadataRepository.getMetadata('addpatientattachment', $scope);\r\n }\r\n\r\n return {\r\n getPatientAttachments: getPatientAttachments,\r\n getPatientAttachmentGroup: getPatientAttachmentGroup,\r\n addPatientAttachment: addPatientAttachment,\r\n getAddPatientAttachmentMetadata: getAddPatientAttachmentMetadata\r\n };\r\n }]);\r\n\r\n","angular.module('aprima-provider-api').factory('PatientRecallsRepository',\r\n ['AprimaRestangular', 'AprimaAnalytics',\r\n function (AprimaRestangular, AprimaAnalytics) {\r\n 'use strict';\r\n\r\n return {\r\n getRecalls: getRecalls\r\n };\r\n\r\n function getRecalls(id) {\r\n var timing = AprimaAnalytics.startTiming('PatientRecallsRepository', 'api', 'get recalls');\r\n return AprimaRestangular.get().one('patients', id).getList('recalls').finally(timing.stop);\r\n }\r\n }\r\n ]\r\n);","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('PatientRepository', [\r\n '$rootScope',\r\n 'AprimaAnalytics',\r\n 'AprimaRestangular',\r\n 'DeviceSettings',\r\n 'LocalStorageRepository',\r\n 'MetadataRepository',\r\n 'SingleAccessSet',\r\n PatientRepository\r\n ]);\r\n\r\n function PatientRepository(\r\n $rootScope,\r\n AprimaAnalytics,\r\n AprimaRestangular,\r\n DeviceSettings,\r\n LocalStorageRepository,\r\n MetadataRepository,\r\n SingleAccessSet\r\n ) {\r\n\r\n var visitCacheSet = new SingleAccessSet();\r\n var medicationsCacheSet = new SingleAccessSet();\r\n var defaultIgnoreCache = DeviceSettings.isPrm;\r\n\r\n $rootScope.$on('visit-updated', function(event, opts){\r\n visitCacheSet.add(opts.patientId);\r\n medicationsCacheSet.add(opts.patientId);\r\n });\r\n\r\n var service = {\r\n getPatient: getPatient,\r\n getDemographics: getDemographics,\r\n geteRxEligibilities: geteRxEligibilities,\r\n getAllergies: getAllergies,\r\n getAppointments: getAppointments,\r\n getPrimaryInsurance: getPrimaryInsurance,\r\n getProblems: getProblems,\r\n getActiveProblems: getActiveProblems,\r\n getMedications: getMedications,\r\n getRemarks: getRemarks,\r\n getRecentVisits: getRecentVisits,\r\n getOrders: getOrders,\r\n getObservationResults: getObservationResults,\r\n getVitals: getVitals,\r\n getObservations: getObservations,\r\n getHealthMaintenanceReminders: getHealthMaintenanceReminders,\r\n getObservationValues: getObservationValues,\r\n createPatient: createPatient,\r\n getCreatePatientMetadata: getCreatePatientMetadata,\r\n getMostRecentObservationValues: getMostRecentObservationValues,\r\n updatePatientPhoto: updatePatientPhoto,\r\n getPharmacies: getPharmacies,\r\n getEmVisits: getEmVisits,\r\n getMedicationsByGroup: getMedicationsByGroup,\r\n getPatientDetails: getPatientDetails,\r\n getAccounts: getAccounts,\r\n getPatientCases: getPatientCases,\r\n getPatientInformation: getPatientInformation,\r\n deletePatientPharmacy: deletePatientPharmacy,\r\n setPharmacyOrder : setPharmacyOrder\r\n };\r\n\r\n return service;\r\n\r\n function getPatient(uid, restangularOptions, applicationComponent) {\r\n if(_.isString(restangularOptions) && !applicationComponent) {\r\n applicationComponent = restangularOptions;\r\n restangularOptions = null;\r\n }\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming(applicationComponent || 'PatientRepository', 'api', 'getPatient');\r\n\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients', uid).get().finally(timing.stop);\r\n }\r\n\r\n function getPatientDetails(uid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'getPatientDetails');\r\n\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients/' + uid + '/details').get().finally(timing.stop);\r\n }\r\n\r\n function getDemographics(uid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient demographics');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients/' + uid + '/demographics').get().finally(timing.stop);\r\n }\r\n\r\n function geteRxEligibilities(uid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient eRxEligibilities');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients/' + uid + '/erxeligibilities').get().finally(timing.stop);\r\n }\r\n\r\n function getAllergies(uid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient allergies');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients/' + uid + '/allergies').get().finally(timing.stop);\r\n }\r\n\r\n function getAppointments(uid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient appointments');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients/' + uid + '/appointments').get().finally(timing.stop);\r\n }\r\n\r\n function getPrimaryInsurance(uid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient primary insurance');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients/' + uid + '/primary-insurance').get().finally(timing.stop);\r\n }\r\n\r\n function getProblems(uid, restangularOptions) {\r\n return internalGetProblems(uid, true, restangularOptions);\r\n }\r\n \r\n function getActiveProblems(uid, restangularOptions) {\r\n return internalGetProblems(uid, false, restangularOptions);\r\n }\r\n \r\n function internalGetProblems(uid, includeInactive, restangularOptions){\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient problems');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients', uid).getList('problems', {activeOnly: !includeInactive}).finally(timing.stop);\r\n }\r\n\r\n function getMedications(uid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache || medicationsCacheSet.contains(uid) };\r\n\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient medications');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients/' + uid + '/medications').get().finally(timing.stop);\r\n }\r\n \r\n function getMedicationsByGroup(uid, restangularOptions) {\r\n return getMedications(uid, restangularOptions).then(function(medications){\r\n var result = {\r\n medications : medications,\r\n medicationsExist : false\r\n };\r\n\r\n //medications should already be sorted by drug class\r\n var drugClasses = [],\r\n groupValue = 'seed_value',\r\n group;\r\n\r\n for (var i = 0; i < medications.length; i++) {\r\n var medication = medications[i];\r\n\r\n if (groupValue !== medication.DrugClassName) {\r\n\r\n if (group !== undefined) {\r\n drugClasses.push(group);\r\n }\r\n\r\n group = {\r\n label: medication.DrugClassName,\r\n active: false,\r\n medications: []\r\n };\r\n\r\n groupValue = group.label;\r\n\r\n }\r\n\r\n group.medications.push(medication);\r\n\r\n if (medication.IsActive) {\r\n group.active = true;\r\n result.medicationsExist = true;\r\n }\r\n }\r\n //one last time\r\n if(group){\r\n drugClasses.push(group);\r\n }\r\n\r\n result.drugClasses = drugClasses;\r\n\r\n return result;\r\n });\r\n }\r\n\r\n function getRemarks(uid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient remarks');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients/' + uid + '/remarks').get().finally(timing.stop);\r\n }\r\n\r\n function getRecentVisits(uid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache || visitCacheSet.contains(uid) };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient visits');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients/' + uid + '/recentvisits').get().finally(timing.stop);\r\n }\r\n\r\n function getOrders(uid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient orders');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients/' + uid + '/orders').getList().finally(timing.stop);\r\n }\r\n\r\n function getObservationResults(uid, filter, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient observation results');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n var params = {\r\n dataFilter: filter\r\n };\r\n return restangular.one('patients', uid).customGET('observationresults', params).finally(timing.stop);\r\n }\r\n\r\n function getMostRecentObservationValues(uid, filter, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get most recent patient observation values');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n var params = {\r\n dataFilter: filter\r\n };\r\n return restangular.one('patients', uid).customGET('most-recent-observation-values', params).finally(timing.stop);\r\n }\r\n\r\n function getObservationValues(patientId, observationOrderId, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient observation values');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients', patientId).one('observationresults', observationOrderId).get().finally(timing.stop);\r\n }\r\n\r\n function getVitals(uid, vitalsDefaultSettingId, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient vitals');\r\n var obsDefaultSettingId = vitalsDefaultSettingId || LocalStorageRepository.getPatientVitalsDefaultSettingId() || '';\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular\r\n .one('patients', uid)\r\n .customGET('vitals', {\r\n observationDefaultSettingId: obsDefaultSettingId,\r\n })\r\n .finally(timing.stop);\r\n }\r\n\r\n function getObservations(uid, filter, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient observations');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients', uid).customGET('observations', {dataFilter: filter}).finally(timing.stop);\r\n }\r\n\r\n function getHealthMaintenanceReminders(uid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient health maintenance reminders');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients/' + uid + '/healthmaintenancereminders').get().finally(timing.stop);\r\n }\r\n\r\n function getPharmacies(uid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'get patient pharmacies');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patients/' + uid + '/pharmacies').get().finally(timing.stop);\r\n }\r\n\r\n function createPatient(patient) {\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'createPatient');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.all('patients/').post(patient).finally(timing.stop);\r\n }\r\n\r\n function getCreatePatientMetadata($scope) {\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'getCreatePatientMetadata');\r\n return MetadataRepository.getMetadata('patientcreation', $scope).finally(timing.stop);\r\n }\r\n\r\n function updatePatientPhoto(patientId, patientPhoto, applicationComponent) {\r\n var timing = AprimaAnalytics.startTiming(applicationComponent || 'PatientRepository', 'api', 'updatePatientPhoto');\r\n\r\n return AprimaRestangular.get()\r\n .one('patients', patientId)\r\n .one('photo')\r\n .customPUT(patientPhoto)\r\n .finally(timing.stop);\r\n }\r\n \r\n function getEmVisits(uid, restangularOptions){\r\n restangularOptions = restangularOptions || { ignoreCache : defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'getEmVisits');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('patients/', uid).all('em-visits').getList().finally(timing.stop);\r\n }\r\n\r\n function getAccounts(patientId) {\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'getAccounts');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('patients', patientId)\r\n .getList('accounts')\r\n .finally(timing.stop);\r\n }\r\n\r\n function getPatientCases(patientId) {\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'getPatientCases');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('patients', patientId)\r\n .getList('patientcases')\r\n .finally(timing.stop);\r\n }\r\n\r\n function getPatientInformation(patientUid, appointmentUid, visitUid, accountUid, restangularOptions) {\r\n restangularOptions = restangularOptions || { ignoreCache: defaultIgnoreCache };\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'getPatientInformation');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n return restangular.one('patientInformation/' + patientUid + '/' + appointmentUid + '/' + visitUid + '/' + accountUid).get().finally(timing.stop);\r\n }\r\n\r\n function deletePatientPharmacy(patientPharmacyUid){\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'DeletePatientPharamciesById');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.one('patients/pharmacy/'+patientPharmacyUid).remove().finally(timing.stop);\r\n }\r\n\r\n function setPharmacyOrder(list,patientId){\r\n var timing = AprimaAnalytics.startTiming('PatientRepository', 'api', 'SetPatientPharmacySortOrder');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.all('patients/'+patientId+'/pharmacy/order').post(list).finally(timing.stop);\r\n \r\n }\r\n }\r\n\r\n})(window.angular);\r\n","angular.module('aprima-provider-api').factory('VisitRepository',\r\n ['AprimaRestangular', 'AprimaAnalytics', '$rootScope', function (AprimaRestangular, AprimaAnalytics, $rootScope) {\r\n 'use strict';\r\n\r\n return {\r\n getVisit: getVisit,\r\n getVisitDetail: getVisitDetail,\r\n getVisitDocument: getVisitDocument,\r\n createVisit: createVisit,\r\n getVisitByAppointment: getVisitByAppointment,\r\n getVisitDocumentForVisitText: getVisitDocumentForVisitText,\r\n };\r\n\r\n function getVisit(patientId, visitId) {\r\n var timing = AprimaAnalytics.startTiming('VisitRepository', 'api', 'get visit info');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('patients/' + patientId + '/visits/' + visitId)\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getVisitDetail(visitId) {\r\n var timing = AprimaAnalytics.startTiming('VisitRepository', 'api', 'get visit detail');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('visits/' + visitId)\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getVisitDocument(patientId, visitId) {\r\n var timing = AprimaAnalytics.startTiming('VisitRepository', 'api', 'get visit document');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('patients/' + patientId + '/visits/' + visitId + '/document')\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function createVisit(visit) {\r\n var timing = AprimaAnalytics.startTiming('VisitRepository', 'api', 'create visit');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .all('visits')\r\n .post(visit)\r\n .finally(timing.stop)\r\n .finally(function() {\r\n $rootScope.$emit('visit-updated', {patientId: visit.Patient.Id});\r\n });\r\n }\r\n\r\n function getVisitByAppointment(appointmentId) {\r\n var timing = AprimaAnalytics.startTiming('VisitRepository', 'api', 'get appointment visit');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('visit-appointment/' + appointmentId)\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getVisitDocumentForVisitText(patientId, visitId) {\r\n var timing = AprimaAnalytics.startTiming('VisitRepository', 'api', 'get visit document for visit text');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('patients/' + patientId + '/visits/' + visitId + '/documentvisittext')\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n }]);\r\n\r\n","angular.module('aprima-provider-api').factory('PersonRepository', [\r\n 'AprimaAnalytics',\r\n 'AprimaRestangular',\r\n function (\r\n AprimaAnalytics,\r\n AprimaRestangular\r\n ) {\r\n 'use strict';\r\n\r\n return {\r\n updatePersonPhoto: updatePersonPhoto,\r\n };\r\n\r\n function updatePersonPhoto(patientId, patientPhoto, applicationComponent) {\r\n var timing = AprimaAnalytics.startTiming(applicationComponent || 'PersonRepository', 'api', 'updatePersonPhoto');\r\n\r\n return AprimaRestangular.get()\r\n .one('persons', patientId)\r\n .one('photo')\r\n .customPUT(patientPhoto)\r\n .finally(timing.stop);\r\n }\r\n }\r\n]);\r\n","angular.module('aprima-provider-api').factory('PharmacyRepository',\r\n ['AprimaRestangular', 'MetadataRepository', '$q', 'moment', 'AprimaAnalytics', 'AprimaCache',\r\n function (AprimaRestangular, MetadataRepository, $q, moment, AprimaAnalytics, AprimaCache) {\r\n 'use strict';\r\n\r\n var defaultCache;\r\n\r\n return {\r\n getPharmacy: getPharmacy,\r\n getPharmacyByMasterPharmacyId: getPharmacyByMasterPharmacyId,\r\n searchPharmacies: searchPharmacies,\r\n searchPharmaciesIncludeAllMailOrders: searchPharmaciesIncludeAllMailOrders\r\n };\r\n\r\n function getDefaultCache() {\r\n if (!defaultCache) {\r\n defaultCache = AprimaCache.Default.httpMode;\r\n }\r\n\r\n return defaultCache;\r\n }\r\n\r\n function getPharmacy(id, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'PharmacyRepository', 'api', 'getPharmacy');\r\n\r\n return AprimaRestangular.get().all('lists/pharmacies').one(id).get().finally(timing.stop);\r\n }\r\n\r\n function getPharmacyByMasterPharmacyId(id, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'PharmacyRepository', 'api', 'getPharmacyByMasterPharmacyId');\r\n\r\n return AprimaRestangular.get().all('lists/masterpharmacies').one(id).get().finally(timing.stop);\r\n }\r\n\r\n function searchPharmacies(searchText, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'PharmacyRepository', 'api', 'getPharmacy');\r\n\r\n return AprimaRestangular.get().all('lists/pharmacies').withHttpConfig({cache: getDefaultCache()}).getList({query: searchText}).finally(timing.stop);\r\n }\r\n\r\n function searchPharmaciesIncludeAllMailOrders(searchText, appComponent) {\r\n var timing = AprimaAnalytics.startTiming(appComponent || 'PharmacyRepository', 'api', 'getPharmacy');\r\n\r\n return AprimaRestangular.get().all('lists/pharmacies').withHttpConfig({cache: getDefaultCache()}).getList({query: searchText, includeAllMailOrders: true}).finally(timing.stop);\r\n }\r\n }]);\r\n","(function() {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('GatewayService', [\r\n '$q',\r\n 'GatewayServiceTs',\r\n GatewayService\r\n ]);\r\n\r\n function GatewayService(\r\n $q,\r\n GatewayServiceTs\r\n ) {\r\n return {\r\n findClientServer: findClientServer,\r\n };\r\n\r\n function findClientServer(clientId, gatewayPrefix) {\r\n var promise = GatewayServiceTs.findClientServer(clientId, gatewayPrefix).toPromise();\r\n return $q.when(promise);\r\n }\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('LoginInitializationService', [\r\n '$q',\r\n 'LoginInitializationServiceTs',\r\n LoginInitializationService\r\n ]);\r\n\r\n function LoginInitializationService(\r\n $q,\r\n LoginInitializationServiceTs\r\n ) {\r\n return {\r\n initializeFromPrmLogin: initializeFromPrmLogin,\r\n initializeFromDesktopLogin: initializeFromDesktopLogin,\r\n preLogin: preLogin,\r\n finishPrmLogin: finishPrmLogin,\r\n updateVersionInfo: updateVersionInfo,\r\n };\r\n\r\n function initializeFromPrmLogin(userLoginInfo) {\r\n var promise = LoginInitializationServiceTs.initializeFromPrmLogin(userLoginInfo);\r\n return $q.when(promise);\r\n }\r\n\r\n function initializeFromDesktopLogin(vals) {\r\n var promise = LoginInitializationServiceTs.initializeFromDesktopLogin(vals);\r\n return $q.when(promise);\r\n }\r\n\r\n function preLogin(gatewayUrl, appServerUrl, clientId, username) {\r\n return LoginInitializationServiceTs.preLogin(gatewayUrl, appServerUrl, clientId, username);\r\n }\r\n\r\n function finishPrmLogin() {\r\n LoginInitializationServiceTs.finishPrmLogin();\r\n }\r\n\r\n function updateVersionInfo(userLoginInfo) {\r\n LoginInitializationServiceTs.updateVersionInfo(userLoginInfo);\r\n }\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('PdpmpModalService', [\r\n '$q',\r\n 'PdpmpModalServiceTs',\r\n PdpmpModalService\r\n ]);\r\n\r\n function PdpmpModalService(\r\n $q,\r\n PdpmpModalServiceTs\r\n ) {\r\n return {\r\n openModal: openModal,\r\n shouldAllowModal: shouldAllowModal,\r\n };\r\n\r\n function openModal(config, serviceSiteId, patientId, providerId, visitId, messageId) {\r\n var promise = PdpmpModalServiceTs.openModal(config, serviceSiteId, patientId, providerId, visitId, messageId).toPromise();\r\n return $q.when(promise);\r\n }\r\n\r\n function shouldAllowModal(config) {\r\n return PdpmpModalServiceTs.shouldAllowModal(config);\r\n }\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('PdpmpRepository', [\r\n '$q',\r\n 'PdpmpRepositoryTs',\r\n PdpmpRepository\r\n ]);\r\n\r\n function PdpmpRepository(\r\n $q,\r\n PdpmpRepositoryTs\r\n ) {\r\n return {\r\n createReport: createReport,\r\n getConfiguration: getConfiguration,\r\n };\r\n\r\n function createReport(serviceSiteId, patientId, providerId, visitId, messageId) {\r\n var promise = PdpmpRepositoryTs.createReport(serviceSiteId, patientId, providerId, visitId, messageId).toPromise();\r\n return $q.when(promise);\r\n }\r\n\r\n function getConfiguration() {\r\n var promise = PdpmpRepositoryTs.getConfiguration().toPromise();\r\n return $q.when(promise);\r\n }\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('PrmLoginService', [\r\n '$q',\r\n 'PrmLoginServiceTs',\r\n PrmLoginService\r\n ]);\r\n\r\n function PrmLoginService(\r\n $q,\r\n PrmLoginServiceTs\r\n ) {\r\n return {\r\n login: login,\r\n };\r\n\r\n function login(username, password, userId, clientFeatures) {\r\n var promise = PrmLoginServiceTs.login(username, password, userId, clientFeatures).toPromise();\r\n return $q.when(promise);\r\n }\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('SettingRepository', [\r\n '$q',\r\n 'SettingRepositoryTs',\r\n SettingRepository\r\n ]);\r\n\r\n function SettingRepository(\r\n $q,\r\n SettingRepositoryTs\r\n ) {\r\n return {\r\n getProviderEpcsSettings: getProviderEpcsSettings,\r\n };\r\n\r\n function getProviderEpcsSettings(userId, siteId) {\r\n var promise = SettingRepositoryTs.getProviderEpcsSettings(userId, siteId).toPromise();\r\n return $q.when(promise);\r\n }\r\n }\r\n})();","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('PrmUserRepository', [\r\n 'AprimaAnalytics',\r\n 'AprimaRestangular',\r\n PrmUserRepository\r\n ]);\r\n\r\n function PrmUserRepository(\r\n AprimaAnalytics,\r\n AprimaRestangular\r\n ) {\r\n var service = {\r\n getUser: getUser,\r\n searchUsers: searchUsers,\r\n };\r\n\r\n return service;\r\n\r\n function getUser(uid) {\r\n var timing = AprimaAnalytics.startTiming('PrmUserRepository', 'api', 'getUser');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.all('view-find-user')\r\n .one(uid)\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function searchUsers(inputSearch) {\r\n //gets rid of all new line characters\r\n inputSearch = inputSearch.replace(/\\n|\\r/g, '');\r\n\r\n var timing = AprimaAnalytics.startTiming('PrmUserRepository', 'api', 'searchUsers');\r\n var restangular = AprimaRestangular.get();\r\n\r\n return restangular\r\n .one('view-find-user/quick-search')\r\n .get({quicksearch: inputSearch})\r\n .finally(timing.stop);\r\n }\r\n }\r\n\r\n})(window.angular);","angular.module('aprima-provider-api')\r\n .factory('ProcedureRepository', ['AprimaRestangular', function (aprimaRestangular) {\r\n 'use strict';\r\n\r\n var getProcedures = function (searchString) {\r\n \tvar queryString = '?maxRecords=20&procedureText=' + searchString;\r\n\r\n return aprimaRestangular.get().all('procedures/' + queryString).getList();\r\n };\r\n\r\n return {\r\n getProcedures: getProcedures\r\n };\r\n\r\n }]);","(function() {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('ProviderRepository', [\r\n 'AprimaRestangular',\r\n 'AprimaAnalytics',\r\n ProviderRepository\r\n ]);\r\n\r\n function ProviderRepository(\r\n AprimaRestangular,\r\n AprimaAnalytics\r\n ) {\r\n return {\r\n getProviderSupervisorListByProviderId: getProviderSupervisorListByProviderId,\r\n getProviderById: getProviderById,\r\n getSupervisorList: getSupervisorList,\r\n getDefaultSupervisor: getDefaultSupervisor\r\n };\r\n\r\n function getProviderSupervisorListByProviderId(providerId) {\r\n // var startTiming = function (page, category, label)\r\n var timing = AprimaAnalytics.startTiming('ProviderRepository', 'api', 'getProviderSupervisorListByProviderId');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('provider/' + providerId + '/supervisors')\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getProviderById(providerId){\r\n var timing = AprimaAnalytics.startTiming('ProviderRepository', 'api', 'getProvider');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('provider/' + providerId)\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getSupervisorList() {\r\n var timing = AprimaAnalytics.startTiming('ProviderRepository', 'api', 'getProvider');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('lists/provider')\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getDefaultSupervisor(linkSupervisorDto) {\r\n var timing = AprimaAnalytics.startTiming('ProviderRepository', 'api', 'getDefaultSupervisor');\r\n var restangular = AprimaRestangular.get();\r\n return restangular\r\n .one('provider/default-supervisor')\r\n .get(linkSupervisorDto)\r\n .finally(timing.stop);\r\n }\r\n }\r\n})();","angular.module('aprima-provider-api').factory('SigWriterRepository',\r\n ['AprimaRestangular', 'AprimaAnalytics', 'MetadataRepository',\r\n function (AprimaRestangular, AprimaAnalytics, MetadataRepository) {\r\n 'use strict';\r\n\r\n return {\r\n checkIsSpecialtyId: checkIsSpecialtyId,\r\n getDirectionsSettings: getDirectionsSettings,\r\n getDrugCptList: getDrugCptList,\r\n getDrugSettings: getDrugSettings,\r\n initializeDefaultSig: initializeDefaultSig,\r\n saveDefaultSig: saveDefaultSig,\r\n getDefaultSigMetadata: getDefaultSigMetadata,\r\n };\r\n\r\n function checkIsSpecialtyId(ndc, rxnorm, providerId) {\r\n var timing = AprimaAnalytics.startTiming('SigWriterRepository', 'api', 'checkIsSpecialtyId');\r\n return AprimaRestangular.get()\r\n .one('drugs/specialty/' + ndc + '/' + rxnorm + '/id/' + providerId)\r\n .get()\r\n .finally(timing.stop);\r\n }\r\n\r\n function getDirectionsSettings(drug, providerId, sigType, visitId, checkIsSpecialtyMedication) {\r\n var restangular = AprimaRestangular.get();\r\n var request = {\r\n Drug: drug,\r\n ProviderId: providerId,\r\n SigType: sigType,\r\n VisitId: visitId,\r\n CheckIsSpecialtyMedication: checkIsSpecialtyMedication\r\n };\r\n var timing = AprimaAnalytics.startTiming('SigWriterRepository', 'api', 'getDirectionsSettings');\r\n return restangular\r\n .all('sigwriter/' + providerId + '/directions-settings')\r\n .post(request)\r\n .finally(timing.stop);\r\n }\r\n\r\n function getDrugCptList(medid) {\r\n var timing = AprimaAnalytics.startTiming('SigWriterRepository', 'api', 'getDrugCptList');\r\n var restangular = AprimaRestangular.get();\r\n return restangular.all('sigwriter/drugcptlist/' + medid)\r\n .getList()\r\n .finally(timing.stop());\r\n }\r\n\r\n function getDrugSettings(sigType, drug, providerId, patientId, visitId, restangularOptions) {\r\n restangularOptions = restangularOptions || {ignoreCache: false};\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n var request = {\r\n Drug: drug,\r\n PatientId: patientId,\r\n SigType: sigType,\r\n VisitId: visitId,\r\n };\r\n var timing = AprimaAnalytics.startTiming('SigWriterRepository', 'api', 'getDrugSettings');\r\n return restangular\r\n .all('sigwriter/' + providerId + '/drug-settings')\r\n .post(request)\r\n .finally(timing.stop);\r\n\r\n /*\r\n var promise = restangular\r\n .all('sigwriter/' + providerId + '/drug-settings')\r\n .post(request)\r\n .finally(timing.stop);\r\n return promise;\r\n */\r\n }\r\n\r\n function initializeDefaultSig(currentRx, providerDefaultSigId, restangularOptions){\r\n\r\n restangularOptions = restangularOptions || {ignoreCache: false};\r\n var timing = AprimaAnalytics.startTiming('SigWriterRepository', 'api', 'initialize default sig');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n var params = (providerDefaultSigId) ? '/' + providerDefaultSigId : '';\r\n return restangular.all('fnc/rx/initialize-default-sig' + params).post(currentRx).finally(timing.stop);\r\n }\r\n\r\n function saveDefaultSig(createModifyDefaultSigDto, restangularOptions){\r\n\r\n restangularOptions = restangularOptions || {ignoreCache: false};\r\n var timing = AprimaAnalytics.startTiming('SigWriterRepository', 'api', 'save default sig');\r\n var restangular = AprimaRestangular.get(restangularOptions);\r\n var params = (createModifyDefaultSigDto.ProviderDefaultSigId) ? '/' + createModifyDefaultSigDto.ProviderDefaultSigId : '';\r\n return restangular.all('fnc/rx/default-sig' + params).post(createModifyDefaultSigDto).finally(timing.stop);\r\n }\r\n\r\n function getDefaultSigMetadata ($scope) {\r\n var timing = AprimaAnalytics.startTiming('SigWriterRepository', 'api', 'getDefaultSigMetadata');\r\n return MetadataRepository.getMetadata('fnc/rx/new-default-sig', $scope).finally(timing.stop);\r\n }\r\n }]);","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('LicenseService', [\r\n 'LocalStorageRepository',\r\n LicenseService,\r\n ]);\r\n\r\n function LicenseService(\r\n LocalStorageRepository\r\n ) {\r\n return {\r\n hasFdbDosingLicense: hasFdbDosingLicense,\r\n hasImoDiagnosisLicense: hasImoDiagnosisLicense,\r\n };\r\n\r\n function hasFdbDosingLicense() {\r\n var licenses = LocalStorageRepository.getCurrentUserLicenses();\r\n return !licenses || //assume has the license since old servers don't send the information\r\n licenses.HasFdbDosing;\r\n }\r\n\r\n function hasImoDiagnosisLicense() {\r\n var licenses = LocalStorageRepository.getCurrentUserLicenses();\r\n return !licenses || //assume has the license since old servers don't send the information\r\n licenses.HasImoDiagnosis;\r\n }\r\n }\r\n})(angular);","angular.module('aprima-provider-api').factory('SettingService',\r\n ['$q', 'SettingServiceTs',\r\n function ($q, SettingServiceTs) {\r\n 'use strict';\r\n\r\n return {\r\n loadSettings: loadSettings,\r\n updateNativeSettings : updateNativeSettings,\r\n updatePatientDashboardConfiguration: updatePatientDashboardConfiguration,\r\n deletePatientDashboardConfiguration: deletePatientDashboardConfiguration,\r\n getSigWriterSettings: getSigWriterSettings,\r\n imperialUnitsAllowed: imperialUnitsAllowed,\r\n getPatientDashboardWidgets: getPatientDashboardWidgets,\r\n getAppointmentsListSettings: getAppointmentsListSettings,\r\n setAppointmentsListSettings: setAppointmentsListSettings,\r\n getMessagesListSettings: getMessagesListSettings,\r\n setMessagesListSettings: setMessagesListSettings,\r\n getAppointmentsBadgeSettings: getAppointmentsBadgeSettings,\r\n setAppointmentsBadgeSettings: setAppointmentsBadgeSettings,\r\n getDashboardTileSettings: getDashboardTileSettings,\r\n setDashboardTileSettings: setDashboardTileSettings,\r\n getKdbConfigurationId: getKdbConfigurationId,\r\n getKdbConfigurationIdByVisit: getKdbConfigurationIdByVisit,\r\n getDrugSearchIncludeInactive: getDrugSearchIncludeInactive,\r\n };\r\n\r\n function loadSettings() {\r\n var promise = SettingServiceTs.loadSettings();\r\n return $q.when(promise);\r\n }\r\n\r\n function updateNativeSettings() {\r\n SettingServiceTs.updateNativeSettings();\r\n }\r\n\r\n function updatePatientDashboardConfiguration(dashboardConfiguration) {\r\n var promise = SettingServiceTs.updatePatientDashboardConfiguration(dashboardConfiguration);\r\n return $q.when(promise);\r\n }\r\n\r\n function deletePatientDashboardConfiguration(dashboardConfiguration) {\r\n var promise = SettingServiceTs.deletePatientDashboardConfiguration(dashboardConfiguration);\r\n return $q.when(promise);\r\n }\r\n \r\n function getSigWriterSettings() {\r\n var promise = SettingServiceTs.getSigWriterSettings().toPromise();\r\n return $q.when(promise);\r\n }\r\n\r\n function imperialUnitsAllowed() {\r\n return SettingServiceTs.imperialUnitsAllowed();\r\n }\r\n\r\n function getPatientDashboardWidgets() {\r\n return SettingServiceTs.getPatientDashboardWidgets();\r\n }\r\n\r\n function getAppointmentsListSettings() {\r\n return SettingServiceTs.getAppointmentsListSettings();\r\n }\r\n\r\n function setAppointmentsListSettings(settings) {\r\n SettingServiceTs.setAppointmentsListSettings(settings);\r\n }\r\n\r\n function getMessagesListSettings() {\r\n return SettingServiceTs.getMessagesListSettings();\r\n }\r\n\r\n function setMessagesListSettings(settings) {\r\n SettingServiceTs.setMessagesListSettings(settings);\r\n }\r\n\r\n function getAppointmentsBadgeSettings() {\r\n return SettingServiceTs.getAppointmentsBadgeSettings();\r\n }\r\n\r\n function setAppointmentsBadgeSettings(settings) {\r\n SettingServiceTs.setAppointmentsBadgeSettings(settings);\r\n }\r\n\r\n function getDashboardTileSettings() {\r\n return SettingServiceTs.getDashboardTileSettings();\r\n }\r\n\r\n function setDashboardTileSettings(settings) {\r\n SettingServiceTs.setDashboardTileSettings(settings);\r\n }\r\n \r\n function getKdbConfigurationId(userId, renderingProviderId, billingProviderId) {\r\n var promise = SettingServiceTs.getKdbConfigurationId(userId, renderingProviderId, billingProviderId);\r\n return $q.when(promise);\r\n }\r\n \r\n function getKdbConfigurationIdByVisit(userId, visitId) {\r\n var promise = SettingServiceTs.getKdbConfigurationIdByVisit(userId, visitId);\r\n return $q.when(promise);\r\n }\r\n \r\n function getDrugSearchIncludeInactive(providerId) {\r\n var promise = SettingServiceTs.getDrugSearchIncludeInactive(providerId);\r\n return $q.when(promise);\r\n }\r\n }\r\n ])\r\n;\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-provider-api').factory('ValidationResult', [\r\n 'ObjUtil',\r\n ValidationResultFactory,\r\n ]);\r\n\r\n function ValidationResultFactory(\r\n ObjUtil\r\n ) {\r\n\r\n ValidationResult.mapFromApi = mapFromApi;\r\n return ValidationResult;\r\n\r\n function ValidationResult(hasWarning, message) {\r\n ObjUtil.defineReadonlyProps(this, {\r\n hasWarning: !!hasWarning,\r\n message: message || '',\r\n });\r\n }\r\n\r\n function mapFromApi(resultObj) {\r\n if(!resultObj) {\r\n return new ValidationResult();\r\n }\r\n\r\n return new ValidationResult(resultObj.HasWarning, resultObj.Message);\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","(function(angular) {\r\n 'use strict';\r\n \r\n var serviceName = 'ValidationWarnings';\r\n var mainRoute = 'warnings';\r\n\r\n angular.module('aprima-provider-api').factory(serviceName, [\r\n '_',\r\n '$q',\r\n 'AprimaAnalytics',\r\n 'AprimaCache',\r\n 'AprimaRestangular',\r\n 'ServerInfoRepository',\r\n 'ValidationResult',\r\n ValidationWarnings,\r\n ]);\r\n\r\n function ValidationWarnings(\r\n _,\r\n $q,\r\n AprimaAnalytics,\r\n AprimaCache,\r\n AprimaRestangular,\r\n ServerInfoRepository,\r\n ValidationResult\r\n ) {\r\n\r\n var defaultCache = AprimaCache.Default.httpMode;\r\n\r\n var service = {\r\n insuranceExclusion: insuranceExclusion,\r\n inOfficeHours: inOfficeHours,\r\n };\r\n\r\n return service;\r\n\r\n function insuranceExclusion(providerId, patientId, accountId) {\r\n var params = {\r\n providerId: providerId,\r\n patientId: patientId,\r\n accountId: accountId,\r\n };\r\n var result = get('insurance-exclusion', params, 'ProviderInsuranceExclusionWarning', defaultCache);\r\n return result;\r\n }\r\n\r\n function inOfficeHours(calendarId, startDate, endDate) {\r\n var params = {\r\n calendarId: calendarId,\r\n startDate: startDate,\r\n endDate: endDate,\r\n };\r\n var result = get('office-hours', params, 'CalendarOfficeHoursWarning', defaultCache);\r\n return result;\r\n }\r\n\r\n function get(route, params, requiredFeature, cache) {\r\n if(requiredFeature && !ServerInfoRepository.isFeatureSupported(requiredFeature)) {\r\n return $q.when(new ValidationResult());\r\n }\r\n\r\n var timing = AprimaAnalytics.startTiming(serviceName, 'api', route);\r\n return AprimaRestangular.get()\r\n .one(mainRoute, route)\r\n .withHttpConfig({cache: cache})\r\n .get(params)\r\n .then(function(data) {\r\n return ValidationResult.mapFromApi(data);\r\n })\r\n .finally(timing.stop);\r\n }\r\n }\r\n\r\n})(window.angular);","angular.module('aprima-provider-api')\r\n .factory('VersionService', ['VersionServiceTs', function (VersionServiceTs) {\r\n 'use strict';\r\n\r\n function checkVersions(userLoginInfo) {\r\n return VersionServiceTs.ensureVersions(userLoginInfo).then(function() {\r\n return VersionServiceTs.checkVersions(userLoginInfo.SupportedApiVersions, userLoginInfo.MinClientVersion);\r\n });\r\n }\r\n\r\n return {\r\n checkVersions: checkVersions,\r\n };\r\n }]);\r\n"]}