From d725098f0030cb3e176e413acf24fa0c67981be8 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Wed, 1 Mar 2023 23:53:30 +0100 Subject: [PATCH 01/99] #87 Refactoring moving wettkampfdisziplin hardcoded values to db --- .client/kutuapp.conf | 4 +- .../dbscripts/AddWKDisziplinMetafields-pg.sql | 41 ++++++ .../AddWKDisziplinMetafields-sqllite.sql | 41 ++++++ .../ch/seidel/kutu/domain/DBService.scala | 3 + .../seidel/kutu/domain/DisziplinService.scala | 12 +- .../seidel/kutu/domain/WertungService.scala | 20 +-- .../kutu/domain/WettkampfResultMapper.scala | 4 +- .../seidel/kutu/domain/WettkampfService.scala | 21 ++- .../scala/ch/seidel/kutu/domain/package.scala | 131 ++++-------------- .../ch/seidel/kutu/http/WertungenRoutes.scala | 6 +- .../ch/seidel/kutu/http/WettkampfRoutes.scala | 1 + .../seidel/kutu/squad/DurchgangBuilder.scala | 25 +--- .../ch/seidel/kutu/squad/RiegenBuilder.scala | 4 +- .../ch/seidel/kutu/view/WettkampfInfo.scala | 2 +- .../kutu/view/WettkampfWertungTab.scala | 6 +- .../ch/seidel/kutu/base/TestDBService.scala | 1 + .../ch/seidel/kutu/domain/PackageSpec.scala | 14 +- 17 files changed, 177 insertions(+), 159 deletions(-) create mode 100644 src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql create mode 100644 src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql diff --git a/.client/kutuapp.conf b/.client/kutuapp.conf index fdbf4b78f..8ca49f713 100644 --- a/.client/kutuapp.conf +++ b/.client/kutuapp.conf @@ -1,6 +1,6 @@ app { - fullversion = dev.client.test - majorversion = dev.client + fullversion = dev2.client.test + majorversion = dev2.client builddate = today remote { schema = "http" diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql new file mode 100644 index 000000000..5e5d89189 --- /dev/null +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql @@ -0,0 +1,41 @@ +-- Add scale, dnote, min, max and startgeraet fields to wettkampfdisziplin table +-- Defaults for KuTu, KuTuRi +ALTER TABLE IF EXISTS wettkampfdisziplin + ADD COLUMN scale integer NOT NULL DEFAULT 3; + +ALTER TABLE IF EXISTS wettkampfdisziplin + ADD COLUMN dnote integer NOT NULL DEFAULT 1; + +ALTER TABLE IF EXISTS wettkampfdisziplin + ADD COLUMN min integer NOT NULL DEFAULT 0; + +ALTER TABLE IF EXISTS wettkampfdisziplin + ADD COLUMN max integer NOT NULL DEFAULT 30; + +ALTER TABLE IF EXISTS wettkampfdisziplin + ADD COLUMN startgeraet integer NOT NULL DEFAULT 1; + +-- adjust GeTu +update wettkampfdisziplin + set scale = 2 + where programm_id in ( + select id from programm where parent_id = 20 + ) + --// Sprung K6/K7) + and id not in (100, 141) +; +update wettkampfdisziplin + set dnote = 0, + max = 30 + where programm_id in ( + select id from programm where parent_id = 20 + ) +; +update wettkampfdisziplin + set startgeraet = 0 + where programm_id in ( + select id from programm where parent_id = 20 + ) + -- Barren + and disziplin_id = 5 +; \ No newline at end of file diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql new file mode 100644 index 000000000..f0bfaa1b4 --- /dev/null +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql @@ -0,0 +1,41 @@ +-- Add scale, dnote, min, max and startgeraet fields to wettkampfdisziplin table +-- Defaults for KuTu, KuTuRi +ALTER TABLE wettkampfdisziplin + ADD COLUMN scale integer NOT NULL DEFAULT 3; + +ALTER TABLE wettkampfdisziplin + ADD COLUMN dnote integer NOT NULL DEFAULT 1; + +ALTER TABLE wettkampfdisziplin + ADD COLUMN min integer NOT NULL DEFAULT 0; + +ALTER TABLE wettkampfdisziplin + ADD COLUMN max integer NOT NULL DEFAULT 30; + +ALTER TABLE wettkampfdisziplin + ADD COLUMN startgeraet integer NOT NULL DEFAULT 1; + +-- adjust GeTu +update wettkampfdisziplin + set scale = 2 + where programm_id in ( + select id from programm where parent_id = 20 + ) + --// Sprung K6/K7) + and id not in (100, 141) +; +update wettkampfdisziplin + set dnote = 0, + max = 30 + where programm_id in ( + select id from programm where parent_id = 20 + ) +; +update wettkampfdisziplin + set startgeraet = 0 + where programm_id in ( + select id from programm where parent_id = 20 + ) + -- Barren + and disziplin_id = 5 +; \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/domain/DBService.scala b/src/main/scala/ch/seidel/kutu/domain/DBService.scala index abb0214d0..1e6220acb 100644 --- a/src/main/scala/ch/seidel/kutu/domain/DBService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/DBService.scala @@ -83,6 +83,7 @@ object DBService { , "AddAnmeldungTables-sqllite.sql" , "AddAnmeldungTables-u2-sqllite.sql" , "AddNotificationMailToWettkampf-sqllite.sql" + , "AddWKDisziplinMetafields-sqllite.sql" ) (!dbfile.exists() || dbfile.length() == 0, Config.importDataFrom) match { @@ -136,6 +137,7 @@ object DBService { , "FixEmptyRiegeTimeTableIssue-sqllite.sql" , "AddAnmeldungTables-sqllite.sql" , "AddAnmeldungTables-u2-sqllite.sql" + , "AddWKDisziplinMetafields-sqllite.sql" ) installDB(db, sqlScripts) } finally { @@ -175,6 +177,7 @@ object DBService { , "AddAnmeldungTables-u1-pg.sql" , "AddAnmeldungTables-u2-pg.sql" , "AddNotificationMailToWettkampf-pg.sql" + , "AddWKDisziplinMetafields-pg.sql" ) installDB(db, sqlScripts) /*Config.importDataFrom match { diff --git a/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala b/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala index e216df721..bd11ef4d1 100644 --- a/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala @@ -133,7 +133,7 @@ abstract trait DisziplinService extends DBService with WettkampfResultMapper { Await.result(database.run{ val wettkampf: Wettkampf = readWettkampf(wettkampfId) val programme = readWettkampfLeafs(wettkampf.programmId).map(p => p.id).mkString("(", ",", ")") - sql""" select wd.id, wd.programm_id, wd.disziplin_id, d.name as diszname, p.name as progname, wd.masculin, wd.feminim, wd.ord + sql""" select wd.id, wd.programm_id, wd.disziplin_id, d.name as diszname, p.name as progname, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet from wettkampfdisziplin wd, disziplin d, programm p where wd.disziplin_id = d.id @@ -141,21 +141,21 @@ abstract trait DisziplinService extends DBService with WettkampfResultMapper { programm_Id in #$programme order by wd.ord - """.as[(Long, Long, Long, String, String, Int, Int, Int)].withPinnedSession + """.as[(Long, Long, Long, String, String, Int, Int, Int, Int, Int, Int, Int, Int)].withPinnedSession }, Duration.Inf)// - .map{t => Wettkampfdisziplin(t._1, t._2, t._3, s"${t._4} (${t._5})", None, 0, t._6, t._7, t._8) }.toList + .map{t => Wettkampfdisziplin(t._1, t._2, t._3, s"${t._4} (${t._5})", None, 0, t._6, t._7, t._8, t._9, t._10, t._11, t._12, t._13) }.toList } implicit def getWettkampfDisziplinViewResult = GetResult{r => val id = r.<<[Long] val pgm = readProgramm(r.<<) - WettkampfdisziplinView(id, pgm, r, r.<<[String], r.nextBytesOption(), readNotenModus(id, pgm, r.<<), r.<<, r.<<, r.<<) + WettkampfdisziplinView(id, pgm, r, r.<<[String], r.nextBytesOption(), readNotenModus(id, pgm, r.<<), r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<) } def listWettkampfDisziplineViews(wettkampf: Wettkampf): List[WettkampfdisziplinView] = { Await.result(database.run{ val programme = readWettkampfLeafs(wettkampf.programmId).map(p => p.id).mkString("(", ",", ")") - sql""" select wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord + sql""" select wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet from wettkampfdisziplin wd, disziplin d, programm p where wd.disziplin_id = d.id @@ -169,7 +169,7 @@ abstract trait DisziplinService extends DBService with WettkampfResultMapper { def readWettkampfDisziplinView(wettkampfDisziplinId: Long): WettkampfdisziplinView = { val wd = Await.result(database.run{ - sql""" select wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord + sql""" select wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet from wettkampfdisziplin wd, disziplin d where wd.disziplin_id = d.id diff --git a/src/main/scala/ch/seidel/kutu/domain/WertungService.scala b/src/main/scala/ch/seidel/kutu/domain/WertungService.scala index 3a6ee4c47..fc12d689a 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WertungService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WertungService.scala @@ -71,7 +71,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di Await.result(database.run{( sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w @@ -92,7 +92,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di Await.result(database.run{( sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w @@ -114,7 +114,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di Await.result(database.run{( sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w @@ -232,7 +232,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di """>> sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w @@ -268,7 +268,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di """>> sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w @@ -295,7 +295,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di @throws(classOf[Exception]) // called from mobile-client via coordinator-actor def updateWertungSimple(w: Wertung): Wertung = { - val notenspez = readWettkampfDisziplinView(w.wettkampfdisziplinId).notenSpez + val notenspez = readWettkampfDisziplinView(w.wettkampfdisziplinId) val wv = notenspez.verifiedAndCalculatedWertung(w) if (notenspez.isDNoteUsed && wv.noteD != w.noteD) { throw new IllegalArgumentException(s"Erfasster D-Wert: ${w.noteDasText}, erlaubter D-Wert: ${wv.noteDasText}") @@ -316,7 +316,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di @throws(classOf[Exception]) // called from rich-client-app via ResourceExchanger def updateWertungWithIDMapping(w: Wertung): Wertung = { - val wv = readWettkampfDisziplinView(w.wettkampfdisziplinId).notenSpez.verifiedAndCalculatedWertung(w) + val wv = readWettkampfDisziplinView(w.wettkampfdisziplinId).verifiedAndCalculatedWertung(w) val wvId = Await.result(database.run((for { updated <- sqlu""" UPDATE wertung @@ -339,7 +339,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di @throws(classOf[Exception]) // called from rich-client-app via ResourceExchanger def updateWertungWithIDMapping(ws: Seq[Wertung]): Seq[Wertung] = { - val wvs = ws.map(w => readWettkampfDisziplinView(w.wettkampfdisziplinId).notenSpez.verifiedAndCalculatedWertung(w)) + val wvs = ws.map(w => readWettkampfDisziplinView(w.wettkampfdisziplinId).verifiedAndCalculatedWertung(w)) val wvId: Seq[Long] = Await.result(database.run(DBIO.sequence(for { wv <- wvs } yield { @@ -365,7 +365,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() (sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w @@ -387,7 +387,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() (sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala index 60067a11f..6677fbf11 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala @@ -18,12 +18,12 @@ abstract trait WettkampfResultMapper extends DisziplinResultMapper { Wettkampf(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, r.<<, r.<<, r.<<[BigDecimal], r.<<)) implicit val getWettkampfDisziplinResult = GetResult(r => - Wettkampfdisziplin(r.<<, r.<<, r.<<, r.<<, r.nextBlobOption(), r.<<, r.<<, r.<<, r.<<)) + Wettkampfdisziplin(r.<<, r.<<, r.<<, r.<<, r.nextBlobOption(), r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<)) implicit def getWettkampfDisziplinViewResultCached(r: PositionedResult)(implicit cache: scala.collection.mutable.Map[Long, ProgrammView]) = { val id = r.<<[Long] val pgm = readProgramm(r.<<[Long], cache) - WettkampfdisziplinView(id, pgm, r, r.<<, r.nextBytesOption(), readNotenModus(id, pgm, r.<<), r.<<, r.<<, r.<<) + WettkampfdisziplinView(id, pgm, r, r.<<, r.nextBytesOption(), readNotenModus(id, pgm, r.<<), r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<) } implicit def getWettkampfViewResultCached(implicit cache: scala.collection.mutable.Map[Long, ProgrammView]) = GetResult(r => diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index 59d69fea3..e19f613ee 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -34,11 +34,8 @@ trait WettkampfService extends DBService val skalamap = Await.result(database.run(skala.withPinnedSession), Duration.Inf).toMap Athletiktest(skalamap, notenfaktor) } - else if(pgm.head.id == 20) { - GeTuWettkampf - } else { - KuTuWettkampf + StandardWettkampf(notenfaktor) } } @@ -93,7 +90,7 @@ trait WettkampfService extends DBService wpt.id, wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wd.id, wd.programm_id, d.*, - wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, + wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, wpt.wechsel, wpt.einturnen, wpt.uebung, wpt.wertung from wettkampf_plan_zeiten wpt inner join wettkampf wk on (wk.id = wpt.wettkampf_id) @@ -409,6 +406,20 @@ trait WettkampfService extends DBService where LOWER(titel)=${titel.toLowerCase()} and programm_id = ${heads.head.id} and datum=$datum """.as[Long] } + val dublicateCheck = uuidOption match { + case Some(suuid) => sql""" + select count(id) as wkcount + from wettkampf + where LOWER(titel)=${titel.toLowerCase()} and programm_id = ${heads.head.id} and datum=$datum + and uuid is not null + and uuid<>$suuid + """.as[Long] + case _ => sql""" + select 0 as wkcount + from wettkampf + where LOWER(titel)=${titel.toLowerCase()} and programm_id = ${heads.head.id} and datum=$datum + """.as[Long] + } if (!heads.forall { h => h.id == heads.head.id }) { throw new IllegalArgumentException("Programme nicht aus der selben Gruppe können nicht in einen Wettkampf aufgenommen werden") } diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index c5fb22153..196627f55 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -595,14 +595,23 @@ package object domain { def toRaw = PublishedScoreRaw(id, title, query, published, publishedDate, wettkampf.id) } - case class Wettkampfdisziplin(id: Long, programmId: Long, disziplinId: Long, kurzbeschreibung: String, detailbeschreibung: Option[java.sql.Blob], notenfaktor: scala.math.BigDecimal, masculin: Int, feminim: Int, ord: Int) extends DataObject { + case class Wettkampfdisziplin(id: Long, programmId: Long, disziplinId: Long, kurzbeschreibung: String, detailbeschreibung: Option[java.sql.Blob], notenfaktor: scala.math.BigDecimal, masculin: Int, feminim: Int, ord: Int, scale: Int, dnote: Int, min: Int, max: Int, startgeraet: Int) extends DataObject { override def easyprint = f"$disziplinId%02d: $kurzbeschreibung" } - case class WettkampfdisziplinView(id: Long, programm: ProgrammView, disziplin: Disziplin, kurzbeschreibung: String, detailbeschreibung: Option[Array[Byte]], notenSpez: NotenModus, masculin: Int, feminim: Int, ord: Int) extends DataObject { + case class WettkampfdisziplinView(id: Long, programm: ProgrammView, disziplin: Disziplin, kurzbeschreibung: String, detailbeschreibung: Option[Array[Byte]], notenSpez: NotenModus, masculin: Int, feminim: Int, ord: Int, scale: Int, dnote: Int, min: Int, max: Int, startgeraet: Int) extends DataObject { override def easyprint = disziplin.name + val isDNoteUsed = dnote != 0 + def verifiedAndCalculatedWertung(wertung: Wertung): Wertung = { + if (wertung.noteE.isEmpty) { + wertung.copy(noteD = None, noteE = None, endnote = None) + } else { + val (d, e) = notenSpez.validated(wertung.noteD.getOrElse(BigDecimal(0)).doubleValue, wertung.noteE.getOrElse(BigDecimal(0)).doubleValue, this) + wertung.copy(noteD = Some(d), noteE = Some(e), endnote = Some(notenSpez.calcEndnote(d, e, this))) + } + } - def toWettkampdisziplin = Wettkampfdisziplin(id, programm.id, disziplin.id, kurzbeschreibung, None, notenSpez.calcEndnote(0, 1, 0), masculin, feminim, ord) + def toWettkampdisziplin = Wettkampfdisziplin(id, programm.id, disziplin.id, kurzbeschreibung, None, notenSpez.calcEndnote(0, 1, this), masculin, feminim, ord, scale, dnote, min, max, startgeraet) } case class WettkampfPlanTimeRaw(id: Long, wettkampfId: Long, wettkampfDisziplinId: Long, wechsel: Long, einturnen: Long, uebung: Long, wertung: Long) extends DataObject { @@ -658,10 +667,8 @@ package object domain { def updatedWertung(valuesFrom: Wertung) = copy(noteD = valuesFrom.noteD, noteE = valuesFrom.noteE, endnote = valuesFrom.endnote) def validatedResult(dv: Double, ev: Double) = { - val w = toWertung - val scale = wettkampfdisziplin.notenSpez.defaultScale(w) - val (d, e) = wettkampfdisziplin.notenSpez.validated(dv, ev, scale) - Resultat(d, e, wettkampfdisziplin.notenSpez.calcEndnote(d, e, scale)) + val (d, e) = wettkampfdisziplin.notenSpez.validated(dv, ev, wettkampfdisziplin) + Resultat(d, e, wettkampfdisziplin.notenSpez.calcEndnote(d, e, wettkampfdisziplin)) } def showInScoreList = { @@ -687,25 +694,11 @@ package object domain { } sealed trait NotenModus /*with AutoFillTextBoxFactory.ItemComparator[String]*/ { - val isDNoteUsed: Boolean - - def defaultScale(wertung: Wertung): Int = 2 - def selectableItems: Option[List[String]] = None - def validated(dnote: Double, enote: Double, scale: Int): (Double, Double) - - def calcEndnote(dnote: Double, enote: Double, scale: Int): Double + def validated(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): (Double, Double) - def verifiedAndCalculatedWertung(wertung: Wertung): Wertung = { - if (wertung.noteE.isEmpty) { - wertung.copy(noteD = None, noteE = None, endnote = None) - } else { - val scale = defaultScale(wertung) - val (d, e) = validated(wertung.noteD.getOrElse(BigDecimal(0)).doubleValue, wertung.noteE.getOrElse(BigDecimal(0)).doubleValue, scale) - wertung.copy(noteD = Some(d), noteE = Some(e), endnote = Some(calcEndnote(d, e, scale))) - } - } + def calcEndnote(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): Double def toString(value: Double): String = if (value.toString == Double.NaN.toString) "" else value @@ -713,90 +706,26 @@ package object domain { /*override*/ def shouldSuggest(item: String, query: String): Boolean = false } - case class Athletiktest(punktemapping: Map[String, Double], punktgewicht: Double) extends NotenModus { - override val isDNoteUsed = false - - // override def shouldSuggest(item: String, query: String): Boolean = { - // findLikes(query).find(x => x.equalsIgnoreCase(item)).size > 0 - // } - // def findnearest(value: Double): Double = { - // val sorted = punktemapping.values.toList.sorted - // if(value.equals(0.0d)) value else - // sorted.find { x => x >= value } match { - // case Some(v) => v - // case None => sorted.last - // } - // } - // def findLikes(value: String) = { - // val lv = value.toLowerCase() - // def extractDigits(lv: String) = lv.filter(c => c.isDigit || c == '.') - // lazy val lvv = extractDigits(lv) - // val orderedKeys = punktemapping.keys.toList.sortBy(punktemapping).map(x => x.toLowerCase()) - // orderedKeys.filter(v => v.contains(lv) || extractDigits(v).equals(lvv)) - // } - // def mapToDouble(input: String) = try {findnearest(super.fromString(input))} catch {case _: Throwable => 0d} - // def findLike(value: String): String = { - // val lv = value.toLowerCase() - // def extractDigits(lv: String) = lv.filter(c => c.isDigit || c == '.') - // lazy val lvv = extractDigits(lv) - // val valuedKeys = punktemapping.keys.toList.sortBy(punktemapping) - // if(valuedKeys.contains(value)) { - // return value - // } - // val lvd = mapToDouble(value) - // if(lvd > 0d && punktemapping.values.exists { v => v == lvd }) { - // return value - // } - // val orderedKeys = punktemapping.keys.toList.sortBy(punktemapping).map(_.toLowerCase()) - // orderedKeys.find(v => v.equals(lv)).getOrElse { - // orderedKeys.find(v => extractDigits(v).equals(lvv)).getOrElse { - // orderedKeys.find(v => v.startsWith(lv)).getOrElse { - // orderedKeys.find(v => v.contains(lv)).getOrElse { - // value - // } - // } - // } - // } - // } - // override def toString(value: Double): String = punktemapping.find(p => p._2 == value).map(_._1).getOrElse(value) - //override def fromString(input: String) = punktemapping.getOrElse(findLike(input), mapToDouble(input)) - override def validated(dnote: Double, enote: Double, scale: Int): (Double, Double) = (0, enote) - - override def calcEndnote(dnote: Double, enote: Double, scale: Int) = enote * punktgewicht + case class StandardWettkampf(punktgewicht: Double) extends NotenModus { + override def validated(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): (Double, Double) = { + val dnoteValidated = if (wettkampfDisziplin.isDNoteUsed) BigDecimal(dnote).setScale(wettkampfDisziplin.scale, BigDecimal.RoundingMode.FLOOR).max(wettkampfDisziplin.min).min(wettkampfDisziplin.max).toDouble else 0d + val enoteValidated = BigDecimal(enote).setScale(wettkampfDisziplin.scale, BigDecimal.RoundingMode.FLOOR).max(wettkampfDisziplin.min).min(wettkampfDisziplin.max).toDouble + (dnoteValidated, enoteValidated) + } - override def selectableItems: Option[List[String]] = Some(punktemapping.keys.toList.sortBy(punktemapping)) + override def calcEndnote(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView) = { + val dnoteValidated = if (wettkampfDisziplin.isDNoteUsed) dnote else 0d + BigDecimal(dnoteValidated + enote).setScale(wettkampfDisziplin.scale, BigDecimal.RoundingMode.FLOOR).*(punktgewicht).max(wettkampfDisziplin.min).min(wettkampfDisziplin.max).toDouble + } } - case object KuTuWettkampf extends NotenModus { - override val isDNoteUsed = true - override def defaultScale(wertung: Wertung): Int = 3 - //override def fromString(input: String) = super.fromString(input) - override def validated(dnote: Double, enote: Double, scale: Int): (Double, Double) = - (BigDecimal(dnote).setScale(scale, BigDecimal.RoundingMode.FLOOR).max(0).min(30).toDouble, - BigDecimal(enote).setScale(scale, BigDecimal.RoundingMode.FLOOR).max(0).min(30).toDouble) - - override def calcEndnote(dnote: Double, enote: Double, scale: Int) = - BigDecimal(dnote + enote).setScale(scale, BigDecimal.RoundingMode.FLOOR).max(0).min(30).toDouble - } + case class Athletiktest(punktemapping: Map[String, Double], punktgewicht: Double) extends NotenModus { - case object GeTuWettkampf extends NotenModus { - override val isDNoteUsed = false - val scaleExceptions = Set(100L, 141L) // Sprung K6/K7 - override def defaultScale(wertung: Wertung): Int = { - if (scaleExceptions.contains(wertung.wettkampfdisziplinId)) { - 3 // 3 Stellen nach dem Komma K6/K7 Sprung - } else { - super.defaultScale(wertung) - } - } + override def validated(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): (Double, Double) = (0, enote) - //override def fromString(input: String) = super.fromString(input) - def validated(dnote: Double, enote: Double, scale: Int): (Double, Double) = - (BigDecimal(dnote).setScale(scale, BigDecimal.RoundingMode.FLOOR).max(0).min(10).toDouble, - BigDecimal(enote).setScale(scale, BigDecimal.RoundingMode.FLOOR).max(0).min(10).toDouble) + override def calcEndnote(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView) = enote * punktgewicht - def calcEndnote(dnote: Double, enote: Double, scale: Int) = - BigDecimal(enote).setScale(scale, BigDecimal.RoundingMode.FLOOR).max(0).min(10).toDouble + override def selectableItems: Option[List[String]] = Some(punktemapping.keys.toList.sortBy(punktemapping)) } object MatchCode { diff --git a/src/main/scala/ch/seidel/kutu/http/WertungenRoutes.scala b/src/main/scala/ch/seidel/kutu/http/WertungenRoutes.scala index ea17dd943..e243fba3c 100644 --- a/src/main/scala/ch/seidel/kutu/http/WertungenRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/WertungenRoutes.scala @@ -59,7 +59,7 @@ trait WertungenRoutes extends SprayJsonSupport with JsonSupport with JwtSupport w.athlet.id, w.athlet.vorname, w.athlet.name, w.athlet.geschlecht, w.athlet.verein.map(_.easyprint).getOrElse(""), w.toWertung, - w.wettkampfdisziplin.disziplin.id, w.wettkampfdisziplin.programm.name, w.wettkampfdisziplin.notenSpez.isDNoteUsed) + w.wettkampfdisziplin.disziplin.id, w.wettkampfdisziplin.programm.name, w.wettkampfdisziplin.isDNoteUsed) } } } @@ -185,7 +185,7 @@ trait WertungenRoutes extends SprayJsonSupport with JsonSupport with JwtSupport val wertungView = k.wertungen.filter(w => w.wettkampfdisziplin.disziplin.id == gid).head WertungContainer(k.id, k.vorname, k.name, k.geschlecht, k.verein, wertungView.toWertung, - gid, k.programm, wertungView.wettkampfdisziplin.notenSpez.isDNoteUsed) + gid, k.programm, wertungView.wettkampfdisziplin.isDNoteUsed) })) case _ => StatusCodes.Conflict @@ -208,7 +208,7 @@ trait WertungenRoutes extends SprayJsonSupport with JsonSupport with JwtSupport case None => None case Some(currentWertung) => val wkPgmId = currentWertung.wettkampfdisziplin.programm.head.id - val isDNoteUsed = currentWertung.wettkampfdisziplin.notenSpez.isDNoteUsed + val isDNoteUsed = currentWertung.wettkampfdisziplin.isDNoteUsed val durchgangEff = selectRiegenRaw(currentWertung.wettkampf.id).filter(ds => encodeURIComponent(ds.durchgang.getOrElse("")) == durchgang) .map(_.durchgang.get) .headOption.getOrElse(durchgang) diff --git a/src/main/scala/ch/seidel/kutu/http/WettkampfRoutes.scala b/src/main/scala/ch/seidel/kutu/http/WettkampfRoutes.scala index 06d837498..1097bf0b3 100644 --- a/src/main/scala/ch/seidel/kutu/http/WettkampfRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/WettkampfRoutes.scala @@ -433,6 +433,7 @@ trait WettkampfRoutes extends SprayJsonSupport authenticated() { userId => if (userId.equals(wkuuid.toString)) { onSuccess(readWettkampfAsync(wkuuid.toString)) { wettkampf => + log.info("deleting wettkampf: " + wettkampf) complete( CompetitionCoordinatorClientActor.publish(Delete(wkuuid.toString), clientId) .andThen { diff --git a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala index c3ec448f5..47688ae30 100644 --- a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala @@ -37,10 +37,11 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli } val riegen = progAthlWertungen.flatMap{x => val (programm, wertungen) = x - val dzlf = dzl.filter{d => - val pgm = wertungen.head._2.head.wettkampfdisziplin.programm - wkdisziplinlist.exists { wd => d.id == wd.disziplinId && wd.programmId == pgm.id } + val pgmHead = wertungen.head._2.head.wettkampfdisziplin.programm + val dzlf = dzl.filter{ d => + wkdisziplinlist.exists { wd => d.id == wd.disziplinId && wd.programmId == pgmHead.id } } + val wdzlf = wkdisziplinlist.filter{d => d.programmId == pgmHead.id } wertungen.head._2.head.wettkampfdisziplin.notenSpez match { case at: Athletiktest => @@ -57,22 +58,10 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli groupWertungen(programm + "-Tu", m, atgr, atGrouper, dzlf, maxRiegenSize, splitSex, true) ++ groupWertungen(programm + "-Ti", w, atgr, atGrouper, dzlf, maxRiegenSize, splitSex, true) } - case KuTuWettkampf => - splitSex match { - case GemischteRiegen => - groupWertungen(programm, wertungen, wkFilteredGrouper, wkGrouper, dzlf, maxRiegenSize, splitSex, false) - case GemischterDurchgang => - groupWertungen(programm, wertungen, wkFilteredGrouper, wkGrouper, dzlf, maxRiegenSize, splitSex, false) - case GetrennteDurchgaenge => - val m = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("M")) - val w = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("W")) - groupWertungen(programm + "-Tu", m, wkFilteredGrouper, wkGrouper, dzlf, maxRiegenSize, splitSex, false) ++ - groupWertungen(programm + "-Ti", w, wkFilteredGrouper, wkGrouper, dzlf, maxRiegenSize, splitSex, false) - } - case GeTuWettkampf => + case sw: StandardWettkampf => // Barren wegschneiden (ist kein Startgerät) - val dzlff = dzlf.filter(d => (onDisziplinList.isEmpty && d.id != 5) || (onDisziplinList.nonEmpty && onDisziplinList.get.contains(d))) - val wkGrouper = KuTuGeTuGrouper.wkGrouper + val startgeraete = wdzlf.filter(d => (onDisziplinList.isEmpty && d.startgeraet == 1) || (onDisziplinList.nonEmpty && onDisziplinList.get.map(_.id).contains(d.disziplinId))) + val dzlff = dzlf.filter(d => startgeraete.exists(wd => wd.disziplinId == d.id)) splitSex match { case GemischteRiegen => groupWertungen(programm, wertungen, wkFilteredGrouper, wkGrouper, dzlff, maxRiegenSize, splitSex, false) diff --git a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala index 1e42f5290..4cc294be6 100644 --- a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala @@ -48,8 +48,8 @@ object RiegenBuilder { } def generateRiegen2Name(w: WertungView): Option[String] = { - w.wettkampfdisziplin.notenSpez match { - case GeTuWettkampf if (w.athlet.geschlecht.equalsIgnoreCase("M")) => + w.wettkampf.programmId match { + case 20 if (w.athlet.geschlecht.equalsIgnoreCase("M")) => Some(s"Barren ${w.wettkampfdisziplin.programm.name}") case _ => None } diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala index 558d73631..c71a11472 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala @@ -9,6 +9,6 @@ case class WettkampfInfo(wettkampf: WettkampfView, service: KutuService) { } // val rootprograms = wettkampfdisziplinViews.map(wd => wd.programm.parent).filter(_.nonEmpty).map(_.get).toSet.toList.sortWith((a, b) => a.ord < b.ord) val leafprograms = wettkampfdisziplinViews.map(wd => wd.programm).toSet.toList.sortWith((a, b) => a.ord < b.ord) - val isDNoteUsed = wettkampfdisziplinViews.exists(wd => wd.notenSpez.isDNoteUsed) + val isDNoteUsed = wettkampfdisziplinViews.exists(wd => wd.isDNoteUsed) val isAthletikTest = wettkampf.programm.aggregatorHead.id == 1 } diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index 13986ceb4..badbc7dde 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -251,9 +251,9 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr cellFactory.value = { _: Any => new AutoCommitTextFieldTableCell[IndexedSeq[WertungEditor], Double](DoubleConverter(wertung.init.wettkampfdisziplin.notenSpez)) } styleClass += "table-cell-with-value" - prefWidth = if (wertung.init.wettkampfdisziplin.notenSpez.isDNoteUsed) 60 else 0 - editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) && wertung.init.wettkampfdisziplin.notenSpez.isDNoteUsed - visible = wertung.init.wettkampfdisziplin.notenSpez.isDNoteUsed + prefWidth = if (wertung.init.wettkampfdisziplin.isDNoteUsed) 60 else 0 + editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) && wertung.init.wettkampfdisziplin.isDNoteUsed + visible = wertung.init.wettkampfdisziplin.isDNoteUsed onEditCommit = (evt: CellEditEvent[IndexedSeq[WertungEditor], Double]) => { if (evt.rowValue != null) { val disciplin = evt.rowValue(index) diff --git a/src/test/scala/ch/seidel/kutu/base/TestDBService.scala b/src/test/scala/ch/seidel/kutu/base/TestDBService.scala index 28cdcfce3..35dc36594 100644 --- a/src/test/scala/ch/seidel/kutu/base/TestDBService.scala +++ b/src/test/scala/ch/seidel/kutu/base/TestDBService.scala @@ -61,6 +61,7 @@ object TestDBService { , "AddAnmeldungTables-sqllite.sql" , "AddAnmeldungTables-u2-sqllite.sql" , "AddNotificationMailToWettkampf-sqllite.sql" + , "AddWKDisziplinMetafields-sqllite.sql" ) DBService.installDB(tempDatabase, sqlScripts) logger.info("Database initialized") diff --git a/src/test/scala/ch/seidel/kutu/domain/PackageSpec.scala b/src/test/scala/ch/seidel/kutu/domain/PackageSpec.scala index e0e50258d..21cd54d59 100644 --- a/src/test/scala/ch/seidel/kutu/domain/PackageSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/PackageSpec.scala @@ -6,25 +6,27 @@ import java.time.LocalDate class PackageSpec extends KuTuBaseSpec { "GeTuWettkampf" should { + val wdg = WettkampfdisziplinView(1, null, null, null, None, null, 1, 1, 1, 2, 0, 0, 10, 1) "min" in { - assert(GeTuWettkampf.calcEndnote(0d, -1d, 2) == 0.00d) + assert(StandardWettkampf(1d).calcEndnote(0d, -1d, wdg) == 0.00d) } "max" in { - assert(GeTuWettkampf.calcEndnote(0d, 10.01d, 2) == 10.00d) + assert(StandardWettkampf(1d).calcEndnote(0d, 10.01d, wdg) == 10.00d) } "scale" in { - assert(GeTuWettkampf.calcEndnote(0d, 8.123d, 2) == 8.12d) + assert(StandardWettkampf(1d).calcEndnote(0d, 8.123d, wdg) == 8.12d) } } "KuTuWettkampf" should { + val wdk = WettkampfdisziplinView(1, null, null, null, None, null, 1, 1, 1, 3, 1, 0, 30, 1) "min" in { - assert(KuTuWettkampf.calcEndnote(0.1d, -1d, 2) == 0.000d) + assert(StandardWettkampf(1d).calcEndnote(0.1d, -1d, wdk) == 0.000d) } "max" in { - assert(KuTuWettkampf.calcEndnote(0.5d, 30.01d, 2) == 30.000d) + assert(StandardWettkampf(1d).calcEndnote(0.5d, 30.01d, wdk) == 30.000d) } "scale" in { - assert(KuTuWettkampf.calcEndnote(1.1d, 8.1234d, 3) == 9.223d) + assert(StandardWettkampf(1d).calcEndnote(1.1d, 8.1234d, wdk) == 9.223d) } } "toDurationFormat" should { From f954857f658c5d98fbc9b05191b47df51b3f65ab Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sat, 4 Mar 2023 23:31:18 +0100 Subject: [PATCH 02/99] #87 function for simple creation of wettkampf-programm --- .../kutu/domain/WettkampfResultMapper.scala | 2 +- .../seidel/kutu/domain/WettkampfService.scala | 98 +++++++++++++++++++ .../scala/ch/seidel/kutu/domain/package.scala | 2 +- .../ch/seidel/kutu/domain/WettkampfSpec.scala | 4 + 4 files changed, 104 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala index 6677fbf11..bfa477fa8 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala @@ -18,7 +18,7 @@ abstract trait WettkampfResultMapper extends DisziplinResultMapper { Wettkampf(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, r.<<, r.<<, r.<<[BigDecimal], r.<<)) implicit val getWettkampfDisziplinResult = GetResult(r => - Wettkampfdisziplin(r.<<, r.<<, r.<<, r.<<, r.nextBlobOption(), r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<)) + Wettkampfdisziplin(r.<<, r.<<, r.<<, r.<<, r.nextBytesOption(), r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<)) implicit def getWettkampfDisziplinViewResultCached(r: PositionedResult)(implicit cache: scala.collection.mutable.Map[Long, ProgrammView]) = { val id = r.<<[Long] diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index e19f613ee..fdc1347df 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -777,4 +777,102 @@ trait WettkampfService extends DBService } } + def insertWettkampfProgram(rootprogram: String, disziplinlist: List[String], programlist: List[String]): List[WettkampfdisziplinView] = { + val programme = Await.result(database.run{(sql""" + select * from programm + """.as[ProgrammRaw]).withPinnedSession}, Duration.Inf) + + if (programme.exists(p => p.name.equalsIgnoreCase(rootprogram))) { + // alternative: return existing associated WettkampfdisziplinViews + throw new RuntimeException(s"Name des Rootprogrammes ist nicht eindeutig: $rootprogram") + } + val wkdisciplines = Await.result(database.run{(sql""" + select * from wettkampfdisziplin + """.as[Wettkampfdisziplin]).withPinnedSession}, Duration.Inf) + val disciplines = Await.result(database.run{(sql""" + select * from disziplin + """.as[Disziplin]).withPinnedSession}, Duration.Inf) + val nextWKDiszId: Long = wkdisciplines.map(_.id).max + 1L + val nextDiszId: Long = wkdisciplines.map(_.disziplinId).max + 1L + val pgmIdRoot: Long = wkdisciplines.map(_.programmId).max + 1L + val nextPgmId = pgmIdRoot + 1L + + val diszInserts = for { + w <- disziplinlist + if !disciplines.exists(_.name.equalsIgnoreCase(w)) + } yield { + sqlu""" INSERT INTO disziplin + (name) + VALUES + ($w) + """ >> + sql""" + SELECT * from disziplin where name=$w + """.as[Disziplin] + } + val insertedDiszList = Await.result(database.run{ + DBIO.sequence(diszInserts).transactionally + }, Duration.Inf).flatten ++ disziplinlist.flatMap(w => disciplines.filter(d => d.name.equalsIgnoreCase(w))) + + val rootPgmInsert = sqlu""" + INSERT INTO programm + (id, parent_id, name, aggregate, ord) + VALUES + ($pgmIdRoot, 0, $rootprogram, 0, $pgmIdRoot) + """ >> + sql""" + SELECT * from programm where id=$pgmIdRoot + """.as[ProgrammRaw] + val pgmInserts = rootPgmInsert +: (for { + w <- programlist + } yield { + val pgmId = nextPgmId + programlist.indexOf(w) + sqlu""" INSERT INTO programm + (id, parent_id, name, aggregate, ord) + VALUES + ($pgmId, $pgmIdRoot, $w, 0, $pgmId) + """ >> + sql""" + SELECT * from programm where id=$pgmId + """.as[ProgrammRaw] + }) + + val insertedPgmList = Await.result(database.run{ + DBIO.sequence(pgmInserts).transactionally + }, Duration.Inf).flatten + + val cache = scala.collection.mutable.Map[Long, ProgrammView]() + val wkDiszsInserts = (for { + pgm <- insertedPgmList + if pgm.parentId > 0 + disz <- insertedDiszList + } yield { + (pgm, disz) + }).zipWithIndex.map { + case ((p, d), i) => + val id = i + nextWKDiszId + sqlu""" INSERT INTO wettkampfdisziplin + (id, programm_id, disziplin_id, notenfaktor, ord) + VALUES + ($id, ${p.id}, ${d.id}, 1.000, 1) + """ >> + sql""" + SELECT * from wettkampfdisziplin where id=$id + """.as[Wettkampfdisziplin] + } + Await.result(database.run{ + DBIO.sequence(wkDiszsInserts).transactionally + }, Duration.Inf).flatten.map{ + case w: Wettkampfdisziplin => + WettkampfdisziplinView( + w.id, + readProgramm(w.programmId, cache), + insertedDiszList.find(d => d.id == w.disziplinId).get, + w.kurzbeschreibung, + w.detailbeschreibung, + StandardWettkampf(1d), + w.masculin, w.feminim, w.ord, w.scale, w.dnote, w.min, w.max, w.startgeraet + ) + } + } } \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 196627f55..2e3a7c6a8 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -595,7 +595,7 @@ package object domain { def toRaw = PublishedScoreRaw(id, title, query, published, publishedDate, wettkampf.id) } - case class Wettkampfdisziplin(id: Long, programmId: Long, disziplinId: Long, kurzbeschreibung: String, detailbeschreibung: Option[java.sql.Blob], notenfaktor: scala.math.BigDecimal, masculin: Int, feminim: Int, ord: Int, scale: Int, dnote: Int, min: Int, max: Int, startgeraet: Int) extends DataObject { + case class Wettkampfdisziplin(id: Long, programmId: Long, disziplinId: Long, kurzbeschreibung: String, detailbeschreibung: Option[Array[Byte]], notenfaktor: scala.math.BigDecimal, masculin: Int, feminim: Int, ord: Int, scale: Int, dnote: Int, min: Int, max: Int, startgeraet: Int) extends DataObject { override def easyprint = f"$disziplinId%02d: $kurzbeschreibung" } diff --git a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala index 85accb7a1..17eabc11c 100644 --- a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala @@ -48,5 +48,9 @@ class WettkampfSpec extends KuTuBaseSpec { val reloaded = loadWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(reloaded.isEmpty) } + + "create WK Modus with programs and disciplines" in { + println(insertWettkampfProgram("Testprogramm", List("Boden", "Sprung"), List("LK1", "LK2", "LK3")).mkString("\n")) + } } } \ No newline at end of file From aee14b6a11fa351d5ca6321b8418ab51a3f13e7e Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sat, 11 Mar 2023 19:20:49 +0100 Subject: [PATCH 03/99] #87 Extend kutu-schema - add programm uuid and riegenmode --- .../dbscripts/AddWKDisziplinMetafields-pg.sql | 63 +++++++++++++++++ .../AddWKDisziplinMetafields-sqllite.sql | 70 +++++++++++++++++++ .../ch/seidel/kutu/domain/DBService.scala | 8 ++- .../scala/ch/seidel/kutu/domain/NewUUID.scala | 23 ++++++ .../kutu/domain/WettkampfResultMapper.scala | 2 +- .../seidel/kutu/domain/WettkampfService.scala | 4 +- .../scala/ch/seidel/kutu/domain/package.scala | 10 +-- .../ch/seidel/kutu/http/JsonSupport.scala | 2 +- .../seidel/kutu/http/RegistrationRoutes.scala | 2 +- .../ch/seidel/kutu/http/WertungenRoutes.scala | 2 +- .../ch/seidel/kutu/base/TestDBService.scala | 20 +++--- .../ch/seidel/kutu/domain/WettkampfSpec.scala | 1 + 12 files changed, 185 insertions(+), 22 deletions(-) create mode 100644 src/main/scala/ch/seidel/kutu/domain/NewUUID.scala diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql index 5e5d89189..687affd4b 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql @@ -38,4 +38,67 @@ update wettkampfdisziplin ) -- Barren and disziplin_id = 5 +; + +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; +ALTER TABLE IF EXISTS programm + ADD COLUMN uuid varchar(70); + +-- insert given uuid's of existing pgm's +create table if not exists pgmidx ( + id integer primary key, + uuid varchar(70) NOT NULL +); +insert into pgmidx (id, uuid) +values + (1,'db387348-c02b-11ed-ba9a-a2890e171f2c') +,(2,'db38741a-c02b-11ed-ba9a-a2890e171f2c') +,(3,'db387474-c02b-11ed-ba9a-a2890e171f2c') +,(11,'db3874c4-c02b-11ed-ba9a-a2890e171f2c') +,(12,'db38750a-c02b-11ed-ba9a-a2890e171f2c') +,(13,'db38755a-c02b-11ed-ba9a-a2890e171f2c') +,(14,'db3875a0-c02b-11ed-ba9a-a2890e171f2c') +,(15,'db3875e6-c02b-11ed-ba9a-a2890e171f2c') +,(16,'db387636-c02b-11ed-ba9a-a2890e171f2c') +,(17,'db38767c-c02b-11ed-ba9a-a2890e171f2c') +,(18,'db3876c2-c02b-11ed-ba9a-a2890e171f2c') +,(19,'db387708-c02b-11ed-ba9a-a2890e171f2c') +,(27,'db387758-c02b-11ed-ba9a-a2890e171f2c') +,(31,'db38779e-c02b-11ed-ba9a-a2890e171f2c') +,(32,'db3877e4-c02b-11ed-ba9a-a2890e171f2c') +,(33,'db387834-c02b-11ed-ba9a-a2890e171f2c') +,(34,'db38787a-c02b-11ed-ba9a-a2890e171f2c') +,(35,'db3878c0-c02b-11ed-ba9a-a2890e171f2c') +,(36,'db387906-c02b-11ed-ba9a-a2890e171f2c') +,(37,'db38794c-c02b-11ed-ba9a-a2890e171f2c') +,(38,'db38799c-c02b-11ed-ba9a-a2890e171f2c') +,(39,'db3879e2-c02b-11ed-ba9a-a2890e171f2c') +,(40,'db387a28-c02b-11ed-ba9a-a2890e171f2c') +,(20,'db387a6e-c02b-11ed-ba9a-a2890e171f2c') +,(21,'db387abe-c02b-11ed-ba9a-a2890e171f2c') +,(22,'db387b04-c02b-11ed-ba9a-a2890e171f2c') +,(23,'db387b4a-c02b-11ed-ba9a-a2890e171f2c') +,(24,'db387b90-c02b-11ed-ba9a-a2890e171f2c') +,(25,'db387be0-c02b-11ed-ba9a-a2890e171f2c') +,(26,'db387c26-c02b-11ed-ba9a-a2890e171f2c') +,(41,'db387c6c-c02b-11ed-ba9a-a2890e171f2c') +,(42,'db387cb2-c02b-11ed-ba9a-a2890e171f2c') +,(43,'db387cf8-c02b-11ed-ba9a-a2890e171f2c') +; +update programm p +set uuid = (select uuid from pgmidx i where i.id = p.id); + +ALTER TABLE IF EXISTS programm + ALTER COLUMN uuid SET DEFAULT uuid_generate_v1(); +CREATE UNIQUE INDEX xprogrammuuidpk ON programm (uuid); + +drop table pgmidx; + +ALTER TABLE IF EXISTS programm + ADD COLUMN riegenmode integer NOT NULL DEFAULT 1; + +update programm + set riegenmode=2 + where id=1 + or parent_id=1 ; \ No newline at end of file diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql index f0bfaa1b4..bd510ecaa 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql @@ -38,4 +38,74 @@ update wettkampfdisziplin ) -- Barren and disziplin_id = 5 +; + + +alter table programm rename to old_programm; + +CREATE TABLE IF NOT EXISTS programm ( + id integer primary key, + name varchar(100) NOT NULL, + aggregate INT NOT NULL, + parent_id integer, + ord INT NOT NULL DEFAULT 0, + alter_von int NOT NULL DEFAULT 0, + alter_bis int NOT NULL DEFAULT 100, + riegenmode int NOT NULL DEFAULT 1, + uuid varchar(70) NOT NULL DEFAULT (NewUUID()), + FOREIGN KEY (parent_id) REFERENCES programm (id) +); +create table if not exists pgmidx ( + id integer primary key, + uuid varchar(70) NOT NULL +); +insert into pgmidx (id, uuid) +values + (1,"db387348-c02b-11ed-ba9a-a2890e171f2c") +,(2,"db38741a-c02b-11ed-ba9a-a2890e171f2c") +,(3,"db387474-c02b-11ed-ba9a-a2890e171f2c") +,(11,"db3874c4-c02b-11ed-ba9a-a2890e171f2c") +,(12,"db38750a-c02b-11ed-ba9a-a2890e171f2c") +,(13,"db38755a-c02b-11ed-ba9a-a2890e171f2c") +,(14,"db3875a0-c02b-11ed-ba9a-a2890e171f2c") +,(15,"db3875e6-c02b-11ed-ba9a-a2890e171f2c") +,(16,"db387636-c02b-11ed-ba9a-a2890e171f2c") +,(17,"db38767c-c02b-11ed-ba9a-a2890e171f2c") +,(18,"db3876c2-c02b-11ed-ba9a-a2890e171f2c") +,(19,"db387708-c02b-11ed-ba9a-a2890e171f2c") +,(27,"db387758-c02b-11ed-ba9a-a2890e171f2c") +,(31,"db38779e-c02b-11ed-ba9a-a2890e171f2c") +,(32,"db3877e4-c02b-11ed-ba9a-a2890e171f2c") +,(33,"db387834-c02b-11ed-ba9a-a2890e171f2c") +,(34,"db38787a-c02b-11ed-ba9a-a2890e171f2c") +,(35,"db3878c0-c02b-11ed-ba9a-a2890e171f2c") +,(36,"db387906-c02b-11ed-ba9a-a2890e171f2c") +,(37,"db38794c-c02b-11ed-ba9a-a2890e171f2c") +,(38,"db38799c-c02b-11ed-ba9a-a2890e171f2c") +,(39,"db3879e2-c02b-11ed-ba9a-a2890e171f2c") +,(40,"db387a28-c02b-11ed-ba9a-a2890e171f2c") +,(20,"db387a6e-c02b-11ed-ba9a-a2890e171f2c") +,(21,"db387abe-c02b-11ed-ba9a-a2890e171f2c") +,(22,"db387b04-c02b-11ed-ba9a-a2890e171f2c") +,(23,"db387b4a-c02b-11ed-ba9a-a2890e171f2c") +,(24,"db387b90-c02b-11ed-ba9a-a2890e171f2c") +,(25,"db387be0-c02b-11ed-ba9a-a2890e171f2c") +,(26,"db387c26-c02b-11ed-ba9a-a2890e171f2c") +,(41,"db387c6c-c02b-11ed-ba9a-a2890e171f2c") +,(42,"db387cb2-c02b-11ed-ba9a-a2890e171f2c") +,(43,"db387cf8-c02b-11ed-ba9a-a2890e171f2c") +; +-- insert given uuid's of existing pgm's +insert into programm( id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid ) select op.*, t.uuid from old_programm op + inner join pgmidx t on (t.id = op.id) +; +CREATE UNIQUE INDEX xprogrammuuidpk ON programm (uuid); + +drop table pgmidx; +drop table old_programm; + +update programm + set riegenmode=2 + where id=1 + or parent_id=1 ; \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/domain/DBService.scala b/src/main/scala/ch/seidel/kutu/domain/DBService.scala index 1e6220acb..169a3b96c 100644 --- a/src/main/scala/ch/seidel/kutu/domain/DBService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/DBService.scala @@ -4,12 +4,12 @@ import java.io.File import java.nio.file.{Files, StandardOpenOption} import java.text.{ParseException, SimpleDateFormat} import java.util.Properties - import ch.seidel.kutu.Config import ch.seidel.kutu.Config.{appVersion, userHomePath} import ch.seidel.kutu.data.ResourceExchanger import com.zaxxer.hikari.{HikariConfig, HikariDataSource} import org.slf4j.LoggerFactory +import org.sqlite.SQLiteConnection import slick.jdbc import slick.jdbc.JdbcBackend import slick.jdbc.JdbcBackend.{Database, DatabaseDef} @@ -96,6 +96,12 @@ object DBService { var db = createDS(dbfile.getAbsolutePath) try { + val session = db.createSession() + try { + NewUUID.install(session.conn.unwrap(classOf[SQLiteConnection])) + } finally { + session .close() + } installDB(db, sqlScripts) } catch { case _: DatabaseNotInitializedException => diff --git a/src/main/scala/ch/seidel/kutu/domain/NewUUID.scala b/src/main/scala/ch/seidel/kutu/domain/NewUUID.scala new file mode 100644 index 000000000..5801e1848 --- /dev/null +++ b/src/main/scala/ch/seidel/kutu/domain/NewUUID.scala @@ -0,0 +1,23 @@ +package ch.seidel.kutu.domain + +import org.sqlite.{Function, SQLiteConnection} + +import java.sql.{SQLDataException, SQLException} +import java.util.UUID + +object NewUUID { + def install(c: SQLiteConnection) { + Function.create(c, "NewUUID", new NewUUID) + } +} + +class NewUUID extends Function { + @throws[SQLException] + override protected def xFunc(): Unit = { + try result(UUID.randomUUID.toString) + catch { + case exception: Exception => + throw new SQLDataException("NewUUID(): Problem occoured: " + exception.getLocalizedMessage) + } + } +} \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala index bfa477fa8..c37de082f 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala @@ -33,7 +33,7 @@ abstract trait WettkampfResultMapper extends DisziplinResultMapper { WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, readProgramm(r.<<), r.<<, r.<<[BigDecimal], r.<<)) implicit val getProgrammRawResult = GetResult(r => - ProgrammRaw(r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<)) + ProgrammRaw(r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<)) implicit val getPublishedScoreViewResult = GetResult(r => PublishedScoreView(r.<<, r.<<, r.<<, r.<<, r.<<[java.sql.Date], r.<<)) diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index fdc1347df..1b6ec025f 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -263,7 +263,7 @@ trait WettkampfService extends DBService } }.find(view => view.id == id) } - Await.result(database.run(allPgmsQuery.withPinnedSession), Duration.Inf).getOrElse(ProgrammView(id, "", 0, None, 0, 0, 0)) + Await.result(database.run(allPgmsQuery.withPinnedSession), Duration.Inf).getOrElse(ProgrammView(id, "", 0, None, 0, 0, 0, UUID.randomUUID().toString, 1)) } def readProgramm(id: Long, cache: scala.collection.mutable.Map[Long, ProgrammView]): ProgrammView = { @@ -854,7 +854,7 @@ trait WettkampfService extends DBService sqlu""" INSERT INTO wettkampfdisziplin (id, programm_id, disziplin_id, notenfaktor, ord) VALUES - ($id, ${p.id}, ${d.id}, 1.000, 1) + ($id, ${p.id}, ${d.id}, 1.000, $i) """ >> sql""" SELECT * from wettkampfdisziplin where id=$id diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 2e3a7c6a8..c1b384df9 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -414,19 +414,21 @@ package object domain { val ord: Int val alterVon: Int val alterBis: Int + val riegenmode: Int + val uuid: String def withParent(parent: ProgrammView) = { - ProgrammView(id, name, aggregate, Some(parent), ord, alterVon, alterBis) + ProgrammView(id, name, aggregate, Some(parent), ord, alterVon, alterBis, uuid, riegenmode) } def toView = { - ProgrammView(id, name, aggregate, None, ord, alterVon, alterBis) + ProgrammView(id, name, aggregate, None, ord, alterVon, alterBis, uuid, riegenmode) } } - case class ProgrammRaw(id: Long, name: String, aggregate: Int, parentId: Long, ord: Int, alterVon: Int, alterBis: Int) extends Programm + case class ProgrammRaw(id: Long, name: String, aggregate: Int, parentId: Long, ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode: Int) extends Programm - case class ProgrammView(id: Long, name: String, aggregate: Int, parent: Option[ProgrammView], ord: Int, alterVon: Int, alterBis: Int) extends Programm { + case class ProgrammView(id: Long, name: String, aggregate: Int, parent: Option[ProgrammView], ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode: Int) extends Programm { //override def easyprint = toPath def head: ProgrammView = parent match { diff --git a/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala b/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala index bd28798f0..3634b27b0 100644 --- a/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala +++ b/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala @@ -12,7 +12,7 @@ trait JsonSupport extends SprayJsonSupport with EnrichedJson { import DefaultJsonProtocol._ implicit val wkFormat = jsonFormat(Wettkampf, "id", "uuid", "datum", "titel", "programmId", "auszeichnung", "auszeichnungendnote", "notificationEMail") - implicit val pgmFormat = jsonFormat7(ProgrammRaw) + implicit val pgmFormat = jsonFormat9(ProgrammRaw) implicit val pgmListFormat = listFormat(pgmFormat) implicit val disziplinFormat = jsonFormat2(Disziplin) implicit val wertungFormat = jsonFormat(Wertung, "id", "athletId", "wettkampfdisziplinId", "wettkampfId", "wettkampfUUID", "noteD", "noteE", "endnote", "riege", "riege2") diff --git a/src/main/scala/ch/seidel/kutu/http/RegistrationRoutes.scala b/src/main/scala/ch/seidel/kutu/http/RegistrationRoutes.scala index e50ccb26e..1b74ce0c0 100644 --- a/src/main/scala/ch/seidel/kutu/http/RegistrationRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/RegistrationRoutes.scala @@ -180,7 +180,7 @@ trait RegistrationRoutes extends SprayJsonSupport with JwtSupport with JsonSuppo get { complete { val wi = WettkampfInfo(wettkampf.toView(readProgramm(wettkampf.programmId)), this) - wi.leafprograms.map(p => ProgrammRaw(p.id, p.name, 0, 0, p.ord, p.alterVon, p.alterBis)) + wi.leafprograms.map(p => ProgrammRaw(p.id, p.name, 0, 0, p.ord, p.alterVon, p.alterBis, p.uuid, p.riegenmode)) } } } ~ pathLabeled("refreshsyncs", "refreshsyncs") { diff --git a/src/main/scala/ch/seidel/kutu/http/WertungenRoutes.scala b/src/main/scala/ch/seidel/kutu/http/WertungenRoutes.scala index e243fba3c..41b8fb437 100644 --- a/src/main/scala/ch/seidel/kutu/http/WertungenRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/WertungenRoutes.scala @@ -31,7 +31,7 @@ trait WertungenRoutes extends SprayJsonSupport with JsonSupport with JwtSupport get { complete { Future { - listRootProgramme().map(x => ProgrammRaw(x.id, x.name, x.aggregate, x.parent.map(_.id).getOrElse(0), x.ord, x.alterVon, x.alterBis)) + listRootProgramme().map(x => ProgrammRaw(x.id, x.name, x.aggregate, x.parent.map(_.id).getOrElse(0), x.ord, x.alterVon, x.alterBis, x.uuid, x.riegenmode)) } } } diff --git a/src/test/scala/ch/seidel/kutu/base/TestDBService.scala b/src/test/scala/ch/seidel/kutu/base/TestDBService.scala index 35dc36594..40e29e860 100644 --- a/src/test/scala/ch/seidel/kutu/base/TestDBService.scala +++ b/src/test/scala/ch/seidel/kutu/base/TestDBService.scala @@ -2,12 +2,12 @@ package ch.seidel.kutu.base import java.io.File import java.util.Properties - import org.slf4j.LoggerFactory import slick.jdbc.JdbcBackend.Database import slick.jdbc.SQLiteProfile.api.AsyncExecutor -import ch.seidel.kutu.domain.DBService +import ch.seidel.kutu.domain.{DBService, NewUUID} import com.zaxxer.hikari.{HikariConfig, HikariDataSource} +import org.sqlite.SQLiteConnection object TestDBService { private val logger = LoggerFactory.getLogger(this.getClass) @@ -40,15 +40,6 @@ object TestDBService { val tempDatabase = Database.forDataSource(dataSource, maxConnections = Some(10), executor = AsyncExecutor(name = "DB-Actions", minThreads = 10, maxThreads = 10, queueSize = 10000, maxConnections = 10), keepAliveConnection = true) -// val tempDatabase = Database.forURL( -// //url = "jdbc:sqlite:file:kutu?mode=memory&cache=shared", -// url = "jdbc:sqlite:" + dbfile, -// driver = "org.sqlite.JDBC", -// prop = proplite, -// user = "kutu", -// password = "kutu", -// executor = AsyncExecutor("DB-Actions", 500, 10000) -// ) val sqlScripts = List( "kutu-sqllite-ddl.sql" , "SetJournalWAL.sql" @@ -63,6 +54,13 @@ object TestDBService { , "AddNotificationMailToWettkampf-sqllite.sql" , "AddWKDisziplinMetafields-sqllite.sql" ) + val session = tempDatabase.createSession() + try { + NewUUID.install(session.conn.unwrap(classOf[SQLiteConnection])) + } finally { + session .close() + } + DBService.installDB(tempDatabase, sqlScripts) logger.info("Database initialized") tempDatabase diff --git a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala index 17eabc11c..782c3c5fb 100644 --- a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala @@ -50,6 +50,7 @@ class WettkampfSpec extends KuTuBaseSpec { } "create WK Modus with programs and disciplines" in { + println(insertWettkampfProgram("Testprogramm", List("Boden", "Sprung"), List("LK1", "LK2", "LK3")).mkString("\n")) } } From 73a0eacdacd820fd482c27ea8e550bb340a9a690 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Mon, 13 Mar 2023 01:08:41 +0100 Subject: [PATCH 04/99] =?UTF-8?q?#87=20PoC=20for=20Turn10=20and=20TG=20All?= =?UTF-8?q?g=C3=A4u=20WK-Modes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - WK-Mode Generator - Convenience for Registration --- .../resultcatcher/src/app/backend-types.ts | 6 +- .../reg-athlet-editor.page.html | 6 +- .../reg-athlet-editor.page.ts | 44 +++ .../reg-athletlist/reg-athletlist.page.ts | 16 + .../AddWKDisziplinMetafields-sqllite.sql | 349 +++++++++++++++++- .../kutu/domain/WettkampfResultMapper.scala | 1 + .../seidel/kutu/domain/WettkampfService.scala | 76 ++-- .../scala/ch/seidel/kutu/domain/package.scala | 22 +- .../seidel/kutu/http/RegistrationRoutes.scala | 5 +- .../seidel/kutu/squad/DurchgangBuilder.scala | 11 +- .../ch/seidel/kutu/squad/RiegenBuilder.scala | 8 +- .../ch/seidel/kutu/domain/WettkampfSpec.scala | 126 ++++++- 12 files changed, 624 insertions(+), 46 deletions(-) diff --git a/newclient/resultcatcher/src/app/backend-types.ts b/newclient/resultcatcher/src/app/backend-types.ts index aec543a19..63a076044 100644 --- a/newclient/resultcatcher/src/app/backend-types.ts +++ b/newclient/resultcatcher/src/app/backend-types.ts @@ -44,8 +44,10 @@ export interface ProgrammRaw { aggregate: number; parent: number; ord: number; - vonAlter: number; - bisAlter: number; + alterVon: number; + alterBis: number; + uuid: string; + riegenmode: number; } export interface Verein { diff --git a/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.html b/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.html index 52119dbc2..dffc92e3d 100644 --- a/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.html +++ b/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.html @@ -49,19 +49,19 @@ männlich - + Einteilung - +   Programm/Kategorie - {{pgm.name}} + {{pgm.name}} diff --git a/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts b/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts index 473f1ce23..b287057e7 100644 --- a/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts +++ b/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts @@ -82,6 +82,32 @@ export class RegAthletEditorPage implements OnInit { this.registration = this.clubAthletList.find(r => r.athletId === id); } + needsPGMChoice(): boolean { + const pgm = [...this.wkPgms][0]; + return !(pgm.aggregate == 1 && pgm.riegenmode == 2); + } + + alter(athlet: AthletRegistration): number { + const yearOfBirth = new Date(athlet.gebdat).getFullYear(); + const currentYear = new Date(Date.now()).getFullYear(); + return currentYear - yearOfBirth; + } + + similarRegistration(a: AthletRegistration, b: AthletRegistration): boolean { + return a.athletId === b.athletId || + a.name === b.name && a.vorname === b.vorname && a.gebdat === b.gebdat && a.geschlecht === b.geschlecht; + } + alternatives(athlet:AthletRegistration): AthletRegistration[] { + return this.clubAthletListCurrent?.filter(cc => this.similarRegistration(cc, athlet) && cc.id != athlet.id) || []; + } + filterPGMsForAthlet(athlet: AthletRegistration): ProgrammRaw[] { + const alter = this.alter(athlet); + const alternatives = this.alternatives(athlet); + return this.wkPgms.filter(pgm => { + return (pgm.alterVon || 0) <= alter && (pgm.alterBis || 100) >= alter && alternatives.filter(a => a.programId === pgm.id).length === 0; + }); + } + editable() { return this.backendService.loggedIn; } @@ -96,6 +122,9 @@ export class RegAthletEditorPage implements OnInit { } isFormValid(): boolean { + if(!this.registration?.programId && !this.needsPGMChoice()) { + this.registration.programId = this.filterPGMsForAthlet(this.registration)[0]?.id; + } return !!this.registration.gebdat && !!this.registration.geschlecht && this.registration.geschlecht.length > 0 && @@ -126,6 +155,13 @@ export class RegAthletEditorPage implements OnInit { const reg = Object.assign({}, this.registration, {gebdat: new Date(form.value.gebdat).toJSON()}); if (this.athletId === 0 || reg.id === 0) { + + if(!this.needsPGMChoice()) { + this.filterPGMsForAthlet(this.registration).filter(pgm => pgm.id !== reg.programId).forEach(pgm => { + this.backendService.createAthletRegistration(this.wkId, this.regId, Object.assign({}, reg, {programId: pgm.id})); + }); + } + this.backendService.createAthletRegistration(this.wkId, this.regId, reg).subscribe(() => { this.navCtrl.pop(); }); @@ -164,6 +200,14 @@ export class RegAthletEditorPage implements OnInit { buttons: [ {text: 'ABBRECHEN', role: 'cancel', handler: () => {}}, {text: 'OKAY', handler: () => { + if(!this.needsPGMChoice()) { + this.clubAthletListCurrent + .filter(reg => this.similarRegistration(this.registration, reg)) + .filter(reg => reg.id !== this.registration.id) + .forEach(reg => { + this.backendService.deleteAthletRegistration(this.wkId, this.regId, reg); + }); + } this.backendService.deleteAthletRegistration(this.wkId, this.regId, this.registration).subscribe(() => { this.navCtrl.pop(); }); diff --git a/newclient/resultcatcher/src/app/registration/reg-athletlist/reg-athletlist.page.ts b/newclient/resultcatcher/src/app/registration/reg-athletlist/reg-athletlist.page.ts index 55427bb93..21df0e267 100644 --- a/newclient/resultcatcher/src/app/registration/reg-athletlist/reg-athletlist.page.ts +++ b/newclient/resultcatcher/src/app/registration/reg-athletlist/reg-athletlist.page.ts @@ -216,6 +216,14 @@ export class RegAthletlistPage implements OnInit { slidingItem.close(); } + needsPGMChoice(): boolean { + const pgm = [...this.wkPgms][0]; + return !(pgm.aggregate == 1 && pgm.riegenmode == 2); + } + similarRegistration(a: AthletRegistration, b: AthletRegistration): boolean { + return a.athletId === b.athletId || + a.name === b.name && a.vorname === b.vorname && a.gebdat === b.gebdat && a.geschlecht === b.geschlecht; + } delete(reg: AthletRegistration, slidingItem: IonItemSliding) { slidingItem.close(); const alert = this.alertCtrl.create({ @@ -226,6 +234,14 @@ export class RegAthletlistPage implements OnInit { buttons: [ {text: 'ABBRECHEN', role: 'cancel', handler: () => {}}, {text: 'OKAY', handler: () => { + if(!this.needsPGMChoice()) { + this.athletregistrations + .filter(r => this.similarRegistration(r, reg)) + .filter(r => r.id !== reg.id) + .forEach(r => { + this.backendService.deleteAthletRegistration(this.backendService.competition, this.currentRegId, r); + }); + } this.backendService.deleteAthletRegistration(this.backendService.competition, this.currentRegId, reg).subscribe(() => { this.refreshList(); }); diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql index bd510ecaa..0a8898162 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql @@ -108,4 +108,351 @@ update programm set riegenmode=2 where id=1 or parent_id=1 -; \ No newline at end of file +; + + +-- Test Programm-Extensions +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(92, 'TG Allgäu', 0, 0, 92, 0, 100, '8e31c31f-ca3b-49d6-88e9-6a8d4b6eaeed', 1) +,(93, 'Kür', 1, 92, 93, 0, 100, '6d4a8660-5c4a-4532-83ce-22ef39dab060', 1) +,(94, 'WK I Kür', 1, 93, 94, 0, 100, 'ff7b13d0-16b4-4b21-8a9f-dc82867f2859', 1) +,(95, 'WK II LK1', 1, 93, 95, 0, 100, 'e516c62a-54f7-4ff4-9198-dc70f6348f4e', 1) +,(96, 'WK III LK1', 1, 93, 96, 16, 17, '8a98b830-7c92-4fd6-be58-e6361c40c961', 1) +,(97, 'WK IV LK2', 1, 93, 97, 14, 15, 'c4330b77-1b13-48c3-a950-0e352b6b32b7', 1) +,(98, 'Pflicht', 1, 92, 98, 0, 100, 'a74ca689-6174-4dee-ad39-7cbfbce29898', 1) +,(99, 'WK V Jug', 1, 98, 99, 14, 18, '8793e2a5-ddc0-43f8-ac8a-fbdad40e2594', 1) +,(100, 'WK VI Schüler A', 1, 98, 100, 12, 13, '640e4a29-0c6a-4083-9fcc-cca79105644d', 1) +,(101, 'WK VII Schüler B', 1, 98, 101, 10, 11, '6859201a-bd3d-4917-9b1e-b0898f6df7d2', 1) +,(102, 'WK VIII Schüler C', 1, 98, 102, 8, 10, '3bcdf06e-827c-40e3-9209-74b3ba5314e1', 1) +,(103, 'WK IX Schüler D', 1, 98, 103, 0, 7, '3b7aab26-4a6d-4dd5-a53c-58fca79ec62a', 1); +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(435, 94, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) +,(436, 94, 5, '', '', 1.0, 1, 1, 1, 3, 1, 0, 30, 1) +,(437, 94, 4, '', '', 1.0, 1, 1, 2, 3, 1, 0, 30, 1) +,(438, 94, 6, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) +,(439, 95, 1, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) +,(440, 95, 5, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) +,(441, 95, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) +,(442, 95, 6, '', '', 1.0, 1, 1, 7, 3, 1, 0, 30, 1) +,(443, 96, 1, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) +,(444, 96, 5, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1) +,(445, 96, 4, '', '', 1.0, 1, 1, 10, 3, 1, 0, 30, 1) +,(446, 96, 6, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) +,(447, 97, 1, '', '', 1.0, 1, 1, 12, 3, 1, 0, 30, 1) +,(448, 97, 5, '', '', 1.0, 1, 1, 13, 3, 1, 0, 30, 1) +,(449, 97, 4, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) +,(450, 97, 6, '', '', 1.0, 1, 1, 15, 3, 1, 0, 30, 1) +,(451, 99, 1, '', '', 1.0, 1, 1, 16, 3, 1, 0, 30, 1) +,(452, 99, 5, '', '', 1.0, 1, 1, 17, 3, 1, 0, 30, 1) +,(453, 99, 4, '', '', 1.0, 1, 1, 18, 3, 1, 0, 30, 1) +,(454, 99, 6, '', '', 1.0, 1, 1, 19, 3, 1, 0, 30, 1) +,(455, 100, 1, '', '', 1.0, 1, 1, 20, 3, 1, 0, 30, 1) +,(456, 100, 5, '', '', 1.0, 1, 1, 21, 3, 1, 0, 30, 1) +,(457, 100, 4, '', '', 1.0, 1, 1, 22, 3, 1, 0, 30, 1) +,(458, 100, 6, '', '', 1.0, 1, 1, 23, 3, 1, 0, 30, 1) +,(459, 101, 1, '', '', 1.0, 1, 1, 24, 3, 1, 0, 30, 1) +,(460, 101, 5, '', '', 1.0, 1, 1, 25, 3, 1, 0, 30, 1) +,(461, 101, 4, '', '', 1.0, 1, 1, 26, 3, 1, 0, 30, 1) +,(462, 101, 6, '', '', 1.0, 1, 1, 27, 3, 1, 0, 30, 1) +,(463, 102, 1, '', '', 1.0, 1, 1, 28, 3, 1, 0, 30, 1) +,(464, 102, 5, '', '', 1.0, 1, 1, 29, 3, 1, 0, 30, 1) +,(465, 102, 4, '', '', 1.0, 1, 1, 30, 3, 1, 0, 30, 1) +,(466, 102, 6, '', '', 1.0, 1, 1, 31, 3, 1, 0, 30, 1) +,(467, 103, 1, '', '', 1.0, 1, 1, 32, 3, 1, 0, 30, 1) +,(468, 103, 5, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) +,(469, 103, 4, '', '', 1.0, 1, 1, 34, 3, 1, 0, 30, 1) +,(470, 103, 6, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1); +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; +insert into disziplin (id, name) values (30, 'Minitramp') on conflict (id) do nothing; +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into disziplin (id, name) values (31, 'Pferd') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(104, 'Turn10', 0, 0, 104, 0, 100, '41d1ac2a-3f9d-4c87-98ad-15f20550ff55', 2) +,(105, 'AK6 BS', 0, 104, 105, 0, 6, '1d97c759-0f3b-4bc1-9fd7-3c16c687df8f', 2) +,(106, 'AK7 BS', 0, 104, 106, 7, 7, '7acf9a20-ce02-4599-8dff-60b9016ef686', 2) +,(107, 'AK8 BS', 0, 104, 107, 8, 8, '9150d582-af37-4b78-ba87-0b90ab8575e4', 2) +,(108, 'AK9 BS', 0, 104, 108, 9, 9, 'f3a4c657-271a-4cbf-8e55-9af4e5b4969e', 2) +,(109, 'AK10 BS', 0, 104, 109, 10, 10, '9a982a32-d23b-4773-a3ca-4026e423f713', 2) +,(110, 'AK11 BS', 0, 104, 110, 11, 11, '560c92d9-c933-48db-82bd-1179ff192084', 2) +,(111, 'AK12 BS', 0, 104, 111, 12, 12, 'b1db7166-5ed7-4b85-ace8-86e1fedc28e2', 2) +,(112, 'AK13 BS', 0, 104, 112, 13, 13, '98897413-2ef5-413d-8576-f8abb6ba0b48', 2) +,(113, 'AK13 OS', 0, 104, 113, 13, 13, 'e524c954-9d98-444d-ac9e-88cf79c5131e', 2) +,(114, 'AK14 BS', 0, 104, 114, 14, 14, 'c2c374f7-f1e9-4fe4-950d-eaa05e0c2f97', 2) +,(115, 'AK14 OS', 0, 104, 115, 14, 14, '45b0d639-dc29-44e2-a90a-d6a88ac1475b', 2) +,(116, 'AK15 BS', 0, 104, 116, 15, 15, '0b667b0f-669f-4f5b-b8a5-f42c46e74bbe', 2) +,(117, 'AK15 OS', 0, 104, 117, 15, 15, '4ee6ed37-2a64-4518-97b8-611148422a02', 2) +,(118, 'AK16 BS', 0, 104, 118, 16, 16, '7810e50a-4266-4c21-8d45-bb1183dbe400', 2) +,(119, 'AK16 OS', 0, 104, 119, 16, 16, 'd6f01101-4b40-49fe-bf86-3b91a06ea710', 2) +,(120, 'AK17 BS', 0, 104, 120, 17, 17, '146efa41-443e-437c-8745-c97f688d8b0a', 2) +,(121, 'AK17 OS', 0, 104, 121, 17, 17, '860f1e38-a06b-40e8-a702-31e63eb38ae6', 2) +,(122, 'AK18 BS', 0, 104, 122, 18, 23, '998d8dda-bced-40e0-9df0-84854bd81547', 2) +,(123, 'AK18 OS', 0, 104, 123, 18, 23, '137dfea1-2950-42c5-a754-3b6500213a32', 2) +,(124, 'AK24 BS', 0, 104, 124, 24, 29, '14affd65-77b1-44d7-af7a-1bc12ecb3436', 2) +,(125, 'AK24 OS', 0, 104, 125, 24, 29, '808886d6-2693-4827-b9b9-8cd7ab5e4cb5', 2) +,(126, 'AK30 BS', 0, 104, 126, 30, 34, '0f26b6c6-fdc7-4ef6-89a9-600838c94919', 2) +,(127, 'AK30 OS', 0, 104, 127, 30, 34, 'bcb49baf-0357-4f66-b2ec-1dbbb7ee4ec7', 2) +,(128, 'AK35 BS', 0, 104, 128, 35, 39, '4e333a38-2f94-41f4-90d0-b6789c8789d5', 2) +,(129, 'AK35 OS', 0, 104, 129, 35, 39, '4c4aaac7-9065-4b0a-a78e-20132b6b7495', 2) +,(130, 'AK40 BS', 0, 104, 130, 40, 44, '63637b7c-574e-4dfe-a721-8652d4bfff22', 2) +,(131, 'AK40 OS', 0, 104, 131, 40, 44, '03ffaf4d-3357-4b40-a74f-d0721d25ebf6', 2) +,(132, 'AK45 BS', 0, 104, 132, 45, 49, 'e50260fa-619f-4fa3-a60a-71b21aa6fab2', 2) +,(133, 'AK45 OS', 0, 104, 133, 45, 49, '9c0b75e5-5b3b-42e6-900e-e3010df41192', 2) +,(134, 'AK50 BS', 0, 104, 134, 50, 54, '8f3ff81f-40a2-4ff7-a09b-887811eb144e', 2) +,(135, 'AK50 OS', 0, 104, 135, 50, 54, '40fb8b3f-1ed1-4891-a1af-0fbba48f22b7', 2) +,(136, 'AK55 BS', 0, 104, 136, 55, 59, 'b2429781-7624-4fa0-965e-8322c2ada7f3', 2) +,(137, 'AK55 OS', 0, 104, 137, 55, 59, 'f700ffd4-8475-419d-924a-8aa4a08bbf8f', 2) +,(138, 'AK60 BS', 0, 104, 138, 60, 64, 'be1413ec-d79b-40b3-81a1-dec9d9b2a8a8', 2) +,(139, 'AK60 OS', 0, 104, 139, 60, 64, '753b5150-887a-4fc0-bbf3-236f1ab21a2f', 2); +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(471, 105, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) +,(472, 105, 5, '', '', 1.0, 1, 1, 1, 3, 1, 0, 30, 1) +,(473, 105, 28, '', '', 1.0, 1, 1, 2, 3, 1, 0, 30, 1) +,(474, 105, 30, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) +,(475, 105, 6, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) +,(476, 105, 31, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) +,(477, 105, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) +,(478, 106, 1, '', '', 1.0, 1, 1, 7, 3, 1, 0, 30, 1) +,(479, 106, 5, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) +,(480, 106, 28, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1) +,(481, 106, 30, '', '', 1.0, 1, 1, 10, 3, 1, 0, 30, 1) +,(482, 106, 6, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) +,(483, 106, 31, '', '', 1.0, 1, 1, 12, 3, 1, 0, 30, 1) +,(484, 106, 4, '', '', 1.0, 1, 1, 13, 3, 1, 0, 30, 1) +,(485, 107, 1, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) +,(486, 107, 5, '', '', 1.0, 1, 1, 15, 3, 1, 0, 30, 1) +,(487, 107, 28, '', '', 1.0, 1, 1, 16, 3, 1, 0, 30, 1) +,(488, 107, 30, '', '', 1.0, 1, 1, 17, 3, 1, 0, 30, 1) +,(489, 107, 6, '', '', 1.0, 1, 1, 18, 3, 1, 0, 30, 1) +,(490, 107, 31, '', '', 1.0, 1, 1, 19, 3, 1, 0, 30, 1) +,(491, 107, 4, '', '', 1.0, 1, 1, 20, 3, 1, 0, 30, 1) +,(492, 108, 1, '', '', 1.0, 1, 1, 21, 3, 1, 0, 30, 1) +,(493, 108, 5, '', '', 1.0, 1, 1, 22, 3, 1, 0, 30, 1) +,(494, 108, 28, '', '', 1.0, 1, 1, 23, 3, 1, 0, 30, 1) +,(495, 108, 30, '', '', 1.0, 1, 1, 24, 3, 1, 0, 30, 1) +,(496, 108, 6, '', '', 1.0, 1, 1, 25, 3, 1, 0, 30, 1) +,(497, 108, 31, '', '', 1.0, 1, 1, 26, 3, 1, 0, 30, 1) +,(498, 108, 4, '', '', 1.0, 1, 1, 27, 3, 1, 0, 30, 1) +,(499, 109, 1, '', '', 1.0, 1, 1, 28, 3, 1, 0, 30, 1) +,(500, 109, 5, '', '', 1.0, 1, 1, 29, 3, 1, 0, 30, 1) +,(501, 109, 28, '', '', 1.0, 1, 1, 30, 3, 1, 0, 30, 1) +,(502, 109, 30, '', '', 1.0, 1, 1, 31, 3, 1, 0, 30, 1) +,(503, 109, 6, '', '', 1.0, 1, 1, 32, 3, 1, 0, 30, 1) +,(504, 109, 31, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) +,(505, 109, 4, '', '', 1.0, 1, 1, 34, 3, 1, 0, 30, 1) +,(506, 110, 1, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1) +,(507, 110, 5, '', '', 1.0, 1, 1, 36, 3, 1, 0, 30, 1) +,(508, 110, 28, '', '', 1.0, 1, 1, 37, 3, 1, 0, 30, 1) +,(509, 110, 30, '', '', 1.0, 1, 1, 38, 3, 1, 0, 30, 1) +,(510, 110, 6, '', '', 1.0, 1, 1, 39, 3, 1, 0, 30, 1) +,(511, 110, 31, '', '', 1.0, 1, 1, 40, 3, 1, 0, 30, 1) +,(512, 110, 4, '', '', 1.0, 1, 1, 41, 3, 1, 0, 30, 1) +,(513, 111, 1, '', '', 1.0, 1, 1, 42, 3, 1, 0, 30, 1) +,(514, 111, 5, '', '', 1.0, 1, 1, 43, 3, 1, 0, 30, 1) +,(515, 111, 28, '', '', 1.0, 1, 1, 44, 3, 1, 0, 30, 1) +,(516, 111, 30, '', '', 1.0, 1, 1, 45, 3, 1, 0, 30, 1) +,(517, 111, 6, '', '', 1.0, 1, 1, 46, 3, 1, 0, 30, 1) +,(518, 111, 31, '', '', 1.0, 1, 1, 47, 3, 1, 0, 30, 1) +,(519, 111, 4, '', '', 1.0, 1, 1, 48, 3, 1, 0, 30, 1) +,(520, 112, 1, '', '', 1.0, 1, 1, 49, 3, 1, 0, 30, 1) +,(521, 112, 5, '', '', 1.0, 1, 1, 50, 3, 1, 0, 30, 1) +,(522, 112, 28, '', '', 1.0, 1, 1, 51, 3, 1, 0, 30, 1) +,(523, 112, 30, '', '', 1.0, 1, 1, 52, 3, 1, 0, 30, 1) +,(524, 112, 6, '', '', 1.0, 1, 1, 53, 3, 1, 0, 30, 1) +,(525, 112, 31, '', '', 1.0, 1, 1, 54, 3, 1, 0, 30, 1) +,(526, 112, 4, '', '', 1.0, 1, 1, 55, 3, 1, 0, 30, 1) +,(527, 113, 1, '', '', 1.0, 1, 1, 56, 3, 1, 0, 30, 1) +,(528, 113, 5, '', '', 1.0, 1, 1, 57, 3, 1, 0, 30, 1) +,(529, 113, 28, '', '', 1.0, 1, 1, 58, 3, 1, 0, 30, 1) +,(530, 113, 30, '', '', 1.0, 1, 1, 59, 3, 1, 0, 30, 1) +,(531, 113, 6, '', '', 1.0, 1, 1, 60, 3, 1, 0, 30, 1) +,(532, 113, 31, '', '', 1.0, 1, 1, 61, 3, 1, 0, 30, 1) +,(533, 113, 4, '', '', 1.0, 1, 1, 62, 3, 1, 0, 30, 1) +,(534, 114, 1, '', '', 1.0, 1, 1, 63, 3, 1, 0, 30, 1) +,(535, 114, 5, '', '', 1.0, 1, 1, 64, 3, 1, 0, 30, 1) +,(536, 114, 28, '', '', 1.0, 1, 1, 65, 3, 1, 0, 30, 1) +,(537, 114, 30, '', '', 1.0, 1, 1, 66, 3, 1, 0, 30, 1) +,(538, 114, 6, '', '', 1.0, 1, 1, 67, 3, 1, 0, 30, 1) +,(539, 114, 31, '', '', 1.0, 1, 1, 68, 3, 1, 0, 30, 1) +,(540, 114, 4, '', '', 1.0, 1, 1, 69, 3, 1, 0, 30, 1) +,(541, 115, 1, '', '', 1.0, 1, 1, 70, 3, 1, 0, 30, 1) +,(542, 115, 5, '', '', 1.0, 1, 1, 71, 3, 1, 0, 30, 1) +,(543, 115, 28, '', '', 1.0, 1, 1, 72, 3, 1, 0, 30, 1) +,(544, 115, 30, '', '', 1.0, 1, 1, 73, 3, 1, 0, 30, 1) +,(545, 115, 6, '', '', 1.0, 1, 1, 74, 3, 1, 0, 30, 1) +,(546, 115, 31, '', '', 1.0, 1, 1, 75, 3, 1, 0, 30, 1) +,(547, 115, 4, '', '', 1.0, 1, 1, 76, 3, 1, 0, 30, 1) +,(548, 116, 1, '', '', 1.0, 1, 1, 77, 3, 1, 0, 30, 1) +,(549, 116, 5, '', '', 1.0, 1, 1, 78, 3, 1, 0, 30, 1) +,(550, 116, 28, '', '', 1.0, 1, 1, 79, 3, 1, 0, 30, 1) +,(551, 116, 30, '', '', 1.0, 1, 1, 80, 3, 1, 0, 30, 1) +,(552, 116, 6, '', '', 1.0, 1, 1, 81, 3, 1, 0, 30, 1) +,(553, 116, 31, '', '', 1.0, 1, 1, 82, 3, 1, 0, 30, 1) +,(554, 116, 4, '', '', 1.0, 1, 1, 83, 3, 1, 0, 30, 1) +,(555, 117, 1, '', '', 1.0, 1, 1, 84, 3, 1, 0, 30, 1) +,(556, 117, 5, '', '', 1.0, 1, 1, 85, 3, 1, 0, 30, 1) +,(557, 117, 28, '', '', 1.0, 1, 1, 86, 3, 1, 0, 30, 1) +,(558, 117, 30, '', '', 1.0, 1, 1, 87, 3, 1, 0, 30, 1) +,(559, 117, 6, '', '', 1.0, 1, 1, 88, 3, 1, 0, 30, 1) +,(560, 117, 31, '', '', 1.0, 1, 1, 89, 3, 1, 0, 30, 1) +,(561, 117, 4, '', '', 1.0, 1, 1, 90, 3, 1, 0, 30, 1) +,(562, 118, 1, '', '', 1.0, 1, 1, 91, 3, 1, 0, 30, 1) +,(563, 118, 5, '', '', 1.0, 1, 1, 92, 3, 1, 0, 30, 1) +,(564, 118, 28, '', '', 1.0, 1, 1, 93, 3, 1, 0, 30, 1) +,(565, 118, 30, '', '', 1.0, 1, 1, 94, 3, 1, 0, 30, 1) +,(566, 118, 6, '', '', 1.0, 1, 1, 95, 3, 1, 0, 30, 1) +,(567, 118, 31, '', '', 1.0, 1, 1, 96, 3, 1, 0, 30, 1) +,(568, 118, 4, '', '', 1.0, 1, 1, 97, 3, 1, 0, 30, 1) +,(569, 119, 1, '', '', 1.0, 1, 1, 98, 3, 1, 0, 30, 1) +,(570, 119, 5, '', '', 1.0, 1, 1, 99, 3, 1, 0, 30, 1) +,(571, 119, 28, '', '', 1.0, 1, 1, 100, 3, 1, 0, 30, 1) +,(572, 119, 30, '', '', 1.0, 1, 1, 101, 3, 1, 0, 30, 1) +,(573, 119, 6, '', '', 1.0, 1, 1, 102, 3, 1, 0, 30, 1) +,(574, 119, 31, '', '', 1.0, 1, 1, 103, 3, 1, 0, 30, 1) +,(575, 119, 4, '', '', 1.0, 1, 1, 104, 3, 1, 0, 30, 1) +,(576, 120, 1, '', '', 1.0, 1, 1, 105, 3, 1, 0, 30, 1) +,(577, 120, 5, '', '', 1.0, 1, 1, 106, 3, 1, 0, 30, 1) +,(578, 120, 28, '', '', 1.0, 1, 1, 107, 3, 1, 0, 30, 1) +,(579, 120, 30, '', '', 1.0, 1, 1, 108, 3, 1, 0, 30, 1) +,(580, 120, 6, '', '', 1.0, 1, 1, 109, 3, 1, 0, 30, 1) +,(581, 120, 31, '', '', 1.0, 1, 1, 110, 3, 1, 0, 30, 1) +,(582, 120, 4, '', '', 1.0, 1, 1, 111, 3, 1, 0, 30, 1) +,(583, 121, 1, '', '', 1.0, 1, 1, 112, 3, 1, 0, 30, 1) +,(584, 121, 5, '', '', 1.0, 1, 1, 113, 3, 1, 0, 30, 1) +,(585, 121, 28, '', '', 1.0, 1, 1, 114, 3, 1, 0, 30, 1) +,(586, 121, 30, '', '', 1.0, 1, 1, 115, 3, 1, 0, 30, 1) +,(587, 121, 6, '', '', 1.0, 1, 1, 116, 3, 1, 0, 30, 1) +,(588, 121, 31, '', '', 1.0, 1, 1, 117, 3, 1, 0, 30, 1) +,(589, 121, 4, '', '', 1.0, 1, 1, 118, 3, 1, 0, 30, 1) +,(590, 122, 1, '', '', 1.0, 1, 1, 119, 3, 1, 0, 30, 1) +,(591, 122, 5, '', '', 1.0, 1, 1, 120, 3, 1, 0, 30, 1) +,(592, 122, 28, '', '', 1.0, 1, 1, 121, 3, 1, 0, 30, 1) +,(593, 122, 30, '', '', 1.0, 1, 1, 122, 3, 1, 0, 30, 1) +,(594, 122, 6, '', '', 1.0, 1, 1, 123, 3, 1, 0, 30, 1) +,(595, 122, 31, '', '', 1.0, 1, 1, 124, 3, 1, 0, 30, 1) +,(596, 122, 4, '', '', 1.0, 1, 1, 125, 3, 1, 0, 30, 1) +,(597, 123, 1, '', '', 1.0, 1, 1, 126, 3, 1, 0, 30, 1) +,(598, 123, 5, '', '', 1.0, 1, 1, 127, 3, 1, 0, 30, 1) +,(599, 123, 28, '', '', 1.0, 1, 1, 128, 3, 1, 0, 30, 1) +,(600, 123, 30, '', '', 1.0, 1, 1, 129, 3, 1, 0, 30, 1) +,(601, 123, 6, '', '', 1.0, 1, 1, 130, 3, 1, 0, 30, 1) +,(602, 123, 31, '', '', 1.0, 1, 1, 131, 3, 1, 0, 30, 1) +,(603, 123, 4, '', '', 1.0, 1, 1, 132, 3, 1, 0, 30, 1) +,(604, 124, 1, '', '', 1.0, 1, 1, 133, 3, 1, 0, 30, 1) +,(605, 124, 5, '', '', 1.0, 1, 1, 134, 3, 1, 0, 30, 1) +,(606, 124, 28, '', '', 1.0, 1, 1, 135, 3, 1, 0, 30, 1) +,(607, 124, 30, '', '', 1.0, 1, 1, 136, 3, 1, 0, 30, 1) +,(608, 124, 6, '', '', 1.0, 1, 1, 137, 3, 1, 0, 30, 1) +,(609, 124, 31, '', '', 1.0, 1, 1, 138, 3, 1, 0, 30, 1) +,(610, 124, 4, '', '', 1.0, 1, 1, 139, 3, 1, 0, 30, 1) +,(611, 125, 1, '', '', 1.0, 1, 1, 140, 3, 1, 0, 30, 1) +,(612, 125, 5, '', '', 1.0, 1, 1, 141, 3, 1, 0, 30, 1) +,(613, 125, 28, '', '', 1.0, 1, 1, 142, 3, 1, 0, 30, 1) +,(614, 125, 30, '', '', 1.0, 1, 1, 143, 3, 1, 0, 30, 1) +,(615, 125, 6, '', '', 1.0, 1, 1, 144, 3, 1, 0, 30, 1) +,(616, 125, 31, '', '', 1.0, 1, 1, 145, 3, 1, 0, 30, 1) +,(617, 125, 4, '', '', 1.0, 1, 1, 146, 3, 1, 0, 30, 1) +,(618, 126, 1, '', '', 1.0, 1, 1, 147, 3, 1, 0, 30, 1) +,(619, 126, 5, '', '', 1.0, 1, 1, 148, 3, 1, 0, 30, 1) +,(620, 126, 28, '', '', 1.0, 1, 1, 149, 3, 1, 0, 30, 1) +,(621, 126, 30, '', '', 1.0, 1, 1, 150, 3, 1, 0, 30, 1) +,(622, 126, 6, '', '', 1.0, 1, 1, 151, 3, 1, 0, 30, 1) +,(623, 126, 31, '', '', 1.0, 1, 1, 152, 3, 1, 0, 30, 1) +,(624, 126, 4, '', '', 1.0, 1, 1, 153, 3, 1, 0, 30, 1) +,(625, 127, 1, '', '', 1.0, 1, 1, 154, 3, 1, 0, 30, 1) +,(626, 127, 5, '', '', 1.0, 1, 1, 155, 3, 1, 0, 30, 1) +,(627, 127, 28, '', '', 1.0, 1, 1, 156, 3, 1, 0, 30, 1) +,(628, 127, 30, '', '', 1.0, 1, 1, 157, 3, 1, 0, 30, 1) +,(629, 127, 6, '', '', 1.0, 1, 1, 158, 3, 1, 0, 30, 1) +,(630, 127, 31, '', '', 1.0, 1, 1, 159, 3, 1, 0, 30, 1) +,(631, 127, 4, '', '', 1.0, 1, 1, 160, 3, 1, 0, 30, 1) +,(632, 128, 1, '', '', 1.0, 1, 1, 161, 3, 1, 0, 30, 1) +,(633, 128, 5, '', '', 1.0, 1, 1, 162, 3, 1, 0, 30, 1) +,(634, 128, 28, '', '', 1.0, 1, 1, 163, 3, 1, 0, 30, 1) +,(635, 128, 30, '', '', 1.0, 1, 1, 164, 3, 1, 0, 30, 1) +,(636, 128, 6, '', '', 1.0, 1, 1, 165, 3, 1, 0, 30, 1) +,(637, 128, 31, '', '', 1.0, 1, 1, 166, 3, 1, 0, 30, 1) +,(638, 128, 4, '', '', 1.0, 1, 1, 167, 3, 1, 0, 30, 1) +,(639, 129, 1, '', '', 1.0, 1, 1, 168, 3, 1, 0, 30, 1) +,(640, 129, 5, '', '', 1.0, 1, 1, 169, 3, 1, 0, 30, 1) +,(641, 129, 28, '', '', 1.0, 1, 1, 170, 3, 1, 0, 30, 1) +,(642, 129, 30, '', '', 1.0, 1, 1, 171, 3, 1, 0, 30, 1) +,(643, 129, 6, '', '', 1.0, 1, 1, 172, 3, 1, 0, 30, 1) +,(644, 129, 31, '', '', 1.0, 1, 1, 173, 3, 1, 0, 30, 1) +,(645, 129, 4, '', '', 1.0, 1, 1, 174, 3, 1, 0, 30, 1) +,(646, 130, 1, '', '', 1.0, 1, 1, 175, 3, 1, 0, 30, 1) +,(647, 130, 5, '', '', 1.0, 1, 1, 176, 3, 1, 0, 30, 1) +,(648, 130, 28, '', '', 1.0, 1, 1, 177, 3, 1, 0, 30, 1) +,(649, 130, 30, '', '', 1.0, 1, 1, 178, 3, 1, 0, 30, 1) +,(650, 130, 6, '', '', 1.0, 1, 1, 179, 3, 1, 0, 30, 1) +,(651, 130, 31, '', '', 1.0, 1, 1, 180, 3, 1, 0, 30, 1) +,(652, 130, 4, '', '', 1.0, 1, 1, 181, 3, 1, 0, 30, 1) +,(653, 131, 1, '', '', 1.0, 1, 1, 182, 3, 1, 0, 30, 1) +,(654, 131, 5, '', '', 1.0, 1, 1, 183, 3, 1, 0, 30, 1) +,(655, 131, 28, '', '', 1.0, 1, 1, 184, 3, 1, 0, 30, 1) +,(656, 131, 30, '', '', 1.0, 1, 1, 185, 3, 1, 0, 30, 1) +,(657, 131, 6, '', '', 1.0, 1, 1, 186, 3, 1, 0, 30, 1) +,(658, 131, 31, '', '', 1.0, 1, 1, 187, 3, 1, 0, 30, 1) +,(659, 131, 4, '', '', 1.0, 1, 1, 188, 3, 1, 0, 30, 1) +,(660, 132, 1, '', '', 1.0, 1, 1, 189, 3, 1, 0, 30, 1) +,(661, 132, 5, '', '', 1.0, 1, 1, 190, 3, 1, 0, 30, 1) +,(662, 132, 28, '', '', 1.0, 1, 1, 191, 3, 1, 0, 30, 1) +,(663, 132, 30, '', '', 1.0, 1, 1, 192, 3, 1, 0, 30, 1) +,(664, 132, 6, '', '', 1.0, 1, 1, 193, 3, 1, 0, 30, 1) +,(665, 132, 31, '', '', 1.0, 1, 1, 194, 3, 1, 0, 30, 1) +,(666, 132, 4, '', '', 1.0, 1, 1, 195, 3, 1, 0, 30, 1) +,(667, 133, 1, '', '', 1.0, 1, 1, 196, 3, 1, 0, 30, 1) +,(668, 133, 5, '', '', 1.0, 1, 1, 197, 3, 1, 0, 30, 1) +,(669, 133, 28, '', '', 1.0, 1, 1, 198, 3, 1, 0, 30, 1) +,(670, 133, 30, '', '', 1.0, 1, 1, 199, 3, 1, 0, 30, 1) +,(671, 133, 6, '', '', 1.0, 1, 1, 200, 3, 1, 0, 30, 1) +,(672, 133, 31, '', '', 1.0, 1, 1, 201, 3, 1, 0, 30, 1) +,(673, 133, 4, '', '', 1.0, 1, 1, 202, 3, 1, 0, 30, 1) +,(674, 134, 1, '', '', 1.0, 1, 1, 203, 3, 1, 0, 30, 1) +,(675, 134, 5, '', '', 1.0, 1, 1, 204, 3, 1, 0, 30, 1) +,(676, 134, 28, '', '', 1.0, 1, 1, 205, 3, 1, 0, 30, 1) +,(677, 134, 30, '', '', 1.0, 1, 1, 206, 3, 1, 0, 30, 1) +,(678, 134, 6, '', '', 1.0, 1, 1, 207, 3, 1, 0, 30, 1) +,(679, 134, 31, '', '', 1.0, 1, 1, 208, 3, 1, 0, 30, 1) +,(680, 134, 4, '', '', 1.0, 1, 1, 209, 3, 1, 0, 30, 1) +,(681, 135, 1, '', '', 1.0, 1, 1, 210, 3, 1, 0, 30, 1) +,(682, 135, 5, '', '', 1.0, 1, 1, 211, 3, 1, 0, 30, 1) +,(683, 135, 28, '', '', 1.0, 1, 1, 212, 3, 1, 0, 30, 1) +,(684, 135, 30, '', '', 1.0, 1, 1, 213, 3, 1, 0, 30, 1) +,(685, 135, 6, '', '', 1.0, 1, 1, 214, 3, 1, 0, 30, 1) +,(686, 135, 31, '', '', 1.0, 1, 1, 215, 3, 1, 0, 30, 1) +,(687, 135, 4, '', '', 1.0, 1, 1, 216, 3, 1, 0, 30, 1) +,(688, 136, 1, '', '', 1.0, 1, 1, 217, 3, 1, 0, 30, 1) +,(689, 136, 5, '', '', 1.0, 1, 1, 218, 3, 1, 0, 30, 1) +,(690, 136, 28, '', '', 1.0, 1, 1, 219, 3, 1, 0, 30, 1) +,(691, 136, 30, '', '', 1.0, 1, 1, 220, 3, 1, 0, 30, 1) +,(692, 136, 6, '', '', 1.0, 1, 1, 221, 3, 1, 0, 30, 1) +,(693, 136, 31, '', '', 1.0, 1, 1, 222, 3, 1, 0, 30, 1) +,(694, 136, 4, '', '', 1.0, 1, 1, 223, 3, 1, 0, 30, 1) +,(695, 137, 1, '', '', 1.0, 1, 1, 224, 3, 1, 0, 30, 1) +,(696, 137, 5, '', '', 1.0, 1, 1, 225, 3, 1, 0, 30, 1) +,(697, 137, 28, '', '', 1.0, 1, 1, 226, 3, 1, 0, 30, 1) +,(698, 137, 30, '', '', 1.0, 1, 1, 227, 3, 1, 0, 30, 1) +,(699, 137, 6, '', '', 1.0, 1, 1, 228, 3, 1, 0, 30, 1) +,(700, 137, 31, '', '', 1.0, 1, 1, 229, 3, 1, 0, 30, 1) +,(701, 137, 4, '', '', 1.0, 1, 1, 230, 3, 1, 0, 30, 1) +,(702, 138, 1, '', '', 1.0, 1, 1, 231, 3, 1, 0, 30, 1) +,(703, 138, 5, '', '', 1.0, 1, 1, 232, 3, 1, 0, 30, 1) +,(704, 138, 28, '', '', 1.0, 1, 1, 233, 3, 1, 0, 30, 1) +,(705, 138, 30, '', '', 1.0, 1, 1, 234, 3, 1, 0, 30, 1) +,(706, 138, 6, '', '', 1.0, 1, 1, 235, 3, 1, 0, 30, 1) +,(707, 138, 31, '', '', 1.0, 1, 1, 236, 3, 1, 0, 30, 1) +,(708, 138, 4, '', '', 1.0, 1, 1, 237, 3, 1, 0, 30, 1) +,(709, 139, 1, '', '', 1.0, 1, 1, 238, 3, 1, 0, 30, 1) +,(710, 139, 5, '', '', 1.0, 1, 1, 239, 3, 1, 0, 30, 1) +,(711, 139, 28, '', '', 1.0, 1, 1, 240, 3, 1, 0, 30, 1) +,(712, 139, 30, '', '', 1.0, 1, 1, 241, 3, 1, 0, 30, 1) +,(713, 139, 6, '', '', 1.0, 1, 1, 242, 3, 1, 0, 30, 1) +,(714, 139, 31, '', '', 1.0, 1, 1, 243, 3, 1, 0, 30, 1) +,(715, 139, 4, '', '', 1.0, 1, 1, 244, 3, 1, 0, 30, 1); diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala index c37de082f..39e078a0e 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala @@ -33,6 +33,7 @@ abstract trait WettkampfResultMapper extends DisziplinResultMapper { WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, readProgramm(r.<<), r.<<, r.<<[BigDecimal], r.<<)) implicit val getProgrammRawResult = GetResult(r => + // id: Long, name: String, aggregate: Int, parentId: Long, ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode ProgrammRaw(r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<)) implicit val getPublishedScoreViewResult = GetResult(r => diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index 1b6ec025f..edf46f870 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -1,19 +1,20 @@ package ch.seidel.kutu.domain -import java.sql.Date -import java.time.LocalDate -import java.util.UUID -import ch.seidel.kutu.akka.{AthletMovedInWettkampf, AthletRemovedFromWettkampf, DurchgangChanged, PublishScores, ScoresPublished} +import ch.seidel.kutu.akka.{AthletMovedInWettkampf, AthletRemovedFromWettkampf, DurchgangChanged, ScoresPublished} import ch.seidel.kutu.http.WebSocketClient import ch.seidel.kutu.squad.RiegenBuilder import ch.seidel.kutu.squad.RiegenBuilder.{generateRiegen2Name, generateRiegenName} import org.slf4j.LoggerFactory + +import java.sql.Date +import java.util.UUID +import scala.util.matching.Regex //import slick.jdbc.SQLiteProfile.api._ -import slick.jdbc.PostgresProfile.api._//{DBIO, actionBasedSQLInterpolation, jdbcActionExtensionMethods} +import slick.jdbc.PostgresProfile.api._ -import scala.concurrent.{Await, Future} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration.Duration +import scala.concurrent.{Await, Future} trait WettkampfService extends DBService with WettkampfResultMapper @@ -252,18 +253,22 @@ trait WettkampfService extends DBService } def readProgramm(id: Long): ProgrammView = { - val allPgmsQuery = sql"""select * from programm""".as[ProgrammRaw] - .map{l => l.map(p => p.id -> p).toMap} - .map{map => map.foldLeft(List[ProgrammView]()) { (acc, pgmEntry) => - val (id, pgm) = pgmEntry - if (pgm.parentId > 0) { - acc :+ pgm.withParent(map(pgm.parentId).toView) + val allPgmsQuery = sql"""select id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode from programm""".as[ProgrammRaw] + .map { l => l.map(p => p.id -> p).toMap } + .map { map => + def resolve(id: Long): ProgrammView = { + val item = map(id) + val parent = item.parentId + if (parent > 0) { + item.withParent(resolve(parent)) } else { - acc :+ pgm.toView + item.toView } - }.find(view => view.id == id) } - Await.result(database.run(allPgmsQuery.withPinnedSession), Duration.Inf).getOrElse(ProgrammView(id, "", 0, None, 0, 0, 0, UUID.randomUUID().toString, 1)) + + resolve(id) + } + Await.result(database.run(allPgmsQuery.withPinnedSession), Duration.Inf) } def readProgramm(id: Long, cache: scala.collection.mutable.Map[Long, ProgrammView]): ProgrammView = { @@ -777,7 +782,7 @@ trait WettkampfService extends DBService } } - def insertWettkampfProgram(rootprogram: String, disziplinlist: List[String], programlist: List[String]): List[WettkampfdisziplinView] = { + def insertWettkampfProgram(rootprogram: String, riegenmode: Int, disziplinlist: List[String], programlist: List[String]): List[WettkampfdisziplinView] = { val programme = Await.result(database.run{(sql""" select * from programm """.as[ProgrammRaw]).withPinnedSession}, Duration.Inf) @@ -793,9 +798,8 @@ trait WettkampfService extends DBService select * from disziplin """.as[Disziplin]).withPinnedSession}, Duration.Inf) val nextWKDiszId: Long = wkdisciplines.map(_.id).max + 1L - val nextDiszId: Long = wkdisciplines.map(_.disziplinId).max + 1L val pgmIdRoot: Long = wkdisciplines.map(_.programmId).max + 1L - val nextPgmId = pgmIdRoot + 1L + val nextPgmId: Long = pgmIdRoot + 1L val diszInserts = for { w <- disziplinlist @@ -814,23 +818,45 @@ trait WettkampfService extends DBService DBIO.sequence(diszInserts).transactionally }, Duration.Inf).flatten ++ disziplinlist.flatMap(w => disciplines.filter(d => d.name.equalsIgnoreCase(w))) + val nameMatcher: Regex = "(?iumU)^([\\w\\h\\s\\d]+[^\\h\\s\\(])".r + val alterVonMatcher: Regex = "(?iumU)\\(.*von=([\\d]{1,2}).*\\)$".r + val alterBisMatcher: Regex = "(?iumU)\\(.*bis=([\\d]{1,2}).*\\)$".r + val rootPgmInsert = sqlu""" INSERT INTO programm - (id, parent_id, name, aggregate, ord) + (id, parent_id, name, aggregate, ord, riegenmode) VALUES - ($pgmIdRoot, 0, $rootprogram, 0, $pgmIdRoot) + ($pgmIdRoot, 0, $rootprogram, 0, $pgmIdRoot, $riegenmode) """ >> sql""" SELECT * from programm where id=$pgmIdRoot """.as[ProgrammRaw] + val aggregate = if (programlist.exists(_.contains("/"))) 1 else 0 + val items = programlist.flatMap(path => path.split("/")).distinct.zipWithIndex + val parentItemsMap = items.flatMap{item => + val pgm=item._1 + programlist + .find(path => path.contains(s"/$pgm")) + .flatMap(path => path.split("/") + .reverse + .dropWhile(item => !item.equals(pgm)) + .tail.headOption) + .flatMap(parentItem => items.find(it => it._1.equals(parentItem))) + .map(parent => pgm -> (pgmIdRoot + 1L + parent._2).longValue()) + }.toMap val pgmInserts = rootPgmInsert +: (for { - w <- programlist + w <- items } yield { - val pgmId = nextPgmId + programlist.indexOf(w) + val (pgm, idx) = w + val pgmId: Long = nextPgmId + idx + val parentId: Long = parentItemsMap.getOrElse(pgm, pgmIdRoot) + val name=nameMatcher.findFirstMatchIn(pgm).map(md => md.group(1)).mkString + val von=alterVonMatcher.findFirstMatchIn(pgm).map(md => md.group(1).intValue).getOrElse(0) + val bis=alterBisMatcher.findFirstMatchIn(pgm).map(md => md.group(1).intValue).getOrElse(100) sqlu""" INSERT INTO programm - (id, parent_id, name, aggregate, ord) + (id, parent_id, name, aggregate, ord, riegenmode, alter_von, alter_bis) VALUES - ($pgmId, $pgmIdRoot, $w, 0, $pgmId) + ($pgmId, $parentId, $name, $aggregate, $pgmId, $riegenmode, $von, $bis) """ >> sql""" SELECT * from programm where id=$pgmId @@ -844,7 +870,7 @@ trait WettkampfService extends DBService val cache = scala.collection.mutable.Map[Long, ProgrammView]() val wkDiszsInserts = (for { pgm <- insertedPgmList - if pgm.parentId > 0 + if pgm.parentId > 0 && !insertedPgmList.exists(p => p.parentId == pgm.id) disz <- insertedDiszList } yield { (pgm, disz) diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index c1b384df9..9dfa33a52 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -197,6 +197,8 @@ package object domain { object RiegeRaw { val KIND_STANDARD = 0; val KIND_EMPTY_RIEGE = 1; + val RIEGENMODE_BY_Program = 1; + val RIEGENMODE_BY_JG = 2; } case class RiegeRaw(wettkampfId: Long, r: String, durchgang: Option[String], start: Option[Long], kind: Int) extends DataObject { @@ -426,6 +428,24 @@ package object domain { } } + /** + * + * Krits +-------------------------------------------+--------------------------------------------------------- + * aggregate ->|0 |1 + * +-------------------------------------------+--------------------------------------------------------- + * riegenmode->|1 |2 |1 |2 + * Acts +===========================================+========================================================= + * Einteilung->| Pgm,Sex,Verein | Pgm,Sex,Jg,Verein | Pgm,Sex,Verein | Pgm,Sex,Jg,Verein + * +--------------------+----------------------+----------------------+---------------------------------- + * Teilnahme | 1/WK | <=PgmCnt(Jg)/WK | <=PgmCnt(Jg)/WK | 1/Pgm + * +-------------------------------------------+--------------------------------------------------------- + * Registration| 1/WK | 1/WK, Pgm/(Jg) | 1/WK aut. Tn 1/Pgm | 1/WK aut. Tn 1/Pgm + * +-------------------------------------------+--------------------------------------------------------- + * Beispiele | GeTu/KuTu/KuTuRi | Turn10 (BS/OS) | TG Allgäu (Pfl./Kür) | ATT (Kraft/Bewg) + * +-------------------------------------------+--------------------------------------------------------- + * Rangliste | Sex/Programm | Sex/Programm/Jg | Sex/Programm | Sex/Programm/Jg + * +-------------------------------------------+--------------------------------------------------------- + */ case class ProgrammRaw(id: Long, name: String, aggregate: Int, parentId: Long, ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode: Int) extends Programm case class ProgrammView(id: Long, name: String, aggregate: Int, parent: Option[ProgrammView], ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode: Int) extends Programm { @@ -466,7 +486,7 @@ package object domain { case Some(p) => p.toPath + " / " + name } - override def toString = toPath + override def toString = s"$toPath (von=$alterVon, bis=$alterBis)" } // object Wettkampf { diff --git a/src/main/scala/ch/seidel/kutu/http/RegistrationRoutes.scala b/src/main/scala/ch/seidel/kutu/http/RegistrationRoutes.scala index 1b74ce0c0..c5abab1d7 100644 --- a/src/main/scala/ch/seidel/kutu/http/RegistrationRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/RegistrationRoutes.scala @@ -180,7 +180,7 @@ trait RegistrationRoutes extends SprayJsonSupport with JwtSupport with JsonSuppo get { complete { val wi = WettkampfInfo(wettkampf.toView(readProgramm(wettkampf.programmId)), this) - wi.leafprograms.map(p => ProgrammRaw(p.id, p.name, 0, 0, p.ord, p.alterVon, p.alterBis, p.uuid, p.riegenmode)) + wi.leafprograms.map(p => ProgrammRaw(p.id, p.name, p.aggregate, p.parent.map(_.id).getOrElse(0), p.ord, p.alterVon, p.alterBis, p.uuid, p.riegenmode)) } } } ~ pathLabeled("refreshsyncs", "refreshsyncs") { @@ -379,9 +379,10 @@ trait RegistrationRoutes extends SprayJsonSupport with JwtSupport with JsonSuppo List[AthletRegistration]() } else { val existingAthletRegs = selectAthletRegistrations(registrationId) + val pgm = readWettkampfLeafs(wettkampf.programmId).head selectAthletesView(Verein(reg.vereinId.getOrElse(0), reg.vereinname, Some(reg.verband))) .filter(_.activ) - .filter(r => !existingAthletRegs.exists { er => + .filter(r => (pgm.aggregate == 1 && pgm.riegenmode == 1) || !existingAthletRegs.exists { er => er.athletId.contains(r.id) || (er.name == r.name && er.vorname == r.vorname) }) .map { diff --git a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala index 47688ae30..967bdb57e 100644 --- a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala @@ -42,9 +42,8 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli wkdisziplinlist.exists { wd => d.id == wd.disziplinId && wd.programmId == pgmHead.id } } val wdzlf = wkdisziplinlist.filter{d => d.programmId == pgmHead.id } - - wertungen.head._2.head.wettkampfdisziplin.notenSpez match { - case at: Athletiktest => + wertungen.head._2.head.wettkampfdisziplin.programm.riegenmode match { + case RiegeRaw.RIEGENMODE_BY_JG => val atGrouper = ATTGrouper.atGrouper val atgr = atGrouper.take(atGrouper.size-1) splitSex match { @@ -56,9 +55,9 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli val m = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("M")) val w = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("W")) groupWertungen(programm + "-Tu", m, atgr, atGrouper, dzlf, maxRiegenSize, splitSex, true) ++ - groupWertungen(programm + "-Ti", w, atgr, atGrouper, dzlf, maxRiegenSize, splitSex, true) + groupWertungen(programm + "-Ti", w, atgr, atGrouper, dzlf, maxRiegenSize, splitSex, true) } - case sw: StandardWettkampf => + case _ => // Barren wegschneiden (ist kein Startgerät) val startgeraete = wdzlf.filter(d => (onDisziplinList.isEmpty && d.startgeraet == 1) || (onDisziplinList.nonEmpty && onDisziplinList.get.map(_.id).contains(d.disziplinId))) val dzlff = dzlf.filter(d => startgeraete.exists(wd => wd.disziplinId == d.id)) @@ -71,7 +70,7 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli val m = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("M")) val w = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("W")) groupWertungen(programm + "-Tu", m, wkFilteredGrouper, wkGrouper, dzlff, maxRiegenSize, splitSex, false) ++ - groupWertungen(programm + "-Ti", w, wkFilteredGrouper, wkGrouper, dzlff, maxRiegenSize, splitSex, false) + groupWertungen(programm + "-Ti", w, wkFilteredGrouper, wkGrouper, dzlff, maxRiegenSize, splitSex, false) } } } diff --git a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala index 4cc294be6..8e6fd388c 100644 --- a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala @@ -27,10 +27,10 @@ import ch.seidel.kutu.domain._ * Somit müsste jede Rotation in sich zunächst stimmen */ trait RiegenBuilder { - + def suggestRiegen(rotationstation: Seq[Int], wertungen: Seq[WertungView]): Seq[(String, Seq[Wertung])] = { val riegencount = rotationstation.sum - if(wertungen.head.wettkampfdisziplin.notenSpez.isInstanceOf[Athletiktest]) { + if (wertungen.head.wettkampfdisziplin.programm.riegenmode == 2) { ATTGrouper.suggestRiegen(riegencount, wertungen) } else { KuTuGeTuGrouper.suggestRiegen(riegencount, wertungen) @@ -41,8 +41,8 @@ trait RiegenBuilder { object RiegenBuilder { def generateRiegenName(w: WertungView) = { - w.wettkampfdisziplin.notenSpez match { - case a: Athletiktest => ATTGrouper.generateRiegenName(w) + w.wettkampfdisziplin.programm.riegenmode match { + case RiegeRaw.RIEGENMODE_BY_JG => ATTGrouper.generateRiegenName(w) case _ => KuTuGeTuGrouper.generateRiegenName(w) } } diff --git a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala index 782c3c5fb..e25a28095 100644 --- a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala @@ -2,9 +2,11 @@ package ch.seidel.kutu.domain import java.time.LocalDate import java.util.UUID - import ch.seidel.kutu.base.KuTuBaseSpec +import scala.annotation.tailrec +import scala.util.matching.Regex + class WettkampfSpec extends KuTuBaseSpec { "wettkampf" should { "create with disziplin-plan-times" in { @@ -50,8 +52,128 @@ class WettkampfSpec extends KuTuBaseSpec { } "create WK Modus with programs and disciplines" in { + /* + WettkampfdisziplinView(154,Testprogramm / AK1(von=5 bis=10) (von=5, bis=10),Disziplin(1,Boden),,None,StandardWettkampf(1.0),1,1,0,3,1,0,30,1) + WettkampfdisziplinView(155,Testprogramm / AK1(von=5 bis=10) (von=5, bis=10),Disziplin(4,Sprung),,None,StandardWettkampf(1.0),1,1,1,3,1,0,30,1) + WettkampfdisziplinView(156,Testprogramm / AK2(von=11 bis=20) (von=11, bis=20),Disziplin(1,Boden),,None,StandardWettkampf(1.0),1,1,2,3,1,0,30,1) + WettkampfdisziplinView(157,Testprogramm / AK2(von=11 bis=20) (von=11, bis=20),Disziplin(4,Sprung),,None,StandardWettkampf(1.0),1,1,3,3,1,0,30,1) + WettkampfdisziplinView(158,Testprogramm / AK3(von=21 bis=50) (von=21, bis=50),Disziplin(1,Boden),,None,StandardWettkampf(1.0),1,1,4,3,1,0,30,1) + WettkampfdisziplinView(159,Testprogramm / AK3(von=21 bis=50) (von=21, bis=50),Disziplin(4,Sprung),,None,StandardWettkampf(1.0),1,1,5,3,1,0,30,1) + WettkampfdisziplinView(160,Testprogramm2 / LK1 (von=0, bis=100),Disziplin(30,Ringe),,None,StandardWettkampf(1.0),1,1,0,3,1,0,30,1) + WettkampfdisziplinView(161,Testprogramm2 / LK1 (von=0, bis=100),Disziplin(5,Barren),,None,StandardWettkampf(1.0),1,1,1,3,1,0,30,1) + WettkampfdisziplinView(162,Testprogramm2 / LK2 (von=0, bis=100),Disziplin(30,Ringe),,None,StandardWettkampf(1.0),1,1,2,3,1,0,30,1) + WettkampfdisziplinView(163,Testprogramm2 / LK2 (von=0, bis=100),Disziplin(5,Barren),,None,StandardWettkampf(1.0),1,1,3,3,1,0,30,1) + WettkampfdisziplinView(164,Testprogramm2 / LK3 (von=0, bis=100),Disziplin(30,Ringe),,None,StandardWettkampf(1.0),1,1,4,3,1,0,30,1) + WettkampfdisziplinView(165,Testprogramm2 / LK3 (von=0, bis=100),Disziplin(5,Barren),,None,StandardWettkampf(1.0),1,1,5,3,1,0,30,1) + */ + val tp1 = insertWettkampfProgram("Testprogramm1", 2, + List("Boden", "Sprung"), + List("AK1(von=5 bis=10)", "AK2(von=11 bis=20)", "AK3(von=21 bis=50)") + ) + println(tp1.mkString("\n")) + assert(tp1.size == 6) + assert(tp1(2).programm.riegenmode == 2) + assert(tp1(2).programm.parent.get.riegenmode == 2) + assert(tp1(2).programm.name == "AK2") + assert(tp1(2).programm.alterVon == 11) + assert(tp1(2).programm.alterBis == 20) - println(insertWettkampfProgram("Testprogramm", List("Boden", "Sprung"), List("LK1", "LK2", "LK3")).mkString("\n")) + val tp2 = insertWettkampfProgram("Testprogramm2", 1, + List("Barren", "Ringe"), + List("LK1", "LK2", "LK3") + ) + println(tp2.mkString("\n")) + assert(tp2.size == 6) + assert(tp2(1).programm.riegenmode == 1) + assert(tp2(1).programm.parent.get.riegenmode == 1) + assert(tp2(1).programm.name == "LK1") + assert(tp2(1).programm.alterVon == 0) + assert(tp2(1).programm.alterBis == 100) } + "create TG Allgäu" in { + val tga = insertWettkampfProgram(s"TG Allgäu-Test", 1, + List("Boden", "Barren", "Sprung", "Reck"), + List( + "Kür/WK I Kür" + , "Kür/WK II LK1" + , "Kür/WK III LK1(von=16 bis=17)" + , "Kür/WK IV LK2(von=14 bis=15)" + , "Pflicht/WK V Jug(von=14 bis=18)" + , "Pflicht/WK VI Schüler A(von=12 bis=13)" + , "Pflicht/WK VII Schüler B(von=10 bis=11)" + , "Pflicht/WK VIII Schüler C(von=8 bis=10)" + , "Pflicht/WK IX Schüler D(von=0 bis=7)" + ) + ) + printNewWettkampfModeInsertStatements(tga) +// } +// "create Turn10" in { + val turn10 = insertWettkampfProgram(s"Turn10-Test", 2, + List("Boden", "Barren", "Balken", "Minitramp", "Reck", "Pferd", "Sprung"), + List( + "AK6 BS(von=0 bis=6)" + , "AK7 BS(von=7 bis=7)" + , "AK8 BS(von=8 bis=8)" + , "AK9 BS(von=9 bis=9)" + , "AK10 BS(von=10 bis=10)" + , "AK11 BS(von=11 bis=11)" + , "AK12 BS(von=12 bis=12)" + , "AK13 BS(von=13 bis=13)" + , "AK13 OS(von=13 bis=13)" + , "AK14 BS(von=14 bis=14)" + , "AK14 OS(von=14 bis=14)" + , "AK15 BS(von=15 bis=15)" + , "AK15 OS(von=15 bis=15)" + , "AK16 BS(von=16 bis=16)" + , "AK16 OS(von=16 bis=16)" + , "AK17 BS(von=17 bis=17)" + , "AK17 OS(von=17 bis=17)" + , "AK18 BS(von=18 bis=23)" + , "AK18 OS(von=18 bis=23)" + , "AK24 BS(von=24 bis=29)" + , "AK24 OS(von=24 bis=29)" + , "AK30 BS(von=30 bis=34)" + , "AK30 OS(von=30 bis=34)" + , "AK35 BS(von=35 bis=39)" + , "AK35 OS(von=35 bis=39)" + , "AK40 BS(von=40 bis=44)" + , "AK40 OS(von=40 bis=44)" + , "AK45 BS(von=45 bis=49)" + , "AK45 OS(von=45 bis=49)" + , "AK50 BS(von=50 bis=54)" + , "AK50 OS(von=50 bis=54)" + , "AK55 BS(von=55 bis=59)" + , "AK55 OS(von=55 bis=59)" + , "AK60 BS(von=60 bis=64)" + , "AK60 OS(von=60 bis=64)" + ) + ) + printNewWettkampfModeInsertStatements(turn10) + } + + } + + private def printNewWettkampfModeInsertStatements(tga: List[WettkampfdisziplinView]) = { + val inserts = tga + .map(wdp => wdp.disziplin) + .distinct + .map(d => s"insert into disziplin (id, name) values (${d.id}, '${d.name}') on conflict (id) do nothing;") ::: + ("insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values " +: tga + .flatMap{wdp => + def flatten(pgm: ProgrammView): List[ProgrammView] = { + if (pgm.parent.isEmpty) { + List(pgm) + } else { + pgm +: flatten(pgm.parent.get) + } + } + flatten(wdp.programm) + } + .distinct.sortBy(_.id) + .map(p => s"(${p.id}, '${p.name}', ${p.aggregate}, ${p.parent.map(_.id).getOrElse(0)}, ${p.ord}, ${p.alterVon}, ${p.alterBis}, '${p.uuid}', ${p.riegenmode})").mkString("", "\n,", ";").split("\n").toList) ::: + ("insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values " +: tga + .map(wdp => s"(${wdp.id}, ${wdp.programm.id}, ${wdp.disziplin.id}, '${wdp.kurzbeschreibung}', ${wdp.detailbeschreibung.map(b => s"'$b'").getOrElse("''")}, ${wdp.notenSpez.calcEndnote(0.000d, 1.000d, wdp)}, ${wdp.masculin}, ${wdp.feminim}, ${wdp.ord}, ${wdp.scale}, ${wdp.dnote}, ${wdp.min}, ${wdp.max}, ${wdp.startgeraet})").mkString("", "\n,", ";").split("\n").toList) + + println(inserts.mkString("\n")) } } \ No newline at end of file From 33d93117f7fc75ad3d68552651139ab099a69da9 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Mon, 13 Mar 2023 00:10:31 +0000 Subject: [PATCH 05/99] update with generated Client from Github Actions CI for build with [skip ci] --- .../app/{170.57d97b14358d2f14.js => 170.888b46156ab59294.js} | 2 +- src/main/resources/app/5231.a99f3701004c95fb.js | 1 + src/main/resources/app/5231.b2b8632943ae5658.js | 1 - src/main/resources/app/index.html | 2 +- ...{runtime.9a1e15f2962837d6.js => runtime.b117fbf32d452b5b.js} | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) rename src/main/resources/app/{170.57d97b14358d2f14.js => 170.888b46156ab59294.js} (57%) create mode 100644 src/main/resources/app/5231.a99f3701004c95fb.js delete mode 100644 src/main/resources/app/5231.b2b8632943ae5658.js rename src/main/resources/app/{runtime.9a1e15f2962837d6.js => runtime.b117fbf32d452b5b.js} (54%) diff --git a/src/main/resources/app/170.57d97b14358d2f14.js b/src/main/resources/app/170.888b46156ab59294.js similarity index 57% rename from src/main/resources/app/170.57d97b14358d2f14.js rename to src/main/resources/app/170.888b46156ab59294.js index ff3a3c765..729efd8ca 100644 --- a/src/main/resources/app/170.57d97b14358d2f14.js +++ b/src/main/resources/app/170.888b46156ab59294.js @@ -1 +1 @@ -"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[170],{170:($,h,a)=>{a.r(h),a.d(h,{RegAthletlistPageModule:()=>N});var g=a(6895),d=a(433),m=a(5472),o=a(502),f=a(1135),A=a(7579),b=a(9646),p=a(5698),_=a(9300),v=a(4004),x=a(8372),R=a(1884),I=a(8505),C=a(3900),Z=a(3099),t=a(8274),T=a(600);let y=(()=>{class n{constructor(){this.selected=new t.vpe}statusBadgeColor(){return"in sync"===this.status?"success":"warning"}statusComment(){return"in sync"===this.status?"":this.status.substring(this.status.indexOf("(")+1,this.status.length-1)}statusBadgeText(){return"in sync"===this.status?"\u2714 "+this.status:"\u2757 "+this.status.substring(0,this.status.indexOf("(")-1)}ngOnInit(){}getProgrammText(e){const i=this.programmlist.find(r=>r.id===e);return i?i.name:"..."}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=t.Xpm({type:n,selectors:[["app-reg-athlet-item"]],inputs:{athletregistration:"athletregistration",status:"status",programmlist:"programmlist"},outputs:{selected:"selected"},decls:14,vars:9,consts:[[3,"click"],["slot","start"],["src","assets/imgs/athlete.png"],["slot","end",3,"color"]],template:function(e,i){1&e&&(t.TgZ(0,"ion-item",0),t.NdJ("click",function(){return i.selected?i.selected.emit(i.athletregistration):{}}),t.TgZ(1,"ion-avatar",1),t._UZ(2,"img",2),t.qZA(),t.TgZ(3,"ion-label"),t._uU(4),t._UZ(5,"br"),t.TgZ(6,"small"),t._uU(7),t.ALo(8,"date"),t.qZA()(),t.TgZ(9,"ion-badge",3),t._uU(10),t._UZ(11,"br"),t.TgZ(12,"small"),t._uU(13),t.qZA()()()),2&e&&(t.xp6(4),t.lnq("",i.athletregistration.name,", ",i.athletregistration.vorname," (",i.athletregistration.geschlecht,")"),t.xp6(3),t.hij("(",t.lcZ(8,7,i.athletregistration.gebdat),")"),t.xp6(2),t.Q6J("color",i.statusBadgeColor()),t.xp6(1),t.Oqu(i.statusBadgeText()),t.xp6(3),t.Oqu(i.statusComment()))},dependencies:[o.BJ,o.yp,o.Ie,o.Q$,g.uU]}),n})();function k(n,l){if(1&n&&(t.TgZ(0,"ion-select-option",10),t._uU(1),t.ALo(2,"date"),t.qZA()),2&n){const e=l.$implicit;t.Q6J("value",e.uuid),t.xp6(1),t.hij(" ",e.titel+" "+t.xi3(2,2,e.datum,"dd-MM-yy"),"")}}function P(n,l){if(1&n){const e=t.EpF();t.TgZ(0,"ion-select",8),t.NdJ("ngModelChange",function(r){t.CHM(e);const s=t.oxw(2);return t.KtG(s.competition=r)}),t.YNc(1,k,3,5,"ion-select-option",9),t.qZA()}if(2&n){const e=t.oxw(2);t.Q6J("ngModel",e.competition),t.xp6(1),t.Q6J("ngForOf",e.getCompetitions())}}function S(n,l){if(1&n&&(t.TgZ(0,"ion-col")(1,"ion-item")(2,"ion-label"),t._uU(3,"Wettkampf"),t.qZA(),t.YNc(4,P,2,2,"ion-select",7),t.qZA()()),2&n){const e=t.oxw();t.xp6(4),t.Q6J("ngIf",e.getCompetitions().length>0)}}function M(n,l){if(1&n&&(t.TgZ(0,"ion-note",11),t._uU(1),t.qZA()),2&n){const e=t.oxw();t.xp6(1),t.hij(" ",e.competitionName()," ")}}function w(n,l){1&n&&(t.TgZ(0,"ion-item")(1,"ion-label"),t._uU(2,"loading ..."),t.qZA(),t._UZ(3,"ion-spinner"),t.qZA())}function U(n,l){if(1&n){const e=t.EpF();t.TgZ(0,"ion-item-option",19),t.NdJ("click",function(){t.CHM(e);const r=t.oxw().$implicit,s=t.MAs(1),c=t.oxw(3);return t.KtG(c.delete(r,s))}),t._UZ(1,"ion-icon",17),t._uU(2," L\xf6schen "),t.qZA()}}function L(n,l){if(1&n){const e=t.EpF();t.TgZ(0,"ion-item-sliding",null,13)(2,"app-reg-athlet-item",14),t.NdJ("click",function(){const s=t.CHM(e).$implicit,c=t.MAs(1),u=t.oxw(3);return t.KtG(u.itemTapped(s,c))}),t.qZA(),t.TgZ(3,"ion-item-options",15)(4,"ion-item-option",16),t.NdJ("click",function(){const s=t.CHM(e).$implicit,c=t.MAs(1),u=t.oxw(3);return t.KtG(u.edit(s,c))}),t._UZ(5,"ion-icon",17),t._uU(6),t.qZA(),t.YNc(7,U,3,0,"ion-item-option",18),t.qZA()()}if(2&n){const e=l.$implicit,i=t.oxw(3);t.xp6(2),t.Q6J("athletregistration",e)("status",i.getStatus(e))("programmlist",i.wkPgms),t.xp6(4),t.hij(" ",i.isLoggedInAsClub()?"Bearbeiten":i.isLoggedIn()?"Best\xe4tigen":"Anzeigen"," "),t.xp6(1),t.Q6J("ngIf",i.isLoggedInAsClub())}}function Q(n,l){if(1&n&&(t.TgZ(0,"div")(1,"ion-item-divider"),t._uU(2),t.qZA(),t.YNc(3,L,8,5,"ion-item-sliding",12),t.qZA()),2&n){const e=l.$implicit,i=t.oxw(2);t.xp6(2),t.Oqu(e.name),t.xp6(1),t.Q6J("ngForOf",i.filteredStartList(e.id))}}function J(n,l){if(1&n&&(t.TgZ(0,"ion-content")(1,"ion-list"),t.YNc(2,w,4,0,"ion-item",3),t.ALo(3,"async"),t.YNc(4,Q,4,2,"div",12),t.qZA()()),2&n){const e=t.oxw();t.xp6(2),t.Q6J("ngIf",t.lcZ(3,2,e.busy)||!(e.competition&&e.currentRegistration&&e.filteredPrograms)),t.xp6(2),t.Q6J("ngForOf",e.filteredPrograms)}}function O(n,l){if(1&n){const e=t.EpF();t.TgZ(0,"ion-button",20),t.NdJ("click",function(){t.CHM(e);const r=t.oxw();return t.KtG(r.createRegistration())}),t._UZ(1,"ion-icon",21),t._uU(2," Neue Anmeldung... "),t.qZA()}}const F=[{path:"",component:(()=>{class n{constructor(e,i,r,s){this.navCtrl=e,this.route=i,this.backendService=r,this.alertCtrl=s,this.busy=new f.X(!1),this.tMyQueryStream=new A.x,this.sFilterTask=void 0,this.sSyncActions=[],this.backendService.competitions||this.backendService.getCompetitions()}ngOnInit(){this.busy.next(!0);const e=this.route.snapshot.paramMap.get("wkId");this.currentRegId=parseInt(this.route.snapshot.paramMap.get("regId")),e?this.competition=e:this.backendService.competition&&(this.competition=this.backendService.competition)}ionViewWillEnter(){this.refreshList()}getSyncActions(){this.backendService.loadRegistrationSyncActions().pipe((0,p.q)(1)).subscribe(e=>{this.sSyncActions=e})}getStatus(e){if(this.sSyncActions){const i=this.sSyncActions.find(r=>r.verein.id===e.vereinregistrationId&&r.caption.indexOf(e.name)>-1&&r.caption.indexOf(e.vorname)>-1);return i?"pending ("+i.caption.substring(0,(i.caption+":").indexOf(":"))+")":"in sync"}return"n/a"}refreshList(){this.busy.next(!0),this.currentRegistration=void 0,this.getSyncActions(),this.backendService.getClubRegistrations(this.competition).pipe((0,_.h)(e=>!!e.find(i=>i.id===this.currentRegId)),(0,p.q)(1)).subscribe(e=>{this.currentRegistration=e.find(i=>i.id===this.currentRegId),console.log("ask athletes-list for registration"),this.backendService.loadAthletRegistrations(this.competition,this.currentRegId).subscribe(i=>{this.busy.next(!1),this.athletregistrations=i,this.tMyQueryStream.pipe((0,_.h)(s=>!!s&&!!s.target),(0,v.U)(s=>s.target.value||"*"),(0,x.b)(300),(0,R.x)(),(0,I.b)(s=>this.busy.next(!0)),(0,C.w)(this.runQuery(i)),(0,Z.B)()).subscribe(s=>{this.sFilteredRegistrationList=s,this.busy.next(!1)})})})}set competition(e){(!this.currentRegistration||e!==this.backendService.competition)&&this.backendService.loadProgramsForCompetition(this.competition).subscribe(i=>{this.wkPgms=i})}get competition(){return this.backendService.competition||""}getCompetitions(){return this.backendService.competitions||[]}competitionName(){return this.backendService.competitionName}runQuery(e){return i=>{const r=i.trim(),s=new Map;return e&&e.forEach(c=>{if(this.filter(r)(c)){const B=s.get(c.programId)||[];s.set(c.programId,[...B,c].sort((Y,q)=>Y.name.localeCompare(q.name)))}}),(0,b.of)(s)}}set athletregistrations(e){this.sAthletRegistrationList=e,this.runQuery(e)("*").subscribe(i=>this.sFilteredRegistrationList=i),this.reloadList(this.sMyQuery||"*")}get athletregistrations(){return this.sAthletRegistrationList}get filteredPrograms(){return[...this.wkPgms.filter(e=>this.sFilteredRegistrationList?.has(e.id))]}mapProgram(e){return this.wkPgms.filter(i=>i.id==e)[0]}filteredStartList(e){return this.sFilteredRegistrationList?.get(e)||this.sAthletRegistrationList||[]}reloadList(e){this.tMyQueryStream.next(e)}itemTapped(e,i){i.getOpenAmount().then(r=>{r>0?i.close():i.open("end")})}isLoggedInAsClub(){return this.backendService.loggedIn&&this.backendService.authenticatedClubId===this.currentRegId+""}isLoggedInAsAdmin(){return this.backendService.loggedIn&&!!this.backendService.authenticatedClubId}isLoggedIn(){return this.backendService.loggedIn}filter(e){const i=e.toUpperCase().split(" ");return r=>"*"===e.trim()||i.filter(s=>{if(r.name.toUpperCase().indexOf(s)>-1||r.vorname.toUpperCase().indexOf(s)>-1||this.wkPgms.find(c=>r.programId===c.id&&c.name===s)||r.gebdat.indexOf(s)>-1||3==s.length&&r.geschlecht.indexOf(s.substring(1,2))>-1)return!0}).length===i.length}createRegistration(){this.navCtrl.navigateForward(`reg-athletlist/${this.backendService.competition}/${this.currentRegId}/0`)}edit(e,i){this.navCtrl.navigateForward(`reg-athletlist/${this.backendService.competition}/${this.currentRegId}/${e.id}`),i.close()}delete(e,i){i.close(),this.alertCtrl.create({header:"Achtung",subHeader:"L\xf6schen der Athlet-Anmeldung am Wettkampf",message:"Hiermit wird die Anmeldung von "+e.name+", "+e.vorname+" am Wettkampf gel\xf6scht.",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"OKAY",handler:()=>{this.backendService.deleteAthletRegistration(this.backendService.competition,this.currentRegId,e).subscribe(()=>{this.refreshList()})}}]}).then(s=>s.present())}}return n.\u0275fac=function(e){return new(e||n)(t.Y36(o.SH),t.Y36(m.gz),t.Y36(T.v),t.Y36(o.Br))},n.\u0275cmp=t.Xpm({type:n,selectors:[["app-reg-athletlist"]],decls:18,vars:5,consts:[["slot","start"],["defaultHref","/"],["no-padding",""],[4,"ngIf"],["slot","end",4,"ngIf"],["placeholder","Search","showCancelButton","never",3,"ngModel","ngModelChange","ionInput","ionCancel"],["size","large","expand","block","color","success",3,"click",4,"ngIf"],["placeholder","Bitte ausw\xe4hlen","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange",4,"ngIf"],["placeholder","Bitte ausw\xe4hlen","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["slot","end"],[4,"ngFor","ngForOf"],["slidingAthletRegistrationItem",""],[3,"athletregistration","status","programmlist","click"],["side","end"],["color","primary",3,"click"],["name","arrow-forward-circle-outline","ios","md-arrow-forward-circle-outline"],["color","danger",3,"click",4,"ngIf"],["color","danger",3,"click"],["size","large","expand","block","color","success",3,"click"],["slot","start","name","add"]],template:function(e,i){1&e&&(t.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),t._UZ(3,"ion-back-button",1),t.qZA(),t.TgZ(4,"ion-title")(5,"ion-grid",2)(6,"ion-row")(7,"ion-col")(8,"ion-label"),t._uU(9,"Angemeldete Athleten/Athletinnen"),t.qZA()(),t.YNc(10,S,5,1,"ion-col",3),t.qZA()()(),t.YNc(11,M,2,1,"ion-note",4),t.qZA(),t.TgZ(12,"ion-searchbar",5),t.NdJ("ngModelChange",function(s){return i.sMyQuery=s})("ionInput",function(s){return i.reloadList(s)})("ionCancel",function(s){return i.reloadList(s)}),t.qZA()(),t.YNc(13,J,5,4,"ion-content",3),t.TgZ(14,"ion-footer")(15,"ion-toolbar")(16,"ion-list"),t.YNc(17,O,3,0,"ion-button",6),t.qZA()()()),2&e&&(t.xp6(10),t.Q6J("ngIf",!i.competition),t.xp6(1),t.Q6J("ngIf",i.competition),t.xp6(1),t.Q6J("ngModel",i.sMyQuery),t.xp6(1),t.Q6J("ngIf",i.wkPgms&&i.wkPgms.length>0),t.xp6(4),t.Q6J("ngIf",i.isLoggedInAsClub()))},dependencies:[g.sg,g.O5,d.JJ,d.On,o.oU,o.YG,o.Sm,o.wI,o.W2,o.fr,o.jY,o.Gu,o.gu,o.Ie,o.rH,o.u8,o.IK,o.td,o.Q$,o.q_,o.uN,o.Nd,o.VI,o.t9,o.n0,o.PQ,o.wd,o.sr,o.QI,o.j9,o.cs,y,g.Ov,g.uU]}),n})()}];let N=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=t.oAB({type:n}),n.\u0275inj=t.cJS({imports:[g.ez,d.u5,o.Pc,m.Bz.forChild(F)]}),n})()}}]); \ No newline at end of file +"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[170],{170:($,u,l)=>{l.r(u),l.d(u,{RegAthletlistPageModule:()=>N});var g=l(6895),d=l(433),m=l(5472),o=l(502),_=l(1135),A=l(7579),v=l(9646),p=l(5698),f=l(9300),b=l(4004),x=l(8372),R=l(1884),I=l(8505),C=l(3900),Z=l(3099),t=l(8274),T=l(600);let k=(()=>{class n{constructor(){this.selected=new t.vpe}statusBadgeColor(){return"in sync"===this.status?"success":"warning"}statusComment(){return"in sync"===this.status?"":this.status.substring(this.status.indexOf("(")+1,this.status.length-1)}statusBadgeText(){return"in sync"===this.status?"\u2714 "+this.status:"\u2757 "+this.status.substring(0,this.status.indexOf("(")-1)}ngOnInit(){}getProgrammText(e){const i=this.programmlist.find(r=>r.id===e);return i?i.name:"..."}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=t.Xpm({type:n,selectors:[["app-reg-athlet-item"]],inputs:{athletregistration:"athletregistration",status:"status",programmlist:"programmlist"},outputs:{selected:"selected"},decls:14,vars:9,consts:[[3,"click"],["slot","start"],["src","assets/imgs/athlete.png"],["slot","end",3,"color"]],template:function(e,i){1&e&&(t.TgZ(0,"ion-item",0),t.NdJ("click",function(){return i.selected?i.selected.emit(i.athletregistration):{}}),t.TgZ(1,"ion-avatar",1),t._UZ(2,"img",2),t.qZA(),t.TgZ(3,"ion-label"),t._uU(4),t._UZ(5,"br"),t.TgZ(6,"small"),t._uU(7),t.ALo(8,"date"),t.qZA()(),t.TgZ(9,"ion-badge",3),t._uU(10),t._UZ(11,"br"),t.TgZ(12,"small"),t._uU(13),t.qZA()()()),2&e&&(t.xp6(4),t.lnq("",i.athletregistration.name,", ",i.athletregistration.vorname," (",i.athletregistration.geschlecht,")"),t.xp6(3),t.hij("(",t.lcZ(8,7,i.athletregistration.gebdat),")"),t.xp6(2),t.Q6J("color",i.statusBadgeColor()),t.xp6(1),t.Oqu(i.statusBadgeText()),t.xp6(3),t.Oqu(i.statusComment()))},dependencies:[o.BJ,o.yp,o.Ie,o.Q$,g.uU]}),n})();function y(n,a){if(1&n&&(t.TgZ(0,"ion-select-option",10),t._uU(1),t.ALo(2,"date"),t.qZA()),2&n){const e=a.$implicit;t.Q6J("value",e.uuid),t.xp6(1),t.hij(" ",e.titel+" "+t.xi3(2,2,e.datum,"dd-MM-yy"),"")}}function P(n,a){if(1&n){const e=t.EpF();t.TgZ(0,"ion-select",8),t.NdJ("ngModelChange",function(r){t.CHM(e);const s=t.oxw(2);return t.KtG(s.competition=r)}),t.YNc(1,y,3,5,"ion-select-option",9),t.qZA()}if(2&n){const e=t.oxw(2);t.Q6J("ngModel",e.competition),t.xp6(1),t.Q6J("ngForOf",e.getCompetitions())}}function S(n,a){if(1&n&&(t.TgZ(0,"ion-col")(1,"ion-item")(2,"ion-label"),t._uU(3,"Wettkampf"),t.qZA(),t.YNc(4,P,2,2,"ion-select",7),t.qZA()()),2&n){const e=t.oxw();t.xp6(4),t.Q6J("ngIf",e.getCompetitions().length>0)}}function M(n,a){if(1&n&&(t.TgZ(0,"ion-note",11),t._uU(1),t.qZA()),2&n){const e=t.oxw();t.xp6(1),t.hij(" ",e.competitionName()," ")}}function w(n,a){1&n&&(t.TgZ(0,"ion-item")(1,"ion-label"),t._uU(2,"loading ..."),t.qZA(),t._UZ(3,"ion-spinner"),t.qZA())}function U(n,a){if(1&n){const e=t.EpF();t.TgZ(0,"ion-item-option",19),t.NdJ("click",function(){t.CHM(e);const r=t.oxw().$implicit,s=t.MAs(1),c=t.oxw(3);return t.KtG(c.delete(r,s))}),t._UZ(1,"ion-icon",17),t._uU(2," L\xf6schen "),t.qZA()}}function L(n,a){if(1&n){const e=t.EpF();t.TgZ(0,"ion-item-sliding",null,13)(2,"app-reg-athlet-item",14),t.NdJ("click",function(){const s=t.CHM(e).$implicit,c=t.MAs(1),h=t.oxw(3);return t.KtG(h.itemTapped(s,c))}),t.qZA(),t.TgZ(3,"ion-item-options",15)(4,"ion-item-option",16),t.NdJ("click",function(){const s=t.CHM(e).$implicit,c=t.MAs(1),h=t.oxw(3);return t.KtG(h.edit(s,c))}),t._UZ(5,"ion-icon",17),t._uU(6),t.qZA(),t.YNc(7,U,3,0,"ion-item-option",18),t.qZA()()}if(2&n){const e=a.$implicit,i=t.oxw(3);t.xp6(2),t.Q6J("athletregistration",e)("status",i.getStatus(e))("programmlist",i.wkPgms),t.xp6(4),t.hij(" ",i.isLoggedInAsClub()?"Bearbeiten":i.isLoggedIn()?"Best\xe4tigen":"Anzeigen"," "),t.xp6(1),t.Q6J("ngIf",i.isLoggedInAsClub())}}function Q(n,a){if(1&n&&(t.TgZ(0,"div")(1,"ion-item-divider"),t._uU(2),t.qZA(),t.YNc(3,L,8,5,"ion-item-sliding",12),t.qZA()),2&n){const e=a.$implicit,i=t.oxw(2);t.xp6(2),t.Oqu(e.name),t.xp6(1),t.Q6J("ngForOf",i.filteredStartList(e.id))}}function J(n,a){if(1&n&&(t.TgZ(0,"ion-content")(1,"ion-list"),t.YNc(2,w,4,0,"ion-item",3),t.ALo(3,"async"),t.YNc(4,Q,4,2,"div",12),t.qZA()()),2&n){const e=t.oxw();t.xp6(2),t.Q6J("ngIf",t.lcZ(3,2,e.busy)||!(e.competition&&e.currentRegistration&&e.filteredPrograms)),t.xp6(2),t.Q6J("ngForOf",e.filteredPrograms)}}function O(n,a){if(1&n){const e=t.EpF();t.TgZ(0,"ion-button",20),t.NdJ("click",function(){t.CHM(e);const r=t.oxw();return t.KtG(r.createRegistration())}),t._UZ(1,"ion-icon",21),t._uU(2," Neue Anmeldung... "),t.qZA()}}const F=[{path:"",component:(()=>{class n{constructor(e,i,r,s){this.navCtrl=e,this.route=i,this.backendService=r,this.alertCtrl=s,this.busy=new _.X(!1),this.tMyQueryStream=new A.x,this.sFilterTask=void 0,this.sSyncActions=[],this.backendService.competitions||this.backendService.getCompetitions()}ngOnInit(){this.busy.next(!0);const e=this.route.snapshot.paramMap.get("wkId");this.currentRegId=parseInt(this.route.snapshot.paramMap.get("regId")),e?this.competition=e:this.backendService.competition&&(this.competition=this.backendService.competition)}ionViewWillEnter(){this.refreshList()}getSyncActions(){this.backendService.loadRegistrationSyncActions().pipe((0,p.q)(1)).subscribe(e=>{this.sSyncActions=e})}getStatus(e){if(this.sSyncActions){const i=this.sSyncActions.find(r=>r.verein.id===e.vereinregistrationId&&r.caption.indexOf(e.name)>-1&&r.caption.indexOf(e.vorname)>-1);return i?"pending ("+i.caption.substring(0,(i.caption+":").indexOf(":"))+")":"in sync"}return"n/a"}refreshList(){this.busy.next(!0),this.currentRegistration=void 0,this.getSyncActions(),this.backendService.getClubRegistrations(this.competition).pipe((0,f.h)(e=>!!e.find(i=>i.id===this.currentRegId)),(0,p.q)(1)).subscribe(e=>{this.currentRegistration=e.find(i=>i.id===this.currentRegId),console.log("ask athletes-list for registration"),this.backendService.loadAthletRegistrations(this.competition,this.currentRegId).subscribe(i=>{this.busy.next(!1),this.athletregistrations=i,this.tMyQueryStream.pipe((0,f.h)(s=>!!s&&!!s.target),(0,b.U)(s=>s.target.value||"*"),(0,x.b)(300),(0,R.x)(),(0,I.b)(s=>this.busy.next(!0)),(0,C.w)(this.runQuery(i)),(0,Z.B)()).subscribe(s=>{this.sFilteredRegistrationList=s,this.busy.next(!1)})})})}set competition(e){(!this.currentRegistration||e!==this.backendService.competition)&&this.backendService.loadProgramsForCompetition(this.competition).subscribe(i=>{this.wkPgms=i})}get competition(){return this.backendService.competition||""}getCompetitions(){return this.backendService.competitions||[]}competitionName(){return this.backendService.competitionName}runQuery(e){return i=>{const r=i.trim(),s=new Map;return e&&e.forEach(c=>{if(this.filter(r)(c)){const B=s.get(c.programId)||[];s.set(c.programId,[...B,c].sort((Y,q)=>Y.name.localeCompare(q.name)))}}),(0,v.of)(s)}}set athletregistrations(e){this.sAthletRegistrationList=e,this.runQuery(e)("*").subscribe(i=>this.sFilteredRegistrationList=i),this.reloadList(this.sMyQuery||"*")}get athletregistrations(){return this.sAthletRegistrationList}get filteredPrograms(){return[...this.wkPgms.filter(e=>this.sFilteredRegistrationList?.has(e.id))]}mapProgram(e){return this.wkPgms.filter(i=>i.id==e)[0]}filteredStartList(e){return this.sFilteredRegistrationList?.get(e)||this.sAthletRegistrationList||[]}reloadList(e){this.tMyQueryStream.next(e)}itemTapped(e,i){i.getOpenAmount().then(r=>{r>0?i.close():i.open("end")})}isLoggedInAsClub(){return this.backendService.loggedIn&&this.backendService.authenticatedClubId===this.currentRegId+""}isLoggedInAsAdmin(){return this.backendService.loggedIn&&!!this.backendService.authenticatedClubId}isLoggedIn(){return this.backendService.loggedIn}filter(e){const i=e.toUpperCase().split(" ");return r=>"*"===e.trim()||i.filter(s=>{if(r.name.toUpperCase().indexOf(s)>-1||r.vorname.toUpperCase().indexOf(s)>-1||this.wkPgms.find(c=>r.programId===c.id&&c.name===s)||r.gebdat.indexOf(s)>-1||3==s.length&&r.geschlecht.indexOf(s.substring(1,2))>-1)return!0}).length===i.length}createRegistration(){this.navCtrl.navigateForward(`reg-athletlist/${this.backendService.competition}/${this.currentRegId}/0`)}edit(e,i){this.navCtrl.navigateForward(`reg-athletlist/${this.backendService.competition}/${this.currentRegId}/${e.id}`),i.close()}needsPGMChoice(){const e=[...this.wkPgms][0];return!(1==e.aggregate&&2==e.riegenmode)}similarRegistration(e,i){return e.athletId===i.athletId||e.name===i.name&&e.vorname===i.vorname&&e.gebdat===i.gebdat&&e.geschlecht===i.geschlecht}delete(e,i){i.close(),this.alertCtrl.create({header:"Achtung",subHeader:"L\xf6schen der Athlet-Anmeldung am Wettkampf",message:"Hiermit wird die Anmeldung von "+e.name+", "+e.vorname+" am Wettkampf gel\xf6scht.",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"OKAY",handler:()=>{this.needsPGMChoice()||this.athletregistrations.filter(s=>this.similarRegistration(s,e)).filter(s=>s.id!==e.id).forEach(s=>{this.backendService.deleteAthletRegistration(this.backendService.competition,this.currentRegId,s)}),this.backendService.deleteAthletRegistration(this.backendService.competition,this.currentRegId,e).subscribe(()=>{this.refreshList()})}}]}).then(s=>s.present())}}return n.\u0275fac=function(e){return new(e||n)(t.Y36(o.SH),t.Y36(m.gz),t.Y36(T.v),t.Y36(o.Br))},n.\u0275cmp=t.Xpm({type:n,selectors:[["app-reg-athletlist"]],decls:18,vars:5,consts:[["slot","start"],["defaultHref","/"],["no-padding",""],[4,"ngIf"],["slot","end",4,"ngIf"],["placeholder","Search","showCancelButton","never",3,"ngModel","ngModelChange","ionInput","ionCancel"],["size","large","expand","block","color","success",3,"click",4,"ngIf"],["placeholder","Bitte ausw\xe4hlen","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange",4,"ngIf"],["placeholder","Bitte ausw\xe4hlen","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["slot","end"],[4,"ngFor","ngForOf"],["slidingAthletRegistrationItem",""],[3,"athletregistration","status","programmlist","click"],["side","end"],["color","primary",3,"click"],["name","arrow-forward-circle-outline","ios","md-arrow-forward-circle-outline"],["color","danger",3,"click",4,"ngIf"],["color","danger",3,"click"],["size","large","expand","block","color","success",3,"click"],["slot","start","name","add"]],template:function(e,i){1&e&&(t.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),t._UZ(3,"ion-back-button",1),t.qZA(),t.TgZ(4,"ion-title")(5,"ion-grid",2)(6,"ion-row")(7,"ion-col")(8,"ion-label"),t._uU(9,"Angemeldete Athleten/Athletinnen"),t.qZA()(),t.YNc(10,S,5,1,"ion-col",3),t.qZA()()(),t.YNc(11,M,2,1,"ion-note",4),t.qZA(),t.TgZ(12,"ion-searchbar",5),t.NdJ("ngModelChange",function(s){return i.sMyQuery=s})("ionInput",function(s){return i.reloadList(s)})("ionCancel",function(s){return i.reloadList(s)}),t.qZA()(),t.YNc(13,J,5,4,"ion-content",3),t.TgZ(14,"ion-footer")(15,"ion-toolbar")(16,"ion-list"),t.YNc(17,O,3,0,"ion-button",6),t.qZA()()()),2&e&&(t.xp6(10),t.Q6J("ngIf",!i.competition),t.xp6(1),t.Q6J("ngIf",i.competition),t.xp6(1),t.Q6J("ngModel",i.sMyQuery),t.xp6(1),t.Q6J("ngIf",i.wkPgms&&i.wkPgms.length>0),t.xp6(4),t.Q6J("ngIf",i.isLoggedInAsClub()))},dependencies:[g.sg,g.O5,d.JJ,d.On,o.oU,o.YG,o.Sm,o.wI,o.W2,o.fr,o.jY,o.Gu,o.gu,o.Ie,o.rH,o.u8,o.IK,o.td,o.Q$,o.q_,o.uN,o.Nd,o.VI,o.t9,o.n0,o.PQ,o.wd,o.sr,o.QI,o.j9,o.cs,k,g.Ov,g.uU]}),n})()}];let N=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=t.oAB({type:n}),n.\u0275inj=t.cJS({imports:[g.ez,d.u5,o.Pc,m.Bz.forChild(F)]}),n})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/5231.a99f3701004c95fb.js b/src/main/resources/app/5231.a99f3701004c95fb.js new file mode 100644 index 000000000..9ca2a8bf8 --- /dev/null +++ b/src/main/resources/app/5231.a99f3701004c95fb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[5231],{5231:(k,c,l)=>{l.r(c),l.d(c,{RegAthletEditorPageModule:()=>C});var h=l(6895),d=l(433),u=l(5472),o=l(502),_=l(7225),e=l(8274),m=l(600);function p(r,s){if(1&r&&(e.TgZ(0,"ion-select-option",15)(1,"ion-avatar",2),e._UZ(2,"img",8),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4),e._UZ(5,"br"),e.TgZ(6,"small"),e._uU(7),e.ALo(8,"date"),e.qZA()()()),2&r){const t=s.$implicit;e.Q6J("value",t.athletId),e.xp6(4),e.lnq("",t.name,", ",t.vorname," (",t.geschlecht,")"),e.xp6(3),e.hij("(",e.lcZ(8,5,t.gebdat),")")}}function b(r,s){if(1&r){const t=e.EpF();e.TgZ(0,"ion-select",19),e.NdJ("ngModelChange",function(n){e.CHM(t);const a=e.oxw(2);return e.KtG(a.selectedClubAthletId=n)}),e.YNc(1,p,9,7,"ion-select-option",20),e.qZA()}if(2&r){const t=e.oxw(2);e.Q6J("ngModel",t.selectedClubAthletId),e.xp6(1),e.Q6J("ngForOf",t.clubAthletList)}}function A(r,s){1&r&&(e.TgZ(0,"ion-item-divider")(1,"ion-avatar",0),e._UZ(2,"img",21),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4,"Einteilung"),e.qZA()())}function f(r,s){if(1&r&&(e.TgZ(0,"ion-select-option",15),e._uU(1),e.qZA()),2&r){const t=s.$implicit;e.Q6J("value",t.id),e.xp6(1),e.Oqu(t.name)}}function v(r,s){if(1&r){const t=e.EpF();e.TgZ(0,"ion-item")(1,"ion-avatar",0),e._uU(2," \xa0 "),e.qZA(),e.TgZ(3,"ion-label",12),e._uU(4,"Programm/Kategorie"),e.qZA(),e.TgZ(5,"ion-select",22),e.NdJ("ngModelChange",function(n){e.CHM(t);const a=e.oxw(2);return e.KtG(a.registration.programId=n)}),e.YNc(6,f,2,2,"ion-select-option",20),e.qZA()()}if(2&r){const t=e.oxw(2);e.xp6(5),e.Q6J("ngModel",t.registration.programId),e.xp6(1),e.Q6J("ngForOf",t.filterPGMsForAthlet(t.registration))}}function I(r,s){if(1&r){const t=e.EpF();e.TgZ(0,"ion-content")(1,"form",6,7),e.NdJ("ngSubmit",function(){e.CHM(t);const n=e.MAs(2),a=e.oxw();return e.KtG(a.save(n))})("keyup.enter",function(){e.CHM(t);const n=e.MAs(2),a=e.oxw();return e.KtG(a.save(n))}),e.TgZ(3,"ion-list")(4,"ion-item-divider")(5,"ion-avatar",0),e._UZ(6,"img",8),e.qZA(),e.TgZ(7,"ion-label"),e._uU(8,"Athlet / Athletin"),e.qZA(),e.YNc(9,b,2,2,"ion-select",9),e.qZA(),e.TgZ(10,"ion-item")(11,"ion-avatar",0),e._uU(12," \xa0 "),e.qZA(),e.TgZ(13,"ion-input",10),e.NdJ("ngModelChange",function(n){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.name=n)}),e.qZA(),e.TgZ(14,"ion-input",11),e.NdJ("ngModelChange",function(n){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.vorname=n)}),e.qZA()(),e.TgZ(15,"ion-item")(16,"ion-avatar",0),e._uU(17," \xa0 "),e.qZA(),e.TgZ(18,"ion-label",12),e._uU(19,"Geburtsdatum"),e.qZA(),e.TgZ(20,"ion-input",13),e.NdJ("ngModelChange",function(n){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.gebdat=n)}),e.qZA()(),e.TgZ(21,"ion-item")(22,"ion-avatar",0),e._uU(23," \xa0 "),e.qZA(),e.TgZ(24,"ion-label",12),e._uU(25,"Geschlecht"),e.qZA(),e.TgZ(26,"ion-select",14),e.NdJ("ngModelChange",function(n){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.geschlecht=n)}),e.TgZ(27,"ion-select-option",15),e._uU(28,"weiblich"),e.qZA(),e.TgZ(29,"ion-select-option",15),e._uU(30,"m\xe4nnlich"),e.qZA()()(),e.YNc(31,A,5,0,"ion-item-divider",4),e.YNc(32,v,7,2,"ion-item",4),e.qZA(),e.TgZ(33,"ion-list")(34,"ion-button",16,17),e._UZ(36,"ion-icon",18),e._uU(37,"Speichern"),e.qZA()()()()}if(2&r){const t=e.MAs(2),i=e.oxw();e.xp6(9),e.Q6J("ngIf",0===i.registration.id&&i.clubAthletList.length>0),e.xp6(4),e.Q6J("disabled",!1)("ngModel",i.registration.name),e.xp6(1),e.Q6J("disabled",!1)("ngModel",i.registration.vorname),e.xp6(6),e.Q6J("disabled",!1)("ngModel",i.registration.gebdat),e.xp6(6),e.Q6J("ngModel",i.registration.geschlecht),e.xp6(1),e.Q6J("value","W"),e.xp6(2),e.Q6J("value","M"),e.xp6(2),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(1),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(2),e.Q6J("disabled",i.waiting||!i.isFormValid()||!t.valid||t.untouched)}}function Z(r,s){if(1&r){const t=e.EpF();e.TgZ(0,"ion-button",23,24),e.NdJ("click",function(){e.CHM(t);const n=e.oxw();return e.KtG(n.delete())}),e._UZ(2,"ion-icon",25),e._uU(3,"Anmeldung l\xf6schen"),e.qZA()}if(2&r){const t=e.oxw();e.Q6J("disabled",t.waiting)}}const x=[{path:"",component:(()=>{class r{constructor(t,i,n,a,g){this.navCtrl=t,this.route=i,this.backendService=n,this.alertCtrl=a,this.zone=g,this.waiting=!1}ngOnInit(){this.waiting=!0,this.wkId=this.route.snapshot.paramMap.get("wkId"),this.regId=parseInt(this.route.snapshot.paramMap.get("regId")),this.athletId=parseInt(this.route.snapshot.paramMap.get("athletId")),this.backendService.getCompetitions().subscribe(t=>{const i=t.find(n=>n.uuid===this.wkId);this.wettkampfId=parseInt(i.id),this.backendService.loadProgramsForCompetition(i.uuid).subscribe(n=>{this.wkPgms=n,this.backendService.loadAthletListForClub(this.wkId,this.regId).subscribe(a=>{this.clubAthletList=a,this.athletId?this.backendService.loadAthletRegistrations(this.wkId,this.regId).subscribe(g=>{this.clubAthletListCurrent=g,this.updateUI(g.find(M=>M.id===this.athletId))}):this.updateUI({id:0,vereinregistrationId:this.regId,name:"",vorname:"",geschlecht:"W",gebdat:void 0,programId:void 0,registrationTime:0})})})})}get selectedClubAthletId(){return this._selectedClubAthletId}set selectedClubAthletId(t){this._selectedClubAthletId=t,this.registration=this.clubAthletList.find(i=>i.athletId===t)}needsPGMChoice(){const t=[...this.wkPgms][0];return!(1==t.aggregate&&2==t.riegenmode)}alter(t){const i=new Date(t.gebdat).getFullYear();return new Date(Date.now()).getFullYear()-i}similarRegistration(t,i){return t.athletId===i.athletId||t.name===i.name&&t.vorname===i.vorname&&t.gebdat===i.gebdat&&t.geschlecht===i.geschlecht}alternatives(t){return this.clubAthletListCurrent?.filter(i=>this.similarRegistration(i,t)&&i.id!=t.id)||[]}filterPGMsForAthlet(t){const i=this.alter(t),n=this.alternatives(t);return this.wkPgms.filter(a=>(a.alterVon||0)<=i&&(a.alterBis||100)>=i&&0===n.filter(g=>g.programId===a.id).length)}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.wettkampf=this.backendService.competitionName,this.registration=Object.assign({},t),this.registration.gebdat=(0,_.tC)(this.registration.gebdat)})}isFormValid(){return!this.registration?.programId&&!this.needsPGMChoice()&&(this.registration.programId=this.filterPGMsForAthlet(this.registration)[0]?.id),!!this.registration.gebdat&&!!this.registration.geschlecht&&this.registration.geschlecht.length>0&&!!this.registration.name&&this.registration.name.length>0&&!!this.registration.vorname&&this.registration.vorname.length>0&&!!this.registration.programId&&this.registration.programId>0}checkPersonOverride(t){if(t.athletId){const i=[...this.clubAthletListCurrent,...this.clubAthletList].find(n=>n.athletId===t.athletId);if(i.geschlecht!==t.geschlecht||new Date((0,_.tC)(i.gebdat)).toJSON()!==new Date(t.gebdat).toJSON()||i.name!==t.name||i.vorname!==t.vorname)return!0}return!1}save(t){if(!t.valid)return;const i=Object.assign({},this.registration,{gebdat:new Date(t.value.gebdat).toJSON()});0===this.athletId||0===i.id?(this.needsPGMChoice()||this.filterPGMsForAthlet(this.registration).filter(n=>n.id!==i.programId).forEach(n=>{this.backendService.createAthletRegistration(this.wkId,this.regId,Object.assign({},i,{programId:n.id}))}),this.backendService.createAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})):this.checkPersonOverride(i)?this.alertCtrl.create({header:"Achtung",subHeader:"Person \xfcberschreiben vs korrigieren",message:"Es wurden \xc4nderungen an den Personen-Feldern vorgenommen. Diese sind ausschliesslich f\xfcr Korrekturen zul\xe4ssig. Die Identit\xe4t der Person darf dadurch nicht ge\xe4ndert werden!",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"Korektur durchf\xfchren",handler:()=>{this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})}}]}).then(g=>g.present()):this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})}delete(){this.alertCtrl.create({header:"Achtung",subHeader:"L\xf6schen der Athlet-Anmeldung am Wettkampf",message:"Hiermit wird die Anmeldung von "+this.registration.name+", "+this.registration.vorname+" am Wettkampf gel\xf6scht.",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"OKAY",handler:()=>{this.needsPGMChoice()||this.clubAthletListCurrent.filter(i=>this.similarRegistration(this.registration,i)).filter(i=>i.id!==this.registration.id).forEach(i=>{this.backendService.deleteAthletRegistration(this.wkId,this.regId,i)}),this.backendService.deleteAthletRegistration(this.wkId,this.regId,this.registration).subscribe(()=>{this.navCtrl.pop()})}}]}).then(i=>i.present())}}return r.\u0275fac=function(t){return new(t||r)(e.Y36(o.SH),e.Y36(u.gz),e.Y36(m.v),e.Y36(o.Br),e.Y36(e.R0b))},r.\u0275cmp=e.Xpm({type:r,selectors:[["app-reg-athlet-editor"]],decls:14,vars:3,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[4,"ngIf"],["size","large","expand","block","color","danger",3,"disabled","click",4,"ngIf"],[3,"ngSubmit","keyup.enter"],["athletRegistrationForm","ngForm"],["src","assets/imgs/athlete.png"],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange",4,"ngIf"],["required","","placeholder","Name","type","text","name","name","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Vorname","type","text","name","vorname","required","",3,"disabled","ngModel","ngModelChange"],["color","primary"],["required","","placeholder","Geburtsdatum","type","date","display-timezone","utc","name","gebdat","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Geschlecht","name","geschlecht","okText","Okay","cancelText","Abbrechen","required","",3,"ngModel","ngModelChange"],[3,"value"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name",""],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],["src","assets/imgs/wettkampf.png"],["required","","placeholder","Programm/Kategorie","name","programId","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],["size","large","expand","block","color","danger",3,"disabled","click"],["btnDelete",""],["slot","start","name","trash"]],template:function(t,i){1&t&&(e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5,"Anmeldung Athlet/Athletin"),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA()()()(),e.YNc(9,I,38,13,"ion-content",4),e.TgZ(10,"ion-footer")(11,"ion-toolbar")(12,"ion-list"),e.YNc(13,Z,4,1,"ion-button",5),e.qZA()()()),2&t&&(e.xp6(8),e.hij("f\xfcr ",i.wettkampf,""),e.xp6(1),e.Q6J("ngIf",i.registration),e.xp6(4),e.Q6J("ngIf",i.athletId>0))},dependencies:[h.sg,h.O5,d._Y,d.JJ,d.JL,d.Q7,d.On,d.F,o.BJ,o.oU,o.YG,o.Sm,o.W2,o.fr,o.Gu,o.gu,o.pK,o.Ie,o.rH,o.Q$,o.q_,o.uN,o.t9,o.n0,o.wd,o.sr,o.QI,o.j9,o.cs,h.uU]}),r})()}];let C=(()=>{class r{}return r.\u0275fac=function(t){return new(t||r)},r.\u0275mod=e.oAB({type:r}),r.\u0275inj=e.cJS({imports:[h.ez,d.u5,o.Pc,u.Bz.forChild(x)]}),r})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/5231.b2b8632943ae5658.js b/src/main/resources/app/5231.b2b8632943ae5658.js deleted file mode 100644 index 8b722b585..000000000 --- a/src/main/resources/app/5231.b2b8632943ae5658.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[5231],{5231:(C,h,l)=>{l.r(h),l.d(h,{RegAthletEditorPageModule:()=>I});var c=l(6895),g=l(433),u=l(5472),r=l(502),_=l(7225),e=l(8274),m=l(600);function p(i,s){if(1&i&&(e.TgZ(0,"ion-select-option",15)(1,"ion-avatar",2),e._UZ(2,"img",8),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4),e._UZ(5,"br"),e.TgZ(6,"small"),e._uU(7),e.ALo(8,"date"),e.qZA()()()),2&i){const t=s.$implicit;e.Q6J("value",t.athletId),e.xp6(4),e.lnq("",t.name,", ",t.vorname," (",t.geschlecht,")"),e.xp6(3),e.hij("(",e.lcZ(8,5,t.gebdat),")")}}function b(i,s){if(1&i){const t=e.EpF();e.TgZ(0,"ion-select",22),e.NdJ("ngModelChange",function(o){e.CHM(t);const a=e.oxw(2);return e.KtG(a.selectedClubAthletId=o)}),e.YNc(1,p,9,7,"ion-select-option",18),e.qZA()}if(2&i){const t=e.oxw(2);e.Q6J("ngModel",t.selectedClubAthletId),e.xp6(1),e.Q6J("ngForOf",t.clubAthletList)}}function A(i,s){if(1&i&&(e.TgZ(0,"ion-select-option",15),e._uU(1),e.qZA()),2&i){const t=s.$implicit;e.Q6J("value",t.id),e.xp6(1),e.Oqu(t.name)}}function f(i,s){if(1&i){const t=e.EpF();e.TgZ(0,"ion-content")(1,"form",6,7),e.NdJ("ngSubmit",function(){e.CHM(t);const o=e.MAs(2),a=e.oxw();return e.KtG(a.save(o))})("keyup.enter",function(){e.CHM(t);const o=e.MAs(2),a=e.oxw();return e.KtG(a.save(o))}),e.TgZ(3,"ion-list")(4,"ion-item-divider")(5,"ion-avatar",0),e._UZ(6,"img",8),e.qZA(),e.TgZ(7,"ion-label"),e._uU(8,"Athlet / Athletin"),e.qZA(),e.YNc(9,b,2,2,"ion-select",9),e.qZA(),e.TgZ(10,"ion-item")(11,"ion-avatar",0),e._uU(12," \xa0 "),e.qZA(),e.TgZ(13,"ion-input",10),e.NdJ("ngModelChange",function(o){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.name=o)}),e.qZA(),e.TgZ(14,"ion-input",11),e.NdJ("ngModelChange",function(o){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.vorname=o)}),e.qZA()(),e.TgZ(15,"ion-item")(16,"ion-avatar",0),e._uU(17," \xa0 "),e.qZA(),e.TgZ(18,"ion-label",12),e._uU(19,"Geburtsdatum"),e.qZA(),e.TgZ(20,"ion-input",13),e.NdJ("ngModelChange",function(o){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.gebdat=o)}),e.qZA()(),e.TgZ(21,"ion-item")(22,"ion-avatar",0),e._uU(23," \xa0 "),e.qZA(),e.TgZ(24,"ion-label",12),e._uU(25,"Geschlecht"),e.qZA(),e.TgZ(26,"ion-select",14),e.NdJ("ngModelChange",function(o){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.geschlecht=o)}),e.TgZ(27,"ion-select-option",15),e._uU(28,"weiblich"),e.qZA(),e.TgZ(29,"ion-select-option",15),e._uU(30,"m\xe4nnlich"),e.qZA()()(),e.TgZ(31,"ion-item-divider")(32,"ion-avatar",0),e._UZ(33,"img",16),e.qZA(),e.TgZ(34,"ion-label"),e._uU(35,"Einteilung"),e.qZA()(),e.TgZ(36,"ion-item")(37,"ion-avatar",0),e._uU(38," \xa0 "),e.qZA(),e.TgZ(39,"ion-label",12),e._uU(40,"Programm/Kategorie"),e.qZA(),e.TgZ(41,"ion-select",17),e.NdJ("ngModelChange",function(o){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.programId=o)}),e.YNc(42,A,2,2,"ion-select-option",18),e.qZA()()(),e.TgZ(43,"ion-list")(44,"ion-button",19,20),e._UZ(46,"ion-icon",21),e._uU(47,"Speichern"),e.qZA()()()()}if(2&i){const t=e.MAs(2),n=e.oxw();e.xp6(9),e.Q6J("ngIf",0===n.registration.id&&n.clubAthletList.length>0),e.xp6(4),e.Q6J("disabled",!1)("ngModel",n.registration.name),e.xp6(1),e.Q6J("disabled",!1)("ngModel",n.registration.vorname),e.xp6(6),e.Q6J("disabled",!1)("ngModel",n.registration.gebdat),e.xp6(6),e.Q6J("ngModel",n.registration.geschlecht),e.xp6(1),e.Q6J("value","W"),e.xp6(2),e.Q6J("value","M"),e.xp6(12),e.Q6J("ngModel",n.registration.programId),e.xp6(1),e.Q6J("ngForOf",n.wkPgms),e.xp6(2),e.Q6J("disabled",n.waiting||!n.isFormValid()||!t.valid||t.untouched)}}function v(i,s){if(1&i){const t=e.EpF();e.TgZ(0,"ion-button",23,24),e.NdJ("click",function(){e.CHM(t);const o=e.oxw();return e.KtG(o.delete())}),e._UZ(2,"ion-icon",25),e._uU(3,"Anmeldung l\xf6schen"),e.qZA()}if(2&i){const t=e.oxw();e.Q6J("disabled",t.waiting)}}const Z=[{path:"",component:(()=>{class i{constructor(t,n,o,a,d){this.navCtrl=t,this.route=n,this.backendService=o,this.alertCtrl=a,this.zone=d,this.waiting=!1}ngOnInit(){this.waiting=!0,this.wkId=this.route.snapshot.paramMap.get("wkId"),this.regId=parseInt(this.route.snapshot.paramMap.get("regId")),this.athletId=parseInt(this.route.snapshot.paramMap.get("athletId")),this.backendService.getCompetitions().subscribe(t=>{const n=t.find(o=>o.uuid===this.wkId);this.wettkampfId=parseInt(n.id),this.backendService.loadProgramsForCompetition(n.uuid).subscribe(o=>{this.wkPgms=o,this.backendService.loadAthletListForClub(this.wkId,this.regId).subscribe(a=>{this.clubAthletList=a,this.athletId?this.backendService.loadAthletRegistrations(this.wkId,this.regId).subscribe(d=>{this.clubAthletListCurrent=d,this.updateUI(d.find(x=>x.id===this.athletId))}):this.updateUI({id:0,vereinregistrationId:this.regId,name:"",vorname:"",geschlecht:"W",gebdat:void 0,programId:void 0,registrationTime:0})})})})}get selectedClubAthletId(){return this._selectedClubAthletId}set selectedClubAthletId(t){this._selectedClubAthletId=t,this.registration=this.clubAthletList.find(n=>n.athletId===t)}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.wettkampf=this.backendService.competitionName,this.registration=Object.assign({},t),this.registration.gebdat=(0,_.tC)(this.registration.gebdat)})}isFormValid(){return!!this.registration.gebdat&&!!this.registration.geschlecht&&this.registration.geschlecht.length>0&&!!this.registration.name&&this.registration.name.length>0&&!!this.registration.vorname&&this.registration.vorname.length>0&&!!this.registration.programId&&this.registration.programId>0}checkPersonOverride(t){if(t.athletId){const n=[...this.clubAthletListCurrent,...this.clubAthletList].find(o=>o.athletId===t.athletId);if(n.geschlecht!==t.geschlecht||new Date((0,_.tC)(n.gebdat)).toJSON()!==new Date(t.gebdat).toJSON()||n.name!==t.name||n.vorname!==t.vorname)return!0}return!1}save(t){if(!t.valid)return;const n=Object.assign({},this.registration,{gebdat:new Date(t.value.gebdat).toJSON()});0===this.athletId||0===n.id?this.backendService.createAthletRegistration(this.wkId,this.regId,n).subscribe(()=>{this.navCtrl.pop()}):this.checkPersonOverride(n)?this.alertCtrl.create({header:"Achtung",subHeader:"Person \xfcberschreiben vs korrigieren",message:"Es wurden \xc4nderungen an den Personen-Feldern vorgenommen. Diese sind ausschliesslich f\xfcr Korrekturen zul\xe4ssig. Die Identit\xe4t der Person darf dadurch nicht ge\xe4ndert werden!",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"Korektur durchf\xfchren",handler:()=>{this.backendService.saveAthletRegistration(this.wkId,this.regId,n).subscribe(()=>{this.navCtrl.pop()})}}]}).then(d=>d.present()):this.backendService.saveAthletRegistration(this.wkId,this.regId,n).subscribe(()=>{this.navCtrl.pop()})}delete(){this.alertCtrl.create({header:"Achtung",subHeader:"L\xf6schen der Athlet-Anmeldung am Wettkampf",message:"Hiermit wird die Anmeldung von "+this.registration.name+", "+this.registration.vorname+" am Wettkampf gel\xf6scht.",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"OKAY",handler:()=>{this.backendService.deleteAthletRegistration(this.wkId,this.regId,this.registration).subscribe(()=>{this.navCtrl.pop()})}}]}).then(n=>n.present())}}return i.\u0275fac=function(t){return new(t||i)(e.Y36(r.SH),e.Y36(u.gz),e.Y36(m.v),e.Y36(r.Br),e.Y36(e.R0b))},i.\u0275cmp=e.Xpm({type:i,selectors:[["app-reg-athlet-editor"]],decls:14,vars:3,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[4,"ngIf"],["size","large","expand","block","color","danger",3,"disabled","click",4,"ngIf"],[3,"ngSubmit","keyup.enter"],["athletRegistrationForm","ngForm"],["src","assets/imgs/athlete.png"],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange",4,"ngIf"],["required","","placeholder","Name","type","text","name","name","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Vorname","type","text","name","vorname","required","",3,"disabled","ngModel","ngModelChange"],["color","primary"],["required","","placeholder","Geburtsdatum","type","date","display-timezone","utc","name","gebdat","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Geschlecht","name","geschlecht","okText","Okay","cancelText","Abbrechen","required","",3,"ngModel","ngModelChange"],[3,"value"],["src","assets/imgs/wettkampf.png"],["required","","placeholder","Programm/Kategorie","name","programId","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name",""],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],["size","large","expand","block","color","danger",3,"disabled","click"],["btnDelete",""],["slot","start","name","trash"]],template:function(t,n){1&t&&(e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5,"Anmeldung Athlet/Athletin"),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA()()()(),e.YNc(9,f,48,13,"ion-content",4),e.TgZ(10,"ion-footer")(11,"ion-toolbar")(12,"ion-list"),e.YNc(13,v,4,1,"ion-button",5),e.qZA()()()),2&t&&(e.xp6(8),e.hij("f\xfcr ",n.wettkampf,""),e.xp6(1),e.Q6J("ngIf",n.registration),e.xp6(4),e.Q6J("ngIf",n.athletId>0))},dependencies:[c.sg,c.O5,g._Y,g.JJ,g.JL,g.Q7,g.On,g.F,r.BJ,r.oU,r.YG,r.Sm,r.W2,r.fr,r.Gu,r.gu,r.pK,r.Ie,r.rH,r.Q$,r.q_,r.uN,r.t9,r.n0,r.wd,r.sr,r.QI,r.j9,r.cs,c.uU]}),i})()}];let I=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=e.oAB({type:i}),i.\u0275inj=e.cJS({imports:[c.ez,g.u5,r.Pc,u.Bz.forChild(Z)]}),i})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/index.html b/src/main/resources/app/index.html index 1312dabc1..1a6ce8a9b 100644 --- a/src/main/resources/app/index.html +++ b/src/main/resources/app/index.html @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/src/main/resources/app/runtime.9a1e15f2962837d6.js b/src/main/resources/app/runtime.b117fbf32d452b5b.js similarity index 54% rename from src/main/resources/app/runtime.9a1e15f2962837d6.js rename to src/main/resources/app/runtime.b117fbf32d452b5b.js index a437c22ce..ef41eecc7 100644 --- a/src/main/resources/app/runtime.9a1e15f2962837d6.js +++ b/src/main/resources/app/runtime.b117fbf32d452b5b.js @@ -1 +1 @@ -(()=>{"use strict";var e,v={},g={};function f(e){var r=g[e];if(void 0!==r)return r.exports;var a=g[e]={exports:{}};return v[e].call(a.exports,a,a.exports,f),a.exports}f.m=v,e=[],f.O=(r,a,d,b)=>{if(!a){var t=1/0;for(c=0;c=b)&&Object.keys(f.O).every(p=>f.O[p](a[n]))?a.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[a,d,b]},f.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return f.d(r,{a:r}),r},(()=>{var r,e=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;f.t=function(a,d){if(1&d&&(a=this(a)),8&d||"object"==typeof a&&a&&(4&d&&a.__esModule||16&d&&"function"==typeof a.then))return a;var b=Object.create(null);f.r(b);var c={};r=r||[null,e({}),e([]),e(e)];for(var t=2&d&&a;"object"==typeof t&&!~r.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>a[l]);return c.default=()=>a,f.d(b,c),b}})(),f.d=(e,r)=>{for(var a in r)f.o(r,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:r[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((r,a)=>(f.f[a](e,r),r),[])),f.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"57d97b14358d2f14",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"b2b8632943ae5658",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9151:"21577e63c2cd66c2",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),f.miniCssF=e=>{},f.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e={},r="app:";f.l=(a,d,b,c)=>{if(e[a])e[a].push(d);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[a];if(delete e[a],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),f.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;f.tt=()=>(void 0===e&&(e={createScriptURL:r=>r},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),f.tu=e=>f.tt().createScriptURL(e),f.p="",(()=>{var e={3666:0};f.f.j=(d,b)=>{var c=f.o(e,d)?e[d]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=d){var t=new Promise((o,s)=>c=e[d]=[o,s]);b.push(c[2]=t);var l=f.p+f.u(d),n=new Error;f.l(l,o=>{if(f.o(e,d)&&(0!==(c=e[d])&&(e[d]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+d+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+d,d)}else e[d]=0},f.O.j=d=>0===e[d];var r=(d,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)f.o(t,n)&&(f.m[n]=t[n]);if(l)var s=l(f)}for(d&&d(b);o{"use strict";var e,v={},g={};function f(e){var d=g[e];if(void 0!==d)return d.exports;var a=g[e]={exports:{}};return v[e].call(a.exports,a,a.exports,f),a.exports}f.m=v,e=[],f.O=(d,a,r,b)=>{if(!a){var t=1/0;for(c=0;c=b)&&Object.keys(f.O).every(p=>f.O[p](a[n]))?a.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[a,r,b]},f.n=e=>{var d=e&&e.__esModule?()=>e.default:()=>e;return f.d(d,{a:d}),d},(()=>{var d,e=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;f.t=function(a,r){if(1&r&&(a=this(a)),8&r||"object"==typeof a&&a&&(4&r&&a.__esModule||16&r&&"function"==typeof a.then))return a;var b=Object.create(null);f.r(b);var c={};d=d||[null,e({}),e([]),e(e)];for(var t=2&r&&a;"object"==typeof t&&!~d.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>a[l]);return c.default=()=>a,f.d(b,c),b}})(),f.d=(e,d)=>{for(var a in d)f.o(d,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:d[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((d,a)=>(f.f[a](e,d),d),[])),f.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"888b46156ab59294",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"a99f3701004c95fb",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9151:"21577e63c2cd66c2",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),f.miniCssF=e=>{},f.o=(e,d)=>Object.prototype.hasOwnProperty.call(e,d),(()=>{var e={},d="app:";f.l=(a,r,b,c)=>{if(e[a])e[a].push(r);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[a];if(delete e[a],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),f.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;f.tt=()=>(void 0===e&&(e={createScriptURL:d=>d},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),f.tu=e=>f.tt().createScriptURL(e),f.p="",(()=>{var e={3666:0};f.f.j=(r,b)=>{var c=f.o(e,r)?e[r]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=r){var t=new Promise((o,s)=>c=e[r]=[o,s]);b.push(c[2]=t);var l=f.p+f.u(r),n=new Error;f.l(l,o=>{if(f.o(e,r)&&(0!==(c=e[r])&&(e[r]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+r+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+r,r)}else e[r]=0},f.O.j=r=>0===e[r];var d=(r,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)f.o(t,n)&&(f.m[n]=t[n]);if(l)var s=l(f)}for(r&&r(b);o Date: Mon, 13 Mar 2023 01:27:41 +0100 Subject: [PATCH 06/99] =?UTF-8?q?#87=20PoC=20for=20Turn10=20and=20TG=20All?= =?UTF-8?q?g=C3=A4u=20WK-Modes=20-=20Switch=20turn10=20to=20riegenmodus=20?= =?UTF-8?q?1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AddWKDisziplinMetafields-sqllite.sql | 496 +++++++++--------- .../seidel/kutu/domain/WettkampfService.scala | 8 +- .../ch/seidel/kutu/base/TestDBService.scala | 19 +- .../ch/seidel/kutu/domain/WettkampfSpec.scala | 8 +- 4 files changed, 268 insertions(+), 263 deletions(-) diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql index 0a8898162..ebf02744c 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql @@ -166,293 +166,293 @@ insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, ,(468, 103, 5, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) ,(469, 103, 4, '', '', 1.0, 1, 1, 34, 3, 1, 0, 30, 1) ,(470, 103, 6, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1); +insert into disziplin (id, name) values (30, 'Minitramp') on conflict (id) do nothing; +insert into disziplin (id, name) values (31, 'Pferd') on conflict (id) do nothing; insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; -insert into disziplin (id, name) values (30, 'Minitramp') on conflict (id) do nothing; insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; -insert into disziplin (id, name) values (31, 'Pferd') on conflict (id) do nothing; insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(104, 'Turn10', 0, 0, 104, 0, 100, '41d1ac2a-3f9d-4c87-98ad-15f20550ff55', 2) -,(105, 'AK6 BS', 0, 104, 105, 0, 6, '1d97c759-0f3b-4bc1-9fd7-3c16c687df8f', 2) -,(106, 'AK7 BS', 0, 104, 106, 7, 7, '7acf9a20-ce02-4599-8dff-60b9016ef686', 2) -,(107, 'AK8 BS', 0, 104, 107, 8, 8, '9150d582-af37-4b78-ba87-0b90ab8575e4', 2) -,(108, 'AK9 BS', 0, 104, 108, 9, 9, 'f3a4c657-271a-4cbf-8e55-9af4e5b4969e', 2) -,(109, 'AK10 BS', 0, 104, 109, 10, 10, '9a982a32-d23b-4773-a3ca-4026e423f713', 2) -,(110, 'AK11 BS', 0, 104, 110, 11, 11, '560c92d9-c933-48db-82bd-1179ff192084', 2) -,(111, 'AK12 BS', 0, 104, 111, 12, 12, 'b1db7166-5ed7-4b85-ace8-86e1fedc28e2', 2) -,(112, 'AK13 BS', 0, 104, 112, 13, 13, '98897413-2ef5-413d-8576-f8abb6ba0b48', 2) -,(113, 'AK13 OS', 0, 104, 113, 13, 13, 'e524c954-9d98-444d-ac9e-88cf79c5131e', 2) -,(114, 'AK14 BS', 0, 104, 114, 14, 14, 'c2c374f7-f1e9-4fe4-950d-eaa05e0c2f97', 2) -,(115, 'AK14 OS', 0, 104, 115, 14, 14, '45b0d639-dc29-44e2-a90a-d6a88ac1475b', 2) -,(116, 'AK15 BS', 0, 104, 116, 15, 15, '0b667b0f-669f-4f5b-b8a5-f42c46e74bbe', 2) -,(117, 'AK15 OS', 0, 104, 117, 15, 15, '4ee6ed37-2a64-4518-97b8-611148422a02', 2) -,(118, 'AK16 BS', 0, 104, 118, 16, 16, '7810e50a-4266-4c21-8d45-bb1183dbe400', 2) -,(119, 'AK16 OS', 0, 104, 119, 16, 16, 'd6f01101-4b40-49fe-bf86-3b91a06ea710', 2) -,(120, 'AK17 BS', 0, 104, 120, 17, 17, '146efa41-443e-437c-8745-c97f688d8b0a', 2) -,(121, 'AK17 OS', 0, 104, 121, 17, 17, '860f1e38-a06b-40e8-a702-31e63eb38ae6', 2) -,(122, 'AK18 BS', 0, 104, 122, 18, 23, '998d8dda-bced-40e0-9df0-84854bd81547', 2) -,(123, 'AK18 OS', 0, 104, 123, 18, 23, '137dfea1-2950-42c5-a754-3b6500213a32', 2) -,(124, 'AK24 BS', 0, 104, 124, 24, 29, '14affd65-77b1-44d7-af7a-1bc12ecb3436', 2) -,(125, 'AK24 OS', 0, 104, 125, 24, 29, '808886d6-2693-4827-b9b9-8cd7ab5e4cb5', 2) -,(126, 'AK30 BS', 0, 104, 126, 30, 34, '0f26b6c6-fdc7-4ef6-89a9-600838c94919', 2) -,(127, 'AK30 OS', 0, 104, 127, 30, 34, 'bcb49baf-0357-4f66-b2ec-1dbbb7ee4ec7', 2) -,(128, 'AK35 BS', 0, 104, 128, 35, 39, '4e333a38-2f94-41f4-90d0-b6789c8789d5', 2) -,(129, 'AK35 OS', 0, 104, 129, 35, 39, '4c4aaac7-9065-4b0a-a78e-20132b6b7495', 2) -,(130, 'AK40 BS', 0, 104, 130, 40, 44, '63637b7c-574e-4dfe-a721-8652d4bfff22', 2) -,(131, 'AK40 OS', 0, 104, 131, 40, 44, '03ffaf4d-3357-4b40-a74f-d0721d25ebf6', 2) -,(132, 'AK45 BS', 0, 104, 132, 45, 49, 'e50260fa-619f-4fa3-a60a-71b21aa6fab2', 2) -,(133, 'AK45 OS', 0, 104, 133, 45, 49, '9c0b75e5-5b3b-42e6-900e-e3010df41192', 2) -,(134, 'AK50 BS', 0, 104, 134, 50, 54, '8f3ff81f-40a2-4ff7-a09b-887811eb144e', 2) -,(135, 'AK50 OS', 0, 104, 135, 50, 54, '40fb8b3f-1ed1-4891-a1af-0fbba48f22b7', 2) -,(136, 'AK55 BS', 0, 104, 136, 55, 59, 'b2429781-7624-4fa0-965e-8322c2ada7f3', 2) -,(137, 'AK55 OS', 0, 104, 137, 55, 59, 'f700ffd4-8475-419d-924a-8aa4a08bbf8f', 2) -,(138, 'AK60 BS', 0, 104, 138, 60, 64, 'be1413ec-d79b-40b3-81a1-dec9d9b2a8a8', 2) -,(139, 'AK60 OS', 0, 104, 139, 60, 64, '753b5150-887a-4fc0-bbf3-236f1ab21a2f', 2); +(104, 'Turn10', 0, 0, 104, 0, 100, 'a766317a-d77a-43d5-9a2b-ecd2fdc1d7a1', 1) +,(105, 'AK6 BS', 0, 104, 105, 0, 6, '5bc0114e-57cc-44f5-892f-57f0a5e9cca4', 1) +,(106, 'AK7 BS', 0, 104, 106, 7, 7, '6809f646-0dd3-4460-b7f1-a91a8f76eb6a', 1) +,(107, 'AK8 BS', 0, 104, 107, 8, 8, 'd1d86247-b792-4f67-8f03-1dc164aa0f26', 1) +,(108, 'AK9 BS', 0, 104, 108, 9, 9, '63dce54e-905e-4687-983d-c68a2e0eb0f8', 1) +,(109, 'AK10 BS', 0, 104, 109, 10, 10, 'bda692f0-7bc4-4c34-a099-6d293288769f', 1) +,(110, 'AK11 BS', 0, 104, 110, 11, 11, '0501d8ff-30a1-4d9c-83a8-acb66497ac30', 1) +,(111, 'AK12 BS', 0, 104, 111, 12, 12, 'f04c16a9-483f-4121-ab36-e39886a1da5d', 1) +,(112, 'AK13 BS', 0, 104, 112, 13, 13, '06c13072-afca-4a81-89be-ff370376690e', 1) +,(113, 'AK13 OS', 0, 104, 113, 13, 13, 'fecaf76e-1325-4b24-a538-0d0d90579f6c', 1) +,(114, 'AK14 BS', 0, 104, 114, 14, 14, '0647bcfb-af6c-4dc7-bbb2-0f074617edba', 1) +,(115, 'AK14 OS', 0, 104, 115, 14, 14, '89c22e20-9606-47d7-994b-a6aff75a909e', 1) +,(116, 'AK15 BS', 0, 104, 116, 15, 15, '63dafc19-d4dc-4d5a-80b8-d7469c03a8b8', 1) +,(117, 'AK15 OS', 0, 104, 117, 15, 15, 'f031d70f-4a47-47d2-ab9b-5e72df3057fd', 1) +,(118, 'AK16 BS', 0, 104, 118, 16, 16, '83a5ae31-59ef-4baa-b02f-7d7250b4e1eb', 1) +,(119, 'AK16 OS', 0, 104, 119, 16, 16, 'c84c7734-04c0-4a00-86ea-a81611e5964f', 1) +,(120, 'AK17 BS', 0, 104, 120, 17, 17, 'f7fb1a93-a38c-4cce-90e4-a999b9c0617c', 1) +,(121, 'AK17 OS', 0, 104, 121, 17, 17, 'ace673b5-710a-4040-ac0f-69bfa1520012', 1) +,(122, 'AK18 BS', 0, 104, 122, 18, 23, 'ccc541b0-282e-42bc-a354-5f90bf8912a7', 1) +,(123, 'AK18 OS', 0, 104, 123, 18, 23, '25b8d881-2a9d-4e19-adf0-a3805d50a200', 1) +,(124, 'AK24 BS', 0, 104, 124, 24, 29, 'd5ae3778-dac6-4733-91ab-0a2ec9461b35', 1) +,(125, 'AK24 OS', 0, 104, 125, 24, 29, '295e69d9-97bb-4ace-a612-c45e6f332148', 1) +,(126, 'AK30 BS', 0, 104, 126, 30, 34, 'f48543fa-cc1b-4fb3-bc88-d8bbf8d55407', 1) +,(127, 'AK30 OS', 0, 104, 127, 30, 34, 'a7af6f33-8bb3-4009-a1c3-9c4f7c1c00c4', 1) +,(128, 'AK35 BS', 0, 104, 128, 35, 39, 'd3344699-f379-4123-9107-14c2cf913edc', 1) +,(129, 'AK35 OS', 0, 104, 129, 35, 39, '5c37985d-d163-4886-8b71-456483ccca9c', 1) +,(130, 'AK40 BS', 0, 104, 130, 40, 44, '5657dd4a-e5d3-4715-941a-c95358642eda', 1) +,(131, 'AK40 OS', 0, 104, 131, 40, 44, '759618c1-3404-48b9-938c-c8bc4e09efa6', 1) +,(132, 'AK45 BS', 0, 104, 132, 45, 49, '8c554196-3971-4c10-82c5-3723b431bc74', 1) +,(133, 'AK45 OS', 0, 104, 133, 45, 49, 'd224818f-ee15-4ce1-b7ea-c0af4e736011', 1) +,(134, 'AK50 BS', 0, 104, 134, 50, 54, '715f01fc-1a39-4a54-9460-38d385b0b26c', 1) +,(135, 'AK50 OS', 0, 104, 135, 50, 54, '5f6ad4fd-6492-4bc7-a35d-4b40b428aa16', 1) +,(136, 'AK55 BS', 0, 104, 136, 55, 59, 'd270d592-fff8-48e8-89d9-7142aa7ca8b9', 1) +,(137, 'AK55 OS', 0, 104, 137, 55, 59, '0a98feb3-3918-4b39-9f5f-89498b68c8f2', 1) +,(138, 'AK60 BS', 0, 104, 138, 60, 64, '1148c029-27fc-476b-9ef6-972169a0b09b', 1) +,(139, 'AK60 OS', 0, 104, 139, 60, 64, '60d42135-f786-4504-84ca-e760981f4b3f', 1); insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(471, 105, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) -,(472, 105, 5, '', '', 1.0, 1, 1, 1, 3, 1, 0, 30, 1) -,(473, 105, 28, '', '', 1.0, 1, 1, 2, 3, 1, 0, 30, 1) -,(474, 105, 30, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) -,(475, 105, 6, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) -,(476, 105, 31, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) +(471, 105, 30, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) +,(472, 105, 31, '', '', 1.0, 1, 1, 1, 3, 1, 0, 30, 1) +,(473, 105, 1, '', '', 1.0, 1, 1, 2, 3, 1, 0, 30, 1) +,(474, 105, 5, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) +,(475, 105, 28, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) +,(476, 105, 6, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) ,(477, 105, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) -,(478, 106, 1, '', '', 1.0, 1, 1, 7, 3, 1, 0, 30, 1) -,(479, 106, 5, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) -,(480, 106, 28, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1) -,(481, 106, 30, '', '', 1.0, 1, 1, 10, 3, 1, 0, 30, 1) -,(482, 106, 6, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) -,(483, 106, 31, '', '', 1.0, 1, 1, 12, 3, 1, 0, 30, 1) +,(478, 106, 30, '', '', 1.0, 1, 1, 7, 3, 1, 0, 30, 1) +,(479, 106, 31, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) +,(480, 106, 1, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1) +,(481, 106, 5, '', '', 1.0, 1, 1, 10, 3, 1, 0, 30, 1) +,(482, 106, 28, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) +,(483, 106, 6, '', '', 1.0, 1, 1, 12, 3, 1, 0, 30, 1) ,(484, 106, 4, '', '', 1.0, 1, 1, 13, 3, 1, 0, 30, 1) -,(485, 107, 1, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) -,(486, 107, 5, '', '', 1.0, 1, 1, 15, 3, 1, 0, 30, 1) -,(487, 107, 28, '', '', 1.0, 1, 1, 16, 3, 1, 0, 30, 1) -,(488, 107, 30, '', '', 1.0, 1, 1, 17, 3, 1, 0, 30, 1) -,(489, 107, 6, '', '', 1.0, 1, 1, 18, 3, 1, 0, 30, 1) -,(490, 107, 31, '', '', 1.0, 1, 1, 19, 3, 1, 0, 30, 1) +,(485, 107, 30, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) +,(486, 107, 31, '', '', 1.0, 1, 1, 15, 3, 1, 0, 30, 1) +,(487, 107, 1, '', '', 1.0, 1, 1, 16, 3, 1, 0, 30, 1) +,(488, 107, 5, '', '', 1.0, 1, 1, 17, 3, 1, 0, 30, 1) +,(489, 107, 28, '', '', 1.0, 1, 1, 18, 3, 1, 0, 30, 1) +,(490, 107, 6, '', '', 1.0, 1, 1, 19, 3, 1, 0, 30, 1) ,(491, 107, 4, '', '', 1.0, 1, 1, 20, 3, 1, 0, 30, 1) -,(492, 108, 1, '', '', 1.0, 1, 1, 21, 3, 1, 0, 30, 1) -,(493, 108, 5, '', '', 1.0, 1, 1, 22, 3, 1, 0, 30, 1) -,(494, 108, 28, '', '', 1.0, 1, 1, 23, 3, 1, 0, 30, 1) -,(495, 108, 30, '', '', 1.0, 1, 1, 24, 3, 1, 0, 30, 1) -,(496, 108, 6, '', '', 1.0, 1, 1, 25, 3, 1, 0, 30, 1) -,(497, 108, 31, '', '', 1.0, 1, 1, 26, 3, 1, 0, 30, 1) +,(492, 108, 30, '', '', 1.0, 1, 1, 21, 3, 1, 0, 30, 1) +,(493, 108, 31, '', '', 1.0, 1, 1, 22, 3, 1, 0, 30, 1) +,(494, 108, 1, '', '', 1.0, 1, 1, 23, 3, 1, 0, 30, 1) +,(495, 108, 5, '', '', 1.0, 1, 1, 24, 3, 1, 0, 30, 1) +,(496, 108, 28, '', '', 1.0, 1, 1, 25, 3, 1, 0, 30, 1) +,(497, 108, 6, '', '', 1.0, 1, 1, 26, 3, 1, 0, 30, 1) ,(498, 108, 4, '', '', 1.0, 1, 1, 27, 3, 1, 0, 30, 1) -,(499, 109, 1, '', '', 1.0, 1, 1, 28, 3, 1, 0, 30, 1) -,(500, 109, 5, '', '', 1.0, 1, 1, 29, 3, 1, 0, 30, 1) -,(501, 109, 28, '', '', 1.0, 1, 1, 30, 3, 1, 0, 30, 1) -,(502, 109, 30, '', '', 1.0, 1, 1, 31, 3, 1, 0, 30, 1) -,(503, 109, 6, '', '', 1.0, 1, 1, 32, 3, 1, 0, 30, 1) -,(504, 109, 31, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) +,(499, 109, 30, '', '', 1.0, 1, 1, 28, 3, 1, 0, 30, 1) +,(500, 109, 31, '', '', 1.0, 1, 1, 29, 3, 1, 0, 30, 1) +,(501, 109, 1, '', '', 1.0, 1, 1, 30, 3, 1, 0, 30, 1) +,(502, 109, 5, '', '', 1.0, 1, 1, 31, 3, 1, 0, 30, 1) +,(503, 109, 28, '', '', 1.0, 1, 1, 32, 3, 1, 0, 30, 1) +,(504, 109, 6, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) ,(505, 109, 4, '', '', 1.0, 1, 1, 34, 3, 1, 0, 30, 1) -,(506, 110, 1, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1) -,(507, 110, 5, '', '', 1.0, 1, 1, 36, 3, 1, 0, 30, 1) -,(508, 110, 28, '', '', 1.0, 1, 1, 37, 3, 1, 0, 30, 1) -,(509, 110, 30, '', '', 1.0, 1, 1, 38, 3, 1, 0, 30, 1) -,(510, 110, 6, '', '', 1.0, 1, 1, 39, 3, 1, 0, 30, 1) -,(511, 110, 31, '', '', 1.0, 1, 1, 40, 3, 1, 0, 30, 1) +,(506, 110, 30, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1) +,(507, 110, 31, '', '', 1.0, 1, 1, 36, 3, 1, 0, 30, 1) +,(508, 110, 1, '', '', 1.0, 1, 1, 37, 3, 1, 0, 30, 1) +,(509, 110, 5, '', '', 1.0, 1, 1, 38, 3, 1, 0, 30, 1) +,(510, 110, 28, '', '', 1.0, 1, 1, 39, 3, 1, 0, 30, 1) +,(511, 110, 6, '', '', 1.0, 1, 1, 40, 3, 1, 0, 30, 1) ,(512, 110, 4, '', '', 1.0, 1, 1, 41, 3, 1, 0, 30, 1) -,(513, 111, 1, '', '', 1.0, 1, 1, 42, 3, 1, 0, 30, 1) -,(514, 111, 5, '', '', 1.0, 1, 1, 43, 3, 1, 0, 30, 1) -,(515, 111, 28, '', '', 1.0, 1, 1, 44, 3, 1, 0, 30, 1) -,(516, 111, 30, '', '', 1.0, 1, 1, 45, 3, 1, 0, 30, 1) -,(517, 111, 6, '', '', 1.0, 1, 1, 46, 3, 1, 0, 30, 1) -,(518, 111, 31, '', '', 1.0, 1, 1, 47, 3, 1, 0, 30, 1) +,(513, 111, 30, '', '', 1.0, 1, 1, 42, 3, 1, 0, 30, 1) +,(514, 111, 31, '', '', 1.0, 1, 1, 43, 3, 1, 0, 30, 1) +,(515, 111, 1, '', '', 1.0, 1, 1, 44, 3, 1, 0, 30, 1) +,(516, 111, 5, '', '', 1.0, 1, 1, 45, 3, 1, 0, 30, 1) +,(517, 111, 28, '', '', 1.0, 1, 1, 46, 3, 1, 0, 30, 1) +,(518, 111, 6, '', '', 1.0, 1, 1, 47, 3, 1, 0, 30, 1) ,(519, 111, 4, '', '', 1.0, 1, 1, 48, 3, 1, 0, 30, 1) -,(520, 112, 1, '', '', 1.0, 1, 1, 49, 3, 1, 0, 30, 1) -,(521, 112, 5, '', '', 1.0, 1, 1, 50, 3, 1, 0, 30, 1) -,(522, 112, 28, '', '', 1.0, 1, 1, 51, 3, 1, 0, 30, 1) -,(523, 112, 30, '', '', 1.0, 1, 1, 52, 3, 1, 0, 30, 1) -,(524, 112, 6, '', '', 1.0, 1, 1, 53, 3, 1, 0, 30, 1) -,(525, 112, 31, '', '', 1.0, 1, 1, 54, 3, 1, 0, 30, 1) +,(520, 112, 30, '', '', 1.0, 1, 1, 49, 3, 1, 0, 30, 1) +,(521, 112, 31, '', '', 1.0, 1, 1, 50, 3, 1, 0, 30, 1) +,(522, 112, 1, '', '', 1.0, 1, 1, 51, 3, 1, 0, 30, 1) +,(523, 112, 5, '', '', 1.0, 1, 1, 52, 3, 1, 0, 30, 1) +,(524, 112, 28, '', '', 1.0, 1, 1, 53, 3, 1, 0, 30, 1) +,(525, 112, 6, '', '', 1.0, 1, 1, 54, 3, 1, 0, 30, 1) ,(526, 112, 4, '', '', 1.0, 1, 1, 55, 3, 1, 0, 30, 1) -,(527, 113, 1, '', '', 1.0, 1, 1, 56, 3, 1, 0, 30, 1) -,(528, 113, 5, '', '', 1.0, 1, 1, 57, 3, 1, 0, 30, 1) -,(529, 113, 28, '', '', 1.0, 1, 1, 58, 3, 1, 0, 30, 1) -,(530, 113, 30, '', '', 1.0, 1, 1, 59, 3, 1, 0, 30, 1) -,(531, 113, 6, '', '', 1.0, 1, 1, 60, 3, 1, 0, 30, 1) -,(532, 113, 31, '', '', 1.0, 1, 1, 61, 3, 1, 0, 30, 1) +,(527, 113, 30, '', '', 1.0, 1, 1, 56, 3, 1, 0, 30, 1) +,(528, 113, 31, '', '', 1.0, 1, 1, 57, 3, 1, 0, 30, 1) +,(529, 113, 1, '', '', 1.0, 1, 1, 58, 3, 1, 0, 30, 1) +,(530, 113, 5, '', '', 1.0, 1, 1, 59, 3, 1, 0, 30, 1) +,(531, 113, 28, '', '', 1.0, 1, 1, 60, 3, 1, 0, 30, 1) +,(532, 113, 6, '', '', 1.0, 1, 1, 61, 3, 1, 0, 30, 1) ,(533, 113, 4, '', '', 1.0, 1, 1, 62, 3, 1, 0, 30, 1) -,(534, 114, 1, '', '', 1.0, 1, 1, 63, 3, 1, 0, 30, 1) -,(535, 114, 5, '', '', 1.0, 1, 1, 64, 3, 1, 0, 30, 1) -,(536, 114, 28, '', '', 1.0, 1, 1, 65, 3, 1, 0, 30, 1) -,(537, 114, 30, '', '', 1.0, 1, 1, 66, 3, 1, 0, 30, 1) -,(538, 114, 6, '', '', 1.0, 1, 1, 67, 3, 1, 0, 30, 1) -,(539, 114, 31, '', '', 1.0, 1, 1, 68, 3, 1, 0, 30, 1) +,(534, 114, 30, '', '', 1.0, 1, 1, 63, 3, 1, 0, 30, 1) +,(535, 114, 31, '', '', 1.0, 1, 1, 64, 3, 1, 0, 30, 1) +,(536, 114, 1, '', '', 1.0, 1, 1, 65, 3, 1, 0, 30, 1) +,(537, 114, 5, '', '', 1.0, 1, 1, 66, 3, 1, 0, 30, 1) +,(538, 114, 28, '', '', 1.0, 1, 1, 67, 3, 1, 0, 30, 1) +,(539, 114, 6, '', '', 1.0, 1, 1, 68, 3, 1, 0, 30, 1) ,(540, 114, 4, '', '', 1.0, 1, 1, 69, 3, 1, 0, 30, 1) -,(541, 115, 1, '', '', 1.0, 1, 1, 70, 3, 1, 0, 30, 1) -,(542, 115, 5, '', '', 1.0, 1, 1, 71, 3, 1, 0, 30, 1) -,(543, 115, 28, '', '', 1.0, 1, 1, 72, 3, 1, 0, 30, 1) -,(544, 115, 30, '', '', 1.0, 1, 1, 73, 3, 1, 0, 30, 1) -,(545, 115, 6, '', '', 1.0, 1, 1, 74, 3, 1, 0, 30, 1) -,(546, 115, 31, '', '', 1.0, 1, 1, 75, 3, 1, 0, 30, 1) +,(541, 115, 30, '', '', 1.0, 1, 1, 70, 3, 1, 0, 30, 1) +,(542, 115, 31, '', '', 1.0, 1, 1, 71, 3, 1, 0, 30, 1) +,(543, 115, 1, '', '', 1.0, 1, 1, 72, 3, 1, 0, 30, 1) +,(544, 115, 5, '', '', 1.0, 1, 1, 73, 3, 1, 0, 30, 1) +,(545, 115, 28, '', '', 1.0, 1, 1, 74, 3, 1, 0, 30, 1) +,(546, 115, 6, '', '', 1.0, 1, 1, 75, 3, 1, 0, 30, 1) ,(547, 115, 4, '', '', 1.0, 1, 1, 76, 3, 1, 0, 30, 1) -,(548, 116, 1, '', '', 1.0, 1, 1, 77, 3, 1, 0, 30, 1) -,(549, 116, 5, '', '', 1.0, 1, 1, 78, 3, 1, 0, 30, 1) -,(550, 116, 28, '', '', 1.0, 1, 1, 79, 3, 1, 0, 30, 1) -,(551, 116, 30, '', '', 1.0, 1, 1, 80, 3, 1, 0, 30, 1) -,(552, 116, 6, '', '', 1.0, 1, 1, 81, 3, 1, 0, 30, 1) -,(553, 116, 31, '', '', 1.0, 1, 1, 82, 3, 1, 0, 30, 1) +,(548, 116, 30, '', '', 1.0, 1, 1, 77, 3, 1, 0, 30, 1) +,(549, 116, 31, '', '', 1.0, 1, 1, 78, 3, 1, 0, 30, 1) +,(550, 116, 1, '', '', 1.0, 1, 1, 79, 3, 1, 0, 30, 1) +,(551, 116, 5, '', '', 1.0, 1, 1, 80, 3, 1, 0, 30, 1) +,(552, 116, 28, '', '', 1.0, 1, 1, 81, 3, 1, 0, 30, 1) +,(553, 116, 6, '', '', 1.0, 1, 1, 82, 3, 1, 0, 30, 1) ,(554, 116, 4, '', '', 1.0, 1, 1, 83, 3, 1, 0, 30, 1) -,(555, 117, 1, '', '', 1.0, 1, 1, 84, 3, 1, 0, 30, 1) -,(556, 117, 5, '', '', 1.0, 1, 1, 85, 3, 1, 0, 30, 1) -,(557, 117, 28, '', '', 1.0, 1, 1, 86, 3, 1, 0, 30, 1) -,(558, 117, 30, '', '', 1.0, 1, 1, 87, 3, 1, 0, 30, 1) -,(559, 117, 6, '', '', 1.0, 1, 1, 88, 3, 1, 0, 30, 1) -,(560, 117, 31, '', '', 1.0, 1, 1, 89, 3, 1, 0, 30, 1) +,(555, 117, 30, '', '', 1.0, 1, 1, 84, 3, 1, 0, 30, 1) +,(556, 117, 31, '', '', 1.0, 1, 1, 85, 3, 1, 0, 30, 1) +,(557, 117, 1, '', '', 1.0, 1, 1, 86, 3, 1, 0, 30, 1) +,(558, 117, 5, '', '', 1.0, 1, 1, 87, 3, 1, 0, 30, 1) +,(559, 117, 28, '', '', 1.0, 1, 1, 88, 3, 1, 0, 30, 1) +,(560, 117, 6, '', '', 1.0, 1, 1, 89, 3, 1, 0, 30, 1) ,(561, 117, 4, '', '', 1.0, 1, 1, 90, 3, 1, 0, 30, 1) -,(562, 118, 1, '', '', 1.0, 1, 1, 91, 3, 1, 0, 30, 1) -,(563, 118, 5, '', '', 1.0, 1, 1, 92, 3, 1, 0, 30, 1) -,(564, 118, 28, '', '', 1.0, 1, 1, 93, 3, 1, 0, 30, 1) -,(565, 118, 30, '', '', 1.0, 1, 1, 94, 3, 1, 0, 30, 1) -,(566, 118, 6, '', '', 1.0, 1, 1, 95, 3, 1, 0, 30, 1) -,(567, 118, 31, '', '', 1.0, 1, 1, 96, 3, 1, 0, 30, 1) +,(562, 118, 30, '', '', 1.0, 1, 1, 91, 3, 1, 0, 30, 1) +,(563, 118, 31, '', '', 1.0, 1, 1, 92, 3, 1, 0, 30, 1) +,(564, 118, 1, '', '', 1.0, 1, 1, 93, 3, 1, 0, 30, 1) +,(565, 118, 5, '', '', 1.0, 1, 1, 94, 3, 1, 0, 30, 1) +,(566, 118, 28, '', '', 1.0, 1, 1, 95, 3, 1, 0, 30, 1) +,(567, 118, 6, '', '', 1.0, 1, 1, 96, 3, 1, 0, 30, 1) ,(568, 118, 4, '', '', 1.0, 1, 1, 97, 3, 1, 0, 30, 1) -,(569, 119, 1, '', '', 1.0, 1, 1, 98, 3, 1, 0, 30, 1) -,(570, 119, 5, '', '', 1.0, 1, 1, 99, 3, 1, 0, 30, 1) -,(571, 119, 28, '', '', 1.0, 1, 1, 100, 3, 1, 0, 30, 1) -,(572, 119, 30, '', '', 1.0, 1, 1, 101, 3, 1, 0, 30, 1) -,(573, 119, 6, '', '', 1.0, 1, 1, 102, 3, 1, 0, 30, 1) -,(574, 119, 31, '', '', 1.0, 1, 1, 103, 3, 1, 0, 30, 1) +,(569, 119, 30, '', '', 1.0, 1, 1, 98, 3, 1, 0, 30, 1) +,(570, 119, 31, '', '', 1.0, 1, 1, 99, 3, 1, 0, 30, 1) +,(571, 119, 1, '', '', 1.0, 1, 1, 100, 3, 1, 0, 30, 1) +,(572, 119, 5, '', '', 1.0, 1, 1, 101, 3, 1, 0, 30, 1) +,(573, 119, 28, '', '', 1.0, 1, 1, 102, 3, 1, 0, 30, 1) +,(574, 119, 6, '', '', 1.0, 1, 1, 103, 3, 1, 0, 30, 1) ,(575, 119, 4, '', '', 1.0, 1, 1, 104, 3, 1, 0, 30, 1) -,(576, 120, 1, '', '', 1.0, 1, 1, 105, 3, 1, 0, 30, 1) -,(577, 120, 5, '', '', 1.0, 1, 1, 106, 3, 1, 0, 30, 1) -,(578, 120, 28, '', '', 1.0, 1, 1, 107, 3, 1, 0, 30, 1) -,(579, 120, 30, '', '', 1.0, 1, 1, 108, 3, 1, 0, 30, 1) -,(580, 120, 6, '', '', 1.0, 1, 1, 109, 3, 1, 0, 30, 1) -,(581, 120, 31, '', '', 1.0, 1, 1, 110, 3, 1, 0, 30, 1) +,(576, 120, 30, '', '', 1.0, 1, 1, 105, 3, 1, 0, 30, 1) +,(577, 120, 31, '', '', 1.0, 1, 1, 106, 3, 1, 0, 30, 1) +,(578, 120, 1, '', '', 1.0, 1, 1, 107, 3, 1, 0, 30, 1) +,(579, 120, 5, '', '', 1.0, 1, 1, 108, 3, 1, 0, 30, 1) +,(580, 120, 28, '', '', 1.0, 1, 1, 109, 3, 1, 0, 30, 1) +,(581, 120, 6, '', '', 1.0, 1, 1, 110, 3, 1, 0, 30, 1) ,(582, 120, 4, '', '', 1.0, 1, 1, 111, 3, 1, 0, 30, 1) -,(583, 121, 1, '', '', 1.0, 1, 1, 112, 3, 1, 0, 30, 1) -,(584, 121, 5, '', '', 1.0, 1, 1, 113, 3, 1, 0, 30, 1) -,(585, 121, 28, '', '', 1.0, 1, 1, 114, 3, 1, 0, 30, 1) -,(586, 121, 30, '', '', 1.0, 1, 1, 115, 3, 1, 0, 30, 1) -,(587, 121, 6, '', '', 1.0, 1, 1, 116, 3, 1, 0, 30, 1) -,(588, 121, 31, '', '', 1.0, 1, 1, 117, 3, 1, 0, 30, 1) +,(583, 121, 30, '', '', 1.0, 1, 1, 112, 3, 1, 0, 30, 1) +,(584, 121, 31, '', '', 1.0, 1, 1, 113, 3, 1, 0, 30, 1) +,(585, 121, 1, '', '', 1.0, 1, 1, 114, 3, 1, 0, 30, 1) +,(586, 121, 5, '', '', 1.0, 1, 1, 115, 3, 1, 0, 30, 1) +,(587, 121, 28, '', '', 1.0, 1, 1, 116, 3, 1, 0, 30, 1) +,(588, 121, 6, '', '', 1.0, 1, 1, 117, 3, 1, 0, 30, 1) ,(589, 121, 4, '', '', 1.0, 1, 1, 118, 3, 1, 0, 30, 1) -,(590, 122, 1, '', '', 1.0, 1, 1, 119, 3, 1, 0, 30, 1) -,(591, 122, 5, '', '', 1.0, 1, 1, 120, 3, 1, 0, 30, 1) -,(592, 122, 28, '', '', 1.0, 1, 1, 121, 3, 1, 0, 30, 1) -,(593, 122, 30, '', '', 1.0, 1, 1, 122, 3, 1, 0, 30, 1) -,(594, 122, 6, '', '', 1.0, 1, 1, 123, 3, 1, 0, 30, 1) -,(595, 122, 31, '', '', 1.0, 1, 1, 124, 3, 1, 0, 30, 1) +,(590, 122, 30, '', '', 1.0, 1, 1, 119, 3, 1, 0, 30, 1) +,(591, 122, 31, '', '', 1.0, 1, 1, 120, 3, 1, 0, 30, 1) +,(592, 122, 1, '', '', 1.0, 1, 1, 121, 3, 1, 0, 30, 1) +,(593, 122, 5, '', '', 1.0, 1, 1, 122, 3, 1, 0, 30, 1) +,(594, 122, 28, '', '', 1.0, 1, 1, 123, 3, 1, 0, 30, 1) +,(595, 122, 6, '', '', 1.0, 1, 1, 124, 3, 1, 0, 30, 1) ,(596, 122, 4, '', '', 1.0, 1, 1, 125, 3, 1, 0, 30, 1) -,(597, 123, 1, '', '', 1.0, 1, 1, 126, 3, 1, 0, 30, 1) -,(598, 123, 5, '', '', 1.0, 1, 1, 127, 3, 1, 0, 30, 1) -,(599, 123, 28, '', '', 1.0, 1, 1, 128, 3, 1, 0, 30, 1) -,(600, 123, 30, '', '', 1.0, 1, 1, 129, 3, 1, 0, 30, 1) -,(601, 123, 6, '', '', 1.0, 1, 1, 130, 3, 1, 0, 30, 1) -,(602, 123, 31, '', '', 1.0, 1, 1, 131, 3, 1, 0, 30, 1) +,(597, 123, 30, '', '', 1.0, 1, 1, 126, 3, 1, 0, 30, 1) +,(598, 123, 31, '', '', 1.0, 1, 1, 127, 3, 1, 0, 30, 1) +,(599, 123, 1, '', '', 1.0, 1, 1, 128, 3, 1, 0, 30, 1) +,(600, 123, 5, '', '', 1.0, 1, 1, 129, 3, 1, 0, 30, 1) +,(601, 123, 28, '', '', 1.0, 1, 1, 130, 3, 1, 0, 30, 1) +,(602, 123, 6, '', '', 1.0, 1, 1, 131, 3, 1, 0, 30, 1) ,(603, 123, 4, '', '', 1.0, 1, 1, 132, 3, 1, 0, 30, 1) -,(604, 124, 1, '', '', 1.0, 1, 1, 133, 3, 1, 0, 30, 1) -,(605, 124, 5, '', '', 1.0, 1, 1, 134, 3, 1, 0, 30, 1) -,(606, 124, 28, '', '', 1.0, 1, 1, 135, 3, 1, 0, 30, 1) -,(607, 124, 30, '', '', 1.0, 1, 1, 136, 3, 1, 0, 30, 1) -,(608, 124, 6, '', '', 1.0, 1, 1, 137, 3, 1, 0, 30, 1) -,(609, 124, 31, '', '', 1.0, 1, 1, 138, 3, 1, 0, 30, 1) +,(604, 124, 30, '', '', 1.0, 1, 1, 133, 3, 1, 0, 30, 1) +,(605, 124, 31, '', '', 1.0, 1, 1, 134, 3, 1, 0, 30, 1) +,(606, 124, 1, '', '', 1.0, 1, 1, 135, 3, 1, 0, 30, 1) +,(607, 124, 5, '', '', 1.0, 1, 1, 136, 3, 1, 0, 30, 1) +,(608, 124, 28, '', '', 1.0, 1, 1, 137, 3, 1, 0, 30, 1) +,(609, 124, 6, '', '', 1.0, 1, 1, 138, 3, 1, 0, 30, 1) ,(610, 124, 4, '', '', 1.0, 1, 1, 139, 3, 1, 0, 30, 1) -,(611, 125, 1, '', '', 1.0, 1, 1, 140, 3, 1, 0, 30, 1) -,(612, 125, 5, '', '', 1.0, 1, 1, 141, 3, 1, 0, 30, 1) -,(613, 125, 28, '', '', 1.0, 1, 1, 142, 3, 1, 0, 30, 1) -,(614, 125, 30, '', '', 1.0, 1, 1, 143, 3, 1, 0, 30, 1) -,(615, 125, 6, '', '', 1.0, 1, 1, 144, 3, 1, 0, 30, 1) -,(616, 125, 31, '', '', 1.0, 1, 1, 145, 3, 1, 0, 30, 1) +,(611, 125, 30, '', '', 1.0, 1, 1, 140, 3, 1, 0, 30, 1) +,(612, 125, 31, '', '', 1.0, 1, 1, 141, 3, 1, 0, 30, 1) +,(613, 125, 1, '', '', 1.0, 1, 1, 142, 3, 1, 0, 30, 1) +,(614, 125, 5, '', '', 1.0, 1, 1, 143, 3, 1, 0, 30, 1) +,(615, 125, 28, '', '', 1.0, 1, 1, 144, 3, 1, 0, 30, 1) +,(616, 125, 6, '', '', 1.0, 1, 1, 145, 3, 1, 0, 30, 1) ,(617, 125, 4, '', '', 1.0, 1, 1, 146, 3, 1, 0, 30, 1) -,(618, 126, 1, '', '', 1.0, 1, 1, 147, 3, 1, 0, 30, 1) -,(619, 126, 5, '', '', 1.0, 1, 1, 148, 3, 1, 0, 30, 1) -,(620, 126, 28, '', '', 1.0, 1, 1, 149, 3, 1, 0, 30, 1) -,(621, 126, 30, '', '', 1.0, 1, 1, 150, 3, 1, 0, 30, 1) -,(622, 126, 6, '', '', 1.0, 1, 1, 151, 3, 1, 0, 30, 1) -,(623, 126, 31, '', '', 1.0, 1, 1, 152, 3, 1, 0, 30, 1) +,(618, 126, 30, '', '', 1.0, 1, 1, 147, 3, 1, 0, 30, 1) +,(619, 126, 31, '', '', 1.0, 1, 1, 148, 3, 1, 0, 30, 1) +,(620, 126, 1, '', '', 1.0, 1, 1, 149, 3, 1, 0, 30, 1) +,(621, 126, 5, '', '', 1.0, 1, 1, 150, 3, 1, 0, 30, 1) +,(622, 126, 28, '', '', 1.0, 1, 1, 151, 3, 1, 0, 30, 1) +,(623, 126, 6, '', '', 1.0, 1, 1, 152, 3, 1, 0, 30, 1) ,(624, 126, 4, '', '', 1.0, 1, 1, 153, 3, 1, 0, 30, 1) -,(625, 127, 1, '', '', 1.0, 1, 1, 154, 3, 1, 0, 30, 1) -,(626, 127, 5, '', '', 1.0, 1, 1, 155, 3, 1, 0, 30, 1) -,(627, 127, 28, '', '', 1.0, 1, 1, 156, 3, 1, 0, 30, 1) -,(628, 127, 30, '', '', 1.0, 1, 1, 157, 3, 1, 0, 30, 1) -,(629, 127, 6, '', '', 1.0, 1, 1, 158, 3, 1, 0, 30, 1) -,(630, 127, 31, '', '', 1.0, 1, 1, 159, 3, 1, 0, 30, 1) +,(625, 127, 30, '', '', 1.0, 1, 1, 154, 3, 1, 0, 30, 1) +,(626, 127, 31, '', '', 1.0, 1, 1, 155, 3, 1, 0, 30, 1) +,(627, 127, 1, '', '', 1.0, 1, 1, 156, 3, 1, 0, 30, 1) +,(628, 127, 5, '', '', 1.0, 1, 1, 157, 3, 1, 0, 30, 1) +,(629, 127, 28, '', '', 1.0, 1, 1, 158, 3, 1, 0, 30, 1) +,(630, 127, 6, '', '', 1.0, 1, 1, 159, 3, 1, 0, 30, 1) ,(631, 127, 4, '', '', 1.0, 1, 1, 160, 3, 1, 0, 30, 1) -,(632, 128, 1, '', '', 1.0, 1, 1, 161, 3, 1, 0, 30, 1) -,(633, 128, 5, '', '', 1.0, 1, 1, 162, 3, 1, 0, 30, 1) -,(634, 128, 28, '', '', 1.0, 1, 1, 163, 3, 1, 0, 30, 1) -,(635, 128, 30, '', '', 1.0, 1, 1, 164, 3, 1, 0, 30, 1) -,(636, 128, 6, '', '', 1.0, 1, 1, 165, 3, 1, 0, 30, 1) -,(637, 128, 31, '', '', 1.0, 1, 1, 166, 3, 1, 0, 30, 1) +,(632, 128, 30, '', '', 1.0, 1, 1, 161, 3, 1, 0, 30, 1) +,(633, 128, 31, '', '', 1.0, 1, 1, 162, 3, 1, 0, 30, 1) +,(634, 128, 1, '', '', 1.0, 1, 1, 163, 3, 1, 0, 30, 1) +,(635, 128, 5, '', '', 1.0, 1, 1, 164, 3, 1, 0, 30, 1) +,(636, 128, 28, '', '', 1.0, 1, 1, 165, 3, 1, 0, 30, 1) +,(637, 128, 6, '', '', 1.0, 1, 1, 166, 3, 1, 0, 30, 1) ,(638, 128, 4, '', '', 1.0, 1, 1, 167, 3, 1, 0, 30, 1) -,(639, 129, 1, '', '', 1.0, 1, 1, 168, 3, 1, 0, 30, 1) -,(640, 129, 5, '', '', 1.0, 1, 1, 169, 3, 1, 0, 30, 1) -,(641, 129, 28, '', '', 1.0, 1, 1, 170, 3, 1, 0, 30, 1) -,(642, 129, 30, '', '', 1.0, 1, 1, 171, 3, 1, 0, 30, 1) -,(643, 129, 6, '', '', 1.0, 1, 1, 172, 3, 1, 0, 30, 1) -,(644, 129, 31, '', '', 1.0, 1, 1, 173, 3, 1, 0, 30, 1) +,(639, 129, 30, '', '', 1.0, 1, 1, 168, 3, 1, 0, 30, 1) +,(640, 129, 31, '', '', 1.0, 1, 1, 169, 3, 1, 0, 30, 1) +,(641, 129, 1, '', '', 1.0, 1, 1, 170, 3, 1, 0, 30, 1) +,(642, 129, 5, '', '', 1.0, 1, 1, 171, 3, 1, 0, 30, 1) +,(643, 129, 28, '', '', 1.0, 1, 1, 172, 3, 1, 0, 30, 1) +,(644, 129, 6, '', '', 1.0, 1, 1, 173, 3, 1, 0, 30, 1) ,(645, 129, 4, '', '', 1.0, 1, 1, 174, 3, 1, 0, 30, 1) -,(646, 130, 1, '', '', 1.0, 1, 1, 175, 3, 1, 0, 30, 1) -,(647, 130, 5, '', '', 1.0, 1, 1, 176, 3, 1, 0, 30, 1) -,(648, 130, 28, '', '', 1.0, 1, 1, 177, 3, 1, 0, 30, 1) -,(649, 130, 30, '', '', 1.0, 1, 1, 178, 3, 1, 0, 30, 1) -,(650, 130, 6, '', '', 1.0, 1, 1, 179, 3, 1, 0, 30, 1) -,(651, 130, 31, '', '', 1.0, 1, 1, 180, 3, 1, 0, 30, 1) +,(646, 130, 30, '', '', 1.0, 1, 1, 175, 3, 1, 0, 30, 1) +,(647, 130, 31, '', '', 1.0, 1, 1, 176, 3, 1, 0, 30, 1) +,(648, 130, 1, '', '', 1.0, 1, 1, 177, 3, 1, 0, 30, 1) +,(649, 130, 5, '', '', 1.0, 1, 1, 178, 3, 1, 0, 30, 1) +,(650, 130, 28, '', '', 1.0, 1, 1, 179, 3, 1, 0, 30, 1) +,(651, 130, 6, '', '', 1.0, 1, 1, 180, 3, 1, 0, 30, 1) ,(652, 130, 4, '', '', 1.0, 1, 1, 181, 3, 1, 0, 30, 1) -,(653, 131, 1, '', '', 1.0, 1, 1, 182, 3, 1, 0, 30, 1) -,(654, 131, 5, '', '', 1.0, 1, 1, 183, 3, 1, 0, 30, 1) -,(655, 131, 28, '', '', 1.0, 1, 1, 184, 3, 1, 0, 30, 1) -,(656, 131, 30, '', '', 1.0, 1, 1, 185, 3, 1, 0, 30, 1) -,(657, 131, 6, '', '', 1.0, 1, 1, 186, 3, 1, 0, 30, 1) -,(658, 131, 31, '', '', 1.0, 1, 1, 187, 3, 1, 0, 30, 1) +,(653, 131, 30, '', '', 1.0, 1, 1, 182, 3, 1, 0, 30, 1) +,(654, 131, 31, '', '', 1.0, 1, 1, 183, 3, 1, 0, 30, 1) +,(655, 131, 1, '', '', 1.0, 1, 1, 184, 3, 1, 0, 30, 1) +,(656, 131, 5, '', '', 1.0, 1, 1, 185, 3, 1, 0, 30, 1) +,(657, 131, 28, '', '', 1.0, 1, 1, 186, 3, 1, 0, 30, 1) +,(658, 131, 6, '', '', 1.0, 1, 1, 187, 3, 1, 0, 30, 1) ,(659, 131, 4, '', '', 1.0, 1, 1, 188, 3, 1, 0, 30, 1) -,(660, 132, 1, '', '', 1.0, 1, 1, 189, 3, 1, 0, 30, 1) -,(661, 132, 5, '', '', 1.0, 1, 1, 190, 3, 1, 0, 30, 1) -,(662, 132, 28, '', '', 1.0, 1, 1, 191, 3, 1, 0, 30, 1) -,(663, 132, 30, '', '', 1.0, 1, 1, 192, 3, 1, 0, 30, 1) -,(664, 132, 6, '', '', 1.0, 1, 1, 193, 3, 1, 0, 30, 1) -,(665, 132, 31, '', '', 1.0, 1, 1, 194, 3, 1, 0, 30, 1) +,(660, 132, 30, '', '', 1.0, 1, 1, 189, 3, 1, 0, 30, 1) +,(661, 132, 31, '', '', 1.0, 1, 1, 190, 3, 1, 0, 30, 1) +,(662, 132, 1, '', '', 1.0, 1, 1, 191, 3, 1, 0, 30, 1) +,(663, 132, 5, '', '', 1.0, 1, 1, 192, 3, 1, 0, 30, 1) +,(664, 132, 28, '', '', 1.0, 1, 1, 193, 3, 1, 0, 30, 1) +,(665, 132, 6, '', '', 1.0, 1, 1, 194, 3, 1, 0, 30, 1) ,(666, 132, 4, '', '', 1.0, 1, 1, 195, 3, 1, 0, 30, 1) -,(667, 133, 1, '', '', 1.0, 1, 1, 196, 3, 1, 0, 30, 1) -,(668, 133, 5, '', '', 1.0, 1, 1, 197, 3, 1, 0, 30, 1) -,(669, 133, 28, '', '', 1.0, 1, 1, 198, 3, 1, 0, 30, 1) -,(670, 133, 30, '', '', 1.0, 1, 1, 199, 3, 1, 0, 30, 1) -,(671, 133, 6, '', '', 1.0, 1, 1, 200, 3, 1, 0, 30, 1) -,(672, 133, 31, '', '', 1.0, 1, 1, 201, 3, 1, 0, 30, 1) +,(667, 133, 30, '', '', 1.0, 1, 1, 196, 3, 1, 0, 30, 1) +,(668, 133, 31, '', '', 1.0, 1, 1, 197, 3, 1, 0, 30, 1) +,(669, 133, 1, '', '', 1.0, 1, 1, 198, 3, 1, 0, 30, 1) +,(670, 133, 5, '', '', 1.0, 1, 1, 199, 3, 1, 0, 30, 1) +,(671, 133, 28, '', '', 1.0, 1, 1, 200, 3, 1, 0, 30, 1) +,(672, 133, 6, '', '', 1.0, 1, 1, 201, 3, 1, 0, 30, 1) ,(673, 133, 4, '', '', 1.0, 1, 1, 202, 3, 1, 0, 30, 1) -,(674, 134, 1, '', '', 1.0, 1, 1, 203, 3, 1, 0, 30, 1) -,(675, 134, 5, '', '', 1.0, 1, 1, 204, 3, 1, 0, 30, 1) -,(676, 134, 28, '', '', 1.0, 1, 1, 205, 3, 1, 0, 30, 1) -,(677, 134, 30, '', '', 1.0, 1, 1, 206, 3, 1, 0, 30, 1) -,(678, 134, 6, '', '', 1.0, 1, 1, 207, 3, 1, 0, 30, 1) -,(679, 134, 31, '', '', 1.0, 1, 1, 208, 3, 1, 0, 30, 1) +,(674, 134, 30, '', '', 1.0, 1, 1, 203, 3, 1, 0, 30, 1) +,(675, 134, 31, '', '', 1.0, 1, 1, 204, 3, 1, 0, 30, 1) +,(676, 134, 1, '', '', 1.0, 1, 1, 205, 3, 1, 0, 30, 1) +,(677, 134, 5, '', '', 1.0, 1, 1, 206, 3, 1, 0, 30, 1) +,(678, 134, 28, '', '', 1.0, 1, 1, 207, 3, 1, 0, 30, 1) +,(679, 134, 6, '', '', 1.0, 1, 1, 208, 3, 1, 0, 30, 1) ,(680, 134, 4, '', '', 1.0, 1, 1, 209, 3, 1, 0, 30, 1) -,(681, 135, 1, '', '', 1.0, 1, 1, 210, 3, 1, 0, 30, 1) -,(682, 135, 5, '', '', 1.0, 1, 1, 211, 3, 1, 0, 30, 1) -,(683, 135, 28, '', '', 1.0, 1, 1, 212, 3, 1, 0, 30, 1) -,(684, 135, 30, '', '', 1.0, 1, 1, 213, 3, 1, 0, 30, 1) -,(685, 135, 6, '', '', 1.0, 1, 1, 214, 3, 1, 0, 30, 1) -,(686, 135, 31, '', '', 1.0, 1, 1, 215, 3, 1, 0, 30, 1) +,(681, 135, 30, '', '', 1.0, 1, 1, 210, 3, 1, 0, 30, 1) +,(682, 135, 31, '', '', 1.0, 1, 1, 211, 3, 1, 0, 30, 1) +,(683, 135, 1, '', '', 1.0, 1, 1, 212, 3, 1, 0, 30, 1) +,(684, 135, 5, '', '', 1.0, 1, 1, 213, 3, 1, 0, 30, 1) +,(685, 135, 28, '', '', 1.0, 1, 1, 214, 3, 1, 0, 30, 1) +,(686, 135, 6, '', '', 1.0, 1, 1, 215, 3, 1, 0, 30, 1) ,(687, 135, 4, '', '', 1.0, 1, 1, 216, 3, 1, 0, 30, 1) -,(688, 136, 1, '', '', 1.0, 1, 1, 217, 3, 1, 0, 30, 1) -,(689, 136, 5, '', '', 1.0, 1, 1, 218, 3, 1, 0, 30, 1) -,(690, 136, 28, '', '', 1.0, 1, 1, 219, 3, 1, 0, 30, 1) -,(691, 136, 30, '', '', 1.0, 1, 1, 220, 3, 1, 0, 30, 1) -,(692, 136, 6, '', '', 1.0, 1, 1, 221, 3, 1, 0, 30, 1) -,(693, 136, 31, '', '', 1.0, 1, 1, 222, 3, 1, 0, 30, 1) +,(688, 136, 30, '', '', 1.0, 1, 1, 217, 3, 1, 0, 30, 1) +,(689, 136, 31, '', '', 1.0, 1, 1, 218, 3, 1, 0, 30, 1) +,(690, 136, 1, '', '', 1.0, 1, 1, 219, 3, 1, 0, 30, 1) +,(691, 136, 5, '', '', 1.0, 1, 1, 220, 3, 1, 0, 30, 1) +,(692, 136, 28, '', '', 1.0, 1, 1, 221, 3, 1, 0, 30, 1) +,(693, 136, 6, '', '', 1.0, 1, 1, 222, 3, 1, 0, 30, 1) ,(694, 136, 4, '', '', 1.0, 1, 1, 223, 3, 1, 0, 30, 1) -,(695, 137, 1, '', '', 1.0, 1, 1, 224, 3, 1, 0, 30, 1) -,(696, 137, 5, '', '', 1.0, 1, 1, 225, 3, 1, 0, 30, 1) -,(697, 137, 28, '', '', 1.0, 1, 1, 226, 3, 1, 0, 30, 1) -,(698, 137, 30, '', '', 1.0, 1, 1, 227, 3, 1, 0, 30, 1) -,(699, 137, 6, '', '', 1.0, 1, 1, 228, 3, 1, 0, 30, 1) -,(700, 137, 31, '', '', 1.0, 1, 1, 229, 3, 1, 0, 30, 1) +,(695, 137, 30, '', '', 1.0, 1, 1, 224, 3, 1, 0, 30, 1) +,(696, 137, 31, '', '', 1.0, 1, 1, 225, 3, 1, 0, 30, 1) +,(697, 137, 1, '', '', 1.0, 1, 1, 226, 3, 1, 0, 30, 1) +,(698, 137, 5, '', '', 1.0, 1, 1, 227, 3, 1, 0, 30, 1) +,(699, 137, 28, '', '', 1.0, 1, 1, 228, 3, 1, 0, 30, 1) +,(700, 137, 6, '', '', 1.0, 1, 1, 229, 3, 1, 0, 30, 1) ,(701, 137, 4, '', '', 1.0, 1, 1, 230, 3, 1, 0, 30, 1) -,(702, 138, 1, '', '', 1.0, 1, 1, 231, 3, 1, 0, 30, 1) -,(703, 138, 5, '', '', 1.0, 1, 1, 232, 3, 1, 0, 30, 1) -,(704, 138, 28, '', '', 1.0, 1, 1, 233, 3, 1, 0, 30, 1) -,(705, 138, 30, '', '', 1.0, 1, 1, 234, 3, 1, 0, 30, 1) -,(706, 138, 6, '', '', 1.0, 1, 1, 235, 3, 1, 0, 30, 1) -,(707, 138, 31, '', '', 1.0, 1, 1, 236, 3, 1, 0, 30, 1) +,(702, 138, 30, '', '', 1.0, 1, 1, 231, 3, 1, 0, 30, 1) +,(703, 138, 31, '', '', 1.0, 1, 1, 232, 3, 1, 0, 30, 1) +,(704, 138, 1, '', '', 1.0, 1, 1, 233, 3, 1, 0, 30, 1) +,(705, 138, 5, '', '', 1.0, 1, 1, 234, 3, 1, 0, 30, 1) +,(706, 138, 28, '', '', 1.0, 1, 1, 235, 3, 1, 0, 30, 1) +,(707, 138, 6, '', '', 1.0, 1, 1, 236, 3, 1, 0, 30, 1) ,(708, 138, 4, '', '', 1.0, 1, 1, 237, 3, 1, 0, 30, 1) -,(709, 139, 1, '', '', 1.0, 1, 1, 238, 3, 1, 0, 30, 1) -,(710, 139, 5, '', '', 1.0, 1, 1, 239, 3, 1, 0, 30, 1) -,(711, 139, 28, '', '', 1.0, 1, 1, 240, 3, 1, 0, 30, 1) -,(712, 139, 30, '', '', 1.0, 1, 1, 241, 3, 1, 0, 30, 1) -,(713, 139, 6, '', '', 1.0, 1, 1, 242, 3, 1, 0, 30, 1) -,(714, 139, 31, '', '', 1.0, 1, 1, 243, 3, 1, 0, 30, 1) +,(709, 139, 30, '', '', 1.0, 1, 1, 238, 3, 1, 0, 30, 1) +,(710, 139, 31, '', '', 1.0, 1, 1, 239, 3, 1, 0, 30, 1) +,(711, 139, 1, '', '', 1.0, 1, 1, 240, 3, 1, 0, 30, 1) +,(712, 139, 5, '', '', 1.0, 1, 1, 241, 3, 1, 0, 30, 1) +,(713, 139, 28, '', '', 1.0, 1, 1, 242, 3, 1, 0, 30, 1) +,(714, 139, 6, '', '', 1.0, 1, 1, 243, 3, 1, 0, 30, 1) ,(715, 139, 4, '', '', 1.0, 1, 1, 244, 3, 1, 0, 30, 1); diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index edf46f870..9a78dc296 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -824,9 +824,9 @@ trait WettkampfService extends DBService val rootPgmInsert = sqlu""" INSERT INTO programm - (id, parent_id, name, aggregate, ord, riegenmode) + (id, parent_id, name, aggregate, ord, riegenmode, uuid) VALUES - ($pgmIdRoot, 0, $rootprogram, 0, $pgmIdRoot, $riegenmode) + ($pgmIdRoot, 0, $rootprogram, 0, $pgmIdRoot, $riegenmode, ${UUID.randomUUID().toString}) """ >> sql""" SELECT * from programm where id=$pgmIdRoot @@ -854,9 +854,9 @@ trait WettkampfService extends DBService val von=alterVonMatcher.findFirstMatchIn(pgm).map(md => md.group(1).intValue).getOrElse(0) val bis=alterBisMatcher.findFirstMatchIn(pgm).map(md => md.group(1).intValue).getOrElse(100) sqlu""" INSERT INTO programm - (id, parent_id, name, aggregate, ord, riegenmode, alter_von, alter_bis) + (id, parent_id, name, aggregate, ord, riegenmode, alter_von, alter_bis, uuid) VALUES - ($pgmId, $parentId, $name, $aggregate, $pgmId, $riegenmode, $von, $bis) + ($pgmId, $parentId, $name, $aggregate, $pgmId, $riegenmode, $von, $bis, ${UUID.randomUUID().toString}) """ >> sql""" SELECT * from programm where id=$pgmId diff --git a/src/test/scala/ch/seidel/kutu/base/TestDBService.scala b/src/test/scala/ch/seidel/kutu/base/TestDBService.scala index 40e29e860..e6fa43bd4 100644 --- a/src/test/scala/ch/seidel/kutu/base/TestDBService.scala +++ b/src/test/scala/ch/seidel/kutu/base/TestDBService.scala @@ -8,6 +8,7 @@ import slick.jdbc.SQLiteProfile.api.AsyncExecutor import ch.seidel.kutu.domain.{DBService, NewUUID} import com.zaxxer.hikari.{HikariConfig, HikariDataSource} import org.sqlite.SQLiteConnection +import slick.jdbc.JdbcBackend object TestDBService { private val logger = LoggerFactory.getLogger(this.getClass) @@ -54,15 +55,19 @@ object TestDBService { , "AddNotificationMailToWettkampf-sqllite.sql" , "AddWKDisziplinMetafields-sqllite.sql" ) - val session = tempDatabase.createSession() - try { - NewUUID.install(session.conn.unwrap(classOf[SQLiteConnection])) - } finally { - session .close() - } + installDBFunctions(tempDatabase) DBService.installDB(tempDatabase, sqlScripts) logger.info("Database initialized") tempDatabase - } + } + + def installDBFunctions(dbdef: JdbcBackend.DatabaseDef): Unit = { + val session = dbdef.createSession() + try { + NewUUID.install(session.conn.unwrap(classOf[SQLiteConnection])) + } finally { + session.close() + } + } } diff --git a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala index e25a28095..d1f953ff2 100644 --- a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala @@ -2,7 +2,7 @@ package ch.seidel.kutu.domain import java.time.LocalDate import java.util.UUID -import ch.seidel.kutu.base.KuTuBaseSpec +import ch.seidel.kutu.base.{KuTuBaseSpec, TestDBService} import scala.annotation.tailrec import scala.util.matching.Regex @@ -106,9 +106,9 @@ class WettkampfSpec extends KuTuBaseSpec { ) ) printNewWettkampfModeInsertStatements(tga) -// } -// "create Turn10" in { - val turn10 = insertWettkampfProgram(s"Turn10-Test", 2, + } + "create Turn10" in { + val turn10 = insertWettkampfProgram(s"Turn10-Test", 1, List("Boden", "Barren", "Balken", "Minitramp", "Reck", "Pferd", "Sprung"), List( "AK6 BS(von=0 bis=6)" From 8f13c74bad7fcfbe12398fbb37a125fb471ab3d6 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Tue, 21 Mar 2023 23:44:53 +0100 Subject: [PATCH 07/99] =?UTF-8?q?#87=20PoC=20for=20Turn10=20and=20TG=20All?= =?UTF-8?q?g=C3=A4u=20WK-Modes=20-=20test/fix=20pg=20ddl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add GeTu BLTV - fix pgsql ddl scripts --- dockercompose/pg-init.sql | 4 +- .../dbscripts/AddWKDisziplinMetafields-pg.sql | 434 +++++++++++++++++- .../AddWKDisziplinMetafields-sqllite.sql | 12 +- .../scala/ch/seidel/kutu/domain/NewUUID.scala | 2 +- .../seidel/kutu/domain/WettkampfService.scala | 55 ++- .../ch/seidel/kutu/domain/WettkampfSpec.scala | 21 +- 6 files changed, 505 insertions(+), 23 deletions(-) diff --git a/dockercompose/pg-init.sql b/dockercompose/pg-init.sql index f409706bb..9e4248469 100644 --- a/dockercompose/pg-init.sql +++ b/dockercompose/pg-init.sql @@ -1,2 +1,4 @@ -CREATE SCHEMA IF NOT EXISTS kutu; +CREATE USER kutuadmin; +CREATE ROLE kutu_admin WITH SUPERUSER USER kutuadmin; +CREATE SCHEMA IF NOT EXISTS kutu AUTHORIZATION kutu_admin; SET search_path TO kutu; \ No newline at end of file diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql index 687affd4b..07826fbce 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql @@ -21,7 +21,7 @@ update wettkampfdisziplin where programm_id in ( select id from programm where parent_id = 20 ) - --// Sprung K6/K7) +-- Sprung K6/K7) and id not in (100, 141) ; update wettkampfdisziplin @@ -36,9 +36,19 @@ update wettkampfdisziplin where programm_id in ( select id from programm where parent_id = 20 ) - -- Barren +-- Barren and disziplin_id = 5 ; +-- KD official STV +UPDATE programm + set alter_von=22 + where id=42 +; +-- KH official STV +UPDATE programm + set alter_von=28 + where id=43 +; CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; ALTER TABLE IF EXISTS programm @@ -49,8 +59,8 @@ create table if not exists pgmidx ( id integer primary key, uuid varchar(70) NOT NULL ); -insert into pgmidx (id, uuid) -values + +insert into pgmidx (id, uuid) values (1,'db387348-c02b-11ed-ba9a-a2890e171f2c') ,(2,'db38741a-c02b-11ed-ba9a-a2890e171f2c') ,(3,'db387474-c02b-11ed-ba9a-a2890e171f2c') @@ -86,7 +96,7 @@ values ,(43,'db387cf8-c02b-11ed-ba9a-a2890e171f2c') ; update programm p -set uuid = (select uuid from pgmidx i where i.id = p.id); + set uuid = (select uuid from pgmidx i where i.id = p.id); ALTER TABLE IF EXISTS programm ALTER COLUMN uuid SET DEFAULT uuid_generate_v1(); @@ -101,4 +111,416 @@ update programm set riegenmode=2 where id=1 or parent_id=1 -; \ No newline at end of file +; + +-- Test Programm-Extensions + +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(148, 'TG Allgäu', 0, null, 148, 0, 100, 'aee67f3e-d790-49c8-8641-1f1376359716', 1) +,(149, 'Kür', 1, 148, 149, 0, 100, '5cbe0f01-e41a-41ff-876b-894ae36f9fe0', 1) +,(150, 'WK I Kür', 1, 149, 150, 0, 100, 'fae36b23-b6b0-406a-84be-b976c3730962', 1) +,(151, 'WK II LK1', 1, 149, 151, 0, 100, '9490ca83-be96-4ddb-9f11-98dd196befa2', 1) +,(152, 'WK III LK1', 1, 149, 152, 16, 17, '664fb1f2-9979-4131-b72e-f4bc6c497db5', 1) +,(153, 'WK IV LK2', 1, 149, 153, 14, 15, 'c890b368-0adb-4b5b-9ddb-a5a7f0423545', 1) +,(154, 'Pflicht', 1, 148, 154, 0, 100, '783588d9-835b-45cd-8a33-1bc58814c784', 1) +,(155, 'WK V Jug', 1, 154, 155, 14, 18, 'ac7d4861-44fd-4eec-81f0-8e00bfe1907a', 1) +,(156, 'WK VI Schüler A', 1, 154, 156, 12, 13, '1bc1dd70-d849-4026-8644-8c82b01e5364', 1) +,(157, 'WK VII Schüler B', 1, 154, 157, 10, 11, '053a908f-170e-4d9f-acec-a0603a2a9bf5', 1) +,(158, 'WK VIII Schüler C', 1, 154, 158, 8, 9, 'c60568b9-3f03-4693-b5fa-37199cf05cf4', 1) +,(159, 'WK IX Schüler D', 1, 154, 159, 0, 7, '328b6137-70bb-4b67-843b-10d99e377836', 1); +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(728, 150, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) +,(729, 150, 5, '', '', 1.0, 1, 1, 1, 3, 1, 0, 30, 1) +,(730, 150, 4, '', '', 1.0, 1, 1, 2, 3, 1, 0, 30, 1) +,(731, 150, 6, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) +,(732, 151, 1, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) +,(733, 151, 5, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) +,(734, 151, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) +,(735, 151, 6, '', '', 1.0, 1, 1, 7, 3, 1, 0, 30, 1) +,(736, 152, 1, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) +,(737, 152, 5, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1) +,(738, 152, 4, '', '', 1.0, 1, 1, 10, 3, 1, 0, 30, 1) +,(739, 152, 6, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) +,(740, 153, 1, '', '', 1.0, 1, 1, 12, 3, 1, 0, 30, 1) +,(741, 153, 5, '', '', 1.0, 1, 1, 13, 3, 1, 0, 30, 1) +,(742, 153, 4, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) +,(743, 153, 6, '', '', 1.0, 1, 1, 15, 3, 1, 0, 30, 1) +,(744, 155, 1, '', '', 1.0, 1, 1, 16, 3, 1, 0, 30, 1) +,(745, 155, 5, '', '', 1.0, 1, 1, 17, 3, 1, 0, 30, 1) +,(746, 155, 4, '', '', 1.0, 1, 1, 18, 3, 1, 0, 30, 1) +,(747, 155, 6, '', '', 1.0, 1, 1, 19, 3, 1, 0, 30, 1) +,(748, 156, 1, '', '', 1.0, 1, 1, 20, 3, 1, 0, 30, 1) +,(749, 156, 5, '', '', 1.0, 1, 1, 21, 3, 1, 0, 30, 1) +,(750, 156, 4, '', '', 1.0, 1, 1, 22, 3, 1, 0, 30, 1) +,(751, 156, 6, '', '', 1.0, 1, 1, 23, 3, 1, 0, 30, 1) +,(752, 157, 1, '', '', 1.0, 1, 1, 24, 3, 1, 0, 30, 1) +,(753, 157, 5, '', '', 1.0, 1, 1, 25, 3, 1, 0, 30, 1) +,(754, 157, 4, '', '', 1.0, 1, 1, 26, 3, 1, 0, 30, 1) +,(755, 157, 6, '', '', 1.0, 1, 1, 27, 3, 1, 0, 30, 1) +,(756, 158, 1, '', '', 1.0, 1, 1, 28, 3, 1, 0, 30, 1) +,(757, 158, 5, '', '', 1.0, 1, 1, 29, 3, 1, 0, 30, 1) +,(758, 158, 4, '', '', 1.0, 1, 1, 30, 3, 1, 0, 30, 1) +,(759, 158, 6, '', '', 1.0, 1, 1, 31, 3, 1, 0, 30, 1) +,(760, 159, 1, '', '', 1.0, 1, 1, 32, 3, 1, 0, 30, 1) +,(761, 159, 5, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) +,(762, 159, 4, '', '', 1.0, 1, 1, 34, 3, 1, 0, 30, 1) +,(763, 159, 6, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1); + +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; +insert into disziplin (id, name) values (30, 'Minitramp') on conflict (id) do nothing; +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into disziplin (id, name) values (31, 'Pferd') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(160, 'Turn10', 0, null, 160, 0, 100, '99df7708-2e22-4ce1-904b-2fca5ac834e4', 1) +,(161, 'AK6 BS', 0, 160, 161, 0, 6, '337833d4-b3ac-4e0b-865e-df8e1c17b5eb', 1) +,(162, 'AK7 BS', 0, 160, 162, 7, 7, '22ec00f7-c9f1-45d3-a343-3f35b26483c0', 1) +,(163, 'AK8 BS', 0, 160, 163, 8, 8, '83f90e3d-4d8e-4b28-a8fa-e24e17b537aa', 1) +,(164, 'AK9 BS', 0, 160, 164, 9, 9, '447959c2-58e6-4351-ad96-460676495e27', 1) +,(165, 'AK10 BS', 0, 160, 165, 10, 10, '209f671f-2039-473b-9e9b-36c9f33f6599', 1) +,(166, 'AK11 BS', 0, 160, 166, 11, 11, 'd17e4b49-7495-49ec-aa0e-5da47867f650', 1) +,(167, 'AK12 BS', 0, 160, 167, 12, 12, '9a110e8b-593b-46a6-bf8d-61030dbab07f', 1) +,(168, 'AK13 BS', 0, 160, 168, 13, 13, '4d2960dc-e5e9-49e6-bcd9-088b96586a4f', 1) +,(169, 'AK13 OS', 0, 160, 169, 13, 13, 'b73db199-a954-418f-ad67-1113cd5d0b93', 1) +,(170, 'AK14 BS', 0, 160, 170, 14, 14, '8534de3a-fd2c-4dca-a6c2-879fd05bfaaf', 1) +,(171, 'AK14 OS', 0, 160, 171, 14, 14, 'af49881b-21e1-4d8b-8f80-ba87b1ad13f0', 1) +,(172, 'AK15 BS', 0, 160, 172, 15, 15, 'c100ddd2-48e9-43e3-aa58-59cf857d5078', 1) +,(173, 'AK15 OS', 0, 160, 173, 15, 15, '1cd7112f-1862-49fa-97b8-a3e2f1098d60', 1) +,(174, 'AK16 BS', 0, 160, 174, 16, 16, '4795a48f-fc12-46b9-91c2-1ce0a363976b', 1) +,(175, 'AK16 OS', 0, 160, 175, 16, 16, '49b3fdc5-6979-427d-a530-7f17b77ba309', 1) +,(176, 'AK17 BS', 0, 160, 176, 17, 17, '4d747eb3-4cca-41fe-a414-4804f091118a', 1) +,(177, 'AK17 OS', 0, 160, 177, 17, 17, '66a2f277-f974-409a-bb52-fbe783488bcb', 1) +,(178, 'AK18 BS', 0, 160, 178, 18, 23, '331b8674-93ff-4a4c-8773-cf1d9c3fd941', 1) +,(179, 'AK18 OS', 0, 160, 179, 18, 23, 'e5ed953b-5a29-47b6-ab09-69427fafd5bf', 1) +,(180, 'AK24 BS', 0, 160, 180, 24, 29, 'ed64a599-65ff-4d81-ba78-0f0fa20eb4ec', 1) +,(181, 'AK24 OS', 0, 160, 181, 24, 29, '72cf1fd6-9a2c-4260-9ceb-0d03a7d1775a', 1) +,(182, 'AK30 BS', 0, 160, 182, 30, 34, '35fc987c-26c0-420c-a408-a3526991c6b7', 1) +,(183, 'AK30 OS', 0, 160, 183, 30, 34, '3dc7ff1f-8b3b-426f-b913-f215b77b32ee', 1) +,(184, 'AK35 BS', 0, 160, 184, 35, 39, '17b6edab-99b4-4813-b1de-0ffa5bef9028', 1) +,(185, 'AK35 OS', 0, 160, 185, 35, 39, '6e6e0a0f-bcc7-4b4b-8dfb-5360250054cc', 1) +,(186, 'AK40 BS', 0, 160, 186, 40, 44, '4e0dc084-ed71-4fb4-97b3-07dcfa4ad77c', 1) +,(187, 'AK40 OS', 0, 160, 187, 40, 44, '0767a83d-8fe2-4a3d-af97-746e26640262', 1) +,(188, 'AK45 BS', 0, 160, 188, 45, 49, 'deec1cfa-7cc6-4e23-9b16-0d94f7d833b8', 1) +,(189, 'AK45 OS', 0, 160, 189, 45, 49, 'b098c2a0-32d2-4a46-a3c2-3ddd68bc05e0', 1) +,(190, 'AK50 BS', 0, 160, 190, 50, 54, '19ceabf0-97e3-4db8-93bd-ab0ad8efcbe0', 1) +,(191, 'AK50 OS', 0, 160, 191, 50, 54, 'bf4a88c2-2e63-4cef-b7ca-cdde409e9978', 1) +,(192, 'AK55 BS', 0, 160, 192, 55, 59, '6a4d7353-1b19-4235-88a7-a1a230790689', 1) +,(193, 'AK55 OS', 0, 160, 193, 55, 59, '6ca640c0-e0ec-4999-a762-32962b0ab86d', 1) +,(194, 'AK60 BS', 0, 160, 194, 60, 64, '0f377c87-32b4-4061-ab26-80564aa5e40b', 1) +,(195, 'AK60 OS', 0, 160, 195, 60, 64, '547d8955-1bd8-4bd9-bf98-6787550adbdb', 1); +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(764, 161, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) +,(765, 161, 5, '', '', 1.0, 1, 1, 1, 3, 1, 0, 30, 1) +,(766, 161, 28, '', '', 1.0, 1, 1, 2, 3, 1, 0, 30, 1) +,(767, 161, 30, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) +,(768, 161, 6, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) +,(769, 161, 31, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) +,(770, 161, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) +,(771, 162, 1, '', '', 1.0, 1, 1, 7, 3, 1, 0, 30, 1) +,(772, 162, 5, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) +,(773, 162, 28, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1) +,(774, 162, 30, '', '', 1.0, 1, 1, 10, 3, 1, 0, 30, 1) +,(775, 162, 6, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) +,(776, 162, 31, '', '', 1.0, 1, 1, 12, 3, 1, 0, 30, 1) +,(777, 162, 4, '', '', 1.0, 1, 1, 13, 3, 1, 0, 30, 1) +,(778, 163, 1, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) +,(779, 163, 5, '', '', 1.0, 1, 1, 15, 3, 1, 0, 30, 1) +,(780, 163, 28, '', '', 1.0, 1, 1, 16, 3, 1, 0, 30, 1) +,(781, 163, 30, '', '', 1.0, 1, 1, 17, 3, 1, 0, 30, 1) +,(782, 163, 6, '', '', 1.0, 1, 1, 18, 3, 1, 0, 30, 1) +,(783, 163, 31, '', '', 1.0, 1, 1, 19, 3, 1, 0, 30, 1) +,(784, 163, 4, '', '', 1.0, 1, 1, 20, 3, 1, 0, 30, 1) +,(785, 164, 1, '', '', 1.0, 1, 1, 21, 3, 1, 0, 30, 1) +,(786, 164, 5, '', '', 1.0, 1, 1, 22, 3, 1, 0, 30, 1) +,(787, 164, 28, '', '', 1.0, 1, 1, 23, 3, 1, 0, 30, 1) +,(788, 164, 30, '', '', 1.0, 1, 1, 24, 3, 1, 0, 30, 1) +,(789, 164, 6, '', '', 1.0, 1, 1, 25, 3, 1, 0, 30, 1) +,(790, 164, 31, '', '', 1.0, 1, 1, 26, 3, 1, 0, 30, 1) +,(791, 164, 4, '', '', 1.0, 1, 1, 27, 3, 1, 0, 30, 1) +,(792, 165, 1, '', '', 1.0, 1, 1, 28, 3, 1, 0, 30, 1) +,(793, 165, 5, '', '', 1.0, 1, 1, 29, 3, 1, 0, 30, 1) +,(794, 165, 28, '', '', 1.0, 1, 1, 30, 3, 1, 0, 30, 1) +,(795, 165, 30, '', '', 1.0, 1, 1, 31, 3, 1, 0, 30, 1) +,(796, 165, 6, '', '', 1.0, 1, 1, 32, 3, 1, 0, 30, 1) +,(797, 165, 31, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) +,(798, 165, 4, '', '', 1.0, 1, 1, 34, 3, 1, 0, 30, 1) +,(799, 166, 1, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1) +,(800, 166, 5, '', '', 1.0, 1, 1, 36, 3, 1, 0, 30, 1) +,(801, 166, 28, '', '', 1.0, 1, 1, 37, 3, 1, 0, 30, 1) +,(802, 166, 30, '', '', 1.0, 1, 1, 38, 3, 1, 0, 30, 1) +,(803, 166, 6, '', '', 1.0, 1, 1, 39, 3, 1, 0, 30, 1) +,(804, 166, 31, '', '', 1.0, 1, 1, 40, 3, 1, 0, 30, 1) +,(805, 166, 4, '', '', 1.0, 1, 1, 41, 3, 1, 0, 30, 1) +,(806, 167, 1, '', '', 1.0, 1, 1, 42, 3, 1, 0, 30, 1) +,(807, 167, 5, '', '', 1.0, 1, 1, 43, 3, 1, 0, 30, 1) +,(808, 167, 28, '', '', 1.0, 1, 1, 44, 3, 1, 0, 30, 1) +,(809, 167, 30, '', '', 1.0, 1, 1, 45, 3, 1, 0, 30, 1) +,(810, 167, 6, '', '', 1.0, 1, 1, 46, 3, 1, 0, 30, 1) +,(811, 167, 31, '', '', 1.0, 1, 1, 47, 3, 1, 0, 30, 1) +,(812, 167, 4, '', '', 1.0, 1, 1, 48, 3, 1, 0, 30, 1) +,(813, 168, 1, '', '', 1.0, 1, 1, 49, 3, 1, 0, 30, 1) +,(814, 168, 5, '', '', 1.0, 1, 1, 50, 3, 1, 0, 30, 1) +,(815, 168, 28, '', '', 1.0, 1, 1, 51, 3, 1, 0, 30, 1) +,(816, 168, 30, '', '', 1.0, 1, 1, 52, 3, 1, 0, 30, 1) +,(817, 168, 6, '', '', 1.0, 1, 1, 53, 3, 1, 0, 30, 1) +,(818, 168, 31, '', '', 1.0, 1, 1, 54, 3, 1, 0, 30, 1) +,(819, 168, 4, '', '', 1.0, 1, 1, 55, 3, 1, 0, 30, 1) +,(820, 169, 1, '', '', 1.0, 1, 1, 56, 3, 1, 0, 30, 1) +,(821, 169, 5, '', '', 1.0, 1, 1, 57, 3, 1, 0, 30, 1) +,(822, 169, 28, '', '', 1.0, 1, 1, 58, 3, 1, 0, 30, 1) +,(823, 169, 30, '', '', 1.0, 1, 1, 59, 3, 1, 0, 30, 1) +,(824, 169, 6, '', '', 1.0, 1, 1, 60, 3, 1, 0, 30, 1) +,(825, 169, 31, '', '', 1.0, 1, 1, 61, 3, 1, 0, 30, 1) +,(826, 169, 4, '', '', 1.0, 1, 1, 62, 3, 1, 0, 30, 1) +,(827, 170, 1, '', '', 1.0, 1, 1, 63, 3, 1, 0, 30, 1) +,(828, 170, 5, '', '', 1.0, 1, 1, 64, 3, 1, 0, 30, 1) +,(829, 170, 28, '', '', 1.0, 1, 1, 65, 3, 1, 0, 30, 1) +,(830, 170, 30, '', '', 1.0, 1, 1, 66, 3, 1, 0, 30, 1) +,(831, 170, 6, '', '', 1.0, 1, 1, 67, 3, 1, 0, 30, 1) +,(832, 170, 31, '', '', 1.0, 1, 1, 68, 3, 1, 0, 30, 1) +,(833, 170, 4, '', '', 1.0, 1, 1, 69, 3, 1, 0, 30, 1) +,(834, 171, 1, '', '', 1.0, 1, 1, 70, 3, 1, 0, 30, 1) +,(835, 171, 5, '', '', 1.0, 1, 1, 71, 3, 1, 0, 30, 1) +,(836, 171, 28, '', '', 1.0, 1, 1, 72, 3, 1, 0, 30, 1) +,(837, 171, 30, '', '', 1.0, 1, 1, 73, 3, 1, 0, 30, 1) +,(838, 171, 6, '', '', 1.0, 1, 1, 74, 3, 1, 0, 30, 1) +,(839, 171, 31, '', '', 1.0, 1, 1, 75, 3, 1, 0, 30, 1) +,(840, 171, 4, '', '', 1.0, 1, 1, 76, 3, 1, 0, 30, 1) +,(841, 172, 1, '', '', 1.0, 1, 1, 77, 3, 1, 0, 30, 1) +,(842, 172, 5, '', '', 1.0, 1, 1, 78, 3, 1, 0, 30, 1) +,(843, 172, 28, '', '', 1.0, 1, 1, 79, 3, 1, 0, 30, 1) +,(844, 172, 30, '', '', 1.0, 1, 1, 80, 3, 1, 0, 30, 1) +,(845, 172, 6, '', '', 1.0, 1, 1, 81, 3, 1, 0, 30, 1) +,(846, 172, 31, '', '', 1.0, 1, 1, 82, 3, 1, 0, 30, 1) +,(847, 172, 4, '', '', 1.0, 1, 1, 83, 3, 1, 0, 30, 1) +,(848, 173, 1, '', '', 1.0, 1, 1, 84, 3, 1, 0, 30, 1) +,(849, 173, 5, '', '', 1.0, 1, 1, 85, 3, 1, 0, 30, 1) +,(850, 173, 28, '', '', 1.0, 1, 1, 86, 3, 1, 0, 30, 1) +,(851, 173, 30, '', '', 1.0, 1, 1, 87, 3, 1, 0, 30, 1) +,(852, 173, 6, '', '', 1.0, 1, 1, 88, 3, 1, 0, 30, 1) +,(853, 173, 31, '', '', 1.0, 1, 1, 89, 3, 1, 0, 30, 1) +,(854, 173, 4, '', '', 1.0, 1, 1, 90, 3, 1, 0, 30, 1) +,(855, 174, 1, '', '', 1.0, 1, 1, 91, 3, 1, 0, 30, 1) +,(856, 174, 5, '', '', 1.0, 1, 1, 92, 3, 1, 0, 30, 1) +,(857, 174, 28, '', '', 1.0, 1, 1, 93, 3, 1, 0, 30, 1) +,(858, 174, 30, '', '', 1.0, 1, 1, 94, 3, 1, 0, 30, 1) +,(859, 174, 6, '', '', 1.0, 1, 1, 95, 3, 1, 0, 30, 1) +,(860, 174, 31, '', '', 1.0, 1, 1, 96, 3, 1, 0, 30, 1) +,(861, 174, 4, '', '', 1.0, 1, 1, 97, 3, 1, 0, 30, 1) +,(862, 175, 1, '', '', 1.0, 1, 1, 98, 3, 1, 0, 30, 1) +,(863, 175, 5, '', '', 1.0, 1, 1, 99, 3, 1, 0, 30, 1) +,(864, 175, 28, '', '', 1.0, 1, 1, 100, 3, 1, 0, 30, 1) +,(865, 175, 30, '', '', 1.0, 1, 1, 101, 3, 1, 0, 30, 1) +,(866, 175, 6, '', '', 1.0, 1, 1, 102, 3, 1, 0, 30, 1) +,(867, 175, 31, '', '', 1.0, 1, 1, 103, 3, 1, 0, 30, 1) +,(868, 175, 4, '', '', 1.0, 1, 1, 104, 3, 1, 0, 30, 1) +,(869, 176, 1, '', '', 1.0, 1, 1, 105, 3, 1, 0, 30, 1) +,(870, 176, 5, '', '', 1.0, 1, 1, 106, 3, 1, 0, 30, 1) +,(871, 176, 28, '', '', 1.0, 1, 1, 107, 3, 1, 0, 30, 1) +,(872, 176, 30, '', '', 1.0, 1, 1, 108, 3, 1, 0, 30, 1) +,(873, 176, 6, '', '', 1.0, 1, 1, 109, 3, 1, 0, 30, 1) +,(874, 176, 31, '', '', 1.0, 1, 1, 110, 3, 1, 0, 30, 1) +,(875, 176, 4, '', '', 1.0, 1, 1, 111, 3, 1, 0, 30, 1) +,(876, 177, 1, '', '', 1.0, 1, 1, 112, 3, 1, 0, 30, 1) +,(877, 177, 5, '', '', 1.0, 1, 1, 113, 3, 1, 0, 30, 1) +,(878, 177, 28, '', '', 1.0, 1, 1, 114, 3, 1, 0, 30, 1) +,(879, 177, 30, '', '', 1.0, 1, 1, 115, 3, 1, 0, 30, 1) +,(880, 177, 6, '', '', 1.0, 1, 1, 116, 3, 1, 0, 30, 1) +,(881, 177, 31, '', '', 1.0, 1, 1, 117, 3, 1, 0, 30, 1) +,(882, 177, 4, '', '', 1.0, 1, 1, 118, 3, 1, 0, 30, 1) +,(883, 178, 1, '', '', 1.0, 1, 1, 119, 3, 1, 0, 30, 1) +,(884, 178, 5, '', '', 1.0, 1, 1, 120, 3, 1, 0, 30, 1) +,(885, 178, 28, '', '', 1.0, 1, 1, 121, 3, 1, 0, 30, 1) +,(886, 178, 30, '', '', 1.0, 1, 1, 122, 3, 1, 0, 30, 1) +,(887, 178, 6, '', '', 1.0, 1, 1, 123, 3, 1, 0, 30, 1) +,(888, 178, 31, '', '', 1.0, 1, 1, 124, 3, 1, 0, 30, 1) +,(889, 178, 4, '', '', 1.0, 1, 1, 125, 3, 1, 0, 30, 1) +,(890, 179, 1, '', '', 1.0, 1, 1, 126, 3, 1, 0, 30, 1) +,(891, 179, 5, '', '', 1.0, 1, 1, 127, 3, 1, 0, 30, 1) +,(892, 179, 28, '', '', 1.0, 1, 1, 128, 3, 1, 0, 30, 1) +,(893, 179, 30, '', '', 1.0, 1, 1, 129, 3, 1, 0, 30, 1) +,(894, 179, 6, '', '', 1.0, 1, 1, 130, 3, 1, 0, 30, 1) +,(895, 179, 31, '', '', 1.0, 1, 1, 131, 3, 1, 0, 30, 1) +,(896, 179, 4, '', '', 1.0, 1, 1, 132, 3, 1, 0, 30, 1) +,(897, 180, 1, '', '', 1.0, 1, 1, 133, 3, 1, 0, 30, 1) +,(898, 180, 5, '', '', 1.0, 1, 1, 134, 3, 1, 0, 30, 1) +,(899, 180, 28, '', '', 1.0, 1, 1, 135, 3, 1, 0, 30, 1) +,(900, 180, 30, '', '', 1.0, 1, 1, 136, 3, 1, 0, 30, 1) +,(901, 180, 6, '', '', 1.0, 1, 1, 137, 3, 1, 0, 30, 1) +,(902, 180, 31, '', '', 1.0, 1, 1, 138, 3, 1, 0, 30, 1) +,(903, 180, 4, '', '', 1.0, 1, 1, 139, 3, 1, 0, 30, 1) +,(904, 181, 1, '', '', 1.0, 1, 1, 140, 3, 1, 0, 30, 1) +,(905, 181, 5, '', '', 1.0, 1, 1, 141, 3, 1, 0, 30, 1) +,(906, 181, 28, '', '', 1.0, 1, 1, 142, 3, 1, 0, 30, 1) +,(907, 181, 30, '', '', 1.0, 1, 1, 143, 3, 1, 0, 30, 1) +,(908, 181, 6, '', '', 1.0, 1, 1, 144, 3, 1, 0, 30, 1) +,(909, 181, 31, '', '', 1.0, 1, 1, 145, 3, 1, 0, 30, 1) +,(910, 181, 4, '', '', 1.0, 1, 1, 146, 3, 1, 0, 30, 1) +,(911, 182, 1, '', '', 1.0, 1, 1, 147, 3, 1, 0, 30, 1) +,(912, 182, 5, '', '', 1.0, 1, 1, 148, 3, 1, 0, 30, 1) +,(913, 182, 28, '', '', 1.0, 1, 1, 149, 3, 1, 0, 30, 1) +,(914, 182, 30, '', '', 1.0, 1, 1, 150, 3, 1, 0, 30, 1) +,(915, 182, 6, '', '', 1.0, 1, 1, 151, 3, 1, 0, 30, 1) +,(916, 182, 31, '', '', 1.0, 1, 1, 152, 3, 1, 0, 30, 1) +,(917, 182, 4, '', '', 1.0, 1, 1, 153, 3, 1, 0, 30, 1) +,(918, 183, 1, '', '', 1.0, 1, 1, 154, 3, 1, 0, 30, 1) +,(919, 183, 5, '', '', 1.0, 1, 1, 155, 3, 1, 0, 30, 1) +,(920, 183, 28, '', '', 1.0, 1, 1, 156, 3, 1, 0, 30, 1) +,(921, 183, 30, '', '', 1.0, 1, 1, 157, 3, 1, 0, 30, 1) +,(922, 183, 6, '', '', 1.0, 1, 1, 158, 3, 1, 0, 30, 1) +,(923, 183, 31, '', '', 1.0, 1, 1, 159, 3, 1, 0, 30, 1) +,(924, 183, 4, '', '', 1.0, 1, 1, 160, 3, 1, 0, 30, 1) +,(925, 184, 1, '', '', 1.0, 1, 1, 161, 3, 1, 0, 30, 1) +,(926, 184, 5, '', '', 1.0, 1, 1, 162, 3, 1, 0, 30, 1) +,(927, 184, 28, '', '', 1.0, 1, 1, 163, 3, 1, 0, 30, 1) +,(928, 184, 30, '', '', 1.0, 1, 1, 164, 3, 1, 0, 30, 1) +,(929, 184, 6, '', '', 1.0, 1, 1, 165, 3, 1, 0, 30, 1) +,(930, 184, 31, '', '', 1.0, 1, 1, 166, 3, 1, 0, 30, 1) +,(931, 184, 4, '', '', 1.0, 1, 1, 167, 3, 1, 0, 30, 1) +,(932, 185, 1, '', '', 1.0, 1, 1, 168, 3, 1, 0, 30, 1) +,(933, 185, 5, '', '', 1.0, 1, 1, 169, 3, 1, 0, 30, 1) +,(934, 185, 28, '', '', 1.0, 1, 1, 170, 3, 1, 0, 30, 1) +,(935, 185, 30, '', '', 1.0, 1, 1, 171, 3, 1, 0, 30, 1) +,(936, 185, 6, '', '', 1.0, 1, 1, 172, 3, 1, 0, 30, 1) +,(937, 185, 31, '', '', 1.0, 1, 1, 173, 3, 1, 0, 30, 1) +,(938, 185, 4, '', '', 1.0, 1, 1, 174, 3, 1, 0, 30, 1) +,(939, 186, 1, '', '', 1.0, 1, 1, 175, 3, 1, 0, 30, 1) +,(940, 186, 5, '', '', 1.0, 1, 1, 176, 3, 1, 0, 30, 1) +,(941, 186, 28, '', '', 1.0, 1, 1, 177, 3, 1, 0, 30, 1) +,(942, 186, 30, '', '', 1.0, 1, 1, 178, 3, 1, 0, 30, 1) +,(943, 186, 6, '', '', 1.0, 1, 1, 179, 3, 1, 0, 30, 1) +,(944, 186, 31, '', '', 1.0, 1, 1, 180, 3, 1, 0, 30, 1) +,(945, 186, 4, '', '', 1.0, 1, 1, 181, 3, 1, 0, 30, 1) +,(946, 187, 1, '', '', 1.0, 1, 1, 182, 3, 1, 0, 30, 1) +,(947, 187, 5, '', '', 1.0, 1, 1, 183, 3, 1, 0, 30, 1) +,(948, 187, 28, '', '', 1.0, 1, 1, 184, 3, 1, 0, 30, 1) +,(949, 187, 30, '', '', 1.0, 1, 1, 185, 3, 1, 0, 30, 1) +,(950, 187, 6, '', '', 1.0, 1, 1, 186, 3, 1, 0, 30, 1) +,(951, 187, 31, '', '', 1.0, 1, 1, 187, 3, 1, 0, 30, 1) +,(952, 187, 4, '', '', 1.0, 1, 1, 188, 3, 1, 0, 30, 1) +,(953, 188, 1, '', '', 1.0, 1, 1, 189, 3, 1, 0, 30, 1) +,(954, 188, 5, '', '', 1.0, 1, 1, 190, 3, 1, 0, 30, 1) +,(955, 188, 28, '', '', 1.0, 1, 1, 191, 3, 1, 0, 30, 1) +,(956, 188, 30, '', '', 1.0, 1, 1, 192, 3, 1, 0, 30, 1) +,(957, 188, 6, '', '', 1.0, 1, 1, 193, 3, 1, 0, 30, 1) +,(958, 188, 31, '', '', 1.0, 1, 1, 194, 3, 1, 0, 30, 1) +,(959, 188, 4, '', '', 1.0, 1, 1, 195, 3, 1, 0, 30, 1) +,(960, 189, 1, '', '', 1.0, 1, 1, 196, 3, 1, 0, 30, 1) +,(961, 189, 5, '', '', 1.0, 1, 1, 197, 3, 1, 0, 30, 1) +,(962, 189, 28, '', '', 1.0, 1, 1, 198, 3, 1, 0, 30, 1) +,(963, 189, 30, '', '', 1.0, 1, 1, 199, 3, 1, 0, 30, 1) +,(964, 189, 6, '', '', 1.0, 1, 1, 200, 3, 1, 0, 30, 1) +,(965, 189, 31, '', '', 1.0, 1, 1, 201, 3, 1, 0, 30, 1) +,(966, 189, 4, '', '', 1.0, 1, 1, 202, 3, 1, 0, 30, 1) +,(967, 190, 1, '', '', 1.0, 1, 1, 203, 3, 1, 0, 30, 1) +,(968, 190, 5, '', '', 1.0, 1, 1, 204, 3, 1, 0, 30, 1) +,(969, 190, 28, '', '', 1.0, 1, 1, 205, 3, 1, 0, 30, 1) +,(970, 190, 30, '', '', 1.0, 1, 1, 206, 3, 1, 0, 30, 1) +,(971, 190, 6, '', '', 1.0, 1, 1, 207, 3, 1, 0, 30, 1) +,(972, 190, 31, '', '', 1.0, 1, 1, 208, 3, 1, 0, 30, 1) +,(973, 190, 4, '', '', 1.0, 1, 1, 209, 3, 1, 0, 30, 1) +,(974, 191, 1, '', '', 1.0, 1, 1, 210, 3, 1, 0, 30, 1) +,(975, 191, 5, '', '', 1.0, 1, 1, 211, 3, 1, 0, 30, 1) +,(976, 191, 28, '', '', 1.0, 1, 1, 212, 3, 1, 0, 30, 1) +,(977, 191, 30, '', '', 1.0, 1, 1, 213, 3, 1, 0, 30, 1) +,(978, 191, 6, '', '', 1.0, 1, 1, 214, 3, 1, 0, 30, 1) +,(979, 191, 31, '', '', 1.0, 1, 1, 215, 3, 1, 0, 30, 1) +,(980, 191, 4, '', '', 1.0, 1, 1, 216, 3, 1, 0, 30, 1) +,(981, 192, 1, '', '', 1.0, 1, 1, 217, 3, 1, 0, 30, 1) +,(982, 192, 5, '', '', 1.0, 1, 1, 218, 3, 1, 0, 30, 1) +,(983, 192, 28, '', '', 1.0, 1, 1, 219, 3, 1, 0, 30, 1) +,(984, 192, 30, '', '', 1.0, 1, 1, 220, 3, 1, 0, 30, 1) +,(985, 192, 6, '', '', 1.0, 1, 1, 221, 3, 1, 0, 30, 1) +,(986, 192, 31, '', '', 1.0, 1, 1, 222, 3, 1, 0, 30, 1) +,(987, 192, 4, '', '', 1.0, 1, 1, 223, 3, 1, 0, 30, 1) +,(988, 193, 1, '', '', 1.0, 1, 1, 224, 3, 1, 0, 30, 1) +,(989, 193, 5, '', '', 1.0, 1, 1, 225, 3, 1, 0, 30, 1) +,(990, 193, 28, '', '', 1.0, 1, 1, 226, 3, 1, 0, 30, 1) +,(991, 193, 30, '', '', 1.0, 1, 1, 227, 3, 1, 0, 30, 1) +,(992, 193, 6, '', '', 1.0, 1, 1, 228, 3, 1, 0, 30, 1) +,(993, 193, 31, '', '', 1.0, 1, 1, 229, 3, 1, 0, 30, 1) +,(994, 193, 4, '', '', 1.0, 1, 1, 230, 3, 1, 0, 30, 1) +,(995, 194, 1, '', '', 1.0, 1, 1, 231, 3, 1, 0, 30, 1) +,(996, 194, 5, '', '', 1.0, 1, 1, 232, 3, 1, 0, 30, 1) +,(997, 194, 28, '', '', 1.0, 1, 1, 233, 3, 1, 0, 30, 1) +,(998, 194, 30, '', '', 1.0, 1, 1, 234, 3, 1, 0, 30, 1) +,(999, 194, 6, '', '', 1.0, 1, 1, 235, 3, 1, 0, 30, 1) +,(1000, 194, 31, '', '', 1.0, 1, 1, 236, 3, 1, 0, 30, 1) +,(1001, 194, 4, '', '', 1.0, 1, 1, 237, 3, 1, 0, 30, 1) +,(1002, 195, 1, '', '', 1.0, 1, 1, 238, 3, 1, 0, 30, 1) +,(1003, 195, 5, '', '', 1.0, 1, 1, 239, 3, 1, 0, 30, 1) +,(1004, 195, 28, '', '', 1.0, 1, 1, 240, 3, 1, 0, 30, 1) +,(1005, 195, 30, '', '', 1.0, 1, 1, 241, 3, 1, 0, 30, 1) +,(1006, 195, 6, '', '', 1.0, 1, 1, 242, 3, 1, 0, 30, 1) +,(1007, 195, 31, '', '', 1.0, 1, 1, 243, 3, 1, 0, 30, 1) +,(1008, 195, 4, '', '', 1.0, 1, 1, 244, 3, 1, 0, 30, 1); + +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (3, 'Ring') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(196, 'GeTu BLTV', 0, null, 196, 0, 100, 'a3c2fbb3-9b6d-4cf5-a47a-494212db2dfa', 1) +,(197, 'K1', 0, 196, 197, 0, 10, '9cfd1baa-c239-4c51-8f68-9b0ebcf90298', 1) +,(198, 'K2', 0, 196, 198, 0, 12, 'c155f2bd-6c50-4197-9c20-18ee89ac172c', 1) +,(199, 'K3', 0, 196, 199, 0, 14, '52de18d0-9a65-4127-b0e6-2c50971ffac8', 1) +,(200, 'K4', 0, 196, 200, 0, 16, '905c78ed-d879-4c5b-a742-33a484601e8c', 1) +,(201, 'K5', 0, 196, 201, 0, 100, '65c589da-3973-4dff-bacf-17bbe8f0664b', 1) +,(202, 'K6', 0, 196, 202, 0, 100, 'a54750c1-5a8c-459e-99ca-a723e62d35b3', 1) +,(203, 'K7', 0, 196, 203, 0, 100, '77e73438-e670-4ac2-abab-3879bab48910', 1) +,(204, 'KD', 0, 196, 204, 22, 100, '573b31a7-be3f-4563-b8c4-6448b995ea6b', 1) +,(205, 'KH', 0, 196, 205, 28, 100, '8ab21806-6acb-44d0-86d3-97e506ed00d0', 1); +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(1009, 197, 6, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) +,(1010, 197, 1, '', '', 1.0, 1, 1, 1, 3, 1, 0, 30, 1) +,(1011, 197, 3, '', '', 1.0, 1, 1, 2, 3, 1, 0, 30, 1) +,(1012, 197, 4, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) +,(1013, 197, 5, '', '', 1.0, 1, 0, 4, 3, 1, 0, 30, 0) +,(1014, 198, 6, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) +,(1015, 198, 1, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) +,(1016, 198, 3, '', '', 1.0, 1, 1, 7, 3, 1, 0, 30, 1) +,(1017, 198, 4, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) +,(1018, 198, 5, '', '', 1.0, 1, 0, 9, 3, 1, 0, 30, 0) +,(1019, 199, 6, '', '', 1.0, 1, 1, 10, 3, 1, 0, 30, 1) +,(1020, 199, 1, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) +,(1021, 199, 3, '', '', 1.0, 1, 1, 12, 3, 1, 0, 30, 1) +,(1022, 199, 4, '', '', 1.0, 1, 1, 13, 3, 1, 0, 30, 1) +,(1023, 199, 5, '', '', 1.0, 1, 0, 14, 3, 1, 0, 30, 0) +,(1024, 200, 6, '', '', 1.0, 1, 1, 15, 3, 1, 0, 30, 1) +,(1025, 200, 1, '', '', 1.0, 1, 1, 16, 3, 1, 0, 30, 1) +,(1026, 200, 3, '', '', 1.0, 1, 1, 17, 3, 1, 0, 30, 1) +,(1027, 200, 4, '', '', 1.0, 1, 1, 18, 3, 1, 0, 30, 1) +,(1028, 200, 5, '', '', 1.0, 1, 0, 19, 3, 1, 0, 30, 0) +,(1029, 201, 6, '', '', 1.0, 1, 1, 20, 3, 1, 0, 30, 1) +,(1030, 201, 1, '', '', 1.0, 1, 1, 21, 3, 1, 0, 30, 1) +,(1031, 201, 3, '', '', 1.0, 1, 1, 22, 3, 1, 0, 30, 1) +,(1032, 201, 4, '', '', 1.0, 1, 1, 23, 3, 1, 0, 30, 1) +,(1033, 201, 5, '', '', 1.0, 1, 0, 24, 3, 1, 0, 30, 0) +,(1034, 202, 6, '', '', 1.0, 1, 1, 25, 3, 1, 0, 30, 1) +,(1035, 202, 1, '', '', 1.0, 1, 1, 26, 3, 1, 0, 30, 1) +,(1036, 202, 3, '', '', 1.0, 1, 1, 27, 3, 1, 0, 30, 1) +,(1037, 202, 4, '', '', 1.0, 1, 1, 28, 3, 1, 0, 30, 1) +,(1038, 202, 5, '', '', 1.0, 1, 0, 29, 3, 1, 0, 30, 0) +,(1039, 203, 6, '', '', 1.0, 1, 1, 30, 3, 1, 0, 30, 1) +,(1040, 203, 1, '', '', 1.0, 1, 1, 31, 3, 1, 0, 30, 1) +,(1041, 203, 3, '', '', 1.0, 1, 1, 32, 3, 1, 0, 30, 1) +,(1042, 203, 4, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) +,(1043, 203, 5, '', '', 1.0, 1, 0, 34, 3, 1, 0, 30, 0) +,(1044, 204, 6, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1) +,(1045, 204, 1, '', '', 1.0, 1, 1, 36, 3, 1, 0, 30, 1) +,(1046, 204, 3, '', '', 1.0, 1, 1, 37, 3, 1, 0, 30, 1) +,(1047, 204, 4, '', '', 1.0, 1, 1, 38, 3, 1, 0, 30, 1) +,(1048, 204, 5, '', '', 1.0, 1, 0, 39, 3, 1, 0, 30, 0) +,(1049, 205, 6, '', '', 1.0, 1, 1, 40, 3, 1, 0, 30, 1) +,(1050, 205, 1, '', '', 1.0, 1, 1, 41, 3, 1, 0, 30, 1) +,(1051, 205, 3, '', '', 1.0, 1, 1, 42, 3, 1, 0, 30, 1) +,(1052, 205, 4, '', '', 1.0, 1, 1, 43, 3, 1, 0, 30, 1) +,(1053, 205, 5, '', '', 1.0, 1, 0, 44, 3, 1, 0, 30, 0); + diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql index ebf02744c..9c8917157 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql @@ -109,7 +109,15 @@ update programm where id=1 or parent_id=1 ; - +-- fix age-limitations K1-K4 inofficial, for GeTu BLTV +-- KD official STV +UPDATE programm + set alter_von=22 + where id=42; +-- KH official STV +UPDATE programm + set alter_von=28 + where id=43; -- Test Programm-Extensions insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; @@ -127,7 +135,7 @@ insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, ,(99, 'WK V Jug', 1, 98, 99, 14, 18, '8793e2a5-ddc0-43f8-ac8a-fbdad40e2594', 1) ,(100, 'WK VI Schüler A', 1, 98, 100, 12, 13, '640e4a29-0c6a-4083-9fcc-cca79105644d', 1) ,(101, 'WK VII Schüler B', 1, 98, 101, 10, 11, '6859201a-bd3d-4917-9b1e-b0898f6df7d2', 1) -,(102, 'WK VIII Schüler C', 1, 98, 102, 8, 10, '3bcdf06e-827c-40e3-9209-74b3ba5314e1', 1) +,(102, 'WK VIII Schüler C', 1, 98, 102, 8, 9, '3bcdf06e-827c-40e3-9209-74b3ba5314e1', 1) ,(103, 'WK IX Schüler D', 1, 98, 103, 0, 7, '3b7aab26-4a6d-4dd5-a53c-58fca79ec62a', 1); insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values (435, 94, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) diff --git a/src/main/scala/ch/seidel/kutu/domain/NewUUID.scala b/src/main/scala/ch/seidel/kutu/domain/NewUUID.scala index 5801e1848..ebfb9ebb4 100644 --- a/src/main/scala/ch/seidel/kutu/domain/NewUUID.scala +++ b/src/main/scala/ch/seidel/kutu/domain/NewUUID.scala @@ -6,7 +6,7 @@ import java.sql.{SQLDataException, SQLException} import java.util.UUID object NewUUID { - def install(c: SQLiteConnection) { + def install(c: SQLiteConnection): Unit = { Function.create(c, "NewUUID", new NewUUID) } } diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index 9a78dc296..f49abd86b 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -801,32 +801,51 @@ trait WettkampfService extends DBService val pgmIdRoot: Long = wkdisciplines.map(_.programmId).max + 1L val nextPgmId: Long = pgmIdRoot + 1L + val nameMatcher: Regex = "(?iumU)^([\\w\\h\\s\\d]+[^\\h\\s\\(])".r + val alterVonMatcher: Regex = "(?iumU)\\(.*von=([\\d]{1,2}).*\\)$".r + val alterBisMatcher: Regex = "(?iumU)\\(.*bis=([\\d]{1,2}).*\\)$".r + val sexMatcher: Regex = "(?iumU)\\(.*sex=([mMwW]{1,2}).*\\)$".r + val startMatcher: Regex = "(?iumU)\\(.*start=([01jJnNyYwWtTfF]{1}).*\\)$".r + val sexMapping = (for { + w <- disziplinlist + name = nameMatcher.findFirstMatchIn(w).map(md => md.group(1)).mkString + } yield { + (name->sexMatcher.findFirstMatchIn(w).map(md => md.group(1)).mkString.toUpperCase) + }).toMap + val startMapping = (for { + w <- disziplinlist + name = nameMatcher.findFirstMatchIn(w).map(md => md.group(1)).mkString + } yield { + (name->startMatcher.findFirstMatchIn(w).map(md => md.group(1)).mkString.toUpperCase) + }).toMap + val diszInserts = for { w <- disziplinlist - if !disciplines.exists(_.name.equalsIgnoreCase(w)) + name = nameMatcher.findFirstMatchIn(w).map(md => md.group(1)).mkString + if !disciplines.exists(_.name.equalsIgnoreCase(name)) } yield { + sqlu""" INSERT INTO disziplin (name) VALUES ($w) """ >> sql""" - SELECT * from disziplin where name=$w + SELECT * from disziplin where name=$name """.as[Disziplin] } val insertedDiszList = Await.result(database.run{ DBIO.sequence(diszInserts).transactionally - }, Duration.Inf).flatten ++ disziplinlist.flatMap(w => disciplines.filter(d => d.name.equalsIgnoreCase(w))) - - val nameMatcher: Regex = "(?iumU)^([\\w\\h\\s\\d]+[^\\h\\s\\(])".r - val alterVonMatcher: Regex = "(?iumU)\\(.*von=([\\d]{1,2}).*\\)$".r - val alterBisMatcher: Regex = "(?iumU)\\(.*bis=([\\d]{1,2}).*\\)$".r + }, Duration.Inf).flatten ++ disziplinlist.flatMap{w => + val name = nameMatcher.findFirstMatchIn(w).map(md => md.group(1)).mkString + disciplines.filter(d => d.name.equalsIgnoreCase(name)) + } val rootPgmInsert = sqlu""" INSERT INTO programm - (id, parent_id, name, aggregate, ord, riegenmode, uuid) + (id, name, aggregate, ord, riegenmode, uuid) VALUES - ($pgmIdRoot, 0, $rootprogram, 0, $pgmIdRoot, $riegenmode, ${UUID.randomUUID().toString}) + ($pgmIdRoot, $rootprogram, 0, $pgmIdRoot, $riegenmode, ${UUID.randomUUID().toString}) """ >> sql""" SELECT * from programm where id=$pgmIdRoot @@ -877,10 +896,24 @@ trait WettkampfService extends DBService }).zipWithIndex.map { case ((p, d), i) => val id = i + nextWKDiszId + val m = sexMapping.get(d.name) match { + case Some(s) if s.contains("M") => 1 + case Some(s) if s.isEmpty => 1 + case _ => 0 + } + val f = sexMapping.get(d.name) match { + case Some(s) if s.contains("W") => 1 + case Some(s) if s.isEmpty => 1 + case _ => 0 + } + val start = startMapping.get(d.name) match { + case Some(s) if s.matches("[0nNfF]{1}") => 0 + case _ => 1 + } sqlu""" INSERT INTO wettkampfdisziplin - (id, programm_id, disziplin_id, notenfaktor, ord) + (id, programm_id, disziplin_id, notenfaktor, ord, masculin, feminim, startgeraet) VALUES - ($id, ${p.id}, ${d.id}, 1.000, $i) + ($id, ${p.id}, ${d.id}, 1.000, $i, $m, $f, $start) """ >> sql""" SELECT * from wettkampfdisziplin where id=$id diff --git a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala index d1f953ff2..38776dd6e 100644 --- a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala @@ -101,7 +101,7 @@ class WettkampfSpec extends KuTuBaseSpec { , "Pflicht/WK V Jug(von=14 bis=18)" , "Pflicht/WK VI Schüler A(von=12 bis=13)" , "Pflicht/WK VII Schüler B(von=10 bis=11)" - , "Pflicht/WK VIII Schüler C(von=8 bis=10)" + , "Pflicht/WK VIII Schüler C(von=8 bis=9)" , "Pflicht/WK IX Schüler D(von=0 bis=7)" ) ) @@ -150,6 +150,23 @@ class WettkampfSpec extends KuTuBaseSpec { ) printNewWettkampfModeInsertStatements(turn10) } + "create GeTu BLTV" in { + val tga = insertWettkampfProgram(s"GeTu BLTV-Test", 1, + List("Reck", "Boden", "Ring", "Sprung", "Barren(sex=m start=0)"), + List( + "K1(bis=10)" + , "K2(bis=12)" + , "K3(bis=14)" + , "K4(bis=16)" + , "K5" + , "K6" + , "K7" + , "KD(von=22)" + , "KH(von=28)" + ) + ) + printNewWettkampfModeInsertStatements(tga) + } } @@ -170,7 +187,7 @@ class WettkampfSpec extends KuTuBaseSpec { flatten(wdp.programm) } .distinct.sortBy(_.id) - .map(p => s"(${p.id}, '${p.name}', ${p.aggregate}, ${p.parent.map(_.id).getOrElse(0)}, ${p.ord}, ${p.alterVon}, ${p.alterBis}, '${p.uuid}', ${p.riegenmode})").mkString("", "\n,", ";").split("\n").toList) ::: + .map(p => s"(${p.id}, '${p.name}', ${p.aggregate}, ${p.parent.map(_.id.toString).getOrElse("null")}, ${p.ord}, ${p.alterVon}, ${p.alterBis}, '${p.uuid}', ${p.riegenmode})").mkString("", "\n,", ";").split("\n").toList) ::: ("insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values " +: tga .map(wdp => s"(${wdp.id}, ${wdp.programm.id}, ${wdp.disziplin.id}, '${wdp.kurzbeschreibung}', ${wdp.detailbeschreibung.map(b => s"'$b'").getOrElse("''")}, ${wdp.notenSpez.calcEndnote(0.000d, 1.000d, wdp)}, ${wdp.masculin}, ${wdp.feminim}, ${wdp.ord}, ${wdp.scale}, ${wdp.dnote}, ${wdp.min}, ${wdp.max}, ${wdp.startgeraet})").mkString("", "\n,", ";").split("\n").toList) From 49eddaa3096c840b37f012b998b6dca3cd852286 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sun, 26 Mar 2023 00:11:13 +0100 Subject: [PATCH 08/99] =?UTF-8?q?#87=20PoC=20for=20Turn10=20and=20TG=20All?= =?UTF-8?q?g=C3=A4u=20WK-Modes=20-=20Simplify=20Turn10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Reduce to just BS / OS -programs - Fix squad-logic --- .../dbscripts/AddWKDisziplinMetafields-pg.sql | 604 +++++++----------- .../AddWKDisziplinMetafields-sqllite.sql | 556 +++++++--------- .../seidel/kutu/domain/DisziplinService.scala | 1 - .../seidel/kutu/domain/WettkampfService.scala | 6 +- .../scala/ch/seidel/kutu/domain/package.scala | 2 +- .../seidel/kutu/squad/DurchgangBuilder.scala | 34 +- .../ch/seidel/kutu/squad/RiegenBuilder.scala | 2 +- .../scala/ch/seidel/kutu/view/RiegenTab.scala | 4 +- .../ch/seidel/kutu/view/WettkampfInfo.scala | 1 + .../kutu/view/WettkampfWertungTab.scala | 2 +- .../ch/seidel/kutu/base/KuTuBaseSpec.scala | 28 +- .../ch/seidel/kutu/domain/WettkampfSpec.scala | 84 ++- 12 files changed, 537 insertions(+), 787 deletions(-) diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql index 07826fbce..2808bdad1 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql @@ -114,413 +114,241 @@ update programm ; -- Test Programm-Extensions - +-- KuTu DTL Kür & Pflicht insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; -insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (3, 'Ring') on conflict (id) do nothing; insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(148, 'TG Allgäu', 0, null, 148, 0, 100, 'aee67f3e-d790-49c8-8641-1f1376359716', 1) -,(149, 'Kür', 1, 148, 149, 0, 100, '5cbe0f01-e41a-41ff-876b-894ae36f9fe0', 1) -,(150, 'WK I Kür', 1, 149, 150, 0, 100, 'fae36b23-b6b0-406a-84be-b976c3730962', 1) -,(151, 'WK II LK1', 1, 149, 151, 0, 100, '9490ca83-be96-4ddb-9f11-98dd196befa2', 1) -,(152, 'WK III LK1', 1, 149, 152, 16, 17, '664fb1f2-9979-4131-b72e-f4bc6c497db5', 1) -,(153, 'WK IV LK2', 1, 149, 153, 14, 15, 'c890b368-0adb-4b5b-9ddb-a5a7f0423545', 1) -,(154, 'Pflicht', 1, 148, 154, 0, 100, '783588d9-835b-45cd-8a33-1bc58814c784', 1) -,(155, 'WK V Jug', 1, 154, 155, 14, 18, 'ac7d4861-44fd-4eec-81f0-8e00bfe1907a', 1) -,(156, 'WK VI Schüler A', 1, 154, 156, 12, 13, '1bc1dd70-d849-4026-8644-8c82b01e5364', 1) -,(157, 'WK VII Schüler B', 1, 154, 157, 10, 11, '053a908f-170e-4d9f-acec-a0603a2a9bf5', 1) -,(158, 'WK VIII Schüler C', 1, 154, 158, 8, 9, 'c60568b9-3f03-4693-b5fa-37199cf05cf4', 1) -,(159, 'WK IX Schüler D', 1, 154, 159, 0, 7, '328b6137-70bb-4b67-843b-10d99e377836', 1); +(184, 'KuTu DTL Kür & Pflicht', 0, null, 184, 0, 100, '29ee216c-f1bf-4940-9b2f-a98b6af0ef73', 1) +,(185, 'Kür', 1, 184, 185, 0, 100, '9868786d-29fd-4560-8a14-a32a5dd56c7a', 1) +,(186, 'WK I Kür', 1, 185, 186, 0, 100, 'a731a36f-2190-403a-8dff-5009b862d6b2', 1) +,(187, 'WK II LK1', 1, 185, 187, 0, 100, '1aa8711c-5bf3-45bd-98cf-8f143fe57f94', 1) +,(188, 'WK III LK1', 1, 185, 188, 16, 17, '0a685ee1-e4bd-450a-b387-5470d4424e13', 1) +,(189, 'WK IV LK2', 1, 185, 189, 14, 15, '6517a841-fc1e-49fa-8d45-9c90cad2a739', 1) +,(190, 'Pflicht', 1, 184, 190, 0, 100, 'df6de257-03e0-4b61-8855-e7f9c4b416b0', 1) +,(191, 'WK V Jug', 1, 190, 191, 14, 18, '1f29b75e-6800-4eab-9350-1d5029bafa69', 1) +,(192, 'WK VI Schüler A', 1, 190, 192, 12, 13, 'd7b983af-cbac-4ffc-bbe1-90255a2c828c', 1) +,(193, 'WK VII Schüler B', 1, 190, 193, 10, 11, 'acddda1d-3561-4bf8-9c3e-c8d6caaa5771', 1) +,(194, 'WK VIII Schüler C', 1, 190, 194, 8, 9, '7f0921ec-8e35-4f00-b9d4-9a9e7fccc3d8', 1) +,(195, 'WK IX Schüler D', 1, 190, 195, 0, 7, '67dd95d0-5b48-4f82-b109-8c564754b577', 1); +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(847, 186, 1, '', '', 1.0, 1, 0, 0, 3, 1, 0, 30, 1) +,(848, 186, 3, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) +,(849, 186, 4, '', '', 1.0, 1, 0, 2, 3, 1, 0, 30, 1) +,(850, 186, 5, '', '', 1.0, 1, 0, 3, 3, 1, 0, 30, 1) +,(851, 186, 6, '', '', 1.0, 1, 0, 4, 3, 1, 0, 30, 1) +,(852, 187, 1, '', '', 1.0, 1, 0, 5, 3, 1, 0, 30, 1) +,(853, 187, 3, '', '', 1.0, 1, 0, 6, 3, 1, 0, 30, 1) +,(854, 187, 4, '', '', 1.0, 1, 0, 7, 3, 1, 0, 30, 1) +,(855, 187, 5, '', '', 1.0, 1, 0, 8, 3, 1, 0, 30, 1) +,(856, 187, 6, '', '', 1.0, 1, 0, 9, 3, 1, 0, 30, 1) +,(857, 188, 1, '', '', 1.0, 1, 0, 10, 3, 1, 0, 30, 1) +,(858, 188, 3, '', '', 1.0, 1, 0, 11, 3, 1, 0, 30, 1) +,(859, 188, 4, '', '', 1.0, 1, 0, 12, 3, 1, 0, 30, 1) +,(860, 188, 5, '', '', 1.0, 1, 0, 13, 3, 1, 0, 30, 1) +,(861, 188, 6, '', '', 1.0, 1, 0, 14, 3, 1, 0, 30, 1) +,(862, 189, 1, '', '', 1.0, 1, 0, 15, 3, 1, 0, 30, 1) +,(863, 189, 3, '', '', 1.0, 1, 0, 16, 3, 1, 0, 30, 1) +,(864, 189, 4, '', '', 1.0, 1, 0, 17, 3, 1, 0, 30, 1) +,(865, 189, 5, '', '', 1.0, 1, 0, 18, 3, 1, 0, 30, 1) +,(866, 189, 6, '', '', 1.0, 1, 0, 19, 3, 1, 0, 30, 1) +,(867, 191, 1, '', '', 1.0, 1, 0, 20, 3, 1, 0, 30, 1) +,(868, 191, 3, '', '', 1.0, 1, 0, 21, 3, 1, 0, 30, 1) +,(869, 191, 4, '', '', 1.0, 1, 0, 22, 3, 1, 0, 30, 1) +,(870, 191, 5, '', '', 1.0, 1, 0, 23, 3, 1, 0, 30, 1) +,(871, 191, 6, '', '', 1.0, 1, 0, 24, 3, 1, 0, 30, 1) +,(872, 192, 1, '', '', 1.0, 1, 0, 25, 3, 1, 0, 30, 1) +,(873, 192, 3, '', '', 1.0, 1, 0, 26, 3, 1, 0, 30, 1) +,(874, 192, 4, '', '', 1.0, 1, 0, 27, 3, 1, 0, 30, 1) +,(875, 192, 5, '', '', 1.0, 1, 0, 28, 3, 1, 0, 30, 1) +,(876, 192, 6, '', '', 1.0, 1, 0, 29, 3, 1, 0, 30, 1) +,(877, 193, 1, '', '', 1.0, 1, 0, 30, 3, 1, 0, 30, 1) +,(878, 193, 3, '', '', 1.0, 1, 0, 31, 3, 1, 0, 30, 1) +,(879, 193, 4, '', '', 1.0, 1, 0, 32, 3, 1, 0, 30, 1) +,(880, 193, 5, '', '', 1.0, 1, 0, 33, 3, 1, 0, 30, 1) +,(881, 193, 6, '', '', 1.0, 1, 0, 34, 3, 1, 0, 30, 1) +,(882, 194, 1, '', '', 1.0, 1, 0, 35, 3, 1, 0, 30, 1) +,(883, 194, 3, '', '', 1.0, 1, 0, 36, 3, 1, 0, 30, 1) +,(884, 194, 4, '', '', 1.0, 1, 0, 37, 3, 1, 0, 30, 1) +,(885, 194, 5, '', '', 1.0, 1, 0, 38, 3, 1, 0, 30, 1) +,(886, 194, 6, '', '', 1.0, 1, 0, 39, 3, 1, 0, 30, 1) +,(887, 195, 1, '', '', 1.0, 1, 0, 40, 3, 1, 0, 30, 1) +,(888, 195, 3, '', '', 1.0, 1, 0, 41, 3, 1, 0, 30, 1) +,(889, 195, 4, '', '', 1.0, 1, 0, 42, 3, 1, 0, 30, 1) +,(890, 195, 5, '', '', 1.0, 1, 0, 43, 3, 1, 0, 30, 1) +,(891, 195, 6, '', '', 1.0, 1, 0, 44, 3, 1, 0, 30, 1); + +-- KuTuRi DTL Kür & Pflicht +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(196, 'KuTuRi DTL Kür & Pflicht', 0, null, 196, 0, 100, 'b66dac1b-e2cf-43b5-a919-0d94aa42680c', 1) +,(197, 'Kür', 1, 196, 197, 0, 100, 'b371f1b4-ff84-4a65-b536-9ff6e0479a6d', 1) +,(198, 'WK I Kür', 1, 197, 198, 0, 100, '932da381-63ea-4166-9bb5-04d7d684d105', 1) +,(199, 'WK II LK1', 1, 197, 199, 0, 100, '146a17d5-7ab4-4086-81f1-db3329b07e2a', 1) +,(200, 'WK III LK1', 1, 197, 200, 16, 17, 'b70b2f6d-1321-4666-bac8-5807a15786eb', 1) +,(201, 'WK IV LK2', 1, 197, 201, 14, 15, '28efc451-d762-42ea-9618-b4c0f23cbe9b', 1) +,(202, 'Pflicht', 1, 196, 202, 0, 100, '04d249b9-5c2c-4a97-a6bc-ee86062d6cac', 1) +,(203, 'WK V Jug', 1, 202, 203, 14, 18, 'd0c91f7c-fe42-466a-a7c0-c3bec17133fe', 1) +,(204, 'WK VI Schüler A', 1, 202, 204, 12, 13, '45584b7f-498c-42a8-b6bb-c06525cac332', 1) +,(205, 'WK VII Schüler B', 1, 202, 205, 10, 11, '863da537-b5d0-4259-ae62-b358f70c0ff4', 1) +,(206, 'WK VIII Schüler C', 1, 202, 206, 8, 9, '6567925e-2335-421c-b677-d426adb258e3', 1) +,(207, 'WK IX Schüler D', 1, 202, 207, 0, 7, 'e5224fa7-15c8-4840-8c9c-f2db160e1147', 1); insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(728, 150, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) -,(729, 150, 5, '', '', 1.0, 1, 1, 1, 3, 1, 0, 30, 1) -,(730, 150, 4, '', '', 1.0, 1, 1, 2, 3, 1, 0, 30, 1) -,(731, 150, 6, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) -,(732, 151, 1, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) -,(733, 151, 5, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) -,(734, 151, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) -,(735, 151, 6, '', '', 1.0, 1, 1, 7, 3, 1, 0, 30, 1) -,(736, 152, 1, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) -,(737, 152, 5, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1) -,(738, 152, 4, '', '', 1.0, 1, 1, 10, 3, 1, 0, 30, 1) -,(739, 152, 6, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) -,(740, 153, 1, '', '', 1.0, 1, 1, 12, 3, 1, 0, 30, 1) -,(741, 153, 5, '', '', 1.0, 1, 1, 13, 3, 1, 0, 30, 1) -,(742, 153, 4, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) -,(743, 153, 6, '', '', 1.0, 1, 1, 15, 3, 1, 0, 30, 1) -,(744, 155, 1, '', '', 1.0, 1, 1, 16, 3, 1, 0, 30, 1) -,(745, 155, 5, '', '', 1.0, 1, 1, 17, 3, 1, 0, 30, 1) -,(746, 155, 4, '', '', 1.0, 1, 1, 18, 3, 1, 0, 30, 1) -,(747, 155, 6, '', '', 1.0, 1, 1, 19, 3, 1, 0, 30, 1) -,(748, 156, 1, '', '', 1.0, 1, 1, 20, 3, 1, 0, 30, 1) -,(749, 156, 5, '', '', 1.0, 1, 1, 21, 3, 1, 0, 30, 1) -,(750, 156, 4, '', '', 1.0, 1, 1, 22, 3, 1, 0, 30, 1) -,(751, 156, 6, '', '', 1.0, 1, 1, 23, 3, 1, 0, 30, 1) -,(752, 157, 1, '', '', 1.0, 1, 1, 24, 3, 1, 0, 30, 1) -,(753, 157, 5, '', '', 1.0, 1, 1, 25, 3, 1, 0, 30, 1) -,(754, 157, 4, '', '', 1.0, 1, 1, 26, 3, 1, 0, 30, 1) -,(755, 157, 6, '', '', 1.0, 1, 1, 27, 3, 1, 0, 30, 1) -,(756, 158, 1, '', '', 1.0, 1, 1, 28, 3, 1, 0, 30, 1) -,(757, 158, 5, '', '', 1.0, 1, 1, 29, 3, 1, 0, 30, 1) -,(758, 158, 4, '', '', 1.0, 1, 1, 30, 3, 1, 0, 30, 1) -,(759, 158, 6, '', '', 1.0, 1, 1, 31, 3, 1, 0, 30, 1) -,(760, 159, 1, '', '', 1.0, 1, 1, 32, 3, 1, 0, 30, 1) -,(761, 159, 5, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) -,(762, 159, 4, '', '', 1.0, 1, 1, 34, 3, 1, 0, 30, 1) -,(763, 159, 6, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1); +(892, 198, 4, '', '', 1.0, 0, 1, 0, 3, 1, 0, 30, 1) +,(893, 198, 5, '', '', 1.0, 0, 1, 1, 3, 1, 0, 30, 1) +,(894, 198, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) +,(895, 198, 1, '', '', 1.0, 0, 1, 3, 3, 1, 0, 30, 1) +,(896, 199, 4, '', '', 1.0, 0, 1, 4, 3, 1, 0, 30, 1) +,(897, 199, 5, '', '', 1.0, 0, 1, 5, 3, 1, 0, 30, 1) +,(898, 199, 28, '', '', 1.0, 0, 1, 6, 3, 1, 0, 30, 1) +,(899, 199, 1, '', '', 1.0, 0, 1, 7, 3, 1, 0, 30, 1) +,(900, 200, 4, '', '', 1.0, 0, 1, 8, 3, 1, 0, 30, 1) +,(901, 200, 5, '', '', 1.0, 0, 1, 9, 3, 1, 0, 30, 1) +,(902, 200, 28, '', '', 1.0, 0, 1, 10, 3, 1, 0, 30, 1) +,(903, 200, 1, '', '', 1.0, 0, 1, 11, 3, 1, 0, 30, 1) +,(904, 201, 4, '', '', 1.0, 0, 1, 12, 3, 1, 0, 30, 1) +,(905, 201, 5, '', '', 1.0, 0, 1, 13, 3, 1, 0, 30, 1) +,(906, 201, 28, '', '', 1.0, 0, 1, 14, 3, 1, 0, 30, 1) +,(907, 201, 1, '', '', 1.0, 0, 1, 15, 3, 1, 0, 30, 1) +,(908, 203, 4, '', '', 1.0, 0, 1, 16, 3, 1, 0, 30, 1) +,(909, 203, 5, '', '', 1.0, 0, 1, 17, 3, 1, 0, 30, 1) +,(910, 203, 28, '', '', 1.0, 0, 1, 18, 3, 1, 0, 30, 1) +,(911, 203, 1, '', '', 1.0, 0, 1, 19, 3, 1, 0, 30, 1) +,(912, 204, 4, '', '', 1.0, 0, 1, 20, 3, 1, 0, 30, 1) +,(913, 204, 5, '', '', 1.0, 0, 1, 21, 3, 1, 0, 30, 1) +,(914, 204, 28, '', '', 1.0, 0, 1, 22, 3, 1, 0, 30, 1) +,(915, 204, 1, '', '', 1.0, 0, 1, 23, 3, 1, 0, 30, 1) +,(916, 205, 4, '', '', 1.0, 0, 1, 24, 3, 1, 0, 30, 1) +,(917, 205, 5, '', '', 1.0, 0, 1, 25, 3, 1, 0, 30, 1) +,(918, 205, 28, '', '', 1.0, 0, 1, 26, 3, 1, 0, 30, 1) +,(919, 205, 1, '', '', 1.0, 0, 1, 27, 3, 1, 0, 30, 1) +,(920, 206, 4, '', '', 1.0, 0, 1, 28, 3, 1, 0, 30, 1) +,(921, 206, 5, '', '', 1.0, 0, 1, 29, 3, 1, 0, 30, 1) +,(922, 206, 28, '', '', 1.0, 0, 1, 30, 3, 1, 0, 30, 1) +,(923, 206, 1, '', '', 1.0, 0, 1, 31, 3, 1, 0, 30, 1) +,(924, 207, 4, '', '', 1.0, 0, 1, 32, 3, 1, 0, 30, 1) +,(925, 207, 5, '', '', 1.0, 0, 1, 33, 3, 1, 0, 30, 1) +,(926, 207, 28, '', '', 1.0, 0, 1, 34, 3, 1, 0, 30, 1) +,(927, 207, 1, '', '', 1.0, 0, 1, 35, 3, 1, 0, 30, 1); +-- Turn10-verein insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; insert into disziplin (id, name) values (30, 'Minitramp') on conflict (id) do nothing; insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; -insert into disziplin (id, name) values (31, 'Pferd') on conflict (id) do nothing; +insert into disziplin (id, name) values (27, 'Stufenbarren') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (32, 'Ringe') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(208, 'Turn10-Verein', 0, null, 208, 0, 100, 'b2d95501-52d2-4070-ab8c-27406cddb8fb', 2) +,(209, 'BS', 0, 208, 209, 0, 100, '812702c4-39b5-47c1-9c32-30243e7433a7', 2) +,(210, 'OS', 0, 208, 210, 0, 100, '6ea03ad7-0a10-4d34-b7b2-730f6325ef00', 2); +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(928, 209, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) +,(929, 209, 5, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) +,(930, 209, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) +,(931, 209, 30, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) +,(932, 209, 6, '', '', 1.0, 1, 0, 4, 3, 1, 0, 30, 1) +,(933, 209, 27, '', '', 1.0, 0, 1, 5, 3, 1, 0, 30, 1) +,(934, 209, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) +,(935, 209, 32, '', '', 1.0, 1, 0, 7, 3, 1, 0, 30, 1) +,(936, 210, 1, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) +,(937, 210, 5, '', '', 1.0, 1, 0, 9, 3, 1, 0, 30, 1) +,(938, 210, 28, '', '', 1.0, 0, 1, 10, 3, 1, 0, 30, 1) +,(939, 210, 30, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) +,(940, 210, 6, '', '', 1.0, 1, 0, 12, 3, 1, 0, 30, 1) +,(941, 210, 27, '', '', 1.0, 0, 1, 13, 3, 1, 0, 30, 1) +,(942, 210, 4, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) +,(943, 210, 32, '', '', 1.0, 1, 0, 15, 3, 1, 0, 30, 1); + +-- Turn10-Schule +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(160, 'Turn10', 0, null, 160, 0, 100, '99df7708-2e22-4ce1-904b-2fca5ac834e4', 1) -,(161, 'AK6 BS', 0, 160, 161, 0, 6, '337833d4-b3ac-4e0b-865e-df8e1c17b5eb', 1) -,(162, 'AK7 BS', 0, 160, 162, 7, 7, '22ec00f7-c9f1-45d3-a343-3f35b26483c0', 1) -,(163, 'AK8 BS', 0, 160, 163, 8, 8, '83f90e3d-4d8e-4b28-a8fa-e24e17b537aa', 1) -,(164, 'AK9 BS', 0, 160, 164, 9, 9, '447959c2-58e6-4351-ad96-460676495e27', 1) -,(165, 'AK10 BS', 0, 160, 165, 10, 10, '209f671f-2039-473b-9e9b-36c9f33f6599', 1) -,(166, 'AK11 BS', 0, 160, 166, 11, 11, 'd17e4b49-7495-49ec-aa0e-5da47867f650', 1) -,(167, 'AK12 BS', 0, 160, 167, 12, 12, '9a110e8b-593b-46a6-bf8d-61030dbab07f', 1) -,(168, 'AK13 BS', 0, 160, 168, 13, 13, '4d2960dc-e5e9-49e6-bcd9-088b96586a4f', 1) -,(169, 'AK13 OS', 0, 160, 169, 13, 13, 'b73db199-a954-418f-ad67-1113cd5d0b93', 1) -,(170, 'AK14 BS', 0, 160, 170, 14, 14, '8534de3a-fd2c-4dca-a6c2-879fd05bfaaf', 1) -,(171, 'AK14 OS', 0, 160, 171, 14, 14, 'af49881b-21e1-4d8b-8f80-ba87b1ad13f0', 1) -,(172, 'AK15 BS', 0, 160, 172, 15, 15, 'c100ddd2-48e9-43e3-aa58-59cf857d5078', 1) -,(173, 'AK15 OS', 0, 160, 173, 15, 15, '1cd7112f-1862-49fa-97b8-a3e2f1098d60', 1) -,(174, 'AK16 BS', 0, 160, 174, 16, 16, '4795a48f-fc12-46b9-91c2-1ce0a363976b', 1) -,(175, 'AK16 OS', 0, 160, 175, 16, 16, '49b3fdc5-6979-427d-a530-7f17b77ba309', 1) -,(176, 'AK17 BS', 0, 160, 176, 17, 17, '4d747eb3-4cca-41fe-a414-4804f091118a', 1) -,(177, 'AK17 OS', 0, 160, 177, 17, 17, '66a2f277-f974-409a-bb52-fbe783488bcb', 1) -,(178, 'AK18 BS', 0, 160, 178, 18, 23, '331b8674-93ff-4a4c-8773-cf1d9c3fd941', 1) -,(179, 'AK18 OS', 0, 160, 179, 18, 23, 'e5ed953b-5a29-47b6-ab09-69427fafd5bf', 1) -,(180, 'AK24 BS', 0, 160, 180, 24, 29, 'ed64a599-65ff-4d81-ba78-0f0fa20eb4ec', 1) -,(181, 'AK24 OS', 0, 160, 181, 24, 29, '72cf1fd6-9a2c-4260-9ceb-0d03a7d1775a', 1) -,(182, 'AK30 BS', 0, 160, 182, 30, 34, '35fc987c-26c0-420c-a408-a3526991c6b7', 1) -,(183, 'AK30 OS', 0, 160, 183, 30, 34, '3dc7ff1f-8b3b-426f-b913-f215b77b32ee', 1) -,(184, 'AK35 BS', 0, 160, 184, 35, 39, '17b6edab-99b4-4813-b1de-0ffa5bef9028', 1) -,(185, 'AK35 OS', 0, 160, 185, 35, 39, '6e6e0a0f-bcc7-4b4b-8dfb-5360250054cc', 1) -,(186, 'AK40 BS', 0, 160, 186, 40, 44, '4e0dc084-ed71-4fb4-97b3-07dcfa4ad77c', 1) -,(187, 'AK40 OS', 0, 160, 187, 40, 44, '0767a83d-8fe2-4a3d-af97-746e26640262', 1) -,(188, 'AK45 BS', 0, 160, 188, 45, 49, 'deec1cfa-7cc6-4e23-9b16-0d94f7d833b8', 1) -,(189, 'AK45 OS', 0, 160, 189, 45, 49, 'b098c2a0-32d2-4a46-a3c2-3ddd68bc05e0', 1) -,(190, 'AK50 BS', 0, 160, 190, 50, 54, '19ceabf0-97e3-4db8-93bd-ab0ad8efcbe0', 1) -,(191, 'AK50 OS', 0, 160, 191, 50, 54, 'bf4a88c2-2e63-4cef-b7ca-cdde409e9978', 1) -,(192, 'AK55 BS', 0, 160, 192, 55, 59, '6a4d7353-1b19-4235-88a7-a1a230790689', 1) -,(193, 'AK55 OS', 0, 160, 193, 55, 59, '6ca640c0-e0ec-4999-a762-32962b0ab86d', 1) -,(194, 'AK60 BS', 0, 160, 194, 60, 64, '0f377c87-32b4-4061-ab26-80564aa5e40b', 1) -,(195, 'AK60 OS', 0, 160, 195, 60, 64, '547d8955-1bd8-4bd9-bf98-6787550adbdb', 1); +(211, 'Turn10-Schule', 0, null, 211, 0, 100, 'e3f740c0-4b4e-4b0f-9cb5-c884363d4217', 2) +,(212, 'BS', 0, 211, 212, 0, 100, '316ab2c8-6fff-4f4d-b2a4-afd360f63fcd', 2) +,(213, 'OS', 0, 211, 213, 0, 100, '9585596a-a571-414d-9a32-000a1e38c307', 2); insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(764, 161, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) -,(765, 161, 5, '', '', 1.0, 1, 1, 1, 3, 1, 0, 30, 1) -,(766, 161, 28, '', '', 1.0, 1, 1, 2, 3, 1, 0, 30, 1) -,(767, 161, 30, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) -,(768, 161, 6, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) -,(769, 161, 31, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) -,(770, 161, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) -,(771, 162, 1, '', '', 1.0, 1, 1, 7, 3, 1, 0, 30, 1) -,(772, 162, 5, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) -,(773, 162, 28, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1) -,(774, 162, 30, '', '', 1.0, 1, 1, 10, 3, 1, 0, 30, 1) -,(775, 162, 6, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) -,(776, 162, 31, '', '', 1.0, 1, 1, 12, 3, 1, 0, 30, 1) -,(777, 162, 4, '', '', 1.0, 1, 1, 13, 3, 1, 0, 30, 1) -,(778, 163, 1, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) -,(779, 163, 5, '', '', 1.0, 1, 1, 15, 3, 1, 0, 30, 1) -,(780, 163, 28, '', '', 1.0, 1, 1, 16, 3, 1, 0, 30, 1) -,(781, 163, 30, '', '', 1.0, 1, 1, 17, 3, 1, 0, 30, 1) -,(782, 163, 6, '', '', 1.0, 1, 1, 18, 3, 1, 0, 30, 1) -,(783, 163, 31, '', '', 1.0, 1, 1, 19, 3, 1, 0, 30, 1) -,(784, 163, 4, '', '', 1.0, 1, 1, 20, 3, 1, 0, 30, 1) -,(785, 164, 1, '', '', 1.0, 1, 1, 21, 3, 1, 0, 30, 1) -,(786, 164, 5, '', '', 1.0, 1, 1, 22, 3, 1, 0, 30, 1) -,(787, 164, 28, '', '', 1.0, 1, 1, 23, 3, 1, 0, 30, 1) -,(788, 164, 30, '', '', 1.0, 1, 1, 24, 3, 1, 0, 30, 1) -,(789, 164, 6, '', '', 1.0, 1, 1, 25, 3, 1, 0, 30, 1) -,(790, 164, 31, '', '', 1.0, 1, 1, 26, 3, 1, 0, 30, 1) -,(791, 164, 4, '', '', 1.0, 1, 1, 27, 3, 1, 0, 30, 1) -,(792, 165, 1, '', '', 1.0, 1, 1, 28, 3, 1, 0, 30, 1) -,(793, 165, 5, '', '', 1.0, 1, 1, 29, 3, 1, 0, 30, 1) -,(794, 165, 28, '', '', 1.0, 1, 1, 30, 3, 1, 0, 30, 1) -,(795, 165, 30, '', '', 1.0, 1, 1, 31, 3, 1, 0, 30, 1) -,(796, 165, 6, '', '', 1.0, 1, 1, 32, 3, 1, 0, 30, 1) -,(797, 165, 31, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) -,(798, 165, 4, '', '', 1.0, 1, 1, 34, 3, 1, 0, 30, 1) -,(799, 166, 1, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1) -,(800, 166, 5, '', '', 1.0, 1, 1, 36, 3, 1, 0, 30, 1) -,(801, 166, 28, '', '', 1.0, 1, 1, 37, 3, 1, 0, 30, 1) -,(802, 166, 30, '', '', 1.0, 1, 1, 38, 3, 1, 0, 30, 1) -,(803, 166, 6, '', '', 1.0, 1, 1, 39, 3, 1, 0, 30, 1) -,(804, 166, 31, '', '', 1.0, 1, 1, 40, 3, 1, 0, 30, 1) -,(805, 166, 4, '', '', 1.0, 1, 1, 41, 3, 1, 0, 30, 1) -,(806, 167, 1, '', '', 1.0, 1, 1, 42, 3, 1, 0, 30, 1) -,(807, 167, 5, '', '', 1.0, 1, 1, 43, 3, 1, 0, 30, 1) -,(808, 167, 28, '', '', 1.0, 1, 1, 44, 3, 1, 0, 30, 1) -,(809, 167, 30, '', '', 1.0, 1, 1, 45, 3, 1, 0, 30, 1) -,(810, 167, 6, '', '', 1.0, 1, 1, 46, 3, 1, 0, 30, 1) -,(811, 167, 31, '', '', 1.0, 1, 1, 47, 3, 1, 0, 30, 1) -,(812, 167, 4, '', '', 1.0, 1, 1, 48, 3, 1, 0, 30, 1) -,(813, 168, 1, '', '', 1.0, 1, 1, 49, 3, 1, 0, 30, 1) -,(814, 168, 5, '', '', 1.0, 1, 1, 50, 3, 1, 0, 30, 1) -,(815, 168, 28, '', '', 1.0, 1, 1, 51, 3, 1, 0, 30, 1) -,(816, 168, 30, '', '', 1.0, 1, 1, 52, 3, 1, 0, 30, 1) -,(817, 168, 6, '', '', 1.0, 1, 1, 53, 3, 1, 0, 30, 1) -,(818, 168, 31, '', '', 1.0, 1, 1, 54, 3, 1, 0, 30, 1) -,(819, 168, 4, '', '', 1.0, 1, 1, 55, 3, 1, 0, 30, 1) -,(820, 169, 1, '', '', 1.0, 1, 1, 56, 3, 1, 0, 30, 1) -,(821, 169, 5, '', '', 1.0, 1, 1, 57, 3, 1, 0, 30, 1) -,(822, 169, 28, '', '', 1.0, 1, 1, 58, 3, 1, 0, 30, 1) -,(823, 169, 30, '', '', 1.0, 1, 1, 59, 3, 1, 0, 30, 1) -,(824, 169, 6, '', '', 1.0, 1, 1, 60, 3, 1, 0, 30, 1) -,(825, 169, 31, '', '', 1.0, 1, 1, 61, 3, 1, 0, 30, 1) -,(826, 169, 4, '', '', 1.0, 1, 1, 62, 3, 1, 0, 30, 1) -,(827, 170, 1, '', '', 1.0, 1, 1, 63, 3, 1, 0, 30, 1) -,(828, 170, 5, '', '', 1.0, 1, 1, 64, 3, 1, 0, 30, 1) -,(829, 170, 28, '', '', 1.0, 1, 1, 65, 3, 1, 0, 30, 1) -,(830, 170, 30, '', '', 1.0, 1, 1, 66, 3, 1, 0, 30, 1) -,(831, 170, 6, '', '', 1.0, 1, 1, 67, 3, 1, 0, 30, 1) -,(832, 170, 31, '', '', 1.0, 1, 1, 68, 3, 1, 0, 30, 1) -,(833, 170, 4, '', '', 1.0, 1, 1, 69, 3, 1, 0, 30, 1) -,(834, 171, 1, '', '', 1.0, 1, 1, 70, 3, 1, 0, 30, 1) -,(835, 171, 5, '', '', 1.0, 1, 1, 71, 3, 1, 0, 30, 1) -,(836, 171, 28, '', '', 1.0, 1, 1, 72, 3, 1, 0, 30, 1) -,(837, 171, 30, '', '', 1.0, 1, 1, 73, 3, 1, 0, 30, 1) -,(838, 171, 6, '', '', 1.0, 1, 1, 74, 3, 1, 0, 30, 1) -,(839, 171, 31, '', '', 1.0, 1, 1, 75, 3, 1, 0, 30, 1) -,(840, 171, 4, '', '', 1.0, 1, 1, 76, 3, 1, 0, 30, 1) -,(841, 172, 1, '', '', 1.0, 1, 1, 77, 3, 1, 0, 30, 1) -,(842, 172, 5, '', '', 1.0, 1, 1, 78, 3, 1, 0, 30, 1) -,(843, 172, 28, '', '', 1.0, 1, 1, 79, 3, 1, 0, 30, 1) -,(844, 172, 30, '', '', 1.0, 1, 1, 80, 3, 1, 0, 30, 1) -,(845, 172, 6, '', '', 1.0, 1, 1, 81, 3, 1, 0, 30, 1) -,(846, 172, 31, '', '', 1.0, 1, 1, 82, 3, 1, 0, 30, 1) -,(847, 172, 4, '', '', 1.0, 1, 1, 83, 3, 1, 0, 30, 1) -,(848, 173, 1, '', '', 1.0, 1, 1, 84, 3, 1, 0, 30, 1) -,(849, 173, 5, '', '', 1.0, 1, 1, 85, 3, 1, 0, 30, 1) -,(850, 173, 28, '', '', 1.0, 1, 1, 86, 3, 1, 0, 30, 1) -,(851, 173, 30, '', '', 1.0, 1, 1, 87, 3, 1, 0, 30, 1) -,(852, 173, 6, '', '', 1.0, 1, 1, 88, 3, 1, 0, 30, 1) -,(853, 173, 31, '', '', 1.0, 1, 1, 89, 3, 1, 0, 30, 1) -,(854, 173, 4, '', '', 1.0, 1, 1, 90, 3, 1, 0, 30, 1) -,(855, 174, 1, '', '', 1.0, 1, 1, 91, 3, 1, 0, 30, 1) -,(856, 174, 5, '', '', 1.0, 1, 1, 92, 3, 1, 0, 30, 1) -,(857, 174, 28, '', '', 1.0, 1, 1, 93, 3, 1, 0, 30, 1) -,(858, 174, 30, '', '', 1.0, 1, 1, 94, 3, 1, 0, 30, 1) -,(859, 174, 6, '', '', 1.0, 1, 1, 95, 3, 1, 0, 30, 1) -,(860, 174, 31, '', '', 1.0, 1, 1, 96, 3, 1, 0, 30, 1) -,(861, 174, 4, '', '', 1.0, 1, 1, 97, 3, 1, 0, 30, 1) -,(862, 175, 1, '', '', 1.0, 1, 1, 98, 3, 1, 0, 30, 1) -,(863, 175, 5, '', '', 1.0, 1, 1, 99, 3, 1, 0, 30, 1) -,(864, 175, 28, '', '', 1.0, 1, 1, 100, 3, 1, 0, 30, 1) -,(865, 175, 30, '', '', 1.0, 1, 1, 101, 3, 1, 0, 30, 1) -,(866, 175, 6, '', '', 1.0, 1, 1, 102, 3, 1, 0, 30, 1) -,(867, 175, 31, '', '', 1.0, 1, 1, 103, 3, 1, 0, 30, 1) -,(868, 175, 4, '', '', 1.0, 1, 1, 104, 3, 1, 0, 30, 1) -,(869, 176, 1, '', '', 1.0, 1, 1, 105, 3, 1, 0, 30, 1) -,(870, 176, 5, '', '', 1.0, 1, 1, 106, 3, 1, 0, 30, 1) -,(871, 176, 28, '', '', 1.0, 1, 1, 107, 3, 1, 0, 30, 1) -,(872, 176, 30, '', '', 1.0, 1, 1, 108, 3, 1, 0, 30, 1) -,(873, 176, 6, '', '', 1.0, 1, 1, 109, 3, 1, 0, 30, 1) -,(874, 176, 31, '', '', 1.0, 1, 1, 110, 3, 1, 0, 30, 1) -,(875, 176, 4, '', '', 1.0, 1, 1, 111, 3, 1, 0, 30, 1) -,(876, 177, 1, '', '', 1.0, 1, 1, 112, 3, 1, 0, 30, 1) -,(877, 177, 5, '', '', 1.0, 1, 1, 113, 3, 1, 0, 30, 1) -,(878, 177, 28, '', '', 1.0, 1, 1, 114, 3, 1, 0, 30, 1) -,(879, 177, 30, '', '', 1.0, 1, 1, 115, 3, 1, 0, 30, 1) -,(880, 177, 6, '', '', 1.0, 1, 1, 116, 3, 1, 0, 30, 1) -,(881, 177, 31, '', '', 1.0, 1, 1, 117, 3, 1, 0, 30, 1) -,(882, 177, 4, '', '', 1.0, 1, 1, 118, 3, 1, 0, 30, 1) -,(883, 178, 1, '', '', 1.0, 1, 1, 119, 3, 1, 0, 30, 1) -,(884, 178, 5, '', '', 1.0, 1, 1, 120, 3, 1, 0, 30, 1) -,(885, 178, 28, '', '', 1.0, 1, 1, 121, 3, 1, 0, 30, 1) -,(886, 178, 30, '', '', 1.0, 1, 1, 122, 3, 1, 0, 30, 1) -,(887, 178, 6, '', '', 1.0, 1, 1, 123, 3, 1, 0, 30, 1) -,(888, 178, 31, '', '', 1.0, 1, 1, 124, 3, 1, 0, 30, 1) -,(889, 178, 4, '', '', 1.0, 1, 1, 125, 3, 1, 0, 30, 1) -,(890, 179, 1, '', '', 1.0, 1, 1, 126, 3, 1, 0, 30, 1) -,(891, 179, 5, '', '', 1.0, 1, 1, 127, 3, 1, 0, 30, 1) -,(892, 179, 28, '', '', 1.0, 1, 1, 128, 3, 1, 0, 30, 1) -,(893, 179, 30, '', '', 1.0, 1, 1, 129, 3, 1, 0, 30, 1) -,(894, 179, 6, '', '', 1.0, 1, 1, 130, 3, 1, 0, 30, 1) -,(895, 179, 31, '', '', 1.0, 1, 1, 131, 3, 1, 0, 30, 1) -,(896, 179, 4, '', '', 1.0, 1, 1, 132, 3, 1, 0, 30, 1) -,(897, 180, 1, '', '', 1.0, 1, 1, 133, 3, 1, 0, 30, 1) -,(898, 180, 5, '', '', 1.0, 1, 1, 134, 3, 1, 0, 30, 1) -,(899, 180, 28, '', '', 1.0, 1, 1, 135, 3, 1, 0, 30, 1) -,(900, 180, 30, '', '', 1.0, 1, 1, 136, 3, 1, 0, 30, 1) -,(901, 180, 6, '', '', 1.0, 1, 1, 137, 3, 1, 0, 30, 1) -,(902, 180, 31, '', '', 1.0, 1, 1, 138, 3, 1, 0, 30, 1) -,(903, 180, 4, '', '', 1.0, 1, 1, 139, 3, 1, 0, 30, 1) -,(904, 181, 1, '', '', 1.0, 1, 1, 140, 3, 1, 0, 30, 1) -,(905, 181, 5, '', '', 1.0, 1, 1, 141, 3, 1, 0, 30, 1) -,(906, 181, 28, '', '', 1.0, 1, 1, 142, 3, 1, 0, 30, 1) -,(907, 181, 30, '', '', 1.0, 1, 1, 143, 3, 1, 0, 30, 1) -,(908, 181, 6, '', '', 1.0, 1, 1, 144, 3, 1, 0, 30, 1) -,(909, 181, 31, '', '', 1.0, 1, 1, 145, 3, 1, 0, 30, 1) -,(910, 181, 4, '', '', 1.0, 1, 1, 146, 3, 1, 0, 30, 1) -,(911, 182, 1, '', '', 1.0, 1, 1, 147, 3, 1, 0, 30, 1) -,(912, 182, 5, '', '', 1.0, 1, 1, 148, 3, 1, 0, 30, 1) -,(913, 182, 28, '', '', 1.0, 1, 1, 149, 3, 1, 0, 30, 1) -,(914, 182, 30, '', '', 1.0, 1, 1, 150, 3, 1, 0, 30, 1) -,(915, 182, 6, '', '', 1.0, 1, 1, 151, 3, 1, 0, 30, 1) -,(916, 182, 31, '', '', 1.0, 1, 1, 152, 3, 1, 0, 30, 1) -,(917, 182, 4, '', '', 1.0, 1, 1, 153, 3, 1, 0, 30, 1) -,(918, 183, 1, '', '', 1.0, 1, 1, 154, 3, 1, 0, 30, 1) -,(919, 183, 5, '', '', 1.0, 1, 1, 155, 3, 1, 0, 30, 1) -,(920, 183, 28, '', '', 1.0, 1, 1, 156, 3, 1, 0, 30, 1) -,(921, 183, 30, '', '', 1.0, 1, 1, 157, 3, 1, 0, 30, 1) -,(922, 183, 6, '', '', 1.0, 1, 1, 158, 3, 1, 0, 30, 1) -,(923, 183, 31, '', '', 1.0, 1, 1, 159, 3, 1, 0, 30, 1) -,(924, 183, 4, '', '', 1.0, 1, 1, 160, 3, 1, 0, 30, 1) -,(925, 184, 1, '', '', 1.0, 1, 1, 161, 3, 1, 0, 30, 1) -,(926, 184, 5, '', '', 1.0, 1, 1, 162, 3, 1, 0, 30, 1) -,(927, 184, 28, '', '', 1.0, 1, 1, 163, 3, 1, 0, 30, 1) -,(928, 184, 30, '', '', 1.0, 1, 1, 164, 3, 1, 0, 30, 1) -,(929, 184, 6, '', '', 1.0, 1, 1, 165, 3, 1, 0, 30, 1) -,(930, 184, 31, '', '', 1.0, 1, 1, 166, 3, 1, 0, 30, 1) -,(931, 184, 4, '', '', 1.0, 1, 1, 167, 3, 1, 0, 30, 1) -,(932, 185, 1, '', '', 1.0, 1, 1, 168, 3, 1, 0, 30, 1) -,(933, 185, 5, '', '', 1.0, 1, 1, 169, 3, 1, 0, 30, 1) -,(934, 185, 28, '', '', 1.0, 1, 1, 170, 3, 1, 0, 30, 1) -,(935, 185, 30, '', '', 1.0, 1, 1, 171, 3, 1, 0, 30, 1) -,(936, 185, 6, '', '', 1.0, 1, 1, 172, 3, 1, 0, 30, 1) -,(937, 185, 31, '', '', 1.0, 1, 1, 173, 3, 1, 0, 30, 1) -,(938, 185, 4, '', '', 1.0, 1, 1, 174, 3, 1, 0, 30, 1) -,(939, 186, 1, '', '', 1.0, 1, 1, 175, 3, 1, 0, 30, 1) -,(940, 186, 5, '', '', 1.0, 1, 1, 176, 3, 1, 0, 30, 1) -,(941, 186, 28, '', '', 1.0, 1, 1, 177, 3, 1, 0, 30, 1) -,(942, 186, 30, '', '', 1.0, 1, 1, 178, 3, 1, 0, 30, 1) -,(943, 186, 6, '', '', 1.0, 1, 1, 179, 3, 1, 0, 30, 1) -,(944, 186, 31, '', '', 1.0, 1, 1, 180, 3, 1, 0, 30, 1) -,(945, 186, 4, '', '', 1.0, 1, 1, 181, 3, 1, 0, 30, 1) -,(946, 187, 1, '', '', 1.0, 1, 1, 182, 3, 1, 0, 30, 1) -,(947, 187, 5, '', '', 1.0, 1, 1, 183, 3, 1, 0, 30, 1) -,(948, 187, 28, '', '', 1.0, 1, 1, 184, 3, 1, 0, 30, 1) -,(949, 187, 30, '', '', 1.0, 1, 1, 185, 3, 1, 0, 30, 1) -,(950, 187, 6, '', '', 1.0, 1, 1, 186, 3, 1, 0, 30, 1) -,(951, 187, 31, '', '', 1.0, 1, 1, 187, 3, 1, 0, 30, 1) -,(952, 187, 4, '', '', 1.0, 1, 1, 188, 3, 1, 0, 30, 1) -,(953, 188, 1, '', '', 1.0, 1, 1, 189, 3, 1, 0, 30, 1) -,(954, 188, 5, '', '', 1.0, 1, 1, 190, 3, 1, 0, 30, 1) -,(955, 188, 28, '', '', 1.0, 1, 1, 191, 3, 1, 0, 30, 1) -,(956, 188, 30, '', '', 1.0, 1, 1, 192, 3, 1, 0, 30, 1) -,(957, 188, 6, '', '', 1.0, 1, 1, 193, 3, 1, 0, 30, 1) -,(958, 188, 31, '', '', 1.0, 1, 1, 194, 3, 1, 0, 30, 1) -,(959, 188, 4, '', '', 1.0, 1, 1, 195, 3, 1, 0, 30, 1) -,(960, 189, 1, '', '', 1.0, 1, 1, 196, 3, 1, 0, 30, 1) -,(961, 189, 5, '', '', 1.0, 1, 1, 197, 3, 1, 0, 30, 1) -,(962, 189, 28, '', '', 1.0, 1, 1, 198, 3, 1, 0, 30, 1) -,(963, 189, 30, '', '', 1.0, 1, 1, 199, 3, 1, 0, 30, 1) -,(964, 189, 6, '', '', 1.0, 1, 1, 200, 3, 1, 0, 30, 1) -,(965, 189, 31, '', '', 1.0, 1, 1, 201, 3, 1, 0, 30, 1) -,(966, 189, 4, '', '', 1.0, 1, 1, 202, 3, 1, 0, 30, 1) -,(967, 190, 1, '', '', 1.0, 1, 1, 203, 3, 1, 0, 30, 1) -,(968, 190, 5, '', '', 1.0, 1, 1, 204, 3, 1, 0, 30, 1) -,(969, 190, 28, '', '', 1.0, 1, 1, 205, 3, 1, 0, 30, 1) -,(970, 190, 30, '', '', 1.0, 1, 1, 206, 3, 1, 0, 30, 1) -,(971, 190, 6, '', '', 1.0, 1, 1, 207, 3, 1, 0, 30, 1) -,(972, 190, 31, '', '', 1.0, 1, 1, 208, 3, 1, 0, 30, 1) -,(973, 190, 4, '', '', 1.0, 1, 1, 209, 3, 1, 0, 30, 1) -,(974, 191, 1, '', '', 1.0, 1, 1, 210, 3, 1, 0, 30, 1) -,(975, 191, 5, '', '', 1.0, 1, 1, 211, 3, 1, 0, 30, 1) -,(976, 191, 28, '', '', 1.0, 1, 1, 212, 3, 1, 0, 30, 1) -,(977, 191, 30, '', '', 1.0, 1, 1, 213, 3, 1, 0, 30, 1) -,(978, 191, 6, '', '', 1.0, 1, 1, 214, 3, 1, 0, 30, 1) -,(979, 191, 31, '', '', 1.0, 1, 1, 215, 3, 1, 0, 30, 1) -,(980, 191, 4, '', '', 1.0, 1, 1, 216, 3, 1, 0, 30, 1) -,(981, 192, 1, '', '', 1.0, 1, 1, 217, 3, 1, 0, 30, 1) -,(982, 192, 5, '', '', 1.0, 1, 1, 218, 3, 1, 0, 30, 1) -,(983, 192, 28, '', '', 1.0, 1, 1, 219, 3, 1, 0, 30, 1) -,(984, 192, 30, '', '', 1.0, 1, 1, 220, 3, 1, 0, 30, 1) -,(985, 192, 6, '', '', 1.0, 1, 1, 221, 3, 1, 0, 30, 1) -,(986, 192, 31, '', '', 1.0, 1, 1, 222, 3, 1, 0, 30, 1) -,(987, 192, 4, '', '', 1.0, 1, 1, 223, 3, 1, 0, 30, 1) -,(988, 193, 1, '', '', 1.0, 1, 1, 224, 3, 1, 0, 30, 1) -,(989, 193, 5, '', '', 1.0, 1, 1, 225, 3, 1, 0, 30, 1) -,(990, 193, 28, '', '', 1.0, 1, 1, 226, 3, 1, 0, 30, 1) -,(991, 193, 30, '', '', 1.0, 1, 1, 227, 3, 1, 0, 30, 1) -,(992, 193, 6, '', '', 1.0, 1, 1, 228, 3, 1, 0, 30, 1) -,(993, 193, 31, '', '', 1.0, 1, 1, 229, 3, 1, 0, 30, 1) -,(994, 193, 4, '', '', 1.0, 1, 1, 230, 3, 1, 0, 30, 1) -,(995, 194, 1, '', '', 1.0, 1, 1, 231, 3, 1, 0, 30, 1) -,(996, 194, 5, '', '', 1.0, 1, 1, 232, 3, 1, 0, 30, 1) -,(997, 194, 28, '', '', 1.0, 1, 1, 233, 3, 1, 0, 30, 1) -,(998, 194, 30, '', '', 1.0, 1, 1, 234, 3, 1, 0, 30, 1) -,(999, 194, 6, '', '', 1.0, 1, 1, 235, 3, 1, 0, 30, 1) -,(1000, 194, 31, '', '', 1.0, 1, 1, 236, 3, 1, 0, 30, 1) -,(1001, 194, 4, '', '', 1.0, 1, 1, 237, 3, 1, 0, 30, 1) -,(1002, 195, 1, '', '', 1.0, 1, 1, 238, 3, 1, 0, 30, 1) -,(1003, 195, 5, '', '', 1.0, 1, 1, 239, 3, 1, 0, 30, 1) -,(1004, 195, 28, '', '', 1.0, 1, 1, 240, 3, 1, 0, 30, 1) -,(1005, 195, 30, '', '', 1.0, 1, 1, 241, 3, 1, 0, 30, 1) -,(1006, 195, 6, '', '', 1.0, 1, 1, 242, 3, 1, 0, 30, 1) -,(1007, 195, 31, '', '', 1.0, 1, 1, 243, 3, 1, 0, 30, 1) -,(1008, 195, 4, '', '', 1.0, 1, 1, 244, 3, 1, 0, 30, 1); +(944, 212, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) +,(945, 212, 5, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) +,(946, 212, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) +,(947, 212, 6, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) +,(948, 212, 4, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) +,(949, 213, 1, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) +,(950, 213, 5, '', '', 1.0, 1, 0, 6, 3, 1, 0, 30, 1) +,(951, 213, 28, '', '', 1.0, 0, 1, 7, 3, 1, 0, 30, 1) +,(952, 213, 6, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) +,(953, 213, 4, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1); +-- GeTu BLTV insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; insert into disziplin (id, name) values (3, 'Ring') on conflict (id) do nothing; insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(196, 'GeTu BLTV', 0, null, 196, 0, 100, 'a3c2fbb3-9b6d-4cf5-a47a-494212db2dfa', 1) -,(197, 'K1', 0, 196, 197, 0, 10, '9cfd1baa-c239-4c51-8f68-9b0ebcf90298', 1) -,(198, 'K2', 0, 196, 198, 0, 12, 'c155f2bd-6c50-4197-9c20-18ee89ac172c', 1) -,(199, 'K3', 0, 196, 199, 0, 14, '52de18d0-9a65-4127-b0e6-2c50971ffac8', 1) -,(200, 'K4', 0, 196, 200, 0, 16, '905c78ed-d879-4c5b-a742-33a484601e8c', 1) -,(201, 'K5', 0, 196, 201, 0, 100, '65c589da-3973-4dff-bacf-17bbe8f0664b', 1) -,(202, 'K6', 0, 196, 202, 0, 100, 'a54750c1-5a8c-459e-99ca-a723e62d35b3', 1) -,(203, 'K7', 0, 196, 203, 0, 100, '77e73438-e670-4ac2-abab-3879bab48910', 1) -,(204, 'KD', 0, 196, 204, 22, 100, '573b31a7-be3f-4563-b8c4-6448b995ea6b', 1) -,(205, 'KH', 0, 196, 205, 28, 100, '8ab21806-6acb-44d0-86d3-97e506ed00d0', 1); +(214, 'GeTu BLTV', 0, null, 214, 0, 100, '244a53f9-f182-4b7f-905b-53d894b6f463', 1) +,(215, 'K1', 0, 214, 215, 0, 10, '5d65d5ee-aa3a-4ca9-b262-6f6c644ef645', 1) +,(216, 'K2', 0, 214, 216, 0, 12, '92ffa6b2-5568-4bd1-87ff-433957ca50e9', 1) +,(217, 'K3', 0, 214, 217, 0, 14, 'd336fdb2-9109-4403-8aff-288c9fae9385', 1) +,(218, 'K4', 0, 214, 218, 0, 16, 'bddb5e4a-9159-4260-b587-5d74cf652d3e', 1) +,(219, 'K5', 0, 214, 219, 0, 100, 'b76a5db7-1438-44f6-b38b-3ff982f120c2', 1) +,(220, 'K6', 0, 214, 220, 0, 100, '5b74c500-0104-4c1e-9bbc-f0c3ed258681', 1) +,(221, 'K7', 0, 214, 221, 0, 100, '41077087-1700-43d4-b507-327b0907d861', 1) +,(222, 'KD', 0, 214, 222, 22, 100, '460ef56f-1b60-4a10-8874-73edbaba022d', 1) +,(223, 'KH', 0, 214, 223, 28, 100, '01119fbf-27b7-4fe8-aad1-7df31972af70', 1); insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(1009, 197, 6, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) -,(1010, 197, 1, '', '', 1.0, 1, 1, 1, 3, 1, 0, 30, 1) -,(1011, 197, 3, '', '', 1.0, 1, 1, 2, 3, 1, 0, 30, 1) -,(1012, 197, 4, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) -,(1013, 197, 5, '', '', 1.0, 1, 0, 4, 3, 1, 0, 30, 0) -,(1014, 198, 6, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) -,(1015, 198, 1, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) -,(1016, 198, 3, '', '', 1.0, 1, 1, 7, 3, 1, 0, 30, 1) -,(1017, 198, 4, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) -,(1018, 198, 5, '', '', 1.0, 1, 0, 9, 3, 1, 0, 30, 0) -,(1019, 199, 6, '', '', 1.0, 1, 1, 10, 3, 1, 0, 30, 1) -,(1020, 199, 1, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) -,(1021, 199, 3, '', '', 1.0, 1, 1, 12, 3, 1, 0, 30, 1) -,(1022, 199, 4, '', '', 1.0, 1, 1, 13, 3, 1, 0, 30, 1) -,(1023, 199, 5, '', '', 1.0, 1, 0, 14, 3, 1, 0, 30, 0) -,(1024, 200, 6, '', '', 1.0, 1, 1, 15, 3, 1, 0, 30, 1) -,(1025, 200, 1, '', '', 1.0, 1, 1, 16, 3, 1, 0, 30, 1) -,(1026, 200, 3, '', '', 1.0, 1, 1, 17, 3, 1, 0, 30, 1) -,(1027, 200, 4, '', '', 1.0, 1, 1, 18, 3, 1, 0, 30, 1) -,(1028, 200, 5, '', '', 1.0, 1, 0, 19, 3, 1, 0, 30, 0) -,(1029, 201, 6, '', '', 1.0, 1, 1, 20, 3, 1, 0, 30, 1) -,(1030, 201, 1, '', '', 1.0, 1, 1, 21, 3, 1, 0, 30, 1) -,(1031, 201, 3, '', '', 1.0, 1, 1, 22, 3, 1, 0, 30, 1) -,(1032, 201, 4, '', '', 1.0, 1, 1, 23, 3, 1, 0, 30, 1) -,(1033, 201, 5, '', '', 1.0, 1, 0, 24, 3, 1, 0, 30, 0) -,(1034, 202, 6, '', '', 1.0, 1, 1, 25, 3, 1, 0, 30, 1) -,(1035, 202, 1, '', '', 1.0, 1, 1, 26, 3, 1, 0, 30, 1) -,(1036, 202, 3, '', '', 1.0, 1, 1, 27, 3, 1, 0, 30, 1) -,(1037, 202, 4, '', '', 1.0, 1, 1, 28, 3, 1, 0, 30, 1) -,(1038, 202, 5, '', '', 1.0, 1, 0, 29, 3, 1, 0, 30, 0) -,(1039, 203, 6, '', '', 1.0, 1, 1, 30, 3, 1, 0, 30, 1) -,(1040, 203, 1, '', '', 1.0, 1, 1, 31, 3, 1, 0, 30, 1) -,(1041, 203, 3, '', '', 1.0, 1, 1, 32, 3, 1, 0, 30, 1) -,(1042, 203, 4, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) -,(1043, 203, 5, '', '', 1.0, 1, 0, 34, 3, 1, 0, 30, 0) -,(1044, 204, 6, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1) -,(1045, 204, 1, '', '', 1.0, 1, 1, 36, 3, 1, 0, 30, 1) -,(1046, 204, 3, '', '', 1.0, 1, 1, 37, 3, 1, 0, 30, 1) -,(1047, 204, 4, '', '', 1.0, 1, 1, 38, 3, 1, 0, 30, 1) -,(1048, 204, 5, '', '', 1.0, 1, 0, 39, 3, 1, 0, 30, 0) -,(1049, 205, 6, '', '', 1.0, 1, 1, 40, 3, 1, 0, 30, 1) -,(1050, 205, 1, '', '', 1.0, 1, 1, 41, 3, 1, 0, 30, 1) -,(1051, 205, 3, '', '', 1.0, 1, 1, 42, 3, 1, 0, 30, 1) -,(1052, 205, 4, '', '', 1.0, 1, 1, 43, 3, 1, 0, 30, 1) -,(1053, 205, 5, '', '', 1.0, 1, 0, 44, 3, 1, 0, 30, 0); - +(954, 215, 6, '', '', 1.0, 1, 1, 0, 3, 0, 0, 30, 1) +,(955, 215, 1, '', '', 1.0, 1, 1, 1, 3, 0, 0, 30, 1) +,(956, 215, 3, '', '', 1.0, 1, 1, 2, 3, 0, 0, 30, 1) +,(957, 215, 4, '', '', 1.0, 1, 1, 3, 3, 0, 0, 30, 1) +,(958, 215, 5, '', '', 1.0, 1, 0, 4, 3, 0, 0, 30, 0) +,(959, 216, 6, '', '', 1.0, 1, 1, 5, 3, 0, 0, 30, 1) +,(960, 216, 1, '', '', 1.0, 1, 1, 6, 3, 0, 0, 30, 1) +,(961, 216, 3, '', '', 1.0, 1, 1, 7, 3, 0, 0, 30, 1) +,(962, 216, 4, '', '', 1.0, 1, 1, 8, 3, 0, 0, 30, 1) +,(963, 216, 5, '', '', 1.0, 1, 0, 9, 3, 0, 0, 30, 0) +,(964, 217, 6, '', '', 1.0, 1, 1, 10, 3, 0, 0, 30, 1) +,(965, 217, 1, '', '', 1.0, 1, 1, 11, 3, 0, 0, 30, 1) +,(966, 217, 3, '', '', 1.0, 1, 1, 12, 3, 0, 0, 30, 1) +,(967, 217, 4, '', '', 1.0, 1, 1, 13, 3, 0, 0, 30, 1) +,(968, 217, 5, '', '', 1.0, 1, 0, 14, 3, 0, 0, 30, 0) +,(969, 218, 6, '', '', 1.0, 1, 1, 15, 3, 0, 0, 30, 1) +,(970, 218, 1, '', '', 1.0, 1, 1, 16, 3, 0, 0, 30, 1) +,(971, 218, 3, '', '', 1.0, 1, 1, 17, 3, 0, 0, 30, 1) +,(972, 218, 4, '', '', 1.0, 1, 1, 18, 3, 0, 0, 30, 1) +,(973, 218, 5, '', '', 1.0, 1, 0, 19, 3, 0, 0, 30, 0) +,(974, 219, 6, '', '', 1.0, 1, 1, 20, 3, 0, 0, 30, 1) +,(975, 219, 1, '', '', 1.0, 1, 1, 21, 3, 0, 0, 30, 1) +,(976, 219, 3, '', '', 1.0, 1, 1, 22, 3, 0, 0, 30, 1) +,(977, 219, 4, '', '', 1.0, 1, 1, 23, 3, 0, 0, 30, 1) +,(978, 219, 5, '', '', 1.0, 1, 0, 24, 3, 0, 0, 30, 0) +,(979, 220, 6, '', '', 1.0, 1, 1, 25, 3, 0, 0, 30, 1) +,(980, 220, 1, '', '', 1.0, 1, 1, 26, 3, 0, 0, 30, 1) +,(981, 220, 3, '', '', 1.0, 1, 1, 27, 3, 0, 0, 30, 1) +,(982, 220, 4, '', '', 1.0, 1, 1, 28, 3, 0, 0, 30, 1) +,(983, 220, 5, '', '', 1.0, 1, 0, 29, 3, 0, 0, 30, 0) +,(984, 221, 6, '', '', 1.0, 1, 1, 30, 3, 0, 0, 30, 1) +,(985, 221, 1, '', '', 1.0, 1, 1, 31, 3, 0, 0, 30, 1) +,(986, 221, 3, '', '', 1.0, 1, 1, 32, 3, 0, 0, 30, 1) +,(987, 221, 4, '', '', 1.0, 1, 1, 33, 3, 0, 0, 30, 1) +,(988, 221, 5, '', '', 1.0, 1, 0, 34, 3, 0, 0, 30, 0) +,(989, 222, 6, '', '', 1.0, 1, 1, 35, 3, 0, 0, 30, 1) +,(990, 222, 1, '', '', 1.0, 1, 1, 36, 3, 0, 0, 30, 1) +,(991, 222, 3, '', '', 1.0, 1, 1, 37, 3, 0, 0, 30, 1) +,(992, 222, 4, '', '', 1.0, 1, 1, 38, 3, 0, 0, 30, 1) +,(993, 222, 5, '', '', 1.0, 1, 0, 39, 3, 0, 0, 30, 0) +,(994, 223, 6, '', '', 1.0, 1, 1, 40, 3, 0, 0, 30, 1) +,(995, 223, 1, '', '', 1.0, 1, 1, 41, 3, 0, 0, 30, 1) +,(996, 223, 3, '', '', 1.0, 1, 1, 42, 3, 0, 0, 30, 1) +,(997, 223, 4, '', '', 1.0, 1, 1, 43, 3, 0, 0, 30, 1) +,(998, 223, 5, '', '', 1.0, 1, 0, 44, 3, 0, 0, 30, 0); diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql index 9c8917157..30d8d1260 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql @@ -120,347 +120,241 @@ UPDATE programm where id=43; -- Test Programm-Extensions +-- KuTu DTL Kür & Pflicht insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; -insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (3, 'Ring') on conflict (id) do nothing; insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(92, 'TG Allgäu', 0, 0, 92, 0, 100, '8e31c31f-ca3b-49d6-88e9-6a8d4b6eaeed', 1) -,(93, 'Kür', 1, 92, 93, 0, 100, '6d4a8660-5c4a-4532-83ce-22ef39dab060', 1) -,(94, 'WK I Kür', 1, 93, 94, 0, 100, 'ff7b13d0-16b4-4b21-8a9f-dc82867f2859', 1) -,(95, 'WK II LK1', 1, 93, 95, 0, 100, 'e516c62a-54f7-4ff4-9198-dc70f6348f4e', 1) -,(96, 'WK III LK1', 1, 93, 96, 16, 17, '8a98b830-7c92-4fd6-be58-e6361c40c961', 1) -,(97, 'WK IV LK2', 1, 93, 97, 14, 15, 'c4330b77-1b13-48c3-a950-0e352b6b32b7', 1) -,(98, 'Pflicht', 1, 92, 98, 0, 100, 'a74ca689-6174-4dee-ad39-7cbfbce29898', 1) -,(99, 'WK V Jug', 1, 98, 99, 14, 18, '8793e2a5-ddc0-43f8-ac8a-fbdad40e2594', 1) -,(100, 'WK VI Schüler A', 1, 98, 100, 12, 13, '640e4a29-0c6a-4083-9fcc-cca79105644d', 1) -,(101, 'WK VII Schüler B', 1, 98, 101, 10, 11, '6859201a-bd3d-4917-9b1e-b0898f6df7d2', 1) -,(102, 'WK VIII Schüler C', 1, 98, 102, 8, 9, '3bcdf06e-827c-40e3-9209-74b3ba5314e1', 1) -,(103, 'WK IX Schüler D', 1, 98, 103, 0, 7, '3b7aab26-4a6d-4dd5-a53c-58fca79ec62a', 1); +(184, 'KuTu DTL Kür & Pflicht', 0, null, 184, 0, 100, '29ee216c-f1bf-4940-9b2f-a98b6af0ef73', 1) +,(185, 'Kür', 1, 184, 185, 0, 100, '9868786d-29fd-4560-8a14-a32a5dd56c7a', 1) +,(186, 'WK I Kür', 1, 185, 186, 0, 100, 'a731a36f-2190-403a-8dff-5009b862d6b2', 1) +,(187, 'WK II LK1', 1, 185, 187, 0, 100, '1aa8711c-5bf3-45bd-98cf-8f143fe57f94', 1) +,(188, 'WK III LK1', 1, 185, 188, 16, 17, '0a685ee1-e4bd-450a-b387-5470d4424e13', 1) +,(189, 'WK IV LK2', 1, 185, 189, 14, 15, '6517a841-fc1e-49fa-8d45-9c90cad2a739', 1) +,(190, 'Pflicht', 1, 184, 190, 0, 100, 'df6de257-03e0-4b61-8855-e7f9c4b416b0', 1) +,(191, 'WK V Jug', 1, 190, 191, 14, 18, '1f29b75e-6800-4eab-9350-1d5029bafa69', 1) +,(192, 'WK VI Schüler A', 1, 190, 192, 12, 13, 'd7b983af-cbac-4ffc-bbe1-90255a2c828c', 1) +,(193, 'WK VII Schüler B', 1, 190, 193, 10, 11, 'acddda1d-3561-4bf8-9c3e-c8d6caaa5771', 1) +,(194, 'WK VIII Schüler C', 1, 190, 194, 8, 9, '7f0921ec-8e35-4f00-b9d4-9a9e7fccc3d8', 1) +,(195, 'WK IX Schüler D', 1, 190, 195, 0, 7, '67dd95d0-5b48-4f82-b109-8c564754b577', 1); insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(435, 94, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) -,(436, 94, 5, '', '', 1.0, 1, 1, 1, 3, 1, 0, 30, 1) -,(437, 94, 4, '', '', 1.0, 1, 1, 2, 3, 1, 0, 30, 1) -,(438, 94, 6, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) -,(439, 95, 1, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) -,(440, 95, 5, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) -,(441, 95, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) -,(442, 95, 6, '', '', 1.0, 1, 1, 7, 3, 1, 0, 30, 1) -,(443, 96, 1, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) -,(444, 96, 5, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1) -,(445, 96, 4, '', '', 1.0, 1, 1, 10, 3, 1, 0, 30, 1) -,(446, 96, 6, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) -,(447, 97, 1, '', '', 1.0, 1, 1, 12, 3, 1, 0, 30, 1) -,(448, 97, 5, '', '', 1.0, 1, 1, 13, 3, 1, 0, 30, 1) -,(449, 97, 4, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) -,(450, 97, 6, '', '', 1.0, 1, 1, 15, 3, 1, 0, 30, 1) -,(451, 99, 1, '', '', 1.0, 1, 1, 16, 3, 1, 0, 30, 1) -,(452, 99, 5, '', '', 1.0, 1, 1, 17, 3, 1, 0, 30, 1) -,(453, 99, 4, '', '', 1.0, 1, 1, 18, 3, 1, 0, 30, 1) -,(454, 99, 6, '', '', 1.0, 1, 1, 19, 3, 1, 0, 30, 1) -,(455, 100, 1, '', '', 1.0, 1, 1, 20, 3, 1, 0, 30, 1) -,(456, 100, 5, '', '', 1.0, 1, 1, 21, 3, 1, 0, 30, 1) -,(457, 100, 4, '', '', 1.0, 1, 1, 22, 3, 1, 0, 30, 1) -,(458, 100, 6, '', '', 1.0, 1, 1, 23, 3, 1, 0, 30, 1) -,(459, 101, 1, '', '', 1.0, 1, 1, 24, 3, 1, 0, 30, 1) -,(460, 101, 5, '', '', 1.0, 1, 1, 25, 3, 1, 0, 30, 1) -,(461, 101, 4, '', '', 1.0, 1, 1, 26, 3, 1, 0, 30, 1) -,(462, 101, 6, '', '', 1.0, 1, 1, 27, 3, 1, 0, 30, 1) -,(463, 102, 1, '', '', 1.0, 1, 1, 28, 3, 1, 0, 30, 1) -,(464, 102, 5, '', '', 1.0, 1, 1, 29, 3, 1, 0, 30, 1) -,(465, 102, 4, '', '', 1.0, 1, 1, 30, 3, 1, 0, 30, 1) -,(466, 102, 6, '', '', 1.0, 1, 1, 31, 3, 1, 0, 30, 1) -,(467, 103, 1, '', '', 1.0, 1, 1, 32, 3, 1, 0, 30, 1) -,(468, 103, 5, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) -,(469, 103, 4, '', '', 1.0, 1, 1, 34, 3, 1, 0, 30, 1) -,(470, 103, 6, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1); +(847, 186, 1, '', '', 1.0, 1, 0, 0, 3, 1, 0, 30, 1) +,(848, 186, 3, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) +,(849, 186, 4, '', '', 1.0, 1, 0, 2, 3, 1, 0, 30, 1) +,(850, 186, 5, '', '', 1.0, 1, 0, 3, 3, 1, 0, 30, 1) +,(851, 186, 6, '', '', 1.0, 1, 0, 4, 3, 1, 0, 30, 1) +,(852, 187, 1, '', '', 1.0, 1, 0, 5, 3, 1, 0, 30, 1) +,(853, 187, 3, '', '', 1.0, 1, 0, 6, 3, 1, 0, 30, 1) +,(854, 187, 4, '', '', 1.0, 1, 0, 7, 3, 1, 0, 30, 1) +,(855, 187, 5, '', '', 1.0, 1, 0, 8, 3, 1, 0, 30, 1) +,(856, 187, 6, '', '', 1.0, 1, 0, 9, 3, 1, 0, 30, 1) +,(857, 188, 1, '', '', 1.0, 1, 0, 10, 3, 1, 0, 30, 1) +,(858, 188, 3, '', '', 1.0, 1, 0, 11, 3, 1, 0, 30, 1) +,(859, 188, 4, '', '', 1.0, 1, 0, 12, 3, 1, 0, 30, 1) +,(860, 188, 5, '', '', 1.0, 1, 0, 13, 3, 1, 0, 30, 1) +,(861, 188, 6, '', '', 1.0, 1, 0, 14, 3, 1, 0, 30, 1) +,(862, 189, 1, '', '', 1.0, 1, 0, 15, 3, 1, 0, 30, 1) +,(863, 189, 3, '', '', 1.0, 1, 0, 16, 3, 1, 0, 30, 1) +,(864, 189, 4, '', '', 1.0, 1, 0, 17, 3, 1, 0, 30, 1) +,(865, 189, 5, '', '', 1.0, 1, 0, 18, 3, 1, 0, 30, 1) +,(866, 189, 6, '', '', 1.0, 1, 0, 19, 3, 1, 0, 30, 1) +,(867, 191, 1, '', '', 1.0, 1, 0, 20, 3, 1, 0, 30, 1) +,(868, 191, 3, '', '', 1.0, 1, 0, 21, 3, 1, 0, 30, 1) +,(869, 191, 4, '', '', 1.0, 1, 0, 22, 3, 1, 0, 30, 1) +,(870, 191, 5, '', '', 1.0, 1, 0, 23, 3, 1, 0, 30, 1) +,(871, 191, 6, '', '', 1.0, 1, 0, 24, 3, 1, 0, 30, 1) +,(872, 192, 1, '', '', 1.0, 1, 0, 25, 3, 1, 0, 30, 1) +,(873, 192, 3, '', '', 1.0, 1, 0, 26, 3, 1, 0, 30, 1) +,(874, 192, 4, '', '', 1.0, 1, 0, 27, 3, 1, 0, 30, 1) +,(875, 192, 5, '', '', 1.0, 1, 0, 28, 3, 1, 0, 30, 1) +,(876, 192, 6, '', '', 1.0, 1, 0, 29, 3, 1, 0, 30, 1) +,(877, 193, 1, '', '', 1.0, 1, 0, 30, 3, 1, 0, 30, 1) +,(878, 193, 3, '', '', 1.0, 1, 0, 31, 3, 1, 0, 30, 1) +,(879, 193, 4, '', '', 1.0, 1, 0, 32, 3, 1, 0, 30, 1) +,(880, 193, 5, '', '', 1.0, 1, 0, 33, 3, 1, 0, 30, 1) +,(881, 193, 6, '', '', 1.0, 1, 0, 34, 3, 1, 0, 30, 1) +,(882, 194, 1, '', '', 1.0, 1, 0, 35, 3, 1, 0, 30, 1) +,(883, 194, 3, '', '', 1.0, 1, 0, 36, 3, 1, 0, 30, 1) +,(884, 194, 4, '', '', 1.0, 1, 0, 37, 3, 1, 0, 30, 1) +,(885, 194, 5, '', '', 1.0, 1, 0, 38, 3, 1, 0, 30, 1) +,(886, 194, 6, '', '', 1.0, 1, 0, 39, 3, 1, 0, 30, 1) +,(887, 195, 1, '', '', 1.0, 1, 0, 40, 3, 1, 0, 30, 1) +,(888, 195, 3, '', '', 1.0, 1, 0, 41, 3, 1, 0, 30, 1) +,(889, 195, 4, '', '', 1.0, 1, 0, 42, 3, 1, 0, 30, 1) +,(890, 195, 5, '', '', 1.0, 1, 0, 43, 3, 1, 0, 30, 1) +,(891, 195, 6, '', '', 1.0, 1, 0, 44, 3, 1, 0, 30, 1); + +-- KuTuRi DTL Kür & Pflicht +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(196, 'KuTuRi DTL Kür & Pflicht', 0, null, 196, 0, 100, 'b66dac1b-e2cf-43b5-a919-0d94aa42680c', 1) +,(197, 'Kür', 1, 196, 197, 0, 100, 'b371f1b4-ff84-4a65-b536-9ff6e0479a6d', 1) +,(198, 'WK I Kür', 1, 197, 198, 0, 100, '932da381-63ea-4166-9bb5-04d7d684d105', 1) +,(199, 'WK II LK1', 1, 197, 199, 0, 100, '146a17d5-7ab4-4086-81f1-db3329b07e2a', 1) +,(200, 'WK III LK1', 1, 197, 200, 16, 17, 'b70b2f6d-1321-4666-bac8-5807a15786eb', 1) +,(201, 'WK IV LK2', 1, 197, 201, 14, 15, '28efc451-d762-42ea-9618-b4c0f23cbe9b', 1) +,(202, 'Pflicht', 1, 196, 202, 0, 100, '04d249b9-5c2c-4a97-a6bc-ee86062d6cac', 1) +,(203, 'WK V Jug', 1, 202, 203, 14, 18, 'd0c91f7c-fe42-466a-a7c0-c3bec17133fe', 1) +,(204, 'WK VI Schüler A', 1, 202, 204, 12, 13, '45584b7f-498c-42a8-b6bb-c06525cac332', 1) +,(205, 'WK VII Schüler B', 1, 202, 205, 10, 11, '863da537-b5d0-4259-ae62-b358f70c0ff4', 1) +,(206, 'WK VIII Schüler C', 1, 202, 206, 8, 9, '6567925e-2335-421c-b677-d426adb258e3', 1) +,(207, 'WK IX Schüler D', 1, 202, 207, 0, 7, 'e5224fa7-15c8-4840-8c9c-f2db160e1147', 1); +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(892, 198, 4, '', '', 1.0, 0, 1, 0, 3, 1, 0, 30, 1) +,(893, 198, 5, '', '', 1.0, 0, 1, 1, 3, 1, 0, 30, 1) +,(894, 198, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) +,(895, 198, 1, '', '', 1.0, 0, 1, 3, 3, 1, 0, 30, 1) +,(896, 199, 4, '', '', 1.0, 0, 1, 4, 3, 1, 0, 30, 1) +,(897, 199, 5, '', '', 1.0, 0, 1, 5, 3, 1, 0, 30, 1) +,(898, 199, 28, '', '', 1.0, 0, 1, 6, 3, 1, 0, 30, 1) +,(899, 199, 1, '', '', 1.0, 0, 1, 7, 3, 1, 0, 30, 1) +,(900, 200, 4, '', '', 1.0, 0, 1, 8, 3, 1, 0, 30, 1) +,(901, 200, 5, '', '', 1.0, 0, 1, 9, 3, 1, 0, 30, 1) +,(902, 200, 28, '', '', 1.0, 0, 1, 10, 3, 1, 0, 30, 1) +,(903, 200, 1, '', '', 1.0, 0, 1, 11, 3, 1, 0, 30, 1) +,(904, 201, 4, '', '', 1.0, 0, 1, 12, 3, 1, 0, 30, 1) +,(905, 201, 5, '', '', 1.0, 0, 1, 13, 3, 1, 0, 30, 1) +,(906, 201, 28, '', '', 1.0, 0, 1, 14, 3, 1, 0, 30, 1) +,(907, 201, 1, '', '', 1.0, 0, 1, 15, 3, 1, 0, 30, 1) +,(908, 203, 4, '', '', 1.0, 0, 1, 16, 3, 1, 0, 30, 1) +,(909, 203, 5, '', '', 1.0, 0, 1, 17, 3, 1, 0, 30, 1) +,(910, 203, 28, '', '', 1.0, 0, 1, 18, 3, 1, 0, 30, 1) +,(911, 203, 1, '', '', 1.0, 0, 1, 19, 3, 1, 0, 30, 1) +,(912, 204, 4, '', '', 1.0, 0, 1, 20, 3, 1, 0, 30, 1) +,(913, 204, 5, '', '', 1.0, 0, 1, 21, 3, 1, 0, 30, 1) +,(914, 204, 28, '', '', 1.0, 0, 1, 22, 3, 1, 0, 30, 1) +,(915, 204, 1, '', '', 1.0, 0, 1, 23, 3, 1, 0, 30, 1) +,(916, 205, 4, '', '', 1.0, 0, 1, 24, 3, 1, 0, 30, 1) +,(917, 205, 5, '', '', 1.0, 0, 1, 25, 3, 1, 0, 30, 1) +,(918, 205, 28, '', '', 1.0, 0, 1, 26, 3, 1, 0, 30, 1) +,(919, 205, 1, '', '', 1.0, 0, 1, 27, 3, 1, 0, 30, 1) +,(920, 206, 4, '', '', 1.0, 0, 1, 28, 3, 1, 0, 30, 1) +,(921, 206, 5, '', '', 1.0, 0, 1, 29, 3, 1, 0, 30, 1) +,(922, 206, 28, '', '', 1.0, 0, 1, 30, 3, 1, 0, 30, 1) +,(923, 206, 1, '', '', 1.0, 0, 1, 31, 3, 1, 0, 30, 1) +,(924, 207, 4, '', '', 1.0, 0, 1, 32, 3, 1, 0, 30, 1) +,(925, 207, 5, '', '', 1.0, 0, 1, 33, 3, 1, 0, 30, 1) +,(926, 207, 28, '', '', 1.0, 0, 1, 34, 3, 1, 0, 30, 1) +,(927, 207, 1, '', '', 1.0, 0, 1, 35, 3, 1, 0, 30, 1); + +-- Turn10-Verein +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; insert into disziplin (id, name) values (30, 'Minitramp') on conflict (id) do nothing; -insert into disziplin (id, name) values (31, 'Pferd') on conflict (id) do nothing; +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into disziplin (id, name) values (27, 'Stufenbarren') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (32, 'Ringe') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(208, 'Turn10-Verein', 0, null, 208, 0, 100, 'b2d95501-52d2-4070-ab8c-27406cddb8fb', 2) +,(209, 'BS', 0, 208, 209, 0, 100, '812702c4-39b5-47c1-9c32-30243e7433a7', 2) +,(210, 'OS', 0, 208, 210, 0, 100, '6ea03ad7-0a10-4d34-b7b2-730f6325ef00', 2); +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(928, 209, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) +,(929, 209, 5, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) +,(930, 209, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) +,(931, 209, 30, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) +,(932, 209, 6, '', '', 1.0, 1, 0, 4, 3, 1, 0, 30, 1) +,(933, 209, 27, '', '', 1.0, 0, 1, 5, 3, 1, 0, 30, 1) +,(934, 209, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) +,(935, 209, 32, '', '', 1.0, 1, 0, 7, 3, 1, 0, 30, 1) +,(936, 210, 1, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) +,(937, 210, 5, '', '', 1.0, 1, 0, 9, 3, 1, 0, 30, 1) +,(938, 210, 28, '', '', 1.0, 0, 1, 10, 3, 1, 0, 30, 1) +,(939, 210, 30, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) +,(940, 210, 6, '', '', 1.0, 1, 0, 12, 3, 1, 0, 30, 1) +,(941, 210, 27, '', '', 1.0, 0, 1, 13, 3, 1, 0, 30, 1) +,(942, 210, 4, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) +,(943, 210, 32, '', '', 1.0, 1, 0, 15, 3, 1, 0, 30, 1); insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(104, 'Turn10', 0, 0, 104, 0, 100, 'a766317a-d77a-43d5-9a2b-ecd2fdc1d7a1', 1) -,(105, 'AK6 BS', 0, 104, 105, 0, 6, '5bc0114e-57cc-44f5-892f-57f0a5e9cca4', 1) -,(106, 'AK7 BS', 0, 104, 106, 7, 7, '6809f646-0dd3-4460-b7f1-a91a8f76eb6a', 1) -,(107, 'AK8 BS', 0, 104, 107, 8, 8, 'd1d86247-b792-4f67-8f03-1dc164aa0f26', 1) -,(108, 'AK9 BS', 0, 104, 108, 9, 9, '63dce54e-905e-4687-983d-c68a2e0eb0f8', 1) -,(109, 'AK10 BS', 0, 104, 109, 10, 10, 'bda692f0-7bc4-4c34-a099-6d293288769f', 1) -,(110, 'AK11 BS', 0, 104, 110, 11, 11, '0501d8ff-30a1-4d9c-83a8-acb66497ac30', 1) -,(111, 'AK12 BS', 0, 104, 111, 12, 12, 'f04c16a9-483f-4121-ab36-e39886a1da5d', 1) -,(112, 'AK13 BS', 0, 104, 112, 13, 13, '06c13072-afca-4a81-89be-ff370376690e', 1) -,(113, 'AK13 OS', 0, 104, 113, 13, 13, 'fecaf76e-1325-4b24-a538-0d0d90579f6c', 1) -,(114, 'AK14 BS', 0, 104, 114, 14, 14, '0647bcfb-af6c-4dc7-bbb2-0f074617edba', 1) -,(115, 'AK14 OS', 0, 104, 115, 14, 14, '89c22e20-9606-47d7-994b-a6aff75a909e', 1) -,(116, 'AK15 BS', 0, 104, 116, 15, 15, '63dafc19-d4dc-4d5a-80b8-d7469c03a8b8', 1) -,(117, 'AK15 OS', 0, 104, 117, 15, 15, 'f031d70f-4a47-47d2-ab9b-5e72df3057fd', 1) -,(118, 'AK16 BS', 0, 104, 118, 16, 16, '83a5ae31-59ef-4baa-b02f-7d7250b4e1eb', 1) -,(119, 'AK16 OS', 0, 104, 119, 16, 16, 'c84c7734-04c0-4a00-86ea-a81611e5964f', 1) -,(120, 'AK17 BS', 0, 104, 120, 17, 17, 'f7fb1a93-a38c-4cce-90e4-a999b9c0617c', 1) -,(121, 'AK17 OS', 0, 104, 121, 17, 17, 'ace673b5-710a-4040-ac0f-69bfa1520012', 1) -,(122, 'AK18 BS', 0, 104, 122, 18, 23, 'ccc541b0-282e-42bc-a354-5f90bf8912a7', 1) -,(123, 'AK18 OS', 0, 104, 123, 18, 23, '25b8d881-2a9d-4e19-adf0-a3805d50a200', 1) -,(124, 'AK24 BS', 0, 104, 124, 24, 29, 'd5ae3778-dac6-4733-91ab-0a2ec9461b35', 1) -,(125, 'AK24 OS', 0, 104, 125, 24, 29, '295e69d9-97bb-4ace-a612-c45e6f332148', 1) -,(126, 'AK30 BS', 0, 104, 126, 30, 34, 'f48543fa-cc1b-4fb3-bc88-d8bbf8d55407', 1) -,(127, 'AK30 OS', 0, 104, 127, 30, 34, 'a7af6f33-8bb3-4009-a1c3-9c4f7c1c00c4', 1) -,(128, 'AK35 BS', 0, 104, 128, 35, 39, 'd3344699-f379-4123-9107-14c2cf913edc', 1) -,(129, 'AK35 OS', 0, 104, 129, 35, 39, '5c37985d-d163-4886-8b71-456483ccca9c', 1) -,(130, 'AK40 BS', 0, 104, 130, 40, 44, '5657dd4a-e5d3-4715-941a-c95358642eda', 1) -,(131, 'AK40 OS', 0, 104, 131, 40, 44, '759618c1-3404-48b9-938c-c8bc4e09efa6', 1) -,(132, 'AK45 BS', 0, 104, 132, 45, 49, '8c554196-3971-4c10-82c5-3723b431bc74', 1) -,(133, 'AK45 OS', 0, 104, 133, 45, 49, 'd224818f-ee15-4ce1-b7ea-c0af4e736011', 1) -,(134, 'AK50 BS', 0, 104, 134, 50, 54, '715f01fc-1a39-4a54-9460-38d385b0b26c', 1) -,(135, 'AK50 OS', 0, 104, 135, 50, 54, '5f6ad4fd-6492-4bc7-a35d-4b40b428aa16', 1) -,(136, 'AK55 BS', 0, 104, 136, 55, 59, 'd270d592-fff8-48e8-89d9-7142aa7ca8b9', 1) -,(137, 'AK55 OS', 0, 104, 137, 55, 59, '0a98feb3-3918-4b39-9f5f-89498b68c8f2', 1) -,(138, 'AK60 BS', 0, 104, 138, 60, 64, '1148c029-27fc-476b-9ef6-972169a0b09b', 1) -,(139, 'AK60 OS', 0, 104, 139, 60, 64, '60d42135-f786-4504-84ca-e760981f4b3f', 1); + +-- Turn10-Schule +(211, 'Turn10-Schule', 0, null, 211, 0, 100, 'e3f740c0-4b4e-4b0f-9cb5-c884363d4217', 2) +,(212, 'BS', 0, 211, 212, 0, 100, '316ab2c8-6fff-4f4d-b2a4-afd360f63fcd', 2) +,(213, 'OS', 0, 211, 213, 0, 100, '9585596a-a571-414d-9a32-000a1e38c307', 2); +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(944, 212, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) +,(945, 212, 5, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) +,(946, 212, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) +,(947, 212, 6, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) +,(948, 212, 4, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) +,(949, 213, 1, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) +,(950, 213, 5, '', '', 1.0, 1, 0, 6, 3, 1, 0, 30, 1) +,(951, 213, 28, '', '', 1.0, 0, 1, 7, 3, 1, 0, 30, 1) +,(952, 213, 6, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) +,(953, 213, 4, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1); + +-- GeTu BLTV +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (3, 'Ring') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(214, 'GeTu BLTV', 0, null, 214, 0, 100, '244a53f9-f182-4b7f-905b-53d894b6f463', 1) +,(215, 'K1', 0, 214, 215, 0, 10, '5d65d5ee-aa3a-4ca9-b262-6f6c644ef645', 1) +,(216, 'K2', 0, 214, 216, 0, 12, '92ffa6b2-5568-4bd1-87ff-433957ca50e9', 1) +,(217, 'K3', 0, 214, 217, 0, 14, 'd336fdb2-9109-4403-8aff-288c9fae9385', 1) +,(218, 'K4', 0, 214, 218, 0, 16, 'bddb5e4a-9159-4260-b587-5d74cf652d3e', 1) +,(219, 'K5', 0, 214, 219, 0, 100, 'b76a5db7-1438-44f6-b38b-3ff982f120c2', 1) +,(220, 'K6', 0, 214, 220, 0, 100, '5b74c500-0104-4c1e-9bbc-f0c3ed258681', 1) +,(221, 'K7', 0, 214, 221, 0, 100, '41077087-1700-43d4-b507-327b0907d861', 1) +,(222, 'KD', 0, 214, 222, 22, 100, '460ef56f-1b60-4a10-8874-73edbaba022d', 1) +,(223, 'KH', 0, 214, 223, 28, 100, '01119fbf-27b7-4fe8-aad1-7df31972af70', 1); insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(471, 105, 30, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) -,(472, 105, 31, '', '', 1.0, 1, 1, 1, 3, 1, 0, 30, 1) -,(473, 105, 1, '', '', 1.0, 1, 1, 2, 3, 1, 0, 30, 1) -,(474, 105, 5, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) -,(475, 105, 28, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) -,(476, 105, 6, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) -,(477, 105, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) -,(478, 106, 30, '', '', 1.0, 1, 1, 7, 3, 1, 0, 30, 1) -,(479, 106, 31, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) -,(480, 106, 1, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1) -,(481, 106, 5, '', '', 1.0, 1, 1, 10, 3, 1, 0, 30, 1) -,(482, 106, 28, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) -,(483, 106, 6, '', '', 1.0, 1, 1, 12, 3, 1, 0, 30, 1) -,(484, 106, 4, '', '', 1.0, 1, 1, 13, 3, 1, 0, 30, 1) -,(485, 107, 30, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) -,(486, 107, 31, '', '', 1.0, 1, 1, 15, 3, 1, 0, 30, 1) -,(487, 107, 1, '', '', 1.0, 1, 1, 16, 3, 1, 0, 30, 1) -,(488, 107, 5, '', '', 1.0, 1, 1, 17, 3, 1, 0, 30, 1) -,(489, 107, 28, '', '', 1.0, 1, 1, 18, 3, 1, 0, 30, 1) -,(490, 107, 6, '', '', 1.0, 1, 1, 19, 3, 1, 0, 30, 1) -,(491, 107, 4, '', '', 1.0, 1, 1, 20, 3, 1, 0, 30, 1) -,(492, 108, 30, '', '', 1.0, 1, 1, 21, 3, 1, 0, 30, 1) -,(493, 108, 31, '', '', 1.0, 1, 1, 22, 3, 1, 0, 30, 1) -,(494, 108, 1, '', '', 1.0, 1, 1, 23, 3, 1, 0, 30, 1) -,(495, 108, 5, '', '', 1.0, 1, 1, 24, 3, 1, 0, 30, 1) -,(496, 108, 28, '', '', 1.0, 1, 1, 25, 3, 1, 0, 30, 1) -,(497, 108, 6, '', '', 1.0, 1, 1, 26, 3, 1, 0, 30, 1) -,(498, 108, 4, '', '', 1.0, 1, 1, 27, 3, 1, 0, 30, 1) -,(499, 109, 30, '', '', 1.0, 1, 1, 28, 3, 1, 0, 30, 1) -,(500, 109, 31, '', '', 1.0, 1, 1, 29, 3, 1, 0, 30, 1) -,(501, 109, 1, '', '', 1.0, 1, 1, 30, 3, 1, 0, 30, 1) -,(502, 109, 5, '', '', 1.0, 1, 1, 31, 3, 1, 0, 30, 1) -,(503, 109, 28, '', '', 1.0, 1, 1, 32, 3, 1, 0, 30, 1) -,(504, 109, 6, '', '', 1.0, 1, 1, 33, 3, 1, 0, 30, 1) -,(505, 109, 4, '', '', 1.0, 1, 1, 34, 3, 1, 0, 30, 1) -,(506, 110, 30, '', '', 1.0, 1, 1, 35, 3, 1, 0, 30, 1) -,(507, 110, 31, '', '', 1.0, 1, 1, 36, 3, 1, 0, 30, 1) -,(508, 110, 1, '', '', 1.0, 1, 1, 37, 3, 1, 0, 30, 1) -,(509, 110, 5, '', '', 1.0, 1, 1, 38, 3, 1, 0, 30, 1) -,(510, 110, 28, '', '', 1.0, 1, 1, 39, 3, 1, 0, 30, 1) -,(511, 110, 6, '', '', 1.0, 1, 1, 40, 3, 1, 0, 30, 1) -,(512, 110, 4, '', '', 1.0, 1, 1, 41, 3, 1, 0, 30, 1) -,(513, 111, 30, '', '', 1.0, 1, 1, 42, 3, 1, 0, 30, 1) -,(514, 111, 31, '', '', 1.0, 1, 1, 43, 3, 1, 0, 30, 1) -,(515, 111, 1, '', '', 1.0, 1, 1, 44, 3, 1, 0, 30, 1) -,(516, 111, 5, '', '', 1.0, 1, 1, 45, 3, 1, 0, 30, 1) -,(517, 111, 28, '', '', 1.0, 1, 1, 46, 3, 1, 0, 30, 1) -,(518, 111, 6, '', '', 1.0, 1, 1, 47, 3, 1, 0, 30, 1) -,(519, 111, 4, '', '', 1.0, 1, 1, 48, 3, 1, 0, 30, 1) -,(520, 112, 30, '', '', 1.0, 1, 1, 49, 3, 1, 0, 30, 1) -,(521, 112, 31, '', '', 1.0, 1, 1, 50, 3, 1, 0, 30, 1) -,(522, 112, 1, '', '', 1.0, 1, 1, 51, 3, 1, 0, 30, 1) -,(523, 112, 5, '', '', 1.0, 1, 1, 52, 3, 1, 0, 30, 1) -,(524, 112, 28, '', '', 1.0, 1, 1, 53, 3, 1, 0, 30, 1) -,(525, 112, 6, '', '', 1.0, 1, 1, 54, 3, 1, 0, 30, 1) -,(526, 112, 4, '', '', 1.0, 1, 1, 55, 3, 1, 0, 30, 1) -,(527, 113, 30, '', '', 1.0, 1, 1, 56, 3, 1, 0, 30, 1) -,(528, 113, 31, '', '', 1.0, 1, 1, 57, 3, 1, 0, 30, 1) -,(529, 113, 1, '', '', 1.0, 1, 1, 58, 3, 1, 0, 30, 1) -,(530, 113, 5, '', '', 1.0, 1, 1, 59, 3, 1, 0, 30, 1) -,(531, 113, 28, '', '', 1.0, 1, 1, 60, 3, 1, 0, 30, 1) -,(532, 113, 6, '', '', 1.0, 1, 1, 61, 3, 1, 0, 30, 1) -,(533, 113, 4, '', '', 1.0, 1, 1, 62, 3, 1, 0, 30, 1) -,(534, 114, 30, '', '', 1.0, 1, 1, 63, 3, 1, 0, 30, 1) -,(535, 114, 31, '', '', 1.0, 1, 1, 64, 3, 1, 0, 30, 1) -,(536, 114, 1, '', '', 1.0, 1, 1, 65, 3, 1, 0, 30, 1) -,(537, 114, 5, '', '', 1.0, 1, 1, 66, 3, 1, 0, 30, 1) -,(538, 114, 28, '', '', 1.0, 1, 1, 67, 3, 1, 0, 30, 1) -,(539, 114, 6, '', '', 1.0, 1, 1, 68, 3, 1, 0, 30, 1) -,(540, 114, 4, '', '', 1.0, 1, 1, 69, 3, 1, 0, 30, 1) -,(541, 115, 30, '', '', 1.0, 1, 1, 70, 3, 1, 0, 30, 1) -,(542, 115, 31, '', '', 1.0, 1, 1, 71, 3, 1, 0, 30, 1) -,(543, 115, 1, '', '', 1.0, 1, 1, 72, 3, 1, 0, 30, 1) -,(544, 115, 5, '', '', 1.0, 1, 1, 73, 3, 1, 0, 30, 1) -,(545, 115, 28, '', '', 1.0, 1, 1, 74, 3, 1, 0, 30, 1) -,(546, 115, 6, '', '', 1.0, 1, 1, 75, 3, 1, 0, 30, 1) -,(547, 115, 4, '', '', 1.0, 1, 1, 76, 3, 1, 0, 30, 1) -,(548, 116, 30, '', '', 1.0, 1, 1, 77, 3, 1, 0, 30, 1) -,(549, 116, 31, '', '', 1.0, 1, 1, 78, 3, 1, 0, 30, 1) -,(550, 116, 1, '', '', 1.0, 1, 1, 79, 3, 1, 0, 30, 1) -,(551, 116, 5, '', '', 1.0, 1, 1, 80, 3, 1, 0, 30, 1) -,(552, 116, 28, '', '', 1.0, 1, 1, 81, 3, 1, 0, 30, 1) -,(553, 116, 6, '', '', 1.0, 1, 1, 82, 3, 1, 0, 30, 1) -,(554, 116, 4, '', '', 1.0, 1, 1, 83, 3, 1, 0, 30, 1) -,(555, 117, 30, '', '', 1.0, 1, 1, 84, 3, 1, 0, 30, 1) -,(556, 117, 31, '', '', 1.0, 1, 1, 85, 3, 1, 0, 30, 1) -,(557, 117, 1, '', '', 1.0, 1, 1, 86, 3, 1, 0, 30, 1) -,(558, 117, 5, '', '', 1.0, 1, 1, 87, 3, 1, 0, 30, 1) -,(559, 117, 28, '', '', 1.0, 1, 1, 88, 3, 1, 0, 30, 1) -,(560, 117, 6, '', '', 1.0, 1, 1, 89, 3, 1, 0, 30, 1) -,(561, 117, 4, '', '', 1.0, 1, 1, 90, 3, 1, 0, 30, 1) -,(562, 118, 30, '', '', 1.0, 1, 1, 91, 3, 1, 0, 30, 1) -,(563, 118, 31, '', '', 1.0, 1, 1, 92, 3, 1, 0, 30, 1) -,(564, 118, 1, '', '', 1.0, 1, 1, 93, 3, 1, 0, 30, 1) -,(565, 118, 5, '', '', 1.0, 1, 1, 94, 3, 1, 0, 30, 1) -,(566, 118, 28, '', '', 1.0, 1, 1, 95, 3, 1, 0, 30, 1) -,(567, 118, 6, '', '', 1.0, 1, 1, 96, 3, 1, 0, 30, 1) -,(568, 118, 4, '', '', 1.0, 1, 1, 97, 3, 1, 0, 30, 1) -,(569, 119, 30, '', '', 1.0, 1, 1, 98, 3, 1, 0, 30, 1) -,(570, 119, 31, '', '', 1.0, 1, 1, 99, 3, 1, 0, 30, 1) -,(571, 119, 1, '', '', 1.0, 1, 1, 100, 3, 1, 0, 30, 1) -,(572, 119, 5, '', '', 1.0, 1, 1, 101, 3, 1, 0, 30, 1) -,(573, 119, 28, '', '', 1.0, 1, 1, 102, 3, 1, 0, 30, 1) -,(574, 119, 6, '', '', 1.0, 1, 1, 103, 3, 1, 0, 30, 1) -,(575, 119, 4, '', '', 1.0, 1, 1, 104, 3, 1, 0, 30, 1) -,(576, 120, 30, '', '', 1.0, 1, 1, 105, 3, 1, 0, 30, 1) -,(577, 120, 31, '', '', 1.0, 1, 1, 106, 3, 1, 0, 30, 1) -,(578, 120, 1, '', '', 1.0, 1, 1, 107, 3, 1, 0, 30, 1) -,(579, 120, 5, '', '', 1.0, 1, 1, 108, 3, 1, 0, 30, 1) -,(580, 120, 28, '', '', 1.0, 1, 1, 109, 3, 1, 0, 30, 1) -,(581, 120, 6, '', '', 1.0, 1, 1, 110, 3, 1, 0, 30, 1) -,(582, 120, 4, '', '', 1.0, 1, 1, 111, 3, 1, 0, 30, 1) -,(583, 121, 30, '', '', 1.0, 1, 1, 112, 3, 1, 0, 30, 1) -,(584, 121, 31, '', '', 1.0, 1, 1, 113, 3, 1, 0, 30, 1) -,(585, 121, 1, '', '', 1.0, 1, 1, 114, 3, 1, 0, 30, 1) -,(586, 121, 5, '', '', 1.0, 1, 1, 115, 3, 1, 0, 30, 1) -,(587, 121, 28, '', '', 1.0, 1, 1, 116, 3, 1, 0, 30, 1) -,(588, 121, 6, '', '', 1.0, 1, 1, 117, 3, 1, 0, 30, 1) -,(589, 121, 4, '', '', 1.0, 1, 1, 118, 3, 1, 0, 30, 1) -,(590, 122, 30, '', '', 1.0, 1, 1, 119, 3, 1, 0, 30, 1) -,(591, 122, 31, '', '', 1.0, 1, 1, 120, 3, 1, 0, 30, 1) -,(592, 122, 1, '', '', 1.0, 1, 1, 121, 3, 1, 0, 30, 1) -,(593, 122, 5, '', '', 1.0, 1, 1, 122, 3, 1, 0, 30, 1) -,(594, 122, 28, '', '', 1.0, 1, 1, 123, 3, 1, 0, 30, 1) -,(595, 122, 6, '', '', 1.0, 1, 1, 124, 3, 1, 0, 30, 1) -,(596, 122, 4, '', '', 1.0, 1, 1, 125, 3, 1, 0, 30, 1) -,(597, 123, 30, '', '', 1.0, 1, 1, 126, 3, 1, 0, 30, 1) -,(598, 123, 31, '', '', 1.0, 1, 1, 127, 3, 1, 0, 30, 1) -,(599, 123, 1, '', '', 1.0, 1, 1, 128, 3, 1, 0, 30, 1) -,(600, 123, 5, '', '', 1.0, 1, 1, 129, 3, 1, 0, 30, 1) -,(601, 123, 28, '', '', 1.0, 1, 1, 130, 3, 1, 0, 30, 1) -,(602, 123, 6, '', '', 1.0, 1, 1, 131, 3, 1, 0, 30, 1) -,(603, 123, 4, '', '', 1.0, 1, 1, 132, 3, 1, 0, 30, 1) -,(604, 124, 30, '', '', 1.0, 1, 1, 133, 3, 1, 0, 30, 1) -,(605, 124, 31, '', '', 1.0, 1, 1, 134, 3, 1, 0, 30, 1) -,(606, 124, 1, '', '', 1.0, 1, 1, 135, 3, 1, 0, 30, 1) -,(607, 124, 5, '', '', 1.0, 1, 1, 136, 3, 1, 0, 30, 1) -,(608, 124, 28, '', '', 1.0, 1, 1, 137, 3, 1, 0, 30, 1) -,(609, 124, 6, '', '', 1.0, 1, 1, 138, 3, 1, 0, 30, 1) -,(610, 124, 4, '', '', 1.0, 1, 1, 139, 3, 1, 0, 30, 1) -,(611, 125, 30, '', '', 1.0, 1, 1, 140, 3, 1, 0, 30, 1) -,(612, 125, 31, '', '', 1.0, 1, 1, 141, 3, 1, 0, 30, 1) -,(613, 125, 1, '', '', 1.0, 1, 1, 142, 3, 1, 0, 30, 1) -,(614, 125, 5, '', '', 1.0, 1, 1, 143, 3, 1, 0, 30, 1) -,(615, 125, 28, '', '', 1.0, 1, 1, 144, 3, 1, 0, 30, 1) -,(616, 125, 6, '', '', 1.0, 1, 1, 145, 3, 1, 0, 30, 1) -,(617, 125, 4, '', '', 1.0, 1, 1, 146, 3, 1, 0, 30, 1) -,(618, 126, 30, '', '', 1.0, 1, 1, 147, 3, 1, 0, 30, 1) -,(619, 126, 31, '', '', 1.0, 1, 1, 148, 3, 1, 0, 30, 1) -,(620, 126, 1, '', '', 1.0, 1, 1, 149, 3, 1, 0, 30, 1) -,(621, 126, 5, '', '', 1.0, 1, 1, 150, 3, 1, 0, 30, 1) -,(622, 126, 28, '', '', 1.0, 1, 1, 151, 3, 1, 0, 30, 1) -,(623, 126, 6, '', '', 1.0, 1, 1, 152, 3, 1, 0, 30, 1) -,(624, 126, 4, '', '', 1.0, 1, 1, 153, 3, 1, 0, 30, 1) -,(625, 127, 30, '', '', 1.0, 1, 1, 154, 3, 1, 0, 30, 1) -,(626, 127, 31, '', '', 1.0, 1, 1, 155, 3, 1, 0, 30, 1) -,(627, 127, 1, '', '', 1.0, 1, 1, 156, 3, 1, 0, 30, 1) -,(628, 127, 5, '', '', 1.0, 1, 1, 157, 3, 1, 0, 30, 1) -,(629, 127, 28, '', '', 1.0, 1, 1, 158, 3, 1, 0, 30, 1) -,(630, 127, 6, '', '', 1.0, 1, 1, 159, 3, 1, 0, 30, 1) -,(631, 127, 4, '', '', 1.0, 1, 1, 160, 3, 1, 0, 30, 1) -,(632, 128, 30, '', '', 1.0, 1, 1, 161, 3, 1, 0, 30, 1) -,(633, 128, 31, '', '', 1.0, 1, 1, 162, 3, 1, 0, 30, 1) -,(634, 128, 1, '', '', 1.0, 1, 1, 163, 3, 1, 0, 30, 1) -,(635, 128, 5, '', '', 1.0, 1, 1, 164, 3, 1, 0, 30, 1) -,(636, 128, 28, '', '', 1.0, 1, 1, 165, 3, 1, 0, 30, 1) -,(637, 128, 6, '', '', 1.0, 1, 1, 166, 3, 1, 0, 30, 1) -,(638, 128, 4, '', '', 1.0, 1, 1, 167, 3, 1, 0, 30, 1) -,(639, 129, 30, '', '', 1.0, 1, 1, 168, 3, 1, 0, 30, 1) -,(640, 129, 31, '', '', 1.0, 1, 1, 169, 3, 1, 0, 30, 1) -,(641, 129, 1, '', '', 1.0, 1, 1, 170, 3, 1, 0, 30, 1) -,(642, 129, 5, '', '', 1.0, 1, 1, 171, 3, 1, 0, 30, 1) -,(643, 129, 28, '', '', 1.0, 1, 1, 172, 3, 1, 0, 30, 1) -,(644, 129, 6, '', '', 1.0, 1, 1, 173, 3, 1, 0, 30, 1) -,(645, 129, 4, '', '', 1.0, 1, 1, 174, 3, 1, 0, 30, 1) -,(646, 130, 30, '', '', 1.0, 1, 1, 175, 3, 1, 0, 30, 1) -,(647, 130, 31, '', '', 1.0, 1, 1, 176, 3, 1, 0, 30, 1) -,(648, 130, 1, '', '', 1.0, 1, 1, 177, 3, 1, 0, 30, 1) -,(649, 130, 5, '', '', 1.0, 1, 1, 178, 3, 1, 0, 30, 1) -,(650, 130, 28, '', '', 1.0, 1, 1, 179, 3, 1, 0, 30, 1) -,(651, 130, 6, '', '', 1.0, 1, 1, 180, 3, 1, 0, 30, 1) -,(652, 130, 4, '', '', 1.0, 1, 1, 181, 3, 1, 0, 30, 1) -,(653, 131, 30, '', '', 1.0, 1, 1, 182, 3, 1, 0, 30, 1) -,(654, 131, 31, '', '', 1.0, 1, 1, 183, 3, 1, 0, 30, 1) -,(655, 131, 1, '', '', 1.0, 1, 1, 184, 3, 1, 0, 30, 1) -,(656, 131, 5, '', '', 1.0, 1, 1, 185, 3, 1, 0, 30, 1) -,(657, 131, 28, '', '', 1.0, 1, 1, 186, 3, 1, 0, 30, 1) -,(658, 131, 6, '', '', 1.0, 1, 1, 187, 3, 1, 0, 30, 1) -,(659, 131, 4, '', '', 1.0, 1, 1, 188, 3, 1, 0, 30, 1) -,(660, 132, 30, '', '', 1.0, 1, 1, 189, 3, 1, 0, 30, 1) -,(661, 132, 31, '', '', 1.0, 1, 1, 190, 3, 1, 0, 30, 1) -,(662, 132, 1, '', '', 1.0, 1, 1, 191, 3, 1, 0, 30, 1) -,(663, 132, 5, '', '', 1.0, 1, 1, 192, 3, 1, 0, 30, 1) -,(664, 132, 28, '', '', 1.0, 1, 1, 193, 3, 1, 0, 30, 1) -,(665, 132, 6, '', '', 1.0, 1, 1, 194, 3, 1, 0, 30, 1) -,(666, 132, 4, '', '', 1.0, 1, 1, 195, 3, 1, 0, 30, 1) -,(667, 133, 30, '', '', 1.0, 1, 1, 196, 3, 1, 0, 30, 1) -,(668, 133, 31, '', '', 1.0, 1, 1, 197, 3, 1, 0, 30, 1) -,(669, 133, 1, '', '', 1.0, 1, 1, 198, 3, 1, 0, 30, 1) -,(670, 133, 5, '', '', 1.0, 1, 1, 199, 3, 1, 0, 30, 1) -,(671, 133, 28, '', '', 1.0, 1, 1, 200, 3, 1, 0, 30, 1) -,(672, 133, 6, '', '', 1.0, 1, 1, 201, 3, 1, 0, 30, 1) -,(673, 133, 4, '', '', 1.0, 1, 1, 202, 3, 1, 0, 30, 1) -,(674, 134, 30, '', '', 1.0, 1, 1, 203, 3, 1, 0, 30, 1) -,(675, 134, 31, '', '', 1.0, 1, 1, 204, 3, 1, 0, 30, 1) -,(676, 134, 1, '', '', 1.0, 1, 1, 205, 3, 1, 0, 30, 1) -,(677, 134, 5, '', '', 1.0, 1, 1, 206, 3, 1, 0, 30, 1) -,(678, 134, 28, '', '', 1.0, 1, 1, 207, 3, 1, 0, 30, 1) -,(679, 134, 6, '', '', 1.0, 1, 1, 208, 3, 1, 0, 30, 1) -,(680, 134, 4, '', '', 1.0, 1, 1, 209, 3, 1, 0, 30, 1) -,(681, 135, 30, '', '', 1.0, 1, 1, 210, 3, 1, 0, 30, 1) -,(682, 135, 31, '', '', 1.0, 1, 1, 211, 3, 1, 0, 30, 1) -,(683, 135, 1, '', '', 1.0, 1, 1, 212, 3, 1, 0, 30, 1) -,(684, 135, 5, '', '', 1.0, 1, 1, 213, 3, 1, 0, 30, 1) -,(685, 135, 28, '', '', 1.0, 1, 1, 214, 3, 1, 0, 30, 1) -,(686, 135, 6, '', '', 1.0, 1, 1, 215, 3, 1, 0, 30, 1) -,(687, 135, 4, '', '', 1.0, 1, 1, 216, 3, 1, 0, 30, 1) -,(688, 136, 30, '', '', 1.0, 1, 1, 217, 3, 1, 0, 30, 1) -,(689, 136, 31, '', '', 1.0, 1, 1, 218, 3, 1, 0, 30, 1) -,(690, 136, 1, '', '', 1.0, 1, 1, 219, 3, 1, 0, 30, 1) -,(691, 136, 5, '', '', 1.0, 1, 1, 220, 3, 1, 0, 30, 1) -,(692, 136, 28, '', '', 1.0, 1, 1, 221, 3, 1, 0, 30, 1) -,(693, 136, 6, '', '', 1.0, 1, 1, 222, 3, 1, 0, 30, 1) -,(694, 136, 4, '', '', 1.0, 1, 1, 223, 3, 1, 0, 30, 1) -,(695, 137, 30, '', '', 1.0, 1, 1, 224, 3, 1, 0, 30, 1) -,(696, 137, 31, '', '', 1.0, 1, 1, 225, 3, 1, 0, 30, 1) -,(697, 137, 1, '', '', 1.0, 1, 1, 226, 3, 1, 0, 30, 1) -,(698, 137, 5, '', '', 1.0, 1, 1, 227, 3, 1, 0, 30, 1) -,(699, 137, 28, '', '', 1.0, 1, 1, 228, 3, 1, 0, 30, 1) -,(700, 137, 6, '', '', 1.0, 1, 1, 229, 3, 1, 0, 30, 1) -,(701, 137, 4, '', '', 1.0, 1, 1, 230, 3, 1, 0, 30, 1) -,(702, 138, 30, '', '', 1.0, 1, 1, 231, 3, 1, 0, 30, 1) -,(703, 138, 31, '', '', 1.0, 1, 1, 232, 3, 1, 0, 30, 1) -,(704, 138, 1, '', '', 1.0, 1, 1, 233, 3, 1, 0, 30, 1) -,(705, 138, 5, '', '', 1.0, 1, 1, 234, 3, 1, 0, 30, 1) -,(706, 138, 28, '', '', 1.0, 1, 1, 235, 3, 1, 0, 30, 1) -,(707, 138, 6, '', '', 1.0, 1, 1, 236, 3, 1, 0, 30, 1) -,(708, 138, 4, '', '', 1.0, 1, 1, 237, 3, 1, 0, 30, 1) -,(709, 139, 30, '', '', 1.0, 1, 1, 238, 3, 1, 0, 30, 1) -,(710, 139, 31, '', '', 1.0, 1, 1, 239, 3, 1, 0, 30, 1) -,(711, 139, 1, '', '', 1.0, 1, 1, 240, 3, 1, 0, 30, 1) -,(712, 139, 5, '', '', 1.0, 1, 1, 241, 3, 1, 0, 30, 1) -,(713, 139, 28, '', '', 1.0, 1, 1, 242, 3, 1, 0, 30, 1) -,(714, 139, 6, '', '', 1.0, 1, 1, 243, 3, 1, 0, 30, 1) -,(715, 139, 4, '', '', 1.0, 1, 1, 244, 3, 1, 0, 30, 1); +(954, 215, 6, '', '', 1.0, 1, 1, 0, 3, 0, 0, 30, 1) +,(955, 215, 1, '', '', 1.0, 1, 1, 1, 3, 0, 0, 30, 1) +,(956, 215, 3, '', '', 1.0, 1, 1, 2, 3, 0, 0, 30, 1) +,(957, 215, 4, '', '', 1.0, 1, 1, 3, 3, 0, 0, 30, 1) +,(958, 215, 5, '', '', 1.0, 1, 0, 4, 3, 0, 0, 30, 0) +,(959, 216, 6, '', '', 1.0, 1, 1, 5, 3, 0, 0, 30, 1) +,(960, 216, 1, '', '', 1.0, 1, 1, 6, 3, 0, 0, 30, 1) +,(961, 216, 3, '', '', 1.0, 1, 1, 7, 3, 0, 0, 30, 1) +,(962, 216, 4, '', '', 1.0, 1, 1, 8, 3, 0, 0, 30, 1) +,(963, 216, 5, '', '', 1.0, 1, 0, 9, 3, 0, 0, 30, 0) +,(964, 217, 6, '', '', 1.0, 1, 1, 10, 3, 0, 0, 30, 1) +,(965, 217, 1, '', '', 1.0, 1, 1, 11, 3, 0, 0, 30, 1) +,(966, 217, 3, '', '', 1.0, 1, 1, 12, 3, 0, 0, 30, 1) +,(967, 217, 4, '', '', 1.0, 1, 1, 13, 3, 0, 0, 30, 1) +,(968, 217, 5, '', '', 1.0, 1, 0, 14, 3, 0, 0, 30, 0) +,(969, 218, 6, '', '', 1.0, 1, 1, 15, 3, 0, 0, 30, 1) +,(970, 218, 1, '', '', 1.0, 1, 1, 16, 3, 0, 0, 30, 1) +,(971, 218, 3, '', '', 1.0, 1, 1, 17, 3, 0, 0, 30, 1) +,(972, 218, 4, '', '', 1.0, 1, 1, 18, 3, 0, 0, 30, 1) +,(973, 218, 5, '', '', 1.0, 1, 0, 19, 3, 0, 0, 30, 0) +,(974, 219, 6, '', '', 1.0, 1, 1, 20, 3, 0, 0, 30, 1) +,(975, 219, 1, '', '', 1.0, 1, 1, 21, 3, 0, 0, 30, 1) +,(976, 219, 3, '', '', 1.0, 1, 1, 22, 3, 0, 0, 30, 1) +,(977, 219, 4, '', '', 1.0, 1, 1, 23, 3, 0, 0, 30, 1) +,(978, 219, 5, '', '', 1.0, 1, 0, 24, 3, 0, 0, 30, 0) +,(979, 220, 6, '', '', 1.0, 1, 1, 25, 3, 0, 0, 30, 1) +,(980, 220, 1, '', '', 1.0, 1, 1, 26, 3, 0, 0, 30, 1) +,(981, 220, 3, '', '', 1.0, 1, 1, 27, 3, 0, 0, 30, 1) +,(982, 220, 4, '', '', 1.0, 1, 1, 28, 3, 0, 0, 30, 1) +,(983, 220, 5, '', '', 1.0, 1, 0, 29, 3, 0, 0, 30, 0) +,(984, 221, 6, '', '', 1.0, 1, 1, 30, 3, 0, 0, 30, 1) +,(985, 221, 1, '', '', 1.0, 1, 1, 31, 3, 0, 0, 30, 1) +,(986, 221, 3, '', '', 1.0, 1, 1, 32, 3, 0, 0, 30, 1) +,(987, 221, 4, '', '', 1.0, 1, 1, 33, 3, 0, 0, 30, 1) +,(988, 221, 5, '', '', 1.0, 1, 0, 34, 3, 0, 0, 30, 0) +,(989, 222, 6, '', '', 1.0, 1, 1, 35, 3, 0, 0, 30, 1) +,(990, 222, 1, '', '', 1.0, 1, 1, 36, 3, 0, 0, 30, 1) +,(991, 222, 3, '', '', 1.0, 1, 1, 37, 3, 0, 0, 30, 1) +,(992, 222, 4, '', '', 1.0, 1, 1, 38, 3, 0, 0, 30, 1) +,(993, 222, 5, '', '', 1.0, 1, 0, 39, 3, 0, 0, 30, 0) +,(994, 223, 6, '', '', 1.0, 1, 1, 40, 3, 0, 0, 30, 1) +,(995, 223, 1, '', '', 1.0, 1, 1, 41, 3, 0, 0, 30, 1) +,(996, 223, 3, '', '', 1.0, 1, 1, 42, 3, 0, 0, 30, 1) +,(997, 223, 4, '', '', 1.0, 1, 1, 43, 3, 0, 0, 30, 1) +,(998, 223, 5, '', '', 1.0, 1, 0, 44, 3, 0, 0, 30, 0); diff --git a/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala b/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala index bd11ef4d1..0f75587f2 100644 --- a/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala @@ -38,7 +38,6 @@ abstract trait DisziplinService extends DBService with WettkampfResultMapper { and r.durchgang in (#${durchgang.mkString("'", "','", "'")}) ) inner join wettkampf wk on (wk.id = r.wettkampf_id) - inner join programm pg on (pg.parent_id = wk.programm_id and pg.id = wd.programm_id) left outer join wertung w on ( w.wettkampf_id = r.wettkampf_id and (w.riege = r.name or w.riege2 = r.name) diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index f49abd86b..6569ecc14 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -782,7 +782,7 @@ trait WettkampfService extends DBService } } - def insertWettkampfProgram(rootprogram: String, riegenmode: Int, disziplinlist: List[String], programlist: List[String]): List[WettkampfdisziplinView] = { + def insertWettkampfProgram(rootprogram: String, riegenmode: Int, dnoteUsed: Int, disziplinlist: List[String], programlist: List[String]): List[WettkampfdisziplinView] = { val programme = Await.result(database.run{(sql""" select * from programm """.as[ProgrammRaw]).withPinnedSession}, Duration.Inf) @@ -911,9 +911,9 @@ trait WettkampfService extends DBService case _ => 1 } sqlu""" INSERT INTO wettkampfdisziplin - (id, programm_id, disziplin_id, notenfaktor, ord, masculin, feminim, startgeraet) + (id, programm_id, disziplin_id, notenfaktor, ord, masculin, feminim, dnote, startgeraet) VALUES - ($id, ${p.id}, ${d.id}, 1.000, $i, $m, $f, $start) + ($id, ${p.id}, ${d.id}, 1.000, $i, $m, $f, $dnoteUsed, $start) """ >> sql""" SELECT * from wettkampfdisziplin where id=$id diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 9dfa33a52..7661c6070 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -437,7 +437,7 @@ package object domain { * Acts +===========================================+========================================================= * Einteilung->| Pgm,Sex,Verein | Pgm,Sex,Jg,Verein | Pgm,Sex,Verein | Pgm,Sex,Jg,Verein * +--------------------+----------------------+----------------------+---------------------------------- - * Teilnahme | 1/WK | <=PgmCnt(Jg)/WK | <=PgmCnt(Jg)/WK | 1/Pgm + * Teilnahme | 1/WK | 1/WK | <=PgmCnt(Jg)/WK | 1/Pgm * +-------------------------------------------+--------------------------------------------------------- * Registration| 1/WK | 1/WK, Pgm/(Jg) | 1/WK aut. Tn 1/Pgm | 1/WK aut. Tn 1/Pgm * +-------------------------------------------+--------------------------------------------------------- diff --git a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala index 967bdb57e..bacb100a2 100644 --- a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala @@ -3,15 +3,17 @@ package ch.seidel.kutu.squad import ch.seidel.kutu.domain._ import org.slf4j.LoggerFactory +import scala.collection.mutable + case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSplitter with StartGeraetGrouper { private val logger = LoggerFactory.getLogger(classOf[DurchgangBuilder]) def suggestDurchgaenge(wettkampfId: Long, maxRiegenSize: Int = 14, durchgangfilter: Set[String] = Set.empty, programmfilter: Set[Long] = Set.empty, - splitSex: SexDivideRule = GemischteRiegen, splitPgm: Boolean = true, + splitSexOption: Option[SexDivideRule] = None, splitPgm: Boolean = true, onDisziplinList: Option[Set[Disziplin]] = None): Map[String, Map[Disziplin, Iterable[(String,Seq[Wertung])]]] = { - implicit val cache = scala.collection.mutable.Map[String, Int]() + implicit val cache: mutable.Map[String, Int] = scala.collection.mutable.Map[String, Int]() val filteredWert = prepareWertungen(wettkampfId) map wertungZuDurchgang(durchgangfilter, makeDurchgangMap(wettkampfId)) filter {x => x._2.nonEmpty && @@ -42,35 +44,41 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli wkdisziplinlist.exists { wd => d.id == wd.disziplinId && wd.programmId == pgmHead.id } } val wdzlf = wkdisziplinlist.filter{d => d.programmId == pgmHead.id } + val startgeraete = wdzlf.filter(d => (onDisziplinList.isEmpty && d.startgeraet == 1) || (onDisziplinList.nonEmpty && onDisziplinList.get.map(_.id).contains(d.disziplinId))) + val dzlff = dzlf.filter(d => startgeraete.exists(wd => wd.disziplinId == d.id)).distinct + val dzlffm = dzlff.filter(d => startgeraete.find(wd => wd.disziplinId == d.id).exists(p => p.masculin == 1)) + val dzlfff = dzlff.filter(d => startgeraete.find(wd => wd.disziplinId == d.id).exists(p => p.feminim == 1)) + val splitSex = splitSexOption match { + case None => if (dzlffm == dzlfff) GemischteRiegen else GetrennteDurchgaenge + case Some(option) => option + } wertungen.head._2.head.wettkampfdisziplin.programm.riegenmode match { case RiegeRaw.RIEGENMODE_BY_JG => val atGrouper = ATTGrouper.atGrouper val atgr = atGrouper.take(atGrouper.size-1) splitSex match { case GemischteRiegen => - groupWertungen(programm, wertungen, atgr, atGrouper, dzlf, maxRiegenSize, splitSex, true) + groupWertungen(programm, wertungen, atgr, atGrouper, dzlff, maxRiegenSize, GemischteRiegen, true) case GemischterDurchgang => - groupWertungen(programm, wertungen, atgr, atGrouper, dzlf, maxRiegenSize, splitSex, true) + groupWertungen(programm, wertungen, atgr, atGrouper, dzlff, maxRiegenSize, GemischterDurchgang, true) case GetrennteDurchgaenge => val m = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("M")) val w = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("W")) - groupWertungen(programm + "-Tu", m, atgr, atGrouper, dzlf, maxRiegenSize, splitSex, true) ++ - groupWertungen(programm + "-Ti", w, atgr, atGrouper, dzlf, maxRiegenSize, splitSex, true) + groupWertungen(programm + "-Tu", m, atgr, atGrouper, dzlffm, maxRiegenSize, GetrennteDurchgaenge, true) ++ + groupWertungen(programm + "-Ti", w, atgr, atGrouper, dzlfff, maxRiegenSize, GetrennteDurchgaenge, true) } case _ => - // Barren wegschneiden (ist kein Startgerät) - val startgeraete = wdzlf.filter(d => (onDisziplinList.isEmpty && d.startgeraet == 1) || (onDisziplinList.nonEmpty && onDisziplinList.get.map(_.id).contains(d.disziplinId))) - val dzlff = dzlf.filter(d => startgeraete.exists(wd => wd.disziplinId == d.id)) + // Startgeräte selektieren splitSex match { case GemischteRiegen => - groupWertungen(programm, wertungen, wkFilteredGrouper, wkGrouper, dzlff, maxRiegenSize, splitSex, false) + groupWertungen(programm, wertungen, wkFilteredGrouper, wkGrouper, dzlff, maxRiegenSize, GemischteRiegen, false) case GemischterDurchgang => - groupWertungen(programm, wertungen, wkFilteredGrouper, wkGrouper, dzlff, maxRiegenSize, splitSex, false) + groupWertungen(programm, wertungen, wkFilteredGrouper, wkGrouper, dzlff, maxRiegenSize, GemischterDurchgang, false) case GetrennteDurchgaenge => val m = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("M")) val w = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("W")) - groupWertungen(programm + "-Tu", m, wkFilteredGrouper, wkGrouper, dzlff, maxRiegenSize, splitSex, false) ++ - groupWertungen(programm + "-Ti", w, wkFilteredGrouper, wkGrouper, dzlff, maxRiegenSize, splitSex, false) + groupWertungen(programm + "-Tu", m, wkFilteredGrouper, wkGrouper, dzlffm, maxRiegenSize, GetrennteDurchgaenge, false) ++ + groupWertungen(programm + "-Ti", w, wkFilteredGrouper, wkGrouper, dzlfff, maxRiegenSize, GetrennteDurchgaenge, false) } } } diff --git a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala index 8e6fd388c..77cfd405c 100644 --- a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala @@ -30,7 +30,7 @@ trait RiegenBuilder { def suggestRiegen(rotationstation: Seq[Int], wertungen: Seq[WertungView]): Seq[(String, Seq[Wertung])] = { val riegencount = rotationstation.sum - if (wertungen.head.wettkampfdisziplin.programm.riegenmode == 2) { + if (wertungen.head.wettkampfdisziplin.programm.riegenmode == RiegeRaw.RIEGENMODE_BY_JG) { ATTGrouper.suggestRiegen(riegencount, wertungen) } else { KuTuGeTuGrouper.suggestRiegen(riegencount, wertungen) diff --git a/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala b/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala index 8eeede014..eb50a18e3 100644 --- a/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala @@ -519,12 +519,12 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: } }, new Button("OK") { onAction = (event: ActionEvent) => { - if (!txtGruppengroesse.text.value.isEmpty) { + if (txtGruppengroesse.text.value.nonEmpty) { KuTuApp.invokeWithBusyIndicator { val riegenzuteilungen = DurchgangBuilder(service).suggestDurchgaenge( wettkampf.id, str2Int(txtGruppengroesse.text.value), durchgang, - splitSex = cbSplitSex.getSelectionModel.getSelectedItem, + splitSexOption = Some(cbSplitSex.getSelectionModel.getSelectedItem), splitPgm = chkSplitPgm.selected.value, onDisziplinList = getSelectedDisziplines) diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala index c71a11472..772f391a5 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala @@ -9,6 +9,7 @@ case class WettkampfInfo(wettkampf: WettkampfView, service: KutuService) { } // val rootprograms = wettkampfdisziplinViews.map(wd => wd.programm.parent).filter(_.nonEmpty).map(_.get).toSet.toList.sortWith((a, b) => a.ord < b.ord) val leafprograms = wettkampfdisziplinViews.map(wd => wd.programm).toSet.toList.sortWith((a, b) => a.ord < b.ord) + val isAggregated = wettkampfdisziplinViews.exists(wd => wd.programm.aggregate != 0) val isDNoteUsed = wettkampfdisziplinViews.exists(wd => wd.isDNoteUsed) val isAthletikTest = wettkampf.programm.aggregatorHead.id == 1 } diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index badbc7dde..b1cfed934 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -369,7 +369,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr } ) - val riegeCol: List[jfxsc.TableColumn[IndexedSeq[WertungEditor], _]] = if (wettkampfInfo.leafprograms.size > 2) { + val riegeCol: List[jfxsc.TableColumn[IndexedSeq[WertungEditor], _]] = if (!wettkampfInfo.isAggregated) { List(new WKTableColumn[String](-1) { text = "Riege" cellFactory.value = { _: Any => diff --git a/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala b/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala index 7efb59e73..404d06a91 100644 --- a/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala +++ b/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala @@ -2,7 +2,6 @@ package ch.seidel.kutu.base import java.sql.Date import java.util.UUID - import akka.http.scaladsl.testkit.ScalatestRouteTest import ch.seidel.kutu.domain._ import ch.seidel.kutu.http.ApiService @@ -11,6 +10,9 @@ import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec import org.slf4j.LoggerFactory +import java.time.{Instant, LocalDate} +import java.time.temporal.ChronoUnit + trait KuTuBaseSpec extends AnyWordSpec with Matchers with DBService with KutuService with ApiService with ScalaFutures with ScalatestRouteTest { private val logger = LoggerFactory.getLogger(this.getClass) DBService.startDB(Some(TestDBService.db)) @@ -32,7 +34,29 @@ trait KuTuBaseSpec extends AnyWordSpec with Matchers with DBService with KutuSer } wettkampf } - + def insertTurn10Wettkampf(name: String, anzvereine: Int) = { + val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(211L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString)) + val programme: Seq[ProgrammView] = readWettkampfLeafs(wettkampf.programmId) + val pgIds = programme.map(_.id) + val vereine = for (v <- (1 to anzvereine)) yield { + val vereinID = createVerein(s"Verein-$v", Some(s"Verband-$v")) + val athleten = for { + pg <- (1 to pgIds.size) + a <- (1 to Math.max(1, 20 / pg)) + } yield { + val alter = 6 + a * pg + val gebdat = Date.valueOf(LocalDate.now().minus(alter, ChronoUnit.YEARS)) + val athlet = insertAthlete(Athlet(vereinID).copy( + name = s"Athlet-$pg-$a", + gebdat = Some(gebdat) + )) + assignAthletsToWettkampf(wettkampf.id, Set(pgIds(pg-1)), Set(athlet.id)) + athlet + } + } + wettkampf + } + "application" should { "initialize new database" in { TestDBService.db diff --git a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala index 38776dd6e..3108b95ca 100644 --- a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala @@ -66,7 +66,7 @@ class WettkampfSpec extends KuTuBaseSpec { WettkampfdisziplinView(164,Testprogramm2 / LK3 (von=0, bis=100),Disziplin(30,Ringe),,None,StandardWettkampf(1.0),1,1,4,3,1,0,30,1) WettkampfdisziplinView(165,Testprogramm2 / LK3 (von=0, bis=100),Disziplin(5,Barren),,None,StandardWettkampf(1.0),1,1,5,3,1,0,30,1) */ - val tp1 = insertWettkampfProgram("Testprogramm1", 2, + val tp1 = insertWettkampfProgram("Testprogramm1", 2, 1, List("Boden", "Sprung"), List("AK1(von=5 bis=10)", "AK2(von=11 bis=20)", "AK3(von=21 bis=50)") ) @@ -78,7 +78,7 @@ class WettkampfSpec extends KuTuBaseSpec { assert(tp1(2).programm.alterVon == 11) assert(tp1(2).programm.alterBis == 20) - val tp2 = insertWettkampfProgram("Testprogramm2", 1, + val tp2 = insertWettkampfProgram("Testprogramm2", 1, 0, List("Barren", "Ringe"), List("LK1", "LK2", "LK3") ) @@ -90,9 +90,26 @@ class WettkampfSpec extends KuTuBaseSpec { assert(tp2(1).programm.alterVon == 0) assert(tp2(1).programm.alterBis == 100) } - "create TG Allgäu" in { - val tga = insertWettkampfProgram(s"TG Allgäu-Test", 1, - List("Boden", "Barren", "Sprung", "Reck"), + "create KuTu DTL Kür & Pflicht" in { + val tga = insertWettkampfProgram(s"KuTu DTL Kür & Pflicht-Test", 1, 1, + List("Boden(sex=m)", "Pferd(sex=m)", "Ring(sex=m)", "Sprung(sex=m)", "Barren(sex=m)", "Reck(sex=m)"), + List( + "Kür/WK I Kür" + , "Kür/WK II LK1" + , "Kür/WK III LK1(von=16 bis=17)" + , "Kür/WK IV LK2(von=14 bis=15)" + , "Pflicht/WK V Jug(von=14 bis=18)" + , "Pflicht/WK VI Schüler A(von=12 bis=13)" + , "Pflicht/WK VII Schüler B(von=10 bis=11)" + , "Pflicht/WK VIII Schüler C(von=8 bis=9)" + , "Pflicht/WK IX Schüler D(von=0 bis=7)" + ) + ) + printNewWettkampfModeInsertStatements(tga) + } + "create KuTuRi DTL Kür & Pflicht-" in { + val tga = insertWettkampfProgram(s"KuTuRi DTL Kür & Pflicht-Test", 1, 1, + List("Sprung(sex=w)", "Barren(sex=w)", "Balken(sex=w)", "Boden(sex=w)"), List( "Kür/WK I Kür" , "Kür/WK II LK1" @@ -108,50 +125,29 @@ class WettkampfSpec extends KuTuBaseSpec { printNewWettkampfModeInsertStatements(tga) } "create Turn10" in { - val turn10 = insertWettkampfProgram(s"Turn10-Test", 1, - List("Boden", "Barren", "Balken", "Minitramp", "Reck", "Pferd", "Sprung"), + val turn10v = insertWettkampfProgram(s"Turn10-Verein-Test", 2, 1, + // Ti: Boden, Balken, Minitramp, Reck/Stufenbarren, Sprung. + // Tu: Boden, Barren, Minitramp, Reck, Sprung, Pferd, Ringe + List("Boden", "Barren(sex=m)", "Balken(sex=w)", "Minitramp", "Reck(sex=m)", "Stufenbarren(sex=w)", "Sprung", "Pferdpauschen(sex=m)", "Ringe(sex=m)"), + List( + "BS" + , "OS" + ) + ) + printNewWettkampfModeInsertStatements(turn10v) + val turn10s = insertWettkampfProgram(s"Turn10-Schule-Test", 2, 1, + // Ti: Boden, Balken, Reck, Sprung. + // Tu: Boden, Barren, Reck, Sprung. + List("Boden", "Barren(sex=m)", "Balken(sex=w)", "Reck", "Sprung"), List( - "AK6 BS(von=0 bis=6)" - , "AK7 BS(von=7 bis=7)" - , "AK8 BS(von=8 bis=8)" - , "AK9 BS(von=9 bis=9)" - , "AK10 BS(von=10 bis=10)" - , "AK11 BS(von=11 bis=11)" - , "AK12 BS(von=12 bis=12)" - , "AK13 BS(von=13 bis=13)" - , "AK13 OS(von=13 bis=13)" - , "AK14 BS(von=14 bis=14)" - , "AK14 OS(von=14 bis=14)" - , "AK15 BS(von=15 bis=15)" - , "AK15 OS(von=15 bis=15)" - , "AK16 BS(von=16 bis=16)" - , "AK16 OS(von=16 bis=16)" - , "AK17 BS(von=17 bis=17)" - , "AK17 OS(von=17 bis=17)" - , "AK18 BS(von=18 bis=23)" - , "AK18 OS(von=18 bis=23)" - , "AK24 BS(von=24 bis=29)" - , "AK24 OS(von=24 bis=29)" - , "AK30 BS(von=30 bis=34)" - , "AK30 OS(von=30 bis=34)" - , "AK35 BS(von=35 bis=39)" - , "AK35 OS(von=35 bis=39)" - , "AK40 BS(von=40 bis=44)" - , "AK40 OS(von=40 bis=44)" - , "AK45 BS(von=45 bis=49)" - , "AK45 OS(von=45 bis=49)" - , "AK50 BS(von=50 bis=54)" - , "AK50 OS(von=50 bis=54)" - , "AK55 BS(von=55 bis=59)" - , "AK55 OS(von=55 bis=59)" - , "AK60 BS(von=60 bis=64)" - , "AK60 OS(von=60 bis=64)" + "BS" + , "OS" ) ) - printNewWettkampfModeInsertStatements(turn10) + printNewWettkampfModeInsertStatements(turn10s) } "create GeTu BLTV" in { - val tga = insertWettkampfProgram(s"GeTu BLTV-Test", 1, + val tga = insertWettkampfProgram(s"GeTu BLTV-Test", 1, 0, List("Reck", "Boden", "Ring", "Sprung", "Barren(sex=m start=0)"), List( "K1(bis=10)" From 89b27cde3236682e9568b0bb832a2a4414c2369b Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sun, 26 Mar 2023 00:30:41 +0100 Subject: [PATCH 09/99] =?UTF-8?q?#87=20PoC=20for=20Turn10=20and=20TG=20All?= =?UTF-8?q?g=C3=A4u=20WK-Modes=20-=20Fix=20plantimes=20for=20nested=20prog?= =?UTF-8?q?rams?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index 6569ecc14..3f112e13e 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -78,7 +78,7 @@ trait WettkampfService extends DBService end as wertung FROM wettkampf wk - inner join programm p on (wk.programm_id = p.id) + inner join programm p on (wk.programm_id in (p.id, p.parent_id)) inner join programm pd on (p.id = pd.parent_id) inner join wettkampfdisziplin wkd on (pd.id = wkd.programm_id) inner join disziplin d on (d.id = wkd.disziplin_id) From 4f137f462c8ef3ece89f8677b3dccee0072a400d Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sun, 26 Mar 2023 15:46:30 +0200 Subject: [PATCH 10/99] =?UTF-8?q?#87=20PoC=20for=20Turn10=20and=20TG=20All?= =?UTF-8?q?g=C3=A4u=20WK-Modes=20-=20Support=20new=20models=20in=20Wettkam?= =?UTF-8?q?pfWertungTabs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scala/ch/seidel/kutu/domain/package.scala | 15 +++++- .../ch/seidel/kutu/view/NetworkTab.scala | 2 +- .../ch/seidel/kutu/view/WettkampfInfo.scala | 8 ++- .../ch/seidel/kutu/view/WettkampfPage.scala | 20 ++++--- .../kutu/view/WettkampfWertungTab.scala | 54 ++++++++++++++++--- 5 files changed, 79 insertions(+), 20 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 7661c6070..d992e06a2 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -455,14 +455,25 @@ package object domain { case None => this case Some(p) => p.head } - + def subHead: Option[ProgrammView] = parent match { + case None => None + case Some(p) => if (p.parent.nonEmpty) p.subHead else parent + } + def programPath: Seq[ProgrammView] = parent match { + case None => Seq(this) + case Some(p) => p.programPath :+ this + } def wettkampfprogramm: ProgrammView = if (aggregator == this) this else head def aggregatorHead: ProgrammView = parent match { - case Some(p) if (aggregate != 0) => p.aggregatorHead + case Some(p) if (p.aggregate != 0) => p.aggregatorHead case _ => this } + def groupedHead: ProgrammView = parent match { + case Some(p) if (p.parent.nonEmpty && aggregate != 0) => p + case _ => aggregatorHead + } def aggregatorParent: ProgrammView = parent match { case Some(p) if (aggregate != 0) => p.parent.getOrElse(this) case _ => this diff --git a/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala b/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala index cd2b4bcaf..f8ced1d3c 100644 --- a/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala @@ -322,7 +322,7 @@ class NetworkTab(wettkampfmode: BooleanProperty, override val wettkampfInfo: Wet model.setAll(items.asJavaCollection) isRunning.set(model.exists(_.getValue.isRunning)) selected.foreach(selection => { - if (view.getColumns.size() > selection.column) { + if (selection.column > -1 && view.getColumns.size() > selection.column) { val column = view.getColumns.get(selection.column) view.selectionModel.value.select(selection.row, column) } diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala index 772f391a5..3aa3e9e46 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala @@ -7,8 +7,12 @@ case class WettkampfInfo(wettkampf: WettkampfView, service: KutuService) { val disziplinList: List[Disziplin] = wettkampfdisziplinViews.foldLeft(List[Disziplin]()) { (acc, dv) => if (!acc.contains(dv.disziplin)) acc :+ dv.disziplin else acc } -// val rootprograms = wettkampfdisziplinViews.map(wd => wd.programm.parent).filter(_.nonEmpty).map(_.get).toSet.toList.sortWith((a, b) => a.ord < b.ord) - val leafprograms = wettkampfdisziplinViews.map(wd => wd.programm).toSet.toList.sortWith((a, b) => a.ord < b.ord) + //val pathPrograms = wettkampfdisziplinViews.flatMap(wd => wd.programm.programPath.reverse.tail).distinct.sortBy(_.ord).reverse + val parentPrograms = wettkampfdisziplinViews.map(wd => wd.programm.parent).filter(_.nonEmpty).map(_.get).distinct.sortBy(_.ord) + //val parentPrograms = wettkampfdisziplinViews.map(wd => wd.programm.aggregator).distinct.sortBy(_.ord) + val groupHeadPrograms = wettkampfdisziplinViews.map(wd => wd.programm.groupedHead).distinct.sortBy(_.ord) + val subHeadPrograms = wettkampfdisziplinViews.map(wd => wd.programm.subHead).filter(_.nonEmpty).map(_.get).distinct.sortBy(_.ord) + val leafprograms = wettkampfdisziplinViews.map(wd => wd.programm).distinct.sortBy(_.ord) val isAggregated = wettkampfdisziplinViews.exists(wd => wd.programm.aggregate != 0) val isDNoteUsed = wettkampfdisziplinViews.exists(wd => wd.isDNoteUsed) val isAthletikTest = wettkampf.programm.aggregatorHead.id == 1 diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfPage.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfPage.scala index 59a3986e5..98a7c2a1a 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfPage.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfPage.scala @@ -15,25 +15,31 @@ object WettkampfPage { logger.debug("Start buildTab") val wettkampf = wettkampfInfo.wettkampf val progs = wettkampfInfo.leafprograms + val pathProgs = wettkampfInfo.parentPrograms logger.debug("Start Overview") val overview = new WettkampfOverviewTab(wettkampf, service) logger.debug("Start Alle Wertungen") - val alleWertungenTab = new WettkampfWertungTab(wettkampfmode, None, None, wettkampfInfo, service, { - service.listAthletenWertungenZuProgramm(progs map (p => p.id), wettkampf.id) - }) { - text <== when(wettkampfmode) choose "Alle Wertungen" otherwise "Alle" + val alleWertungenTabs: Seq[Tab] = (pathProgs map { v => + val leafHeadProgs = progs.filter(p => p.programPath.contains(v)) + val pgm = if (v.parent.nonEmpty) Some(v) else None + new WettkampfWertungTab(wettkampfmode, pgm, None, wettkampfInfo, service, { + service.listAthletenWertungenZuProgramm(leafHeadProgs map (p => p.id), wettkampf.id) + }) { + val progHeader = if (v.parent.nonEmpty) v.name else "" + text <== when(wettkampfmode) choose s"Alle $progHeader Wertungen" otherwise s"Alle $progHeader" closable = false - } + }}) logger.debug("Start Program Tabs") val progSites: Seq[Tab] = (progs map { v => new WettkampfWertungTab(wettkampfmode, Some(v), None, wettkampfInfo, service, { service.listAthletenWertungenZuProgramm(progs map (p => p.id), wettkampf.id) + .filter(w => w.wettkampfdisziplin.programm.programPath.contains(v)) }) { text = v.name closable = false } - }) :+ alleWertungenTab + }) ++ alleWertungenTabs logger.debug("Start RiegenTab Tab") val riegenSite: Seq[Tab] = Seq(new RiegenTab(wettkampfInfo, service)) @@ -82,7 +88,7 @@ object WettkampfPage { } if(wettkampfmode.value) { Seq[Tab](overview) ++ - networkSite ++ Seq[Tab](alleWertungenTab) ++ ranglisteSite + networkSite ++ alleWertungenTabs ++ ranglisteSite } else { Seq[Tab](overview) ++ diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index b1cfed934..833e41783 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -87,7 +87,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr def defaultFilter: (WertungView) => Boolean = { wertung => programm match { case Some(progrm) => - wertung.wettkampfdisziplin.programm.id == progrm.id + wertung.wettkampfdisziplin.programm.programPath.contains(progrm) case None => true } @@ -137,7 +137,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr } def riegen(onSelectedChange: (String, Boolean) => Boolean): IndexedSeq[RiegeEditor] = { - service.listRiegenZuWettkampf(wettkampf.id).sortBy(r => r._1).filter { r => relevantRiegen.contains(r._1) }.map(x => + service.listRiegenZuWettkampf(wettkampf.id).filter { r => relevantRiegen.contains(r._1) }.sortBy(r => r._1).map(x => RiegeEditor( wettkampf.id, x._1, @@ -244,11 +244,26 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr val indexerE = Iterator.from(0) val indexerD = Iterator.from(0) val indexerF = Iterator.from(0) - wertungen.head.map { wertung => + wertungen.head + .map { wertung => lazy val clDnote = new WKTableColumn[Double](indexerD.next()) { text = "D" cellValueFactory = { x => if (x.value.size > index) x.value(index).noteD else wertung.noteD } - cellFactory.value = { _: Any => new AutoCommitTextFieldTableCell[IndexedSeq[WertungEditor], Double](DoubleConverter(wertung.init.wettkampfdisziplin.notenSpez)) } + cellFactory.value = { _: Any => + new AutoCommitTextFieldTableCell[IndexedSeq[WertungEditor], Double]( + DoubleConverter(wertung.init.wettkampfdisziplin.notenSpez), + (cell) => { + if (cell.tableRow.value != null && cell.tableRow.value.item.value != null && index < cell.tableRow.value.item.value.size) { + val w = cell.tableRow.value.item.value(index) + val editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) && + w.init.wettkampfdisziplin.isDNoteUsed && + w.matchesSexAssignment + cell.editable = editable + cell.pseudoClassStateChanged(editableCssClass, cell.isEditable) + } + } + ) + } styleClass += "table-cell-with-value" prefWidth = if (wertung.init.wettkampfdisziplin.isDNoteUsed) 60 else 0 @@ -280,7 +295,20 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr text = "E" cellValueFactory = { x => if (x.value.size > index) x.value(index).noteE else wertung.noteE } - cellFactory.value = { _: Any => new AutoCommitTextFieldTableCell[IndexedSeq[WertungEditor], Double](DoubleConverter(wertung.init.wettkampfdisziplin.notenSpez)) } + cellFactory.value = { _: Any => + new AutoCommitTextFieldTableCell[IndexedSeq[WertungEditor], Double]( + DoubleConverter(wertung.init.wettkampfdisziplin.notenSpez), + (cell) => { + if (cell.tableRow.value != null && cell.tableRow.value.item.value != null && index < cell.tableRow.value.item.value.size) { + val w = cell.tableRow.value.item.value(index) + val editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) && + w.matchesSexAssignment + cell.editable = editable + cell.pseudoClassStateChanged(editableCssClass, cell.isEditable) + } + } + ) + } styleClass += "table-cell-with-value" prefWidth = 60 @@ -323,6 +351,8 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr } } else { + // TODO Option, falls Mehrere Programme die gleichen Geräte benötigen, + // abhängig von subpath oder aggr. gerät mit Pfad qualifizieren clEnote.text = wertung.init.wettkampfdisziplin.disziplin.name clEnote } @@ -461,7 +491,15 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr } }) } else { - val cols: List[jfxsc.TableColumn[IndexedSeq[WertungEditor], _]] = wettkampfInfo.leafprograms.map { p => + val cols: List[jfxsc.TableColumn[IndexedSeq[WertungEditor], _]] = wettkampfInfo.groupHeadPrograms + .filter{ p => + programm match { + case Some(pgm) if (pgm.programPath.contains(p)) => true + case None => true + case _ => false + } + } + .map { p => val col: jfxsc.TableColumn[IndexedSeq[WertungEditor], _] = new TableColumn[IndexedSeq[WertungEditor], String] { text = s"${p.name}" // delegate.impl_setReorderable(false) @@ -473,7 +511,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr } cellValueFactory = { x => new ReadOnlyStringWrapper(x.value, "riege", { - s"${x.value.find(we => we.init.wettkampfdisziplin.programm == p).flatMap(we => we.init.riege).getOrElse("keine Einteilung")}" + s"${x.value.find(we => we.init.wettkampfdisziplin.programm.programPath.contains(p)).flatMap(we => we.init.riege).getOrElse("keine Einteilung")}" }) } editable <== when(Bindings.createBooleanBinding(() => { @@ -808,7 +846,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr val lastDurchgangSelection = cmbDurchgangFilter.selectionModel.value.getSelectedItem if (riege.isEmpty) { cmbDurchgangFilter.items = ObservableBuffer.from(rebuildDurchgangFilterList) - cmbDurchgangFilter.items.value.filter(x => lastDurchgangSelection == null || x.softEquals(lastDurchgangSelection)).headOption match { + cmbDurchgangFilter.items.value.find(x => lastDurchgangSelection == null || x.softEquals(lastDurchgangSelection)) match { case Some(item) => cmbDurchgangFilter.selectionModel.value.select(item) durchgangFilter = item; From 36a69218cd2683562f83e1dc044cdc82fbcb8b40 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sun, 26 Mar 2023 16:00:10 +0200 Subject: [PATCH 11/99] =?UTF-8?q?#87=20PoC=20for=20Turn10=20and=20TG=20All?= =?UTF-8?q?g=C3=A4u=20WK-Modes=20-=20enforce=20sex-matching=20for=20scores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/ch/seidel/kutu/view/WertungEditor.scala | 4 ++++ .../scala/ch/seidel/kutu/view/WettkampfWertungTab.scala | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/view/WertungEditor.scala b/src/main/scala/ch/seidel/kutu/view/WertungEditor.scala index 4c7f9a72b..6d6a63c5d 100644 --- a/src/main/scala/ch/seidel/kutu/view/WertungEditor.scala +++ b/src/main/scala/ch/seidel/kutu/view/WertungEditor.scala @@ -8,6 +8,10 @@ case class WertungEditor(init: WertungView) { val noteD = DoubleProperty(Double.NaN) val noteE = DoubleProperty(Double.NaN) val endnote = DoubleProperty(Double.NaN) + val matchesSexAssignment = init.athlet.geschlecht match { + case "M" => init.wettkampfdisziplin.masculin > 0 + case "W" => init.wettkampfdisziplin.feminim > 0 + } reset noteD.onChange { listeners.foreach(f => f(this)) diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index 833e41783..4e4be40d8 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -267,7 +267,9 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr styleClass += "table-cell-with-value" prefWidth = if (wertung.init.wettkampfdisziplin.isDNoteUsed) 60 else 0 - editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) && wertung.init.wettkampfdisziplin.isDNoteUsed + editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) && + wertung.init.wettkampfdisziplin.isDNoteUsed && + wertung.matchesSexAssignment visible = wertung.init.wettkampfdisziplin.isDNoteUsed onEditCommit = (evt: CellEditEvent[IndexedSeq[WertungEditor], Double]) => { if (evt.rowValue != null) { @@ -312,7 +314,8 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr styleClass += "table-cell-with-value" prefWidth = 60 - editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) + editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) && + wertung.matchesSexAssignment onEditCommit = (evt: CellEditEvent[IndexedSeq[WertungEditor], Double]) => { if (evt.rowValue != null) { From ae065bdf7c67369d2d7d97bc684705b2fad347de Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sun, 26 Mar 2023 20:52:59 +0200 Subject: [PATCH 12/99] =?UTF-8?q?#87=20PoC=20for=20Turn10=20and=20TG=20All?= =?UTF-8?q?g=C3=A4u=20WK-Modes=20-=20enforce=20readonly=20on=20unmatching?= =?UTF-8?q?=20disciplines?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/AutoCommitTextFieldTableCell.scala | 17 +++++++++++++++-- .../ch/seidel/kutu/view/WertungEditor.scala | 6 +++--- .../seidel/kutu/view/WettkampfWertungTab.scala | 14 +++++++------- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala b/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala index 5ca460896..d9831d915 100644 --- a/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala +++ b/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala @@ -308,7 +308,9 @@ object AutoCommitTextFieldTableCell { } -class AutoCommitTextFieldTableCell[S, T](override val delegate: jfxscc.TextFieldTableCell[S, T] = new jfxscc.TextFieldTableCell[S, T]) +class AutoCommitTextFieldTableCell[S, T]( + val cellStateUpdater: scala.Function1[scalafx.scene.control.TableCell[S, T], scala.Unit], + override val delegate: jfxscc.TextFieldTableCell[S, T] = new jfxscc.TextFieldTableCell[S, T]) extends TableCell[S, T](delegate) with ConvertableCell[jfxscc.TextFieldTableCell[S, T], T, T] with UpdatableCell[jfxscc.TextFieldTableCell[S, T], T] @@ -316,12 +318,23 @@ class AutoCommitTextFieldTableCell[S, T](override val delegate: jfxscc.TextField import AutoCommitTextFieldTableCell.PSEUDO_CLASS_FOCUSED + def this(converter: StringConverter[T], cellStateUpdater: scala.Function1[scalafx.scene.control.TableCell[S, T], scala.Unit]) = { + this(cellStateUpdater, new jfxscc.TextFieldTableCell[S, T](converter)) + } def this(converter: StringConverter[T]) = { - this(new jfxscc.TextFieldTableCell[S, T](converter)) + this((tc: TableCell[S, T])=>{}, new jfxscc.TextFieldTableCell[S, T](converter)) } var textField: Option[TextField] = None + index.onChange({ + cellStateUpdater(this) + if (editable.value) { + style = "" + } else { + style = "-fx-background-color: transparent, #FAFAAA ;" + } + }) graphic.onChange({ textField = graphic.value match { case field: TextField => Some(field) diff --git a/src/main/scala/ch/seidel/kutu/view/WertungEditor.scala b/src/main/scala/ch/seidel/kutu/view/WertungEditor.scala index 6d6a63c5d..002825081 100644 --- a/src/main/scala/ch/seidel/kutu/view/WertungEditor.scala +++ b/src/main/scala/ch/seidel/kutu/view/WertungEditor.scala @@ -5,13 +5,13 @@ import scalafx.beans.property.DoubleProperty case class WertungEditor(init: WertungView) { type WertungChangeListener = (WertungEditor) => Unit - val noteD = DoubleProperty(Double.NaN) - val noteE = DoubleProperty(Double.NaN) - val endnote = DoubleProperty(Double.NaN) val matchesSexAssignment = init.athlet.geschlecht match { case "M" => init.wettkampfdisziplin.masculin > 0 case "W" => init.wettkampfdisziplin.feminim > 0 } + val noteD = DoubleProperty(Double.NaN) + val noteE = DoubleProperty(Double.NaN) + val endnote = DoubleProperty(Double.NaN) reset noteD.onChange { listeners.foreach(f => f(this)) diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index 4e4be40d8..fdf58cce8 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -30,6 +30,8 @@ import scalafx.scene.control.TableView.sfxTableView2jfx import scalafx.scene.control._ import scalafx.scene.input.{Clipboard, KeyEvent} import scalafx.scene.layout._ +import scalafx.scene.paint.Color.Grey +import scalafx.scene.shape.Circle import scalafx.util.converter.{DefaultStringConverter, DoubleStringConverter} import java.util.UUID @@ -244,10 +246,13 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr val indexerE = Iterator.from(0) val indexerD = Iterator.from(0) val indexerF = Iterator.from(0) + import javafx.css.PseudoClass + val editableCssClass = PseudoClass.getPseudoClass("editable") wertungen.head .map { wertung => lazy val clDnote = new WKTableColumn[Double](indexerD.next()) { text = "D" + cellValueFactory = { x => if (x.value.size > index) x.value(index).noteD else wertung.noteD } cellFactory.value = { _: Any => new AutoCommitTextFieldTableCell[IndexedSeq[WertungEditor], Double]( @@ -267,9 +272,6 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr styleClass += "table-cell-with-value" prefWidth = if (wertung.init.wettkampfdisziplin.isDNoteUsed) 60 else 0 - editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) && - wertung.init.wettkampfdisziplin.isDNoteUsed && - wertung.matchesSexAssignment visible = wertung.init.wettkampfdisziplin.isDNoteUsed onEditCommit = (evt: CellEditEvent[IndexedSeq[WertungEditor], Double]) => { if (evt.rowValue != null) { @@ -314,9 +316,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr styleClass += "table-cell-with-value" prefWidth = 60 - editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) && - wertung.matchesSexAssignment - + //editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) onEditCommit = (evt: CellEditEvent[IndexedSeq[WertungEditor], Double]) => { if (evt.rowValue != null) { val disciplin = evt.rowValue(index) @@ -919,7 +919,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr selectionstore .foreach(c => columnIndex.foreach{ i => - wkview.selectionModel.value.select( + if (i > -1 && wkview.columns.size > i) wkview.selectionModel.value.select( c.row, wkview.columns.get(i) ) From 82c9c91a831473fe1ae5282f01bc872320039550 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sun, 26 Mar 2023 22:35:37 +0200 Subject: [PATCH 13/99] #660 fix key-navigation to next editable cell --- .../AutoCommitTextFieldTableCell.scala | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala b/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala index d9831d915..5b5dc30d3 100644 --- a/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala +++ b/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala @@ -55,13 +55,23 @@ object AutoCommitTextFieldTableCell { def forTableColumn[S, T](converter: StringConverter[T]): (TableColumn[S, T] => TableCell[S, T]) = (view: TableColumn[S, T]) => jfxscc.TextFieldTableCell.forTableColumn[S, T](converter).call(view) - def isEditableColumn(p: TableColumn[_, _]) = p.isVisible() && p.isEditable() && p.columns.size == 0 + def isEditableColumn[S, T](p: TableColumn[S, T], rowIndex: Int): Boolean = { + p.isVisible && p.isEditable && p.columns.isEmpty && { + import javafx.scene.AccessibleAttribute + val colIndex = p.tableView.value.getVisibleLeafIndex(p) + val cell = p.tableView.delegate.value.queryAccessibleAttribute(AccessibleAttribute.CELL_AT_ROW_COLUMN, rowIndex, colIndex).asInstanceOf[jfxsc.IndexedCell[T]] + if (cell != null) + cell.isEditable + else + false + } + } - def getEditableColums[T](tableView: TableView[T]) = - tableView.columns.toList.flatMap(p => p +: p.columns.toList).filter(isEditableColumn(_)) + def getEditableColums[T](tableView: TableView[T], row: Int) = + tableView.columns.toList.flatMap(p => p +: p.columns.toList).filter(tc => isEditableColumn(tc, row)) def selectFirstEditable[T](tableView: TableView[T]): () => Unit = { - val editableColumns = getEditableColums(tableView) + val editableColumns = getEditableColums(tableView, 0) val ret = () => { if (editableColumns.nonEmpty) { val nextEditable = editableColumns.head @@ -74,9 +84,9 @@ object AutoCommitTextFieldTableCell { } def selectNextEditable[T](tableView: TableView[T]): () => Unit = { - val editableColumns = getEditableColums(tableView) tableView.selectionModel.value.selectedCells.headOption match { case Some(selected) => + val editableColumns = getEditableColums(tableView, selected.row) val remaining = editableColumns.dropWhile(_ != selected.tableColumn) val newSelectedRowIdx = if (selected.getRow == tableView.items.value.size() - 1) 0 else selected.getRow + 1 val ret = () => { @@ -110,9 +120,9 @@ object AutoCommitTextFieldTableCell { } def selectPrevEditable[T](tableView: TableView[T]): () => Unit = { - val editableColumns = getEditableColums(tableView) tableView.selectionModel.value.selectedCells.headOption match { case Some(selected) => + val editableColumns = getEditableColums(tableView, selected.row) val remaining = editableColumns.reverse.dropWhile(_ != selected.tableColumn) val newSelectedRowIdx = if (selected.getRow == 0) tableView.items.value.size() - 1 else selected.getRow - 1 val ret = () => { @@ -146,11 +156,11 @@ object AutoCommitTextFieldTableCell { } def selectBelowEditable[T](tableView: TableView[T]): () => Unit = { - val editableColumns = getEditableColums(tableView) tableView.selectionModel.value.selectedCells.headOption match { case Some(selected) => - val remaining = if (selected.tableColumn.isEditable) editableColumns.dropWhile(_ != selected.tableColumn) else editableColumns val newSelectedRowIdx = if (selected.getRow == tableView.items.value.size() - 1) 0 else selected.getRow + 1 + val editableColumns = getEditableColums(tableView, newSelectedRowIdx) + val remaining = if (selected.tableColumn.isEditable) editableColumns.dropWhile(_ != selected.tableColumn) else editableColumns val movedDown = selected.getRow < newSelectedRowIdx val ret = () => { if (remaining.size == 1) { @@ -176,12 +186,11 @@ object AutoCommitTextFieldTableCell { } def selectAboveEditable[T](tableView: TableView[T]): () => Unit = { - val editableColumns = getEditableColums(tableView) tableView.selectionModel.value.selectedCells.headOption match { case Some(selected) => - - val remaining = if (selected.tableColumn.isEditable) editableColumns.reverse.dropWhile(_ != selected.tableColumn) else editableColumns val newSelectedRowIdx = if (selected.getRow == 0) tableView.items.value.size() - 1 else selected.getRow - 1 + val editableColumns = getEditableColums(tableView, newSelectedRowIdx) + val remaining = if (selected.tableColumn.isEditable) editableColumns.reverse.dropWhile(_ != selected.tableColumn) else editableColumns val movedUp = selected.getRow > newSelectedRowIdx val ret = () => { if (remaining.size == 1) { From 8125e23399df5a683aba5433aa5c70c4a29b7a5f Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Mon, 3 Apr 2023 00:10:19 +0200 Subject: [PATCH 14/99] #660 Fix key-navigation - restyle non-editable cells --- src/main/resources/css/Main.css | 8 +++++ .../AutoCommitTextFieldTableCell.scala | 29 +++++++++++++------ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/main/resources/css/Main.css b/src/main/resources/css/Main.css index 58e802e75..5cba5bd11 100644 --- a/src/main/resources/css/Main.css +++ b/src/main/resources/css/Main.css @@ -542,6 +542,14 @@ -fx-text-fill: #0072aa; } +.readonly-cell:selected { + //-fx-background-color: #F5AD11; + -fx-background-image: url("../images/OrangeWarning.png"); + -fx-background-repeat: no-repeat; + -fx-background-position: left top; + -fx-text-fill: white; +} + /* Category Page Styles */ .category-page { -fx-background: #333333; diff --git a/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala b/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala index 5b5dc30d3..d28449eee 100644 --- a/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala +++ b/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala @@ -6,6 +6,7 @@ import javafx.{css => jfxcss} import scalafx.Includes._ import scalafx.application.Platform import scalafx.beans.property.BooleanProperty +import scalafx.beans.property.BooleanProperty.sfxBooleanProperty2jfx import scalafx.beans.value.ObservableValue import scalafx.collections.ObservableSet.{Change, Remove} import scalafx.collections.{ObservableBuffer, ObservableSet} @@ -335,25 +336,35 @@ class AutoCommitTextFieldTableCell[S, T]( } var textField: Option[TextField] = None + val readonlyCellClass = "readonly-cell" - index.onChange({ - cellStateUpdater(this) + editable.onChange( adjustEditablStateInStyles() ) + index.onChange( cellStateUpdater(this) ) + selected.onChange(cellStateUpdater(this)) + private def adjustEditablStateInStyles(): Unit = { if (editable.value) { - style = "" + styleClass.delegate.remove(readonlyCellClass) } else { - style = "-fx-background-color: transparent, #FAFAAA ;" + styleClass.delegate.add(readonlyCellClass) } - }) + } + graphic.onChange({ textField = graphic.value match { - case field: TextField => Some(field) + case field: TextField => + Some(field) case _ => None } (textField, AutoCommitTextFieldTableCell.lastKey) match { case (Some(tf), Some(text)) => tf.setText(text) Platform.runLater(() => { - tf.deselect() - tf.end() + if (editable.value) { + tf.editable = true + tf.deselect() + tf.end() + } else { + tf.editable = false + } }) case _ => } @@ -361,7 +372,7 @@ class AutoCommitTextFieldTableCell[S, T]( editing.onChange(handleEditingState) def handleEditingState: Unit = { - if (editing.value) { + if (editing.value && editable.value) { connect } } From 2120d2ce0f4229247e47a377ff516ce5decbc888 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 29 Mar 2023 23:39:58 +0200 Subject: [PATCH 15/99] prepare minor version upgrade to 2.3 --- pom.xml | 2 +- src/main/resources/application.conf | 2 +- .../ch/seidel/kutu/domain/DBService.scala | 28 ++++++------------- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/pom.xml b/pom.xml index 7c72d2176..9ea53ce56 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 ch.seidel KuTu - 2.2.23 + 2.3.0 2014 diff --git a/src/main/resources/application.conf b/src/main/resources/application.conf index c96f5421f..2792d5252 100644 --- a/src/main/resources/application.conf +++ b/src/main/resources/application.conf @@ -139,7 +139,7 @@ app { fullversion = "${app.version}" majorversion = "${app.majorminor.version}" builddate = "${buildDate}" - import.data.fromversion = "2.1" + import.data.fromversion = "2.2" smtpsender { appname = "KuTu App" appname = ""${?X_SMTP_SENDERAPPNAME}"" diff --git a/src/main/scala/ch/seidel/kutu/domain/DBService.scala b/src/main/scala/ch/seidel/kutu/domain/DBService.scala index 169a3b96c..aa95adc3b 100644 --- a/src/main/scala/ch/seidel/kutu/domain/DBService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/DBService.scala @@ -88,7 +88,7 @@ object DBService { (!dbfile.exists() || dbfile.length() == 0, Config.importDataFrom) match { case (true, Some(version)) => - migrateFrom(createDS, sqlScripts, version) + migrateFrom(createDS, version) case (true, _) => dbfile.createNewFile() case _ => // nothing to do @@ -114,12 +114,18 @@ object DBService { dbfile.renameTo(backupFile) dbfile.createNewFile() db = createDS(dbfile.getAbsolutePath) + val session = db.createSession() + try { + NewUUID.install(session.conn.unwrap(classOf[SQLiteConnection])) + } finally { + session.close() + } installDB(db, sqlScripts) } db } - private def migrateFrom(dsCreate: String => JdbcBackend.DatabaseDef, initialPreloadedSqlScripts: List[String], version: String): Unit = { + private def migrateFrom(dsCreate: String => JdbcBackend.DatabaseDef, version: String): Unit = { val preversion = new File(dbhomedir + "/" + buildFilename(version)) if (preversion.exists()) { logger.info(s"Migrating Database from ${preversion.getAbsolutePath}") @@ -128,24 +134,6 @@ object DBService { val db = dsCreate(dbfile.getAbsolutePath) try { logger.info(s"applying migration scripts to ${dbfile.getAbsolutePath}") - migrateFromPreviousVersion(db) - List("kutu-sqllite-ddl.sql" - , "SetJournalWAL.sql" - , "kutu-initialdata.sql").foreach(script => { - logger.info(s"registering script ${script} to ${dbfile.getAbsolutePath}") - migrationDone(db, script, "from migration") - }) - val sqlScripts = List( - "AddTimeTable-sqllite.sql" - , "InitTimeTable.sql" - , "AddDurchgangTable-sqllite.sql" - , "InitDurchgangTable.sql" - , "FixEmptyRiegeTimeTableIssue-sqllite.sql" - , "AddAnmeldungTables-sqllite.sql" - , "AddAnmeldungTables-u2-sqllite.sql" - , "AddWKDisziplinMetafields-sqllite.sql" - ) - installDB(db, sqlScripts) } finally { db.close() } From 096c65c06f87d53ea9351a339625a5cc21e12137 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 29 Mar 2023 00:06:03 +0200 Subject: [PATCH 16/99] #659 Introduce Altersklassen (hardcoded) --- src/main/scala/ch/seidel/kutu/KuTuApp.scala | 17 +- .../scala/ch/seidel/kutu/data/GroupBy.scala | 22 ++- .../scala/ch/seidel/kutu/domain/package.scala | 156 +++++++++++++----- .../kutu/view/DefaultRanglisteTab.scala | 2 +- .../ch/seidel/kutu/view/RanglisteTab.scala | 6 +- 5 files changed, 147 insertions(+), 56 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index 71d14367e..013e8c9f9 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -257,15 +257,11 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport promptText = "Wettkampf-Titel" text = p.titel } - val cmbProgramm = new ComboBox(ObservableBuffer.from(listRootProgramme())) { + val pgms = ObservableBuffer.from(listRootProgramme().sorted) + val cmbProgramm = new ComboBox(pgms) { prefWidth = 500 buttonCell = new ProgrammListCell cellFactory.value = {_:Any => new ProgrammListCell} - /*cellFactory = new Callback[ListView[ProgrammView], ListCell[ProgrammView]]() { - def call(p: ListView[ProgrammView]): ListCell[ProgrammView] = { - new ProgrammListCell - } - }*/ promptText = "Programm" selectionModel.value.select(p.programm) } @@ -1063,16 +1059,11 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport prefWidth = 500 promptText = "Wettkampf-Titel" } - val cmbProgramm = new ComboBox(ObservableBuffer.from(listRootProgramme())) { + val pgms = ObservableBuffer.from(listRootProgramme().sorted) + val cmbProgramm = new ComboBox(pgms) { prefWidth = 500 buttonCell = new ProgrammListCell cellFactory.value = {_:Any => new ProgrammListCell} - /*cellFactory = new Callback[ListView[ProgrammView], ListCell[ProgrammView]]() { - def call(p: ListView[ProgrammView]): ListCell[ProgrammView] = { - new ProgrammListCell - } - }*/ - promptText = "Programm" } val txtNotificationEMail = new TextField { diff --git a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala index 4f838bf2c..5da2cbdc0 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala @@ -1,10 +1,10 @@ package ch.seidel.kutu.data -import java.net.{URLDecoder, URLEncoder} -import java.text.SimpleDateFormat - import ch.seidel.kutu.domain._ +import java.net.URLDecoder +import java.text.SimpleDateFormat +import java.time.{LocalDate, Period} import scala.collection.mutable import scala.math.BigDecimal.int2bigDecimal @@ -321,6 +321,22 @@ case class ByJahrgang() extends GroupBy with FilterBy { }) } +case class ByAltersklasse(grenzen: Seq[Int]) extends GroupBy with FilterBy { + override val groupname = "Altersklasse" + val klassen = Altersklasse(grenzen) + + protected override val grouper = (v: WertungView) => { + val wkd: LocalDate = v.wettkampf.datum + val gebd: LocalDate = v.athlet.gebdat.get + val alter = Period.between(gebd, wkd.plusDays(1)).getYears + Altersklasse(klassen, alter) + } + + protected override val sorter: Option[(GroupSection, GroupSection) => Boolean] = Some((gs1: GroupSection, gs2: GroupSection) => { + gs1.groupKey.asInstanceOf[Altersklasse].compareTo(gs2.groupKey.asInstanceOf[Altersklasse]) < 0 + }) +} + case class ByDisziplin() extends GroupBy with FilterBy { override val groupname = "Disziplin" private val ordering = mutable.HashMap[Long, Long]() diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index d992e06a2..aee20d0db 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -168,12 +168,12 @@ package object domain { def encodeFileName(name: String): String = { val forbiddenChars = List( - '/', '<', '>', ':', '"', '|', '?', '*', ' ' + '/', '<', '>', ':', '"', '|', '?', '*', ' ' ) :+ (0 to 32) val forbiddenNames = List( - "CON", "PRN", "AUX", "NUL", - "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", - "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9" + "CON", "PRN", "AUX", "NUL", + "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", + "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9" ) if (forbiddenNames.contains(name.toUpperCase())) "_" + name + "_" @@ -181,13 +181,14 @@ package object domain { name.map(c => if (forbiddenChars.contains(c)) '_' else c) } - trait DataObject { + trait DataObject extends Ordered[DataObject] { def easyprint: String = toString def capsulatedprint: String = { val ep = easyprint if (ep.matches(".*\\s,\\.;.*")) s""""$ep"""" else ep } + def compare(o: DataObject): Int = easyprint.compare(o.easyprint) } case class NullObject(caption: String) extends DataObject { @@ -222,7 +223,9 @@ package object domain { case class Verein(id: Long, name: String, verband: Option[String]) extends DataObject { override def easyprint = name + def extendedprint = s"$name ${verband.getOrElse("")}" + override def toString = name } @@ -250,6 +253,7 @@ package object domain { case Some(d) => f"$d%tY " case _ => "" }) + def extendedprint: String = "" + (geschlecht match { case "W" => s"Ti ${name + " " + vorname}" case _ => s"Tu ${name + " " + vorname}" @@ -261,10 +265,11 @@ package object domain { def toPublicView: Athlet = { Athlet(id, 0, geschlecht, name, vorname, gebdat .map(d => sqlDate2ld(d)) - .map(ld => LocalDate.of(ld.getYear, 1,1)) + .map(ld => LocalDate.of(ld.getYear, 1, 1)) .map(ld => ld2SQLDate(ld)) , "", "", "", verein, activ) } + def toAthletView(verein: Option[Verein]): AthletView = AthletView( id, js_id, geschlecht, name, vorname, gebdat, @@ -280,7 +285,8 @@ package object domain { case Some(v) => v.easyprint; case _ => "" }) - def extendedprint: String = "" + (geschlecht match { + + def extendedprint: String = "" + (geschlecht match { case "W" => s"Ti ${name + " " + vorname}" case _ => s"Tu ${name + " " + vorname}" }) + (gebdat match { @@ -290,14 +296,17 @@ package object domain { case Some(v) => v.easyprint; case _ => "" }) + def toPublicView: AthletView = { AthletView(id, 0, geschlecht, name, vorname, gebdat .map(d => sqlDate2ld(d)) - .map(ld => LocalDate.of(ld.getYear, 1,1)) + .map(ld => LocalDate.of(ld.getYear, 1, 1)) .map(ld => ld2SQLDate(ld)) , "", "", "", verein, activ) } + def toAthlet = Athlet(id, js_id, geschlecht, name, vorname, gebdat, strasse, plz, ort, verein.map(_.id), activ) + def withBestMatchingGebDat(importedGebDat: Option[Date]) = { copy(gebdat = importedGebDat match { case Some(d) => @@ -308,7 +317,8 @@ package object domain { case _ => gebdat }) } - def updatedWith(athlet: Athlet) = AthletView(athlet.id, athlet.js_id, athlet.geschlecht, athlet.name, athlet.vorname, athlet.gebdat, athlet.strasse, athlet.plz, athlet.ort, verein.map(v => v.copy(id=athlet.verein.getOrElse(0L))), athlet.activ) + + def updatedWith(athlet: Athlet) = AthletView(athlet.id, athlet.js_id, athlet.geschlecht, athlet.name, athlet.vorname, athlet.gebdat, athlet.strasse, athlet.plz, athlet.ort, verein.map(v => v.copy(id = athlet.verein.getOrElse(0L))), athlet.activ) } object Wertungsrichter { @@ -399,6 +409,40 @@ package object domain { override def easyprint = "Jahrgang " + jahrgang } + object Altersklasse { + + def apply(altersgrenzen: Seq[Int]): Seq[Altersklasse] = + altersgrenzen.foldLeft(Seq[Altersklasse]()) { (acc, ag) => + acc :+ Altersklasse(acc.lastOption.map(_.alterBis + 1).getOrElse(0), ag - 1) + } :+ Altersklasse(altersgrenzen.last, 0) + + def apply(klassen: Seq[Altersklasse], alter: Int): Altersklasse = { + klassen.find(_.matchesAlter(alter)).getOrElse(Altersklasse(alter, alter)) + } + } + + case class Altersklasse(alterVon: Int, alterBis: Int) extends DataObject { + def matchesAlter(alter: Int): Boolean = + ((alterVon == 0 || alter >= alterVon) && + (alterBis == 0 || alter <= alterBis)) + + override def easyprint: String = { + if (alterVon > 0 && alterBis > 0) + if (alterVon == alterBis) + s"Altersklasse $alterVon" + else s"Altersklasse $alterVon bis $alterBis" + else if (alterVon > 0 && alterBis == 0) + s"Altersklasse ab $alterVon" + else + s"Altersklasse bis $alterBis" + } + + override def compare(x: DataObject): Int = x match { + case ak: Altersklasse => alterVon.compareTo(ak.alterVon) + case _ => x.easyprint.compareTo(easyprint) + } + } + case class WettkampfJahr(wettkampfjahr: String) extends DataObject { override def easyprint = "Wettkampf-Jahr " + wettkampfjahr } @@ -431,20 +475,20 @@ package object domain { /** * * Krits +-------------------------------------------+--------------------------------------------------------- - * aggregate ->|0 |1 - * +-------------------------------------------+--------------------------------------------------------- - * riegenmode->|1 |2 |1 |2 + * aggregate ->|0 |1 + * +-------------------------------------------+--------------------------------------------------------- + * riegenmode->|1 |2 |1 |2 * Acts +===========================================+========================================================= - * Einteilung->| Pgm,Sex,Verein | Pgm,Sex,Jg,Verein | Pgm,Sex,Verein | Pgm,Sex,Jg,Verein - * +--------------------+----------------------+----------------------+---------------------------------- - * Teilnahme | 1/WK | 1/WK | <=PgmCnt(Jg)/WK | 1/Pgm - * +-------------------------------------------+--------------------------------------------------------- - * Registration| 1/WK | 1/WK, Pgm/(Jg) | 1/WK aut. Tn 1/Pgm | 1/WK aut. Tn 1/Pgm - * +-------------------------------------------+--------------------------------------------------------- - * Beispiele | GeTu/KuTu/KuTuRi | Turn10 (BS/OS) | TG Allgäu (Pfl./Kür) | ATT (Kraft/Bewg) - * +-------------------------------------------+--------------------------------------------------------- - * Rangliste | Sex/Programm | Sex/Programm/Jg | Sex/Programm | Sex/Programm/Jg - * +-------------------------------------------+--------------------------------------------------------- + * Einteilung->| Pgm,Sex,Verein | Pgm,Sex,Jg,Verein | Pgm,Sex,Verein | Pgm,Sex,Jg,Verein + * +--------------------+----------------------+----------------------+---------------------------------- + * Teilnahme | 1/WK | 1/WK | <=PgmCnt(Jg)/WK | 1/Pgm + * +-------------------------------------------+--------------------------------------------------------- + * Registration| 1/WK | 1/WK, Pgm/(Jg) | 1/WK aut. Tn 1/Pgm | 1/WK aut. Tn 1/Pgm + * +-------------------------------------------+--------------------------------------------------------- + * Beispiele | GeTu/KuTu/KuTuRi | Turn10 (BS/OS) | TG Allgäu (Pfl./Kür) | ATT (Kraft/Bewg) + * +-------------------------------------------+--------------------------------------------------------- + * Rangliste | Sex/Programm | Sex/Programm/Jg | Sex/Programm | Sex/Programm/Jg + * +-------------------------------------------+--------------------------------------------------------- */ case class ProgrammRaw(id: Long, name: String, aggregate: Int, parentId: Long, ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode: Int) extends Programm @@ -455,14 +499,17 @@ package object domain { case None => this case Some(p) => p.head } + def subHead: Option[ProgrammView] = parent match { case None => None case Some(p) => if (p.parent.nonEmpty) p.subHead else parent } + def programPath: Seq[ProgrammView] = parent match { case None => Seq(this) case Some(p) => p.programPath :+ this } + def wettkampfprogramm: ProgrammView = if (aggregator == this) this else head def aggregatorHead: ProgrammView = parent match { @@ -474,6 +521,7 @@ package object domain { case Some(p) if (p.parent.nonEmpty && aggregate != 0) => p case _ => aggregatorHead } + def aggregatorParent: ProgrammView = parent match { case Some(p) if (aggregate != 0) => p.parent.getOrElse(this) case _ => this @@ -497,6 +545,8 @@ package object domain { case Some(p) => p.toPath + " / " + name } + override def compare(o: DataObject): Int = toPath.compareTo(o.asInstanceOf[ProgrammView].toPath) + override def toString = s"$toPath (von=$alterVon, bis=$alterBis)" } @@ -634,7 +684,9 @@ package object domain { case class WettkampfdisziplinView(id: Long, programm: ProgrammView, disziplin: Disziplin, kurzbeschreibung: String, detailbeschreibung: Option[Array[Byte]], notenSpez: NotenModus, masculin: Int, feminim: Int, ord: Int, scale: Int, dnote: Int, min: Int, max: Int, startgeraet: Int) extends DataObject { override def easyprint = disziplin.name + val isDNoteUsed = dnote != 0 + def verifiedAndCalculatedWertung(wertung: Wertung): Wertung = { if (wertung.noteE.isEmpty) { wertung.copy(noteD = None, noteE = None, endnote = None) @@ -810,9 +862,11 @@ package object domain { case class Kandidat(wettkampfTitel: String, geschlecht: String, programm: String, id: Long, name: String, vorname: String, jahrgang: String, verein: String, einteilung: Option[Riege], einteilung2: Option[Riege], diszipline: Seq[Disziplin], diszipline2: Seq[Disziplin], wertungen: Seq[WertungView]) { def matches(w1: Wertung, w2: WertungView): Boolean = { - w2.wettkampfdisziplin.id == w1.wettkampfdisziplinId && w2.athlet.id == w1.athletId + w2.wettkampfdisziplin.id == w1.wettkampfdisziplinId && w2.athlet.id == w1.athletId } + def indexOf(wertung: Wertung): Int = wertungen.indexWhere(w => matches(wertung, w)) + def updated(idx: Int, wertung: Wertung): Kandidat = { if (idx > -1 && matches(wertung, wertungen(idx))) copy(wertungen = wertungen.updated(idx, wertungen(idx).updatedWertung(wertung))) @@ -826,11 +880,12 @@ package object domain { durchgang, halt, disziplin).hashCode() } + def updated(wertung: Wertung): GeraeteRiege = { - kandidaten.foldLeft((false, Seq[Kandidat]()))((acc,kandidat) => { + kandidaten.foldLeft((false, Seq[Kandidat]()))((acc, kandidat) => { if (acc._1) (acc._1, acc._2 :+ kandidat) else { val idx = kandidat.indexOf(wertung) - if(idx > -1) + if (idx > -1) (true, acc._2 :+ kandidat.updated(idx, wertung)) else (acc._1, acc._2 :+ kandidat) } @@ -873,10 +928,12 @@ package object domain { val caption: String val verein: Registration } + object PublicSyncAction { /** * Hides some attributes to protect privacy. * The product is only and only used by the web-client showing sync-states with some summary-infos + * * @param syncation * @return transformed SyncAction toPublicView applied */ @@ -890,23 +947,31 @@ package object domain { case RemoveRegistration(verein, programId, athlet, suggestion) => RemoveRegistration(verein.toPublicView, programId, athlet.toPublicView, suggestion.toPublicView) } } + case class AddVereinAction(override val verein: Registration) extends SyncAction { override val caption = s"Verein hinzufügen: ${verein.vereinname}" } + case class RenameVereinAction(override val verein: Registration, oldVerein: Verein) extends SyncAction { override val caption = s"Verein korrigieren: ${oldVerein.easyprint} zu ${verein.toVerein.easyprint}" + def prepareLocalUpdate: Verein = verein.toVerein.copy(id = oldVerein.id) + def prepareRemoteUpdate: Option[Verein] = verein.selectedInitialClub.map(club => verein.toVerein.copy(id = club.id)) } + case class ApproveVereinAction(override val verein: Registration) extends SyncAction { override val caption = s"Verein bestätigen: ${verein.vereinname}" } + case class AddRegistration(override val verein: Registration, programId: Long, athlet: Athlet, suggestion: AthletView) extends SyncAction { override val caption = s"Neue Anmeldung verarbeiten: ${suggestion.easyprint}" } + case class MoveRegistration(override val verein: Registration, fromProgramId: Long, toProgramid: Long, athlet: Athlet, suggestion: AthletView) extends SyncAction { override val caption = s"Umteilung verarbeiten: ${suggestion.easyprint}" } + case class RemoveRegistration(override val verein: Registration, programId: Long, athlet: Athlet, suggestion: AthletView) extends SyncAction { override val caption = s"Abmeldung verarbeiten: ${suggestion.easyprint}" } @@ -917,10 +982,13 @@ package object domain { case class Registration(id: Long, wettkampfId: Long, vereinId: Option[Long], vereinname: String, verband: String, respName: String, respVorname: String, mobilephone: String, mail: String, registrationTime: Long, selectedInitialClub: Option[Verein] = None) extends DataObject { def toVerein: Verein = Verein(0L, vereinname, Some(verband)) + def toPublicView: Registration = Registration(id, wettkampfId, vereinId, vereinname, verband, respName, respVorname, "***", "***", registrationTime) + def matchesVerein(v: Verein): Boolean = { (v.name.equals(vereinname) && (v.verband.isEmpty || v.verband.get.equals(verband))) || selectedInitialClub.map(_.extendedprint).contains(v.extendedprint) } + def matchesClubRelation(): Boolean = { selectedInitialClub.nonEmpty && selectedInitialClub.exists(v => (v.name.equals(vereinname) && (v.verband.isEmpty || v.verband.get.equals(verband)))) } @@ -957,17 +1025,18 @@ package object domain { case class AthletRegistration(id: Long, vereinregistrationId: Long, athletId: Option[Long], geschlecht: String, name: String, vorname: String, gebdat: String, programId: Long, registrationTime: Long, athlet: Option[AthletView]) extends DataObject { - def toPublicView = AthletRegistration(id, vereinregistrationId, athletId, geschlecht, name, vorname, gebdat.substring(0,4) + "-01-01", programId, registrationTime, athlet.map(_.toPublicView)) + def toPublicView = AthletRegistration(id, vereinregistrationId, athletId, geschlecht, name, vorname, gebdat.substring(0, 4) + "-01-01", programId, registrationTime, athlet.map(_.toPublicView)) + def capitalizeIfBlockCase(s: String): String = { if (s.length > 2 && (s.toUpperCase.equals(s) || s.toLowerCase.equals(s))) { - s.substring(0,1).toUpperCase + s.substring(1).toLowerCase + s.substring(0, 1).toUpperCase + s.substring(1).toLowerCase } else { s } } def toAthlet: Athlet = { - if(id == 0 && athletId == None) { + if (id == 0 && athletId == None) { val nameNorm = capitalizeIfBlockCase(name.trim) val vornameNorm = capitalizeIfBlockCase(vorname.trim) val nameMasculinTest = Surname.isMasculin(nameNorm) @@ -981,9 +1050,9 @@ package object domain { val masculin = nameMasculinTest || vornameMasculinTest val defGeschlecht = geschlecht match { case "M" => - if(feminim && !masculin) "W" else "M" + if (feminim && !masculin) "W" else "M" case "W" => - if(masculin && !feminim) "M" else "W" + if (masculin && !feminim) "M" else "W" case s: String => "M" } val currentDate = LocalDate.now() @@ -992,7 +1061,10 @@ package object domain { val age = Period.between(gebDatLocal, currentDate).getYears if (age > 0 && age < 120) { Athlet( - id = athletId match{case Some(id) => id case None => 0}, + id = athletId match { + case Some(id) => id + case None => 0 + }, js_id = "", geschlecht = defGeschlecht, name = defName, @@ -1015,7 +1087,10 @@ package object domain { val age = Period.between(gebDatLocal, currentDate).getYears if (age > 0 && age < 120) { Athlet( - id = athletId match{case Some(id) => id case None => 0}, + id = athletId match { + case Some(id) => id + case None => 0 + }, js_id = "", geschlecht = geschlecht, name = name.trim, @@ -1032,13 +1107,16 @@ package object domain { } } } + def isEmptyRegistration: Boolean = geschlecht.isEmpty + def isLocalIdentified: Boolean = { athletId match { case Some(id) if id > 0L => true case _ => false } } + def matchesAthlet(v: Athlet): Boolean = { val bool = toAthlet.extendedprint.equals(v.extendedprint) /*if(!bool) { @@ -1046,6 +1124,7 @@ package object domain { }*/ bool } + def matchesAthlet(): Boolean = { val bool = athlet.nonEmpty && athlet.map(_.toAthlet).exists(matchesAthlet) /*if(!bool) { @@ -1060,9 +1139,9 @@ package object domain { } case class JudgeRegistration(id: Long, vereinregistrationId: Long, - geschlecht: String, name: String, vorname: String, - mobilephone: String, mail: String, comment: String, - registrationTime: Long) extends DataObject { + geschlecht: String, name: String, vorname: String, + mobilephone: String, mail: String, comment: String, + registrationTime: Long) extends DataObject { def validate(): Unit = { if (name == null || name.trim.isEmpty) throw new IllegalArgumentException("JudgeRegistration with empty name") if (vorname == null || vorname.trim.isEmpty) throw new IllegalArgumentException("JudgeRegistration with empty vorname") @@ -1085,13 +1164,14 @@ package object domain { val masculin = nameMasculinTest || vornameMasculinTest val defGeschlecht = geschlecht match { case "M" => - if(feminim && !masculin) "W" else "M" + if (feminim && !masculin) "W" else "M" case "W" => - if(masculin && !feminim) "M" else "W" + if (masculin && !feminim) "M" else "W" case s: String => "M" } JudgeRegistration(id, vereinregistrationId, defGeschlecht, defName, defVorName, mobilephone, mail, comment, registrationTime) } + def toWertungsrichter: Wertungsrichter = { val nj = normalized Wertungsrichter( @@ -1108,6 +1188,7 @@ package object domain { activ = true ) } + def isEmptyRegistration = geschlecht.isEmpty } @@ -1116,5 +1197,6 @@ package object domain { } case class JudgeRegistrationProgram(id: Long, judgeregistrationId: Long, vereinregistrationId: Long, program: Long, comment: String) + case class JudgeRegistrationProgramItem(program: String, disziplin: String, disziplinId: Long) } \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala index d56333e21..c71e4fc88 100644 --- a/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala @@ -236,7 +236,7 @@ abstract class DefaultRanglisteTab(wettkampfmode: BooleanProperty, override val combf.getCheckModel.clearChecks() model.retainAll(expected) model.insertAll(model.size, expected.filter(!model.contains(_))) - model.sort{ (a, b) => a.easyprint.compareTo(b.easyprint) < 0} + model.sort{ (a, b) => a.compareTo(b) < 0} checked.filter(model.contains(_)).foreach(combf.getCheckModel.check(_)) } diff --git a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala index d447199a5..ef2e415df 100644 --- a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala @@ -25,14 +25,16 @@ class RanglisteTab(wettkampfmode: BooleanProperty, wettkampf: WettkampfView, ove case 20 => "Kategorie" case _ => "Programm" } - + val altersklassen = Seq( + 6,7,8,9,10,11,12,13,14,15,16,17,18,24,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 + ) def riegenZuDurchgang: Map[String, Durchgang] = { val riegen = service.listRiegenZuWettkampf(wettkampf.id) riegen.map(riege => riege._1 -> riege._3.map(durchgangName => Durchgang(0, durchgangName)).getOrElse(Durchgang())).toMap } override def groupers: List[FilterBy] = { - List(ByNothing(), ByWettkampfProgramm(programmText), ByProgramm(programmText), ByJahrgang(), ByGeschlecht(), ByVerband(), ByVerein(), ByDurchgang(riegenZuDurchgang), ByRiege(), ByDisziplin()) + List(ByNothing(), ByWettkampfProgramm(programmText), ByProgramm(programmText), ByJahrgang(), ByAltersklasse(altersklassen), ByGeschlecht(), ByVerband(), ByVerein(), ByDurchgang(riegenZuDurchgang), ByRiege(), ByDisziplin()) } override def getData: Seq[WertungView] = service.selectWertungen(wettkampfId = Some(wettkampf.id)) From a814368f02911631d557c06f7d90783b9ecf32af Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Mon, 3 Apr 2023 00:11:53 +0200 Subject: [PATCH 17/99] #659 Enhance Altersklassen-logic - Differentiate between jahrgang-age and birthsdate-age on competition-date - Default with DTB-Staffelung and Turn10-Staffelung --- .../scala/ch/seidel/kutu/data/GroupBy.scala | 20 +++++++++++++++++-- .../scala/ch/seidel/kutu/domain/package.scala | 7 +++++++ .../ch/seidel/kutu/http/ScoreRoutes.scala | 8 +++++--- .../ch/seidel/kutu/view/RanglisteTab.scala | 11 +++++----- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala index 5da2cbdc0..e5098ab1a 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala @@ -321,8 +321,8 @@ case class ByJahrgang() extends GroupBy with FilterBy { }) } -case class ByAltersklasse(grenzen: Seq[Int]) extends GroupBy with FilterBy { - override val groupname = "Altersklasse" +case class ByAltersklasse(bezeichnung: String = "GebDat Altersklasse", grenzen: Seq[Int]) extends GroupBy with FilterBy { + override val groupname = bezeichnung val klassen = Altersklasse(grenzen) protected override val grouper = (v: WertungView) => { @@ -337,6 +337,22 @@ case class ByAltersklasse(grenzen: Seq[Int]) extends GroupBy with FilterBy { }) } +case class ByJahrgangsAltersklasse(bezeichnung: String = "JG Altersklasse", grenzen: Seq[Int]) extends GroupBy with FilterBy { + override val groupname = bezeichnung + val klassen = Altersklasse(grenzen) + + protected override val grouper = (v: WertungView) => { + val wkd: LocalDate = v.wettkampf.datum + val gebd: LocalDate = v.athlet.gebdat.get + val alter = wkd.getYear - gebd.getYear + Altersklasse(klassen, alter) + } + + protected override val sorter: Option[(GroupSection, GroupSection) => Boolean] = Some((gs1: GroupSection, gs2: GroupSection) => { + gs1.groupKey.asInstanceOf[Altersklasse].compareTo(gs2.groupKey.asInstanceOf[Altersklasse]) < 0 + }) +} + case class ByDisziplin() extends GroupBy with FilterBy { override val groupname = "Disziplin" private val ordering = mutable.HashMap[Long, Long]() diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index aee20d0db..d39167b61 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -411,6 +411,13 @@ package object domain { object Altersklasse { + val altersklassenTurn10 = Seq( + 6,7,8,9,10,11,12,13,14,15,16,17,18,24,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 + ) + val altersklassenDTB = Seq( + 6,18,22,25 + ) + def apply(altersgrenzen: Seq[Int]): Seq[Altersklasse] = altersgrenzen.foldLeft(Seq[Altersklasse]()) { (acc, ag) => acc :+ Altersklasse(acc.lastOption.map(_.alterBis + 1).getOrElse(0), ag - 1) diff --git a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala index caa07f4af..994b605dd 100644 --- a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala @@ -12,7 +12,7 @@ import ch.seidel.kutu.Config import ch.seidel.kutu.KuTuServer.handleCID import ch.seidel.kutu.akka.{CompetitionCoordinatorClientActor, MessageAck, ResponseMessage, StartedDurchgaenge} import ch.seidel.kutu.data._ -import ch.seidel.kutu.domain.{Durchgang, Kandidat, KutuService, NullObject, PublishedScoreView, WertungView, encodeFileName, encodeURIParam} +import ch.seidel.kutu.domain.{Altersklasse, Durchgang, Kandidat, KutuService, NullObject, PublishedScoreView, WertungView, encodeFileName, encodeURIParam} import ch.seidel.kutu.renderer.{PrintUtil, ScoreToHtmlRenderer, ScoreToJsonRenderer} import ch.seidel.kutu.renderer.PrintUtil._ @@ -32,7 +32,8 @@ ScoreRoutes extends SprayJsonSupport with JsonSupport with AuthSupport with Rout val allGroupers = List( ByWettkampfProgramm(), ByProgramm(), ByWettkampf(), - ByJahrgang(), ByGeschlecht(), ByVerband(), ByVerein(), ByAthlet(), + ByJahrgang(), ByJahrgangsAltersklasse("Turn10 Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), + ByGeschlecht(), ByVerband(), ByVerein(), ByAthlet(), ByRiege(), ByDisziplin(), ByJahr() ) @@ -155,7 +156,8 @@ ScoreRoutes extends SprayJsonSupport with JsonSupport with AuthSupport with Rout val byDurchgangMat = ByDurchgang(riegenZuDurchgang) val groupers: List[FilterBy] = { List(ByWettkampfProgramm(programmText), ByProgramm(programmText), - ByJahrgang(), ByGeschlecht(), ByVerband(), ByVerein(), byDurchgangMat, + ByJahrgang(), ByJahrgangsAltersklasse("Turn10 Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), + ByGeschlecht(), ByVerband(), ByVerein(), byDurchgangMat, ByRiege(), ByDisziplin(), ByJahr()) } val logoHtml = if (logofile.exists()) s"""""" else "" diff --git a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala index ef2e415df..f98e5343e 100644 --- a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala @@ -6,7 +6,7 @@ import ch.seidel.kutu.Config._ import ch.seidel.kutu.ConnectionStates import ch.seidel.kutu.KuTuApp.handleAction import ch.seidel.kutu.data._ -import ch.seidel.kutu.domain.{Durchgang, KutuService, WertungView, WettkampfView, encodeFileName} +import ch.seidel.kutu.domain.{Altersklasse, Durchgang, KutuService, WertungView, WettkampfView, encodeFileName} import ch.seidel.kutu.renderer.PrintUtil.FilenameDefault import scalafx.Includes.when import scalafx.beans.binding.Bindings @@ -25,16 +25,17 @@ class RanglisteTab(wettkampfmode: BooleanProperty, wettkampf: WettkampfView, ove case 20 => "Kategorie" case _ => "Programm" } - val altersklassen = Seq( - 6,7,8,9,10,11,12,13,14,15,16,17,18,24,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 - ) def riegenZuDurchgang: Map[String, Durchgang] = { val riegen = service.listRiegenZuWettkampf(wettkampf.id) riegen.map(riege => riege._1 -> riege._3.map(durchgangName => Durchgang(0, durchgangName)).getOrElse(Durchgang())).toMap } override def groupers: List[FilterBy] = { - List(ByNothing(), ByWettkampfProgramm(programmText), ByProgramm(programmText), ByJahrgang(), ByAltersklasse(altersklassen), ByGeschlecht(), ByVerband(), ByVerein(), ByDurchgang(riegenZuDurchgang), ByRiege(), ByDisziplin()) + List(ByNothing(), ByWettkampfProgramm(programmText), ByProgramm(programmText), + ByJahrgang(), ByJahrgangsAltersklasse("Turn10 Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), + ByGeschlecht(), + ByVerband(), ByVerein(), + ByDurchgang(riegenZuDurchgang), ByRiege(), ByDisziplin()) } override def getData: Seq[WertungView] = service.selectWertungen(wettkampfId = Some(wettkampf.id)) From 03cd105114cad4bd7957a5362d6da93771a0f6b7 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 29 Mar 2023 23:18:50 +0200 Subject: [PATCH 18/99] Fix online-registration support for new programs --- .../resultcatcher/src/app/backend-types.ts | 2 +- .../reg-athlet-editor.page.ts | 49 +++++++++++++------ 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/newclient/resultcatcher/src/app/backend-types.ts b/newclient/resultcatcher/src/app/backend-types.ts index 63a076044..eb8794d36 100644 --- a/newclient/resultcatcher/src/app/backend-types.ts +++ b/newclient/resultcatcher/src/app/backend-types.ts @@ -42,7 +42,7 @@ export interface ProgrammRaw { id: number; name: string; aggregate: number; - parent: number; + parentId: number; ord: number; alterVon: number; alterBis: number; diff --git a/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts b/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts index b287057e7..91265b434 100644 --- a/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts +++ b/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts @@ -51,23 +51,23 @@ export class RegAthletEditorPage implements OnInit { this.wkPgms = pgms; this.backendService.loadAthletListForClub(this.wkId, this.regId).subscribe(regs => { this.clubAthletList = regs; - if (this.athletId) { this.backendService.loadAthletRegistrations(this.wkId, this.regId).subscribe(regs => { this.clubAthletListCurrent = regs; - this.updateUI(regs.find(athlet => athlet.id === this.athletId)); + if (this.athletId) { + this.updateUI(regs.find(athlet => athlet.id === this.athletId)); + } else { + this.updateUI({ + id: 0, + vereinregistrationId: this.regId, + name: '', + vorname: '', + geschlecht: 'W', + gebdat: undefined, + programId: undefined, + registrationTime: 0 + } as AthletRegistration); + } }); - } else { - this.updateUI({ - id: 0, - vereinregistrationId: this.regId, - name: '', - vorname: '', - geschlecht: 'W', - gebdat: undefined, - programId: undefined, - registrationTime: 0 - } as AthletRegistration); - } }); }); }); @@ -98,13 +98,23 @@ export class RegAthletEditorPage implements OnInit { a.name === b.name && a.vorname === b.vorname && a.gebdat === b.gebdat && a.geschlecht === b.geschlecht; } alternatives(athlet:AthletRegistration): AthletRegistration[] { - return this.clubAthletListCurrent?.filter(cc => this.similarRegistration(cc, athlet) && cc.id != athlet.id) || []; + return this.clubAthletListCurrent?.filter(cc => this.similarRegistration(cc, athlet) && (cc.id != athlet.id || cc.programId != athlet.programId)) || []; + } + getAthletPgm(athlet: AthletRegistration) { + return this.wkPgms.find(p => p.id === athlet.programId) || Object.assign({ + parent: 0 + }) as ProgrammRaw } filterPGMsForAthlet(athlet: AthletRegistration): ProgrammRaw[] { const alter = this.alter(athlet); const alternatives = this.alternatives(athlet); return this.wkPgms.filter(pgm => { - return (pgm.alterVon || 0) <= alter && (pgm.alterBis || 100) >= alter && alternatives.filter(a => a.programId === pgm.id).length === 0; + return (pgm.alterVon || 0) <= alter && + (pgm.alterBis || 100) >= alter && + alternatives.filter(a => + a.programId === pgm.id || + this.getAthletPgm(a).parentId === pgm.parentId + ).length === 0; }); } @@ -176,6 +186,13 @@ export class RegAthletEditorPage implements OnInit { {text: 'ABBRECHEN', role: 'cancel', handler: () => {}}, {text: 'Korektur durchführen', handler: () => { this.backendService.saveAthletRegistration(this.wkId, this.regId, reg).subscribe(() => { + this.clubAthletListCurrent + .filter(regg => this.similarRegistration(this.registration, regg)) + .filter(regg => regg.id !== this.registration.id) + .forEach(regg => { + const patchedreg = Object.assign({}, reg, {id: regg.id, registrationTime: regg.registrationTime, programId: regg.programId}); + this.backendService.saveAthletRegistration(this.wkId, this.regId, patchedreg); + }); this.navCtrl.pop(); }); } From 24138f3acb6f5a7c94ef6786e0a2bcee2db4592b Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 29 Mar 2023 21:43:41 +0000 Subject: [PATCH 19/99] update with generated Client from Github Actions CI for build with [skip ci] --- src/main/resources/app/5231.3ae1e1b25fad7395.js | 1 + src/main/resources/app/5231.a99f3701004c95fb.js | 1 - src/main/resources/app/index.html | 2 +- ...{runtime.b117fbf32d452b5b.js => runtime.22601c53cd249e98.js} | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/app/5231.3ae1e1b25fad7395.js delete mode 100644 src/main/resources/app/5231.a99f3701004c95fb.js rename src/main/resources/app/{runtime.b117fbf32d452b5b.js => runtime.22601c53cd249e98.js} (57%) diff --git a/src/main/resources/app/5231.3ae1e1b25fad7395.js b/src/main/resources/app/5231.3ae1e1b25fad7395.js new file mode 100644 index 000000000..4667126de --- /dev/null +++ b/src/main/resources/app/5231.3ae1e1b25fad7395.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[5231],{5231:(k,u,d)=>{d.r(u),d.d(u,{RegAthletEditorPageModule:()=>M});var h=d(6895),g=d(433),m=d(5472),a=d(502),_=d(7225),e=d(8274),p=d(600);function b(r,l){if(1&r&&(e.TgZ(0,"ion-select-option",15)(1,"ion-avatar",2),e._UZ(2,"img",8),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4),e._UZ(5,"br"),e.TgZ(6,"small"),e._uU(7),e.ALo(8,"date"),e.qZA()()()),2&r){const t=l.$implicit;e.Q6J("value",t.athletId),e.xp6(4),e.lnq("",t.name,", ",t.vorname," (",t.geschlecht,")"),e.xp6(3),e.hij("(",e.lcZ(8,5,t.gebdat),")")}}function A(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-select",19),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw(2);return e.KtG(o.selectedClubAthletId=n)}),e.YNc(1,b,9,7,"ion-select-option",20),e.qZA()}if(2&r){const t=e.oxw(2);e.Q6J("ngModel",t.selectedClubAthletId),e.xp6(1),e.Q6J("ngForOf",t.clubAthletList)}}function f(r,l){1&r&&(e.TgZ(0,"ion-item-divider")(1,"ion-avatar",0),e._UZ(2,"img",21),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4,"Einteilung"),e.qZA()())}function I(r,l){if(1&r&&(e.TgZ(0,"ion-select-option",15),e._uU(1),e.qZA()),2&r){const t=l.$implicit;e.Q6J("value",t.id),e.xp6(1),e.Oqu(t.name)}}function v(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-item")(1,"ion-avatar",0),e._uU(2," \xa0 "),e.qZA(),e.TgZ(3,"ion-label",12),e._uU(4,"Programm/Kategorie"),e.qZA(),e.TgZ(5,"ion-select",22),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw(2);return e.KtG(o.registration.programId=n)}),e.YNc(6,I,2,2,"ion-select-option",20),e.qZA()()}if(2&r){const t=e.oxw(2);e.xp6(5),e.Q6J("ngModel",t.registration.programId),e.xp6(1),e.Q6J("ngForOf",t.filterPGMsForAthlet(t.registration))}}function Z(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-content")(1,"form",6,7),e.NdJ("ngSubmit",function(){e.CHM(t);const n=e.MAs(2),o=e.oxw();return e.KtG(o.save(n))})("keyup.enter",function(){e.CHM(t);const n=e.MAs(2),o=e.oxw();return e.KtG(o.save(n))}),e.TgZ(3,"ion-list")(4,"ion-item-divider")(5,"ion-avatar",0),e._UZ(6,"img",8),e.qZA(),e.TgZ(7,"ion-label"),e._uU(8,"Athlet / Athletin"),e.qZA(),e.YNc(9,A,2,2,"ion-select",9),e.qZA(),e.TgZ(10,"ion-item")(11,"ion-avatar",0),e._uU(12," \xa0 "),e.qZA(),e.TgZ(13,"ion-input",10),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.name=n)}),e.qZA(),e.TgZ(14,"ion-input",11),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.vorname=n)}),e.qZA()(),e.TgZ(15,"ion-item")(16,"ion-avatar",0),e._uU(17," \xa0 "),e.qZA(),e.TgZ(18,"ion-label",12),e._uU(19,"Geburtsdatum"),e.qZA(),e.TgZ(20,"ion-input",13),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.gebdat=n)}),e.qZA()(),e.TgZ(21,"ion-item")(22,"ion-avatar",0),e._uU(23," \xa0 "),e.qZA(),e.TgZ(24,"ion-label",12),e._uU(25,"Geschlecht"),e.qZA(),e.TgZ(26,"ion-select",14),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.geschlecht=n)}),e.TgZ(27,"ion-select-option",15),e._uU(28,"weiblich"),e.qZA(),e.TgZ(29,"ion-select-option",15),e._uU(30,"m\xe4nnlich"),e.qZA()()(),e.YNc(31,f,5,0,"ion-item-divider",4),e.YNc(32,v,7,2,"ion-item",4),e.qZA(),e.TgZ(33,"ion-list")(34,"ion-button",16,17),e._UZ(36,"ion-icon",18),e._uU(37,"Speichern"),e.qZA()()()()}if(2&r){const t=e.MAs(2),i=e.oxw();e.xp6(9),e.Q6J("ngIf",0===i.registration.id&&i.clubAthletList.length>0),e.xp6(4),e.Q6J("disabled",!1)("ngModel",i.registration.name),e.xp6(1),e.Q6J("disabled",!1)("ngModel",i.registration.vorname),e.xp6(6),e.Q6J("disabled",!1)("ngModel",i.registration.gebdat),e.xp6(6),e.Q6J("ngModel",i.registration.geschlecht),e.xp6(1),e.Q6J("value","W"),e.xp6(2),e.Q6J("value","M"),e.xp6(2),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(1),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(2),e.Q6J("disabled",i.waiting||!i.isFormValid()||!t.valid||t.untouched)}}function x(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-button",23,24),e.NdJ("click",function(){e.CHM(t);const n=e.oxw();return e.KtG(n.delete())}),e._UZ(2,"ion-icon",25),e._uU(3,"Anmeldung l\xf6schen"),e.qZA()}if(2&r){const t=e.oxw();e.Q6J("disabled",t.waiting)}}const C=[{path:"",component:(()=>{class r{constructor(t,i,n,o,s){this.navCtrl=t,this.route=i,this.backendService=n,this.alertCtrl=o,this.zone=s,this.waiting=!1}ngOnInit(){this.waiting=!0,this.wkId=this.route.snapshot.paramMap.get("wkId"),this.regId=parseInt(this.route.snapshot.paramMap.get("regId")),this.athletId=parseInt(this.route.snapshot.paramMap.get("athletId")),this.backendService.getCompetitions().subscribe(t=>{const i=t.find(n=>n.uuid===this.wkId);this.wettkampfId=parseInt(i.id),this.backendService.loadProgramsForCompetition(i.uuid).subscribe(n=>{this.wkPgms=n,this.backendService.loadAthletListForClub(this.wkId,this.regId).subscribe(o=>{this.clubAthletList=o,this.backendService.loadAthletRegistrations(this.wkId,this.regId).subscribe(s=>{this.clubAthletListCurrent=s,this.updateUI(this.athletId?s.find(c=>c.id===this.athletId):{id:0,vereinregistrationId:this.regId,name:"",vorname:"",geschlecht:"W",gebdat:void 0,programId:void 0,registrationTime:0})})})})})}get selectedClubAthletId(){return this._selectedClubAthletId}set selectedClubAthletId(t){this._selectedClubAthletId=t,this.registration=this.clubAthletList.find(i=>i.athletId===t)}needsPGMChoice(){const t=[...this.wkPgms][0];return!(1==t.aggregate&&2==t.riegenmode)}alter(t){const i=new Date(t.gebdat).getFullYear();return new Date(Date.now()).getFullYear()-i}similarRegistration(t,i){return t.athletId===i.athletId||t.name===i.name&&t.vorname===i.vorname&&t.gebdat===i.gebdat&&t.geschlecht===i.geschlecht}alternatives(t){return this.clubAthletListCurrent?.filter(i=>this.similarRegistration(i,t)&&(i.id!=t.id||i.programId!=t.programId))||[]}getAthletPgm(t){return this.wkPgms.find(i=>i.id===t.programId)||Object.assign({parent:0})}filterPGMsForAthlet(t){const i=this.alter(t),n=this.alternatives(t);return this.wkPgms.filter(o=>(o.alterVon||0)<=i&&(o.alterBis||100)>=i&&0===n.filter(s=>s.programId===o.id||this.getAthletPgm(s).parentId===o.parentId).length)}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.wettkampf=this.backendService.competitionName,this.registration=Object.assign({},t),this.registration.gebdat=(0,_.tC)(this.registration.gebdat)})}isFormValid(){return!this.registration?.programId&&!this.needsPGMChoice()&&(this.registration.programId=this.filterPGMsForAthlet(this.registration)[0]?.id),!!this.registration.gebdat&&!!this.registration.geschlecht&&this.registration.geschlecht.length>0&&!!this.registration.name&&this.registration.name.length>0&&!!this.registration.vorname&&this.registration.vorname.length>0&&!!this.registration.programId&&this.registration.programId>0}checkPersonOverride(t){if(t.athletId){const i=[...this.clubAthletListCurrent,...this.clubAthletList].find(n=>n.athletId===t.athletId);if(i.geschlecht!==t.geschlecht||new Date((0,_.tC)(i.gebdat)).toJSON()!==new Date(t.gebdat).toJSON()||i.name!==t.name||i.vorname!==t.vorname)return!0}return!1}save(t){if(!t.valid)return;const i=Object.assign({},this.registration,{gebdat:new Date(t.value.gebdat).toJSON()});0===this.athletId||0===i.id?(this.needsPGMChoice()||this.filterPGMsForAthlet(this.registration).filter(n=>n.id!==i.programId).forEach(n=>{this.backendService.createAthletRegistration(this.wkId,this.regId,Object.assign({},i,{programId:n.id}))}),this.backendService.createAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})):this.checkPersonOverride(i)?this.alertCtrl.create({header:"Achtung",subHeader:"Person \xfcberschreiben vs korrigieren",message:"Es wurden \xc4nderungen an den Personen-Feldern vorgenommen. Diese sind ausschliesslich f\xfcr Korrekturen zul\xe4ssig. Die Identit\xe4t der Person darf dadurch nicht ge\xe4ndert werden!",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"Korektur durchf\xfchren",handler:()=>{this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.clubAthletListCurrent.filter(s=>this.similarRegistration(this.registration,s)).filter(s=>s.id!==this.registration.id).forEach(s=>{const c=Object.assign({},i,{id:s.id,registrationTime:s.registrationTime,programId:s.programId});this.backendService.saveAthletRegistration(this.wkId,this.regId,c)}),this.navCtrl.pop()})}}]}).then(s=>s.present()):this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})}delete(){this.alertCtrl.create({header:"Achtung",subHeader:"L\xf6schen der Athlet-Anmeldung am Wettkampf",message:"Hiermit wird die Anmeldung von "+this.registration.name+", "+this.registration.vorname+" am Wettkampf gel\xf6scht.",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"OKAY",handler:()=>{this.needsPGMChoice()||this.clubAthletListCurrent.filter(i=>this.similarRegistration(this.registration,i)).filter(i=>i.id!==this.registration.id).forEach(i=>{this.backendService.deleteAthletRegistration(this.wkId,this.regId,i)}),this.backendService.deleteAthletRegistration(this.wkId,this.regId,this.registration).subscribe(()=>{this.navCtrl.pop()})}}]}).then(i=>i.present())}}return r.\u0275fac=function(t){return new(t||r)(e.Y36(a.SH),e.Y36(m.gz),e.Y36(p.v),e.Y36(a.Br),e.Y36(e.R0b))},r.\u0275cmp=e.Xpm({type:r,selectors:[["app-reg-athlet-editor"]],decls:14,vars:3,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[4,"ngIf"],["size","large","expand","block","color","danger",3,"disabled","click",4,"ngIf"],[3,"ngSubmit","keyup.enter"],["athletRegistrationForm","ngForm"],["src","assets/imgs/athlete.png"],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange",4,"ngIf"],["required","","placeholder","Name","type","text","name","name","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Vorname","type","text","name","vorname","required","",3,"disabled","ngModel","ngModelChange"],["color","primary"],["required","","placeholder","Geburtsdatum","type","date","display-timezone","utc","name","gebdat","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Geschlecht","name","geschlecht","okText","Okay","cancelText","Abbrechen","required","",3,"ngModel","ngModelChange"],[3,"value"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name",""],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],["src","assets/imgs/wettkampf.png"],["required","","placeholder","Programm/Kategorie","name","programId","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],["size","large","expand","block","color","danger",3,"disabled","click"],["btnDelete",""],["slot","start","name","trash"]],template:function(t,i){1&t&&(e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5,"Anmeldung Athlet/Athletin"),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA()()()(),e.YNc(9,Z,38,13,"ion-content",4),e.TgZ(10,"ion-footer")(11,"ion-toolbar")(12,"ion-list"),e.YNc(13,x,4,1,"ion-button",5),e.qZA()()()),2&t&&(e.xp6(8),e.hij("f\xfcr ",i.wettkampf,""),e.xp6(1),e.Q6J("ngIf",i.registration),e.xp6(4),e.Q6J("ngIf",i.athletId>0))},dependencies:[h.sg,h.O5,g._Y,g.JJ,g.JL,g.Q7,g.On,g.F,a.BJ,a.oU,a.YG,a.Sm,a.W2,a.fr,a.Gu,a.gu,a.pK,a.Ie,a.rH,a.Q$,a.q_,a.uN,a.t9,a.n0,a.wd,a.sr,a.QI,a.j9,a.cs,h.uU]}),r})()}];let M=(()=>{class r{}return r.\u0275fac=function(t){return new(t||r)},r.\u0275mod=e.oAB({type:r}),r.\u0275inj=e.cJS({imports:[h.ez,g.u5,a.Pc,m.Bz.forChild(C)]}),r})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/5231.a99f3701004c95fb.js b/src/main/resources/app/5231.a99f3701004c95fb.js deleted file mode 100644 index 9ca2a8bf8..000000000 --- a/src/main/resources/app/5231.a99f3701004c95fb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[5231],{5231:(k,c,l)=>{l.r(c),l.d(c,{RegAthletEditorPageModule:()=>C});var h=l(6895),d=l(433),u=l(5472),o=l(502),_=l(7225),e=l(8274),m=l(600);function p(r,s){if(1&r&&(e.TgZ(0,"ion-select-option",15)(1,"ion-avatar",2),e._UZ(2,"img",8),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4),e._UZ(5,"br"),e.TgZ(6,"small"),e._uU(7),e.ALo(8,"date"),e.qZA()()()),2&r){const t=s.$implicit;e.Q6J("value",t.athletId),e.xp6(4),e.lnq("",t.name,", ",t.vorname," (",t.geschlecht,")"),e.xp6(3),e.hij("(",e.lcZ(8,5,t.gebdat),")")}}function b(r,s){if(1&r){const t=e.EpF();e.TgZ(0,"ion-select",19),e.NdJ("ngModelChange",function(n){e.CHM(t);const a=e.oxw(2);return e.KtG(a.selectedClubAthletId=n)}),e.YNc(1,p,9,7,"ion-select-option",20),e.qZA()}if(2&r){const t=e.oxw(2);e.Q6J("ngModel",t.selectedClubAthletId),e.xp6(1),e.Q6J("ngForOf",t.clubAthletList)}}function A(r,s){1&r&&(e.TgZ(0,"ion-item-divider")(1,"ion-avatar",0),e._UZ(2,"img",21),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4,"Einteilung"),e.qZA()())}function f(r,s){if(1&r&&(e.TgZ(0,"ion-select-option",15),e._uU(1),e.qZA()),2&r){const t=s.$implicit;e.Q6J("value",t.id),e.xp6(1),e.Oqu(t.name)}}function v(r,s){if(1&r){const t=e.EpF();e.TgZ(0,"ion-item")(1,"ion-avatar",0),e._uU(2," \xa0 "),e.qZA(),e.TgZ(3,"ion-label",12),e._uU(4,"Programm/Kategorie"),e.qZA(),e.TgZ(5,"ion-select",22),e.NdJ("ngModelChange",function(n){e.CHM(t);const a=e.oxw(2);return e.KtG(a.registration.programId=n)}),e.YNc(6,f,2,2,"ion-select-option",20),e.qZA()()}if(2&r){const t=e.oxw(2);e.xp6(5),e.Q6J("ngModel",t.registration.programId),e.xp6(1),e.Q6J("ngForOf",t.filterPGMsForAthlet(t.registration))}}function I(r,s){if(1&r){const t=e.EpF();e.TgZ(0,"ion-content")(1,"form",6,7),e.NdJ("ngSubmit",function(){e.CHM(t);const n=e.MAs(2),a=e.oxw();return e.KtG(a.save(n))})("keyup.enter",function(){e.CHM(t);const n=e.MAs(2),a=e.oxw();return e.KtG(a.save(n))}),e.TgZ(3,"ion-list")(4,"ion-item-divider")(5,"ion-avatar",0),e._UZ(6,"img",8),e.qZA(),e.TgZ(7,"ion-label"),e._uU(8,"Athlet / Athletin"),e.qZA(),e.YNc(9,b,2,2,"ion-select",9),e.qZA(),e.TgZ(10,"ion-item")(11,"ion-avatar",0),e._uU(12," \xa0 "),e.qZA(),e.TgZ(13,"ion-input",10),e.NdJ("ngModelChange",function(n){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.name=n)}),e.qZA(),e.TgZ(14,"ion-input",11),e.NdJ("ngModelChange",function(n){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.vorname=n)}),e.qZA()(),e.TgZ(15,"ion-item")(16,"ion-avatar",0),e._uU(17," \xa0 "),e.qZA(),e.TgZ(18,"ion-label",12),e._uU(19,"Geburtsdatum"),e.qZA(),e.TgZ(20,"ion-input",13),e.NdJ("ngModelChange",function(n){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.gebdat=n)}),e.qZA()(),e.TgZ(21,"ion-item")(22,"ion-avatar",0),e._uU(23," \xa0 "),e.qZA(),e.TgZ(24,"ion-label",12),e._uU(25,"Geschlecht"),e.qZA(),e.TgZ(26,"ion-select",14),e.NdJ("ngModelChange",function(n){e.CHM(t);const a=e.oxw();return e.KtG(a.registration.geschlecht=n)}),e.TgZ(27,"ion-select-option",15),e._uU(28,"weiblich"),e.qZA(),e.TgZ(29,"ion-select-option",15),e._uU(30,"m\xe4nnlich"),e.qZA()()(),e.YNc(31,A,5,0,"ion-item-divider",4),e.YNc(32,v,7,2,"ion-item",4),e.qZA(),e.TgZ(33,"ion-list")(34,"ion-button",16,17),e._UZ(36,"ion-icon",18),e._uU(37,"Speichern"),e.qZA()()()()}if(2&r){const t=e.MAs(2),i=e.oxw();e.xp6(9),e.Q6J("ngIf",0===i.registration.id&&i.clubAthletList.length>0),e.xp6(4),e.Q6J("disabled",!1)("ngModel",i.registration.name),e.xp6(1),e.Q6J("disabled",!1)("ngModel",i.registration.vorname),e.xp6(6),e.Q6J("disabled",!1)("ngModel",i.registration.gebdat),e.xp6(6),e.Q6J("ngModel",i.registration.geschlecht),e.xp6(1),e.Q6J("value","W"),e.xp6(2),e.Q6J("value","M"),e.xp6(2),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(1),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(2),e.Q6J("disabled",i.waiting||!i.isFormValid()||!t.valid||t.untouched)}}function Z(r,s){if(1&r){const t=e.EpF();e.TgZ(0,"ion-button",23,24),e.NdJ("click",function(){e.CHM(t);const n=e.oxw();return e.KtG(n.delete())}),e._UZ(2,"ion-icon",25),e._uU(3,"Anmeldung l\xf6schen"),e.qZA()}if(2&r){const t=e.oxw();e.Q6J("disabled",t.waiting)}}const x=[{path:"",component:(()=>{class r{constructor(t,i,n,a,g){this.navCtrl=t,this.route=i,this.backendService=n,this.alertCtrl=a,this.zone=g,this.waiting=!1}ngOnInit(){this.waiting=!0,this.wkId=this.route.snapshot.paramMap.get("wkId"),this.regId=parseInt(this.route.snapshot.paramMap.get("regId")),this.athletId=parseInt(this.route.snapshot.paramMap.get("athletId")),this.backendService.getCompetitions().subscribe(t=>{const i=t.find(n=>n.uuid===this.wkId);this.wettkampfId=parseInt(i.id),this.backendService.loadProgramsForCompetition(i.uuid).subscribe(n=>{this.wkPgms=n,this.backendService.loadAthletListForClub(this.wkId,this.regId).subscribe(a=>{this.clubAthletList=a,this.athletId?this.backendService.loadAthletRegistrations(this.wkId,this.regId).subscribe(g=>{this.clubAthletListCurrent=g,this.updateUI(g.find(M=>M.id===this.athletId))}):this.updateUI({id:0,vereinregistrationId:this.regId,name:"",vorname:"",geschlecht:"W",gebdat:void 0,programId:void 0,registrationTime:0})})})})}get selectedClubAthletId(){return this._selectedClubAthletId}set selectedClubAthletId(t){this._selectedClubAthletId=t,this.registration=this.clubAthletList.find(i=>i.athletId===t)}needsPGMChoice(){const t=[...this.wkPgms][0];return!(1==t.aggregate&&2==t.riegenmode)}alter(t){const i=new Date(t.gebdat).getFullYear();return new Date(Date.now()).getFullYear()-i}similarRegistration(t,i){return t.athletId===i.athletId||t.name===i.name&&t.vorname===i.vorname&&t.gebdat===i.gebdat&&t.geschlecht===i.geschlecht}alternatives(t){return this.clubAthletListCurrent?.filter(i=>this.similarRegistration(i,t)&&i.id!=t.id)||[]}filterPGMsForAthlet(t){const i=this.alter(t),n=this.alternatives(t);return this.wkPgms.filter(a=>(a.alterVon||0)<=i&&(a.alterBis||100)>=i&&0===n.filter(g=>g.programId===a.id).length)}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.wettkampf=this.backendService.competitionName,this.registration=Object.assign({},t),this.registration.gebdat=(0,_.tC)(this.registration.gebdat)})}isFormValid(){return!this.registration?.programId&&!this.needsPGMChoice()&&(this.registration.programId=this.filterPGMsForAthlet(this.registration)[0]?.id),!!this.registration.gebdat&&!!this.registration.geschlecht&&this.registration.geschlecht.length>0&&!!this.registration.name&&this.registration.name.length>0&&!!this.registration.vorname&&this.registration.vorname.length>0&&!!this.registration.programId&&this.registration.programId>0}checkPersonOverride(t){if(t.athletId){const i=[...this.clubAthletListCurrent,...this.clubAthletList].find(n=>n.athletId===t.athletId);if(i.geschlecht!==t.geschlecht||new Date((0,_.tC)(i.gebdat)).toJSON()!==new Date(t.gebdat).toJSON()||i.name!==t.name||i.vorname!==t.vorname)return!0}return!1}save(t){if(!t.valid)return;const i=Object.assign({},this.registration,{gebdat:new Date(t.value.gebdat).toJSON()});0===this.athletId||0===i.id?(this.needsPGMChoice()||this.filterPGMsForAthlet(this.registration).filter(n=>n.id!==i.programId).forEach(n=>{this.backendService.createAthletRegistration(this.wkId,this.regId,Object.assign({},i,{programId:n.id}))}),this.backendService.createAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})):this.checkPersonOverride(i)?this.alertCtrl.create({header:"Achtung",subHeader:"Person \xfcberschreiben vs korrigieren",message:"Es wurden \xc4nderungen an den Personen-Feldern vorgenommen. Diese sind ausschliesslich f\xfcr Korrekturen zul\xe4ssig. Die Identit\xe4t der Person darf dadurch nicht ge\xe4ndert werden!",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"Korektur durchf\xfchren",handler:()=>{this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})}}]}).then(g=>g.present()):this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})}delete(){this.alertCtrl.create({header:"Achtung",subHeader:"L\xf6schen der Athlet-Anmeldung am Wettkampf",message:"Hiermit wird die Anmeldung von "+this.registration.name+", "+this.registration.vorname+" am Wettkampf gel\xf6scht.",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"OKAY",handler:()=>{this.needsPGMChoice()||this.clubAthletListCurrent.filter(i=>this.similarRegistration(this.registration,i)).filter(i=>i.id!==this.registration.id).forEach(i=>{this.backendService.deleteAthletRegistration(this.wkId,this.regId,i)}),this.backendService.deleteAthletRegistration(this.wkId,this.regId,this.registration).subscribe(()=>{this.navCtrl.pop()})}}]}).then(i=>i.present())}}return r.\u0275fac=function(t){return new(t||r)(e.Y36(o.SH),e.Y36(u.gz),e.Y36(m.v),e.Y36(o.Br),e.Y36(e.R0b))},r.\u0275cmp=e.Xpm({type:r,selectors:[["app-reg-athlet-editor"]],decls:14,vars:3,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[4,"ngIf"],["size","large","expand","block","color","danger",3,"disabled","click",4,"ngIf"],[3,"ngSubmit","keyup.enter"],["athletRegistrationForm","ngForm"],["src","assets/imgs/athlete.png"],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange",4,"ngIf"],["required","","placeholder","Name","type","text","name","name","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Vorname","type","text","name","vorname","required","",3,"disabled","ngModel","ngModelChange"],["color","primary"],["required","","placeholder","Geburtsdatum","type","date","display-timezone","utc","name","gebdat","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Geschlecht","name","geschlecht","okText","Okay","cancelText","Abbrechen","required","",3,"ngModel","ngModelChange"],[3,"value"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name",""],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],["src","assets/imgs/wettkampf.png"],["required","","placeholder","Programm/Kategorie","name","programId","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],["size","large","expand","block","color","danger",3,"disabled","click"],["btnDelete",""],["slot","start","name","trash"]],template:function(t,i){1&t&&(e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5,"Anmeldung Athlet/Athletin"),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA()()()(),e.YNc(9,I,38,13,"ion-content",4),e.TgZ(10,"ion-footer")(11,"ion-toolbar")(12,"ion-list"),e.YNc(13,Z,4,1,"ion-button",5),e.qZA()()()),2&t&&(e.xp6(8),e.hij("f\xfcr ",i.wettkampf,""),e.xp6(1),e.Q6J("ngIf",i.registration),e.xp6(4),e.Q6J("ngIf",i.athletId>0))},dependencies:[h.sg,h.O5,d._Y,d.JJ,d.JL,d.Q7,d.On,d.F,o.BJ,o.oU,o.YG,o.Sm,o.W2,o.fr,o.Gu,o.gu,o.pK,o.Ie,o.rH,o.Q$,o.q_,o.uN,o.t9,o.n0,o.wd,o.sr,o.QI,o.j9,o.cs,h.uU]}),r})()}];let C=(()=>{class r{}return r.\u0275fac=function(t){return new(t||r)},r.\u0275mod=e.oAB({type:r}),r.\u0275inj=e.cJS({imports:[h.ez,d.u5,o.Pc,u.Bz.forChild(x)]}),r})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/index.html b/src/main/resources/app/index.html index 1a6ce8a9b..b2ae529a1 100644 --- a/src/main/resources/app/index.html +++ b/src/main/resources/app/index.html @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/src/main/resources/app/runtime.b117fbf32d452b5b.js b/src/main/resources/app/runtime.22601c53cd249e98.js similarity index 57% rename from src/main/resources/app/runtime.b117fbf32d452b5b.js rename to src/main/resources/app/runtime.22601c53cd249e98.js index ef41eecc7..8356e462c 100644 --- a/src/main/resources/app/runtime.b117fbf32d452b5b.js +++ b/src/main/resources/app/runtime.22601c53cd249e98.js @@ -1 +1 @@ -(()=>{"use strict";var e,v={},g={};function f(e){var d=g[e];if(void 0!==d)return d.exports;var a=g[e]={exports:{}};return v[e].call(a.exports,a,a.exports,f),a.exports}f.m=v,e=[],f.O=(d,a,r,b)=>{if(!a){var t=1/0;for(c=0;c=b)&&Object.keys(f.O).every(p=>f.O[p](a[n]))?a.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[a,r,b]},f.n=e=>{var d=e&&e.__esModule?()=>e.default:()=>e;return f.d(d,{a:d}),d},(()=>{var d,e=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;f.t=function(a,r){if(1&r&&(a=this(a)),8&r||"object"==typeof a&&a&&(4&r&&a.__esModule||16&r&&"function"==typeof a.then))return a;var b=Object.create(null);f.r(b);var c={};d=d||[null,e({}),e([]),e(e)];for(var t=2&r&&a;"object"==typeof t&&!~d.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>a[l]);return c.default=()=>a,f.d(b,c),b}})(),f.d=(e,d)=>{for(var a in d)f.o(d,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:d[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((d,a)=>(f.f[a](e,d),d),[])),f.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"888b46156ab59294",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"a99f3701004c95fb",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9151:"21577e63c2cd66c2",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),f.miniCssF=e=>{},f.o=(e,d)=>Object.prototype.hasOwnProperty.call(e,d),(()=>{var e={},d="app:";f.l=(a,r,b,c)=>{if(e[a])e[a].push(r);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[a];if(delete e[a],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),f.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;f.tt=()=>(void 0===e&&(e={createScriptURL:d=>d},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),f.tu=e=>f.tt().createScriptURL(e),f.p="",(()=>{var e={3666:0};f.f.j=(r,b)=>{var c=f.o(e,r)?e[r]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=r){var t=new Promise((o,s)=>c=e[r]=[o,s]);b.push(c[2]=t);var l=f.p+f.u(r),n=new Error;f.l(l,o=>{if(f.o(e,r)&&(0!==(c=e[r])&&(e[r]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+r+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+r,r)}else e[r]=0},f.O.j=r=>0===e[r];var d=(r,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)f.o(t,n)&&(f.m[n]=t[n]);if(l)var s=l(f)}for(r&&r(b);o{"use strict";var e,v={},g={};function f(e){var r=g[e];if(void 0!==r)return r.exports;var a=g[e]={exports:{}};return v[e].call(a.exports,a,a.exports,f),a.exports}f.m=v,e=[],f.O=(r,a,d,b)=>{if(!a){var t=1/0;for(c=0;c=b)&&Object.keys(f.O).every(p=>f.O[p](a[n]))?a.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[a,d,b]},f.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return f.d(r,{a:r}),r},(()=>{var r,e=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;f.t=function(a,d){if(1&d&&(a=this(a)),8&d||"object"==typeof a&&a&&(4&d&&a.__esModule||16&d&&"function"==typeof a.then))return a;var b=Object.create(null);f.r(b);var c={};r=r||[null,e({}),e([]),e(e)];for(var t=2&d&&a;"object"==typeof t&&!~r.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>a[l]);return c.default=()=>a,f.d(b,c),b}})(),f.d=(e,r)=>{for(var a in r)f.o(r,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:r[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((r,a)=>(f.f[a](e,r),r),[])),f.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"888b46156ab59294",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"3ae1e1b25fad7395",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9151:"21577e63c2cd66c2",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),f.miniCssF=e=>{},f.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e={},r="app:";f.l=(a,d,b,c)=>{if(e[a])e[a].push(d);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[a];if(delete e[a],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),f.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;f.tt=()=>(void 0===e&&(e={createScriptURL:r=>r},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),f.tu=e=>f.tt().createScriptURL(e),f.p="",(()=>{var e={3666:0};f.f.j=(d,b)=>{var c=f.o(e,d)?e[d]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=d){var t=new Promise((o,s)=>c=e[d]=[o,s]);b.push(c[2]=t);var l=f.p+f.u(d),n=new Error;f.l(l,o=>{if(f.o(e,d)&&(0!==(c=e[d])&&(e[d]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+d+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+d,d)}else e[d]=0},f.O.j=d=>0===e[d];var r=(d,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)f.o(t,n)&&(f.m[n]=t[n]);if(l)var s=l(f)}for(d&&d(b);o Date: Thu, 30 Mar 2023 22:41:19 +0200 Subject: [PATCH 20/99] add new gear-mappings --- newclient/resultcatcher/src/app/utils.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/newclient/resultcatcher/src/app/utils.ts b/newclient/resultcatcher/src/app/utils.ts index 704c4c445..5e3c95061 100644 --- a/newclient/resultcatcher/src/app/utils.ts +++ b/newclient/resultcatcher/src/app/utils.ts @@ -87,5 +87,7 @@ export const gearMapping = { 26: "ringe.svg", 27: "stufenbarren.svg", 28: "schwebebalken.svg", - 29: "minitramp.svg" + 29: "minitramp.svg", + 30: "minitramp.svg", + 31: "ringe.svg" }; \ No newline at end of file From 961bfedb59b8fe757a2a3616d5a69e957093694f Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Thu, 30 Mar 2023 20:43:34 +0000 Subject: [PATCH 21/99] update with generated Client from Github Actions CI for build with [skip ci] --- src/main/resources/app/index.html | 2 +- src/main/resources/app/main.2b7e2f72d996fe4e.js | 1 - src/main/resources/app/main.f2513059db4c78f6.js | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 src/main/resources/app/main.2b7e2f72d996fe4e.js create mode 100644 src/main/resources/app/main.f2513059db4c78f6.js diff --git a/src/main/resources/app/index.html b/src/main/resources/app/index.html index b2ae529a1..f9959c1e5 100644 --- a/src/main/resources/app/index.html +++ b/src/main/resources/app/index.html @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/src/main/resources/app/main.2b7e2f72d996fe4e.js b/src/main/resources/app/main.2b7e2f72d996fe4e.js deleted file mode 100644 index 76781dbef..000000000 --- a/src/main/resources/app/main.2b7e2f72d996fe4e.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkapp=self.webpackChunkapp||[]).push([[179],{7423:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Uw:()=>P,fo:()=>B});var o=w(5861);typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"&&global;var U=(()=>{return(T=U||(U={})).Unimplemented="UNIMPLEMENTED",T.Unavailable="UNAVAILABLE",U;var T})();class _ extends Error{constructor(k,O,te){super(k),this.message=k,this.code=O,this.data=te}}const G=T=>{var k,O,te,ce,Ae;const De=T.CapacitorCustomPlatform||null,ue=T.Capacitor||{},de=ue.Plugins=ue.Plugins||{},ne=T.CapacitorPlatforms,Ce=(null===(k=ne?.currentPlatform)||void 0===k?void 0:k.getPlatform)||(()=>null!==De?De.name:(T=>{var k,O;return T?.androidBridge?"android":null!==(O=null===(k=T?.webkit)||void 0===k?void 0:k.messageHandlers)&&void 0!==O&&O.bridge?"ios":"web"})(T)),dt=(null===(O=ne?.currentPlatform)||void 0===O?void 0:O.isNativePlatform)||(()=>"web"!==Ce()),Ue=(null===(te=ne?.currentPlatform)||void 0===te?void 0:te.isPluginAvailable)||(Pt=>!(!Rt.get(Pt)?.platforms.has(Ce())&&!Ke(Pt))),Ke=(null===(ce=ne?.currentPlatform)||void 0===ce?void 0:ce.getPluginHeader)||(Pt=>{var Ut;return null===(Ut=ue.PluginHeaders)||void 0===Ut?void 0:Ut.find(it=>it.name===Pt)}),Rt=new Map,pn=(null===(Ae=ne?.currentPlatform)||void 0===Ae?void 0:Ae.registerPlugin)||((Pt,Ut={})=>{const it=Rt.get(Pt);if(it)return console.warn(`Capacitor plugin "${Pt}" already registered. Cannot register plugins twice.`),it.proxy;const Xt=Ce(),kt=Ke(Pt);let Vt;const rn=function(){var Et=(0,o.Z)(function*(){return!Vt&&Xt in Ut?Vt=Vt="function"==typeof Ut[Xt]?yield Ut[Xt]():Ut[Xt]:null!==De&&!Vt&&"web"in Ut&&(Vt=Vt="function"==typeof Ut.web?yield Ut.web():Ut.web),Vt});return function(){return Et.apply(this,arguments)}}(),en=Et=>{let ut;const Ct=(...qe)=>{const on=rn().then(gn=>{const Nt=((Et,ut)=>{var Ct,qe;if(!kt){if(Et)return null===(qe=Et[ut])||void 0===qe?void 0:qe.bind(Et);throw new _(`"${Pt}" plugin is not implemented on ${Xt}`,U.Unimplemented)}{const on=kt?.methods.find(gn=>ut===gn.name);if(on)return"promise"===on.rtype?gn=>ue.nativePromise(Pt,ut.toString(),gn):(gn,Nt)=>ue.nativeCallback(Pt,ut.toString(),gn,Nt);if(Et)return null===(Ct=Et[ut])||void 0===Ct?void 0:Ct.bind(Et)}})(gn,Et);if(Nt){const Hn=Nt(...qe);return ut=Hn?.remove,Hn}throw new _(`"${Pt}.${Et}()" is not implemented on ${Xt}`,U.Unimplemented)});return"addListener"===Et&&(on.remove=(0,o.Z)(function*(){return ut()})),on};return Ct.toString=()=>`${Et.toString()}() { [capacitor code] }`,Object.defineProperty(Ct,"name",{value:Et,writable:!1,configurable:!1}),Ct},gt=en("addListener"),Yt=en("removeListener"),ht=(Et,ut)=>{const Ct=gt({eventName:Et},ut),qe=function(){var gn=(0,o.Z)(function*(){const Nt=yield Ct;Yt({eventName:Et,callbackId:Nt},ut)});return function(){return gn.apply(this,arguments)}}(),on=new Promise(gn=>Ct.then(()=>gn({remove:qe})));return on.remove=(0,o.Z)(function*(){console.warn("Using addListener() without 'await' is deprecated."),yield qe()}),on},nt=new Proxy({},{get(Et,ut){switch(ut){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return kt?ht:gt;case"removeListener":return Yt;default:return en(ut)}}});return de[Pt]=nt,Rt.set(Pt,{name:Pt,proxy:nt,platforms:new Set([...Object.keys(Ut),...kt?[Xt]:[]])}),nt});return ue.convertFileSrc||(ue.convertFileSrc=Pt=>Pt),ue.getPlatform=Ce,ue.handleError=Pt=>T.console.error(Pt),ue.isNativePlatform=dt,ue.isPluginAvailable=Ue,ue.pluginMethodNoop=(Pt,Ut,it)=>Promise.reject(`${it} does not have an implementation of "${Ut}".`),ue.registerPlugin=pn,ue.Exception=_,ue.DEBUG=!!ue.DEBUG,ue.isLoggingEnabled=!!ue.isLoggingEnabled,ue.platform=ue.getPlatform(),ue.isNative=ue.isNativePlatform(),ue},S=(T=>T.Capacitor=G(T))(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),B=S.registerPlugin;class P{constructor(k){this.listeners={},this.windowListeners={},k&&(console.warn(`Capacitor WebPlugin "${k.name}" config object was deprecated in v3 and will be removed in v4.`),this.config=k)}addListener(k,O){var te=this;this.listeners[k]||(this.listeners[k]=[]),this.listeners[k].push(O);const Ae=this.windowListeners[k];Ae&&!Ae.registered&&this.addWindowListener(Ae);const De=function(){var de=(0,o.Z)(function*(){return te.removeListener(k,O)});return function(){return de.apply(this,arguments)}}(),ue=Promise.resolve({remove:De});return Object.defineProperty(ue,"remove",{value:(de=(0,o.Z)(function*(){console.warn("Using addListener() without 'await' is deprecated."),yield De()}),function(){return de.apply(this,arguments)})}),ue;var de}removeAllListeners(){var k=this;return(0,o.Z)(function*(){k.listeners={};for(const O in k.windowListeners)k.removeWindowListener(k.windowListeners[O]);k.windowListeners={}})()}notifyListeners(k,O){const te=this.listeners[k];te&&te.forEach(ce=>ce(O))}hasListeners(k){return!!this.listeners[k].length}registerWindowListener(k,O){this.windowListeners[O]={registered:!1,windowEventName:k,pluginEventName:O,handler:te=>{this.notifyListeners(O,te)}}}unimplemented(k="not implemented"){return new S.Exception(k,U.Unimplemented)}unavailable(k="not available"){return new S.Exception(k,U.Unavailable)}removeListener(k,O){var te=this;return(0,o.Z)(function*(){const ce=te.listeners[k];if(!ce)return;const Ae=ce.indexOf(O);te.listeners[k].splice(Ae,1),te.listeners[k].length||te.removeWindowListener(te.windowListeners[k])})()}addWindowListener(k){window.addEventListener(k.windowEventName,k.handler),k.registered=!0}removeWindowListener(k){!k||(window.removeEventListener(k.windowEventName,k.handler),k.registered=!1)}}const pe=T=>encodeURIComponent(T).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),ke=T=>T.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class Te extends P{getCookies(){return(0,o.Z)(function*(){const k=document.cookie,O={};return k.split(";").forEach(te=>{if(te.length<=0)return;let[ce,Ae]=te.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");ce=ke(ce).trim(),Ae=ke(Ae).trim(),O[ce]=Ae}),O})()}setCookie(k){return(0,o.Z)(function*(){try{const O=pe(k.key),te=pe(k.value),ce=`; expires=${(k.expires||"").replace("expires=","")}`,Ae=(k.path||"/").replace("path=","");document.cookie=`${O}=${te||""}${ce}; path=${Ae}`}catch(O){return Promise.reject(O)}})()}deleteCookie(k){return(0,o.Z)(function*(){try{document.cookie=`${k.key}=; Max-Age=0`}catch(O){return Promise.reject(O)}})()}clearCookies(){return(0,o.Z)(function*(){try{const k=document.cookie.split(";")||[];for(const O of k)document.cookie=O.replace(/^ +/,"").replace(/=.*/,`=;expires=${(new Date).toUTCString()};path=/`)}catch(k){return Promise.reject(k)}})()}clearAllCookies(){var k=this;return(0,o.Z)(function*(){try{yield k.clearCookies()}catch(O){return Promise.reject(O)}})()}}B("CapacitorCookies",{web:()=>new Te});const Be=function(){var T=(0,o.Z)(function*(k){return new Promise((O,te)=>{const ce=new FileReader;ce.onload=()=>{const Ae=ce.result;O(Ae.indexOf(",")>=0?Ae.split(",")[1]:Ae)},ce.onerror=Ae=>te(Ae),ce.readAsDataURL(k)})});return function(O){return T.apply(this,arguments)}}();class Ne extends P{request(k){return(0,o.Z)(function*(){const O=((T,k={})=>{const O=Object.assign({method:T.method||"GET",headers:T.headers},k),ce=((T={})=>{const k=Object.keys(T);return Object.keys(T).map(ce=>ce.toLocaleLowerCase()).reduce((ce,Ae,De)=>(ce[Ae]=T[k[De]],ce),{})})(T.headers)["content-type"]||"";if("string"==typeof T.data)O.body=T.data;else if(ce.includes("application/x-www-form-urlencoded")){const Ae=new URLSearchParams;for(const[De,ue]of Object.entries(T.data||{}))Ae.set(De,ue);O.body=Ae.toString()}else if(ce.includes("multipart/form-data")){const Ae=new FormData;if(T.data instanceof FormData)T.data.forEach((ue,de)=>{Ae.append(de,ue)});else for(const ue of Object.keys(T.data))Ae.append(ue,T.data[ue]);O.body=Ae;const De=new Headers(O.headers);De.delete("content-type"),O.headers=De}else(ce.includes("application/json")||"object"==typeof T.data)&&(O.body=JSON.stringify(T.data));return O})(k,k.webFetchExtra),te=((T,k=!0)=>T?Object.entries(T).reduce((te,ce)=>{const[Ae,De]=ce;let ue,de;return Array.isArray(De)?(de="",De.forEach(ne=>{ue=k?encodeURIComponent(ne):ne,de+=`${Ae}=${ue}&`}),de.slice(0,-1)):(ue=k?encodeURIComponent(De):De,de=`${Ae}=${ue}`),`${te}&${de}`},"").substr(1):null)(k.params,k.shouldEncodeUrlParams),ce=te?`${k.url}?${te}`:k.url,Ae=yield fetch(ce,O),De=Ae.headers.get("content-type")||"";let de,ne,{responseType:ue="text"}=Ae.ok?k:{};switch(De.includes("application/json")&&(ue="json"),ue){case"arraybuffer":case"blob":ne=yield Ae.blob(),de=yield Be(ne);break;case"json":de=yield Ae.json();break;default:de=yield Ae.text()}const Ee={};return Ae.headers.forEach((Ce,ze)=>{Ee[ze]=Ce}),{data:de,headers:Ee,status:Ae.status,url:Ae.url}})()}get(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"GET"}))})()}post(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"POST"}))})()}put(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"PUT"}))})()}patch(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"PATCH"}))})()}delete(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"DELETE"}))})()}}B("CapacitorHttp",{web:()=>new Ne})},502:(Qe,Fe,w)=>{"use strict";w.d(Fe,{BX:()=>Nr,Br:()=>Zn,dr:()=>Nt,BJ:()=>Hn,oU:()=>zt,cs:()=>nr,yp:()=>jn,YG:()=>xe,Sm:()=>se,PM:()=>ye,hM:()=>_t,wI:()=>tn,W2:()=>Ln,fr:()=>ee,jY:()=>Se,Gu:()=>Le,gu:()=>yt,pK:()=>sn,Ie:()=>dn,rH:()=>er,u8:()=>$n,IK:()=>Tn,td:()=>xn,Q$:()=>vn,q_:()=>tr,z0:()=>cr,zc:()=>$t,uN:()=>Un,jP:()=>fr,Nd:()=>le,VI:()=>Ie,t9:()=>ot,n0:()=>st,PQ:()=>An,jI:()=>Rn,g2:()=>an,wd:()=>ho,sr:()=>jr,Pc:()=>C,r4:()=>rr,HT:()=>Lr,SH:()=>zr,as:()=>en,t4:()=>si,QI:()=>Yt,j9:()=>ht,yF:()=>ko});var o=w(8274),x=w(433),N=w(655),ge=w(8421),R=w(9751),W=w(5577),M=w(1144),U=w(576),_=w(3268);const Y=["addListener","removeListener"],G=["addEventListener","removeEventListener"],Z=["on","off"];function S(s,c,a,g){if((0,U.m)(a)&&(g=a,a=void 0),g)return S(s,c,a).pipe((0,_.Z)(g));const[L,Me]=function P(s){return(0,U.m)(s.addEventListener)&&(0,U.m)(s.removeEventListener)}(s)?G.map(Je=>at=>s[Je](c,at,a)):function E(s){return(0,U.m)(s.addListener)&&(0,U.m)(s.removeListener)}(s)?Y.map(B(s,c)):function j(s){return(0,U.m)(s.on)&&(0,U.m)(s.off)}(s)?Z.map(B(s,c)):[];if(!L&&(0,M.z)(s))return(0,W.z)(Je=>S(Je,c,a))((0,ge.Xf)(s));if(!L)throw new TypeError("Invalid event target");return new R.y(Je=>{const at=(...Dt)=>Je.next(1Me(at)})}function B(s,c){return a=>g=>s[a](c,g)}var K=w(7579),pe=w(1135),ke=w(5472),oe=(w(8834),w(3953),w(3880),w(1911),w(9658)),be=w(5730),Ne=w(697),T=(w(4292),w(4414)),te=(w(3457),w(4349),w(1308)),ne=w(9300),Ee=w(3900),Ce=w(1884),ze=w(6895);const et=oe.i,Ke=["*"],Pt=s=>"function"==typeof __zone_symbol__requestAnimationFrame?__zone_symbol__requestAnimationFrame(s):"function"==typeof requestAnimationFrame?requestAnimationFrame(s):setTimeout(s),Ut=s=>!!s.resolveComponentFactory;let it=(()=>{class s{constructor(a,g){this.injector=a,this.el=g,this.onChange=()=>{},this.onTouched=()=>{}}writeValue(a){this.el.nativeElement.value=this.lastValue=a??"",Xt(this.el)}handleChangeEvent(a,g){a===this.el.nativeElement&&(g!==this.lastValue&&(this.lastValue=g,this.onChange(g)),Xt(this.el))}_handleBlurEvent(a){a===this.el.nativeElement&&(this.onTouched(),Xt(this.el))}registerOnChange(a){this.onChange=a}registerOnTouched(a){this.onTouched=a}setDisabledState(a){this.el.nativeElement.disabled=a}ngOnDestroy(){this.statusChanges&&this.statusChanges.unsubscribe()}ngAfterViewInit(){let a;try{a=this.injector.get(x.a5)}catch{}if(!a)return;a.statusChanges&&(this.statusChanges=a.statusChanges.subscribe(()=>Xt(this.el)));const g=a.control;g&&["markAsTouched","markAllAsTouched","markAsUntouched","markAsDirty","markAsPristine"].forEach(Me=>{if(typeof g[Me]<"u"){const Je=g[Me].bind(g);g[Me]=(...at)=>{Je(...at),Xt(this.el)}}})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,hostBindings:function(a,g){1&a&&o.NdJ("ionBlur",function(Me){return g._handleBlurEvent(Me.target)})}}),s})();const Xt=s=>{Pt(()=>{const c=s.nativeElement,a=null!=c.value&&c.value.toString().length>0,g=kt(c);Vt(c,g);const L=c.closest("ion-item");L&&Vt(L,a?[...g,"item-has-value"]:g)})},kt=s=>{const c=s.classList,a=[];for(let g=0;g{const a=s.classList;a.remove("ion-valid","ion-invalid","ion-touched","ion-untouched","ion-dirty","ion-pristine"),a.add(...c)},rn=(s,c)=>s.substring(0,c.length)===c;let en=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleIonChange(a){this.handleChangeEvent(a,a.value)}registerOnChange(a){super.registerOnChange(g=>{a(""===g?null:parseFloat(g))})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-input","type","number"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleIonChange(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})(),Yt=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleChangeEvent(a){this.handleChangeEvent(a,a.value)}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-range"],["ion-select"],["ion-radio-group"],["ion-segment"],["ion-datetime"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleChangeEvent(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})(),ht=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleInputEvent(a){this.handleChangeEvent(a,a.value)}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-input",3,"type","number"],["ion-textarea"],["ion-searchbar"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleInputEvent(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})();const nt=(s,c)=>{const a=s.prototype;c.forEach(g=>{Object.defineProperty(a,g,{get(){return this.el[g]},set(L){this.z.runOutsideAngular(()=>this.el[g]=L)}})})},Et=(s,c)=>{const a=s.prototype;c.forEach(g=>{a[g]=function(){const L=arguments;return this.z.runOutsideAngular(()=>this.el[g].apply(this.el,L))}})},ut=(s,c,a)=>{a.forEach(g=>s[g]=S(c,g))};function qe(s){return function(a){const{defineCustomElementFn:g,inputs:L,methods:Me}=s;return void 0!==g&&g(),L&&nt(a,L),Me&&Et(a,Me),a}}let Nt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-app"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),Hn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-avatar"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),zt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-back-button"]],inputs:{color:"color",defaultHref:"defaultHref",disabled:"disabled",icon:"icon",mode:"mode",routerAnimation:"routerAnimation",text:"text",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","defaultHref","disabled","icon","mode","routerAnimation","text","type"]})],s),s})(),jn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-badge"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})(),xe=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionFocus","ionBlur"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-button"]],inputs:{buttonType:"buttonType",color:"color",disabled:"disabled",download:"download",expand:"expand",fill:"fill",form:"form",href:"href",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",shape:"shape",size:"size",strong:"strong",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]})],s),s})(),se=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-buttons"]],inputs:{collapse:"collapse"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse"]})],s),s})(),ye=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-card"]],inputs:{button:"button",color:"color",disabled:"disabled",download:"download",href:"href",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]})],s),s})(),_t=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-chip"]],inputs:{color:"color",disabled:"disabled",mode:"mode",outline:"outline"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","disabled","mode","outline"]})],s),s})(),tn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-col"]],inputs:{offset:"offset",offsetLg:"offsetLg",offsetMd:"offsetMd",offsetSm:"offsetSm",offsetXl:"offsetXl",offsetXs:"offsetXs",pull:"pull",pullLg:"pullLg",pullMd:"pullMd",pullSm:"pullSm",pullXl:"pullXl",pullXs:"pullXs",push:"push",pushLg:"pushLg",pushMd:"pushMd",pushSm:"pushSm",pushXl:"pushXl",pushXs:"pushXs",size:"size",sizeLg:"sizeLg",sizeMd:"sizeMd",sizeSm:"sizeSm",sizeXl:"sizeXl",sizeXs:"sizeXs"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["offset","offsetLg","offsetMd","offsetSm","offsetXl","offsetXs","pull","pullLg","pullMd","pullSm","pullXl","pullXs","push","pushLg","pushMd","pushSm","pushXl","pushXs","size","sizeLg","sizeMd","sizeSm","sizeXl","sizeXs"]})],s),s})(),Ln=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionScrollStart","ionScroll","ionScrollEnd"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-content"]],inputs:{color:"color",forceOverscroll:"forceOverscroll",fullscreen:"fullscreen",scrollEvents:"scrollEvents",scrollX:"scrollX",scrollY:"scrollY"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"],methods:["getScrollElement","scrollToTop","scrollToBottom","scrollByPoint","scrollToPoint"]})],s),s})(),ee=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-footer"]],inputs:{collapse:"collapse",mode:"mode",translucent:"translucent"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse","mode","translucent"]})],s),s})(),Se=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-grid"]],inputs:{fixed:"fixed"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["fixed"]})],s),s})(),Le=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-header"]],inputs:{collapse:"collapse",mode:"mode",translucent:"translucent"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse","mode","translucent"]})],s),s})(),yt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-icon"]],inputs:{color:"color",flipRtl:"flipRtl",icon:"icon",ios:"ios",lazy:"lazy",md:"md",mode:"mode",name:"name",sanitize:"sanitize",size:"size",src:"src"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]})],s),s})(),sn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionInput","ionChange","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-input"]],inputs:{accept:"accept",autocapitalize:"autocapitalize",autocomplete:"autocomplete",autocorrect:"autocorrect",autofocus:"autofocus",clearInput:"clearInput",clearOnEdit:"clearOnEdit",color:"color",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",max:"max",maxlength:"maxlength",min:"min",minlength:"minlength",mode:"mode",multiple:"multiple",name:"name",pattern:"pattern",placeholder:"placeholder",readonly:"readonly",required:"required",size:"size",spellcheck:"spellcheck",step:"step",type:"type",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["accept","autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearOnEdit","color","debounce","disabled","enterkeyhint","inputmode","max","maxlength","min","minlength","mode","multiple","name","pattern","placeholder","readonly","required","size","spellcheck","step","type","value"],methods:["setFocus","getInputElement"]})],s),s})(),dn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item"]],inputs:{button:"button",color:"color",counter:"counter",counterFormatter:"counterFormatter",detail:"detail",detailIcon:"detailIcon",disabled:"disabled",download:"download",fill:"fill",href:"href",lines:"lines",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",shape:"shape",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["button","color","counter","counterFormatter","detail","detailIcon","disabled","download","fill","href","lines","mode","rel","routerAnimation","routerDirection","shape","target","type"]})],s),s})(),er=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-divider"]],inputs:{color:"color",mode:"mode",sticky:"sticky"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode","sticky"]})],s),s})(),$n=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-option"]],inputs:{color:"color",disabled:"disabled",download:"download",expandable:"expandable",href:"href",mode:"mode",rel:"rel",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","disabled","download","expandable","href","mode","rel","target","type"]})],s),s})(),Tn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionSwipe"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-options"]],inputs:{side:"side"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["side"]})],s),s})(),xn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionDrag"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-sliding"]],inputs:{disabled:"disabled"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["disabled"],methods:["getOpenAmount","getSlidingRatio","open","close","closeOpened"]})],s),s})(),vn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-label"]],inputs:{color:"color",mode:"mode",position:"position"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode","position"]})],s),s})(),tr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-list"]],inputs:{inset:"inset",lines:"lines",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["inset","lines","mode"],methods:["closeSlidingItems"]})],s),s})(),cr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionWillOpen","ionWillClose","ionDidOpen","ionDidClose"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-menu"]],inputs:{contentId:"contentId",disabled:"disabled",maxEdgeStart:"maxEdgeStart",menuId:"menuId",side:"side",swipeGesture:"swipeGesture",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["contentId","disabled","maxEdgeStart","menuId","side","swipeGesture","type"],methods:["isOpen","isActive","open","close","toggle","setOpen"]})],s),s})(),$t=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-menu-toggle"]],inputs:{autoHide:"autoHide",menu:"menu"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["autoHide","menu"]})],s),s})(),Un=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-note"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})(),le=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-row"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),Ie=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionInput","ionChange","ionCancel","ionClear","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-searchbar"]],inputs:{animated:"animated",autocomplete:"autocomplete",autocorrect:"autocorrect",cancelButtonIcon:"cancelButtonIcon",cancelButtonText:"cancelButtonText",clearIcon:"clearIcon",color:"color",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",mode:"mode",placeholder:"placeholder",searchIcon:"searchIcon",showCancelButton:"showCancelButton",showClearButton:"showClearButton",spellcheck:"spellcheck",type:"type",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["animated","autocomplete","autocorrect","cancelButtonIcon","cancelButtonText","clearIcon","color","debounce","disabled","enterkeyhint","inputmode","mode","placeholder","searchIcon","showCancelButton","showClearButton","spellcheck","type","value"],methods:["setFocus","getInputElement"]})],s),s})(),ot=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionChange","ionCancel","ionDismiss","ionFocus","ionBlur"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-select"]],inputs:{cancelText:"cancelText",compareWith:"compareWith",disabled:"disabled",interface:"interface",interfaceOptions:"interfaceOptions",mode:"mode",multiple:"multiple",name:"name",okText:"okText",placeholder:"placeholder",selectedText:"selectedText",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["cancelText","compareWith","disabled","interface","interfaceOptions","mode","multiple","name","okText","placeholder","selectedText","value"],methods:["open"]})],s),s})(),st=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-select-option"]],inputs:{disabled:"disabled",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["disabled","value"]})],s),s})(),An=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-spinner"]],inputs:{color:"color",duration:"duration",name:"name",paused:"paused"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","duration","name","paused"]})],s),s})(),Rn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionSplitPaneVisible"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-split-pane"]],inputs:{contentId:"contentId",disabled:"disabled",when:"when"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["contentId","disabled","when"]})],s),s})(),an=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionChange","ionInput","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-textarea"]],inputs:{autoGrow:"autoGrow",autocapitalize:"autocapitalize",autofocus:"autofocus",clearOnEdit:"clearOnEdit",color:"color",cols:"cols",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",maxlength:"maxlength",minlength:"minlength",mode:"mode",name:"name",placeholder:"placeholder",readonly:"readonly",required:"required",rows:"rows",spellcheck:"spellcheck",value:"value",wrap:"wrap"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["autoGrow","autocapitalize","autofocus","clearOnEdit","color","cols","debounce","disabled","enterkeyhint","inputmode","maxlength","minlength","mode","name","placeholder","readonly","required","rows","spellcheck","value","wrap"],methods:["setFocus","getInputElement"]})],s),s})(),ho=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-title"]],inputs:{color:"color",size:"size"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","size"]})],s),s})(),jr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-toolbar"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})();class xr{constructor(c={}){this.data=c}get(c){return this.data[c]}}let Or=(()=>{class s{constructor(a,g){this.zone=a,this.appRef=g}create(a,g,L){return new ar(a,g,L,this.appRef,this.zone)}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(o.R0b),o.LFG(o.z2F))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})();class ar{constructor(c,a,g,L,Me){this.resolverOrInjector=c,this.injector=a,this.location=g,this.appRef=L,this.zone=Me,this.elRefMap=new WeakMap,this.elEventsMap=new WeakMap}attachViewToDom(c,a,g,L){return this.zone.run(()=>new Promise(Me=>{Me(Bn(this.zone,this.resolverOrInjector,this.injector,this.location,this.appRef,this.elRefMap,this.elEventsMap,c,a,g,L))}))}removeViewFromDom(c,a){return this.zone.run(()=>new Promise(g=>{const L=this.elRefMap.get(a);if(L){L.destroy(),this.elRefMap.delete(a);const Me=this.elEventsMap.get(a);Me&&(Me(),this.elEventsMap.delete(a))}g()}))}}const Bn=(s,c,a,g,L,Me,Je,at,Dt,Zt,bn)=>{let Ve;const At=o.zs3.create({providers:qn(Zt),parent:a});if(c&&Ut(c)){const $r=c.resolveComponentFactory(Dt);Ve=g?g.createComponent($r,g.length,At):$r.create(At)}else{if(!g)return null;Ve=g.createComponent(Dt,{index:g.indexOf,injector:At,environmentInjector:c})}const yr=Ve.instance,Dr=Ve.location.nativeElement;if(Zt&&Object.assign(yr,Zt),bn)for(const $r of bn)Dr.classList.add($r);const Mn=Fn(s,yr,Dr);return at.appendChild(Dr),g||L.attachView(Ve.hostView),Ve.changeDetectorRef.reattach(),Me.set(Dr,Ve),Je.set(Dr,Mn),Dr},po=[Ne.L,Ne.a,Ne.b,Ne.c,Ne.d],Fn=(s,c,a)=>s.run(()=>{const g=po.filter(L=>"function"==typeof c[L]).map(L=>{const Me=Je=>c[L](Je.detail);return a.addEventListener(L,Me),()=>a.removeEventListener(L,Me)});return()=>g.forEach(L=>L())}),zn=new o.OlP("NavParamsToken"),qn=s=>[{provide:zn,useValue:s},{provide:xr,useFactory:dr,deps:[zn]}],dr=s=>new xr(s),Gn=(s,c)=>((s=s.filter(a=>a.stackId!==c.stackId)).push(c),s),vr=(s,c)=>{const a=s.createUrlTree(["."],{relativeTo:c});return s.serializeUrl(a)},Pr=(s,c)=>{if(!s)return;const a=xo(c);for(let g=0;g=s.length)return a[g];if(a[g]!==s[g])return}},xo=s=>s.split("/").map(c=>c.trim()).filter(c=>""!==c),vo=s=>{s&&(s.ref.destroy(),s.unlistenEvents())};class yo{constructor(c,a,g,L,Me,Je){this.containerEl=a,this.router=g,this.navCtrl=L,this.zone=Me,this.location=Je,this.views=[],this.skipTransition=!1,this.nextId=0,this.tabsPrefix=void 0!==c?xo(c):void 0}createView(c,a){var g;const L=vr(this.router,a),Me=null===(g=c?.location)||void 0===g?void 0:g.nativeElement,Je=Fn(this.zone,c.instance,Me);return{id:this.nextId++,stackId:Pr(this.tabsPrefix,L),unlistenEvents:Je,element:Me,ref:c,url:L}}getExistingView(c){const a=vr(this.router,c),g=this.views.find(L=>L.url===a);return g&&g.ref.changeDetectorRef.reattach(),g}setActive(c){var a,g;const L=this.navCtrl.consumeTransition();let{direction:Me,animation:Je,animationBuilder:at}=L;const Dt=this.activeView,Zt=((s,c)=>!c||s.stackId!==c.stackId)(c,Dt);Zt&&(Me="back",Je=void 0);const bn=this.views.slice();let Ve;const At=this.router;At.getCurrentNavigation?Ve=At.getCurrentNavigation():!(null===(a=At.navigations)||void 0===a)&&a.value&&(Ve=At.navigations.value),null!==(g=Ve?.extras)&&void 0!==g&&g.replaceUrl&&this.views.length>0&&this.views.splice(-1,1);const yr=this.views.includes(c),Dr=this.insertView(c,Me);yr||c.ref.changeDetectorRef.detectChanges();const Mn=c.animationBuilder;return void 0===at&&"back"===Me&&!Zt&&void 0!==Mn&&(at=Mn),Dt&&(Dt.animationBuilder=at),this.zone.runOutsideAngular(()=>this.wait(()=>(Dt&&Dt.ref.changeDetectorRef.detach(),c.ref.changeDetectorRef.reattach(),this.transition(c,Dt,Je,this.canGoBack(1),!1,at).then(()=>Oo(c,Dr,bn,this.location,this.zone)).then(()=>({enteringView:c,direction:Me,animation:Je,tabSwitch:Zt})))))}canGoBack(c,a=this.getActiveStackId()){return this.getStack(a).length>c}pop(c,a=this.getActiveStackId()){return this.zone.run(()=>{var g,L;const Me=this.getStack(a);if(Me.length<=c)return Promise.resolve(!1);const Je=Me[Me.length-c-1];let at=Je.url;const Dt=Je.savedData;if(Dt){const bn=Dt.get("primary");null!==(L=null===(g=bn?.route)||void 0===g?void 0:g._routerState)&&void 0!==L&&L.snapshot.url&&(at=bn.route._routerState.snapshot.url)}const{animationBuilder:Zt}=this.navCtrl.consumeTransition();return this.navCtrl.navigateBack(at,Object.assign(Object.assign({},Je.savedExtras),{animation:Zt})).then(()=>!0)})}startBackTransition(){const c=this.activeView;if(c){const a=this.getStack(c.stackId),g=a[a.length-2],L=g.animationBuilder;return this.wait(()=>this.transition(g,c,"back",this.canGoBack(2),!0,L))}return Promise.resolve()}endBackTransition(c){c?(this.skipTransition=!0,this.pop(1)):this.activeView&&Jr(this.activeView,this.views,this.views,this.location,this.zone)}getLastUrl(c){const a=this.getStack(c);return a.length>0?a[a.length-1]:void 0}getRootUrl(c){const a=this.getStack(c);return a.length>0?a[0]:void 0}getActiveStackId(){return this.activeView?this.activeView.stackId:void 0}hasRunningTask(){return void 0!==this.runningTask}destroy(){this.containerEl=void 0,this.views.forEach(vo),this.activeView=void 0,this.views=[]}getStack(c){return this.views.filter(a=>a.stackId===c)}insertView(c,a){return this.activeView=c,this.views=((s,c,a)=>"root"===a?Gn(s,c):"forward"===a?((s,c)=>(s.indexOf(c)>=0?s=s.filter(g=>g.stackId!==c.stackId||g.id<=c.id):s.push(c),s))(s,c):((s,c)=>s.indexOf(c)>=0?s.filter(g=>g.stackId!==c.stackId||g.id<=c.id):Gn(s,c))(s,c))(this.views,c,a),this.views.slice()}transition(c,a,g,L,Me,Je){if(this.skipTransition)return this.skipTransition=!1,Promise.resolve(!1);if(a===c)return Promise.resolve(!1);const at=c?c.element:void 0,Dt=a?a.element:void 0,Zt=this.containerEl;return at&&at!==Dt&&(at.classList.add("ion-page"),at.classList.add("ion-page-invisible"),at.parentElement!==Zt&&Zt.appendChild(at),Zt.commit)?Zt.commit(at,Dt,{deepWait:!0,duration:void 0===g?0:void 0,direction:g,showGoBack:L,progressAnimation:Me,animationBuilder:Je}):Promise.resolve(!1)}wait(c){return(0,N.mG)(this,void 0,void 0,function*(){void 0!==this.runningTask&&(yield this.runningTask,this.runningTask=void 0);const a=this.runningTask=c();return a.finally(()=>this.runningTask=void 0),a})}}const Oo=(s,c,a,g,L)=>"function"==typeof requestAnimationFrame?new Promise(Me=>{requestAnimationFrame(()=>{Jr(s,c,a,g,L),Me()})}):Promise.resolve(),Jr=(s,c,a,g,L)=>{L.run(()=>a.filter(Me=>!c.includes(Me)).forEach(vo)),c.forEach(Me=>{const at=g.path().split("?")[0].split("#")[0];if(Me!==s&&Me.url!==at){const Dt=Me.element;Dt.setAttribute("aria-hidden","true"),Dt.classList.add("ion-page-hidden"),Me.ref.changeDetectorRef.detach()}})};let Go=(()=>{class s{get(a,g){const L=Yo();return L?L.get(a,g):null}getBoolean(a,g){const L=Yo();return!!L&&L.getBoolean(a,g)}getNumber(a,g){const L=Yo();return L?L.getNumber(a,g):0}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Fr=new o.OlP("USERCONFIG"),Yo=()=>{if(typeof window<"u"){const s=window.Ionic;if(s?.config)return s.config}return null};let si=(()=>{class s{constructor(a,g){this.doc=a,this.backButton=new K.x,this.keyboardDidShow=new K.x,this.keyboardDidHide=new K.x,this.pause=new K.x,this.resume=new K.x,this.resize=new K.x,g.run(()=>{var L;let Me;this.win=a.defaultView,this.backButton.subscribeWithPriority=function(Je,at){return this.subscribe(Dt=>Dt.register(Je,Zt=>g.run(()=>at(Zt))))},Ur(this.pause,a,"pause"),Ur(this.resume,a,"resume"),Ur(this.backButton,a,"ionBackButton"),Ur(this.resize,this.win,"resize"),Ur(this.keyboardDidShow,this.win,"ionKeyboardDidShow"),Ur(this.keyboardDidHide,this.win,"ionKeyboardDidHide"),this._readyPromise=new Promise(Je=>{Me=Je}),null!==(L=this.win)&&void 0!==L&&L.cordova?a.addEventListener("deviceready",()=>{Me("cordova")},{once:!0}):Me("dom")})}is(a){return(0,oe.a)(this.win,a)}platforms(){return(0,oe.g)(this.win)}ready(){return this._readyPromise}get isRTL(){return"rtl"===this.doc.dir}getQueryParam(a){return Ro(this.win.location.href,a)}isLandscape(){return!this.isPortrait()}isPortrait(){var a,g;return null===(g=(a=this.win).matchMedia)||void 0===g?void 0:g.call(a,"(orientation: portrait)").matches}testUserAgent(a){const g=this.win.navigator;return!!(g?.userAgent&&g.userAgent.indexOf(a)>=0)}url(){return this.win.location.href}width(){return this.win.innerWidth}height(){return this.win.innerHeight}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(ze.K0),o.LFG(o.R0b))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Ro=(s,c)=>{c=c.replace(/[[\]\\]/g,"\\$&");const g=new RegExp("[\\?&]"+c+"=([^&#]*)").exec(s);return g?decodeURIComponent(g[1].replace(/\+/g," ")):null},Ur=(s,c,a)=>{c&&c.addEventListener(a,g=>{s.next(g?.detail)})};let zr=(()=>{class s{constructor(a,g,L,Me){this.location=g,this.serializer=L,this.router=Me,this.direction=Gr,this.animated=Yr,this.guessDirection="forward",this.lastNavId=-1,Me&&Me.events.subscribe(Je=>{if(Je instanceof ke.OD){const at=Je.restoredState?Je.restoredState.navigationId:Je.id;this.guessDirection=at{this.pop(),Je()})}navigateForward(a,g={}){return this.setDirection("forward",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}navigateBack(a,g={}){return this.setDirection("back",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}navigateRoot(a,g={}){return this.setDirection("root",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}back(a={animated:!0,animationDirection:"back"}){return this.setDirection("back",a.animated,a.animationDirection,a.animation),this.location.back()}pop(){return(0,N.mG)(this,void 0,void 0,function*(){let a=this.topOutlet;for(;a&&!(yield a.pop());)a=a.parentOutlet})}setDirection(a,g,L,Me){this.direction=a,this.animated=Do(a,g,L),this.animationBuilder=Me}setTopOutlet(a){this.topOutlet=a}consumeTransition(){let g,a="root";const L=this.animationBuilder;return"auto"===this.direction?(a=this.guessDirection,g=this.guessAnimation):(g=this.animated,a=this.direction),this.direction=Gr,this.animated=Yr,this.animationBuilder=void 0,{direction:a,animation:g,animationBuilder:L}}navigate(a,g){if(Array.isArray(a))return this.router.navigate(a,g);{const L=this.serializer.parse(a.toString());return void 0!==g.queryParams&&(L.queryParams=Object.assign({},g.queryParams)),void 0!==g.fragment&&(L.fragment=g.fragment),this.router.navigateByUrl(L,g)}}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(si),o.LFG(ze.Ye),o.LFG(ke.Hx),o.LFG(ke.F0,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Do=(s,c,a)=>{if(!1!==c){if(void 0!==a)return a;if("forward"===s||"back"===s)return s;if("root"===s&&!0===c)return"forward"}},Gr="auto",Yr=void 0;let fr=(()=>{class s{constructor(a,g,L,Me,Je,at,Dt,Zt,bn,Ve,At,yr,Dr){this.parentContexts=a,this.location=g,this.config=Je,this.navCtrl=at,this.componentFactoryResolver=Dt,this.parentOutlet=Dr,this.activated=null,this.activatedView=null,this._activatedRoute=null,this.proxyMap=new WeakMap,this.currentActivatedRoute$=new pe.X(null),this.stackEvents=new o.vpe,this.activateEvents=new o.vpe,this.deactivateEvents=new o.vpe,this.nativeEl=bn.nativeElement,this.name=L||ke.eC,this.tabsPrefix="true"===Me?vr(Ve,yr):void 0,this.stackCtrl=new yo(this.tabsPrefix,this.nativeEl,Ve,at,At,Zt),a.onChildOutletCreated(this.name,this)}set animation(a){this.nativeEl.animation=a}set animated(a){this.nativeEl.animated=a}set swipeGesture(a){this._swipeGesture=a,this.nativeEl.swipeHandler=a?{canStart:()=>this.stackCtrl.canGoBack(1)&&!this.stackCtrl.hasRunningTask(),onStart:()=>this.stackCtrl.startBackTransition(),onEnd:g=>this.stackCtrl.endBackTransition(g)}:void 0}ngOnDestroy(){this.stackCtrl.destroy()}getContext(){return this.parentContexts.getContext(this.name)}ngOnInit(){if(!this.activated){const a=this.getContext();a?.route&&this.activateWith(a.route,a.resolver||null)}new Promise(a=>(0,be.c)(this.nativeEl,a)).then(()=>{void 0===this._swipeGesture&&(this.swipeGesture=this.config.getBoolean("swipeBackEnabled","ios"===this.nativeEl.mode))})}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new Error("Outlet is not activated");return this.activated.instance}get activatedRoute(){if(!this.activated)throw new Error("Outlet is not activated");return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){throw new Error("incompatible reuse strategy")}attach(a,g){throw new Error("incompatible reuse strategy")}deactivate(){if(this.activated){if(this.activatedView){const g=this.getContext();this.activatedView.savedData=new Map(g.children.contexts);const L=this.activatedView.savedData.get("primary");if(L&&g.route&&(L.route=Object.assign({},g.route)),this.activatedView.savedExtras={},g.route){const Me=g.route.snapshot;this.activatedView.savedExtras.queryParams=Me.queryParams,this.activatedView.savedExtras.fragment=Me.fragment}}const a=this.component;this.activatedView=null,this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(a)}}activateWith(a,g){var L;if(this.isActivated)throw new Error("Cannot activate an already activated outlet");this._activatedRoute=a;let Me,Je=this.stackCtrl.getExistingView(a);if(Je){Me=this.activated=Je.ref;const at=Je.savedData;at&&(this.getContext().children.contexts=at),this.updateActivatedRouteProxy(Me.instance,a)}else{const at=a._futureSnapshot;if(null==at.routeConfig.component&&null==this.environmentInjector)return void console.warn('[Ionic Warning]: You must supply an environmentInjector to use standalone components with routing:\n\nIn your component class, add:\n\n import { EnvironmentInjector } from \'@angular/core\';\n constructor(public environmentInjector: EnvironmentInjector) {}\n\nIn your router outlet template, add:\n\n \n\nAlternatively, if you are routing within ion-tabs:\n\n ');const Dt=this.parentContexts.getOrCreateContext(this.name).children,Zt=new pe.X(null),bn=this.createActivatedRouteProxy(Zt,a),Ve=new hr(bn,Dt,this.location.injector),At=null!==(L=at.routeConfig.component)&&void 0!==L?L:at.component;if((g=g||this.componentFactoryResolver)&&Ut(g)){const yr=g.resolveComponentFactory(At);Me=this.activated=this.location.createComponent(yr,this.location.length,Ve)}else Me=this.activated=this.location.createComponent(At,{index:this.location.length,injector:Ve,environmentInjector:g??this.environmentInjector});Zt.next(Me.instance),Je=this.stackCtrl.createView(this.activated,a),this.proxyMap.set(Me.instance,bn),this.currentActivatedRoute$.next({component:Me.instance,activatedRoute:a})}this.activatedView=Je,this.navCtrl.setTopOutlet(this),this.stackCtrl.setActive(Je).then(at=>{this.activateEvents.emit(Me.instance),this.stackEvents.emit(at)})}canGoBack(a=1,g){return this.stackCtrl.canGoBack(a,g)}pop(a=1,g){return this.stackCtrl.pop(a,g)}getLastUrl(a){const g=this.stackCtrl.getLastUrl(a);return g?g.url:void 0}getLastRouteView(a){return this.stackCtrl.getLastUrl(a)}getRootView(a){return this.stackCtrl.getRootUrl(a)}getActiveStackId(){return this.stackCtrl.getActiveStackId()}createActivatedRouteProxy(a,g){const L=new ke.gz;return L._futureSnapshot=g._futureSnapshot,L._routerState=g._routerState,L.snapshot=g.snapshot,L.outlet=g.outlet,L.component=g.component,L._paramMap=this.proxyObservable(a,"paramMap"),L._queryParamMap=this.proxyObservable(a,"queryParamMap"),L.url=this.proxyObservable(a,"url"),L.params=this.proxyObservable(a,"params"),L.queryParams=this.proxyObservable(a,"queryParams"),L.fragment=this.proxyObservable(a,"fragment"),L.data=this.proxyObservable(a,"data"),L}proxyObservable(a,g){return a.pipe((0,ne.h)(L=>!!L),(0,Ee.w)(L=>this.currentActivatedRoute$.pipe((0,ne.h)(Me=>null!==Me&&Me.component===L),(0,Ee.w)(Me=>Me&&Me.activatedRoute[g]),(0,Ce.x)())))}updateActivatedRouteProxy(a,g){const L=this.proxyMap.get(a);if(!L)throw new Error("Could not find activated route proxy for view");L._futureSnapshot=g._futureSnapshot,L._routerState=g._routerState,L.snapshot=g.snapshot,L.outlet=g.outlet,L.component=g.component,this.currentActivatedRoute$.next({component:a,activatedRoute:g})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(ke.y6),o.Y36(o.s_b),o.$8M("name"),o.$8M("tabs"),o.Y36(Go),o.Y36(zr),o.Y36(o._Vd,8),o.Y36(ze.Ye),o.Y36(o.SBq),o.Y36(ke.F0),o.Y36(o.R0b),o.Y36(ke.gz),o.Y36(s,12))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-router-outlet"]],inputs:{animated:"animated",animation:"animation",mode:"mode",swipeGesture:"swipeGesture",environmentInjector:"environmentInjector"},outputs:{stackEvents:"stackEvents",activateEvents:"activate",deactivateEvents:"deactivate"},exportAs:["outlet"]}),s})();class hr{constructor(c,a,g){this.route=c,this.childContexts=a,this.parent=g}get(c,a){return c===ke.gz?this.route:c===ke.y6?this.childContexts:this.parent.get(c,a)}}let nr=(()=>{class s{constructor(a,g,L){this.routerOutlet=a,this.navCtrl=g,this.config=L}onClick(a){var g;const L=this.defaultHref||this.config.get("backButtonDefaultHref");null!==(g=this.routerOutlet)&&void 0!==g&&g.canGoBack()?(this.navCtrl.setDirection("back",void 0,void 0,this.routerAnimation),this.routerOutlet.pop(),a.preventDefault()):null!=L&&(this.navCtrl.navigateBack(L,{animation:this.routerAnimation}),a.preventDefault())}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(fr,8),o.Y36(zr),o.Y36(Go))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-back-button"]],hostBindings:function(a,g){1&a&&o.NdJ("click",function(Me){return g.onClick(Me)})},inputs:{defaultHref:"defaultHref",routerAnimation:"routerAnimation"}}),s})();class kn{constructor(c){this.ctrl=c}create(c){return this.ctrl.create(c||{})}dismiss(c,a,g){return this.ctrl.dismiss(c,a,g)}getTop(){return this.ctrl.getTop()}}let Nr=(()=>{class s extends kn{constructor(){super(T.b)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})(),Zn=(()=>{class s extends kn{constructor(){super(T.a)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})(),Lr=(()=>{class s extends kn{constructor(){super(T.l)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();class Sn{}let Fo=(()=>{class s extends kn{constructor(a,g,L,Me){super(T.m),this.angularDelegate=a,this.resolver=g,this.injector=L,this.environmentInjector=Me}create(a){var g;return super.create(Object.assign(Object.assign({},a),{delegate:this.angularDelegate.create(null!==(g=this.resolver)&&void 0!==g?g:this.environmentInjector,this.injector)}))}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(Or),o.LFG(o._Vd),o.LFG(o.zs3),o.LFG(Sn,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})(),wo=(()=>{class s extends kn{constructor(a,g,L,Me){super(T.c),this.angularDelegate=a,this.resolver=g,this.injector=L,this.environmentInjector=Me}create(a){var g;return super.create(Object.assign(Object.assign({},a),{delegate:this.angularDelegate.create(null!==(g=this.resolver)&&void 0!==g?g:this.environmentInjector,this.injector)}))}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(Or),o.LFG(o._Vd),o.LFG(o.zs3),o.LFG(Sn,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})(),ko=(()=>{class s extends kn{constructor(){super(T.t)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();class rr{shouldDetach(c){return!1}shouldAttach(c){return!1}store(c,a){}retrieve(c){return null}shouldReuseRoute(c,a){if(c.routeConfig!==a.routeConfig)return!1;const g=c.params,L=a.params,Me=Object.keys(g),Je=Object.keys(L);if(Me.length!==Je.length)return!1;for(const at of Me)if(L[at]!==g[at])return!1;return!0}}const ro=(s,c,a)=>()=>{if(c.defaultView&&typeof window<"u"){(s=>{const c=window,a=c.Ionic;a&&a.config&&"Object"!==a.config.constructor.name||(c.Ionic=c.Ionic||{},c.Ionic.config=Object.assign(Object.assign({},c.Ionic.config),s))})(Object.assign(Object.assign({},s),{_zoneGate:Me=>a.run(Me)}));const L="__zone_symbol__addEventListener"in c.body?"__zone_symbol__addEventListener":"addEventListener";return function dt(){var s=[];if(typeof window<"u"){var c=window;(!c.customElements||c.Element&&(!c.Element.prototype.closest||!c.Element.prototype.matches||!c.Element.prototype.remove||!c.Element.prototype.getRootNode))&&s.push(w.e(6748).then(w.t.bind(w,723,23))),("function"!=typeof Object.assign||!Object.entries||!Array.prototype.find||!Array.prototype.includes||!String.prototype.startsWith||!String.prototype.endsWith||c.NodeList&&!c.NodeList.prototype.forEach||!c.fetch||!function(){try{var g=new URL("b","http://a");return g.pathname="c%20d","http://a/c%20d"===g.href&&g.searchParams}catch{return!1}}()||typeof WeakMap>"u")&&s.push(w.e(2214).then(w.t.bind(w,4144,23)))}return Promise.all(s)}().then(()=>((s,c)=>typeof window>"u"?Promise.resolve():(0,te.p)().then(()=>(et(),(0,te.b)(JSON.parse('[["ion-menu_3",[[33,"ion-menu-button",{"color":[513],"disabled":[4],"menu":[1],"autoHide":[4,"auto-hide"],"type":[1],"visible":[32]},[[16,"ionMenuChange","visibilityChanged"],[16,"ionSplitPaneVisible","visibilityChanged"]]],[33,"ion-menu",{"contentId":[513,"content-id"],"menuId":[513,"menu-id"],"type":[1025],"disabled":[1028],"side":[513],"swipeGesture":[4,"swipe-gesture"],"maxEdgeStart":[2,"max-edge-start"],"isPaneVisible":[32],"isEndSide":[32],"isOpen":[64],"isActive":[64],"open":[64],"close":[64],"toggle":[64],"setOpen":[64]},[[16,"ionSplitPaneVisible","onSplitPaneChanged"],[2,"click","onBackdropClick"],[0,"keydown","onKeydown"]]],[1,"ion-menu-toggle",{"menu":[1],"autoHide":[4,"auto-hide"],"visible":[32]},[[16,"ionMenuChange","visibilityChanged"],[16,"ionSplitPaneVisible","visibilityChanged"]]]]],["ion-fab_3",[[33,"ion-fab-button",{"color":[513],"activated":[4],"disabled":[4],"download":[1],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1],"show":[4],"translucent":[4],"type":[1],"size":[1],"closeIcon":[1,"close-icon"]}],[1,"ion-fab",{"horizontal":[1],"vertical":[1],"edge":[4],"activated":[1028],"close":[64],"toggle":[64]}],[1,"ion-fab-list",{"activated":[4],"side":[1]}]]],["ion-refresher_2",[[0,"ion-refresher-content",{"pullingIcon":[1025,"pulling-icon"],"pullingText":[1,"pulling-text"],"refreshingSpinner":[1025,"refreshing-spinner"],"refreshingText":[1,"refreshing-text"]}],[32,"ion-refresher",{"pullMin":[2,"pull-min"],"pullMax":[2,"pull-max"],"closeDuration":[1,"close-duration"],"snapbackDuration":[1,"snapback-duration"],"pullFactor":[2,"pull-factor"],"disabled":[4],"nativeRefresher":[32],"state":[32],"complete":[64],"cancel":[64],"getProgress":[64]}]]],["ion-back-button",[[33,"ion-back-button",{"color":[513],"defaultHref":[1025,"default-href"],"disabled":[516],"icon":[1],"text":[1],"type":[1],"routerAnimation":[16]}]]],["ion-toast",[[33,"ion-toast",{"overlayIndex":[2,"overlay-index"],"color":[513],"enterAnimation":[16],"leaveAnimation":[16],"cssClass":[1,"css-class"],"duration":[2],"header":[1],"message":[1],"keyboardClose":[4,"keyboard-close"],"position":[1],"buttons":[16],"translucent":[4],"animated":[4],"icon":[1],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-card_5",[[33,"ion-card",{"color":[513],"button":[4],"type":[1],"disabled":[4],"download":[1],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1]}],[32,"ion-card-content"],[33,"ion-card-header",{"color":[513],"translucent":[4]}],[33,"ion-card-subtitle",{"color":[513]}],[33,"ion-card-title",{"color":[513]}]]],["ion-item-option_3",[[33,"ion-item-option",{"color":[513],"disabled":[4],"download":[1],"expandable":[4],"href":[1],"rel":[1],"target":[1],"type":[1]}],[32,"ion-item-options",{"side":[1],"fireSwipeEvent":[64]}],[0,"ion-item-sliding",{"disabled":[4],"state":[32],"getOpenAmount":[64],"getSlidingRatio":[64],"open":[64],"close":[64],"closeOpened":[64]}]]],["ion-accordion_2",[[49,"ion-accordion",{"value":[1],"disabled":[4],"readonly":[4],"toggleIcon":[1,"toggle-icon"],"toggleIconSlot":[1,"toggle-icon-slot"],"state":[32],"isNext":[32],"isPrevious":[32]}],[33,"ion-accordion-group",{"animated":[4],"multiple":[4],"value":[1025],"disabled":[4],"readonly":[4],"expand":[1],"requestAccordionToggle":[64],"getAccordions":[64]},[[0,"keydown","onKeydown"]]]]],["ion-breadcrumb_2",[[33,"ion-breadcrumb",{"collapsed":[4],"last":[4],"showCollapsedIndicator":[4,"show-collapsed-indicator"],"color":[1],"active":[4],"disabled":[4],"download":[1],"href":[1],"rel":[1],"separator":[4],"target":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16]}],[33,"ion-breadcrumbs",{"color":[1],"maxItems":[2,"max-items"],"itemsBeforeCollapse":[2,"items-before-collapse"],"itemsAfterCollapse":[2,"items-after-collapse"],"collapsed":[32],"activeChanged":[32]},[[0,"collapsedClick","onCollapsedClick"]]]]],["ion-infinite-scroll_2",[[32,"ion-infinite-scroll-content",{"loadingSpinner":[1025,"loading-spinner"],"loadingText":[1,"loading-text"]}],[0,"ion-infinite-scroll",{"threshold":[1],"disabled":[4],"position":[1],"isLoading":[32],"complete":[64]}]]],["ion-reorder_2",[[33,"ion-reorder",null,[[2,"click","onClick"]]],[0,"ion-reorder-group",{"disabled":[4],"state":[32],"complete":[64]}]]],["ion-segment_2",[[33,"ion-segment-button",{"disabled":[4],"layout":[1],"type":[1],"value":[1],"checked":[32]}],[33,"ion-segment",{"color":[513],"disabled":[4],"scrollable":[4],"swipeGesture":[4,"swipe-gesture"],"value":[1025],"selectOnFocus":[4,"select-on-focus"],"activated":[32]},[[0,"keydown","onKeyDown"]]]]],["ion-tab-bar_2",[[33,"ion-tab-button",{"disabled":[4],"download":[1],"href":[1],"rel":[1],"layout":[1025],"selected":[1028],"tab":[1],"target":[1]},[[8,"ionTabBarChanged","onTabBarChanged"]]],[33,"ion-tab-bar",{"color":[513],"selectedTab":[1,"selected-tab"],"translucent":[4],"keyboardVisible":[32]}]]],["ion-chip",[[1,"ion-chip",{"color":[513],"outline":[4],"disabled":[4]}]]],["ion-datetime-button",[[33,"ion-datetime-button",{"color":[513],"disabled":[516],"datetime":[1],"datetimePresentation":[32],"dateText":[32],"timeText":[32],"datetimeActive":[32],"selectedButton":[32]}]]],["ion-searchbar",[[34,"ion-searchbar",{"color":[513],"animated":[4],"autocomplete":[1],"autocorrect":[1],"cancelButtonIcon":[1,"cancel-button-icon"],"cancelButtonText":[1,"cancel-button-text"],"clearIcon":[1,"clear-icon"],"debounce":[2],"disabled":[4],"inputmode":[1],"enterkeyhint":[1],"placeholder":[1],"searchIcon":[1,"search-icon"],"showCancelButton":[1,"show-cancel-button"],"showClearButton":[1,"show-clear-button"],"spellcheck":[4],"type":[1],"value":[1025],"focused":[32],"noAnimate":[32],"setFocus":[64],"getInputElement":[64]}]]],["ion-toggle",[[33,"ion-toggle",{"color":[513],"name":[1],"checked":[1028],"disabled":[4],"value":[1],"enableOnOffLabels":[4,"enable-on-off-labels"],"activated":[32]}]]],["ion-nav_2",[[1,"ion-nav",{"delegate":[16],"swipeGesture":[1028,"swipe-gesture"],"animated":[4],"animation":[16],"rootParams":[16],"root":[1],"push":[64],"insert":[64],"insertPages":[64],"pop":[64],"popTo":[64],"popToRoot":[64],"removeIndex":[64],"setRoot":[64],"setPages":[64],"setRouteId":[64],"getRouteId":[64],"getActive":[64],"getByIndex":[64],"canGoBack":[64],"getPrevious":[64]}],[0,"ion-nav-link",{"component":[1],"componentProps":[16],"routerDirection":[1,"router-direction"],"routerAnimation":[16]}]]],["ion-input",[[34,"ion-input",{"fireFocusEvents":[4,"fire-focus-events"],"color":[513],"accept":[1],"autocapitalize":[1],"autocomplete":[1],"autocorrect":[1],"autofocus":[4],"clearInput":[4,"clear-input"],"clearOnEdit":[4,"clear-on-edit"],"debounce":[2],"disabled":[4],"enterkeyhint":[1],"inputmode":[1],"max":[8],"maxlength":[2],"min":[8],"minlength":[2],"multiple":[4],"name":[1],"pattern":[1],"placeholder":[1],"readonly":[4],"required":[4],"spellcheck":[4],"step":[1],"size":[2],"type":[1],"value":[1032],"hasFocus":[32],"setFocus":[64],"setBlur":[64],"getInputElement":[64]}]]],["ion-textarea",[[34,"ion-textarea",{"fireFocusEvents":[4,"fire-focus-events"],"color":[513],"autocapitalize":[1],"autofocus":[4],"clearOnEdit":[1028,"clear-on-edit"],"debounce":[2],"disabled":[4],"inputmode":[1],"enterkeyhint":[1],"maxlength":[2],"minlength":[2],"name":[1],"placeholder":[1],"readonly":[4],"required":[4],"spellcheck":[4],"cols":[2],"rows":[2],"wrap":[1],"autoGrow":[516,"auto-grow"],"value":[1025],"hasFocus":[32],"setFocus":[64],"setBlur":[64],"getInputElement":[64]}]]],["ion-backdrop",[[33,"ion-backdrop",{"visible":[4],"tappable":[4],"stopPropagation":[4,"stop-propagation"]},[[2,"click","onMouseDown"]]]]],["ion-loading",[[34,"ion-loading",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"message":[1],"cssClass":[1,"css-class"],"duration":[2],"backdropDismiss":[4,"backdrop-dismiss"],"showBackdrop":[4,"show-backdrop"],"spinner":[1025],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-modal",[[33,"ion-modal",{"hasController":[4,"has-controller"],"overlayIndex":[2,"overlay-index"],"delegate":[16],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"breakpoints":[16],"initialBreakpoint":[2,"initial-breakpoint"],"backdropBreakpoint":[2,"backdrop-breakpoint"],"handle":[4],"handleBehavior":[1,"handle-behavior"],"component":[1],"componentProps":[16],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"showBackdrop":[4,"show-backdrop"],"animated":[4],"swipeToClose":[4,"swipe-to-close"],"presentingElement":[16],"htmlAttributes":[16],"isOpen":[4,"is-open"],"trigger":[1],"keepContentsMounted":[4,"keep-contents-mounted"],"canDismiss":[4,"can-dismiss"],"presented":[32],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64],"setCurrentBreakpoint":[64],"getCurrentBreakpoint":[64]}]]],["ion-route_4",[[0,"ion-route",{"url":[1],"component":[1],"componentProps":[16],"beforeLeave":[16],"beforeEnter":[16]}],[0,"ion-route-redirect",{"from":[1],"to":[1]}],[0,"ion-router",{"root":[1],"useHash":[4,"use-hash"],"canTransition":[64],"push":[64],"back":[64],"printDebug":[64],"navChanged":[64]},[[8,"popstate","onPopState"],[4,"ionBackButton","onBackButton"]]],[1,"ion-router-link",{"color":[513],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1]}]]],["ion-avatar_3",[[33,"ion-avatar"],[33,"ion-badge",{"color":[513]}],[1,"ion-thumbnail"]]],["ion-col_3",[[1,"ion-col",{"offset":[1],"offsetXs":[1,"offset-xs"],"offsetSm":[1,"offset-sm"],"offsetMd":[1,"offset-md"],"offsetLg":[1,"offset-lg"],"offsetXl":[1,"offset-xl"],"pull":[1],"pullXs":[1,"pull-xs"],"pullSm":[1,"pull-sm"],"pullMd":[1,"pull-md"],"pullLg":[1,"pull-lg"],"pullXl":[1,"pull-xl"],"push":[1],"pushXs":[1,"push-xs"],"pushSm":[1,"push-sm"],"pushMd":[1,"push-md"],"pushLg":[1,"push-lg"],"pushXl":[1,"push-xl"],"size":[1],"sizeXs":[1,"size-xs"],"sizeSm":[1,"size-sm"],"sizeMd":[1,"size-md"],"sizeLg":[1,"size-lg"],"sizeXl":[1,"size-xl"]},[[9,"resize","onResize"]]],[1,"ion-grid",{"fixed":[4]}],[1,"ion-row"]]],["ion-slide_2",[[0,"ion-slide"],[36,"ion-slides",{"options":[8],"pager":[4],"scrollbar":[4],"update":[64],"updateAutoHeight":[64],"slideTo":[64],"slideNext":[64],"slidePrev":[64],"getActiveIndex":[64],"getPreviousIndex":[64],"length":[64],"isEnd":[64],"isBeginning":[64],"startAutoplay":[64],"stopAutoplay":[64],"lockSwipeToNext":[64],"lockSwipeToPrev":[64],"lockSwipes":[64],"getSwiper":[64]}]]],["ion-tab_2",[[1,"ion-tab",{"active":[1028],"delegate":[16],"tab":[1],"component":[1],"setActive":[64]}],[1,"ion-tabs",{"useRouter":[1028,"use-router"],"selectedTab":[32],"select":[64],"getTab":[64],"getSelected":[64],"setRouteId":[64],"getRouteId":[64]}]]],["ion-img",[[1,"ion-img",{"alt":[1],"src":[1],"loadSrc":[32],"loadError":[32]}]]],["ion-progress-bar",[[33,"ion-progress-bar",{"type":[1],"reversed":[4],"value":[2],"buffer":[2],"color":[513]}]]],["ion-range",[[33,"ion-range",{"color":[513],"debounce":[2],"name":[1],"dualKnobs":[4,"dual-knobs"],"min":[2],"max":[2],"pin":[4],"pinFormatter":[16],"snaps":[4],"step":[2],"ticks":[4],"activeBarStart":[1026,"active-bar-start"],"disabled":[4],"value":[1026],"ratioA":[32],"ratioB":[32],"pressedKnob":[32]}]]],["ion-split-pane",[[33,"ion-split-pane",{"contentId":[513,"content-id"],"disabled":[4],"when":[8],"visible":[32]}]]],["ion-text",[[1,"ion-text",{"color":[513]}]]],["ion-virtual-scroll",[[0,"ion-virtual-scroll",{"approxItemHeight":[2,"approx-item-height"],"approxHeaderHeight":[2,"approx-header-height"],"approxFooterHeight":[2,"approx-footer-height"],"headerFn":[16],"footerFn":[16],"items":[16],"itemHeight":[16],"headerHeight":[16],"footerHeight":[16],"renderItem":[16],"renderHeader":[16],"renderFooter":[16],"nodeRender":[16],"domRender":[16],"totalHeight":[32],"positionForItem":[64],"checkRange":[64],"checkEnd":[64]},[[9,"resize","onResize"]]]]],["ion-picker-column-internal",[[33,"ion-picker-column-internal",{"items":[16],"value":[1032],"color":[513],"numericInput":[4,"numeric-input"],"isActive":[32],"scrollActiveItemIntoView":[64],"setValue":[64]}]]],["ion-picker-internal",[[33,"ion-picker-internal",null,[[1,"touchstart","preventTouchStartPropagation"]]]]],["ion-radio_2",[[33,"ion-radio",{"color":[513],"name":[1],"disabled":[4],"value":[8],"checked":[32],"buttonTabindex":[32],"setFocus":[64],"setButtonTabindex":[64]}],[0,"ion-radio-group",{"allowEmptySelection":[4,"allow-empty-selection"],"name":[1],"value":[1032]},[[4,"keydown","onKeydown"]]]]],["ion-ripple-effect",[[1,"ion-ripple-effect",{"type":[1],"addRipple":[64]}]]],["ion-button_2",[[33,"ion-button",{"color":[513],"buttonType":[1025,"button-type"],"disabled":[516],"expand":[513],"fill":[1537],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"download":[1],"href":[1],"rel":[1],"shape":[513],"size":[513],"strong":[4],"target":[1],"type":[1],"form":[1]}],[1,"ion-icon",{"mode":[1025],"color":[1],"ios":[1],"md":[1],"flipRtl":[4,"flip-rtl"],"name":[513],"src":[1],"icon":[8],"size":[1],"lazy":[4],"sanitize":[4],"svgContent":[32],"isVisible":[32],"ariaLabel":[32]}]]],["ion-datetime_3",[[33,"ion-datetime",{"color":[1],"name":[1],"disabled":[4],"readonly":[4],"isDateEnabled":[16],"min":[1025],"max":[1025],"presentation":[1],"cancelText":[1,"cancel-text"],"doneText":[1,"done-text"],"clearText":[1,"clear-text"],"yearValues":[8,"year-values"],"monthValues":[8,"month-values"],"dayValues":[8,"day-values"],"hourValues":[8,"hour-values"],"minuteValues":[8,"minute-values"],"locale":[1],"firstDayOfWeek":[2,"first-day-of-week"],"titleSelectedDatesFormatter":[16],"multiple":[4],"value":[1025],"showDefaultTitle":[4,"show-default-title"],"showDefaultButtons":[4,"show-default-buttons"],"showClearButton":[4,"show-clear-button"],"showDefaultTimeLabel":[4,"show-default-time-label"],"hourCycle":[1,"hour-cycle"],"size":[1],"preferWheel":[4,"prefer-wheel"],"showMonthAndYear":[32],"activeParts":[32],"workingParts":[32],"isPresented":[32],"isTimePopoverOpen":[32],"confirm":[64],"reset":[64],"cancel":[64]}],[34,"ion-picker",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"buttons":[16],"columns":[16],"cssClass":[1,"css-class"],"duration":[2],"showBackdrop":[4,"show-backdrop"],"backdropDismiss":[4,"backdrop-dismiss"],"animated":[4],"htmlAttributes":[16],"presented":[32],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64],"getColumn":[64]}],[32,"ion-picker-column",{"col":[16]}]]],["ion-action-sheet",[[34,"ion-action-sheet",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"buttons":[16],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"header":[1],"subHeader":[1,"sub-header"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-alert",[[34,"ion-alert",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"cssClass":[1,"css-class"],"header":[1],"subHeader":[1,"sub-header"],"message":[1],"buttons":[16],"inputs":[1040],"backdropDismiss":[4,"backdrop-dismiss"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]},[[4,"keydown","onKeydown"]]]]],["ion-popover",[[33,"ion-popover",{"hasController":[4,"has-controller"],"delegate":[16],"overlayIndex":[2,"overlay-index"],"enterAnimation":[16],"leaveAnimation":[16],"component":[1],"componentProps":[16],"keyboardClose":[4,"keyboard-close"],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"event":[8],"showBackdrop":[4,"show-backdrop"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"triggerAction":[1,"trigger-action"],"trigger":[1],"size":[1],"dismissOnSelect":[4,"dismiss-on-select"],"reference":[1],"side":[1],"alignment":[1025],"arrow":[4],"isOpen":[4,"is-open"],"keyboardEvents":[4,"keyboard-events"],"keepContentsMounted":[4,"keep-contents-mounted"],"presented":[32],"presentFromTrigger":[64],"present":[64],"dismiss":[64],"getParentPopover":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-checkbox",[[33,"ion-checkbox",{"color":[513],"name":[1],"checked":[1028],"indeterminate":[1028],"disabled":[4],"value":[8]}]]],["ion-select_3",[[33,"ion-select",{"disabled":[4],"cancelText":[1,"cancel-text"],"okText":[1,"ok-text"],"placeholder":[1],"name":[1],"selectedText":[1,"selected-text"],"multiple":[4],"interface":[1],"interfaceOptions":[8,"interface-options"],"compareWith":[1,"compare-with"],"value":[1032],"isExpanded":[32],"open":[64]}],[1,"ion-select-option",{"disabled":[4],"value":[8]}],[34,"ion-select-popover",{"header":[1],"subHeader":[1,"sub-header"],"message":[1],"multiple":[4],"options":[16]},[[0,"ionChange","onSelect"]]]]],["ion-app_8",[[0,"ion-app",{"setFocus":[64]}],[1,"ion-content",{"color":[513],"fullscreen":[4],"forceOverscroll":[1028,"force-overscroll"],"scrollX":[4,"scroll-x"],"scrollY":[4,"scroll-y"],"scrollEvents":[4,"scroll-events"],"getScrollElement":[64],"getBackgroundElement":[64],"scrollToTop":[64],"scrollToBottom":[64],"scrollByPoint":[64],"scrollToPoint":[64]},[[8,"appload","onAppLoad"]]],[36,"ion-footer",{"collapse":[1],"translucent":[4],"keyboardVisible":[32]}],[36,"ion-header",{"collapse":[1],"translucent":[4]}],[1,"ion-router-outlet",{"mode":[1025],"delegate":[16],"animated":[4],"animation":[16],"swipeHandler":[16],"commit":[64],"setRouteId":[64],"getRouteId":[64]}],[33,"ion-title",{"color":[513],"size":[1]}],[33,"ion-toolbar",{"color":[513]},[[0,"ionStyle","childrenStyle"]]],[34,"ion-buttons",{"collapse":[4]}]]],["ion-spinner",[[1,"ion-spinner",{"color":[513],"duration":[2],"name":[1],"paused":[4]}]]],["ion-item_8",[[33,"ion-item-divider",{"color":[513],"sticky":[4]}],[32,"ion-item-group"],[1,"ion-skeleton-text",{"animated":[4]}],[32,"ion-list",{"lines":[1],"inset":[4],"closeSlidingItems":[64]}],[33,"ion-list-header",{"color":[513],"lines":[1]}],[49,"ion-item",{"color":[513],"button":[4],"detail":[4],"detailIcon":[1,"detail-icon"],"disabled":[4],"download":[1],"fill":[1],"shape":[1],"href":[1],"rel":[1],"lines":[1],"counter":[4],"routerAnimation":[16],"routerDirection":[1,"router-direction"],"target":[1],"type":[1],"counterFormatter":[16],"multipleInputs":[32],"focusable":[32],"counterString":[32]},[[0,"ionChange","handleIonChange"],[0,"ionColor","labelColorChanged"],[0,"ionStyle","itemStyle"]]],[34,"ion-label",{"color":[513],"position":[1],"noAnimate":[32]}],[33,"ion-note",{"color":[513]}]]]]'),c))))(0,{exclude:["ion-tabs","ion-tab"],syncQueue:!0,raf:Pt,jmp:Me=>a.runOutsideAngular(Me),ael(Me,Je,at,Dt){Me[L](Je,at,Dt)},rel(Me,Je,at,Dt){Me.removeEventListener(Je,at,Dt)}}))}};let C=(()=>{class s{static forRoot(a){return{ngModule:s,providers:[{provide:Fr,useValue:a},{provide:o.ip1,useFactory:ro,multi:!0,deps:[Fr,ze.K0,o.R0b]}]}}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275mod=o.oAB({type:s}),s.\u0275inj=o.cJS({providers:[Or,Fo,wo],imports:[[ze.ez]]}),s})()},8834:(Qe,Fe,w)=>{"use strict";w.d(Fe,{c:()=>j});var o=w(5730),x=w(3457);let N;const R=P=>P.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),W=P=>{if(void 0===N){const pe=void 0!==P.style.webkitAnimationName;N=void 0===P.style.animationName&&pe?"-webkit-":""}return N},M=(P,K,pe)=>{const ke=K.startsWith("animation")?W(P):"";P.style.setProperty(ke+K,pe)},U=(P,K)=>{const pe=K.startsWith("animation")?W(P):"";P.style.removeProperty(pe+K)},G=[],E=(P=[],K)=>{if(void 0!==K){const pe=Array.isArray(K)?K:[K];return[...P,...pe]}return P},j=P=>{let K,pe,ke,Te,ie,Be,Q,ue,de,ne,Ee,et,Ue,re=[],oe=[],be=[],Ne=!1,T={},k=[],O=[],te={},ce=0,Ae=!1,De=!1,Ce=!0,ze=!1,dt=!0,St=!1;const Ke=P,nn=[],wt=[],Rt=[],Kt=[],pn=[],Pt=[],Ut=[],it=[],Xt=[],kt=[],Vt="function"==typeof AnimationEffect||void 0!==x.w&&"function"==typeof x.w.AnimationEffect,rn="function"==typeof Element&&"function"==typeof Element.prototype.animate&&Vt,en=()=>kt,Et=(X,le)=>((le?.oneTimeCallback?wt:nn).push({c:X,o:le}),Ue),Ct=()=>{if(rn)kt.forEach(X=>{X.cancel()}),kt.length=0;else{const X=Rt.slice();(0,o.r)(()=>{X.forEach(le=>{U(le,"animation-name"),U(le,"animation-duration"),U(le,"animation-timing-function"),U(le,"animation-iteration-count"),U(le,"animation-delay"),U(le,"animation-play-state"),U(le,"animation-fill-mode"),U(le,"animation-direction")})})}},qe=()=>{pn.forEach(X=>{X?.parentNode&&X.parentNode.removeChild(X)}),pn.length=0},He=()=>void 0!==ie?ie:Q?Q.getFill():"both",Ye=()=>void 0!==de?de:void 0!==Be?Be:Q?Q.getDirection():"normal",pt=()=>Ae?"linear":void 0!==ke?ke:Q?Q.getEasing():"linear",vt=()=>De?0:void 0!==ne?ne:void 0!==pe?pe:Q?Q.getDuration():0,Ht=()=>void 0!==Te?Te:Q?Q.getIterations():1,_t=()=>void 0!==Ee?Ee:void 0!==K?K:Q?Q.getDelay():0,sn=()=>{0!==ce&&(ce--,0===ce&&((()=>{Qt(),it.forEach(Re=>Re()),Xt.forEach(Re=>Re());const X=Ce?1:0,le=k,Ie=O,je=te;Rt.forEach(Re=>{const ot=Re.classList;le.forEach(st=>ot.add(st)),Ie.forEach(st=>ot.remove(st));for(const st in je)je.hasOwnProperty(st)&&M(Re,st,je[st])}),nn.forEach(Re=>Re.c(X,Ue)),wt.forEach(Re=>Re.c(X,Ue)),wt.length=0,dt=!0,Ce&&(ze=!0),Ce=!0})(),Q&&Q.animationFinish()))},dn=(X=!0)=>{qe();const le=(P=>(P.forEach(K=>{for(const pe in K)if(K.hasOwnProperty(pe)){const ke=K[pe];if("easing"===pe)K["animation-timing-function"]=ke,delete K[pe];else{const Te=R(pe);Te!==pe&&(K[Te]=ke,delete K[pe])}}}),P))(re);Rt.forEach(Ie=>{if(le.length>0){const je=((P=[])=>P.map(K=>{const pe=K.offset,ke=[];for(const Te in K)K.hasOwnProperty(Te)&&"offset"!==Te&&ke.push(`${Te}: ${K[Te]};`);return`${100*pe}% { ${ke.join(" ")} }`}).join(" "))(le);et=void 0!==P?P:(P=>{let K=G.indexOf(P);return K<0&&(K=G.push(P)-1),`ion-animation-${K}`})(je);const Re=((P,K,pe)=>{var ke;const Te=(P=>{const K=void 0!==P.getRootNode?P.getRootNode():P;return K.head||K})(pe),ie=W(pe),Be=Te.querySelector("#"+P);if(Be)return Be;const re=(null!==(ke=pe.ownerDocument)&&void 0!==ke?ke:document).createElement("style");return re.id=P,re.textContent=`@${ie}keyframes ${P} { ${K} } @${ie}keyframes ${P}-alt { ${K} }`,Te.appendChild(re),re})(et,je,Ie);pn.push(Re),M(Ie,"animation-duration",`${vt()}ms`),M(Ie,"animation-timing-function",pt()),M(Ie,"animation-delay",`${_t()}ms`),M(Ie,"animation-fill-mode",He()),M(Ie,"animation-direction",Ye());const ot=Ht()===1/0?"infinite":Ht().toString();M(Ie,"animation-iteration-count",ot),M(Ie,"animation-play-state","paused"),X&&M(Ie,"animation-name",`${Re.id}-alt`),(0,o.r)(()=>{M(Ie,"animation-name",Re.id||null)})}})},sr=(X=!0)=>{(()=>{Pt.forEach(je=>je()),Ut.forEach(je=>je());const X=oe,le=be,Ie=T;Rt.forEach(je=>{const Re=je.classList;X.forEach(ot=>Re.add(ot)),le.forEach(ot=>Re.remove(ot));for(const ot in Ie)Ie.hasOwnProperty(ot)&&M(je,ot,Ie[ot])})})(),re.length>0&&(rn?(Rt.forEach(X=>{const le=X.animate(re,{id:Ke,delay:_t(),duration:vt(),easing:pt(),iterations:Ht(),fill:He(),direction:Ye()});le.pause(),kt.push(le)}),kt.length>0&&(kt[0].onfinish=()=>{sn()})):dn(X)),Ne=!0},$n=X=>{if(X=Math.min(Math.max(X,0),.9999),rn)kt.forEach(le=>{le.currentTime=le.effect.getComputedTiming().delay+vt()*X,le.pause()});else{const le=`-${vt()*X}ms`;Rt.forEach(Ie=>{re.length>0&&(M(Ie,"animation-delay",le),M(Ie,"animation-play-state","paused"))})}},Tn=X=>{kt.forEach(le=>{le.effect.updateTiming({delay:_t(),duration:vt(),easing:pt(),iterations:Ht(),fill:He(),direction:Ye()})}),void 0!==X&&$n(X)},xn=(X=!0,le)=>{(0,o.r)(()=>{Rt.forEach(Ie=>{M(Ie,"animation-name",et||null),M(Ie,"animation-duration",`${vt()}ms`),M(Ie,"animation-timing-function",pt()),M(Ie,"animation-delay",void 0!==le?`-${le*vt()}ms`:`${_t()}ms`),M(Ie,"animation-fill-mode",He()||null),M(Ie,"animation-direction",Ye()||null);const je=Ht()===1/0?"infinite":Ht().toString();M(Ie,"animation-iteration-count",je),X&&M(Ie,"animation-name",`${et}-alt`),(0,o.r)(()=>{M(Ie,"animation-name",et||null)})})})},vn=(X=!1,le=!0,Ie)=>(X&&Kt.forEach(je=>{je.update(X,le,Ie)}),rn?Tn(Ie):xn(le,Ie),Ue),gr=()=>{Ne&&(rn?kt.forEach(X=>{X.pause()}):Rt.forEach(X=>{M(X,"animation-play-state","paused")}),St=!0)},fn=()=>{ue=void 0,sn()},Qt=()=>{ue&&clearTimeout(ue)},F=X=>new Promise(le=>{X?.sync&&(De=!0,Et(()=>De=!1,{oneTimeCallback:!0})),Ne||sr(),ze&&(rn?($n(0),Tn()):xn(),ze=!1),dt&&(ce=Kt.length+1,dt=!1),Et(()=>le(),{oneTimeCallback:!0}),Kt.forEach(Ie=>{Ie.play()}),rn?(kt.forEach(X=>{X.play()}),(0===re.length||0===Rt.length)&&sn()):(()=>{if(Qt(),(0,o.r)(()=>{Rt.forEach(X=>{re.length>0&&M(X,"animation-play-state","running")})}),0===re.length||0===Rt.length)sn();else{const X=_t()||0,le=vt()||0,Ie=Ht()||1;isFinite(Ie)&&(ue=setTimeout(fn,X+le*Ie+100)),((P,K)=>{let pe;const ke={passive:!0},ie=Be=>{P===Be.target&&(pe&&pe(),Qt(),(0,o.r)(()=>{Rt.forEach(X=>{U(X,"animation-duration"),U(X,"animation-delay"),U(X,"animation-play-state")}),(0,o.r)(sn)}))};P&&(P.addEventListener("webkitAnimationEnd",ie,ke),P.addEventListener("animationend",ie,ke),pe=()=>{P.removeEventListener("webkitAnimationEnd",ie,ke),P.removeEventListener("animationend",ie,ke)})})(Rt[0])}})(),St=!1}),he=(X,le)=>{const Ie=re[0];return void 0===Ie||void 0!==Ie.offset&&0!==Ie.offset?re=[{offset:0,[X]:le},...re]:Ie[X]=le,Ue};return Ue={parentAnimation:Q,elements:Rt,childAnimations:Kt,id:Ke,animationFinish:sn,from:he,to:(X,le)=>{const Ie=re[re.length-1];return void 0===Ie||void 0!==Ie.offset&&1!==Ie.offset?re=[...re,{offset:1,[X]:le}]:Ie[X]=le,Ue},fromTo:(X,le,Ie)=>he(X,le).to(X,Ie),parent:X=>(Q=X,Ue),play:F,pause:()=>(Kt.forEach(X=>{X.pause()}),gr(),Ue),stop:()=>{Kt.forEach(X=>{X.stop()}),Ne&&(Ct(),Ne=!1),Ae=!1,De=!1,dt=!0,de=void 0,ne=void 0,Ee=void 0,ce=0,ze=!1,Ce=!0,St=!1},destroy:X=>(Kt.forEach(le=>{le.destroy(X)}),(X=>{Ct(),X&&qe()})(X),Rt.length=0,Kt.length=0,re.length=0,nn.length=0,wt.length=0,Ne=!1,dt=!0,Ue),keyframes:X=>{const le=re!==X;return re=X,le&&(X=>{rn?en().forEach(le=>{if(le.effect.setKeyframes)le.effect.setKeyframes(X);else{const Ie=new KeyframeEffect(le.effect.target,X,le.effect.getTiming());le.effect=Ie}}):dn()})(re),Ue},addAnimation:X=>{if(null!=X)if(Array.isArray(X))for(const le of X)le.parent(Ue),Kt.push(le);else X.parent(Ue),Kt.push(X);return Ue},addElement:X=>{if(null!=X)if(1===X.nodeType)Rt.push(X);else if(X.length>=0)for(let le=0;le(ie=X,vn(!0),Ue),direction:X=>(Be=X,vn(!0),Ue),iterations:X=>(Te=X,vn(!0),Ue),duration:X=>(!rn&&0===X&&(X=1),pe=X,vn(!0),Ue),easing:X=>(ke=X,vn(!0),Ue),delay:X=>(K=X,vn(!0),Ue),getWebAnimations:en,getKeyframes:()=>re,getFill:He,getDirection:Ye,getDelay:_t,getIterations:Ht,getEasing:pt,getDuration:vt,afterAddRead:X=>(it.push(X),Ue),afterAddWrite:X=>(Xt.push(X),Ue),afterClearStyles:(X=[])=>{for(const le of X)te[le]="";return Ue},afterStyles:(X={})=>(te=X,Ue),afterRemoveClass:X=>(O=E(O,X),Ue),afterAddClass:X=>(k=E(k,X),Ue),beforeAddRead:X=>(Pt.push(X),Ue),beforeAddWrite:X=>(Ut.push(X),Ue),beforeClearStyles:(X=[])=>{for(const le of X)T[le]="";return Ue},beforeStyles:(X={})=>(T=X,Ue),beforeRemoveClass:X=>(be=E(be,X),Ue),beforeAddClass:X=>(oe=E(oe,X),Ue),onFinish:Et,isRunning:()=>0!==ce&&!St,progressStart:(X=!1,le)=>(Kt.forEach(Ie=>{Ie.progressStart(X,le)}),gr(),Ae=X,Ne||sr(),vn(!1,!0,le),Ue),progressStep:X=>(Kt.forEach(le=>{le.progressStep(X)}),$n(X),Ue),progressEnd:(X,le,Ie)=>(Ae=!1,Kt.forEach(je=>{je.progressEnd(X,le,Ie)}),void 0!==Ie&&(ne=Ie),ze=!1,Ce=!0,0===X?(de="reverse"===Ye()?"normal":"reverse","reverse"===de&&(Ce=!1),rn?(vn(),$n(1-le)):(Ee=(1-le)*vt()*-1,vn(!1,!1))):1===X&&(rn?(vn(),$n(le)):(Ee=le*vt()*-1,vn(!1,!1))),void 0!==X&&(Et(()=>{ne=void 0,de=void 0,Ee=void 0},{oneTimeCallback:!0}),Q||F()),Ue)}}},4349:(Qe,Fe,w)=>{"use strict";w.d(Fe,{G:()=>R});class x{constructor(M,U,_,Y,G){this.id=U,this.name=_,this.disableScroll=G,this.priority=1e6*Y+U,this.ctrl=M}canStart(){return!!this.ctrl&&this.ctrl.canStart(this.name)}start(){return!!this.ctrl&&this.ctrl.start(this.name,this.id,this.priority)}capture(){if(!this.ctrl)return!1;const M=this.ctrl.capture(this.name,this.id,this.priority);return M&&this.disableScroll&&this.ctrl.disableScroll(this.id),M}release(){this.ctrl&&(this.ctrl.release(this.id),this.disableScroll&&this.ctrl.enableScroll(this.id))}destroy(){this.release(),this.ctrl=void 0}}class N{constructor(M,U,_,Y){this.id=U,this.disable=_,this.disableScroll=Y,this.ctrl=M}block(){if(this.ctrl){if(this.disable)for(const M of this.disable)this.ctrl.disableGesture(M,this.id);this.disableScroll&&this.ctrl.disableScroll(this.id)}}unblock(){if(this.ctrl){if(this.disable)for(const M of this.disable)this.ctrl.enableGesture(M,this.id);this.disableScroll&&this.ctrl.enableScroll(this.id)}}destroy(){this.unblock(),this.ctrl=void 0}}const ge="backdrop-no-scroll",R=new class o{constructor(){this.gestureId=0,this.requestedStart=new Map,this.disabledGestures=new Map,this.disabledScroll=new Set}createGesture(M){var U;return new x(this,this.newID(),M.name,null!==(U=M.priority)&&void 0!==U?U:0,!!M.disableScroll)}createBlocker(M={}){return new N(this,this.newID(),M.disable,!!M.disableScroll)}start(M,U,_){return this.canStart(M)?(this.requestedStart.set(U,_),!0):(this.requestedStart.delete(U),!1)}capture(M,U,_){if(!this.start(M,U,_))return!1;const Y=this.requestedStart;let G=-1e4;if(Y.forEach(Z=>{G=Math.max(G,Z)}),G===_){this.capturedId=U,Y.clear();const Z=new CustomEvent("ionGestureCaptured",{detail:{gestureName:M}});return document.dispatchEvent(Z),!0}return Y.delete(U),!1}release(M){this.requestedStart.delete(M),this.capturedId===M&&(this.capturedId=void 0)}disableGesture(M,U){let _=this.disabledGestures.get(M);void 0===_&&(_=new Set,this.disabledGestures.set(M,_)),_.add(U)}enableGesture(M,U){const _=this.disabledGestures.get(M);void 0!==_&&_.delete(U)}disableScroll(M){this.disabledScroll.add(M),1===this.disabledScroll.size&&document.body.classList.add(ge)}enableScroll(M){this.disabledScroll.delete(M),0===this.disabledScroll.size&&document.body.classList.remove(ge)}canStart(M){return!(void 0!==this.capturedId||this.isDisabled(M))}isCaptured(){return void 0!==this.capturedId}isScrollDisabled(){return this.disabledScroll.size>0}isDisabled(M){const U=this.disabledGestures.get(M);return!!(U&&U.size>0)}newID(){return this.gestureId++,this.gestureId}}},7593:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{MENU_BACK_BUTTON_PRIORITY:()=>R,OVERLAY_BACK_BUTTON_PRIORITY:()=>ge,blockHardwareBackButton:()=>x,startHardwareBackButton:()=>N});var o=w(5861);const x=()=>{document.addEventListener("backbutton",()=>{})},N=()=>{const W=document;let M=!1;W.addEventListener("backbutton",()=>{if(M)return;let U=0,_=[];const Y=new CustomEvent("ionBackButton",{bubbles:!1,detail:{register(S,B){_.push({priority:S,handler:B,id:U++})}}});W.dispatchEvent(Y);const G=function(){var S=(0,o.Z)(function*(B){try{if(B?.handler){const E=B.handler(Z);null!=E&&(yield E)}}catch(E){console.error(E)}});return function(E){return S.apply(this,arguments)}}(),Z=()=>{if(_.length>0){let S={priority:Number.MIN_SAFE_INTEGER,handler:()=>{},id:-1};_.forEach(B=>{B.priority>=S.priority&&(S=B)}),M=!0,_=_.filter(B=>B.id!==S.id),G(S).then(()=>M=!1)}};Z()})},ge=100,R=99},5730:(Qe,Fe,w)=>{"use strict";w.d(Fe,{a:()=>M,b:()=>U,c:()=>N,d:()=>B,e:()=>E,f:()=>S,g:()=>_,h:()=>Te,i:()=>W,j:()=>ge,k:()=>Z,l:()=>j,m:()=>G,n:()=>P,o:()=>ke,p:()=>pe,q:()=>ie,r:()=>Y,s:()=>Be,t:()=>o,u:()=>K});const o=(re,oe=0)=>new Promise(be=>{x(re,oe,be)}),x=(re,oe=0,be)=>{let Ne,Q;const T={passive:!0},O=()=>{Ne&&Ne()},te=ce=>{(void 0===ce||re===ce.target)&&(O(),be(ce))};return re&&(re.addEventListener("webkitTransitionEnd",te,T),re.addEventListener("transitionend",te,T),Q=setTimeout(te,oe+500),Ne=()=>{Q&&(clearTimeout(Q),Q=void 0),re.removeEventListener("webkitTransitionEnd",te,T),re.removeEventListener("transitionend",te,T)}),O},N=(re,oe)=>{re.componentOnReady?re.componentOnReady().then(be=>oe(be)):Y(()=>oe(re))},ge=(re,oe=[])=>{const be={};return oe.forEach(Ne=>{re.hasAttribute(Ne)&&(null!==re.getAttribute(Ne)&&(be[Ne]=re.getAttribute(Ne)),re.removeAttribute(Ne))}),be},R=["role","aria-activedescendant","aria-atomic","aria-autocomplete","aria-braillelabel","aria-brailleroledescription","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colindextext","aria-colspan","aria-controls","aria-current","aria-describedby","aria-description","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowindextext","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"],W=(re,oe)=>{let be=R;return oe&&oe.length>0&&(be=be.filter(Ne=>!oe.includes(Ne))),ge(re,be)},M=(re,oe,be,Ne)=>{var Q;if(typeof window<"u"){const k=null===(Q=window?.Ionic)||void 0===Q?void 0:Q.config;if(k){const O=k.get("_ael");if(O)return O(re,oe,be,Ne);if(k._ael)return k._ael(re,oe,be,Ne)}}return re.addEventListener(oe,be,Ne)},U=(re,oe,be,Ne)=>{var Q;if(typeof window<"u"){const k=null===(Q=window?.Ionic)||void 0===Q?void 0:Q.config;if(k){const O=k.get("_rel");if(O)return O(re,oe,be,Ne);if(k._rel)return k._rel(re,oe,be,Ne)}}return re.removeEventListener(oe,be,Ne)},_=(re,oe=re)=>re.shadowRoot||oe,Y=re=>"function"==typeof __zone_symbol__requestAnimationFrame?__zone_symbol__requestAnimationFrame(re):"function"==typeof requestAnimationFrame?requestAnimationFrame(re):setTimeout(re),G=re=>!!re.shadowRoot&&!!re.attachShadow,Z=re=>{const oe=re.closest("ion-item");return oe?oe.querySelector("ion-label"):null},S=re=>{if(re.focus(),re.classList.contains("ion-focusable")){const oe=re.closest("ion-app");oe&&oe.setFocus([re])}},B=(re,oe)=>{let be;const Ne=re.getAttribute("aria-labelledby"),Q=re.id;let T=null!==Ne&&""!==Ne.trim()?Ne:oe+"-lbl",k=null!==Ne&&""!==Ne.trim()?document.getElementById(Ne):Z(re);return k?(null===Ne&&(k.id=T),be=k.textContent,k.setAttribute("aria-hidden","true")):""!==Q.trim()&&(k=document.querySelector(`label[for="${Q}"]`),k&&(""!==k.id?T=k.id:k.id=T=`${Q}-lbl`,be=k.textContent)),{label:k,labelId:T,labelText:be}},E=(re,oe,be,Ne,Q)=>{if(re||G(oe)){let T=oe.querySelector("input.aux-input");T||(T=oe.ownerDocument.createElement("input"),T.type="hidden",T.classList.add("aux-input"),oe.appendChild(T)),T.disabled=Q,T.name=be,T.value=Ne||""}},j=(re,oe,be)=>Math.max(re,Math.min(oe,be)),P=(re,oe)=>{if(!re){const be="ASSERT: "+oe;throw console.error(be),new Error(be)}},K=re=>re.timeStamp||Date.now(),pe=re=>{if(re){const oe=re.changedTouches;if(oe&&oe.length>0){const be=oe[0];return{x:be.clientX,y:be.clientY}}if(void 0!==re.pageX)return{x:re.pageX,y:re.pageY}}return{x:0,y:0}},ke=re=>{const oe="rtl"===document.dir;switch(re){case"start":return oe;case"end":return!oe;default:throw new Error(`"${re}" is not a valid value for [side]. Use "start" or "end" instead.`)}},Te=(re,oe)=>{const be=re._original||re;return{_original:re,emit:ie(be.emit.bind(be),oe)}},ie=(re,oe=0)=>{let be;return(...Ne)=>{clearTimeout(be),be=setTimeout(re,oe,...Ne)}},Be=(re,oe)=>{if(re??(re={}),oe??(oe={}),re===oe)return!0;const be=Object.keys(re);if(be.length!==Object.keys(oe).length)return!1;for(const Ne of be)if(!(Ne in oe)||re[Ne]!==oe[Ne])return!1;return!0}},4292:(Qe,Fe,w)=>{"use strict";w.d(Fe,{m:()=>G});var o=w(5861),x=w(7593),N=w(5730),ge=w(9658),R=w(8834);const W=Z=>(0,R.c)().duration(Z?400:300),M=Z=>{let S,B;const E=Z.width+8,j=(0,R.c)(),P=(0,R.c)();Z.isEndSide?(S=E+"px",B="0px"):(S=-E+"px",B="0px"),j.addElement(Z.menuInnerEl).fromTo("transform",`translateX(${S})`,`translateX(${B})`);const pe="ios"===(0,ge.b)(Z),ke=pe?.2:.25;return P.addElement(Z.backdropEl).fromTo("opacity",.01,ke),W(pe).addAnimation([j,P])},U=Z=>{let S,B;const E=(0,ge.b)(Z),j=Z.width;Z.isEndSide?(S=-j+"px",B=j+"px"):(S=j+"px",B=-j+"px");const P=(0,R.c)().addElement(Z.menuInnerEl).fromTo("transform",`translateX(${B})`,"translateX(0px)"),K=(0,R.c)().addElement(Z.contentEl).fromTo("transform","translateX(0px)",`translateX(${S})`),pe=(0,R.c)().addElement(Z.backdropEl).fromTo("opacity",.01,.32);return W("ios"===E).addAnimation([P,K,pe])},_=Z=>{const S=(0,ge.b)(Z),B=Z.width*(Z.isEndSide?-1:1)+"px",E=(0,R.c)().addElement(Z.contentEl).fromTo("transform","translateX(0px)",`translateX(${B})`);return W("ios"===S).addAnimation(E)},G=(()=>{const Z=new Map,S=[],B=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&ne.open()});return function(ne){return ue.apply(this,arguments)}}(),E=function(){var ue=(0,o.Z)(function*(de){const ne=yield void 0!==de?Te(de):ie();return void 0!==ne&&ne.close()});return function(ne){return ue.apply(this,arguments)}}(),j=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&ne.toggle()});return function(ne){return ue.apply(this,arguments)}}(),P=function(){var ue=(0,o.Z)(function*(de,ne){const Ee=yield Te(ne);return Ee&&(Ee.disabled=!de),Ee});return function(ne,Ee){return ue.apply(this,arguments)}}(),K=function(){var ue=(0,o.Z)(function*(de,ne){const Ee=yield Te(ne);return Ee&&(Ee.swipeGesture=de),Ee});return function(ne,Ee){return ue.apply(this,arguments)}}(),pe=function(){var ue=(0,o.Z)(function*(de){if(null!=de){const ne=yield Te(de);return void 0!==ne&&ne.isOpen()}return void 0!==(yield ie())});return function(ne){return ue.apply(this,arguments)}}(),ke=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&!ne.disabled});return function(ne){return ue.apply(this,arguments)}}(),Te=function(){var ue=(0,o.Z)(function*(de){return yield De(),"start"===de||"end"===de?Ae(Ce=>Ce.side===de&&!Ce.disabled)||Ae(Ce=>Ce.side===de):null!=de?Ae(Ee=>Ee.menuId===de):Ae(Ee=>!Ee.disabled)||(S.length>0?S[0].el:void 0)});return function(ne){return ue.apply(this,arguments)}}(),ie=function(){var ue=(0,o.Z)(function*(){return yield De(),O()});return function(){return ue.apply(this,arguments)}}(),Be=function(){var ue=(0,o.Z)(function*(){return yield De(),te()});return function(){return ue.apply(this,arguments)}}(),re=function(){var ue=(0,o.Z)(function*(){return yield De(),ce()});return function(){return ue.apply(this,arguments)}}(),oe=(ue,de)=>{Z.set(ue,de)},Q=ue=>{const de=ue.side;S.filter(ne=>ne.side===de&&ne!==ue).forEach(ne=>ne.disabled=!0)},T=function(){var ue=(0,o.Z)(function*(de,ne,Ee){if(ce())return!1;if(ne){const Ce=yield ie();Ce&&de.el!==Ce&&(yield Ce.setOpen(!1,!1))}return de._setOpen(ne,Ee)});return function(ne,Ee,Ce){return ue.apply(this,arguments)}}(),O=()=>Ae(ue=>ue._isOpen),te=()=>S.map(ue=>ue.el),ce=()=>S.some(ue=>ue.isAnimating),Ae=ue=>{const de=S.find(ue);if(void 0!==de)return de.el},De=()=>Promise.all(Array.from(document.querySelectorAll("ion-menu")).map(ue=>new Promise(de=>(0,N.c)(ue,de))));return oe("reveal",_),oe("push",U),oe("overlay",M),typeof document<"u"&&document.addEventListener("ionBackButton",ue=>{const de=O();de&&ue.detail.register(x.MENU_BACK_BUTTON_PRIORITY,()=>de.close())}),{registerAnimation:oe,get:Te,getMenus:Be,getOpen:ie,isEnabled:ke,swipeGesture:K,isAnimating:re,isOpen:pe,enable:P,toggle:j,close:E,open:B,_getOpenSync:O,_createAnimation:(ue,de)=>{const ne=Z.get(ue);if(!ne)throw new Error("animation not registered");return ne(de)},_register:ue=>{S.indexOf(ue)<0&&(ue.disabled||Q(ue),S.push(ue))},_unregister:ue=>{const de=S.indexOf(ue);de>-1&&S.splice(de,1)},_setOpen:T,_setActiveMenu:Q}})()},3457:(Qe,Fe,w)=>{"use strict";w.d(Fe,{w:()=>o});const o=typeof window<"u"?window:void 0},1308:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>rt,H:()=>Rt,a:()=>Ce,b:()=>cn,c:()=>Cn,e:()=>Er,f:()=>On,g:()=>ze,h:()=>nn,i:()=>zt,j:()=>Ye,k:()=>Dn,p:()=>j,r:()=>er,s:()=>B});var o=w(5861);let N,ge,R,W=!1,M=!1,U=!1,_=!1,Y=!1;const G=typeof window<"u"?window:{},Z=G.document||{head:{}},S={$flags$:0,$resourcesUrl$:"",jmp:F=>F(),raf:F=>requestAnimationFrame(F),ael:(F,q,he,we)=>F.addEventListener(q,he,we),rel:(F,q,he,we)=>F.removeEventListener(q,he,we),ce:(F,q)=>new CustomEvent(F,q)},B=F=>{Object.assign(S,F)},j=F=>Promise.resolve(F),P=(()=>{try{return new CSSStyleSheet,"function"==typeof(new CSSStyleSheet).replaceSync}catch{}return!1})(),K=(F,q,he,we)=>{he&&he.map(([Pe,X,le])=>{const Ie=ke(F,Pe),je=pe(q,le),Re=Te(Pe);S.ael(Ie,X,je,Re),(q.$rmListeners$=q.$rmListeners$||[]).push(()=>S.rel(Ie,X,je,Re))})},pe=(F,q)=>he=>{try{256&F.$flags$?F.$lazyInstance$[q](he):(F.$queuedListeners$=F.$queuedListeners$||[]).push([q,he])}catch(we){Tn(we)}},ke=(F,q)=>4&q?Z:8&q?G:16&q?Z.body:F,Te=F=>0!=(2&F),be="s-id",Ne="sty-id",Q="c-id",k="http://www.w3.org/1999/xlink",ce=new WeakMap,Ae=(F,q,he)=>{let we=tr.get(F);P&&he?(we=we||new CSSStyleSheet,"string"==typeof we?we=q:we.replaceSync(q)):we=q,tr.set(F,we)},De=(F,q,he,we)=>{let Pe=de(q,he);const X=tr.get(Pe);if(F=11===F.nodeType?F:Z,X)if("string"==typeof X){let Ie,le=ce.get(F=F.head||F);le||ce.set(F,le=new Set),le.has(Pe)||(F.host&&(Ie=F.querySelector(`[${Ne}="${Pe}"]`))?Ie.innerHTML=X:(Ie=Z.createElement("style"),Ie.innerHTML=X,F.insertBefore(Ie,F.querySelector("link"))),le&&le.add(Pe))}else F.adoptedStyleSheets.includes(X)||(F.adoptedStyleSheets=[...F.adoptedStyleSheets,X]);return Pe},de=(F,q)=>"sc-"+(q&&32&F.$flags$?F.$tagName$+"-"+q:F.$tagName$),ne=F=>F.replace(/\/\*!@([^\/]+)\*\/[^\{]+\{/g,"$1{"),Ce=F=>Ir.push(F),ze=F=>dn(F).$modeName$,dt={},Ke=F=>"object"==(F=typeof F)||"function"===F,nn=(F,q,...he)=>{let we=null,Pe=null,X=null,le=!1,Ie=!1;const je=[],Re=st=>{for(let Mt=0;Mtst[Mt]).join(" "))}}if("function"==typeof F)return F(null===q?{}:q,je,pn);const ot=wt(F,null);return ot.$attrs$=q,je.length>0&&(ot.$children$=je),ot.$key$=Pe,ot.$name$=X,ot},wt=(F,q)=>({$flags$:0,$tag$:F,$text$:q,$elm$:null,$children$:null,$attrs$:null,$key$:null,$name$:null}),Rt={},pn={forEach:(F,q)=>F.map(Pt).forEach(q),map:(F,q)=>F.map(Pt).map(q).map(Ut)},Pt=F=>({vattrs:F.$attrs$,vchildren:F.$children$,vkey:F.$key$,vname:F.$name$,vtag:F.$tag$,vtext:F.$text$}),Ut=F=>{if("function"==typeof F.vtag){const he=Object.assign({},F.vattrs);return F.vkey&&(he.key=F.vkey),F.vname&&(he.name=F.vname),nn(F.vtag,he,...F.vchildren||[])}const q=wt(F.vtag,F.vtext);return q.$attrs$=F.vattrs,q.$children$=F.vchildren,q.$key$=F.vkey,q.$name$=F.vname,q},it=(F,q,he,we,Pe,X)=>{if(he!==we){let le=$n(F,q),Ie=q.toLowerCase();if("class"===q){const je=F.classList,Re=kt(he),ot=kt(we);je.remove(...Re.filter(st=>st&&!ot.includes(st))),je.add(...ot.filter(st=>st&&!Re.includes(st)))}else if("style"===q){for(const je in he)(!we||null==we[je])&&(je.includes("-")?F.style.removeProperty(je):F.style[je]="");for(const je in we)(!he||we[je]!==he[je])&&(je.includes("-")?F.style.setProperty(je,we[je]):F.style[je]=we[je])}else if("key"!==q)if("ref"===q)we&&we(F);else if(le||"o"!==q[0]||"n"!==q[1]){const je=Ke(we);if((le||je&&null!==we)&&!Pe)try{if(F.tagName.includes("-"))F[q]=we;else{const ot=we??"";"list"===q?le=!1:(null==he||F[q]!=ot)&&(F[q]=ot)}}catch{}let Re=!1;Ie!==(Ie=Ie.replace(/^xlink\:?/,""))&&(q=Ie,Re=!0),null==we||!1===we?(!1!==we||""===F.getAttribute(q))&&(Re?F.removeAttributeNS(k,q):F.removeAttribute(q)):(!le||4&X||Pe)&&!je&&(we=!0===we?"":we,Re?F.setAttributeNS(k,q,we):F.setAttribute(q,we))}else q="-"===q[2]?q.slice(3):$n(G,Ie)?Ie.slice(2):Ie[2]+q.slice(3),he&&S.rel(F,q,he,!1),we&&S.ael(F,q,we,!1)}},Xt=/\s/,kt=F=>F?F.split(Xt):[],Vt=(F,q,he,we)=>{const Pe=11===q.$elm$.nodeType&&q.$elm$.host?q.$elm$.host:q.$elm$,X=F&&F.$attrs$||dt,le=q.$attrs$||dt;for(we in X)we in le||it(Pe,we,X[we],void 0,he,q.$flags$);for(we in le)it(Pe,we,X[we],le[we],he,q.$flags$)},rn=(F,q,he,we)=>{const Pe=q.$children$[he];let le,Ie,je,X=0;if(W||(U=!0,"slot"===Pe.$tag$&&(N&&we.classList.add(N+"-s"),Pe.$flags$|=Pe.$children$?2:1)),null!==Pe.$text$)le=Pe.$elm$=Z.createTextNode(Pe.$text$);else if(1&Pe.$flags$)le=Pe.$elm$=Z.createTextNode("");else{if(_||(_="svg"===Pe.$tag$),le=Pe.$elm$=Z.createElementNS(_?"http://www.w3.org/2000/svg":"http://www.w3.org/1999/xhtml",2&Pe.$flags$?"slot-fb":Pe.$tag$),_&&"foreignObject"===Pe.$tag$&&(_=!1),Vt(null,Pe,_),(F=>null!=F)(N)&&le["s-si"]!==N&&le.classList.add(le["s-si"]=N),Pe.$children$)for(X=0;X{S.$flags$|=1;const he=F.childNodes;for(let we=he.length-1;we>=0;we--){const Pe=he[we];Pe["s-hn"]!==R&&Pe["s-ol"]&&(Et(Pe).insertBefore(Pe,nt(Pe)),Pe["s-ol"].remove(),Pe["s-ol"]=void 0,U=!0),q&&Vn(Pe,q)}S.$flags$&=-2},en=(F,q,he,we,Pe,X)=>{let Ie,le=F["s-cr"]&&F["s-cr"].parentNode||F;for(le.shadowRoot&&le.tagName===R&&(le=le.shadowRoot);Pe<=X;++Pe)we[Pe]&&(Ie=rn(null,he,Pe,F),Ie&&(we[Pe].$elm$=Ie,le.insertBefore(Ie,nt(q))))},gt=(F,q,he,we,Pe)=>{for(;q<=he;++q)(we=F[q])&&(Pe=we.$elm$,Nt(we),M=!0,Pe["s-ol"]?Pe["s-ol"].remove():Vn(Pe,!0),Pe.remove())},ht=(F,q)=>F.$tag$===q.$tag$&&("slot"===F.$tag$?F.$name$===q.$name$:F.$key$===q.$key$),nt=F=>F&&F["s-ol"]||F,Et=F=>(F["s-ol"]?F["s-ol"]:F).parentNode,ut=(F,q)=>{const he=q.$elm$=F.$elm$,we=F.$children$,Pe=q.$children$,X=q.$tag$,le=q.$text$;let Ie;null===le?(_="svg"===X||"foreignObject"!==X&&_,"slot"===X||Vt(F,q,_),null!==we&&null!==Pe?((F,q,he,we)=>{let Bt,An,Pe=0,X=0,le=0,Ie=0,je=q.length-1,Re=q[0],ot=q[je],st=we.length-1,Mt=we[0],Wt=we[st];for(;Pe<=je&&X<=st;)if(null==Re)Re=q[++Pe];else if(null==ot)ot=q[--je];else if(null==Mt)Mt=we[++X];else if(null==Wt)Wt=we[--st];else if(ht(Re,Mt))ut(Re,Mt),Re=q[++Pe],Mt=we[++X];else if(ht(ot,Wt))ut(ot,Wt),ot=q[--je],Wt=we[--st];else if(ht(Re,Wt))("slot"===Re.$tag$||"slot"===Wt.$tag$)&&Vn(Re.$elm$.parentNode,!1),ut(Re,Wt),F.insertBefore(Re.$elm$,ot.$elm$.nextSibling),Re=q[++Pe],Wt=we[--st];else if(ht(ot,Mt))("slot"===Re.$tag$||"slot"===Wt.$tag$)&&Vn(ot.$elm$.parentNode,!1),ut(ot,Mt),F.insertBefore(ot.$elm$,Re.$elm$),ot=q[--je],Mt=we[++X];else{for(le=-1,Ie=Pe;Ie<=je;++Ie)if(q[Ie]&&null!==q[Ie].$key$&&q[Ie].$key$===Mt.$key$){le=Ie;break}le>=0?(An=q[le],An.$tag$!==Mt.$tag$?Bt=rn(q&&q[X],he,le,F):(ut(An,Mt),q[le]=void 0,Bt=An.$elm$),Mt=we[++X]):(Bt=rn(q&&q[X],he,X,F),Mt=we[++X]),Bt&&Et(Re.$elm$).insertBefore(Bt,nt(Re.$elm$))}Pe>je?en(F,null==we[st+1]?null:we[st+1].$elm$,he,we,X,st):X>st&>(q,Pe,je)})(he,we,q,Pe):null!==Pe?(null!==F.$text$&&(he.textContent=""),en(he,null,q,Pe,0,Pe.length-1)):null!==we&>(we,0,we.length-1),_&&"svg"===X&&(_=!1)):(Ie=he["s-cr"])?Ie.parentNode.textContent=le:F.$text$!==le&&(he.data=le)},Ct=F=>{const q=F.childNodes;let he,we,Pe,X,le,Ie;for(we=0,Pe=q.length;we{let q,he,we,Pe,X,le,Ie=0;const je=F.childNodes,Re=je.length;for(;Ie=0;le--)he=we[le],!he["s-cn"]&&!he["s-nr"]&&he["s-hn"]!==q["s-hn"]&&(gn(he,Pe)?(X=qe.find(ot=>ot.$nodeToRelocate$===he),M=!0,he["s-sn"]=he["s-sn"]||Pe,X?X.$slotRefNode$=q:qe.push({$slotRefNode$:q,$nodeToRelocate$:he}),he["s-sr"]&&qe.map(ot=>{gn(ot.$nodeToRelocate$,he["s-sn"])&&(X=qe.find(st=>st.$nodeToRelocate$===he),X&&!ot.$slotRefNode$&&(ot.$slotRefNode$=X.$slotRefNode$))})):qe.some(ot=>ot.$nodeToRelocate$===he)||qe.push({$nodeToRelocate$:he}));1===q.nodeType&&on(q)}},gn=(F,q)=>1===F.nodeType?null===F.getAttribute("slot")&&""===q||F.getAttribute("slot")===q:F["s-sn"]===q||""===q,Nt=F=>{F.$attrs$&&F.$attrs$.ref&&F.$attrs$.ref(null),F.$children$&&F.$children$.map(Nt)},zt=F=>dn(F).$hostElement$,Er=(F,q,he)=>{const we=zt(F);return{emit:Pe=>jn(we,q,{bubbles:!!(4&he),composed:!!(2&he),cancelable:!!(1&he),detail:Pe})}},jn=(F,q,he)=>{const we=S.ce(q,he);return F.dispatchEvent(we),we},Xn=(F,q)=>{q&&!F.$onRenderResolve$&&q["s-p"]&&q["s-p"].push(new Promise(he=>F.$onRenderResolve$=he))},En=(F,q)=>{if(F.$flags$|=16,!(4&F.$flags$))return Xn(F,F.$ancestorComponent$),Cn(()=>xe(F,q));F.$flags$|=512},xe=(F,q)=>{const we=F.$lazyInstance$;let Pe;return q&&(F.$flags$|=256,F.$queuedListeners$&&(F.$queuedListeners$.map(([X,le])=>vt(we,X,le)),F.$queuedListeners$=null),Pe=vt(we,"componentWillLoad")),Pe=Ht(Pe,()=>vt(we,"componentWillRender")),Ht(Pe,()=>se(F,we,q))},se=function(){var F=(0,o.Z)(function*(q,he,we){const Pe=q.$hostElement$,le=Pe["s-rc"];we&&(F=>{const q=F.$cmpMeta$,he=F.$hostElement$,we=q.$flags$,X=De(he.shadowRoot?he.shadowRoot:he.getRootNode(),q,F.$modeName$);10&we&&(he["s-sc"]=X,he.classList.add(X+"-h"),2&we&&he.classList.add(X+"-s"))})(q);ye(q,he),le&&(le.map(je=>je()),Pe["s-rc"]=void 0);{const je=Pe["s-p"],Re=()=>He(q);0===je.length?Re():(Promise.all(je).then(Re),q.$flags$|=4,je.length=0)}});return function(he,we,Pe){return F.apply(this,arguments)}}(),ye=(F,q,he)=>{try{q=q.render&&q.render(),F.$flags$&=-17,F.$flags$|=2,((F,q)=>{const he=F.$hostElement$,we=F.$cmpMeta$,Pe=F.$vnode$||wt(null,null),X=(F=>F&&F.$tag$===Rt)(q)?q:nn(null,null,q);if(R=he.tagName,we.$attrsToReflect$&&(X.$attrs$=X.$attrs$||{},we.$attrsToReflect$.map(([le,Ie])=>X.$attrs$[Ie]=he[le])),X.$tag$=null,X.$flags$|=4,F.$vnode$=X,X.$elm$=Pe.$elm$=he.shadowRoot||he,N=he["s-sc"],ge=he["s-cr"],W=0!=(1&we.$flags$),M=!1,ut(Pe,X),S.$flags$|=1,U){on(X.$elm$);let le,Ie,je,Re,ot,st,Mt=0;for(;Mt{const he=F.$hostElement$,Pe=F.$lazyInstance$,X=F.$ancestorComponent$;vt(Pe,"componentDidRender"),64&F.$flags$?vt(Pe,"componentDidUpdate"):(F.$flags$|=64,_t(he),vt(Pe,"componentDidLoad"),F.$onReadyResolve$(he),X||pt()),F.$onInstanceResolve$(he),F.$onRenderResolve$&&(F.$onRenderResolve$(),F.$onRenderResolve$=void 0),512&F.$flags$&&Un(()=>En(F,!1)),F.$flags$&=-517},Ye=F=>{{const q=dn(F),he=q.$hostElement$.isConnected;return he&&2==(18&q.$flags$)&&En(q,!1),he}},pt=F=>{_t(Z.documentElement),Un(()=>jn(G,"appload",{detail:{namespace:"ionic"}}))},vt=(F,q,he)=>{if(F&&F[q])try{return F[q](he)}catch(we){Tn(we)}},Ht=(F,q)=>F&&F.then?F.then(q):q(),_t=F=>F.classList.add("hydrated"),Ln=(F,q,he,we,Pe,X,le)=>{let Ie,je,Re,ot;if(1===X.nodeType){for(Ie=X.getAttribute(Q),Ie&&(je=Ie.split("."),(je[0]===le||"0"===je[0])&&(Re={$flags$:0,$hostId$:je[0],$nodeId$:je[1],$depth$:je[2],$index$:je[3],$tag$:X.tagName.toLowerCase(),$elm$:X,$attrs$:null,$children$:null,$key$:null,$name$:null,$text$:null},q.push(Re),X.removeAttribute(Q),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re,F=Re,we&&"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$))),ot=X.childNodes.length-1;ot>=0;ot--)Ln(F,q,he,we,Pe,X.childNodes[ot],le);if(X.shadowRoot)for(ot=X.shadowRoot.childNodes.length-1;ot>=0;ot--)Ln(F,q,he,we,Pe,X.shadowRoot.childNodes[ot],le)}else if(8===X.nodeType)je=X.nodeValue.split("."),(je[1]===le||"0"===je[1])&&(Ie=je[0],Re={$flags$:0,$hostId$:je[1],$nodeId$:je[2],$depth$:je[3],$index$:je[4],$elm$:X,$attrs$:null,$children$:null,$key$:null,$name$:null,$tag$:null,$text$:null},"t"===Ie?(Re.$elm$=X.nextSibling,Re.$elm$&&3===Re.$elm$.nodeType&&(Re.$text$=Re.$elm$.textContent,q.push(Re),X.remove(),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re,we&&"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$))):Re.$hostId$===le&&("s"===Ie?(Re.$tag$="slot",X["s-sn"]=je[5]?Re.$name$=je[5]:"",X["s-sr"]=!0,we&&(Re.$elm$=Z.createElement(Re.$tag$),Re.$name$&&Re.$elm$.setAttribute("name",Re.$name$),X.parentNode.insertBefore(Re.$elm$,X),X.remove(),"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$)),he.push(Re),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re):"r"===Ie&&(we?X.remove():(Pe["s-cr"]=X,X["s-cn"]=!0))));else if(F&&"style"===F.$tag$){const st=wt(null,X.textContent);st.$elm$=X,st.$index$="0",F.$children$=[st]}},mn=(F,q)=>{if(1===F.nodeType){let he=0;for(;he{if(q.$members$){F.watchers&&(q.$watchers$=F.watchers);const we=Object.entries(q.$members$),Pe=F.prototype;if(we.map(([X,[le]])=>{31&le||2&he&&32&le?Object.defineProperty(Pe,X,{get(){return((F,q)=>dn(this).$instanceValues$.get(q))(0,X)},set(Ie){((F,q,he,we)=>{const Pe=dn(F),X=Pe.$hostElement$,le=Pe.$instanceValues$.get(q),Ie=Pe.$flags$,je=Pe.$lazyInstance$;he=((F,q)=>null==F||Ke(F)?F:4&q?"false"!==F&&(""===F||!!F):2&q?parseFloat(F):1&q?String(F):F)(he,we.$members$[q][0]);const Re=Number.isNaN(le)&&Number.isNaN(he);if((!(8&Ie)||void 0===le)&&he!==le&&!Re&&(Pe.$instanceValues$.set(q,he),je)){if(we.$watchers$&&128&Ie){const st=we.$watchers$[q];st&&st.map(Mt=>{try{je[Mt](he,le,q)}catch(Wt){Tn(Wt,X)}})}2==(18&Ie)&&En(Pe,!1)}})(this,X,Ie,q)},configurable:!0,enumerable:!0}):1&he&&64&le&&Object.defineProperty(Pe,X,{value(...Ie){const je=dn(this);return je.$onInstancePromise$.then(()=>je.$lazyInstance$[X](...Ie))}})}),1&he){const X=new Map;Pe.attributeChangedCallback=function(le,Ie,je){S.jmp(()=>{const Re=X.get(le);if(this.hasOwnProperty(Re))je=this[Re],delete this[Re];else if(Pe.hasOwnProperty(Re)&&"number"==typeof this[Re]&&this[Re]==je)return;this[Re]=(null!==je||"boolean"!=typeof this[Re])&&je})},F.observedAttributes=we.filter(([le,Ie])=>15&Ie[0]).map(([le,Ie])=>{const je=Ie[1]||le;return X.set(je,le),512&Ie[0]&&q.$attrsToReflect$.push([le,je]),je})}}return F},ee=function(){var F=(0,o.Z)(function*(q,he,we,Pe,X){if(0==(32&he.$flags$)){{if(he.$flags$|=32,(X=vn(we)).then){const Re=()=>{};X=yield X,Re()}X.isProxied||(we.$watchers$=X.watchers,fe(X,we,2),X.isProxied=!0);const je=()=>{};he.$flags$|=8;try{new X(he)}catch(Re){Tn(Re)}he.$flags$&=-9,he.$flags$|=128,je(),Se(he.$lazyInstance$)}if(X.style){let je=X.style;"string"!=typeof je&&(je=je[he.$modeName$=(F=>Ir.map(q=>q(F)).find(q=>!!q))(q)]);const Re=de(we,he.$modeName$);if(!tr.has(Re)){const ot=()=>{};Ae(Re,je,!!(1&we.$flags$)),ot()}}}const le=he.$ancestorComponent$,Ie=()=>En(he,!0);le&&le["s-rc"]?le["s-rc"].push(Ie):Ie()});return function(he,we,Pe,X,le){return F.apply(this,arguments)}}(),Se=F=>{vt(F,"connectedCallback")},yt=F=>{const q=F["s-cr"]=Z.createComment("");q["s-cn"]=!0,F.insertBefore(q,F.firstChild)},cn=(F,q={})=>{const we=[],Pe=q.exclude||[],X=G.customElements,le=Z.head,Ie=le.querySelector("meta[charset]"),je=Z.createElement("style"),Re=[],ot=Z.querySelectorAll(`[${Ne}]`);let st,Mt=!0,Wt=0;for(Object.assign(S,q),S.$resourcesUrl$=new URL(q.resourcesUrl||"./",Z.baseURI).href,S.$flags$|=2;Wt{Bt[1].map(An=>{const Rn={$flags$:An[0],$tagName$:An[1],$members$:An[2],$listeners$:An[3]};Rn.$members$=An[2],Rn.$listeners$=An[3],Rn.$attrsToReflect$=[],Rn.$watchers$={};const Pn=Rn.$tagName$,ur=class extends HTMLElement{constructor(mr){super(mr),sr(mr=this,Rn),1&Rn.$flags$&&mr.attachShadow({mode:"open",delegatesFocus:!!(16&Rn.$flags$)})}connectedCallback(){st&&(clearTimeout(st),st=null),Mt?Re.push(this):S.jmp(()=>(F=>{if(0==(1&S.$flags$)){const q=dn(F),he=q.$cmpMeta$,we=()=>{};if(1&q.$flags$)K(F,q,he.$listeners$),Se(q.$lazyInstance$);else{let Pe;if(q.$flags$|=1,Pe=F.getAttribute(be),Pe){if(1&he.$flags$){const X=De(F.shadowRoot,he,F.getAttribute("s-mode"));F.classList.remove(X+"-h",X+"-s")}((F,q,he,we)=>{const X=F.shadowRoot,le=[],je=X?[]:null,Re=we.$vnode$=wt(q,null);S.$orgLocNodes$||mn(Z.body,S.$orgLocNodes$=new Map),F[be]=he,F.removeAttribute(be),Ln(Re,le,[],je,F,F,he),le.map(ot=>{const st=ot.$hostId$+"."+ot.$nodeId$,Mt=S.$orgLocNodes$.get(st),Wt=ot.$elm$;Mt&&""===Mt["s-en"]&&Mt.parentNode.insertBefore(Wt,Mt.nextSibling),X||(Wt["s-hn"]=q,Mt&&(Wt["s-ol"]=Mt,Wt["s-ol"]["s-nr"]=Wt)),S.$orgLocNodes$.delete(st)}),X&&je.map(ot=>{ot&&X.appendChild(ot)})})(F,he.$tagName$,Pe,q)}Pe||12&he.$flags$&&yt(F);{let X=F;for(;X=X.parentNode||X.host;)if(1===X.nodeType&&X.hasAttribute("s-id")&&X["s-p"]||X["s-p"]){Xn(q,q.$ancestorComponent$=X);break}}he.$members$&&Object.entries(he.$members$).map(([X,[le]])=>{if(31&le&&F.hasOwnProperty(X)){const Ie=F[X];delete F[X],F[X]=Ie}}),Un(()=>ee(F,q,he))}we()}})(this))}disconnectedCallback(){S.jmp(()=>(F=>{if(0==(1&S.$flags$)){const q=dn(this),he=q.$lazyInstance$;q.$rmListeners$&&(q.$rmListeners$.map(we=>we()),q.$rmListeners$=void 0),vt(he,"disconnectedCallback")}})())}componentOnReady(){return dn(this).$onReadyPromise$}};Rn.$lazyBundleId$=Bt[0],!Pe.includes(Pn)&&!X.get(Pn)&&(we.push(Pn),X.define(Pn,fe(ur,Rn,1)))})}),je.innerHTML=we+"{visibility:hidden}.hydrated{visibility:inherit}",je.setAttribute("data-styles",""),le.insertBefore(je,Ie?Ie.nextSibling:le.firstChild),Mt=!1,Re.length?Re.map(Bt=>Bt.connectedCallback()):S.jmp(()=>st=setTimeout(pt,30))},Dn=F=>{const q=new URL(F,S.$resourcesUrl$);return q.origin!==G.location.origin?q.href:q.pathname},sn=new WeakMap,dn=F=>sn.get(F),er=(F,q)=>sn.set(q.$lazyInstance$=F,q),sr=(F,q)=>{const he={$flags$:0,$hostElement$:F,$cmpMeta$:q,$instanceValues$:new Map};return he.$onInstancePromise$=new Promise(we=>he.$onInstanceResolve$=we),he.$onReadyPromise$=new Promise(we=>he.$onReadyResolve$=we),F["s-p"]=[],F["s-rc"]=[],K(F,he,q.$listeners$),sn.set(F,he)},$n=(F,q)=>q in F,Tn=(F,q)=>(0,console.error)(F,q),xn=new Map,vn=(F,q,he)=>{const we=F.$tagName$.replace(/-/g,"_"),Pe=F.$lazyBundleId$,X=xn.get(Pe);return X?X[we]:w(863)(`./${Pe}.entry.js`).then(le=>(xn.set(Pe,le),le[we]),Tn)},tr=new Map,Ir=[],cr=[],gr=[],$t=(F,q)=>he=>{F.push(he),Y||(Y=!0,q&&4&S.$flags$?Un(Qt):S.raf(Qt))},fn=F=>{for(let q=0;q{fn(cr),fn(gr),(Y=cr.length>0)&&S.raf(Qt)},Un=F=>j().then(F),On=$t(cr,!1),Cn=$t(gr,!0),rt={isDev:!1,isBrowser:!0,isServer:!1,isTesting:!1}},697:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>ge,a:()=>R,b:()=>W,c:()=>M,d:()=>U,e:()=>oe,g:()=>Q,l:()=>Be,s:()=>be,t:()=>G});var o=w(5861),x=w(1308),N=w(5730);const ge="ionViewWillEnter",R="ionViewDidEnter",W="ionViewWillLeave",M="ionViewDidLeave",U="ionViewWillUnload",G=T=>new Promise((k,O)=>{(0,x.c)(()=>{Z(T),S(T).then(te=>{te.animation&&te.animation.destroy(),B(T),k(te)},te=>{B(T),O(te)})})}),Z=T=>{const k=T.enteringEl,O=T.leavingEl;Ne(k,O,T.direction),T.showGoBack?k.classList.add("can-go-back"):k.classList.remove("can-go-back"),be(k,!1),k.style.setProperty("pointer-events","none"),O&&(be(O,!1),O.style.setProperty("pointer-events","none"))},S=function(){var T=(0,o.Z)(function*(k){const O=yield E(k);return O&&x.B.isBrowser?j(O,k):P(k)});return function(O){return T.apply(this,arguments)}}(),B=T=>{const k=T.enteringEl,O=T.leavingEl;k.classList.remove("ion-page-invisible"),k.style.removeProperty("pointer-events"),void 0!==O&&(O.classList.remove("ion-page-invisible"),O.style.removeProperty("pointer-events"))},E=function(){var T=(0,o.Z)(function*(k){return k.leavingEl&&k.animated&&0!==k.duration?k.animationBuilder?k.animationBuilder:"ios"===k.mode?(yield Promise.resolve().then(w.bind(w,3953))).iosTransitionAnimation:(yield Promise.resolve().then(w.bind(w,3880))).mdTransitionAnimation:void 0});return function(O){return T.apply(this,arguments)}}(),j=function(){var T=(0,o.Z)(function*(k,O){yield K(O,!0);const te=k(O.baseEl,O);Te(O.enteringEl,O.leavingEl);const ce=yield ke(te,O);return O.progressCallback&&O.progressCallback(void 0),ce&&ie(O.enteringEl,O.leavingEl),{hasCompleted:ce,animation:te}});return function(O,te){return T.apply(this,arguments)}}(),P=function(){var T=(0,o.Z)(function*(k){const O=k.enteringEl,te=k.leavingEl;return yield K(k,!1),Te(O,te),ie(O,te),{hasCompleted:!0}});return function(O){return T.apply(this,arguments)}}(),K=function(){var T=(0,o.Z)(function*(k,O){const ce=(void 0!==k.deepWait?k.deepWait:O)?[oe(k.enteringEl),oe(k.leavingEl)]:[re(k.enteringEl),re(k.leavingEl)];yield Promise.all(ce),yield pe(k.viewIsReady,k.enteringEl)});return function(O,te){return T.apply(this,arguments)}}(),pe=function(){var T=(0,o.Z)(function*(k,O){k&&(yield k(O))});return function(O,te){return T.apply(this,arguments)}}(),ke=(T,k)=>{const O=k.progressCallback,te=new Promise(ce=>{T.onFinish(Ae=>ce(1===Ae))});return O?(T.progressStart(!0),O(T)):T.play(),te},Te=(T,k)=>{Be(k,W),Be(T,ge)},ie=(T,k)=>{Be(T,R),Be(k,M)},Be=(T,k)=>{if(T){const O=new CustomEvent(k,{bubbles:!1,cancelable:!1});T.dispatchEvent(O)}},re=T=>T?new Promise(k=>(0,N.c)(T,k)):Promise.resolve(),oe=function(){var T=(0,o.Z)(function*(k){const O=k;if(O){if(null!=O.componentOnReady){if(null!=(yield O.componentOnReady()))return}else if(null!=O.__registerHost)return void(yield new Promise(ce=>(0,N.r)(ce)));yield Promise.all(Array.from(O.children).map(oe))}});return function(O){return T.apply(this,arguments)}}(),be=(T,k)=>{k?(T.setAttribute("aria-hidden","true"),T.classList.add("ion-page-hidden")):(T.hidden=!1,T.removeAttribute("aria-hidden"),T.classList.remove("ion-page-hidden"))},Ne=(T,k,O)=>{void 0!==T&&(T.style.zIndex="back"===O?"99":"101"),void 0!==k&&(k.style.zIndex="100")},Q=T=>T.classList.contains("ion-page")?T:T.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")||T},1911:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{GESTURE_CONTROLLER:()=>o.G,createGesture:()=>_});var o=w(4349);const x=(S,B,E,j)=>{const P=N(S)?{capture:!!j.capture,passive:!!j.passive}:!!j.capture;let K,pe;return S.__zone_symbol__addEventListener?(K="__zone_symbol__addEventListener",pe="__zone_symbol__removeEventListener"):(K="addEventListener",pe="removeEventListener"),S[K](B,E,P),()=>{S[pe](B,E,P)}},N=S=>{if(void 0===ge)try{const B=Object.defineProperty({},"passive",{get:()=>{ge=!0}});S.addEventListener("optsTest",()=>{},B)}catch{ge=!1}return!!ge};let ge;const M=S=>S instanceof Document?S:S.ownerDocument,_=S=>{let B=!1,E=!1,j=!0,P=!1;const K=Object.assign({disableScroll:!1,direction:"x",gesturePriority:0,passive:!0,maxAngle:40,threshold:10},S),pe=K.canStart,ke=K.onWillStart,Te=K.onStart,ie=K.onEnd,Be=K.notCaptured,re=K.onMove,oe=K.threshold,be=K.passive,Ne=K.blurOnStart,Q={type:"pan",startX:0,startY:0,startTime:0,currentX:0,currentY:0,velocityX:0,velocityY:0,deltaX:0,deltaY:0,currentTime:0,event:void 0,data:void 0},T=((S,B,E)=>{const j=E*(Math.PI/180),P="x"===S,K=Math.cos(j),pe=B*B;let ke=0,Te=0,ie=!1,Be=0;return{start(re,oe){ke=re,Te=oe,Be=0,ie=!0},detect(re,oe){if(!ie)return!1;const be=re-ke,Ne=oe-Te,Q=be*be+Ne*Ne;if(QK?1:k<-K?-1:0,ie=!1,!0},isGesture:()=>0!==Be,getDirection:()=>Be}})(K.direction,K.threshold,K.maxAngle),k=o.G.createGesture({name:S.gestureName,priority:S.gesturePriority,disableScroll:S.disableScroll}),ce=()=>{!B||(P=!1,re&&re(Q))},Ae=()=>!!k.capture()&&(B=!0,j=!1,Q.startX=Q.currentX,Q.startY=Q.currentY,Q.startTime=Q.currentTime,ke?ke(Q).then(ue):ue(),!0),ue=()=>{Ne&&(()=>{if(typeof document<"u"){const ze=document.activeElement;ze?.blur&&ze.blur()}})(),Te&&Te(Q),j=!0},de=()=>{B=!1,E=!1,P=!1,j=!0,k.release()},ne=ze=>{const dt=B,et=j;if(de(),et){if(Y(Q,ze),dt)return void(ie&&ie(Q));Be&&Be(Q)}},Ee=((S,B,E,j,P)=>{let K,pe,ke,Te,ie,Be,re,oe=0;const be=De=>{oe=Date.now()+2e3,B(De)&&(!pe&&E&&(pe=x(S,"touchmove",E,P)),ke||(ke=x(De.target,"touchend",Q,P)),Te||(Te=x(De.target,"touchcancel",Q,P)))},Ne=De=>{oe>Date.now()||!B(De)||(!Be&&E&&(Be=x(M(S),"mousemove",E,P)),re||(re=x(M(S),"mouseup",T,P)))},Q=De=>{k(),j&&j(De)},T=De=>{O(),j&&j(De)},k=()=>{pe&&pe(),ke&&ke(),Te&&Te(),pe=ke=Te=void 0},O=()=>{Be&&Be(),re&&re(),Be=re=void 0},te=()=>{k(),O()},ce=(De=!0)=>{De?(K||(K=x(S,"touchstart",be,P)),ie||(ie=x(S,"mousedown",Ne,P))):(K&&K(),ie&&ie(),K=ie=void 0,te())};return{enable:ce,stop:te,destroy:()=>{ce(!1),j=E=B=void 0}}})(K.el,ze=>{const dt=Z(ze);return!(E||!j||(G(ze,Q),Q.startX=Q.currentX,Q.startY=Q.currentY,Q.startTime=Q.currentTime=dt,Q.velocityX=Q.velocityY=Q.deltaX=Q.deltaY=0,Q.event=ze,pe&&!1===pe(Q))||(k.release(),!k.start()))&&(E=!0,0===oe?Ae():(T.start(Q.startX,Q.startY),!0))},ze=>{B?!P&&j&&(P=!0,Y(Q,ze),requestAnimationFrame(ce)):(Y(Q,ze),T.detect(Q.currentX,Q.currentY)&&(!T.isGesture()||!Ae())&&Ce())},ne,{capture:!1,passive:be}),Ce=()=>{de(),Ee.stop(),Be&&Be(Q)};return{enable(ze=!0){ze||(B&&ne(void 0),de()),Ee.enable(ze)},destroy(){k.destroy(),Ee.destroy()}}},Y=(S,B)=>{if(!B)return;const E=S.currentX,j=S.currentY,P=S.currentTime;G(B,S);const K=S.currentX,pe=S.currentY,Te=(S.currentTime=Z(B))-P;if(Te>0&&Te<100){const Be=(pe-j)/Te;S.velocityX=(K-E)/Te*.7+.3*S.velocityX,S.velocityY=.7*Be+.3*S.velocityY}S.deltaX=K-S.startX,S.deltaY=pe-S.startY,S.event=B},G=(S,B)=>{let E=0,j=0;if(S){const P=S.changedTouches;if(P&&P.length>0){const K=P[0];E=K.clientX,j=K.clientY}else void 0!==S.pageX&&(E=S.pageX,j=S.pageY)}B.currentX=E,B.currentY=j},Z=S=>S.timeStamp||Date.now()},9658:(Qe,Fe,w)=>{"use strict";w.d(Fe,{a:()=>G,b:()=>ce,c:()=>N,g:()=>Y,i:()=>Ae});var o=w(1308);class x{constructor(){this.m=new Map}reset(ue){this.m=new Map(Object.entries(ue))}get(ue,de){const ne=this.m.get(ue);return void 0!==ne?ne:de}getBoolean(ue,de=!1){const ne=this.m.get(ue);return void 0===ne?de:"string"==typeof ne?"true"===ne:!!ne}getNumber(ue,de){const ne=parseFloat(this.m.get(ue));return isNaN(ne)?void 0!==de?de:NaN:ne}set(ue,de){this.m.set(ue,de)}}const N=new x,U="ionic:",_="ionic-persist-config",Y=De=>Z(De),G=(De,ue)=>("string"==typeof De&&(ue=De,De=void 0),Y(De).includes(ue)),Z=(De=window)=>{if(typeof De>"u")return[];De.Ionic=De.Ionic||{};let ue=De.Ionic.platforms;return null==ue&&(ue=De.Ionic.platforms=S(De),ue.forEach(de=>De.document.documentElement.classList.add(`plt-${de}`))),ue},S=De=>{const ue=N.get("platform");return Object.keys(O).filter(de=>{const ne=ue?.[de];return"function"==typeof ne?ne(De):O[de](De)})},E=De=>!!(T(De,/iPad/i)||T(De,/Macintosh/i)&&ie(De)),K=De=>T(De,/android|sink/i),ie=De=>k(De,"(any-pointer:coarse)"),re=De=>oe(De)||be(De),oe=De=>!!(De.cordova||De.phonegap||De.PhoneGap),be=De=>!!De.Capacitor?.isNative,T=(De,ue)=>ue.test(De.navigator.userAgent),k=(De,ue)=>{var de;return null===(de=De.matchMedia)||void 0===de?void 0:de.call(De,ue).matches},O={ipad:E,iphone:De=>T(De,/iPhone/i),ios:De=>T(De,/iPhone|iPod/i)||E(De),android:K,phablet:De=>{const ue=De.innerWidth,de=De.innerHeight,ne=Math.min(ue,de),Ee=Math.max(ue,de);return ne>390&&ne<520&&Ee>620&&Ee<800},tablet:De=>{const ue=De.innerWidth,de=De.innerHeight,ne=Math.min(ue,de),Ee=Math.max(ue,de);return E(De)||(De=>K(De)&&!T(De,/mobile/i))(De)||ne>460&&ne<820&&Ee>780&&Ee<1400},cordova:oe,capacitor:be,electron:De=>T(De,/electron/i),pwa:De=>{var ue;return!(!(null===(ue=De.matchMedia)||void 0===ue?void 0:ue.call(De,"(display-mode: standalone)").matches)&&!De.navigator.standalone)},mobile:ie,mobileweb:De=>ie(De)&&!re(De),desktop:De=>!ie(De),hybrid:re};let te;const ce=De=>De&&(0,o.g)(De)||te,Ae=(De={})=>{if(typeof window>"u")return;const ue=window.document,de=window,ne=de.Ionic=de.Ionic||{},Ee={};De._ael&&(Ee.ael=De._ael),De._rel&&(Ee.rel=De._rel),De._ce&&(Ee.ce=De._ce),(0,o.s)(Ee);const Ce=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(De=>{try{const ue=De.sessionStorage.getItem(_);return null!==ue?JSON.parse(ue):{}}catch{return{}}})(de)),{persistConfig:!1}),ne.config),(De=>{const ue={};return De.location.search.slice(1).split("&").map(de=>de.split("=")).map(([de,ne])=>[decodeURIComponent(de),decodeURIComponent(ne)]).filter(([de])=>((De,ue)=>De.substr(0,ue.length)===ue)(de,U)).map(([de,ne])=>[de.slice(U.length),ne]).forEach(([de,ne])=>{ue[de]=ne}),ue})(de)),De);N.reset(Ce),N.getBoolean("persistConfig")&&((De,ue)=>{try{De.sessionStorage.setItem(_,JSON.stringify(ue))}catch{return}})(de,Ce),Z(de),ne.config=N,ne.mode=te=N.get("mode",ue.documentElement.getAttribute("mode")||(G(de,"ios")?"ios":"md")),N.set("mode",te),ue.documentElement.setAttribute("mode",te),ue.documentElement.classList.add(te),N.getBoolean("_testing")&&N.set("animated",!1);const ze=et=>{var Ue;return null===(Ue=et.tagName)||void 0===Ue?void 0:Ue.startsWith("ION-")},dt=et=>["ios","md"].includes(et);(0,o.a)(et=>{for(;et;){const Ue=et.mode||et.getAttribute("mode");if(Ue){if(dt(Ue))return Ue;ze(et)&&console.warn('Invalid ionic mode: "'+Ue+'", expected: "ios" or "md"')}et=et.parentElement}return te})}},3953:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{iosTransitionAnimation:()=>S,shadow:()=>M});var o=w(8834),x=w(697);w(3457),w(1308);const W=B=>document.querySelector(`${B}.ion-cloned-element`),M=B=>B.shadowRoot||B,U=B=>{const E="ION-TABS"===B.tagName?B:B.querySelector("ion-tabs"),j="ion-content ion-header:not(.header-collapse-condense-inactive) ion-title.title-large";if(null!=E){const P=E.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");return null!=P?P.querySelector(j):null}return B.querySelector(j)},_=(B,E)=>{const j="ION-TABS"===B.tagName?B:B.querySelector("ion-tabs");let P=[];if(null!=j){const K=j.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");null!=K&&(P=K.querySelectorAll("ion-buttons"))}else P=B.querySelectorAll("ion-buttons");for(const K of P){const pe=K.closest("ion-header"),ke=pe&&!pe.classList.contains("header-collapse-condense-inactive"),Te=K.querySelector("ion-back-button"),ie=K.classList.contains("buttons-collapse"),Be="start"===K.slot||""===K.slot;if(null!==Te&&Be&&(ie&&ke&&E||!ie))return Te}return null},G=(B,E,j,P,K,pe)=>{const ke=E?`calc(100% - ${pe.right+4}px)`:pe.left-4+"px",Te=E?"7px":"-7px",ie=E?"-4px":"4px",Be=E?"-4px":"4px",re=E?"right":"left",oe=E?"left":"right",Q=j?[{offset:0,opacity:1,transform:`translate3d(${ie}, ${pe.top-46}px, 0) scale(1)`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${Te}, ${K.top-40}px, 0) scale(2.1)`}]:[{offset:0,opacity:0,transform:`translate3d(${Te}, ${K.top-40}px, 0) scale(2.1)`},{offset:1,opacity:1,transform:`translate3d(${ie}, ${pe.top-46}px, 0) scale(1)`}],O=j?[{offset:0,opacity:1,transform:`translate3d(${Be}, ${pe.top-46}px, 0) scale(1)`},{offset:.2,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`},{offset:1,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`}]:[{offset:0,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`},{offset:1,opacity:1,transform:`translate3d(${Be}, ${pe.top-46}px, 0) scale(1)`}],te=(0,o.c)(),ce=(0,o.c)(),Ae=W("ion-back-button"),De=M(Ae).querySelector(".button-text"),ue=M(Ae).querySelector("ion-icon");Ae.text=P.text,Ae.mode=P.mode,Ae.icon=P.icon,Ae.color=P.color,Ae.disabled=P.disabled,Ae.style.setProperty("display","block"),Ae.style.setProperty("position","fixed"),ce.addElement(ue),te.addElement(De),te.beforeStyles({"transform-origin":`${re} center`}).beforeAddWrite(()=>{P.style.setProperty("display","none"),Ae.style.setProperty(re,ke)}).afterAddWrite(()=>{P.style.setProperty("display",""),Ae.style.setProperty("display","none"),Ae.style.removeProperty(re)}).keyframes(Q),ce.beforeStyles({"transform-origin":`${oe} center`}).keyframes(O),B.addAnimation([te,ce])},Z=(B,E,j,P,K,pe)=>{const ke=E?`calc(100% - ${K.right}px)`:`${K.left}px`,Te=E?"-18px":"18px",ie=E?"right":"left",oe=j?[{offset:0,opacity:0,transform:`translate3d(${Te}, ${pe.top-4}px, 0) scale(0.49)`},{offset:.1,opacity:0},{offset:1,opacity:1,transform:`translate3d(0, ${K.top-2}px, 0) scale(1)`}]:[{offset:0,opacity:.99,transform:`translate3d(0, ${K.top-2}px, 0) scale(1)`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${Te}, ${pe.top-4}px, 0) scale(0.5)`}],be=W("ion-title"),Ne=(0,o.c)();be.innerText=P.innerText,be.size=P.size,be.color=P.color,Ne.addElement(be),Ne.beforeStyles({"transform-origin":`${ie} center`,height:"46px",display:"",position:"relative",[ie]:ke}).beforeAddWrite(()=>{P.style.setProperty("display","none")}).afterAddWrite(()=>{P.style.setProperty("display",""),be.style.setProperty("display","none")}).keyframes(oe),B.addAnimation(Ne)},S=(B,E)=>{var j;try{const P="cubic-bezier(0.32,0.72,0,1)",K="opacity",pe="transform",ke="0%",ie="rtl"===B.ownerDocument.dir,Be=ie?"-99.5%":"99.5%",re=ie?"33%":"-33%",oe=E.enteringEl,be=E.leavingEl,Ne="back"===E.direction,Q=oe.querySelector(":scope > ion-content"),T=oe.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *"),k=oe.querySelectorAll(":scope > ion-header > ion-toolbar"),O=(0,o.c)(),te=(0,o.c)();if(O.addElement(oe).duration((null!==(j=E.duration)&&void 0!==j?j:0)||540).easing(E.easing||P).fill("both").beforeRemoveClass("ion-page-invisible"),be&&null!=B){const ue=(0,o.c)();ue.addElement(B),O.addAnimation(ue)}if(Q||0!==k.length||0!==T.length?(te.addElement(Q),te.addElement(T)):te.addElement(oe.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),O.addAnimation(te),Ne?te.beforeClearStyles([K]).fromTo("transform",`translateX(${re})`,`translateX(${ke})`).fromTo(K,.8,1):te.beforeClearStyles([K]).fromTo("transform",`translateX(${Be})`,`translateX(${ke})`),Q){const ue=M(Q).querySelector(".transition-effect");if(ue){const de=ue.querySelector(".transition-cover"),ne=ue.querySelector(".transition-shadow"),Ee=(0,o.c)(),Ce=(0,o.c)(),ze=(0,o.c)();Ee.addElement(ue).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),Ce.addElement(de).beforeClearStyles([K]).fromTo(K,0,.1),ze.addElement(ne).beforeClearStyles([K]).fromTo(K,.03,.7),Ee.addAnimation([Ce,ze]),te.addAnimation([Ee])}}const ce=oe.querySelector("ion-header.header-collapse-condense"),{forward:Ae,backward:De}=((B,E,j,P,K)=>{const pe=_(P,j),ke=U(K),Te=U(P),ie=_(K,j),Be=null!==pe&&null!==ke&&!j,re=null!==Te&&null!==ie&&j;if(Be){const oe=ke.getBoundingClientRect(),be=pe.getBoundingClientRect();Z(B,E,j,ke,oe,be),G(B,E,j,pe,oe,be)}else if(re){const oe=Te.getBoundingClientRect(),be=ie.getBoundingClientRect();Z(B,E,j,Te,oe,be),G(B,E,j,ie,oe,be)}return{forward:Be,backward:re}})(O,ie,Ne,oe,be);if(k.forEach(ue=>{const de=(0,o.c)();de.addElement(ue),O.addAnimation(de);const ne=(0,o.c)();ne.addElement(ue.querySelector("ion-title"));const Ee=(0,o.c)(),Ce=Array.from(ue.querySelectorAll("ion-buttons,[menuToggle]")),ze=ue.closest("ion-header"),dt=ze?.classList.contains("header-collapse-condense-inactive");let et;et=Ce.filter(Ne?wt=>{const Rt=wt.classList.contains("buttons-collapse");return Rt&&!dt||!Rt}:wt=>!wt.classList.contains("buttons-collapse")),Ee.addElement(et);const Ue=(0,o.c)();Ue.addElement(ue.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])"));const St=(0,o.c)();St.addElement(M(ue).querySelector(".toolbar-background"));const Ke=(0,o.c)(),nn=ue.querySelector("ion-back-button");if(nn&&Ke.addElement(nn),de.addAnimation([ne,Ee,Ue,St,Ke]),Ee.fromTo(K,.01,1),Ue.fromTo(K,.01,1),Ne)dt||ne.fromTo("transform",`translateX(${re})`,`translateX(${ke})`).fromTo(K,.01,1),Ue.fromTo("transform",`translateX(${re})`,`translateX(${ke})`),Ke.fromTo(K,.01,1);else if(ce||ne.fromTo("transform",`translateX(${Be})`,`translateX(${ke})`).fromTo(K,.01,1),Ue.fromTo("transform",`translateX(${Be})`,`translateX(${ke})`),St.beforeClearStyles([K,"transform"]),ze?.translucent?St.fromTo("transform",ie?"translateX(-100%)":"translateX(100%)","translateX(0px)"):St.fromTo(K,.01,"var(--opacity)"),Ae||Ke.fromTo(K,.01,1),nn&&!Ae){const Rt=(0,o.c)();Rt.addElement(M(nn).querySelector(".button-text")).fromTo("transform",ie?"translateX(-100px)":"translateX(100px)","translateX(0px)"),de.addAnimation(Rt)}}),be){const ue=(0,o.c)(),de=be.querySelector(":scope > ion-content"),ne=be.querySelectorAll(":scope > ion-header > ion-toolbar"),Ee=be.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *");if(de||0!==ne.length||0!==Ee.length?(ue.addElement(de),ue.addElement(Ee)):ue.addElement(be.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),O.addAnimation(ue),Ne){ue.beforeClearStyles([K]).fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)");const Ce=(0,x.g)(be);O.afterAddWrite(()=>{"normal"===O.getDirection()&&Ce.style.setProperty("display","none")})}else ue.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).fromTo(K,1,.8);if(de){const Ce=M(de).querySelector(".transition-effect");if(Ce){const ze=Ce.querySelector(".transition-cover"),dt=Ce.querySelector(".transition-shadow"),et=(0,o.c)(),Ue=(0,o.c)(),St=(0,o.c)();et.addElement(Ce).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),Ue.addElement(ze).beforeClearStyles([K]).fromTo(K,.1,0),St.addElement(dt).beforeClearStyles([K]).fromTo(K,.7,.03),et.addAnimation([Ue,St]),ue.addAnimation([et])}}ne.forEach(Ce=>{const ze=(0,o.c)();ze.addElement(Ce);const dt=(0,o.c)();dt.addElement(Ce.querySelector("ion-title"));const et=(0,o.c)(),Ue=Ce.querySelectorAll("ion-buttons,[menuToggle]"),St=Ce.closest("ion-header"),Ke=St?.classList.contains("header-collapse-condense-inactive"),nn=Array.from(Ue).filter(Ut=>{const it=Ut.classList.contains("buttons-collapse");return it&&!Ke||!it});et.addElement(nn);const wt=(0,o.c)(),Rt=Ce.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])");Rt.length>0&&wt.addElement(Rt);const Kt=(0,o.c)();Kt.addElement(M(Ce).querySelector(".toolbar-background"));const pn=(0,o.c)(),Pt=Ce.querySelector("ion-back-button");if(Pt&&pn.addElement(Pt),ze.addAnimation([dt,et,wt,pn,Kt]),O.addAnimation(ze),pn.fromTo(K,.99,0),et.fromTo(K,.99,0),wt.fromTo(K,.99,0),Ne){if(Ke||dt.fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)").fromTo(K,.99,0),wt.fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)"),Kt.beforeClearStyles([K,"transform"]),St?.translucent?Kt.fromTo("transform","translateX(0px)",ie?"translateX(-100%)":"translateX(100%)"):Kt.fromTo(K,"var(--opacity)",0),Pt&&!De){const it=(0,o.c)();it.addElement(M(Pt).querySelector(".button-text")).fromTo("transform",`translateX(${ke})`,`translateX(${(ie?-124:124)+"px"})`),ze.addAnimation(it)}}else Ke||dt.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).fromTo(K,.99,0).afterClearStyles([pe,K]),wt.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).afterClearStyles([pe,K]),pn.afterClearStyles([K]),dt.afterClearStyles([K]),et.afterClearStyles([K])})}return O}catch(P){throw P}}},3880:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{mdTransitionAnimation:()=>R});var o=w(8834),x=w(697);w(3457),w(1308);const R=(W,M)=>{var U,_,Y;const S="back"===M.direction,E=M.leavingEl,j=(0,x.g)(M.enteringEl),P=j.querySelector("ion-toolbar"),K=(0,o.c)();if(K.addElement(j).fill("both").beforeRemoveClass("ion-page-invisible"),S?K.duration((null!==(U=M.duration)&&void 0!==U?U:0)||200).easing("cubic-bezier(0.47,0,0.745,0.715)"):K.duration((null!==(_=M.duration)&&void 0!==_?_:0)||280).easing("cubic-bezier(0.36,0.66,0.04,1)").fromTo("transform","translateY(40px)","translateY(0px)").fromTo("opacity",.01,1),P){const pe=(0,o.c)();pe.addElement(P),K.addAnimation(pe)}if(E&&S){K.duration((null!==(Y=M.duration)&&void 0!==Y?Y:0)||200).easing("cubic-bezier(0.47,0,0.745,0.715)");const pe=(0,o.c)();pe.addElement((0,x.g)(E)).onFinish(ke=>{1===ke&&pe.elements.length>0&&pe.elements[0].style.setProperty("display","none")}).fromTo("transform","translateY(0px)","translateY(40px)").fromTo("opacity",1,0),K.addAnimation(pe)}return K}},4414:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>de,a:()=>U,b:()=>_,c:()=>S,d:()=>Ne,e:()=>E,f:()=>T,g:()=>te,h:()=>W,i:()=>Ae,j:()=>K,k:()=>oe,l:()=>Y,m:()=>G,s:()=>ue,t:()=>B});var o=w(5861),x=w(9658),N=w(7593),ge=w(5730);let R=0;const W=new WeakMap,M=ne=>({create:Ee=>j(ne,Ee),dismiss:(Ee,Ce,ze)=>Be(document,Ee,Ce,ne,ze),getTop:()=>(0,o.Z)(function*(){return oe(document,ne)})()}),U=M("ion-alert"),_=M("ion-action-sheet"),Y=M("ion-loading"),G=M("ion-modal"),S=M("ion-popover"),B=M("ion-toast"),E=ne=>{typeof document<"u"&&ie(document);const Ee=R++;ne.overlayIndex=Ee,ne.hasAttribute("id")||(ne.id=`ion-overlay-${Ee}`)},j=(ne,Ee)=>typeof window<"u"&&typeof window.customElements<"u"?window.customElements.whenDefined(ne).then(()=>{const Ce=document.createElement(ne);return Ce.classList.add("overlay-hidden"),Object.assign(Ce,Object.assign(Object.assign({},Ee),{hasController:!0})),k(document).appendChild(Ce),new Promise(ze=>(0,ge.c)(Ce,ze))}):Promise.resolve(),P='[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])',K=(ne,Ee)=>{let Ce=ne.querySelector(P);const ze=Ce?.shadowRoot;ze&&(Ce=ze.querySelector(P)||Ce),Ce?(0,ge.f)(Ce):Ee.focus()},ke=(ne,Ee)=>{const Ce=Array.from(ne.querySelectorAll(P));let ze=Ce.length>0?Ce[Ce.length-1]:null;const dt=ze?.shadowRoot;dt&&(ze=dt.querySelector(P)||ze),ze?ze.focus():Ee.focus()},ie=ne=>{0===R&&(R=1,ne.addEventListener("focus",Ee=>{((ne,Ee)=>{const Ce=oe(Ee,"ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover"),ze=ne.target;Ce&&ze&&!Ce.classList.contains("ion-disable-focus-trap")&&(Ce.shadowRoot?(()=>{if(Ce.contains(ze))Ce.lastFocus=ze;else{const Ue=Ce.lastFocus;K(Ce,Ce),Ue===Ee.activeElement&&ke(Ce,Ce),Ce.lastFocus=Ee.activeElement}})():(()=>{if(Ce===ze)Ce.lastFocus=void 0;else{const Ue=(0,ge.g)(Ce);if(!Ue.contains(ze))return;const St=Ue.querySelector(".ion-overlay-wrapper");if(!St)return;if(St.contains(ze))Ce.lastFocus=ze;else{const Ke=Ce.lastFocus;K(St,Ce),Ke===Ee.activeElement&&ke(St,Ce),Ce.lastFocus=Ee.activeElement}}})())})(Ee,ne)},!0),ne.addEventListener("ionBackButton",Ee=>{const Ce=oe(ne);Ce?.backdropDismiss&&Ee.detail.register(N.OVERLAY_BACK_BUTTON_PRIORITY,()=>Ce.dismiss(void 0,de))}),ne.addEventListener("keyup",Ee=>{if("Escape"===Ee.key){const Ce=oe(ne);Ce?.backdropDismiss&&Ce.dismiss(void 0,de)}}))},Be=(ne,Ee,Ce,ze,dt)=>{const et=oe(ne,ze,dt);return et?et.dismiss(Ee,Ce):Promise.reject("overlay does not exist")},oe=(ne,Ee,Ce)=>{const ze=((ne,Ee)=>(void 0===Ee&&(Ee="ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover,ion-toast"),Array.from(ne.querySelectorAll(Ee)).filter(Ce=>Ce.overlayIndex>0)))(ne,Ee).filter(dt=>!(ne=>ne.classList.contains("overlay-hidden"))(dt));return void 0===Ce?ze[ze.length-1]:ze.find(dt=>dt.id===Ce)},be=(ne=!1)=>{const Ce=k(document).querySelector("ion-router-outlet, ion-nav, #ion-view-container-root");!Ce||(ne?Ce.setAttribute("aria-hidden","true"):Ce.removeAttribute("aria-hidden"))},Ne=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt,et){var Ue,St;if(Ee.presented)return;be(!0),Ee.presented=!0,Ee.willPresent.emit(),null===(Ue=Ee.willPresentShorthand)||void 0===Ue||Ue.emit();const Ke=(0,x.b)(Ee),nn=Ee.enterAnimation?Ee.enterAnimation:x.c.get(Ce,"ios"===Ke?ze:dt);(yield O(Ee,nn,Ee.el,et))&&(Ee.didPresent.emit(),null===(St=Ee.didPresentShorthand)||void 0===St||St.emit()),"ION-TOAST"!==Ee.el.tagName&&Q(Ee.el),Ee.keyboardClose&&(null===document.activeElement||!Ee.el.contains(document.activeElement))&&Ee.el.focus()});return function(Ce,ze,dt,et,Ue){return ne.apply(this,arguments)}}(),Q=function(){var ne=(0,o.Z)(function*(Ee){let Ce=document.activeElement;if(!Ce)return;const ze=Ce?.shadowRoot;ze&&(Ce=ze.querySelector(P)||Ce),yield Ee.onDidDismiss(),Ce.focus()});return function(Ce){return ne.apply(this,arguments)}}(),T=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt,et,Ue,St){var Ke,nn;if(!Ee.presented)return!1;be(!1),Ee.presented=!1;try{Ee.el.style.setProperty("pointer-events","none"),Ee.willDismiss.emit({data:Ce,role:ze}),null===(Ke=Ee.willDismissShorthand)||void 0===Ke||Ke.emit({data:Ce,role:ze});const wt=(0,x.b)(Ee),Rt=Ee.leaveAnimation?Ee.leaveAnimation:x.c.get(dt,"ios"===wt?et:Ue);"gesture"!==ze&&(yield O(Ee,Rt,Ee.el,St)),Ee.didDismiss.emit({data:Ce,role:ze}),null===(nn=Ee.didDismissShorthand)||void 0===nn||nn.emit({data:Ce,role:ze}),W.delete(Ee),Ee.el.classList.add("overlay-hidden"),Ee.el.style.removeProperty("pointer-events")}catch(wt){console.error(wt)}return Ee.el.remove(),!0});return function(Ce,ze,dt,et,Ue,St,Ke){return ne.apply(this,arguments)}}(),k=ne=>ne.querySelector("ion-app")||ne.body,O=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt){ze.classList.remove("overlay-hidden");const Ue=Ce(Ee.el,dt);(!Ee.animated||!x.c.getBoolean("animated",!0))&&Ue.duration(0),Ee.keyboardClose&&Ue.beforeAddWrite(()=>{const Ke=ze.ownerDocument.activeElement;Ke?.matches("input,ion-input, ion-textarea")&&Ke.blur()});const St=W.get(Ee)||[];return W.set(Ee,[...St,Ue]),yield Ue.play(),!0});return function(Ce,ze,dt,et){return ne.apply(this,arguments)}}(),te=(ne,Ee)=>{let Ce;const ze=new Promise(dt=>Ce=dt);return ce(ne,Ee,dt=>{Ce(dt.detail)}),ze},ce=(ne,Ee,Ce)=>{const ze=dt=>{(0,ge.b)(ne,Ee,ze),Ce(dt)};(0,ge.a)(ne,Ee,ze)},Ae=ne=>"cancel"===ne||ne===de,De=ne=>ne(),ue=(ne,Ee)=>{if("function"==typeof ne)return x.c.get("_zoneGate",De)(()=>{try{return ne(Ee)}catch(ze){throw ze}})},de="backdrop"},600:(Qe,Fe,w)=>{"use strict";w.d(Fe,{v:()=>Z});var o=w(9192),x=w(529),N=w(1135),ge=w(7579),R=w(9646),W=w(3900),M=w(3099),U=w(4004),_=w(7225),Y=w(8274),G=w(502);let Z=(()=>{class S extends o.iw{constructor(E,j){super(),this.http=E,this.loadingCtrl=j,this.loggedIn=!1,this.stationFreezed=!1,this.captionmode=!1,this.geraeteSubject=new N.X([]),this.wertungenSubject=new N.X([]),this.newLastResults=new N.X(void 0),this._clubregistrations=[],this.clubRegistrations=new N.X([]),this.askForUsername=new ge.x,this._competition=void 0,this._durchgang=void 0,this._geraet=void 0,this._step=void 0,this.lastJWTChecked=0,this.wertungenLoading=!1,this.isInitializing=!1,this._activeDurchgangList=[],this.durchgangStarted=new N.X([]),this.wertungUpdated=new ge.x,this.standardErrorHandler=P=>{if(console.log(P),this.resetLoading(),this.wertungenLoading=!1,this.isInitializing=!1,401===P.status)localStorage.removeItem("auth_token"),this.loggedIn=!1,this.showMessage.next({msg:"Die Berechtigung zum erfassen von Wertungen ist abgelaufen.",type:"Berechtigung"});else if(404===P.status)this.loggedIn=!1,this.stationFreezed=!1,this.captionmode=!1,this._competition=void 0,this._durchgang=void 0,this._geraet=void 0,this._step=void 0,localStorage.removeItem("auth_token"),localStorage.removeItem("current_competition"),localStorage.removeItem("current_station"),localStorage.removeItem("auth_clubid"),this.showMessage.next({msg:"Die aktuele Einstellung ist nicht mehr g\xfcltig und wird zur\xfcckgesetzt.",type:"Einstellung"});else{const K={msg:""+P.statusText+"
"+P.message,type:P.name};(!this.lastMessageAck||this.lastMessageAck.msg!==K.msg)&&this.showMessage.next(K)}},this.clublist=[],this.showMessage.subscribe(P=>{this.resetLoading(),this.lastMessageAck=P}),this.resetLoading()}get competition(){return this._competition}get durchgang(){return this._durchgang}get geraet(){return this._geraet}get step(){return this._step}set currentUserName(E){localStorage.setItem("current_username",E)}get currentUserName(){return localStorage.getItem("current_username")}get activeDurchgangList(){return this._activeDurchgangList}get authenticatedClubId(){return localStorage.getItem("auth_clubid")}get competitionName(){if(!this.competitions)return"";const E=this.competitions.filter(j=>j.uuid===this.competition).map(j=>j.titel+", am "+(j.datum+"T").split("T")[0].split("-").reverse().join("-"));return 1===E.length?E[0]:""}getCurrentStation(){return localStorage.getItem("current_station")||this.competition+"/"+this.durchgang+"/"+this.geraet+"/"+this.step}resetLoading(){this.loadingInstance&&(this.loadingInstance.then(E=>E.dismiss()),this.loadingInstance=void 0)}startLoading(E,j){return this.resetLoading(),this.loadingInstance=this.loadingCtrl.create({message:E}),this.loadingInstance.then(P=>P.present()),j&&j.subscribe({next:()=>this.resetLoading(),error:P=>this.resetLoading()}),j}initWithQuery(E){this.isInitializing=!0;const j=new N.X(!1);return E&&E.startsWith("c=")?(this._step=1,E.split("&").forEach(P=>{const[K,pe]=P.split("=");switch(K){case"s":this.currentUserName||this.askForUsername.next(this),localStorage.setItem("auth_token",pe),localStorage.removeItem("auth_clubid"),this.checkJWT(pe);const ke=localStorage.getItem("current_station");ke&&this.initWithQuery(ke);break;case"c":this._competition=pe;break;case"ca":this._competition=void 0;break;case"d":this._durchgang=pe;break;case"st":this._step=parseInt(pe);break;case"g":this._geraet=parseInt(pe),localStorage.setItem("current_station",E),this.checkJWT(),this.stationFreezed=!0;break;case"rs":localStorage.setItem("auth_token",pe),this.unlock(),this.loggedIn=!0,console.log("club auth-token initialized");break;case"rid":localStorage.setItem("auth_clubid",pe),console.log("club id initialized",pe)}}),localStorage.removeItem("external_load"),this.startLoading("Bitte warten ..."),this._geraet?this.getCompetitions().pipe((0,W.w)(()=>this.loadDurchgaenge()),(0,W.w)(()=>this.loadGeraete()),(0,W.w)(()=>this.loadSteps()),(0,W.w)(()=>this.loadWertungen())).subscribe(P=>j.next(!0)):!this._competition||"undefined"===this._competition&&!localStorage.getItem("auth_clubid")?(console.log("initializing clubreg ..."),this.getClubRegistrations(this._competition).subscribe(P=>j.next(!0))):this._competition&&this.getCompetitions().pipe((0,W.w)(()=>this.loadDurchgaenge())).subscribe(P=>j.next(!0))):j.next(!0),j.subscribe(P=>{P&&(this.isInitializing=!1,this.resetLoading())}),j}checkJWT(E){if(E||(E=localStorage.getItem("auth_token")),!E)return void(this.loggedIn=!1);const P=(new Date).getTime()-36e5;(!E||E===localStorage.getItem("auth_token"))&&P{localStorage.setItem("auth_token",K.headers.get("x-access-token")),this.loggedIn=!0,this.competitions&&0!==this.competitions.length?this._competition&&this.getDurchgaenge(this._competition):this.getCompetitions().subscribe(pe=>{this._competition&&this.getDurchgaenge(this._competition)})},error:K=>{console.log(K),401===K.status?(localStorage.removeItem("auth_token"),this.loggedIn=!1,this.showMessage.next({msg:"Die Berechtigung ist abgelaufen. Bitte neu anmelden",type:"Berechtigung"})):this.standardErrorHandler(K)}}),this.lastJWTChecked=(new Date).getTime())}saveClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j.id,j).pipe((0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations.filter(pe=>pe.id!=j.id),K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}saveClubRegistrationPW(E,j){const P=this.startLoading("Neues Password wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j.id+"/pwchange",j).pipe((0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations.filter(pe=>pe.id!=j.id),K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}createClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird registriert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E,j,{observe:"response"}).pipe((0,U.U)(K=>(console.log(K),localStorage.setItem("auth_token",K.headers.get("x-access-token")),localStorage.setItem("auth_clubid",K.body.id+""),this.loggedIn=!0,K.body)),(0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations,K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}deleteClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird gel\xf6scht. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j,{responseType:"text"}).pipe((0,M.B)()));return P.subscribe({next:K=>{this.clublogout(),this._clubregistrations=this._clubregistrations.filter(pe=>pe.id!=j),this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}loadProgramsForCompetition(E){const j=this.startLoading("Programmliste zum Wettkampf wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/programmlist").pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}loadAthletListForClub(E,j){const P=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/athletlist").pipe((0,M.B)()));return P.subscribe({next:K=>{},error:this.standardErrorHandler}),P}loadAthletRegistrations(E,j){const P=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/athletes").pipe((0,M.B)()));return P.subscribe({error:this.standardErrorHandler}),P}createAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E+"/"+j+"/athletes",P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}saveAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j+"/athletes/"+P.id,P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}deleteAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j+"/athletes/"+P.id,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}findCompetitionsByVerein(E){const j=this.startLoading("Es werden fr\xfchere Anmeldungen gesucht. Bitte warten ...",this.http.get(_.AC+"api/competition/byVerein/"+E).pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}copyClubRegsFromCompetition(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+j+"/"+P+"/copyfrom",E,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}loadJudgeProgramDisziplinList(E){const j=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/programmdisziplinlist").pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}loadJudgeRegistrations(E,j){const P=this.startLoading("Wertungsrichter-Liste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/judges").pipe((0,M.B)()));return P.subscribe({error:this.standardErrorHandler}),P}createJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E+"/"+j+"/judges",P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}saveJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j+"/judges/"+P.id,P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}deleteJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j+"/judges/"+P.id,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}clublogout(){this.logout()}utf8_to_b64(E){return window.btoa(unescape(encodeURIComponent(E)))}b64_to_utf8(E){return decodeURIComponent(escape(window.atob(E)))}getClubList(){if(this.clublist&&this.clublist.length>0)return(0,R.of)(this.clublist);const E=this.startLoading("Clubliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/clubnames").pipe((0,M.B)()));return E.subscribe({next:j=>{this.clublist=j},error:this.standardErrorHandler}),E}resetRegistration(E){const j=new x.WM,P=this.http.options(_.AC+"api/registrations/"+this._competition+"/"+E+"/loginreset",{observe:"response",headers:j.set("Host",_.AC),responseType:"text"}).pipe((0,M.B)());return this.startLoading("Mail f\xfcr Login-Reset wird versendet. Bitte warten ...",P)}clublogin(E,j){this.clublogout();const P=new x.WM,K=this.startLoading("Login wird verarbeitet. Bitte warten ...",this.http.options(_.AC+"api/login",{observe:"response",headers:P.set("Authorization","Basic "+this.utf8_to_b64(`${E}:${j}`)),withCredentials:!0,responseType:"text"}).pipe((0,M.B)()));return K.subscribe({next:pe=>{console.log(pe),localStorage.setItem("auth_token",pe.headers.get("x-access-token")),localStorage.setItem("auth_clubid",E),this.loggedIn=!0},error:pe=>{console.log(pe),this.clublogout(),this.resetLoading(),401===pe.status?(localStorage.setItem("auth_token",pe.headers.get("x-access-token")),this.loggedIn=!1):this.standardErrorHandler(pe)}}),K}unlock(){localStorage.removeItem("current_station"),this.checkJWT(),this.stationFreezed=!1}logout(){localStorage.removeItem("auth_token"),localStorage.removeItem("auth_clubid"),this.loggedIn=!1,this.unlock()}getCompetitions(){const E=this.startLoading("Wettkampfliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/competition").pipe((0,M.B)()));return E.subscribe({next:j=>{this.competitions=j},error:this.standardErrorHandler}),E}getClubRegistrations(E){return this.checkJWT(),void 0!==this._clubregistrations&&this._competition===E||this.isInitializing||(this.durchgaenge=[],this._clubregistrations=[],this.geraete=void 0,this.steps=void 0,this.wertungen=void 0,this._competition=E,this._durchgang=void 0,this._geraet=void 0,this._step=void 0),this.loadClubRegistrations()}loadClubRegistrations(){return this._competition&&"undefined"!==this._competition?(this.startLoading("Clubanmeldungen werden geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+this._competition).pipe((0,M.B)())).subscribe({next:j=>{localStorage.setItem("current_competition",this._competition),this._clubregistrations=j,this.clubRegistrations.next(j)},error:this.standardErrorHandler}),this.clubRegistrations):(0,R.of)([])}loadRegistrationSyncActions(){if(!this._competition||"undefined"===this._competition)return(0,R.of)([]);const E=this.startLoading("Pendente An-/Abmeldungen werden geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+this._competition+"/syncactions").pipe((0,M.B)()));return E.subscribe({error:this.standardErrorHandler}),E}resetCompetition(E){console.log("reset data"),this.durchgaenge=[],this._clubregistrations=[],this.clubRegistrations.next([]),this.geraete=void 0,this.geraeteSubject.next([]),this.steps=void 0,this.wertungen=void 0,this.wertungenSubject.next([]),this._competition=E,this._durchgang=void 0,this._geraet=void 0,this._step=void 0}getDurchgaenge(E){return this.checkJWT(),void 0!==this.durchgaenge&&this._competition===E||this.isInitializing?(0,R.of)(this.durchgaenge||[]):(this.resetCompetition(E),this.loadDurchgaenge())}loadDurchgaenge(){if(!this._competition||"undefined"===this._competition)return(0,R.of)([]);const E=this.startLoading("Durchgangliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition).pipe((0,M.B)())),j=this._durchgang;return E.subscribe({next:P=>{if(localStorage.setItem("current_competition",this._competition),this.durchgaenge=P,j){const K=this.durchgaenge.filter(pe=>{const ke=(0,o._5)(pe);return j===pe||j===ke});1===K.length&&(this._durchgang=K[0])}},error:this.standardErrorHandler}),E}getGeraete(E,j){return void 0!==this.geraete&&this._competition===E&&this._durchgang===j||this.isInitializing?(0,R.of)(this.geraete||[]):(this.geraete=[],this.steps=void 0,this.wertungen=void 0,this._competition=E,this._durchgang=j,this._geraet=void 0,this._step=void 0,this.captionmode=!0,this.loadGeraete())}loadGeraete(){if(this.geraete=[],!this._competition||"undefined"===this._competition)return console.log("reusing geraetelist"),(0,R.of)([]);console.log("renewing geraetelist");let E="";E=this.captionmode&&this._durchgang&&"undefined"!==this._durchgang?_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang):_.AC+"api/durchgang/"+this._competition+"/geraete";const j=this.startLoading("Ger\xe4te zum Durchgang werden geladen. Bitte warten ...",this.http.get(E).pipe((0,M.B)()));return j.subscribe({next:P=>{this.geraete=P,this.geraeteSubject.next(this.geraete)},error:this.standardErrorHandler}),j}getSteps(E,j,P){if(void 0!==this.steps&&this._competition===E&&this._durchgang===j&&this._geraet===P||this.isInitializing)return(0,R.of)(this.steps||[]);this.steps=[],this.wertungen=void 0,this._competition=E,this._durchgang=j,this._geraet=P,this._step=void 0;const K=this.loadSteps();return K.subscribe({next:pe=>{this.steps=pe.map(ke=>parseInt(ke)),(void 0===this._step||this.steps.indexOf(this._step)<0)&&(this._step=this.steps[0],this.loadWertungen())},error:this.standardErrorHandler}),K}loadSteps(){if(this.steps=[],!this._competition||"undefined"===this._competition||!this._durchgang||"undefined"===this._durchgang||void 0===this._geraet)return(0,R.of)([]);const E=this.startLoading("Stationen zum Ger\xe4t werden geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/"+this._geraet).pipe((0,M.B)()));return E.subscribe({next:j=>{this.steps=j},error:this.standardErrorHandler}),E}getWertungen(E,j,P,K){void 0!==this.wertungen&&this._competition===E&&this._durchgang===j&&this._geraet===P&&this._step===K||this.isInitializing||(this.wertungen=[],this._competition=E,this._durchgang=j,this._geraet=P,this._step=K,this.loadWertungen())}activateCaptionMode(){this.competitions||this.getCompetitions(),this.durchgaenge||this.loadDurchgaenge(),(!this.captionmode||!this.geraete)&&(this.captionmode=!0,this.loadGeraete()),this.geraet&&!this.steps&&this.loadSteps(),this.geraet&&(this.disconnectWS(!0),this.initWebsocket())}loadWertungen(){if(this.wertungenLoading||void 0===this._geraet||void 0===this._step)return(0,R.of)([]);this.activateCaptionMode();const E=this._step;this.wertungenLoading=!0;const j=this.startLoading("Riegenteilnehmer werden geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/"+this._geraet+"/"+this._step).pipe((0,M.B)()));return j.subscribe({next:P=>{this.wertungenLoading=!1,this._step!==E?this.loadWertungen():(this.wertungen=P,this.wertungenSubject.next(this.wertungen))},error:this.standardErrorHandler}),j}loadAthletWertungen(E,j){return this.activateNonCaptionMode(E),this.startLoading("Wertungen werden geladen. Bitte warten ...",this.http.get(_.AC+`api/athlet/${this._competition}/${j}`).pipe((0,M.B)()))}activateNonCaptionMode(E){return this._competition!==E||this.captionmode||!this.geraete||0===this.geraete.length||E&&!this.isWebsocketConnected()?(this.captionmode=!1,this._competition=E,this.disconnectWS(!0),this.initWebsocket(),this.loadGeraete()):(0,R.of)(this.geraete)}loadStartlist(E){return this._competition?this.startLoading("Teilnehmerliste wird geladen. Bitte warten ...",E?this.http.get(_.AC+"api/report/"+this._competition+"/startlist?q="+E).pipe((0,M.B)()):this.http.get(_.AC+"api/report/"+this._competition+"/startlist").pipe((0,M.B)())):(0,R.of)()}isMessageAck(E){return"MessageAck"===E.type}updateWertung(E,j,P,K){const pe=K.wettkampfUUID,ke=new ge.x;return this.shouldConnectAgain()&&this.reconnect(),this.startLoading("Wertung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/durchgang/"+pe+"/"+(0,o.gT)(E)+"/"+P+"/"+j,K).pipe((0,M.B)())).subscribe({next:Te=>{if(!this.isMessageAck(Te)&&Te.wertung){let ie=!1;this.wertungen=this.wertungen.map(Be=>Be.wertung.id===Te.wertung.id?(ie=!0,Te):Be),this.wertungenSubject.next(this.wertungen),ke.next(Te),ie&&ke.complete()}else{const ie=Te;this.showMessage.next(ie),ke.error(ie.msg),ke.complete()}},error:this.standardErrorHandler}),ke}finishStation(E,j,P,K){const pe=new ge.x;return this.startLoading("Station wird abgeschlossen. Bitte warten ...",this.http.post(_.AC+"api/durchgang/"+E+"/finish",{type:"FinishDurchgangStation",wettkampfUUID:E,durchgang:j,geraet:P,step:K}).pipe((0,M.B)())).subscribe({next:ke=>{const Te=this.steps.filter(ie=>ie>K);Te.length>0?this._step=Te[0]:(localStorage.removeItem("current_station"),this.checkJWT(),this.stationFreezed=!1,this._step=this.steps[0]),this.loadWertungen().subscribe(ie=>{pe.next(Te)})},error:this.standardErrorHandler}),pe.asObservable()}nextStep(){const E=this.steps.filter(j=>j>this._step);return E.length>0?E[0]:this.steps[0]}prevStep(){const E=this.steps.filter(j=>j0?E[E.length-1]:this.steps[this.steps.length-1]}getPrevGeraet(){let E=this.geraete.indexOf(this.geraete.find(j=>j.id===this._geraet))-1;return E<0&&(E=this.geraete.length-1),this.geraete[E].id}getNextGeraet(){let E=this.geraete.indexOf(this.geraete.find(j=>j.id===this._geraet))+1;return E>=this.geraete.length&&(E=0),this.geraete[E].id}nextGeraet(){if(this.loggedIn){const E=this.steps.filter(j=>j>this._step);return(0,R.of)(E.length>0?E[0]:this.steps[0])}{const E=this._step;return this._geraet=this.getNextGeraet(),this.loadSteps().pipe((0,U.U)(j=>{const P=j.filter(K=>K>E);return P.length>0?P[0]:this.steps[0]}))}}prevGeraet(){if(this.loggedIn){const E=this.steps.filter(j=>j0?E[E.length-1]:this.steps[this.steps.length-1])}{const E=this._step;return this._geraet=this.getPrevGeraet(),this.loadSteps().pipe((0,U.U)(j=>{const P=this.steps.filter(K=>K0?P[P.length-1]:this.steps[this.steps.length-1]}))}}getScoreList(E){return this._competition?this.startLoading("Rangliste wird geladen. Bitte warten ...",this.http.get(`${_.AC}${E}`).pipe((0,M.B)())):(0,R.of)({})}getScoreLists(){return this._competition?this.startLoading("Ranglisten werden geladen. Bitte warten ...",this.http.get(`${_.AC}api/scores/${this._competition}`).pipe((0,M.B)())):(0,R.of)(Object.assign({}))}getWebsocketBackendUrl(){let E=location.host;const P="https:"===location.protocol?"wss:":"ws:";let K="api/";return K=this._durchgang&&this.captionmode?K+"durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/ws":K+"durchgang/"+this._competition+"/all/ws",E=E&&""!==E?(P+"//"+E+"/").replace("index.html",""):"wss://kutuapp.sharevic.net/",E+K}handleWebsocketMessage(E){switch(E.type){case"BulkEvent":return E.events.map(pe=>this.handleWebsocketMessage(pe)).reduce((pe,ke)=>pe&&ke);case"DurchgangStarted":return this._activeDurchgangList=[...this.activeDurchgangList,E],this.durchgangStarted.next(this.activeDurchgangList),!0;case"DurchgangFinished":const P=E;return this._activeDurchgangList=this.activeDurchgangList.filter(pe=>pe.durchgang!==P.durchgang||pe.wettkampfUUID!==P.wettkampfUUID),this.durchgangStarted.next(this.activeDurchgangList),!0;case"AthletWertungUpdatedSequenced":case"AthletWertungUpdated":const K=E;return this.wertungen=this.wertungen.map(pe=>pe.id===K.wertung.athletId&&pe.wertung.wettkampfdisziplinId===K.wertung.wettkampfdisziplinId?Object.assign({},pe,{wertung:K.wertung}):pe),this.wertungenSubject.next(this.wertungen),this.wertungUpdated.next(K),!0;case"AthletMovedInWettkampf":case"AthletRemovedFromWettkampf":return this.loadWertungen(),!0;case"NewLastResults":return this.newLastResults.next(E),!0;case"MessageAck":return console.log(E.msg),this.showMessage.next(E),!0;default:return!1}}}return S.\u0275fac=function(E){return new(E||S)(Y.LFG(x.eN),Y.LFG(G.HT))},S.\u0275prov=Y.Yz7({token:S,factory:S.\u0275fac,providedIn:"root"}),S})()},9192:(Qe,Fe,w)=>{"use strict";w.d(Fe,{iw:()=>B,_5:()=>Z,gT:()=>S});var o=w(1135),x=w(7579),N=w(1566),ge=w(9751),R=w(3532);var _=w(7225),Y=w(2529),G=w(8274);function Z(E){return E?E.replace(/[,&.*+?/^${}()|[\]\\]/g,"_"):""}function S(E){return E?encodeURIComponent(Z(E)):""}let B=(()=>{class E{constructor(){this.identifiedState=!1,this.connectedState=!1,this.explicitClosed=!0,this.reconnectInterval=3e4,this.reconnectAttempts=480,this.lstKeepAliveReceived=0,this.connected=new o.X(!1),this.identified=new o.X(!1),this.logMessages=new o.X(""),this.showMessage=new x.x,this.lastMessages=[]}get stopped(){return this.explicitClosed}startKeepAliveObservation(){setTimeout(()=>{const K=(new Date).getTime()-this.lstKeepAliveReceived;!this.explicitClosed&&!this.reconnectionObservable&&K>this.reconnectInterval?(this.logMessages.next("connection verified since "+K+"ms. It seems to be dead and need to be reconnected!"),this.disconnectWS(!1),this.reconnect()):this.logMessages.next("connection verified since "+K+"ms"),this.startKeepAliveObservation()},this.reconnectInterval)}sendMessage(P){this.websocket?this.connectedState&&this.websocket.send(P):this.connect(P)}disconnectWS(P=!0){this.explicitClosed=P,this.lstKeepAliveReceived=0,this.websocket?(this.websocket.close(),P&&this.close()):this.close()}close(){this.websocket&&(this.websocket.onerror=void 0,this.websocket.onclose=void 0,this.websocket.onopen=void 0,this.websocket.onmessage=void 0,this.websocket.close()),this.websocket=void 0,this.identifiedState=!1,this.lstKeepAliveReceived=0,this.identified.next(this.identifiedState),this.connectedState=!1,this.connected.next(this.connectedState)}isWebsocketConnected(){return this.websocket&&this.websocket.readyState===this.websocket.OPEN}isWebsocketConnecting(){return this.websocket&&this.websocket.readyState===this.websocket.CONNECTING}shouldConnectAgain(){return!(this.isWebsocketConnected()||this.isWebsocketConnecting())}reconnect(){if(!this.reconnectionObservable){this.logMessages.next("start try reconnection ..."),this.reconnectionObservable=function U(E=0,j=N.z){return E<0&&(E=0),function M(E=0,j,P=N.P){let K=-1;return null!=j&&((0,R.K)(j)?P=j:K=j),new ge.y(pe=>{let ke=function W(E){return E instanceof Date&&!isNaN(E)}(E)?+E-P.now():E;ke<0&&(ke=0);let Te=0;return P.schedule(function(){pe.closed||(pe.next(Te++),0<=K?this.schedule(void 0,K):pe.complete())},ke)})}(E,E,j)}(this.reconnectInterval).pipe((0,Y.o)((K,pe)=>pe{this.shouldConnectAgain()&&(this.logMessages.next("continue with reconnection ..."),this.connect(void 0))},null,()=>{this.reconnectionObservable=null,P.unsubscribe(),this.isWebsocketConnected()?this.logMessages.next("finish with reconnection (successfull)"):this.isWebsocketConnecting()?this.logMessages.next("continue with reconnection (CONNECTING)"):(!this.websocket||this.websocket.CLOSING||this.websocket.CLOSED)&&(this.disconnectWS(),this.logMessages.next("finish with reconnection (unsuccessfull)"))})}}initWebsocket(){this.logMessages.subscribe(P=>{this.lastMessages.push((0,_.sZ)(!0)+` - ${P}`),this.lastMessages=this.lastMessages.slice(Math.max(this.lastMessages.length-50,0))}),this.logMessages.next("init"),this.backendUrl=this.getWebsocketBackendUrl()+`?clientid=${(0,_.ix)()}`,this.logMessages.next("init with "+this.backendUrl),this.connect(void 0),this.startKeepAliveObservation()}connect(P){this.disconnectWS(),this.explicitClosed=!1,this.websocket=new WebSocket(this.backendUrl),this.websocket.onopen=()=>{this.connectedState=!0,this.connected.next(this.connectedState),P&&this.sendMessage(P)},this.websocket.onclose=pe=>{switch(this.close(),pe.code){case 1001:this.logMessages.next("Going Away"),this.explicitClosed||this.reconnect();break;case 1002:this.logMessages.next("Protocol error"),this.explicitClosed||this.reconnect();break;case 1003:this.logMessages.next("Unsupported Data"),this.explicitClosed||this.reconnect();break;case 1005:this.logMessages.next("No Status Rcvd"),this.explicitClosed||this.reconnect();break;case 1006:this.logMessages.next("Abnormal Closure"),this.explicitClosed||this.reconnect();break;case 1007:this.logMessages.next("Invalid frame payload data"),this.explicitClosed||this.reconnect();break;case 1008:this.logMessages.next("Policy Violation"),this.explicitClosed||this.reconnect();break;case 1009:this.logMessages.next("Message Too Big"),this.explicitClosed||this.reconnect();break;case 1010:this.logMessages.next("Mandatory Ext."),this.explicitClosed||this.reconnect();break;case 1011:this.logMessages.next("Internal Server Error"),this.explicitClosed||this.reconnect();break;case 1015:this.logMessages.next("TLS handshake")}},this.websocket.onmessage=pe=>{if(this.lstKeepAliveReceived=(new Date).getTime(),!pe.data.startsWith("Connection established.")&&"keepAlive"!==pe.data)try{const ke=JSON.parse(pe.data);"MessageAck"===ke.type?(console.log(ke.msg),this.showMessage.next(ke)):this.handleWebsocketMessage(ke)||(console.log(ke),this.logMessages.next("unknown message: "+pe.data))}catch(ke){this.logMessages.next(ke+": "+pe.data)}},this.websocket.onerror=pe=>{this.logMessages.next(pe.message+", "+pe.type)}}}return E.\u0275fac=function(P){return new(P||E)},E.\u0275prov=G.Yz7({token:E,factory:E.\u0275fac,providedIn:"root"}),E})()},7225:(Qe,Fe,w)=>{"use strict";w.d(Fe,{AC:()=>M,WZ:()=>B,ix:()=>S,sZ:()=>Y,tC:()=>_});const ge=location.host,M=(location.protocol+"//"+ge+"/").replace("index.html","");function _(E){let j=new Date;j=function U(E){return null!=E&&""!==E&&!isNaN(Number(E.toString()))}(E)?new Date(parseInt(E)):new Date(Date.parse(E));const P=`${j.getFullYear().toString()}-${("0"+(j.getMonth()+1)).slice(-2)}-${("0"+j.getDate()).slice(-2)}`;return console.log(P),P}function Y(E=!1){return function G(E,j=!1){const P=("0"+E.getDate()).slice(-2)+"-"+("0"+(E.getMonth()+1)).slice(-2)+"-"+E.getFullYear()+" "+("0"+E.getHours()).slice(-2)+":"+("0"+E.getMinutes()).slice(-2);return j?P+":"+("0"+E.getSeconds()).slice(-2):P}(new Date,E)}function S(){let E=localStorage.getItem("clientid");return E||(E=function Z(){function E(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return E()+E()+"-"+E()+"-"+E()+"-"+E()+"-"+E()+E()+E()}(),localStorage.setItem("clientid",E)),localStorage.getItem("current_username")+":"+E}const B={1:"boden.svg",2:"pferdpauschen.svg",3:"ringe.svg",4:"sprung.svg",5:"barren.svg",6:"reck.svg",26:"ringe.svg",27:"stufenbarren.svg",28:"schwebebalken.svg",29:"minitramp.svg"}},1394:(Qe,Fe,w)=>{"use strict";var o=w(1481),x=w(8274),N=w(5472),ge=w(529),R=w(502);const M=(0,w(7423).fo)("SplashScreen",{web:()=>w.e(2680).then(w.bind(w,2680)).then(T=>new T.SplashScreenWeb)});var U=w(6895),_=w(3608);let Y=(()=>{class T{constructor(O){this.document=O;const te=localStorage.getItem("theme");te?this.setGlobalCSS(te):this.setTheme({})}setTheme(O){const te=function S(T){T={...G,...T};const{primary:k,secondary:O,tertiary:te,success:ce,warning:Ae,danger:De,dark:ue,medium:de,light:ne}=T,Ee=.2,Ce=.2;return`\n --ion-color-base: ${ne};\n --ion-color-contrast: ${ue};\n --ion-background-color: ${ne};\n --ion-card-background-color: ${E(ne,.4)};\n --ion-card-shadow-color1: ${E(ue,2).alpha(.2)};\n --ion-card-shadow-color2: ${E(ue,2).alpha(.14)};\n --ion-card-shadow-color3: ${E(ue,2).alpha(.12)};\n --ion-card-color: ${E(ue,2)};\n --ion-text-color: ${ue};\n --ion-toolbar-background-color: ${_(ne).lighten(Ce)};\n --ion-toolbar-text-color: ${B(ue,.2)};\n --ion-item-background-color: ${B(ne,.1)};\n --ion-item-background-activated: ${B(ne,.3)};\n --ion-item-text-color: ${B(ue,.1)};\n --ion-item-border-color: ${_(de).lighten(Ce)};\n --ion-overlay-background-color: ${E(ne,.1)};\n --ion-color-primary: ${k};\n --ion-color-primary-rgb: ${j(k)};\n --ion-color-primary-contrast: ${B(k)};\n --ion-color-primary-contrast-rgb: ${j(B(k))};\n --ion-color-primary-shade: ${_(k).darken(Ee)};\n --ion-color-primary-tint: ${_(k).lighten(Ce)};\n --ion-color-secondary: ${O};\n --ion-color-secondary-rgb: ${j(O)};\n --ion-color-secondary-contrast: ${B(O)};\n --ion-color-secondary-contrast-rgb: ${j(B(O))};\n --ion-color-secondary-shade: ${_(O).darken(Ee)};\n --ion-color-secondary-tint: ${_(O).lighten(Ce)};\n --ion-color-tertiary: ${te};\n --ion-color-tertiary-rgb: ${j(te)};\n --ion-color-tertiary-contrast: ${B(te)};\n --ion-color-tertiary-contrast-rgb: ${j(B(te))};\n --ion-color-tertiary-shade: ${_(te).darken(Ee)};\n --ion-color-tertiary-tint: ${_(te).lighten(Ce)};\n --ion-color-success: ${ce};\n --ion-color-success-rgb: ${j(ce)};\n --ion-color-success-contrast: ${B(ce)};\n --ion-color-success-contrast-rgb: ${j(B(ce))};\n --ion-color-success-shade: ${_(ce).darken(Ee)};\n --ion-color-success-tint: ${_(ce).lighten(Ce)};\n --ion-color-warning: ${Ae};\n --ion-color-warning-rgb: ${j(Ae)};\n --ion-color-warning-contrast: ${B(Ae)};\n --ion-color-warning-contrast-rgb: ${j(B(Ae))};\n --ion-color-warning-shade: ${_(Ae).darken(Ee)};\n --ion-color-warning-tint: ${_(Ae).lighten(Ce)};\n --ion-color-danger: ${De};\n --ion-color-danger-rgb: ${j(De)};\n --ion-color-danger-contrast: ${B(De)};\n --ion-color-danger-contrast-rgb: ${j(B(De))};\n --ion-color-danger-shade: ${_(De).darken(Ee)};\n --ion-color-danger-tint: ${_(De).lighten(Ce)};\n --ion-color-dark: ${ue};\n --ion-color-dark-rgb: ${j(ue)};\n --ion-color-dark-contrast: ${B(ue)};\n --ion-color-dark-contrast-rgb: ${j(B(ue))};\n --ion-color-dark-shade: ${_(ue).darken(Ee)};\n --ion-color-dark-tint: ${_(ue).lighten(Ce)};\n --ion-color-medium: ${de};\n --ion-color-medium-rgb: ${j(de)};\n --ion-color-medium-contrast: ${B(de)};\n --ion-color-medium-contrast-rgb: ${j(B(de))};\n --ion-color-medium-shade: ${_(de).darken(Ee)};\n --ion-color-medium-tint: ${_(de).lighten(Ce)};\n --ion-color-light: ${ne};\n --ion-color-light-rgb: ${j(ne)};\n --ion-color-light-contrast: ${B(ne)};\n --ion-color-light-contrast-rgb: ${j(B(ne))};\n --ion-color-light-shade: ${_(ne).darken(Ee)};\n --ion-color-light-tint: ${_(ne).lighten(Ce)};`+function Z(T,k){void 0===T&&(T="#ffffff"),void 0===k&&(k="#000000");const O=new _(T);let te="";for(let ce=5;ce<100;ce+=5){const De=ce/100;te+=` --ion-color-step-${ce+"0"}: ${O.mix(_(k),De).hex()};`,ce<95&&(te+="\n")}return te}(ue,ne)}(O);this.setGlobalCSS(te),localStorage.setItem("theme",te)}setVariable(O,te){this.document.documentElement.style.setProperty(O,te)}setGlobalCSS(O){this.document.documentElement.style.cssText=O}get storedTheme(){return localStorage.getItem("theme")}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(U.K0))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})();const G={primary:"#3880ff",secondary:"#0cd1e8",tertiary:"#7044ff",success:"#10dc60",warning:"#ff7b00",danger:"#f04141",dark:"#222428",medium:"#989aa2",light:"#fcfdff"};function B(T,k=.8){const O=_(T);return O.isDark()?O.lighten(k):O.darken(k)}function E(T,k=.8){const O=_(T);return O.isDark()?O.darken(k):O.lighten(k)}function j(T){const k=_(T);return`${k.red()}, ${k.green()}, ${k.blue()}`}var P=w(600);function K(T,k){if(1&T){const O=x.EpF();x.TgZ(0,"ion-item",4),x.NdJ("click",function(){const Ae=x.CHM(O).$implicit,De=x.oxw();return x.KtG(De.openPage(Ae.url))}),x._UZ(1,"ion-icon",9),x.TgZ(2,"ion-label"),x._uU(3),x.qZA()()}if(2&T){const O=k.$implicit;x.xp6(1),x.Q6J("name",O.icon),x.xp6(2),x.hij(" ",O.title," ")}}function pe(T,k){if(1&T){const O=x.EpF();x.TgZ(0,"ion-item",4),x.NdJ("click",function(){const Ae=x.CHM(O).$implicit,De=x.oxw();return x.KtG(De.changeTheme(Ae))}),x._UZ(1,"ion-icon",6),x.TgZ(2,"ion-label"),x._uU(3),x.qZA()()}if(2&T){const O=k.$implicit,te=x.oxw();x.Udp("background-color",te.themes[O].light)("color",te.themes[O].dark),x.xp6(2),x.Udp("background-color",te.themes[O].light)("color",te.themes[O].dark),x.xp6(1),x.hij(" ",O," ")}}let ke=(()=>{class T{constructor(O,te,ce,Ae,De,ue,de){this.platform=O,this.navController=te,this.route=ce,this.router=Ae,this.themeSwitcher=De,this.backendService=ue,this.alertCtrl=de,this.themes={Blau:{primary:"#ffa238",secondary:"#a19137",tertiary:"#421804",success:"#0eb651",warning:"#ff7b00",danger:"#f04141",dark:"#fffdf5",medium:"#454259",light:"#03163d"},Sport:{primary:"#ffa238",secondary:"#7dc0ff",tertiary:"#421804",success:"#0eb651",warning:"#ff7b00",danger:"#f04141",dark:"#03163d",medium:"#8092dd",light:"#fffdf5"},Dunkel:{primary:"#8DBB82",secondary:"#FCFF6C",tertiary:"#FE5F55",warning:"#ffce00",medium:"#BCC2C7",dark:"#DADFE1",light:"#363232"},Neon:{primary:"#23ff00",secondary:"#4CE0B3",tertiary:"#FF5E79",warning:"#ff7b00",light:"#F4EDF2",medium:"#B682A5",dark:"#34162A"}},this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"},{title:"Letzte Resultate",url:"last-results",icon:"radio"},{title:"Top Resultate",url:"top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"},{title:"Wettkampfanmeldungen",url:"/registration",icon:"people-outline"}],this.backendService.askForUsername.subscribe(ne=>{this.alertCtrl.create({header:"Settings",message:ne.currentUserName?"Dein Benutzername":"Du bist das erste Mal hier. Bitte gib einen Benutzernamen an",inputs:[{name:"username",placeholder:"Benutzername",value:ne.currentUserName}],buttons:[{text:"Abbrechen",role:"cancel",handler:()=>{console.log("Cancel clicked")}},{text:"Speichern",handler:Ce=>{if(!(Ce.username&&Ce.username.trim().length>1))return!1;ne.currentUserName=Ce.username.trim()}}]}).then(Ce=>Ce.present())}),this.backendService.showMessage.subscribe(ne=>{let Ee=ne.msg;(!Ee||0===Ee.trim().length)&&(Ee="Die gew\xfcnschte Aktion ist aktuell nicht m\xf6glich."),this.alertCtrl.create({header:"Achtung",message:Ee,buttons:["OK"]}).then(ze=>ze.present())}),this.initializeApp()}get themeKeys(){return Object.keys(this.themes)}clearPosParam(){this.router.navigate(["."],{relativeTo:this.route,queryParams:{}})}initializeApp(){this.platform.ready().then(()=>{if(M.show(),window.location.href.indexOf("?")>0)try{const O=window.location.href.split("?")[1],te=atob(O);O.startsWith("all")?(this.appPages=[{title:"Alle Resultate",url:"/all-results",icon:"radio"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/last-results")):O.startsWith("top")?(this.appPages=[{title:"Top Resultate",url:"/top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/top-results")):te.startsWith("last")?(this.appPages=[{title:"Aktuelle Resultate",url:"/last-results",icon:"radio"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/last-results"),this.backendService.initWithQuery(te.substring(5))):te.startsWith("top")?(this.appPages=[{title:"Top Resultate",url:"/top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/top-results"),this.backendService.initWithQuery(te.substring(4))):te.startsWith("registration")?(window.history.replaceState({},document.title,window.location.href.split("?")[0]),this.clearPosParam(),console.log("initializing with "+te),localStorage.setItem("external_load",te),this.backendService.initWithQuery(te.substring(13)).subscribe(ce=>{console.log("clubreg initialzed. navigate to clubreg-editor"),this.navController.navigateRoot("/registration/"+this.backendService.competition+"/"+localStorage.getItem("auth_clubid"))})):(window.history.replaceState({},document.title,window.location.href.split("?")[0]),this.clearPosParam(),console.log("initializing with "+te),localStorage.setItem("external_load",te),this.backendService.initWithQuery(te).subscribe(ce=>{te.startsWith("c=")&&te.indexOf("&st=")>-1&&te.indexOf("&g=")>-1&&(this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"}],this.navController.navigateRoot("/station"))}))}catch(O){console.log(O)}else if(localStorage.getItem("current_station")){const O=localStorage.getItem("current_station");this.backendService.initWithQuery(O).subscribe(te=>{O.startsWith("c=")&&O.indexOf("&st=")&&O.indexOf("&g=")&&(this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"}],this.navController.navigateRoot("/station"))})}else if(localStorage.getItem("current_competition")){const O=localStorage.getItem("current_competition");this.backendService.getDurchgaenge(O)}M.hide()})}askUserName(){this.backendService.askForUsername.next(this.backendService)}changeTheme(O){this.themeSwitcher.setTheme(this.themes[O])}openPage(O){this.navController.navigateRoot(O)}}return T.\u0275fac=function(O){return new(O||T)(x.Y36(R.t4),x.Y36(R.SH),x.Y36(N.gz),x.Y36(N.F0),x.Y36(Y),x.Y36(P.v),x.Y36(R.Br))},T.\u0275cmp=x.Xpm({type:T,selectors:[["app-root"]],decls:25,vars:2,consts:[["contentId","main","disabled","true"],["contentId","main"],["auto-hide","false"],["menuClose","",3,"click",4,"ngFor","ngForOf"],["menuClose","",3,"click"],["slot","start","name","settings"],["slot","start","name","color-palette"],["menuClose","",3,"background-color","color","click",4,"ngFor","ngForOf"],["id","main"],["slot","start",3,"name"]],template:function(O,te){1&O&&(x.TgZ(0,"ion-app")(1,"ion-split-pane",0)(2,"ion-menu",1)(3,"ion-header")(4,"ion-toolbar")(5,"ion-title"),x._uU(6,"Menu"),x.qZA()()(),x.TgZ(7,"ion-content")(8,"ion-list")(9,"ion-menu-toggle",2),x.YNc(10,K,4,2,"ion-item",3),x.TgZ(11,"ion-item",4),x.NdJ("click",function(){return te.askUserName()}),x._UZ(12,"ion-icon",5),x.TgZ(13,"ion-label"),x._uU(14," Settings "),x.qZA()(),x.TgZ(15,"ion-item-divider"),x._uU(16,"\xa0"),x._UZ(17,"br"),x._uU(18," Farbschema"),x.qZA(),x.TgZ(19,"ion-item",4),x.NdJ("click",function(){return te.changeTheme("")}),x._UZ(20,"ion-icon",6),x.TgZ(21,"ion-label"),x._uU(22," Standardfarben "),x.qZA()(),x.YNc(23,pe,4,9,"ion-item",7),x.qZA()()()(),x._UZ(24,"ion-router-outlet",8),x.qZA()()),2&O&&(x.xp6(10),x.Q6J("ngForOf",te.appPages),x.xp6(13),x.Q6J("ngForOf",te.themeKeys))},dependencies:[U.sg,R.dr,R.W2,R.Gu,R.gu,R.Ie,R.rH,R.Q$,R.q_,R.z0,R.zc,R.jI,R.wd,R.sr,R.jP],encapsulation:2}),T})(),Te=(()=>{class T{constructor(O,te){this.router=O,this.backendService=te}canActivate(O){return!(!this.backendService.geraet||!this.backendService.step)||(this.router.navigate(["home"]),!1)}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(N.F0),x.LFG(P.v))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})(),ie=(()=>{class T{constructor(O,te){this.router=O,this.backendService=te}canActivate(O){const te=O.paramMap.get("wkId"),ce=O.paramMap.get("regId");return!!("0"===ce||this.backendService.loggedIn&&this.backendService.authenticatedClubId===ce)||(this.router.navigate(["registration/"+te]),!1)}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(N.F0),x.LFG(P.v))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})();const Be=[{path:"",redirectTo:"home",pathMatch:"full"},{path:"home",loadChildren:()=>w.e(4902).then(w.bind(w,4902)).then(T=>T.HomePageModule)},{path:"station",canActivate:[Te],loadChildren:()=>Promise.all([w.e(8592),w.e(3050)]).then(w.bind(w,3050)).then(T=>T.StationPageModule)},{path:"wertung-editor/:itemId",canActivate:[Te],loadChildren:()=>w.e(9151).then(w.bind(w,9151)).then(T=>T.WertungEditorPageModule)},{path:"last-results",loadChildren:()=>Promise.all([w.e(8592),w.e(9946)]).then(w.bind(w,9946)).then(T=>T.LastResultsPageModule)},{path:"top-results",loadChildren:()=>Promise.all([w.e(8592),w.e(5332)]).then(w.bind(w,5332)).then(T=>T.LastTopResultsPageModule)},{path:"search-athlet",loadChildren:()=>Promise.all([w.e(8592),w.e(3375)]).then(w.bind(w,3375)).then(T=>T.SearchAthletPageModule)},{path:"search-athlet/:wkId",loadChildren:()=>Promise.all([w.e(8592),w.e(3375)]).then(w.bind(w,3375)).then(T=>T.SearchAthletPageModule)},{path:"athlet-view/:wkId/:athletId",loadChildren:()=>Promise.all([w.e(8592),w.e(5201)]).then(w.bind(w,5201)).then(T=>T.AthletViewPageModule)},{path:"registration",loadChildren:()=>Promise.all([w.e(8592),w.e(5323)]).then(w.bind(w,5323)).then(T=>T.RegistrationPageModule)},{path:"registration/:wkId",loadChildren:()=>Promise.all([w.e(8592),w.e(5323)]).then(w.bind(w,5323)).then(T=>T.RegistrationPageModule)},{path:"registration/:wkId/:regId",canActivate:[ie],loadChildren:()=>w.e(1994).then(w.bind(w,1994)).then(T=>T.ClubregEditorPageModule)},{path:"reg-athletlist/:wkId/:regId",canActivate:[ie],loadChildren:()=>Promise.all([w.e(8592),w.e(170)]).then(w.bind(w,170)).then(T=>T.RegAthletlistPageModule)},{path:"reg-athletlist/:wkId/:regId/:athletId",canActivate:[ie],loadChildren:()=>w.e(5231).then(w.bind(w,5231)).then(T=>T.RegAthletEditorPageModule)},{path:"reg-judgelist/:wkId/:regId",canActivate:[ie],loadChildren:()=>Promise.all([w.e(8592),w.e(6482)]).then(w.bind(w,6482)).then(T=>T.RegJudgelistPageModule)},{path:"reg-judgelist/:wkId/:regId/:judgeId",canActivate:[ie],loadChildren:()=>w.e(1053).then(w.bind(w,1053)).then(T=>T.RegJudgeEditorPageModule)}];let re=(()=>{class T{}return T.\u0275fac=function(O){return new(O||T)},T.\u0275mod=x.oAB({type:T}),T.\u0275inj=x.cJS({imports:[N.Bz.forRoot(Be,{preloadingStrategy:N.wm}),N.Bz]}),T})();var oe=w(7225);let be=(()=>{class T{constructor(){}intercept(O,te){const ce=O.headers.get("x-access-token")||localStorage.getItem("auth_token");return O=O.clone({setHeaders:{clientid:`${(0,oe.ix)()}`,"x-access-token":`${ce}`}}),te.handle(O)}}return T.\u0275fac=function(O){return new(O||T)},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})(),Ne=(()=>{class T{}return T.\u0275fac=function(O){return new(O||T)},T.\u0275mod=x.oAB({type:T,bootstrap:[ke]}),T.\u0275inj=x.cJS({providers:[Te,{provide:N.wN,useClass:R.r4},P.v,Y,be,{provide:ge.TP,useClass:be,multi:!0}],imports:[ge.JF,o.b2,R.Pc.forRoot(),re]}),T})();(0,x.G48)(),o.q6().bootstrapModule(Ne).catch(T=>console.log(T))},9914:Qe=>{"use strict";Qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},9655:(Qe,Fe,w)=>{var o=w(9914),x=w(6931),N=Object.hasOwnProperty,ge=Object.create(null);for(var R in o)N.call(o,R)&&(ge[o[R]]=R);var W=Qe.exports={to:{},get:{}};function M(_,Y,G){return Math.min(Math.max(Y,_),G)}function U(_){var Y=Math.round(_).toString(16).toUpperCase();return Y.length<2?"0"+Y:Y}W.get=function(_){var G,Z;switch(_.substring(0,3).toLowerCase()){case"hsl":G=W.get.hsl(_),Z="hsl";break;case"hwb":G=W.get.hwb(_),Z="hwb";break;default:G=W.get.rgb(_),Z="rgb"}return G?{model:Z,value:G}:null},W.get.rgb=function(_){if(!_)return null;var j,P,K,E=[0,0,0,1];if(j=_.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(K=j[2],j=j[1],P=0;P<3;P++){var pe=2*P;E[P]=parseInt(j.slice(pe,pe+2),16)}K&&(E[3]=parseInt(K,16)/255)}else if(j=_.match(/^#([a-f0-9]{3,4})$/i)){for(K=(j=j[1])[3],P=0;P<3;P++)E[P]=parseInt(j[P]+j[P],16);K&&(E[3]=parseInt(K+K,16)/255)}else if(j=_.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(P=0;P<3;P++)E[P]=parseInt(j[P+1],0);j[4]&&(E[3]=j[5]?.01*parseFloat(j[4]):parseFloat(j[4]))}else{if(!(j=_.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)))return(j=_.match(/^(\w+)$/))?"transparent"===j[1]?[0,0,0,0]:N.call(o,j[1])?((E=o[j[1]])[3]=1,E):null:null;for(P=0;P<3;P++)E[P]=Math.round(2.55*parseFloat(j[P+1]));j[4]&&(E[3]=j[5]?.01*parseFloat(j[4]):parseFloat(j[4]))}for(P=0;P<3;P++)E[P]=M(E[P],0,255);return E[3]=M(E[3],0,1),E},W.get.hsl=function(_){if(!_)return null;var G=_.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(G){var Z=parseFloat(G[4]);return[(parseFloat(G[1])%360+360)%360,M(parseFloat(G[2]),0,100),M(parseFloat(G[3]),0,100),M(isNaN(Z)?1:Z,0,1)]}return null},W.get.hwb=function(_){if(!_)return null;var G=_.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(G){var Z=parseFloat(G[4]);return[(parseFloat(G[1])%360+360)%360,M(parseFloat(G[2]),0,100),M(parseFloat(G[3]),0,100),M(isNaN(Z)?1:Z,0,1)]}return null},W.to.hex=function(){var _=x(arguments);return"#"+U(_[0])+U(_[1])+U(_[2])+(_[3]<1?U(Math.round(255*_[3])):"")},W.to.rgb=function(){var _=x(arguments);return _.length<4||1===_[3]?"rgb("+Math.round(_[0])+", "+Math.round(_[1])+", "+Math.round(_[2])+")":"rgba("+Math.round(_[0])+", "+Math.round(_[1])+", "+Math.round(_[2])+", "+_[3]+")"},W.to.rgb.percent=function(){var _=x(arguments),Y=Math.round(_[0]/255*100),G=Math.round(_[1]/255*100),Z=Math.round(_[2]/255*100);return _.length<4||1===_[3]?"rgb("+Y+"%, "+G+"%, "+Z+"%)":"rgba("+Y+"%, "+G+"%, "+Z+"%, "+_[3]+")"},W.to.hsl=function(){var _=x(arguments);return _.length<4||1===_[3]?"hsl("+_[0]+", "+_[1]+"%, "+_[2]+"%)":"hsla("+_[0]+", "+_[1]+"%, "+_[2]+"%, "+_[3]+")"},W.to.hwb=function(){var _=x(arguments),Y="";return _.length>=4&&1!==_[3]&&(Y=", "+_[3]),"hwb("+_[0]+", "+_[1]+"%, "+_[2]+"%"+Y+")"},W.to.keyword=function(_){return ge[_.slice(0,3)]}},3608:(Qe,Fe,w)=>{const o=w(9655),x=w(798),N=["keyword","gray","hex"],ge={};for(const S of Object.keys(x))ge[[...x[S].labels].sort().join("")]=S;const R={};function W(S,B){if(!(this instanceof W))return new W(S,B);if(B&&B in N&&(B=null),B&&!(B in x))throw new Error("Unknown model: "+B);let E,j;if(null==S)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(S instanceof W)this.model=S.model,this.color=[...S.color],this.valpha=S.valpha;else if("string"==typeof S){const P=o.get(S);if(null===P)throw new Error("Unable to parse color from string: "+S);this.model=P.model,j=x[this.model].channels,this.color=P.value.slice(0,j),this.valpha="number"==typeof P.value[j]?P.value[j]:1}else if(S.length>0){this.model=B||"rgb",j=x[this.model].channels;const P=Array.prototype.slice.call(S,0,j);this.color=Z(P,j),this.valpha="number"==typeof S[j]?S[j]:1}else if("number"==typeof S)this.model="rgb",this.color=[S>>16&255,S>>8&255,255&S],this.valpha=1;else{this.valpha=1;const P=Object.keys(S);"alpha"in S&&(P.splice(P.indexOf("alpha"),1),this.valpha="number"==typeof S.alpha?S.alpha:0);const K=P.sort().join("");if(!(K in ge))throw new Error("Unable to parse color from object: "+JSON.stringify(S));this.model=ge[K];const{labels:pe}=x[this.model],ke=[];for(E=0;E(S%360+360)%360),saturationl:_("hsl",1,Y(100)),lightness:_("hsl",2,Y(100)),saturationv:_("hsv",1,Y(100)),value:_("hsv",2,Y(100)),chroma:_("hcg",1,Y(100)),gray:_("hcg",2,Y(100)),white:_("hwb",1,Y(100)),wblack:_("hwb",2,Y(100)),cyan:_("cmyk",0,Y(100)),magenta:_("cmyk",1,Y(100)),yellow:_("cmyk",2,Y(100)),black:_("cmyk",3,Y(100)),x:_("xyz",0,Y(95.047)),y:_("xyz",1,Y(100)),z:_("xyz",2,Y(108.833)),l:_("lab",0,Y(100)),a:_("lab",1),b:_("lab",2),keyword(S){return void 0!==S?new W(S):x[this.model].keyword(this.color)},hex(S){return void 0!==S?new W(S):o.to.hex(this.rgb().round().color)},hexa(S){if(void 0!==S)return new W(S);const B=this.rgb().round().color;let E=Math.round(255*this.valpha).toString(16).toUpperCase();return 1===E.length&&(E="0"+E),o.to.hex(B)+E},rgbNumber(){const S=this.rgb().color;return(255&S[0])<<16|(255&S[1])<<8|255&S[2]},luminosity(){const S=this.rgb().color,B=[];for(const[E,j]of S.entries()){const P=j/255;B[E]=P<=.04045?P/12.92:((P+.055)/1.055)**2.4}return.2126*B[0]+.7152*B[1]+.0722*B[2]},contrast(S){const B=this.luminosity(),E=S.luminosity();return B>E?(B+.05)/(E+.05):(E+.05)/(B+.05)},level(S){const B=this.contrast(S);return B>=7?"AAA":B>=4.5?"AA":""},isDark(){const S=this.rgb().color;return(2126*S[0]+7152*S[1]+722*S[2])/1e4<128},isLight(){return!this.isDark()},negate(){const S=this.rgb();for(let B=0;B<3;B++)S.color[B]=255-S.color[B];return S},lighten(S){const B=this.hsl();return B.color[2]+=B.color[2]*S,B},darken(S){const B=this.hsl();return B.color[2]-=B.color[2]*S,B},saturate(S){const B=this.hsl();return B.color[1]+=B.color[1]*S,B},desaturate(S){const B=this.hsl();return B.color[1]-=B.color[1]*S,B},whiten(S){const B=this.hwb();return B.color[1]+=B.color[1]*S,B},blacken(S){const B=this.hwb();return B.color[2]+=B.color[2]*S,B},grayscale(){const S=this.rgb().color,B=.3*S[0]+.59*S[1]+.11*S[2];return W.rgb(B,B,B)},fade(S){return this.alpha(this.valpha-this.valpha*S)},opaquer(S){return this.alpha(this.valpha+this.valpha*S)},rotate(S){const B=this.hsl();let E=B.color[0];return E=(E+S)%360,E=E<0?360+E:E,B.color[0]=E,B},mix(S,B){if(!S||!S.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof S);const E=S.rgb(),j=this.rgb(),P=void 0===B?.5:B,K=2*P-1,pe=E.alpha()-j.alpha(),ke=((K*pe==-1?K:(K+pe)/(1+K*pe))+1)/2,Te=1-ke;return W.rgb(ke*E.red()+Te*j.red(),ke*E.green()+Te*j.green(),ke*E.blue()+Te*j.blue(),E.alpha()*P+j.alpha()*(1-P))}};for(const S of Object.keys(x)){if(N.includes(S))continue;const{channels:B}=x[S];W.prototype[S]=function(...E){return this.model===S?new W(this):new W(E.length>0?E:[...G(x[this.model][S].raw(this.color)),this.valpha],S)},W[S]=function(...E){let j=E[0];return"number"==typeof j&&(j=Z(E,B)),new W(j,S)}}function U(S){return function(B){return function M(S,B){return Number(S.toFixed(B))}(B,S)}}function _(S,B,E){S=Array.isArray(S)?S:[S];for(const j of S)(R[j]||(R[j]=[]))[B]=E;return S=S[0],function(j){let P;return void 0!==j?(E&&(j=E(j)),P=this[S](),P.color[B]=j,P):(P=this[S]().color[B],E&&(P=E(P)),P)}}function Y(S){return function(B){return Math.max(0,Math.min(S,B))}}function G(S){return Array.isArray(S)?S:[S]}function Z(S,B){for(let E=0;E{const o=w(1382),x={};for(const R of Object.keys(o))x[o[R]]=R;const N={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};Qe.exports=N;for(const R of Object.keys(N)){if(!("channels"in N[R]))throw new Error("missing channels property: "+R);if(!("labels"in N[R]))throw new Error("missing channel labels property: "+R);if(N[R].labels.length!==N[R].channels)throw new Error("channel and label counts mismatch: "+R);const{channels:W,labels:M}=N[R];delete N[R].channels,delete N[R].labels,Object.defineProperty(N[R],"channels",{value:W}),Object.defineProperty(N[R],"labels",{value:M})}function ge(R,W){return(R[0]-W[0])**2+(R[1]-W[1])**2+(R[2]-W[2])**2}N.rgb.hsl=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.min(W,M,U),Y=Math.max(W,M,U),G=Y-_;let Z,S;Y===_?Z=0:W===Y?Z=(M-U)/G:M===Y?Z=2+(U-W)/G:U===Y&&(Z=4+(W-M)/G),Z=Math.min(60*Z,360),Z<0&&(Z+=360);const B=(_+Y)/2;return S=Y===_?0:B<=.5?G/(Y+_):G/(2-Y-_),[Z,100*S,100*B]},N.rgb.hsv=function(R){let W,M,U,_,Y;const G=R[0]/255,Z=R[1]/255,S=R[2]/255,B=Math.max(G,Z,S),E=B-Math.min(G,Z,S),j=function(P){return(B-P)/6/E+.5};return 0===E?(_=0,Y=0):(Y=E/B,W=j(G),M=j(Z),U=j(S),G===B?_=U-M:Z===B?_=1/3+W-U:S===B&&(_=2/3+M-W),_<0?_+=1:_>1&&(_-=1)),[360*_,100*Y,100*B]},N.rgb.hwb=function(R){const W=R[0],M=R[1];let U=R[2];const _=N.rgb.hsl(R)[0],Y=1/255*Math.min(W,Math.min(M,U));return U=1-1/255*Math.max(W,Math.max(M,U)),[_,100*Y,100*U]},N.rgb.cmyk=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.min(1-W,1-M,1-U);return[100*((1-W-_)/(1-_)||0),100*((1-M-_)/(1-_)||0),100*((1-U-_)/(1-_)||0),100*_]},N.rgb.keyword=function(R){const W=x[R];if(W)return W;let U,M=1/0;for(const _ of Object.keys(o)){const G=ge(R,o[_]);G.04045?((W+.055)/1.055)**2.4:W/12.92,M=M>.04045?((M+.055)/1.055)**2.4:M/12.92,U=U>.04045?((U+.055)/1.055)**2.4:U/12.92,[100*(.4124*W+.3576*M+.1805*U),100*(.2126*W+.7152*M+.0722*U),100*(.0193*W+.1192*M+.9505*U)]},N.rgb.lab=function(R){const W=N.rgb.xyz(R);let M=W[0],U=W[1],_=W[2];return M/=95.047,U/=100,_/=108.883,M=M>.008856?M**(1/3):7.787*M+16/116,U=U>.008856?U**(1/3):7.787*U+16/116,_=_>.008856?_**(1/3):7.787*_+16/116,[116*U-16,500*(M-U),200*(U-_)]},N.hsl.rgb=function(R){const W=R[0]/360,M=R[1]/100,U=R[2]/100;let _,Y,G;if(0===M)return G=255*U,[G,G,G];_=U<.5?U*(1+M):U+M-U*M;const Z=2*U-_,S=[0,0,0];for(let B=0;B<3;B++)Y=W+1/3*-(B-1),Y<0&&Y++,Y>1&&Y--,G=6*Y<1?Z+6*(_-Z)*Y:2*Y<1?_:3*Y<2?Z+(_-Z)*(2/3-Y)*6:Z,S[B]=255*G;return S},N.hsl.hsv=function(R){const W=R[0];let M=R[1]/100,U=R[2]/100,_=M;const Y=Math.max(U,.01);return U*=2,M*=U<=1?U:2-U,_*=Y<=1?Y:2-Y,[W,100*(0===U?2*_/(Y+_):2*M/(U+M)),(U+M)/2*100]},N.hsv.rgb=function(R){const W=R[0]/60,M=R[1]/100;let U=R[2]/100;const _=Math.floor(W)%6,Y=W-Math.floor(W),G=255*U*(1-M),Z=255*U*(1-M*Y),S=255*U*(1-M*(1-Y));switch(U*=255,_){case 0:return[U,S,G];case 1:return[Z,U,G];case 2:return[G,U,S];case 3:return[G,Z,U];case 4:return[S,G,U];case 5:return[U,G,Z]}},N.hsv.hsl=function(R){const W=R[0],M=R[1]/100,U=R[2]/100,_=Math.max(U,.01);let Y,G;G=(2-M)*U;const Z=(2-M)*_;return Y=M*_,Y/=Z<=1?Z:2-Z,Y=Y||0,G/=2,[W,100*Y,100*G]},N.hwb.rgb=function(R){const W=R[0]/360;let M=R[1]/100,U=R[2]/100;const _=M+U;let Y;_>1&&(M/=_,U/=_);const G=Math.floor(6*W),Z=1-U;Y=6*W-G,0!=(1&G)&&(Y=1-Y);const S=M+Y*(Z-M);let B,E,j;switch(G){default:case 6:case 0:B=Z,E=S,j=M;break;case 1:B=S,E=Z,j=M;break;case 2:B=M,E=Z,j=S;break;case 3:B=M,E=S,j=Z;break;case 4:B=S,E=M,j=Z;break;case 5:B=Z,E=M,j=S}return[255*B,255*E,255*j]},N.cmyk.rgb=function(R){const M=R[1]/100,U=R[2]/100,_=R[3]/100;return[255*(1-Math.min(1,R[0]/100*(1-_)+_)),255*(1-Math.min(1,M*(1-_)+_)),255*(1-Math.min(1,U*(1-_)+_))]},N.xyz.rgb=function(R){const W=R[0]/100,M=R[1]/100,U=R[2]/100;let _,Y,G;return _=3.2406*W+-1.5372*M+-.4986*U,Y=-.9689*W+1.8758*M+.0415*U,G=.0557*W+-.204*M+1.057*U,_=_>.0031308?1.055*_**(1/2.4)-.055:12.92*_,Y=Y>.0031308?1.055*Y**(1/2.4)-.055:12.92*Y,G=G>.0031308?1.055*G**(1/2.4)-.055:12.92*G,_=Math.min(Math.max(0,_),1),Y=Math.min(Math.max(0,Y),1),G=Math.min(Math.max(0,G),1),[255*_,255*Y,255*G]},N.xyz.lab=function(R){let W=R[0],M=R[1],U=R[2];return W/=95.047,M/=100,U/=108.883,W=W>.008856?W**(1/3):7.787*W+16/116,M=M>.008856?M**(1/3):7.787*M+16/116,U=U>.008856?U**(1/3):7.787*U+16/116,[116*M-16,500*(W-M),200*(M-U)]},N.lab.xyz=function(R){let _,Y,G;Y=(R[0]+16)/116,_=R[1]/500+Y,G=Y-R[2]/200;const Z=Y**3,S=_**3,B=G**3;return Y=Z>.008856?Z:(Y-16/116)/7.787,_=S>.008856?S:(_-16/116)/7.787,G=B>.008856?B:(G-16/116)/7.787,_*=95.047,Y*=100,G*=108.883,[_,Y,G]},N.lab.lch=function(R){const W=R[0],M=R[1],U=R[2];let _;return _=360*Math.atan2(U,M)/2/Math.PI,_<0&&(_+=360),[W,Math.sqrt(M*M+U*U),_]},N.lch.lab=function(R){const M=R[1],_=R[2]/360*2*Math.PI;return[R[0],M*Math.cos(_),M*Math.sin(_)]},N.rgb.ansi16=function(R,W=null){const[M,U,_]=R;let Y=null===W?N.rgb.hsv(R)[2]:W;if(Y=Math.round(Y/50),0===Y)return 30;let G=30+(Math.round(_/255)<<2|Math.round(U/255)<<1|Math.round(M/255));return 2===Y&&(G+=60),G},N.hsv.ansi16=function(R){return N.rgb.ansi16(N.hsv.rgb(R),R[2])},N.rgb.ansi256=function(R){const W=R[0],M=R[1],U=R[2];return W===M&&M===U?W<8?16:W>248?231:Math.round((W-8)/247*24)+232:16+36*Math.round(W/255*5)+6*Math.round(M/255*5)+Math.round(U/255*5)},N.ansi16.rgb=function(R){let W=R%10;if(0===W||7===W)return R>50&&(W+=3.5),W=W/10.5*255,[W,W,W];const M=.5*(1+~~(R>50));return[(1&W)*M*255,(W>>1&1)*M*255,(W>>2&1)*M*255]},N.ansi256.rgb=function(R){if(R>=232){const Y=10*(R-232)+8;return[Y,Y,Y]}let W;return R-=16,[Math.floor(R/36)/5*255,Math.floor((W=R%36)/6)/5*255,W%6/5*255]},N.rgb.hex=function(R){const M=(((255&Math.round(R[0]))<<16)+((255&Math.round(R[1]))<<8)+(255&Math.round(R[2]))).toString(16).toUpperCase();return"000000".substring(M.length)+M},N.hex.rgb=function(R){const W=R.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!W)return[0,0,0];let M=W[0];3===W[0].length&&(M=M.split("").map(Z=>Z+Z).join(""));const U=parseInt(M,16);return[U>>16&255,U>>8&255,255&U]},N.rgb.hcg=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.max(Math.max(W,M),U),Y=Math.min(Math.min(W,M),U),G=_-Y;let Z,S;return Z=G<1?Y/(1-G):0,S=G<=0?0:_===W?(M-U)/G%6:_===M?2+(U-W)/G:4+(W-M)/G,S/=6,S%=1,[360*S,100*G,100*Z]},N.hsl.hcg=function(R){const W=R[1]/100,M=R[2]/100,U=M<.5?2*W*M:2*W*(1-M);let _=0;return U<1&&(_=(M-.5*U)/(1-U)),[R[0],100*U,100*_]},N.hsv.hcg=function(R){const M=R[2]/100,U=R[1]/100*M;let _=0;return U<1&&(_=(M-U)/(1-U)),[R[0],100*U,100*_]},N.hcg.rgb=function(R){const M=R[1]/100,U=R[2]/100;if(0===M)return[255*U,255*U,255*U];const _=[0,0,0],Y=R[0]/360%1*6,G=Y%1,Z=1-G;let S=0;switch(Math.floor(Y)){case 0:_[0]=1,_[1]=G,_[2]=0;break;case 1:_[0]=Z,_[1]=1,_[2]=0;break;case 2:_[0]=0,_[1]=1,_[2]=G;break;case 3:_[0]=0,_[1]=Z,_[2]=1;break;case 4:_[0]=G,_[1]=0,_[2]=1;break;default:_[0]=1,_[1]=0,_[2]=Z}return S=(1-M)*U,[255*(M*_[0]+S),255*(M*_[1]+S),255*(M*_[2]+S)]},N.hcg.hsv=function(R){const W=R[1]/100,U=W+R[2]/100*(1-W);let _=0;return U>0&&(_=W/U),[R[0],100*_,100*U]},N.hcg.hsl=function(R){const W=R[1]/100,U=R[2]/100*(1-W)+.5*W;let _=0;return U>0&&U<.5?_=W/(2*U):U>=.5&&U<1&&(_=W/(2*(1-U))),[R[0],100*_,100*U]},N.hcg.hwb=function(R){const W=R[1]/100,U=W+R[2]/100*(1-W);return[R[0],100*(U-W),100*(1-U)]},N.hwb.hcg=function(R){const U=1-R[2]/100,_=U-R[1]/100;let Y=0;return _<1&&(Y=(U-_)/(1-_)),[R[0],100*_,100*Y]},N.apple.rgb=function(R){return[R[0]/65535*255,R[1]/65535*255,R[2]/65535*255]},N.rgb.apple=function(R){return[R[0]/255*65535,R[1]/255*65535,R[2]/255*65535]},N.gray.rgb=function(R){return[R[0]/100*255,R[0]/100*255,R[0]/100*255]},N.gray.hsl=function(R){return[0,0,R[0]]},N.gray.hsv=N.gray.hsl,N.gray.hwb=function(R){return[0,100,R[0]]},N.gray.cmyk=function(R){return[0,0,0,R[0]]},N.gray.lab=function(R){return[R[0],0,0]},N.gray.hex=function(R){const W=255&Math.round(R[0]/100*255),U=((W<<16)+(W<<8)+W).toString(16).toUpperCase();return"000000".substring(U.length)+U},N.rgb.gray=function(R){return[(R[0]+R[1]+R[2])/3/255*100]}},798:(Qe,Fe,w)=>{const o=w(2539),x=w(2535),N={};Object.keys(o).forEach(M=>{N[M]={},Object.defineProperty(N[M],"channels",{value:o[M].channels}),Object.defineProperty(N[M],"labels",{value:o[M].labels});const U=x(M);Object.keys(U).forEach(Y=>{const G=U[Y];N[M][Y]=function W(M){const U=function(..._){const Y=_[0];if(null==Y)return Y;Y.length>1&&(_=Y);const G=M(_);if("object"==typeof G)for(let Z=G.length,S=0;S1&&(_=Y),M(_))};return"conversion"in M&&(U.conversion=M.conversion),U}(G)})}),Qe.exports=N},2535:(Qe,Fe,w)=>{const o=w(2539);function ge(W,M){return function(U){return M(W(U))}}function R(W,M){const U=[M[W].parent,W];let _=o[M[W].parent][W],Y=M[W].parent;for(;M[Y].parent;)U.unshift(M[Y].parent),_=ge(o[M[Y].parent][Y],_),Y=M[Y].parent;return _.conversion=U,_}Qe.exports=function(W){const M=function N(W){const M=function x(){const W={},M=Object.keys(o);for(let U=M.length,_=0;_{"use strict";Qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},1135:(Qe,Fe,w)=>{"use strict";w.d(Fe,{X:()=>x});var o=w(7579);class x extends o.x{constructor(ge){super(),this._value=ge}get value(){return this.getValue()}_subscribe(ge){const R=super._subscribe(ge);return!R.closed&&ge.next(this._value),R}getValue(){const{hasError:ge,thrownError:R,_value:W}=this;if(ge)throw R;return this._throwIfClosed(),W}next(ge){super.next(this._value=ge)}}},9751:(Qe,Fe,w)=>{"use strict";w.d(Fe,{y:()=>U});var o=w(2961),x=w(727),N=w(8822),ge=w(9635),R=w(2416),W=w(576),M=w(2806);let U=(()=>{class Z{constructor(B){B&&(this._subscribe=B)}lift(B){const E=new Z;return E.source=this,E.operator=B,E}subscribe(B,E,j){const P=function G(Z){return Z&&Z instanceof o.Lv||function Y(Z){return Z&&(0,W.m)(Z.next)&&(0,W.m)(Z.error)&&(0,W.m)(Z.complete)}(Z)&&(0,x.Nn)(Z)}(B)?B:new o.Hp(B,E,j);return(0,M.x)(()=>{const{operator:K,source:pe}=this;P.add(K?K.call(P,pe):pe?this._subscribe(P):this._trySubscribe(P))}),P}_trySubscribe(B){try{return this._subscribe(B)}catch(E){B.error(E)}}forEach(B,E){return new(E=_(E))((j,P)=>{const K=new o.Hp({next:pe=>{try{B(pe)}catch(ke){P(ke),K.unsubscribe()}},error:P,complete:j});this.subscribe(K)})}_subscribe(B){var E;return null===(E=this.source)||void 0===E?void 0:E.subscribe(B)}[N.L](){return this}pipe(...B){return(0,ge.U)(B)(this)}toPromise(B){return new(B=_(B))((E,j)=>{let P;this.subscribe(K=>P=K,K=>j(K),()=>E(P))})}}return Z.create=S=>new Z(S),Z})();function _(Z){var S;return null!==(S=Z??R.v.Promise)&&void 0!==S?S:Promise}},7579:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>M});var o=w(9751),x=w(727);const ge=(0,w(3888).d)(_=>function(){_(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var R=w(8737),W=w(2806);let M=(()=>{class _ extends o.y{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(G){const Z=new U(this,this);return Z.operator=G,Z}_throwIfClosed(){if(this.closed)throw new ge}next(G){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const Z of this.currentObservers)Z.next(G)}})}error(G){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=G;const{observers:Z}=this;for(;Z.length;)Z.shift().error(G)}})}complete(){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:G}=this;for(;G.length;)G.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var G;return(null===(G=this.observers)||void 0===G?void 0:G.length)>0}_trySubscribe(G){return this._throwIfClosed(),super._trySubscribe(G)}_subscribe(G){return this._throwIfClosed(),this._checkFinalizedStatuses(G),this._innerSubscribe(G)}_innerSubscribe(G){const{hasError:Z,isStopped:S,observers:B}=this;return Z||S?x.Lc:(this.currentObservers=null,B.push(G),new x.w0(()=>{this.currentObservers=null,(0,R.P)(B,G)}))}_checkFinalizedStatuses(G){const{hasError:Z,thrownError:S,isStopped:B}=this;Z?G.error(S):B&&G.complete()}asObservable(){const G=new o.y;return G.source=this,G}}return _.create=(Y,G)=>new U(Y,G),_})();class U extends M{constructor(Y,G){super(),this.destination=Y,this.source=G}next(Y){var G,Z;null===(Z=null===(G=this.destination)||void 0===G?void 0:G.next)||void 0===Z||Z.call(G,Y)}error(Y){var G,Z;null===(Z=null===(G=this.destination)||void 0===G?void 0:G.error)||void 0===Z||Z.call(G,Y)}complete(){var Y,G;null===(G=null===(Y=this.destination)||void 0===Y?void 0:Y.complete)||void 0===G||G.call(Y)}_subscribe(Y){var G,Z;return null!==(Z=null===(G=this.source)||void 0===G?void 0:G.subscribe(Y))&&void 0!==Z?Z:x.Lc}}},2961:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Hp:()=>j,Lv:()=>Z});var o=w(576),x=w(727),N=w(2416),ge=w(7849);function R(){}const W=_("C",void 0,void 0);function _(Te,ie,Be){return{kind:Te,value:ie,error:Be}}var Y=w(3410),G=w(2806);class Z extends x.w0{constructor(ie){super(),this.isStopped=!1,ie?(this.destination=ie,(0,x.Nn)(ie)&&ie.add(this)):this.destination=ke}static create(ie,Be,re){return new j(ie,Be,re)}next(ie){this.isStopped?pe(function U(Te){return _("N",Te,void 0)}(ie),this):this._next(ie)}error(ie){this.isStopped?pe(function M(Te){return _("E",void 0,Te)}(ie),this):(this.isStopped=!0,this._error(ie))}complete(){this.isStopped?pe(W,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(ie){this.destination.next(ie)}_error(ie){try{this.destination.error(ie)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const S=Function.prototype.bind;function B(Te,ie){return S.call(Te,ie)}class E{constructor(ie){this.partialObserver=ie}next(ie){const{partialObserver:Be}=this;if(Be.next)try{Be.next(ie)}catch(re){P(re)}}error(ie){const{partialObserver:Be}=this;if(Be.error)try{Be.error(ie)}catch(re){P(re)}else P(ie)}complete(){const{partialObserver:ie}=this;if(ie.complete)try{ie.complete()}catch(Be){P(Be)}}}class j extends Z{constructor(ie,Be,re){let oe;if(super(),(0,o.m)(ie)||!ie)oe={next:ie??void 0,error:Be??void 0,complete:re??void 0};else{let be;this&&N.v.useDeprecatedNextContext?(be=Object.create(ie),be.unsubscribe=()=>this.unsubscribe(),oe={next:ie.next&&B(ie.next,be),error:ie.error&&B(ie.error,be),complete:ie.complete&&B(ie.complete,be)}):oe=ie}this.destination=new E(oe)}}function P(Te){N.v.useDeprecatedSynchronousErrorHandling?(0,G.O)(Te):(0,ge.h)(Te)}function pe(Te,ie){const{onStoppedNotification:Be}=N.v;Be&&Y.z.setTimeout(()=>Be(Te,ie))}const ke={closed:!0,next:R,error:function K(Te){throw Te},complete:R}},727:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Lc:()=>W,w0:()=>R,Nn:()=>M});var o=w(576);const N=(0,w(3888).d)(_=>function(G){_(this),this.message=G?`${G.length} errors occurred during unsubscription:\n${G.map((Z,S)=>`${S+1}) ${Z.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=G});var ge=w(8737);class R{constructor(Y){this.initialTeardown=Y,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let Y;if(!this.closed){this.closed=!0;const{_parentage:G}=this;if(G)if(this._parentage=null,Array.isArray(G))for(const B of G)B.remove(this);else G.remove(this);const{initialTeardown:Z}=this;if((0,o.m)(Z))try{Z()}catch(B){Y=B instanceof N?B.errors:[B]}const{_finalizers:S}=this;if(S){this._finalizers=null;for(const B of S)try{U(B)}catch(E){Y=Y??[],E instanceof N?Y=[...Y,...E.errors]:Y.push(E)}}if(Y)throw new N(Y)}}add(Y){var G;if(Y&&Y!==this)if(this.closed)U(Y);else{if(Y instanceof R){if(Y.closed||Y._hasParent(this))return;Y._addParent(this)}(this._finalizers=null!==(G=this._finalizers)&&void 0!==G?G:[]).push(Y)}}_hasParent(Y){const{_parentage:G}=this;return G===Y||Array.isArray(G)&&G.includes(Y)}_addParent(Y){const{_parentage:G}=this;this._parentage=Array.isArray(G)?(G.push(Y),G):G?[G,Y]:Y}_removeParent(Y){const{_parentage:G}=this;G===Y?this._parentage=null:Array.isArray(G)&&(0,ge.P)(G,Y)}remove(Y){const{_finalizers:G}=this;G&&(0,ge.P)(G,Y),Y instanceof R&&Y._removeParent(this)}}R.EMPTY=(()=>{const _=new R;return _.closed=!0,_})();const W=R.EMPTY;function M(_){return _ instanceof R||_&&"closed"in _&&(0,o.m)(_.remove)&&(0,o.m)(_.add)&&(0,o.m)(_.unsubscribe)}function U(_){(0,o.m)(_)?_():_.unsubscribe()}},2416:(Qe,Fe,w)=>{"use strict";w.d(Fe,{v:()=>o});const o={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1}},515:(Qe,Fe,w)=>{"use strict";w.d(Fe,{E:()=>x});const x=new(w(9751).y)(R=>R.complete())},2076:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>re});var o=w(8421),x=w(9672),N=w(4482),ge=w(5403);function R(oe,be=0){return(0,N.e)((Ne,Q)=>{Ne.subscribe((0,ge.x)(Q,T=>(0,x.f)(Q,oe,()=>Q.next(T),be),()=>(0,x.f)(Q,oe,()=>Q.complete(),be),T=>(0,x.f)(Q,oe,()=>Q.error(T),be)))})}function W(oe,be=0){return(0,N.e)((Ne,Q)=>{Q.add(oe.schedule(()=>Ne.subscribe(Q),be))})}var _=w(9751),G=w(2202),Z=w(576);function B(oe,be){if(!oe)throw new Error("Iterable cannot be null");return new _.y(Ne=>{(0,x.f)(Ne,be,()=>{const Q=oe[Symbol.asyncIterator]();(0,x.f)(Ne,be,()=>{Q.next().then(T=>{T.done?Ne.complete():Ne.next(T.value)})},0,!0)})})}var E=w(3670),j=w(8239),P=w(1144),K=w(6495),pe=w(2206),ke=w(4532),Te=w(3260);function re(oe,be){return be?function Be(oe,be){if(null!=oe){if((0,E.c)(oe))return function M(oe,be){return(0,o.Xf)(oe).pipe(W(be),R(be))}(oe,be);if((0,P.z)(oe))return function Y(oe,be){return new _.y(Ne=>{let Q=0;return be.schedule(function(){Q===oe.length?Ne.complete():(Ne.next(oe[Q++]),Ne.closed||this.schedule())})})}(oe,be);if((0,j.t)(oe))return function U(oe,be){return(0,o.Xf)(oe).pipe(W(be),R(be))}(oe,be);if((0,pe.D)(oe))return B(oe,be);if((0,K.T)(oe))return function S(oe,be){return new _.y(Ne=>{let Q;return(0,x.f)(Ne,be,()=>{Q=oe[G.h](),(0,x.f)(Ne,be,()=>{let T,k;try{({value:T,done:k}=Q.next())}catch(O){return void Ne.error(O)}k?Ne.complete():Ne.next(T)},0,!0)}),()=>(0,Z.m)(Q?.return)&&Q.return()})}(oe,be);if((0,Te.L)(oe))return function ie(oe,be){return B((0,Te.Q)(oe),be)}(oe,be)}throw(0,ke.z)(oe)}(oe,be):(0,o.Xf)(oe)}},8421:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Xf:()=>S});var o=w(655),x=w(1144),N=w(8239),ge=w(9751),R=w(3670),W=w(2206),M=w(4532),U=w(6495),_=w(3260),Y=w(576),G=w(7849),Z=w(8822);function S(Te){if(Te instanceof ge.y)return Te;if(null!=Te){if((0,R.c)(Te))return function B(Te){return new ge.y(ie=>{const Be=Te[Z.L]();if((0,Y.m)(Be.subscribe))return Be.subscribe(ie);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(Te);if((0,x.z)(Te))return function E(Te){return new ge.y(ie=>{for(let Be=0;Be{Te.then(Be=>{ie.closed||(ie.next(Be),ie.complete())},Be=>ie.error(Be)).then(null,G.h)})}(Te);if((0,W.D)(Te))return K(Te);if((0,U.T)(Te))return function P(Te){return new ge.y(ie=>{for(const Be of Te)if(ie.next(Be),ie.closed)return;ie.complete()})}(Te);if((0,_.L)(Te))return function pe(Te){return K((0,_.Q)(Te))}(Te)}throw(0,M.z)(Te)}function K(Te){return new ge.y(ie=>{(function ke(Te,ie){var Be,re,oe,be;return(0,o.mG)(this,void 0,void 0,function*(){try{for(Be=(0,o.KL)(Te);!(re=yield Be.next()).done;)if(ie.next(re.value),ie.closed)return}catch(Ne){oe={error:Ne}}finally{try{re&&!re.done&&(be=Be.return)&&(yield be.call(Be))}finally{if(oe)throw oe.error}}ie.complete()})})(Te,ie).catch(Be=>ie.error(Be))})}},9646:(Qe,Fe,w)=>{"use strict";w.d(Fe,{of:()=>N});var o=w(3269),x=w(2076);function N(...ge){const R=(0,o.yG)(ge);return(0,x.D)(ge,R)}},5403:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>x});var o=w(2961);function x(ge,R,W,M,U){return new N(ge,R,W,M,U)}class N extends o.Lv{constructor(R,W,M,U,_,Y){super(R),this.onFinalize=_,this.shouldUnsubscribe=Y,this._next=W?function(G){try{W(G)}catch(Z){R.error(Z)}}:super._next,this._error=U?function(G){try{U(G)}catch(Z){R.error(Z)}finally{this.unsubscribe()}}:super._error,this._complete=M?function(){try{M()}catch(G){R.error(G)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var R;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:W}=this;super.unsubscribe(),!W&&(null===(R=this.onFinalize)||void 0===R||R.call(this))}}}},4351:(Qe,Fe,w)=>{"use strict";w.d(Fe,{b:()=>N});var o=w(5577),x=w(576);function N(ge,R){return(0,x.m)(R)?(0,o.z)(ge,R,1):(0,o.z)(ge,1)}},1884:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>ge});var o=w(4671),x=w(4482),N=w(5403);function ge(W,M=o.y){return W=W??R,(0,x.e)((U,_)=>{let Y,G=!0;U.subscribe((0,N.x)(_,Z=>{const S=M(Z);(G||!W(Y,S))&&(G=!1,Y=S,_.next(Z))}))})}function R(W,M){return W===M}},9300:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>N});var o=w(4482),x=w(5403);function N(ge,R){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>ge.call(R,_,U++)&&M.next(_)))})}},8746:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>x});var o=w(4482);function x(N){return(0,o.e)((ge,R)=>{try{ge.subscribe(R)}finally{R.add(N)}})}},4004:(Qe,Fe,w)=>{"use strict";w.d(Fe,{U:()=>N});var o=w(4482),x=w(5403);function N(ge,R){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>{M.next(ge.call(R,_,U++))}))})}},8189:(Qe,Fe,w)=>{"use strict";w.d(Fe,{J:()=>N});var o=w(5577),x=w(4671);function N(ge=1/0){return(0,o.z)(x.y,ge)}},5577:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>U});var o=w(4004),x=w(8421),N=w(4482),ge=w(9672),R=w(5403),M=w(576);function U(_,Y,G=1/0){return(0,M.m)(Y)?U((Z,S)=>(0,o.U)((B,E)=>Y(Z,B,S,E))((0,x.Xf)(_(Z,S))),G):("number"==typeof Y&&(G=Y),(0,N.e)((Z,S)=>function W(_,Y,G,Z,S,B,E,j){const P=[];let K=0,pe=0,ke=!1;const Te=()=>{ke&&!P.length&&!K&&Y.complete()},ie=re=>K{B&&Y.next(re),K++;let oe=!1;(0,x.Xf)(G(re,pe++)).subscribe((0,R.x)(Y,be=>{S?.(be),B?ie(be):Y.next(be)},()=>{oe=!0},void 0,()=>{if(oe)try{for(K--;P.length&&KBe(be)):Be(be)}Te()}catch(be){Y.error(be)}}))};return _.subscribe((0,R.x)(Y,ie,()=>{ke=!0,Te()})),()=>{j?.()}}(Z,S,_,G)))}},3099:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>R});var o=w(8421),x=w(7579),N=w(2961),ge=w(4482);function R(M={}){const{connector:U=(()=>new x.x),resetOnError:_=!0,resetOnComplete:Y=!0,resetOnRefCountZero:G=!0}=M;return Z=>{let S,B,E,j=0,P=!1,K=!1;const pe=()=>{B?.unsubscribe(),B=void 0},ke=()=>{pe(),S=E=void 0,P=K=!1},Te=()=>{const ie=S;ke(),ie?.unsubscribe()};return(0,ge.e)((ie,Be)=>{j++,!K&&!P&&pe();const re=E=E??U();Be.add(()=>{j--,0===j&&!K&&!P&&(B=W(Te,G))}),re.subscribe(Be),!S&&j>0&&(S=new N.Hp({next:oe=>re.next(oe),error:oe=>{K=!0,pe(),B=W(ke,_,oe),re.error(oe)},complete:()=>{P=!0,pe(),B=W(ke,Y),re.complete()}}),(0,o.Xf)(ie).subscribe(S))})(Z)}}function W(M,U,..._){if(!0===U)return void M();if(!1===U)return;const Y=new N.Hp({next:()=>{Y.unsubscribe(),M()}});return U(..._).subscribe(Y)}},3900:(Qe,Fe,w)=>{"use strict";w.d(Fe,{w:()=>ge});var o=w(8421),x=w(4482),N=w(5403);function ge(R,W){return(0,x.e)((M,U)=>{let _=null,Y=0,G=!1;const Z=()=>G&&!_&&U.complete();M.subscribe((0,N.x)(U,S=>{_?.unsubscribe();let B=0;const E=Y++;(0,o.Xf)(R(S,E)).subscribe(_=(0,N.x)(U,j=>U.next(W?W(S,j,E,B++):j),()=>{_=null,Z()}))},()=>{G=!0,Z()}))})}},5698:(Qe,Fe,w)=>{"use strict";w.d(Fe,{q:()=>ge});var o=w(515),x=w(4482),N=w(5403);function ge(R){return R<=0?()=>o.E:(0,x.e)((W,M)=>{let U=0;W.subscribe((0,N.x)(M,_=>{++U<=R&&(M.next(_),R<=U&&M.complete())}))})}},2529:(Qe,Fe,w)=>{"use strict";w.d(Fe,{o:()=>N});var o=w(4482),x=w(5403);function N(ge,R=!1){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>{const Y=ge(_,U++);(Y||R)&&M.next(_),!Y&&M.complete()}))})}},8505:(Qe,Fe,w)=>{"use strict";w.d(Fe,{b:()=>R});var o=w(576),x=w(4482),N=w(5403),ge=w(4671);function R(W,M,U){const _=(0,o.m)(W)||M||U?{next:W,error:M,complete:U}:W;return _?(0,x.e)((Y,G)=>{var Z;null===(Z=_.subscribe)||void 0===Z||Z.call(_);let S=!0;Y.subscribe((0,N.x)(G,B=>{var E;null===(E=_.next)||void 0===E||E.call(_,B),G.next(B)},()=>{var B;S=!1,null===(B=_.complete)||void 0===B||B.call(_),G.complete()},B=>{var E;S=!1,null===(E=_.error)||void 0===E||E.call(_,B),G.error(B)},()=>{var B,E;S&&(null===(B=_.unsubscribe)||void 0===B||B.call(_)),null===(E=_.finalize)||void 0===E||E.call(_)}))}):ge.y}},1566:(Qe,Fe,w)=>{"use strict";w.d(Fe,{P:()=>Y,z:()=>_});var o=w(727);class x extends o.w0{constructor(Z,S){super()}schedule(Z,S=0){return this}}const N={setInterval(G,Z,...S){const{delegate:B}=N;return B?.setInterval?B.setInterval(G,Z,...S):setInterval(G,Z,...S)},clearInterval(G){const{delegate:Z}=N;return(Z?.clearInterval||clearInterval)(G)},delegate:void 0};var ge=w(8737);const W={now:()=>(W.delegate||Date).now(),delegate:void 0};class M{constructor(Z,S=M.now){this.schedulerActionCtor=Z,this.now=S}schedule(Z,S=0,B){return new this.schedulerActionCtor(this,Z).schedule(B,S)}}M.now=W.now;const _=new class U extends M{constructor(Z,S=M.now){super(Z,S),this.actions=[],this._active=!1}flush(Z){const{actions:S}=this;if(this._active)return void S.push(Z);let B;this._active=!0;do{if(B=Z.execute(Z.state,Z.delay))break}while(Z=S.shift());if(this._active=!1,B){for(;Z=S.shift();)Z.unsubscribe();throw B}}}(class R extends x{constructor(Z,S){super(Z,S),this.scheduler=Z,this.work=S,this.pending=!1}schedule(Z,S=0){var B;if(this.closed)return this;this.state=Z;const E=this.id,j=this.scheduler;return null!=E&&(this.id=this.recycleAsyncId(j,E,S)),this.pending=!0,this.delay=S,this.id=null!==(B=this.id)&&void 0!==B?B:this.requestAsyncId(j,this.id,S),this}requestAsyncId(Z,S,B=0){return N.setInterval(Z.flush.bind(Z,this),B)}recycleAsyncId(Z,S,B=0){if(null!=B&&this.delay===B&&!1===this.pending)return S;null!=S&&N.clearInterval(S)}execute(Z,S){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const B=this._execute(Z,S);if(B)return B;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(Z,S){let E,B=!1;try{this.work(Z)}catch(j){B=!0,E=j||new Error("Scheduled action threw falsy error")}if(B)return this.unsubscribe(),E}unsubscribe(){if(!this.closed){const{id:Z,scheduler:S}=this,{actions:B}=S;this.work=this.state=this.scheduler=null,this.pending=!1,(0,ge.P)(B,this),null!=Z&&(this.id=this.recycleAsyncId(S,Z,null)),this.delay=null,super.unsubscribe()}}}),Y=_},3410:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>o});const o={setTimeout(x,N,...ge){const{delegate:R}=o;return R?.setTimeout?R.setTimeout(x,N,...ge):setTimeout(x,N,...ge)},clearTimeout(x){const{delegate:N}=o;return(N?.clearTimeout||clearTimeout)(x)},delegate:void 0}},2202:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>x});const x=function o(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}()},8822:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>o});const o="function"==typeof Symbol&&Symbol.observable||"@@observable"},3269:(Qe,Fe,w)=>{"use strict";w.d(Fe,{_6:()=>W,jO:()=>ge,yG:()=>R});var o=w(576),x=w(3532);function N(M){return M[M.length-1]}function ge(M){return(0,o.m)(N(M))?M.pop():void 0}function R(M){return(0,x.K)(N(M))?M.pop():void 0}function W(M,U){return"number"==typeof N(M)?M.pop():U}},4742:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>R});const{isArray:o}=Array,{getPrototypeOf:x,prototype:N,keys:ge}=Object;function R(M){if(1===M.length){const U=M[0];if(o(U))return{args:U,keys:null};if(function W(M){return M&&"object"==typeof M&&x(M)===N}(U)){const _=ge(U);return{args:_.map(Y=>U[Y]),keys:_}}}return{args:M,keys:null}}},8737:(Qe,Fe,w)=>{"use strict";function o(x,N){if(x){const ge=x.indexOf(N);0<=ge&&x.splice(ge,1)}}w.d(Fe,{P:()=>o})},3888:(Qe,Fe,w)=>{"use strict";function o(x){const ge=x(R=>{Error.call(R),R.stack=(new Error).stack});return ge.prototype=Object.create(Error.prototype),ge.prototype.constructor=ge,ge}w.d(Fe,{d:()=>o})},1810:(Qe,Fe,w)=>{"use strict";function o(x,N){return x.reduce((ge,R,W)=>(ge[R]=N[W],ge),{})}w.d(Fe,{n:()=>o})},2806:(Qe,Fe,w)=>{"use strict";w.d(Fe,{O:()=>ge,x:()=>N});var o=w(2416);let x=null;function N(R){if(o.v.useDeprecatedSynchronousErrorHandling){const W=!x;if(W&&(x={errorThrown:!1,error:null}),R(),W){const{errorThrown:M,error:U}=x;if(x=null,M)throw U}}else R()}function ge(R){o.v.useDeprecatedSynchronousErrorHandling&&x&&(x.errorThrown=!0,x.error=R)}},9672:(Qe,Fe,w)=>{"use strict";function o(x,N,ge,R=0,W=!1){const M=N.schedule(function(){ge(),W?x.add(this.schedule(null,R)):this.unsubscribe()},R);if(x.add(M),!W)return M}w.d(Fe,{f:()=>o})},4671:(Qe,Fe,w)=>{"use strict";function o(x){return x}w.d(Fe,{y:()=>o})},1144:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>o});const o=x=>x&&"number"==typeof x.length&&"function"!=typeof x},2206:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>x});var o=w(576);function x(N){return Symbol.asyncIterator&&(0,o.m)(N?.[Symbol.asyncIterator])}},576:(Qe,Fe,w)=>{"use strict";function o(x){return"function"==typeof x}w.d(Fe,{m:()=>o})},3670:(Qe,Fe,w)=>{"use strict";w.d(Fe,{c:()=>N});var o=w(8822),x=w(576);function N(ge){return(0,x.m)(ge[o.L])}},6495:(Qe,Fe,w)=>{"use strict";w.d(Fe,{T:()=>N});var o=w(2202),x=w(576);function N(ge){return(0,x.m)(ge?.[o.h])}},8239:(Qe,Fe,w)=>{"use strict";w.d(Fe,{t:()=>x});var o=w(576);function x(N){return(0,o.m)(N?.then)}},3260:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>ge,Q:()=>N});var o=w(655),x=w(576);function N(R){return(0,o.FC)(this,arguments,function*(){const M=R.getReader();try{for(;;){const{value:U,done:_}=yield(0,o.qq)(M.read());if(_)return yield(0,o.qq)(void 0);yield yield(0,o.qq)(U)}}finally{M.releaseLock()}})}function ge(R){return(0,x.m)(R?.getReader)}},3532:(Qe,Fe,w)=>{"use strict";w.d(Fe,{K:()=>x});var o=w(576);function x(N){return N&&(0,o.m)(N.schedule)}},4482:(Qe,Fe,w)=>{"use strict";w.d(Fe,{A:()=>x,e:()=>N});var o=w(576);function x(ge){return(0,o.m)(ge?.lift)}function N(ge){return R=>{if(x(R))return R.lift(function(W){try{return ge(W,this)}catch(M){this.error(M)}});throw new TypeError("Unable to lift unknown Observable type")}}},3268:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Z:()=>ge});var o=w(4004);const{isArray:x}=Array;function ge(R){return(0,o.U)(W=>function N(R,W){return x(W)?R(...W):R(W)}(R,W))}},9635:(Qe,Fe,w)=>{"use strict";w.d(Fe,{U:()=>N,z:()=>x});var o=w(4671);function x(...ge){return N(ge)}function N(ge){return 0===ge.length?o.y:1===ge.length?ge[0]:function(W){return ge.reduce((M,U)=>U(M),W)}}},7849:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>N});var o=w(2416),x=w(3410);function N(ge){x.z.setTimeout(()=>{const{onUnhandledError:R}=o.v;if(!R)throw ge;R(ge)})}},4532:(Qe,Fe,w)=>{"use strict";function o(x){return new TypeError(`You provided ${null!==x&&"object"==typeof x?"an invalid object":`'${x}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}w.d(Fe,{z:()=>o})},6931:(Qe,Fe,w)=>{"use strict";var o=w(1708),x=Array.prototype.concat,N=Array.prototype.slice,ge=Qe.exports=function(W){for(var M=[],U=0,_=W.length;U<_;U++){var Y=W[U];o(Y)?M=x.call(M,N.call(Y)):M.push(Y)}return M};ge.wrap=function(R){return function(){return R(ge(arguments))}}},1708:Qe=>{Qe.exports=function(w){return!(!w||"string"==typeof w)&&(w instanceof Array||Array.isArray(w)||w.length>=0&&(w.splice instanceof Function||Object.getOwnPropertyDescriptor(w,w.length-1)&&"String"!==w.constructor.name))}},863:(Qe,Fe,w)=>{var o={"./ion-accordion_2.entry.js":[9654,8592,9654],"./ion-action-sheet.entry.js":[3648,8592,3648],"./ion-alert.entry.js":[1118,8592,1118],"./ion-app_8.entry.js":[53,8592,3236],"./ion-avatar_3.entry.js":[4753,4753],"./ion-back-button.entry.js":[2073,8592,2073],"./ion-backdrop.entry.js":[8939,8939],"./ion-breadcrumb_2.entry.js":[7544,8592,7544],"./ion-button_2.entry.js":[5652,5652],"./ion-card_5.entry.js":[388,388],"./ion-checkbox.entry.js":[9922,9922],"./ion-chip.entry.js":[657,657],"./ion-col_3.entry.js":[9824,9824],"./ion-datetime-button.entry.js":[9230,1435,9230],"./ion-datetime_3.entry.js":[4959,1435,8592,4959],"./ion-fab_3.entry.js":[5836,8592,5836],"./ion-img.entry.js":[1033,1033],"./ion-infinite-scroll_2.entry.js":[8034,8592,5817],"./ion-input.entry.js":[1217,1217],"./ion-item-option_3.entry.js":[2933,8592,4651],"./ion-item_8.entry.js":[4711,8592,4711],"./ion-loading.entry.js":[9434,8592,9434],"./ion-menu_3.entry.js":[8136,8592,8136],"./ion-modal.entry.js":[2349,8592,2349],"./ion-nav_2.entry.js":[5349,8592,5349],"./ion-picker-column-internal.entry.js":[7602,8592,7602],"./ion-picker-internal.entry.js":[9016,9016],"./ion-popover.entry.js":[3804,8592,3804],"./ion-progress-bar.entry.js":[4174,4174],"./ion-radio_2.entry.js":[4432,4432],"./ion-range.entry.js":[1709,8592,1709],"./ion-refresher_2.entry.js":[3326,8592,2175],"./ion-reorder_2.entry.js":[3583,8592,1186],"./ion-ripple-effect.entry.js":[9958,9958],"./ion-route_4.entry.js":[4330,4330],"./ion-searchbar.entry.js":[8628,8592,8628],"./ion-segment_2.entry.js":[9325,8592,9325],"./ion-select_3.entry.js":[2773,2773],"./ion-slide_2.entry.js":[1650,1650],"./ion-spinner.entry.js":[4908,8592,4908],"./ion-split-pane.entry.js":[9536,9536],"./ion-tab-bar_2.entry.js":[438,8592,438],"./ion-tab_2.entry.js":[1536,8592,1536],"./ion-text.entry.js":[4376,4376],"./ion-textarea.entry.js":[6560,6560],"./ion-toast.entry.js":[6120,8592,6120],"./ion-toggle.entry.js":[5168,8592,5168],"./ion-virtual-scroll.entry.js":[2289,2289]};function x(N){if(!w.o(o,N))return Promise.resolve().then(()=>{var W=new Error("Cannot find module '"+N+"'");throw W.code="MODULE_NOT_FOUND",W});var ge=o[N],R=ge[0];return Promise.all(ge.slice(1).map(w.e)).then(()=>w(R))}x.keys=()=>Object.keys(o),x.id=863,Qe.exports=x},655:(Qe,Fe,w)=>{"use strict";function R(Q,T,k,O){var Ae,te=arguments.length,ce=te<3?T:null===O?O=Object.getOwnPropertyDescriptor(T,k):O;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)ce=Reflect.decorate(Q,T,k,O);else for(var De=Q.length-1;De>=0;De--)(Ae=Q[De])&&(ce=(te<3?Ae(ce):te>3?Ae(T,k,ce):Ae(T,k))||ce);return te>3&&ce&&Object.defineProperty(T,k,ce),ce}function U(Q,T,k,O){return new(k||(k=Promise))(function(ce,Ae){function De(ne){try{de(O.next(ne))}catch(Ee){Ae(Ee)}}function ue(ne){try{de(O.throw(ne))}catch(Ee){Ae(Ee)}}function de(ne){ne.done?ce(ne.value):function te(ce){return ce instanceof k?ce:new k(function(Ae){Ae(ce)})}(ne.value).then(De,ue)}de((O=O.apply(Q,T||[])).next())})}function P(Q){return this instanceof P?(this.v=Q,this):new P(Q)}function K(Q,T,k){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var te,O=k.apply(Q,T||[]),ce=[];return te={},Ae("next"),Ae("throw"),Ae("return"),te[Symbol.asyncIterator]=function(){return this},te;function Ae(Ce){O[Ce]&&(te[Ce]=function(ze){return new Promise(function(dt,et){ce.push([Ce,ze,dt,et])>1||De(Ce,ze)})})}function De(Ce,ze){try{!function ue(Ce){Ce.value instanceof P?Promise.resolve(Ce.value.v).then(de,ne):Ee(ce[0][2],Ce)}(O[Ce](ze))}catch(dt){Ee(ce[0][3],dt)}}function de(Ce){De("next",Ce)}function ne(Ce){De("throw",Ce)}function Ee(Ce,ze){Ce(ze),ce.shift(),ce.length&&De(ce[0][0],ce[0][1])}}function ke(Q){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var k,T=Q[Symbol.asyncIterator];return T?T.call(Q):(Q=function Z(Q){var T="function"==typeof Symbol&&Symbol.iterator,k=T&&Q[T],O=0;if(k)return k.call(Q);if(Q&&"number"==typeof Q.length)return{next:function(){return Q&&O>=Q.length&&(Q=void 0),{value:Q&&Q[O++],done:!Q}}};throw new TypeError(T?"Object is not iterable.":"Symbol.iterator is not defined.")}(Q),k={},O("next"),O("throw"),O("return"),k[Symbol.asyncIterator]=function(){return this},k);function O(ce){k[ce]=Q[ce]&&function(Ae){return new Promise(function(De,ue){!function te(ce,Ae,De,ue){Promise.resolve(ue).then(function(de){ce({value:de,done:De})},Ae)}(De,ue,(Ae=Q[ce](Ae)).done,Ae.value)})}}}w.d(Fe,{FC:()=>K,KL:()=>ke,gn:()=>R,mG:()=>U,qq:()=>P})},6895:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Do:()=>ke,EM:()=>zr,HT:()=>R,JF:()=>hr,JJ:()=>Gn,K0:()=>M,Mx:()=>gr,O5:()=>q,OU:()=>Pr,Ov:()=>mr,PC:()=>st,S$:()=>P,V_:()=>Y,Ye:()=>Te,b0:()=>pe,bD:()=>yo,ez:()=>vo,mk:()=>$t,q:()=>N,sg:()=>Cn,tP:()=>Mt,uU:()=>ar,w_:()=>W});var o=w(8274);let x=null;function N(){return x}function R(v){x||(x=v)}class W{}const M=new o.OlP("DocumentToken");let U=(()=>{class v{historyGo(D){throw new Error("Not implemented")}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275prov=o.Yz7({token:v,factory:function(){return function _(){return(0,o.LFG)(G)}()},providedIn:"platform"}),v})();const Y=new o.OlP("Location Initialized");let G=(()=>{class v extends U{constructor(D){super(),this._doc=D,this._init()}_init(){this.location=window.location,this._history=window.history}getBaseHrefFromDOM(){return N().getBaseHref(this._doc)}onPopState(D){const H=N().getGlobalEventTarget(this._doc,"window");return H.addEventListener("popstate",D,!1),()=>H.removeEventListener("popstate",D)}onHashChange(D){const H=N().getGlobalEventTarget(this._doc,"window");return H.addEventListener("hashchange",D,!1),()=>H.removeEventListener("hashchange",D)}get href(){return this.location.href}get protocol(){return this.location.protocol}get hostname(){return this.location.hostname}get port(){return this.location.port}get pathname(){return this.location.pathname}get search(){return this.location.search}get hash(){return this.location.hash}set pathname(D){this.location.pathname=D}pushState(D,H,ae){Z()?this._history.pushState(D,H,ae):this.location.hash=ae}replaceState(D,H,ae){Z()?this._history.replaceState(D,H,ae):this.location.hash=ae}forward(){this._history.forward()}back(){this._history.back()}historyGo(D=0){this._history.go(D)}getState(){return this._history.state}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(M))},v.\u0275prov=o.Yz7({token:v,factory:function(){return function S(){return new G((0,o.LFG)(M))}()},providedIn:"platform"}),v})();function Z(){return!!window.history.pushState}function B(v,A){if(0==v.length)return A;if(0==A.length)return v;let D=0;return v.endsWith("/")&&D++,A.startsWith("/")&&D++,2==D?v+A.substring(1):1==D?v+A:v+"/"+A}function E(v){const A=v.match(/#|\?|$/),D=A&&A.index||v.length;return v.slice(0,D-("/"===v[D-1]?1:0))+v.slice(D)}function j(v){return v&&"?"!==v[0]?"?"+v:v}let P=(()=>{class v{historyGo(D){throw new Error("Not implemented")}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275prov=o.Yz7({token:v,factory:function(){return(0,o.f3M)(pe)},providedIn:"root"}),v})();const K=new o.OlP("appBaseHref");let pe=(()=>{class v extends P{constructor(D,H){super(),this._platformLocation=D,this._removeListenerFns=[],this._baseHref=H??this._platformLocation.getBaseHrefFromDOM()??(0,o.f3M)(M).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(D){this._removeListenerFns.push(this._platformLocation.onPopState(D),this._platformLocation.onHashChange(D))}getBaseHref(){return this._baseHref}prepareExternalUrl(D){return B(this._baseHref,D)}path(D=!1){const H=this._platformLocation.pathname+j(this._platformLocation.search),ae=this._platformLocation.hash;return ae&&D?`${H}${ae}`:H}pushState(D,H,ae,$e){const Xe=this.prepareExternalUrl(ae+j($e));this._platformLocation.pushState(D,H,Xe)}replaceState(D,H,ae,$e){const Xe=this.prepareExternalUrl(ae+j($e));this._platformLocation.replaceState(D,H,Xe)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(D=0){this._platformLocation.historyGo?.(D)}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(U),o.LFG(K,8))},v.\u0275prov=o.Yz7({token:v,factory:v.\u0275fac,providedIn:"root"}),v})(),ke=(()=>{class v extends P{constructor(D,H){super(),this._platformLocation=D,this._baseHref="",this._removeListenerFns=[],null!=H&&(this._baseHref=H)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(D){this._removeListenerFns.push(this._platformLocation.onPopState(D),this._platformLocation.onHashChange(D))}getBaseHref(){return this._baseHref}path(D=!1){let H=this._platformLocation.hash;return null==H&&(H="#"),H.length>0?H.substring(1):H}prepareExternalUrl(D){const H=B(this._baseHref,D);return H.length>0?"#"+H:H}pushState(D,H,ae,$e){let Xe=this.prepareExternalUrl(ae+j($e));0==Xe.length&&(Xe=this._platformLocation.pathname),this._platformLocation.pushState(D,H,Xe)}replaceState(D,H,ae,$e){let Xe=this.prepareExternalUrl(ae+j($e));0==Xe.length&&(Xe=this._platformLocation.pathname),this._platformLocation.replaceState(D,H,Xe)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(D=0){this._platformLocation.historyGo?.(D)}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(U),o.LFG(K,8))},v.\u0275prov=o.Yz7({token:v,factory:v.\u0275fac}),v})(),Te=(()=>{class v{constructor(D){this._subject=new o.vpe,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=D;const H=this._locationStrategy.getBaseHref();this._baseHref=E(re(H)),this._locationStrategy.onPopState(ae=>{this._subject.emit({url:this.path(!0),pop:!0,state:ae.state,type:ae.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(D=!1){return this.normalize(this._locationStrategy.path(D))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(D,H=""){return this.path()==this.normalize(D+j(H))}normalize(D){return v.stripTrailingSlash(function Be(v,A){return v&&A.startsWith(v)?A.substring(v.length):A}(this._baseHref,re(D)))}prepareExternalUrl(D){return D&&"/"!==D[0]&&(D="/"+D),this._locationStrategy.prepareExternalUrl(D)}go(D,H="",ae=null){this._locationStrategy.pushState(ae,"",D,H),this._notifyUrlChangeListeners(this.prepareExternalUrl(D+j(H)),ae)}replaceState(D,H="",ae=null){this._locationStrategy.replaceState(ae,"",D,H),this._notifyUrlChangeListeners(this.prepareExternalUrl(D+j(H)),ae)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(D=0){this._locationStrategy.historyGo?.(D)}onUrlChange(D){return this._urlChangeListeners.push(D),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(H=>{this._notifyUrlChangeListeners(H.url,H.state)})),()=>{const H=this._urlChangeListeners.indexOf(D);this._urlChangeListeners.splice(H,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(D="",H){this._urlChangeListeners.forEach(ae=>ae(D,H))}subscribe(D,H,ae){return this._subject.subscribe({next:D,error:H,complete:ae})}}return v.normalizeQueryParams=j,v.joinWithSlash=B,v.stripTrailingSlash=E,v.\u0275fac=function(D){return new(D||v)(o.LFG(P))},v.\u0275prov=o.Yz7({token:v,factory:function(){return function ie(){return new Te((0,o.LFG)(P))}()},providedIn:"root"}),v})();function re(v){return v.replace(/\/index.html$/,"")}var be=(()=>((be=be||{})[be.Decimal=0]="Decimal",be[be.Percent=1]="Percent",be[be.Currency=2]="Currency",be[be.Scientific=3]="Scientific",be))(),Q=(()=>((Q=Q||{})[Q.Format=0]="Format",Q[Q.Standalone=1]="Standalone",Q))(),T=(()=>((T=T||{})[T.Narrow=0]="Narrow",T[T.Abbreviated=1]="Abbreviated",T[T.Wide=2]="Wide",T[T.Short=3]="Short",T))(),k=(()=>((k=k||{})[k.Short=0]="Short",k[k.Medium=1]="Medium",k[k.Long=2]="Long",k[k.Full=3]="Full",k))(),O=(()=>((O=O||{})[O.Decimal=0]="Decimal",O[O.Group=1]="Group",O[O.List=2]="List",O[O.PercentSign=3]="PercentSign",O[O.PlusSign=4]="PlusSign",O[O.MinusSign=5]="MinusSign",O[O.Exponential=6]="Exponential",O[O.SuperscriptingExponent=7]="SuperscriptingExponent",O[O.PerMille=8]="PerMille",O[O.Infinity=9]="Infinity",O[O.NaN=10]="NaN",O[O.TimeSeparator=11]="TimeSeparator",O[O.CurrencyDecimal=12]="CurrencyDecimal",O[O.CurrencyGroup=13]="CurrencyGroup",O))();function Ce(v,A){return it((0,o.cg1)(v)[o.wAp.DateFormat],A)}function ze(v,A){return it((0,o.cg1)(v)[o.wAp.TimeFormat],A)}function dt(v,A){return it((0,o.cg1)(v)[o.wAp.DateTimeFormat],A)}function et(v,A){const D=(0,o.cg1)(v),H=D[o.wAp.NumberSymbols][A];if(typeof H>"u"){if(A===O.CurrencyDecimal)return D[o.wAp.NumberSymbols][O.Decimal];if(A===O.CurrencyGroup)return D[o.wAp.NumberSymbols][O.Group]}return H}function Kt(v){if(!v[o.wAp.ExtraData])throw new Error(`Missing extra locale data for the locale "${v[o.wAp.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function it(v,A){for(let D=A;D>-1;D--)if(typeof v[D]<"u")return v[D];throw new Error("Locale data API: locale data undefined")}function Xt(v){const[A,D]=v.split(":");return{hours:+A,minutes:+D}}const Vn=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,en={},gt=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;var Yt=(()=>((Yt=Yt||{})[Yt.Short=0]="Short",Yt[Yt.ShortGMT=1]="ShortGMT",Yt[Yt.Long=2]="Long",Yt[Yt.Extended=3]="Extended",Yt))(),ht=(()=>((ht=ht||{})[ht.FullYear=0]="FullYear",ht[ht.Month=1]="Month",ht[ht.Date=2]="Date",ht[ht.Hours=3]="Hours",ht[ht.Minutes=4]="Minutes",ht[ht.Seconds=5]="Seconds",ht[ht.FractionalSeconds=6]="FractionalSeconds",ht[ht.Day=7]="Day",ht))(),nt=(()=>((nt=nt||{})[nt.DayPeriods=0]="DayPeriods",nt[nt.Days=1]="Days",nt[nt.Months=2]="Months",nt[nt.Eras=3]="Eras",nt))();function Et(v,A,D,H){let ae=function tn(v){if(mn(v))return v;if("number"==typeof v&&!isNaN(v))return new Date(v);if("string"==typeof v){if(v=v.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(v)){const[ae,$e=1,Xe=1]=v.split("-").map(lt=>+lt);return ut(ae,$e-1,Xe)}const D=parseFloat(v);if(!isNaN(v-D))return new Date(D);let H;if(H=v.match(Vn))return function Ln(v){const A=new Date(0);let D=0,H=0;const ae=v[8]?A.setUTCFullYear:A.setFullYear,$e=v[8]?A.setUTCHours:A.setHours;v[9]&&(D=Number(v[9]+v[10]),H=Number(v[9]+v[11])),ae.call(A,Number(v[1]),Number(v[2])-1,Number(v[3]));const Xe=Number(v[4]||0)-D,lt=Number(v[5]||0)-H,qt=Number(v[6]||0),Tt=Math.floor(1e3*parseFloat("0."+(v[7]||0)));return $e.call(A,Xe,lt,qt,Tt),A}(H)}const A=new Date(v);if(!mn(A))throw new Error(`Unable to convert "${v}" into a date`);return A}(v);A=Ct(D,A)||A;let lt,Xe=[];for(;A;){if(lt=gt.exec(A),!lt){Xe.push(A);break}{Xe=Xe.concat(lt.slice(1));const un=Xe.pop();if(!un)break;A=un}}let qt=ae.getTimezoneOffset();H&&(qt=vt(H,qt),ae=function _t(v,A,D){const H=D?-1:1,ae=v.getTimezoneOffset();return function Ht(v,A){return(v=new Date(v.getTime())).setMinutes(v.getMinutes()+A),v}(v,H*(vt(A,ae)-ae))}(ae,H,!0));let Tt="";return Xe.forEach(un=>{const Jt=function pt(v){if(Ye[v])return Ye[v];let A;switch(v){case"G":case"GG":case"GGG":A=zt(nt.Eras,T.Abbreviated);break;case"GGGG":A=zt(nt.Eras,T.Wide);break;case"GGGGG":A=zt(nt.Eras,T.Narrow);break;case"y":A=Nt(ht.FullYear,1,0,!1,!0);break;case"yy":A=Nt(ht.FullYear,2,0,!0,!0);break;case"yyy":A=Nt(ht.FullYear,3,0,!1,!0);break;case"yyyy":A=Nt(ht.FullYear,4,0,!1,!0);break;case"Y":A=He(1);break;case"YY":A=He(2,!0);break;case"YYY":A=He(3);break;case"YYYY":A=He(4);break;case"M":case"L":A=Nt(ht.Month,1,1);break;case"MM":case"LL":A=Nt(ht.Month,2,1);break;case"MMM":A=zt(nt.Months,T.Abbreviated);break;case"MMMM":A=zt(nt.Months,T.Wide);break;case"MMMMM":A=zt(nt.Months,T.Narrow);break;case"LLL":A=zt(nt.Months,T.Abbreviated,Q.Standalone);break;case"LLLL":A=zt(nt.Months,T.Wide,Q.Standalone);break;case"LLLLL":A=zt(nt.Months,T.Narrow,Q.Standalone);break;case"w":A=ye(1);break;case"ww":A=ye(2);break;case"W":A=ye(1,!0);break;case"d":A=Nt(ht.Date,1);break;case"dd":A=Nt(ht.Date,2);break;case"c":case"cc":A=Nt(ht.Day,1);break;case"ccc":A=zt(nt.Days,T.Abbreviated,Q.Standalone);break;case"cccc":A=zt(nt.Days,T.Wide,Q.Standalone);break;case"ccccc":A=zt(nt.Days,T.Narrow,Q.Standalone);break;case"cccccc":A=zt(nt.Days,T.Short,Q.Standalone);break;case"E":case"EE":case"EEE":A=zt(nt.Days,T.Abbreviated);break;case"EEEE":A=zt(nt.Days,T.Wide);break;case"EEEEE":A=zt(nt.Days,T.Narrow);break;case"EEEEEE":A=zt(nt.Days,T.Short);break;case"a":case"aa":case"aaa":A=zt(nt.DayPeriods,T.Abbreviated);break;case"aaaa":A=zt(nt.DayPeriods,T.Wide);break;case"aaaaa":A=zt(nt.DayPeriods,T.Narrow);break;case"b":case"bb":case"bbb":A=zt(nt.DayPeriods,T.Abbreviated,Q.Standalone,!0);break;case"bbbb":A=zt(nt.DayPeriods,T.Wide,Q.Standalone,!0);break;case"bbbbb":A=zt(nt.DayPeriods,T.Narrow,Q.Standalone,!0);break;case"B":case"BB":case"BBB":A=zt(nt.DayPeriods,T.Abbreviated,Q.Format,!0);break;case"BBBB":A=zt(nt.DayPeriods,T.Wide,Q.Format,!0);break;case"BBBBB":A=zt(nt.DayPeriods,T.Narrow,Q.Format,!0);break;case"h":A=Nt(ht.Hours,1,-12);break;case"hh":A=Nt(ht.Hours,2,-12);break;case"H":A=Nt(ht.Hours,1);break;case"HH":A=Nt(ht.Hours,2);break;case"m":A=Nt(ht.Minutes,1);break;case"mm":A=Nt(ht.Minutes,2);break;case"s":A=Nt(ht.Seconds,1);break;case"ss":A=Nt(ht.Seconds,2);break;case"S":A=Nt(ht.FractionalSeconds,1);break;case"SS":A=Nt(ht.FractionalSeconds,2);break;case"SSS":A=Nt(ht.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":A=jn(Yt.Short);break;case"ZZZZZ":A=jn(Yt.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":A=jn(Yt.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":A=jn(Yt.Long);break;default:return null}return Ye[v]=A,A}(un);Tt+=Jt?Jt(ae,D,qt):"''"===un?"'":un.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),Tt}function ut(v,A,D){const H=new Date(0);return H.setFullYear(v,A,D),H.setHours(0,0,0),H}function Ct(v,A){const D=function ce(v){return(0,o.cg1)(v)[o.wAp.LocaleId]}(v);if(en[D]=en[D]||{},en[D][A])return en[D][A];let H="";switch(A){case"shortDate":H=Ce(v,k.Short);break;case"mediumDate":H=Ce(v,k.Medium);break;case"longDate":H=Ce(v,k.Long);break;case"fullDate":H=Ce(v,k.Full);break;case"shortTime":H=ze(v,k.Short);break;case"mediumTime":H=ze(v,k.Medium);break;case"longTime":H=ze(v,k.Long);break;case"fullTime":H=ze(v,k.Full);break;case"short":const ae=Ct(v,"shortTime"),$e=Ct(v,"shortDate");H=qe(dt(v,k.Short),[ae,$e]);break;case"medium":const Xe=Ct(v,"mediumTime"),lt=Ct(v,"mediumDate");H=qe(dt(v,k.Medium),[Xe,lt]);break;case"long":const qt=Ct(v,"longTime"),Tt=Ct(v,"longDate");H=qe(dt(v,k.Long),[qt,Tt]);break;case"full":const un=Ct(v,"fullTime"),Jt=Ct(v,"fullDate");H=qe(dt(v,k.Full),[un,Jt])}return H&&(en[D][A]=H),H}function qe(v,A){return A&&(v=v.replace(/\{([^}]+)}/g,function(D,H){return null!=A&&H in A?A[H]:D})),v}function on(v,A,D="-",H,ae){let $e="";(v<0||ae&&v<=0)&&(ae?v=1-v:(v=-v,$e=D));let Xe=String(v);for(;Xe.length0||lt>-D)&&(lt+=D),v===ht.Hours)0===lt&&-12===D&&(lt=12);else if(v===ht.FractionalSeconds)return function gn(v,A){return on(v,3).substring(0,A)}(lt,A);const qt=et(Xe,O.MinusSign);return on(lt,A,qt,H,ae)}}function zt(v,A,D=Q.Format,H=!1){return function(ae,$e){return function Er(v,A,D,H,ae,$e){switch(D){case nt.Months:return function ue(v,A,D){const H=(0,o.cg1)(v),$e=it([H[o.wAp.MonthsFormat],H[o.wAp.MonthsStandalone]],A);return it($e,D)}(A,ae,H)[v.getMonth()];case nt.Days:return function De(v,A,D){const H=(0,o.cg1)(v),$e=it([H[o.wAp.DaysFormat],H[o.wAp.DaysStandalone]],A);return it($e,D)}(A,ae,H)[v.getDay()];case nt.DayPeriods:const Xe=v.getHours(),lt=v.getMinutes();if($e){const Tt=function pn(v){const A=(0,o.cg1)(v);return Kt(A),(A[o.wAp.ExtraData][2]||[]).map(H=>"string"==typeof H?Xt(H):[Xt(H[0]),Xt(H[1])])}(A),un=function Pt(v,A,D){const H=(0,o.cg1)(v);Kt(H);const $e=it([H[o.wAp.ExtraData][0],H[o.wAp.ExtraData][1]],A)||[];return it($e,D)||[]}(A,ae,H),Jt=Tt.findIndex(Yn=>{if(Array.isArray(Yn)){const[yn,Wn]=Yn,Eo=Xe>=yn.hours&<>=yn.minutes,pr=Xe0?Math.floor(ae/60):Math.ceil(ae/60);switch(v){case Yt.Short:return(ae>=0?"+":"")+on(Xe,2,$e)+on(Math.abs(ae%60),2,$e);case Yt.ShortGMT:return"GMT"+(ae>=0?"+":"")+on(Xe,1,$e);case Yt.Long:return"GMT"+(ae>=0?"+":"")+on(Xe,2,$e)+":"+on(Math.abs(ae%60),2,$e);case Yt.Extended:return 0===H?"Z":(ae>=0?"+":"")+on(Xe,2,$e)+":"+on(Math.abs(ae%60),2,$e);default:throw new Error(`Unknown zone width "${v}"`)}}}function se(v){return ut(v.getFullYear(),v.getMonth(),v.getDate()+(4-v.getDay()))}function ye(v,A=!1){return function(D,H){let ae;if(A){const $e=new Date(D.getFullYear(),D.getMonth(),1).getDay()-1,Xe=D.getDate();ae=1+Math.floor((Xe+$e)/7)}else{const $e=se(D),Xe=function xe(v){const A=ut(v,0,1).getDay();return ut(v,0,1+(A<=4?4:11)-A)}($e.getFullYear()),lt=$e.getTime()-Xe.getTime();ae=1+Math.round(lt/6048e5)}return on(ae,v,et(H,O.MinusSign))}}function He(v,A=!1){return function(D,H){return on(se(D).getFullYear(),v,et(H,O.MinusSign),A)}}const Ye={};function vt(v,A){v=v.replace(/:/g,"");const D=Date.parse("Jan 01, 1970 00:00:00 "+v)/6e4;return isNaN(D)?A:D}function mn(v){return v instanceof Date&&!isNaN(v.valueOf())}const ln=/^(\d+)?\.((\d+)(-(\d+))?)?$/;function xn(v){const A=parseInt(v);if(isNaN(A))throw new Error("Invalid integer literal when parsing "+v);return A}function gr(v,A){A=encodeURIComponent(A);for(const D of v.split(";")){const H=D.indexOf("="),[ae,$e]=-1==H?[D,""]:[D.slice(0,H),D.slice(H+1)];if(ae.trim()===A)return decodeURIComponent($e)}return null}let $t=(()=>{class v{constructor(D,H,ae,$e){this._iterableDiffers=D,this._keyValueDiffers=H,this._ngEl=ae,this._renderer=$e,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(D){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof D?D.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(D){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof D?D.split(/\s+/):D,this._rawClass&&((0,o.sIi)(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const D=this._iterableDiffer.diff(this._rawClass);D&&this._applyIterableChanges(D)}else if(this._keyValueDiffer){const D=this._keyValueDiffer.diff(this._rawClass);D&&this._applyKeyValueChanges(D)}}_applyKeyValueChanges(D){D.forEachAddedItem(H=>this._toggleClass(H.key,H.currentValue)),D.forEachChangedItem(H=>this._toggleClass(H.key,H.currentValue)),D.forEachRemovedItem(H=>{H.previousValue&&this._toggleClass(H.key,!1)})}_applyIterableChanges(D){D.forEachAddedItem(H=>{if("string"!=typeof H.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${(0,o.AaK)(H.item)}`);this._toggleClass(H.item,!0)}),D.forEachRemovedItem(H=>this._toggleClass(H.item,!1))}_applyClasses(D){D&&(Array.isArray(D)||D instanceof Set?D.forEach(H=>this._toggleClass(H,!0)):Object.keys(D).forEach(H=>this._toggleClass(H,!!D[H])))}_removeClasses(D){D&&(Array.isArray(D)||D instanceof Set?D.forEach(H=>this._toggleClass(H,!1)):Object.keys(D).forEach(H=>this._toggleClass(H,!1)))}_toggleClass(D,H){(D=D.trim())&&D.split(/\s+/g).forEach(ae=>{H?this._renderer.addClass(this._ngEl.nativeElement,ae):this._renderer.removeClass(this._ngEl.nativeElement,ae)})}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.ZZ4),o.Y36(o.aQg),o.Y36(o.SBq),o.Y36(o.Qsj))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0}),v})();class On{constructor(A,D,H,ae){this.$implicit=A,this.ngForOf=D,this.index=H,this.count=ae}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Cn=(()=>{class v{constructor(D,H,ae){this._viewContainer=D,this._template=H,this._differs=ae,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(D){this._ngForOf=D,this._ngForOfDirty=!0}set ngForTrackBy(D){this._trackByFn=D}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(D){D&&(this._template=D)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const D=this._ngForOf;!this._differ&&D&&(this._differ=this._differs.find(D).create(this.ngForTrackBy))}if(this._differ){const D=this._differ.diff(this._ngForOf);D&&this._applyChanges(D)}}_applyChanges(D){const H=this._viewContainer;D.forEachOperation((ae,$e,Xe)=>{if(null==ae.previousIndex)H.createEmbeddedView(this._template,new On(ae.item,this._ngForOf,-1,-1),null===Xe?void 0:Xe);else if(null==Xe)H.remove(null===$e?void 0:$e);else if(null!==$e){const lt=H.get($e);H.move(lt,Xe),rt(lt,ae)}});for(let ae=0,$e=H.length;ae<$e;ae++){const lt=H.get(ae).context;lt.index=ae,lt.count=$e,lt.ngForOf=this._ngForOf}D.forEachIdentityChange(ae=>{rt(H.get(ae.currentIndex),ae)})}static ngTemplateContextGuard(D,H){return!0}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b),o.Y36(o.Rgc),o.Y36(o.ZZ4))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0}),v})();function rt(v,A){v.context.$implicit=A.item}let q=(()=>{class v{constructor(D,H){this._viewContainer=D,this._context=new he,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=H}set ngIf(D){this._context.$implicit=this._context.ngIf=D,this._updateView()}set ngIfThen(D){we("ngIfThen",D),this._thenTemplateRef=D,this._thenViewRef=null,this._updateView()}set ngIfElse(D){we("ngIfElse",D),this._elseTemplateRef=D,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(D,H){return!0}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b),o.Y36(o.Rgc))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0}),v})();class he{constructor(){this.$implicit=null,this.ngIf=null}}function we(v,A){if(A&&!A.createEmbeddedView)throw new Error(`${v} must be a TemplateRef, but received '${(0,o.AaK)(A)}'.`)}let st=(()=>{class v{constructor(D,H,ae){this._ngEl=D,this._differs=H,this._renderer=ae,this._ngStyle=null,this._differ=null}set ngStyle(D){this._ngStyle=D,!this._differ&&D&&(this._differ=this._differs.find(D).create())}ngDoCheck(){if(this._differ){const D=this._differ.diff(this._ngStyle);D&&this._applyChanges(D)}}_setStyle(D,H){const[ae,$e]=D.split("."),Xe=-1===ae.indexOf("-")?void 0:o.JOm.DashCase;null!=H?this._renderer.setStyle(this._ngEl.nativeElement,ae,$e?`${H}${$e}`:H,Xe):this._renderer.removeStyle(this._ngEl.nativeElement,ae,Xe)}_applyChanges(D){D.forEachRemovedItem(H=>this._setStyle(H.key,null)),D.forEachAddedItem(H=>this._setStyle(H.key,H.currentValue)),D.forEachChangedItem(H=>this._setStyle(H.key,H.currentValue))}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.SBq),o.Y36(o.aQg),o.Y36(o.Qsj))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0}),v})(),Mt=(()=>{class v{constructor(D){this._viewContainerRef=D,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null,this.ngTemplateOutletInjector=null}ngOnChanges(D){if(D.ngTemplateOutlet||D.ngTemplateOutletInjector){const H=this._viewContainerRef;if(this._viewRef&&H.remove(H.indexOf(this._viewRef)),this.ngTemplateOutlet){const{ngTemplateOutlet:ae,ngTemplateOutletContext:$e,ngTemplateOutletInjector:Xe}=this;this._viewRef=H.createEmbeddedView(ae,$e,Xe?{injector:Xe}:void 0)}else this._viewRef=null}else this._viewRef&&D.ngTemplateOutletContext&&this.ngTemplateOutletContext&&(this._viewRef.context=this.ngTemplateOutletContext)}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},standalone:!0,features:[o.TTD]}),v})();function Bt(v,A){return new o.vHH(2100,!1)}class An{createSubscription(A,D){return A.subscribe({next:D,error:H=>{throw H}})}dispose(A){A.unsubscribe()}}class Rn{createSubscription(A,D){return A.then(D,H=>{throw H})}dispose(A){}}const Pn=new Rn,ur=new An;let mr=(()=>{class v{constructor(D){this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null,this._ref=D}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(D){return this._obj?D!==this._obj?(this._dispose(),this.transform(D)):this._latestValue:(D&&this._subscribe(D),this._latestValue)}_subscribe(D){this._obj=D,this._strategy=this._selectStrategy(D),this._subscription=this._strategy.createSubscription(D,H=>this._updateLatestValue(D,H))}_selectStrategy(D){if((0,o.QGY)(D))return Pn;if((0,o.F4k)(D))return ur;throw Bt()}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(D,H){D===this._obj&&(this._latestValue=H,this._ref.markForCheck())}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.sBO,16))},v.\u0275pipe=o.Yjl({name:"async",type:v,pure:!1,standalone:!0}),v})();const xr=new o.OlP("DATE_PIPE_DEFAULT_TIMEZONE"),Or=new o.OlP("DATE_PIPE_DEFAULT_OPTIONS");let ar=(()=>{class v{constructor(D,H,ae){this.locale=D,this.defaultTimezone=H,this.defaultOptions=ae}transform(D,H,ae,$e){if(null==D||""===D||D!=D)return null;try{return Et(D,H??this.defaultOptions?.dateFormat??"mediumDate",$e||this.locale,ae??this.defaultOptions?.timezone??this.defaultTimezone??void 0)}catch(Xe){throw Bt()}}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.soG,16),o.Y36(xr,24),o.Y36(Or,24))},v.\u0275pipe=o.Yjl({name:"date",type:v,pure:!0,standalone:!0}),v})(),Gn=(()=>{class v{constructor(D){this._locale=D}transform(D,H,ae){if(!function vr(v){return!(null==v||""===v||v!=v)}(D))return null;ae=ae||this._locale;try{return function dn(v,A,D){return function cn(v,A,D,H,ae,$e,Xe=!1){let lt="",qt=!1;if(isFinite(v)){let Tt=function $n(v){let H,ae,$e,Xe,lt,A=Math.abs(v)+"",D=0;for((ae=A.indexOf("."))>-1&&(A=A.replace(".","")),($e=A.search(/e/i))>0?(ae<0&&(ae=$e),ae+=+A.slice($e+1),A=A.substring(0,$e)):ae<0&&(ae=A.length),$e=0;"0"===A.charAt($e);$e++);if($e===(lt=A.length))H=[0],ae=1;else{for(lt--;"0"===A.charAt(lt);)lt--;for(ae-=$e,H=[],Xe=0;$e<=lt;$e++,Xe++)H[Xe]=Number(A.charAt($e))}return ae>22&&(H=H.splice(0,21),D=ae-1,ae=1),{digits:H,exponent:D,integerLen:ae}}(v);Xe&&(Tt=function sr(v){if(0===v.digits[0])return v;const A=v.digits.length-v.integerLen;return v.exponent?v.exponent+=2:(0===A?v.digits.push(0,0):1===A&&v.digits.push(0),v.integerLen+=2),v}(Tt));let un=A.minInt,Jt=A.minFrac,Yn=A.maxFrac;if($e){const Mr=$e.match(ln);if(null===Mr)throw new Error(`${$e} is not a valid digit info`);const Lo=Mr[1],di=Mr[3],Ai=Mr[5];null!=Lo&&(un=xn(Lo)),null!=di&&(Jt=xn(di)),null!=Ai?Yn=xn(Ai):null!=di&&Jt>Yn&&(Yn=Jt)}!function Tn(v,A,D){if(A>D)throw new Error(`The minimum number of digits after fraction (${A}) is higher than the maximum (${D}).`);let H=v.digits,ae=H.length-v.integerLen;const $e=Math.min(Math.max(A,ae),D);let Xe=$e+v.integerLen,lt=H[Xe];if(Xe>0){H.splice(Math.max(v.integerLen,Xe));for(let Jt=Xe;Jt=5)if(Xe-1<0){for(let Jt=0;Jt>Xe;Jt--)H.unshift(0),v.integerLen++;H.unshift(1),v.integerLen++}else H[Xe-1]++;for(;ae=Tt?Wn.pop():qt=!1),Yn>=10?1:0},0);un&&(H.unshift(un),v.integerLen++)}(Tt,Jt,Yn);let yn=Tt.digits,Wn=Tt.integerLen;const Eo=Tt.exponent;let pr=[];for(qt=yn.every(Mr=>!Mr);Wn0?pr=yn.splice(Wn,yn.length):(pr=yn,yn=[0]);const Vr=[];for(yn.length>=A.lgSize&&Vr.unshift(yn.splice(-A.lgSize,yn.length).join(""));yn.length>A.gSize;)Vr.unshift(yn.splice(-A.gSize,yn.length).join(""));yn.length&&Vr.unshift(yn.join("")),lt=Vr.join(et(D,H)),pr.length&&(lt+=et(D,ae)+pr.join("")),Eo&&(lt+=et(D,O.Exponential)+"+"+Eo)}else lt=et(D,O.Infinity);return lt=v<0&&!qt?A.negPre+lt+A.negSuf:A.posPre+lt+A.posSuf,lt}(v,function er(v,A="-"){const D={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},H=v.split(";"),ae=H[0],$e=H[1],Xe=-1!==ae.indexOf(".")?ae.split("."):[ae.substring(0,ae.lastIndexOf("0")+1),ae.substring(ae.lastIndexOf("0")+1)],lt=Xe[0],qt=Xe[1]||"";D.posPre=lt.substring(0,lt.indexOf("#"));for(let un=0;un{class v{transform(D,H,ae){if(null==D)return null;if(!this.supports(D))throw Bt();return D.slice(H,ae)}supports(D){return"string"==typeof D||Array.isArray(D)}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275pipe=o.Yjl({name:"slice",type:v,pure:!1,standalone:!0}),v})(),vo=(()=>{class v{}return v.\u0275fac=function(D){return new(D||v)},v.\u0275mod=o.oAB({type:v}),v.\u0275inj=o.cJS({}),v})();const yo="browser";let zr=(()=>{class v{}return v.\u0275prov=(0,o.Yz7)({token:v,providedIn:"root",factory:()=>new Do((0,o.LFG)(M),window)}),v})();class Do{constructor(A,D){this.document=A,this.window=D,this.offset=()=>[0,0]}setOffset(A){this.offset=Array.isArray(A)?()=>A:A}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(A){this.supportsScrolling()&&this.window.scrollTo(A[0],A[1])}scrollToAnchor(A){if(!this.supportsScrolling())return;const D=function Yr(v,A){const D=v.getElementById(A)||v.getElementsByName(A)[0];if(D)return D;if("function"==typeof v.createTreeWalker&&v.body&&(v.body.createShadowRoot||v.body.attachShadow)){const H=v.createTreeWalker(v.body,NodeFilter.SHOW_ELEMENT);let ae=H.currentNode;for(;ae;){const $e=ae.shadowRoot;if($e){const Xe=$e.getElementById(A)||$e.querySelector(`[name="${A}"]`);if(Xe)return Xe}ae=H.nextNode()}}return null}(this.document,A);D&&(this.scrollToElement(D),D.focus())}setHistoryScrollRestoration(A){if(this.supportScrollRestoration()){const D=this.window.history;D&&D.scrollRestoration&&(D.scrollRestoration=A)}}scrollToElement(A){const D=A.getBoundingClientRect(),H=D.left+this.window.pageXOffset,ae=D.top+this.window.pageYOffset,$e=this.offset();this.window.scrollTo(H-$e[0],ae-$e[1])}supportScrollRestoration(){try{if(!this.supportsScrolling())return!1;const A=Gr(this.window.history)||Gr(Object.getPrototypeOf(this.window.history));return!(!A||!A.writable&&!A.set)}catch{return!1}}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}function Gr(v){return Object.getOwnPropertyDescriptor(v,"scrollRestoration")}class hr{}},529:(Qe,Fe,w)=>{"use strict";w.d(Fe,{JF:()=>jn,TP:()=>de,WM:()=>Y,eN:()=>ce});var o=w(6895),x=w(8274),N=w(9646),ge=w(9751),R=w(4351),W=w(9300),M=w(4004);class U{}class _{}class Y{constructor(se){this.normalizedNames=new Map,this.lazyUpdate=null,se?this.lazyInit="string"==typeof se?()=>{this.headers=new Map,se.split("\n").forEach(ye=>{const He=ye.indexOf(":");if(He>0){const Ye=ye.slice(0,He),pt=Ye.toLowerCase(),vt=ye.slice(He+1).trim();this.maybeSetNormalizedName(Ye,pt),this.headers.has(pt)?this.headers.get(pt).push(vt):this.headers.set(pt,[vt])}})}:()=>{this.headers=new Map,Object.keys(se).forEach(ye=>{let He=se[ye];const Ye=ye.toLowerCase();"string"==typeof He&&(He=[He]),He.length>0&&(this.headers.set(Ye,He),this.maybeSetNormalizedName(ye,Ye))})}:this.headers=new Map}has(se){return this.init(),this.headers.has(se.toLowerCase())}get(se){this.init();const ye=this.headers.get(se.toLowerCase());return ye&&ye.length>0?ye[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(se){return this.init(),this.headers.get(se.toLowerCase())||null}append(se,ye){return this.clone({name:se,value:ye,op:"a"})}set(se,ye){return this.clone({name:se,value:ye,op:"s"})}delete(se,ye){return this.clone({name:se,value:ye,op:"d"})}maybeSetNormalizedName(se,ye){this.normalizedNames.has(ye)||this.normalizedNames.set(ye,se)}init(){this.lazyInit&&(this.lazyInit instanceof Y?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(se=>this.applyUpdate(se)),this.lazyUpdate=null))}copyFrom(se){se.init(),Array.from(se.headers.keys()).forEach(ye=>{this.headers.set(ye,se.headers.get(ye)),this.normalizedNames.set(ye,se.normalizedNames.get(ye))})}clone(se){const ye=new Y;return ye.lazyInit=this.lazyInit&&this.lazyInit instanceof Y?this.lazyInit:this,ye.lazyUpdate=(this.lazyUpdate||[]).concat([se]),ye}applyUpdate(se){const ye=se.name.toLowerCase();switch(se.op){case"a":case"s":let He=se.value;if("string"==typeof He&&(He=[He]),0===He.length)return;this.maybeSetNormalizedName(se.name,ye);const Ye=("a"===se.op?this.headers.get(ye):void 0)||[];Ye.push(...He),this.headers.set(ye,Ye);break;case"d":const pt=se.value;if(pt){let vt=this.headers.get(ye);if(!vt)return;vt=vt.filter(Ht=>-1===pt.indexOf(Ht)),0===vt.length?(this.headers.delete(ye),this.normalizedNames.delete(ye)):this.headers.set(ye,vt)}else this.headers.delete(ye),this.normalizedNames.delete(ye)}}forEach(se){this.init(),Array.from(this.normalizedNames.keys()).forEach(ye=>se(this.normalizedNames.get(ye),this.headers.get(ye)))}}class Z{encodeKey(se){return j(se)}encodeValue(se){return j(se)}decodeKey(se){return decodeURIComponent(se)}decodeValue(se){return decodeURIComponent(se)}}const B=/%(\d[a-f0-9])/gi,E={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function j(xe){return encodeURIComponent(xe).replace(B,(se,ye)=>E[ye]??se)}function P(xe){return`${xe}`}class K{constructor(se={}){if(this.updates=null,this.cloneFrom=null,this.encoder=se.encoder||new Z,se.fromString){if(se.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function S(xe,se){const ye=new Map;return xe.length>0&&xe.replace(/^\?/,"").split("&").forEach(Ye=>{const pt=Ye.indexOf("="),[vt,Ht]=-1==pt?[se.decodeKey(Ye),""]:[se.decodeKey(Ye.slice(0,pt)),se.decodeValue(Ye.slice(pt+1))],_t=ye.get(vt)||[];_t.push(Ht),ye.set(vt,_t)}),ye}(se.fromString,this.encoder)}else se.fromObject?(this.map=new Map,Object.keys(se.fromObject).forEach(ye=>{const He=se.fromObject[ye],Ye=Array.isArray(He)?He.map(P):[P(He)];this.map.set(ye,Ye)})):this.map=null}has(se){return this.init(),this.map.has(se)}get(se){this.init();const ye=this.map.get(se);return ye?ye[0]:null}getAll(se){return this.init(),this.map.get(se)||null}keys(){return this.init(),Array.from(this.map.keys())}append(se,ye){return this.clone({param:se,value:ye,op:"a"})}appendAll(se){const ye=[];return Object.keys(se).forEach(He=>{const Ye=se[He];Array.isArray(Ye)?Ye.forEach(pt=>{ye.push({param:He,value:pt,op:"a"})}):ye.push({param:He,value:Ye,op:"a"})}),this.clone(ye)}set(se,ye){return this.clone({param:se,value:ye,op:"s"})}delete(se,ye){return this.clone({param:se,value:ye,op:"d"})}toString(){return this.init(),this.keys().map(se=>{const ye=this.encoder.encodeKey(se);return this.map.get(se).map(He=>ye+"="+this.encoder.encodeValue(He)).join("&")}).filter(se=>""!==se).join("&")}clone(se){const ye=new K({encoder:this.encoder});return ye.cloneFrom=this.cloneFrom||this,ye.updates=(this.updates||[]).concat(se),ye}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(se=>this.map.set(se,this.cloneFrom.map.get(se))),this.updates.forEach(se=>{switch(se.op){case"a":case"s":const ye=("a"===se.op?this.map.get(se.param):void 0)||[];ye.push(P(se.value)),this.map.set(se.param,ye);break;case"d":if(void 0===se.value){this.map.delete(se.param);break}{let He=this.map.get(se.param)||[];const Ye=He.indexOf(P(se.value));-1!==Ye&&He.splice(Ye,1),He.length>0?this.map.set(se.param,He):this.map.delete(se.param)}}}),this.cloneFrom=this.updates=null)}}class ke{constructor(){this.map=new Map}set(se,ye){return this.map.set(se,ye),this}get(se){return this.map.has(se)||this.map.set(se,se.defaultValue()),this.map.get(se)}delete(se){return this.map.delete(se),this}has(se){return this.map.has(se)}keys(){return this.map.keys()}}function ie(xe){return typeof ArrayBuffer<"u"&&xe instanceof ArrayBuffer}function Be(xe){return typeof Blob<"u"&&xe instanceof Blob}function re(xe){return typeof FormData<"u"&&xe instanceof FormData}class be{constructor(se,ye,He,Ye){let pt;if(this.url=ye,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=se.toUpperCase(),function Te(xe){switch(xe){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||Ye?(this.body=void 0!==He?He:null,pt=Ye):pt=He,pt&&(this.reportProgress=!!pt.reportProgress,this.withCredentials=!!pt.withCredentials,pt.responseType&&(this.responseType=pt.responseType),pt.headers&&(this.headers=pt.headers),pt.context&&(this.context=pt.context),pt.params&&(this.params=pt.params)),this.headers||(this.headers=new Y),this.context||(this.context=new ke),this.params){const vt=this.params.toString();if(0===vt.length)this.urlWithParams=ye;else{const Ht=ye.indexOf("?");this.urlWithParams=ye+(-1===Ht?"?":Htmn.set(ln,se.setHeaders[ln]),_t)),se.setParams&&(tn=Object.keys(se.setParams).reduce((mn,ln)=>mn.set(ln,se.setParams[ln]),tn)),new be(ye,He,pt,{params:tn,headers:_t,context:Ln,reportProgress:Ht,responseType:Ye,withCredentials:vt})}}var Ne=(()=>((Ne=Ne||{})[Ne.Sent=0]="Sent",Ne[Ne.UploadProgress=1]="UploadProgress",Ne[Ne.ResponseHeader=2]="ResponseHeader",Ne[Ne.DownloadProgress=3]="DownloadProgress",Ne[Ne.Response=4]="Response",Ne[Ne.User=5]="User",Ne))();class Q{constructor(se,ye=200,He="OK"){this.headers=se.headers||new Y,this.status=void 0!==se.status?se.status:ye,this.statusText=se.statusText||He,this.url=se.url||null,this.ok=this.status>=200&&this.status<300}}class T extends Q{constructor(se={}){super(se),this.type=Ne.ResponseHeader}clone(se={}){return new T({headers:se.headers||this.headers,status:void 0!==se.status?se.status:this.status,statusText:se.statusText||this.statusText,url:se.url||this.url||void 0})}}class k extends Q{constructor(se={}){super(se),this.type=Ne.Response,this.body=void 0!==se.body?se.body:null}clone(se={}){return new k({body:void 0!==se.body?se.body:this.body,headers:se.headers||this.headers,status:void 0!==se.status?se.status:this.status,statusText:se.statusText||this.statusText,url:se.url||this.url||void 0})}}class O extends Q{constructor(se){super(se,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${se.url||"(unknown url)"}`:`Http failure response for ${se.url||"(unknown url)"}: ${se.status} ${se.statusText}`,this.error=se.error||null}}function te(xe,se){return{body:se,headers:xe.headers,context:xe.context,observe:xe.observe,params:xe.params,reportProgress:xe.reportProgress,responseType:xe.responseType,withCredentials:xe.withCredentials}}let ce=(()=>{class xe{constructor(ye){this.handler=ye}request(ye,He,Ye={}){let pt;if(ye instanceof be)pt=ye;else{let _t,tn;_t=Ye.headers instanceof Y?Ye.headers:new Y(Ye.headers),Ye.params&&(tn=Ye.params instanceof K?Ye.params:new K({fromObject:Ye.params})),pt=new be(ye,He,void 0!==Ye.body?Ye.body:null,{headers:_t,context:Ye.context,params:tn,reportProgress:Ye.reportProgress,responseType:Ye.responseType||"json",withCredentials:Ye.withCredentials})}const vt=(0,N.of)(pt).pipe((0,R.b)(_t=>this.handler.handle(_t)));if(ye instanceof be||"events"===Ye.observe)return vt;const Ht=vt.pipe((0,W.h)(_t=>_t instanceof k));switch(Ye.observe||"body"){case"body":switch(pt.responseType){case"arraybuffer":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&!(_t.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return _t.body}));case"blob":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&!(_t.body instanceof Blob))throw new Error("Response is not a Blob.");return _t.body}));case"text":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&"string"!=typeof _t.body)throw new Error("Response is not a string.");return _t.body}));default:return Ht.pipe((0,M.U)(_t=>_t.body))}case"response":return Ht;default:throw new Error(`Unreachable: unhandled observe type ${Ye.observe}}`)}}delete(ye,He={}){return this.request("DELETE",ye,He)}get(ye,He={}){return this.request("GET",ye,He)}head(ye,He={}){return this.request("HEAD",ye,He)}jsonp(ye,He){return this.request("JSONP",ye,{params:(new K).append(He,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(ye,He={}){return this.request("OPTIONS",ye,He)}patch(ye,He,Ye={}){return this.request("PATCH",ye,te(Ye,He))}post(ye,He,Ye={}){return this.request("POST",ye,te(Ye,He))}put(ye,He,Ye={}){return this.request("PUT",ye,te(Ye,He))}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(U))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();function Ae(xe,se){return se(xe)}function De(xe,se){return(ye,He)=>se.intercept(ye,{handle:Ye=>xe(Ye,He)})}const de=new x.OlP("HTTP_INTERCEPTORS"),ne=new x.OlP("HTTP_INTERCEPTOR_FNS");function Ee(){let xe=null;return(se,ye)=>(null===xe&&(xe=((0,x.f3M)(de,{optional:!0})??[]).reduceRight(De,Ae)),xe(se,ye))}let Ce=(()=>{class xe extends U{constructor(ye,He){super(),this.backend=ye,this.injector=He,this.chain=null}handle(ye){if(null===this.chain){const He=Array.from(new Set(this.injector.get(ne)));this.chain=He.reduceRight((Ye,pt)=>function ue(xe,se,ye){return(He,Ye)=>ye.runInContext(()=>se(He,pt=>xe(pt,Ye)))}(Ye,pt,this.injector),Ae)}return this.chain(ye,He=>this.backend.handle(He))}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(_),x.LFG(x.lqb))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();const Pt=/^\)\]\}',?\n/;let it=(()=>{class xe{constructor(ye){this.xhrFactory=ye}handle(ye){if("JSONP"===ye.method)throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");return new ge.y(He=>{const Ye=this.xhrFactory.build();if(Ye.open(ye.method,ye.urlWithParams),ye.withCredentials&&(Ye.withCredentials=!0),ye.headers.forEach((Ft,_e)=>Ye.setRequestHeader(Ft,_e.join(","))),ye.headers.has("Accept")||Ye.setRequestHeader("Accept","application/json, text/plain, */*"),!ye.headers.has("Content-Type")){const Ft=ye.detectContentTypeHeader();null!==Ft&&Ye.setRequestHeader("Content-Type",Ft)}if(ye.responseType){const Ft=ye.responseType.toLowerCase();Ye.responseType="json"!==Ft?Ft:"text"}const pt=ye.serializeBody();let vt=null;const Ht=()=>{if(null!==vt)return vt;const Ft=Ye.statusText||"OK",_e=new Y(Ye.getAllResponseHeaders()),fe=function Ut(xe){return"responseURL"in xe&&xe.responseURL?xe.responseURL:/^X-Request-URL:/m.test(xe.getAllResponseHeaders())?xe.getResponseHeader("X-Request-URL"):null}(Ye)||ye.url;return vt=new T({headers:_e,status:Ye.status,statusText:Ft,url:fe}),vt},_t=()=>{let{headers:Ft,status:_e,statusText:fe,url:ee}=Ht(),Se=null;204!==_e&&(Se=typeof Ye.response>"u"?Ye.responseText:Ye.response),0===_e&&(_e=Se?200:0);let Le=_e>=200&&_e<300;if("json"===ye.responseType&&"string"==typeof Se){const yt=Se;Se=Se.replace(Pt,"");try{Se=""!==Se?JSON.parse(Se):null}catch(It){Se=yt,Le&&(Le=!1,Se={error:It,text:Se})}}Le?(He.next(new k({body:Se,headers:Ft,status:_e,statusText:fe,url:ee||void 0})),He.complete()):He.error(new O({error:Se,headers:Ft,status:_e,statusText:fe,url:ee||void 0}))},tn=Ft=>{const{url:_e}=Ht(),fe=new O({error:Ft,status:Ye.status||0,statusText:Ye.statusText||"Unknown Error",url:_e||void 0});He.error(fe)};let Ln=!1;const mn=Ft=>{Ln||(He.next(Ht()),Ln=!0);let _e={type:Ne.DownloadProgress,loaded:Ft.loaded};Ft.lengthComputable&&(_e.total=Ft.total),"text"===ye.responseType&&!!Ye.responseText&&(_e.partialText=Ye.responseText),He.next(_e)},ln=Ft=>{let _e={type:Ne.UploadProgress,loaded:Ft.loaded};Ft.lengthComputable&&(_e.total=Ft.total),He.next(_e)};return Ye.addEventListener("load",_t),Ye.addEventListener("error",tn),Ye.addEventListener("timeout",tn),Ye.addEventListener("abort",tn),ye.reportProgress&&(Ye.addEventListener("progress",mn),null!==pt&&Ye.upload&&Ye.upload.addEventListener("progress",ln)),Ye.send(pt),He.next({type:Ne.Sent}),()=>{Ye.removeEventListener("error",tn),Ye.removeEventListener("abort",tn),Ye.removeEventListener("load",_t),Ye.removeEventListener("timeout",tn),ye.reportProgress&&(Ye.removeEventListener("progress",mn),null!==pt&&Ye.upload&&Ye.upload.removeEventListener("progress",ln)),Ye.readyState!==Ye.DONE&&Ye.abort()}})}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(o.JF))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();const Xt=new x.OlP("XSRF_ENABLED"),kt="XSRF-TOKEN",Vt=new x.OlP("XSRF_COOKIE_NAME",{providedIn:"root",factory:()=>kt}),rn="X-XSRF-TOKEN",Vn=new x.OlP("XSRF_HEADER_NAME",{providedIn:"root",factory:()=>rn});class en{}let gt=(()=>{class xe{constructor(ye,He,Ye){this.doc=ye,this.platform=He,this.cookieName=Ye,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const ye=this.doc.cookie||"";return ye!==this.lastCookieString&&(this.parseCount++,this.lastToken=(0,o.Mx)(ye,this.cookieName),this.lastCookieString=ye),this.lastToken}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(o.K0),x.LFG(x.Lbi),x.LFG(Vt))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();function Yt(xe,se){const ye=xe.url.toLowerCase();if(!(0,x.f3M)(Xt)||"GET"===xe.method||"HEAD"===xe.method||ye.startsWith("http://")||ye.startsWith("https://"))return se(xe);const He=(0,x.f3M)(en).getToken(),Ye=(0,x.f3M)(Vn);return null!=He&&!xe.headers.has(Ye)&&(xe=xe.clone({headers:xe.headers.set(Ye,He)})),se(xe)}var nt=(()=>((nt=nt||{})[nt.Interceptors=0]="Interceptors",nt[nt.LegacyInterceptors=1]="LegacyInterceptors",nt[nt.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",nt[nt.NoXsrfProtection=3]="NoXsrfProtection",nt[nt.JsonpSupport=4]="JsonpSupport",nt[nt.RequestsMadeViaParent=5]="RequestsMadeViaParent",nt))();function Et(xe,se){return{\u0275kind:xe,\u0275providers:se}}function ut(...xe){const se=[ce,it,Ce,{provide:U,useExisting:Ce},{provide:_,useExisting:it},{provide:ne,useValue:Yt,multi:!0},{provide:Xt,useValue:!0},{provide:en,useClass:gt}];for(const ye of xe)se.push(...ye.\u0275providers);return(0,x.MR2)(se)}const qe=new x.OlP("LEGACY_INTERCEPTOR_FN");function gn({cookieName:xe,headerName:se}){const ye=[];return void 0!==xe&&ye.push({provide:Vt,useValue:xe}),void 0!==se&&ye.push({provide:Vn,useValue:se}),Et(nt.CustomXsrfConfiguration,ye)}let jn=(()=>{class xe{}return xe.\u0275fac=function(ye){return new(ye||xe)},xe.\u0275mod=x.oAB({type:xe}),xe.\u0275inj=x.cJS({providers:[ut(Et(nt.LegacyInterceptors,[{provide:qe,useFactory:Ee},{provide:ne,useExisting:qe,multi:!0}]),gn({cookieName:kt,headerName:rn}))]}),xe})()},8274:(Qe,Fe,w)=>{"use strict";w.d(Fe,{tb:()=>qg,AFp:()=>Wg,ip1:()=>Yg,CZH:()=>ll,hGG:()=>T_,z2F:()=>ul,sBO:()=>h_,Sil:()=>KC,_Vd:()=>Zs,EJc:()=>YC,Xts:()=>Jl,SBq:()=>Js,lqb:()=>Ni,qLn:()=>Qs,vpe:()=>zo,XFs:()=>gt,OlP:()=>_n,zs3:()=>Li,ZZ4:()=>Fu,aQg:()=>ku,soG:()=>cl,YKP:()=>Wp,h0i:()=>Es,PXZ:()=>a_,R0b:()=>uo,FiY:()=>Hs,Lbi:()=>UC,g9A:()=>Xg,Qsj:()=>sy,FYo:()=>ff,JOm:()=>Bo,tp0:()=>js,Rgc:()=>ha,dDg:()=>r_,eoX:()=>rm,GfV:()=>hf,s_b:()=>il,ifc:()=>ee,MMx:()=>cu,Lck:()=>Ub,eFA:()=>sm,G48:()=>f_,Gpc:()=>j,f3M:()=>pt,MR2:()=>Gv,_c5:()=>A_,c2e:()=>zC,zSh:()=>nc,wAp:()=>Ot,vHH:()=>ie,lri:()=>tm,rWj:()=>nm,D6c:()=>x_,cg1:()=>tu,kL8:()=>yp,dqk:()=>Ct,Z0I:()=>Pt,sIi:()=>ra,CqO:()=>wh,QGY:()=>Wc,QP$:()=>Un,F4k:()=>_h,RDi:()=>wv,AaK:()=>S,qOj:()=>Lc,TTD:()=>kr,_Bn:()=>Yp,jDz:()=>Xp,xp6:()=>Cf,uIk:()=>Vc,Tol:()=>Wh,ekj:()=>qc,Suo:()=>_g,Xpm:()=>sr,lG2:()=>cr,Yz7:()=>wt,cJS:()=>Kt,oAB:()=>vn,Yjl:()=>gr,Y36:()=>us,_UZ:()=>Uc,GkF:()=>Yc,qZA:()=>qa,TgZ:()=>Xa,EpF:()=>Ch,n5z:()=>$s,LFG:()=>He,$8M:()=>Vs,$Z:()=>Ff,NdJ:()=>Kc,CRH:()=>wg,oxw:()=>Ah,ALo:()=>dg,lcZ:()=>fg,xi3:()=>hg,Dn7:()=>pg,Hsn:()=>xh,F$t:()=>Th,Q6J:()=>Hc,MGl:()=>Za,VKq:()=>ng,WLB:()=>rg,kEZ:()=>og,HTZ:()=>ig,iGM:()=>bg,MAs:()=>bh,KtG:()=>Dr,evT:()=>pf,CHM:()=>yr,oJD:()=>Xd,P3R:()=>Jd,kYT:()=>tr,Udp:()=>Xc,YNc:()=>Dh,W1O:()=>Mg,_uU:()=>ep,Oqu:()=>Jc,hij:()=>Qa,AsE:()=>Qc,lnq:()=>eu,Gf:()=>Cg});var o=w(7579),x=w(727),N=w(9751),ge=w(8189),R=w(8421),W=w(515),M=w(3269),U=w(2076),Y=w(3099);function G(e){for(let t in e)if(e[t]===G)return t;throw Error("Could not find renamed property on target object.")}function Z(e,t){for(const n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function S(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(S).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function B(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const E=G({__forward_ref__:G});function j(e){return e.__forward_ref__=j,e.toString=function(){return S(this())},e}function P(e){return K(e)?e():e}function K(e){return"function"==typeof e&&e.hasOwnProperty(E)&&e.__forward_ref__===j}function pe(e){return e&&!!e.\u0275providers}const Te="https://g.co/ng/security#xss";class ie extends Error{constructor(t,n){super(function Be(e,t){return`NG0${Math.abs(e)}${t?": "+t.trim():""}`}(t,n)),this.code=t}}function re(e){return"string"==typeof e?e:null==e?"":String(e)}function T(e,t){throw new ie(-201,!1)}function et(e,t){null==e&&function Ue(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function wt(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Kt(e){return{providers:e.providers||[],imports:e.imports||[]}}function pn(e){return Ut(e,Vt)||Ut(e,Vn)}function Pt(e){return null!==pn(e)}function Ut(e,t){return e.hasOwnProperty(t)?e[t]:null}function kt(e){return e&&(e.hasOwnProperty(rn)||e.hasOwnProperty(en))?e[rn]:null}const Vt=G({\u0275prov:G}),rn=G({\u0275inj:G}),Vn=G({ngInjectableDef:G}),en=G({ngInjectorDef:G});var gt=(()=>((gt=gt||{})[gt.Default=0]="Default",gt[gt.Host=1]="Host",gt[gt.Self=2]="Self",gt[gt.SkipSelf=4]="SkipSelf",gt[gt.Optional=8]="Optional",gt))();let Yt;function nt(e){const t=Yt;return Yt=e,t}function Et(e,t,n){const r=pn(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n>.Optional?null:void 0!==t?t:void T(S(e))}const Ct=(()=>typeof globalThis<"u"&&globalThis||typeof global<"u"&&global||typeof window<"u"&&window||typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self)(),Nt={},Hn="__NG_DI_FLAG__",zt="ngTempTokenPath",jn=/\n/gm,En="__source";let xe;function se(e){const t=xe;return xe=e,t}function ye(e,t=gt.Default){if(void 0===xe)throw new ie(-203,!1);return null===xe?Et(e,void 0,t):xe.get(e,t>.Optional?null:void 0,t)}function He(e,t=gt.Default){return(function ht(){return Yt}()||ye)(P(e),t)}function pt(e,t=gt.Default){return He(e,vt(t))}function vt(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Ht(e){const t=[];for(let n=0;n((Ft=Ft||{})[Ft.OnPush=0]="OnPush",Ft[Ft.Default=1]="Default",Ft))(),ee=(()=>{return(e=ee||(ee={}))[e.Emulated=0]="Emulated",e[e.None=2]="None",e[e.ShadowDom=3]="ShadowDom",ee;var e})();const Se={},Le=[],yt=G({\u0275cmp:G}),It=G({\u0275dir:G}),cn=G({\u0275pipe:G}),Dn=G({\u0275mod:G}),sn=G({\u0275fac:G}),dn=G({__NG_ELEMENT_ID__:G});let er=0;function sr(e){return ln(()=>{const n=!0===e.standalone,r={},i={type:e.type,providersResolver:null,decls:e.decls,vars:e.vars,factory:null,template:e.template||null,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:r,inputs:null,outputs:null,exportAs:e.exportAs||null,onPush:e.changeDetection===Ft.OnPush,directiveDefs:null,pipeDefs:null,standalone:n,dependencies:n&&e.dependencies||null,getStandaloneInjector:null,selectors:e.selectors||Le,viewQuery:e.viewQuery||null,features:e.features||null,data:e.data||{},encapsulation:e.encapsulation||ee.Emulated,id:"c"+er++,styles:e.styles||Le,_:null,setInput:null,schemas:e.schemas||null,tView:null,findHostDirectiveDefs:null,hostDirectives:null},l=e.dependencies,u=e.features;return i.inputs=Ir(e.inputs,r),i.outputs=Ir(e.outputs),u&&u.forEach(p=>p(i)),i.directiveDefs=l?()=>("function"==typeof l?l():l).map(Tn).filter(xn):null,i.pipeDefs=l?()=>("function"==typeof l?l():l).map(Qt).filter(xn):null,i})}function Tn(e){return $t(e)||fn(e)}function xn(e){return null!==e}function vn(e){return ln(()=>({type:e.type,bootstrap:e.bootstrap||Le,declarations:e.declarations||Le,imports:e.imports||Le,exports:e.exports||Le,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function tr(e,t){return ln(()=>{const n=On(e,!0);n.declarations=t.declarations||Le,n.imports=t.imports||Le,n.exports=t.exports||Le})}function Ir(e,t){if(null==e)return Se;const n={};for(const r in e)if(e.hasOwnProperty(r)){let i=e[r],l=i;Array.isArray(i)&&(l=i[1],i=i[0]),n[i]=r,t&&(t[i]=l)}return n}const cr=sr;function gr(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,standalone:!0===e.standalone,onDestroy:e.type.prototype.ngOnDestroy||null}}function $t(e){return e[yt]||null}function fn(e){return e[It]||null}function Qt(e){return e[cn]||null}function Un(e){const t=$t(e)||fn(e)||Qt(e);return null!==t&&t.standalone}function On(e,t){const n=e[Dn]||null;if(!n&&!0===t)throw new Error(`Type ${S(e)} does not have '\u0275mod' property.`);return n}function Fn(e){return Array.isArray(e)&&"object"==typeof e[1]}function zn(e){return Array.isArray(e)&&!0===e[1]}function qn(e){return 0!=(4&e.flags)}function dr(e){return e.componentOffset>-1}function Sr(e){return 1==(1&e.flags)}function Gn(e){return null!==e.template}function go(e){return 0!=(256&e[2])}function nr(e,t){return e.hasOwnProperty(sn)?e[sn]:null}class li{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function kr(){return bo}function bo(e){return e.type.prototype.ngOnChanges&&(e.setInput=Wr),Wo}function Wo(){const e=Qr(this),t=e?.current;if(t){const n=e.previous;if(n===Se)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function Wr(e,t,n,r){const i=this.declaredInputs[n],l=Qr(e)||function eo(e,t){return e[Co]=t}(e,{previous:Se,current:null}),u=l.current||(l.current={}),p=l.previous,y=p[i];u[i]=new li(y&&y.currentValue,t,p===Se),e[r]=t}kr.ngInherit=!0;const Co="__ngSimpleChanges__";function Qr(e){return e[Co]||null}function Sn(e){for(;Array.isArray(e);)e=e[0];return e}function ko(e,t){return Sn(t[e])}function Jn(e,t){return Sn(t[e.index])}function Kr(e,t){return e.data[t]}function no(e,t){return e[t]}function rr(e,t){const n=t[e];return Fn(n)?n:n[0]}function hn(e){return 64==(64&e[2])}function C(e,t){return null==t?null:e[t]}function s(e){e[18]=0}function c(e,t){e[5]+=t;let n=e,r=e[3];for(;null!==r&&(1===t&&1===n[5]||-1===t&&0===n[5]);)r[5]+=t,n=r,r=r[3]}const a={lFrame:A(null),bindingsEnabled:!0};function Dt(){return a.bindingsEnabled}function Ve(){return a.lFrame.lView}function At(){return a.lFrame.tView}function yr(e){return a.lFrame.contextLView=e,e[8]}function Dr(e){return a.lFrame.contextLView=null,e}function Mn(){let e=$r();for(;null!==e&&64===e.type;)e=e.parent;return e}function $r(){return a.lFrame.currentTNode}function br(e,t){const n=a.lFrame;n.currentTNode=e,n.isParent=t}function zi(){return a.lFrame.isParent}function ci(){a.lFrame.isParent=!1}function lr(){const e=a.lFrame;let t=e.bindingRootIndex;return-1===t&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function oo(){return a.lFrame.bindingIndex}function io(){return a.lFrame.bindingIndex++}function Br(e){const t=a.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function ui(e,t){const n=a.lFrame;n.bindingIndex=n.bindingRootIndex=e,No(t)}function No(e){a.lFrame.currentDirectiveIndex=e}function Os(){return a.lFrame.currentQueryIndex}function Wi(e){a.lFrame.currentQueryIndex=e}function ma(e){const t=e[1];return 2===t.type?t.declTNode:1===t.type?e[6]:null}function Rs(e,t,n){if(n>.SkipSelf){let i=t,l=e;for(;!(i=i.parent,null!==i||n>.Host||(i=ma(l),null===i||(l=l[15],10&i.type))););if(null===i)return!1;t=i,e=l}const r=a.lFrame=v();return r.currentTNode=t,r.lView=e,!0}function Ki(e){const t=v(),n=e[1];a.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function v(){const e=a.lFrame,t=null===e?null:e.child;return null===t?A(e):t}function A(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function D(){const e=a.lFrame;return a.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const H=D;function ae(){const e=D();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function lt(){return a.lFrame.selectedIndex}function qt(e){a.lFrame.selectedIndex=e}function Tt(){const e=a.lFrame;return Kr(e.tView,e.selectedIndex)}function pr(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[y]<0&&(e[18]+=65536),(p>11>16&&(3&e[2])===t){e[2]+=2048;try{l.call(p)}finally{}}}else try{l.call(p)}finally{}}class fi{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function pi(e,t,n){let r=0;for(;rt){u=l-1;break}}}for(;l>16}(e),r=t;for(;n>0;)r=r[15],n--;return r}let qi=!0;function Zi(e){const t=qi;return qi=e,t}let yl=0;const Xr={};function Ji(e,t){const n=ks(e,t);if(-1!==n)return n;const r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,mi(r.data,e),mi(t,null),mi(r.blueprint,null));const i=Qi(e,t),l=e.injectorIndex;if(ba(i)){const u=Zo(i),p=gi(i,t),y=p[1].data;for(let I=0;I<8;I++)t[l+I]=p[u+I]|y[u+I]}return t[l+8]=i,l}function mi(e,t){e.push(0,0,0,0,0,0,0,0,t)}function ks(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function Qi(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,i=t;for(;null!==i;){if(r=Ia(i),null===r)return-1;if(n++,i=i[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return-1}function es(e,t,n){!function or(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(dn)&&(r=n[dn]),null==r&&(r=n[dn]=yl++);const i=255&r;t.data[e+(i>>5)]|=1<=0?255&t:Ku:t}(n);if("function"==typeof l){if(!Rs(t,e,r))return r>.Host?bl(i,0,r):wa(t,n,r,i);try{const u=l(r);if(null!=u||r>.Optional)return u;T()}finally{H()}}else if("number"==typeof l){let u=null,p=ks(e,t),y=-1,I=r>.Host?t[16][6]:null;for((-1===p||r>.SkipSelf)&&(y=-1===p?Qi(e,t):t[p+8],-1!==y&&Ea(r,!1)?(u=t[1],p=Zo(y),t=gi(y,t)):p=-1);-1!==p;){const V=t[1];if(ns(l,p,V.data)){const J=vi(p,t,n,u,r,I);if(J!==Xr)return J}y=t[p+8],-1!==y&&Ea(r,t[1].data[p+8]===I)&&ns(l,p,t)?(u=V,p=Zo(y),t=gi(y,t)):p=-1}}return i}function vi(e,t,n,r,i,l){const u=t[1],p=u.data[e+8],V=Ls(p,u,n,null==r?dr(p)&&qi:r!=u&&0!=(3&p.type),i>.Host&&l===p);return null!==V?Jo(t,u,V,p):Xr}function Ls(e,t,n,r,i){const l=e.providerIndexes,u=t.data,p=1048575&l,y=e.directiveStart,V=l>>20,me=i?p+V:e.directiveEnd;for(let Oe=r?p:p+V;Oe=y&&Ge.type===n)return Oe}if(i){const Oe=u[y];if(Oe&&Gn(Oe)&&Oe.type===n)return y}return null}function Jo(e,t,n,r){let i=e[n];const l=t.data;if(function gl(e){return e instanceof fi}(i)){const u=i;u.resolving&&function be(e,t){const n=t?`. Dependency path: ${t.join(" > ")} > ${e}`:"";throw new ie(-200,`Circular dependency in DI detected for ${e}${n}`)}(function oe(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():re(e)}(l[n]));const p=Zi(u.canSeeViewProviders);u.resolving=!0;const y=u.injectImpl?nt(u.injectImpl):null;Rs(e,r,gt.Default);try{i=e[n]=u.factory(void 0,l,e,r),t.firstCreatePass&&n>=r.directiveStart&&function Eo(e,t,n){const{ngOnChanges:r,ngOnInit:i,ngDoCheck:l}=t.type.prototype;if(r){const u=bo(t);(n.preOrderHooks||(n.preOrderHooks=[])).push(e,u),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,u)}i&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-e,i),l&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,l),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,l))}(n,l[n],t)}finally{null!==y&&nt(y),Zi(p),u.resolving=!1,H()}}return i}function ns(e,t,n){return!!(n[t+(e>>5)]&1<{const t=e.prototype.constructor,n=t[sn]||rs(t),r=Object.prototype;let i=Object.getPrototypeOf(e.prototype).constructor;for(;i&&i!==r;){const l=i[sn]||rs(i);if(l&&l!==n)return l;i=Object.getPrototypeOf(i)}return l=>new l})}function rs(e){return K(e)?()=>{const t=rs(P(e));return t&&t()}:nr(e)}function Ia(e){const t=e[1],n=t.type;return 2===n?t.declTNode:1===n?e[6]:null}function Vs(e){return function Dl(e,t){if("class"===t)return e.classes;if("style"===t)return e.styles;const n=e.attrs;if(n){const r=n.length;let i=0;for(;i{const r=function ei(e){return function(...n){if(e){const r=e(...n);for(const i in r)this[i]=r[i]}}}(t);function i(...l){if(this instanceof i)return r.apply(this,l),this;const u=new i(...l);return p.annotation=u,p;function p(y,I,V){const J=y.hasOwnProperty(Qo)?y[Qo]:Object.defineProperty(y,Qo,{value:[]})[Qo];for(;J.length<=V;)J.push(null);return(J[V]=J[V]||[]).push(u),y}}return n&&(i.prototype=Object.create(n.prototype)),i.prototype.ngMetadataName=e,i.annotationCls=i,i})}class _n{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=wt({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}function z(e,t){void 0===t&&(t=e);for(let n=0;nArray.isArray(n)?ve(n,t):t(n))}function We(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function ft(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function bt(e,t){const n=[];for(let r=0;r=0?e[1|r]=n:(r=~r,function lo(e,t,n,r){let i=e.length;if(i==t)e.push(n,r);else if(1===i)e.push(r,e[0]),e[0]=n;else{for(i--,e.push(e[i-1],e[i]);i>t;)e[i]=e[i-2],i--;e[t]=n,e[t+1]=r}}(e,r,t,n)),r}function Ri(e,t){const n=_i(e,t);if(n>=0)return e[1|n]}function _i(e,t){return function td(e,t,n){let r=0,i=e.length>>n;for(;i!==r;){const l=r+(i-r>>1),u=e[l<t?i=l:r=l+1}return~(i<((Bo=Bo||{})[Bo.Important=1]="Important",Bo[Bo.DashCase=2]="DashCase",Bo))();const xl=new Map;let Gm=0;const Rl="__ngContext__";function _r(e,t){Fn(t)?(e[Rl]=t[20],function Wm(e){xl.set(e[20],e)}(t)):e[Rl]=t}function Fl(e,t){return undefined(e,t)}function Ys(e){const t=e[3];return zn(t)?t[3]:t}function kl(e){return _d(e[13])}function Nl(e){return _d(e[4])}function _d(e){for(;null!==e&&!zn(e);)e=e[4];return e}function is(e,t,n,r,i){if(null!=r){let l,u=!1;zn(r)?l=r:Fn(r)&&(u=!0,r=r[0]);const p=Sn(r);0===e&&null!==n?null==i?Ad(t,n,p):Pi(t,n,p,i||null,!0):1===e&&null!==n?Pi(t,n,p,i||null,!0):2===e?function Ul(e,t,n){const r=Ta(e,t);r&&function pv(e,t,n,r){e.removeChild(t,n,r)}(e,r,t,n)}(t,p,u):3===e&&t.destroyNode(p),null!=l&&function vv(e,t,n,r,i){const l=n[7];l!==Sn(n)&&is(t,e,r,l,i);for(let p=10;p0&&(e[n-1][4]=r[4]);const l=ft(e,10+t);!function sv(e,t){Ws(e,t,t[11],2,null,null),t[0]=null,t[6]=null}(r[1],r);const u=l[19];null!==u&&u.detachView(l[1]),r[3]=null,r[4]=null,r[2]&=-65}return r}function Id(e,t){if(!(128&t[2])){const n=t[11];n.destroyNode&&Ws(e,t,n,3,null,null),function cv(e){let t=e[13];if(!t)return Vl(e[1],e);for(;t;){let n=null;if(Fn(t))n=t[13];else{const r=t[10];r&&(n=r)}if(!n){for(;t&&!t[4]&&t!==e;)Fn(t)&&Vl(t[1],t),t=t[3];null===t&&(t=e),Fn(t)&&Vl(t[1],t),n=t&&t[4]}t=n}}(t)}}function Vl(e,t){if(!(128&t[2])){t[2]&=-65,t[2]|=128,function hv(e,t){let n;if(null!=e&&null!=(n=e.destroyHooks))for(let r=0;r=0?r[i=u]():r[i=-u].unsubscribe(),l+=2}else{const u=r[i=n[l+1]];n[l].call(u)}if(null!==r){for(let l=i+1;l-1){const{encapsulation:l}=e.data[r.directiveStart+i];if(l===ee.None||l===ee.Emulated)return null}return Jn(r,n)}}(e,t.parent,n)}function Pi(e,t,n,r,i){e.insertBefore(t,n,r,i)}function Ad(e,t,n){e.appendChild(t,n)}function Td(e,t,n,r,i){null!==r?Pi(e,t,n,r,i):Ad(e,t,n)}function Ta(e,t){return e.parentNode(t)}function xd(e,t,n){return Rd(e,t,n)}let Ra,Yl,Pa,Rd=function Od(e,t,n){return 40&e.type?Jn(e,n):null};function xa(e,t,n,r){const i=Sd(e,r,t),l=t[11],p=xd(r.parent||t[6],r,t);if(null!=i)if(Array.isArray(n))for(let y=0;ye,createScript:e=>e,createScriptURL:e=>e})}catch{}return Ra}()?.createHTML(e)||e}function wv(e){Yl=e}function Wl(){if(void 0===Pa&&(Pa=null,Ct.trustedTypes))try{Pa=Ct.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return Pa}function Bd(e){return Wl()?.createHTML(e)||e}function Hd(e){return Wl()?.createScriptURL(e)||e}class jd{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Te})`}}function wi(e){return e instanceof jd?e.changingThisBreaksApplicationSecurity:e}function Ks(e,t){const n=function Tv(e){return e instanceof jd&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${Te})`)}return n===t}class xv{constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{const n=(new window.DOMParser).parseFromString(Fi(t),"text/html").body;return null===n?this.inertDocumentHelper.getInertBodyElement(t):(n.removeChild(n.firstChild),n)}catch{return null}}}class Ov{constructor(t){if(this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),null==this.inertDocument.body){const n=this.inertDocument.createElement("html");this.inertDocument.appendChild(n);const r=this.inertDocument.createElement("body");n.appendChild(r)}}getInertBodyElement(t){const n=this.inertDocument.createElement("template");if("content"in n)return n.innerHTML=Fi(t),n;const r=this.inertDocument.createElement("body");return r.innerHTML=Fi(t),this.defaultDoc.documentMode&&this.stripCustomNsAttrs(r),r}stripCustomNsAttrs(t){const n=t.attributes;for(let i=n.length-1;0"),!0}endElement(t){const n=t.nodeName.toLowerCase();Xl.hasOwnProperty(n)&&!zd.hasOwnProperty(n)&&(this.buf.push(""))}chars(t){this.buf.push(Kd(t))}checkClobberedElement(t,n){if(n&&(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${t.outerHTML}`);return n}}const Nv=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Lv=/([^\#-~ |!])/g;function Kd(e){return e.replace(/&/g,"&").replace(Nv,function(t){return"&#"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+";"}).replace(Lv,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}let Fa;function Zl(e){return"content"in e&&function Bv(e){return e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.nodeName}(e)?e.content:null}var Qn=(()=>((Qn=Qn||{})[Qn.NONE=0]="NONE",Qn[Qn.HTML=1]="HTML",Qn[Qn.STYLE=2]="STYLE",Qn[Qn.SCRIPT=3]="SCRIPT",Qn[Qn.URL=4]="URL",Qn[Qn.RESOURCE_URL=5]="RESOURCE_URL",Qn))();function Xd(e){const t=qs();return t?Bd(t.sanitize(Qn.HTML,e)||""):Ks(e,"HTML")?Bd(wi(e)):function $v(e,t){let n=null;try{Fa=Fa||function Ud(e){const t=new Ov(e);return function Rv(){try{return!!(new window.DOMParser).parseFromString(Fi(""),"text/html")}catch{return!1}}()?new xv(t):t}(e);let r=t?String(t):"";n=Fa.getInertBodyElement(r);let i=5,l=r;do{if(0===i)throw new Error("Failed to sanitize html because the input is unstable");i--,r=l,l=n.innerHTML,n=Fa.getInertBodyElement(r)}while(r!==l);return Fi((new kv).sanitizeChildren(Zl(n)||n))}finally{if(n){const r=Zl(n)||n;for(;r.firstChild;)r.removeChild(r.firstChild)}}}(function $d(){return void 0!==Yl?Yl:typeof document<"u"?document:void 0}(),re(e))}function qd(e){const t=qs();return t?t.sanitize(Qn.URL,e)||"":Ks(e,"URL")?wi(e):Kl(re(e))}function Zd(e){const t=qs();if(t)return Hd(t.sanitize(Qn.RESOURCE_URL,e)||"");if(Ks(e,"ResourceURL"))return Hd(wi(e));throw new ie(904,!1)}function Jd(e,t,n){return function zv(e,t){return"src"===t&&("embed"===e||"frame"===e||"iframe"===e||"media"===e||"script"===e)||"href"===t&&("base"===e||"link"===e)?Zd:qd}(t,n)(e)}function qs(){const e=Ve();return e&&e[12]}const Jl=new _n("ENVIRONMENT_INITIALIZER"),Qd=new _n("INJECTOR",-1),ef=new _n("INJECTOR_DEF_TYPES");class tf{get(t,n=Nt){if(n===Nt){const r=new Error(`NullInjectorError: No provider for ${S(t)}!`);throw r.name="NullInjectorError",r}return n}}function Gv(e){return{\u0275providers:e}}function Yv(...e){return{\u0275providers:nf(0,e),\u0275fromNgModule:!0}}function nf(e,...t){const n=[],r=new Set;let i;return ve(t,l=>{const u=l;Ql(u,n,[],r)&&(i||(i=[]),i.push(u))}),void 0!==i&&rf(i,n),n}function rf(e,t){for(let n=0;n{t.push(l)})}}function Ql(e,t,n,r){if(!(e=P(e)))return!1;let i=null,l=kt(e);const u=!l&&$t(e);if(l||u){if(u&&!u.standalone)return!1;i=e}else{const y=e.ngModule;if(l=kt(y),!l)return!1;i=y}const p=r.has(i);if(u){if(p)return!1;if(r.add(i),u.dependencies){const y="function"==typeof u.dependencies?u.dependencies():u.dependencies;for(const I of y)Ql(I,t,n,r)}}else{if(!l)return!1;{if(null!=l.imports&&!p){let I;r.add(i);try{ve(l.imports,V=>{Ql(V,t,n,r)&&(I||(I=[]),I.push(V))})}finally{}void 0!==I&&rf(I,t)}if(!p){const I=nr(i)||(()=>new i);t.push({provide:i,useFactory:I,deps:Le},{provide:ef,useValue:i,multi:!0},{provide:Jl,useValue:()=>He(i),multi:!0})}const y=l.providers;null==y||p||ec(y,V=>{t.push(V)})}}return i!==e&&void 0!==e.providers}function ec(e,t){for(let n of e)pe(n)&&(n=n.\u0275providers),Array.isArray(n)?ec(n,t):t(n)}const Wv=G({provide:String,useValue:G});function tc(e){return null!==e&&"object"==typeof e&&Wv in e}function ki(e){return"function"==typeof e}const nc=new _n("Set Injector scope."),ka={},Xv={};let rc;function Na(){return void 0===rc&&(rc=new tf),rc}class Ni{}class lf extends Ni{constructor(t,n,r,i){super(),this.parent=n,this.source=r,this.scopes=i,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,ic(t,u=>this.processProvider(u)),this.records.set(Qd,ss(void 0,this)),i.has("environment")&&this.records.set(Ni,ss(void 0,this));const l=this.records.get(nc);null!=l&&"string"==typeof l.value&&this.scopes.add(l.value),this.injectorDefTypes=new Set(this.get(ef.multi,Le,gt.Self))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const t of this._ngOnDestroyHooks)t.ngOnDestroy();for(const t of this._onDestroyHooks)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),this._onDestroyHooks.length=0}}onDestroy(t){this._onDestroyHooks.push(t)}runInContext(t){this.assertNotDestroyed();const n=se(this),r=nt(void 0);try{return t()}finally{se(n),nt(r)}}get(t,n=Nt,r=gt.Default){this.assertNotDestroyed(),r=vt(r);const i=se(this),l=nt(void 0);try{if(!(r>.SkipSelf)){let p=this.records.get(t);if(void 0===p){const y=function ey(e){return"function"==typeof e||"object"==typeof e&&e instanceof _n}(t)&&pn(t);p=y&&this.injectableDefInScope(y)?ss(oc(t),ka):null,this.records.set(t,p)}if(null!=p)return this.hydrate(t,p)}return(r>.Self?Na():this.parent).get(t,n=r>.Optional&&n===Nt?null:n)}catch(u){if("NullInjectorError"===u.name){if((u[zt]=u[zt]||[]).unshift(S(t)),i)throw u;return function Ln(e,t,n,r){const i=e[zt];throw t[En]&&i.unshift(t[En]),e.message=function mn(e,t,n,r=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let i=S(t);if(Array.isArray(t))i=t.map(S).join(" -> ");else if("object"==typeof t){let l=[];for(let u in t)if(t.hasOwnProperty(u)){let p=t[u];l.push(u+":"+("string"==typeof p?JSON.stringify(p):S(p)))}i=`{${l.join(", ")}}`}return`${n}${r?"("+r+")":""}[${i}]: ${e.replace(jn,"\n ")}`}("\n"+e.message,i,n,r),e.ngTokenPath=i,e[zt]=null,e}(u,t,"R3InjectorError",this.source)}throw u}finally{nt(l),se(i)}}resolveInjectorInitializers(){const t=se(this),n=nt(void 0);try{const r=this.get(Jl.multi,Le,gt.Self);for(const i of r)i()}finally{se(t),nt(n)}}toString(){const t=[],n=this.records;for(const r of n.keys())t.push(S(r));return`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new ie(205,!1)}processProvider(t){let n=ki(t=P(t))?t:P(t&&t.provide);const r=function Zv(e){return tc(e)?ss(void 0,e.useValue):ss(cf(e),ka)}(t);if(ki(t)||!0!==t.multi)this.records.get(n);else{let i=this.records.get(n);i||(i=ss(void 0,ka,!0),i.factory=()=>Ht(i.multi),this.records.set(n,i)),n=t,i.multi.push(t)}this.records.set(n,r)}hydrate(t,n){return n.value===ka&&(n.value=Xv,n.value=n.factory()),"object"==typeof n.value&&n.value&&function Qv(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=P(t.providedIn);return"string"==typeof n?"any"===n||this.scopes.has(n):this.injectorDefTypes.has(n)}}function oc(e){const t=pn(e),n=null!==t?t.factory:nr(e);if(null!==n)return n;if(e instanceof _n)throw new ie(204,!1);if(e instanceof Function)return function qv(e){const t=e.length;if(t>0)throw bt(t,"?"),new ie(204,!1);const n=function it(e){const t=e&&(e[Vt]||e[Vn]);if(t){const n=function Xt(e){if(e.hasOwnProperty("name"))return e.name;const t=(""+e).match(/^function\s*([^\s(]+)/);return null===t?"":t[1]}(e);return console.warn(`DEPRECATED: DI is instantiating a token "${n}" that inherits its @Injectable decorator but does not provide one itself.\nThis will become an error in a future version of Angular. Please add @Injectable() to the "${n}" class.`),t}return null}(e);return null!==n?()=>n.factory(e):()=>new e}(e);throw new ie(204,!1)}function cf(e,t,n){let r;if(ki(e)){const i=P(e);return nr(i)||oc(i)}if(tc(e))r=()=>P(e.useValue);else if(function af(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...Ht(e.deps||[]));else if(function sf(e){return!(!e||!e.useExisting)}(e))r=()=>He(P(e.useExisting));else{const i=P(e&&(e.useClass||e.provide));if(!function Jv(e){return!!e.deps}(e))return nr(i)||oc(i);r=()=>new i(...Ht(e.deps))}return r}function ss(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function ic(e,t){for(const n of e)Array.isArray(n)?ic(n,t):n&&pe(n)?ic(n.\u0275providers,t):t(n)}class ty{}class uf{}class ry{resolveComponentFactory(t){throw function ny(e){const t=Error(`No component factory found for ${S(e)}. Did you add it to @NgModule.entryComponents?`);return t.ngComponent=e,t}(t)}}let Zs=(()=>{class e{}return e.NULL=new ry,e})();function oy(){return as(Mn(),Ve())}function as(e,t){return new Js(Jn(e,t))}let Js=(()=>{class e{constructor(n){this.nativeElement=n}}return e.__NG_ELEMENT_ID__=oy,e})();function iy(e){return e instanceof Js?e.nativeElement:e}class ff{}let sy=(()=>{class e{}return e.__NG_ELEMENT_ID__=()=>function ay(){const e=Ve(),n=rr(Mn().index,e);return(Fn(n)?n:e)[11]}(),e})(),ly=(()=>{class e{}return e.\u0275prov=wt({token:e,providedIn:"root",factory:()=>null}),e})();class hf{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const cy=new hf("15.0.1"),sc={};function lc(e){return e.ngOriginalError}class Qs{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t);this._console.error("ERROR",t),n&&this._console.error("ORIGINAL ERROR",n)}_findOriginalError(t){let n=t&&lc(t);for(;n&&lc(n);)n=lc(n);return n||null}}function pf(e){return e.ownerDocument}function ni(e){return e instanceof Function?e():e}function mf(e,t,n){let r=e.length;for(;;){const i=e.indexOf(t,n);if(-1===i)return i;if(0===i||e.charCodeAt(i-1)<=32){const l=t.length;if(i+l===r||e.charCodeAt(i+l)<=32)return i}n=i+1}}const vf="ng-template";function Dy(e,t,n){let r=0;for(;rl?"":i[J+1].toLowerCase();const Oe=8&r?me:null;if(Oe&&-1!==mf(Oe,I,0)||2&r&&I!==me){if(Io(r))return!1;u=!0}}}}else{if(!u&&!Io(r)&&!Io(y))return!1;if(u&&Io(y))continue;u=!1,r=y|1&r}}return Io(r)||u}function Io(e){return 0==(1&e)}function _y(e,t,n,r){if(null===t)return-1;let i=0;if(r||!n){let l=!1;for(;i-1)for(n++;n0?'="'+p+'"':"")+"]"}else 8&r?i+="."+u:4&r&&(i+=" "+u);else""!==i&&!Io(u)&&(t+=bf(l,i),i=""),r=u,l=l||!Io(r);n++}return""!==i&&(t+=bf(l,i)),t}const Gt={};function Cf(e){_f(At(),Ve(),lt()+e,!1)}function _f(e,t,n,r){if(!r)if(3==(3&t[2])){const l=e.preOrderCheckHooks;null!==l&&Vr(t,l,n)}else{const l=e.preOrderHooks;null!==l&&Mr(t,l,0,n)}qt(n)}function Sf(e,t=null,n=null,r){const i=Mf(e,t,n,r);return i.resolveInjectorInitializers(),i}function Mf(e,t=null,n=null,r,i=new Set){const l=[n||Le,Yv(e)];return r=r||("object"==typeof e?void 0:S(e)),new lf(l,t||Na(),r||null,i)}let Li=(()=>{class e{static create(n,r){if(Array.isArray(n))return Sf({name:""},r,n,"");{const i=n.name??"";return Sf({name:i},n.parent,n.providers,i)}}}return e.THROW_IF_NOT_FOUND=Nt,e.NULL=new tf,e.\u0275prov=wt({token:e,providedIn:"any",factory:()=>He(Qd)}),e.__NG_ELEMENT_ID__=-1,e})();function us(e,t=gt.Default){const n=Ve();return null===n?He(e,t):ts(Mn(),n,P(e),t)}function Ff(){throw new Error("invalid")}function $a(e,t){return e<<17|t<<2}function So(e){return e>>17&32767}function hc(e){return 2|e}function ri(e){return(131068&e)>>2}function pc(e,t){return-131069&e|t<<2}function gc(e){return 1|e}function Gf(e,t){const n=e.contentQueries;if(null!==n)for(let r=0;r22&&_f(e,t,22,!1),n(r,i)}finally{qt(l)}}function Ic(e,t,n){if(qn(t)){const i=t.directiveEnd;for(let l=t.directiveStart;l0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(u)!=p&&u.push(p),u.push(n,r,l)}}(e,t,r,ea(e,n,i.hostVars,Gt),i)}function w0(e,t,n){const r=Jn(t,e),i=Wf(n),l=e[10],u=Ua(e,Ha(e,i,null,n.onPush?32:16,r,t,l,l.createRenderer(r,n),null,null,null));e[t.index]=u}function Vo(e,t,n,r,i,l){const u=Jn(e,t);!function Oc(e,t,n,r,i,l,u){if(null==l)e.removeAttribute(t,i,n);else{const p=null==u?re(l):u(l,r||"",i);e.setAttribute(t,i,p,n)}}(t[11],u,l,e.value,n,r,i)}function E0(e,t,n,r,i,l){const u=l[t];if(null!==u){const p=r.setInput;for(let y=0;y0&&Rc(n)}}function Rc(e){for(let r=kl(e);null!==r;r=Nl(r))for(let i=10;i0&&Rc(l)}const n=e[1].components;if(null!==n)for(let r=0;r0&&Rc(i)}}function T0(e,t){const n=rr(t,e),r=n[1];(function x0(e,t){for(let n=t.length;n-1&&(Bl(t,r),ft(n,r))}this._attachedToViewContainer=!1}Id(this._lView[1],this._lView)}onDestroy(t){Kf(this._lView[1],this._lView,null,t)}markForCheck(){Pc(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-65}reattach(){this._lView[2]|=64}detectChanges(){za(this._lView[1],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new ie(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function lv(e,t){Ws(e,t,t[11],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new ie(902,!1);this._appRef=t}}class O0 extends ta{constructor(t){super(t),this._view=t}detectChanges(){const t=this._view;za(t[1],t,t[8],!1)}checkNoChanges(){}get context(){return null}}class Nc extends Zs{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const n=$t(t);return new na(n,this.ngModule)}}function ih(e){const t=[];for(let n in e)e.hasOwnProperty(n)&&t.push({propName:e[n],templateName:n});return t}class P0{constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){r=vt(r);const i=this.injector.get(t,sc,r);return i!==sc||n===sc?i:this.parentInjector.get(t,n,r)}}class na extends uf{constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function Ay(e){return e.map(My).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}get inputs(){return ih(this.componentDef.inputs)}get outputs(){return ih(this.componentDef.outputs)}create(t,n,r,i){let l=(i=i||this.ngModule)instanceof Ni?i:i?.injector;l&&null!==this.componentDef.getStandaloneInjector&&(l=this.componentDef.getStandaloneInjector(l)||l);const u=l?new P0(t,l):t,p=u.get(ff,null);if(null===p)throw new ie(407,!1);const y=u.get(ly,null),I=p.createRenderer(null,this.componentDef),V=this.componentDef.selectors[0][0]||"div",J=r?function c0(e,t,n){return e.selectRootElement(t,n===ee.ShadowDom)}(I,r,this.componentDef.encapsulation):$l(I,V,function R0(e){const t=e.toLowerCase();return"svg"===t?"svg":"math"===t?"math":null}(V)),me=this.componentDef.onPush?288:272,Oe=Ac(0,null,null,1,0,null,null,null,null,null),Ge=Ha(null,Oe,null,me,null,null,p,I,y,u,null);let tt,ct;Ki(Ge);try{const mt=this.componentDef;let xt,Ze=null;mt.findHostDirectiveDefs?(xt=[],Ze=new Map,mt.findHostDirectiveDefs(mt,xt,Ze),xt.push(mt)):xt=[mt];const Lt=function N0(e,t){const n=e[1];return e[22]=t,ds(n,22,2,"#host",null)}(Ge,J),In=function L0(e,t,n,r,i,l,u,p){const y=i[1];!function $0(e,t,n,r){for(const i of e)t.mergedAttrs=ao(t.mergedAttrs,i.hostAttrs);null!==t.mergedAttrs&&(Ga(t,t.mergedAttrs,!0),null!==n&&Ld(r,n,t))}(r,e,t,u);const I=l.createRenderer(t,n),V=Ha(i,Wf(n),null,n.onPush?32:16,i[e.index],e,l,I,p||null,null,null);return y.firstCreatePass&&xc(y,e,r.length-1),Ua(i,V),i[e.index]=V}(Lt,J,mt,xt,Ge,p,I);ct=Kr(Oe,22),J&&function V0(e,t,n,r){if(r)pi(e,n,["ng-version",cy.full]);else{const{attrs:i,classes:l}=function Ty(e){const t=[],n=[];let r=1,i=2;for(;r0&&Nd(e,n,l.join(" "))}}(I,mt,J,r),void 0!==n&&function H0(e,t,n){const r=e.projection=[];for(let i=0;i=0;r--){const i=e[r];i.hostVars=t+=i.hostVars,i.hostAttrs=ao(i.hostAttrs,n=ao(n,i.hostAttrs))}}(r)}function $c(e){return e===Se?{}:e===Le?[]:e}function z0(e,t){const n=e.viewQuery;e.viewQuery=n?(r,i)=>{t(r,i),n(r,i)}:t}function G0(e,t){const n=e.contentQueries;e.contentQueries=n?(r,i,l)=>{t(r,i,l),n(r,i,l)}:t}function Y0(e,t){const n=e.hostBindings;e.hostBindings=n?(r,i)=>{t(r,i),n(r,i)}:t}let Wa=null;function $i(){if(!Wa){const e=Ct.Symbol;if(e&&e.iterator)Wa=e.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let n=0;nu(Sn(Lt[r.index])):r.index;let Ze=null;if(!u&&p&&(Ze=function sD(e,t,n,r){const i=e.cleanup;if(null!=i)for(let l=0;ly?p[y]:null}"string"==typeof u&&(l+=2)}return null}(e,t,i,r.index)),null!==Ze)(Ze.__ngLastListenerFn__||Ze).__ngNextListenerFn__=l,Ze.__ngLastListenerFn__=l,me=!1;else{l=Mh(r,t,V,l,!1);const Lt=n.listen(ct,i,l);J.push(l,Lt),I&&I.push(i,xt,mt,mt+1)}}else l=Mh(r,t,V,l,!1);const Oe=r.outputs;let Ge;if(me&&null!==Oe&&(Ge=Oe[i])){const tt=Ge.length;if(tt)for(let ct=0;ct-1?rr(e.index,t):t);let y=Sh(t,0,r,u),I=l.__ngNextListenerFn__;for(;I;)y=Sh(t,0,I,u)&&y,I=I.__ngNextListenerFn__;return i&&!1===y&&(u.preventDefault(),u.returnValue=!1),y}}function Ah(e=1){return function $e(e){return(a.lFrame.contextLView=function Xe(e,t){for(;e>0;)t=t[15],e--;return t}(e,a.lFrame.contextLView))[8]}(e)}function aD(e,t){let n=null;const r=function wy(e){const t=e.attrs;if(null!=t){const n=t.indexOf(5);if(0==(1&n))return t[n+1]}return null}(e);for(let i=0;i=0}const ir={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Hh(e){return e.substring(ir.key,ir.keyEnd)}function jh(e,t){const n=ir.textEnd;return n===t?-1:(t=ir.keyEnd=function pD(e,t,n){for(;t32;)t++;return t}(e,ir.key=t,n),Cs(e,t,n))}function Cs(e,t,n){for(;t=0;n=jh(t,n))Cr(e,Hh(t),!0)}function Mo(e,t,n,r){const i=Ve(),l=At(),u=Br(2);l.firstUpdatePass&&Xh(l,e,u,r),t!==Gt&&wr(i,u,t)&&Zh(l,l.data[lt()],i,i[11],e,i[u+1]=function ED(e,t){return null==e||("string"==typeof t?e+=t:"object"==typeof e&&(e=S(wi(e)))),e}(t,n),r,u)}function Kh(e,t){return t>=e.expandoStartIndex}function Xh(e,t,n,r){const i=e.data;if(null===i[n+1]){const l=i[lt()],u=Kh(e,n);Qh(l,r)&&null===t&&!u&&(t=!1),t=function yD(e,t,n,r){const i=function Mi(e){const t=a.lFrame.currentDirectiveIndex;return-1===t?null:e[t]}(e);let l=r?t.residualClasses:t.residualStyles;if(null===i)0===(r?t.classBindings:t.styleBindings)&&(n=ia(n=Zc(null,e,t,n,r),t.attrs,r),l=null);else{const u=t.directiveStylingLast;if(-1===u||e[u]!==i)if(n=Zc(i,e,t,n,r),null===l){let y=function DD(e,t,n){const r=n?t.classBindings:t.styleBindings;if(0!==ri(r))return e[So(r)]}(e,t,r);void 0!==y&&Array.isArray(y)&&(y=Zc(null,e,t,y[1],r),y=ia(y,t.attrs,r),function bD(e,t,n,r){e[So(n?t.classBindings:t.styleBindings)]=r}(e,t,r,y))}else l=function CD(e,t,n){let r;const i=t.directiveEnd;for(let l=1+t.directiveStylingLast;l0)&&(I=!0)}else V=n;if(i)if(0!==y){const me=So(e[p+1]);e[r+1]=$a(me,p),0!==me&&(e[me+1]=pc(e[me+1],r)),e[p+1]=function Ky(e,t){return 131071&e|t<<17}(e[p+1],r)}else e[r+1]=$a(p,0),0!==p&&(e[p+1]=pc(e[p+1],r)),p=r;else e[r+1]=$a(y,0),0===p?p=r:e[y+1]=pc(e[y+1],r),y=r;I&&(e[r+1]=hc(e[r+1])),Vh(e,V,r,!0),Vh(e,V,r,!1),function cD(e,t,n,r,i){const l=i?e.residualClasses:e.residualStyles;null!=l&&"string"==typeof t&&_i(l,t)>=0&&(n[r+1]=gc(n[r+1]))}(t,V,e,r,l),u=$a(p,y),l?t.classBindings=u:t.styleBindings=u}(i,l,t,n,u,r)}}function Zc(e,t,n,r,i){let l=null;const u=n.directiveEnd;let p=n.directiveStylingLast;for(-1===p?p=n.directiveStart:p++;p0;){const y=e[i],I=Array.isArray(y),V=I?y[1]:y,J=null===V;let me=n[i+1];me===Gt&&(me=J?Le:void 0);let Oe=J?Ri(me,r):V===r?me:void 0;if(I&&!Ja(Oe)&&(Oe=Ri(y,r)),Ja(Oe)&&(p=Oe,u))return p;const Ge=e[i+1];i=u?So(Ge):ri(Ge)}if(null!==t){let y=l?t.residualClasses:t.residualStyles;null!=y&&(p=Ri(y,r))}return p}function Ja(e){return void 0!==e}function Qh(e,t){return 0!=(e.flags&(t?8:16))}function ep(e,t=""){const n=Ve(),r=At(),i=e+22,l=r.firstCreatePass?ds(r,i,1,t,null):r.data[i],u=n[i]=function Ll(e,t){return e.createText(t)}(n[11],t);xa(r,n,u,l),br(l,!1)}function Jc(e){return Qa("",e,""),Jc}function Qa(e,t,n){const r=Ve(),i=hs(r,e,t,n);return i!==Gt&&oi(r,lt(),i),Qa}function Qc(e,t,n,r,i){const l=Ve(),u=function ps(e,t,n,r,i,l){const p=Bi(e,oo(),n,i);return Br(2),p?t+re(n)+r+re(i)+l:Gt}(l,e,t,n,r,i);return u!==Gt&&oi(l,lt(),u),Qc}function eu(e,t,n,r,i,l,u){const p=Ve(),y=function gs(e,t,n,r,i,l,u,p){const I=Ka(e,oo(),n,i,u);return Br(3),I?t+re(n)+r+re(i)+l+re(u)+p:Gt}(p,e,t,n,r,i,l,u);return y!==Gt&&oi(p,lt(),y),eu}const Vi=void 0;var zD=["en",[["a","p"],["AM","PM"],Vi],[["AM","PM"],Vi,Vi],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],Vi,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],Vi,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",Vi,"{1} 'at' {0}",Vi],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",function UD(e){const n=Math.floor(Math.abs(e)),r=e.toString().replace(/^[^.]*\.?/,"").length;return 1===n&&0===r?1:5}];let _s={};function tu(e){const t=function GD(e){return e.toLowerCase().replace(/_/g,"-")}(e);let n=Dp(t);if(n)return n;const r=t.split("-")[0];if(n=Dp(r),n)return n;if("en"===r)return zD;throw new ie(701,!1)}function yp(e){return tu(e)[Ot.PluralCase]}function Dp(e){return e in _s||(_s[e]=Ct.ng&&Ct.ng.common&&Ct.ng.common.locales&&Ct.ng.common.locales[e]),_s[e]}var Ot=(()=>((Ot=Ot||{})[Ot.LocaleId=0]="LocaleId",Ot[Ot.DayPeriodsFormat=1]="DayPeriodsFormat",Ot[Ot.DayPeriodsStandalone=2]="DayPeriodsStandalone",Ot[Ot.DaysFormat=3]="DaysFormat",Ot[Ot.DaysStandalone=4]="DaysStandalone",Ot[Ot.MonthsFormat=5]="MonthsFormat",Ot[Ot.MonthsStandalone=6]="MonthsStandalone",Ot[Ot.Eras=7]="Eras",Ot[Ot.FirstDayOfWeek=8]="FirstDayOfWeek",Ot[Ot.WeekendRange=9]="WeekendRange",Ot[Ot.DateFormat=10]="DateFormat",Ot[Ot.TimeFormat=11]="TimeFormat",Ot[Ot.DateTimeFormat=12]="DateTimeFormat",Ot[Ot.NumberSymbols=13]="NumberSymbols",Ot[Ot.NumberFormats=14]="NumberFormats",Ot[Ot.CurrencyCode=15]="CurrencyCode",Ot[Ot.CurrencySymbol=16]="CurrencySymbol",Ot[Ot.CurrencyName=17]="CurrencyName",Ot[Ot.Currencies=18]="Currencies",Ot[Ot.Directionality=19]="Directionality",Ot[Ot.PluralCase=20]="PluralCase",Ot[Ot.ExtraData=21]="ExtraData",Ot))();const ws="en-US";let bp=ws;function ou(e,t,n,r,i){if(e=P(e),Array.isArray(e))for(let l=0;l>20;if(ki(e)||!e.multi){const Oe=new fi(y,i,us),Ge=su(p,t,i?V:V+me,J);-1===Ge?(es(Ji(I,u),l,p),iu(l,e,t.length),t.push(p),I.directiveStart++,I.directiveEnd++,i&&(I.providerIndexes+=1048576),n.push(Oe),u.push(Oe)):(n[Ge]=Oe,u[Ge]=Oe)}else{const Oe=su(p,t,V+me,J),Ge=su(p,t,V,V+me),tt=Oe>=0&&n[Oe],ct=Ge>=0&&n[Ge];if(i&&!ct||!i&&!tt){es(Ji(I,u),l,p);const mt=function jb(e,t,n,r,i){const l=new fi(e,n,us);return l.multi=[],l.index=t,l.componentProviders=0,Gp(l,i,r&&!n),l}(i?Hb:Vb,n.length,i,r,y);!i&&ct&&(n[Ge].providerFactory=mt),iu(l,e,t.length,0),t.push(p),I.directiveStart++,I.directiveEnd++,i&&(I.providerIndexes+=1048576),n.push(mt),u.push(mt)}else iu(l,e,Oe>-1?Oe:Ge,Gp(n[i?Ge:Oe],y,!i&&r));!i&&r&&ct&&n[Ge].componentProviders++}}}function iu(e,t,n,r){const i=ki(t),l=function Kv(e){return!!e.useClass}(t);if(i||l){const y=(l?P(t.useClass):t).prototype.ngOnDestroy;if(y){const I=e.destroyHooks||(e.destroyHooks=[]);if(!i&&t.multi){const V=I.indexOf(n);-1===V?I.push(n,[r,y]):I[V+1].push(r,y)}else I.push(n,y)}}}function Gp(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function su(e,t,n,r){for(let i=n;i{n.providersResolver=(r,i)=>function Bb(e,t,n){const r=At();if(r.firstCreatePass){const i=Gn(e);ou(n,r.data,r.blueprint,i,!0),ou(t,r.data,r.blueprint,i,!1)}}(r,i?i(e):e,t)}}class Es{}class Wp{}function Ub(e,t){return new Kp(e,t??null)}class Kp extends Es{constructor(t,n){super(),this._parent=n,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Nc(this);const r=On(t);this._bootstrapComponents=ni(r.bootstrap),this._r3Injector=Mf(t,n,[{provide:Es,useValue:this},{provide:Zs,useValue:this.componentFactoryResolver}],S(t),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(t)}get injector(){return this._r3Injector}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class lu extends Wp{constructor(t){super(),this.moduleType=t}create(t){return new Kp(this.moduleType,t)}}class zb extends Es{constructor(t,n,r){super(),this.componentFactoryResolver=new Nc(this),this.instance=null;const i=new lf([...t,{provide:Es,useValue:this},{provide:Zs,useValue:this.componentFactoryResolver}],n||Na(),r,new Set(["environment"]));this.injector=i,i.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}}function cu(e,t,n=null){return new zb(e,t,n).injector}let Gb=(()=>{class e{constructor(n){this._injector=n,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n.id)){const r=nf(0,n.type),i=r.length>0?cu([r],this._injector,`Standalone[${n.type.name}]`):null;this.cachedInjectors.set(n.id,i)}return this.cachedInjectors.get(n.id)}ngOnDestroy(){try{for(const n of this.cachedInjectors.values())null!==n&&n.destroy()}finally{this.cachedInjectors.clear()}}}return e.\u0275prov=wt({token:e,providedIn:"environment",factory:()=>new e(He(Ni))}),e})();function Xp(e){e.getStandaloneInjector=t=>t.get(Gb).getOrCreateStandaloneInjector(e)}function ng(e,t,n,r){return sg(Ve(),lr(),e,t,n,r)}function rg(e,t,n,r,i){return ag(Ve(),lr(),e,t,n,r,i)}function og(e,t,n,r,i,l){return lg(Ve(),lr(),e,t,n,r,i,l)}function ig(e,t,n,r,i,l,u,p,y){const I=lr()+e,V=Ve(),J=function co(e,t,n,r,i,l){const u=Bi(e,t,n,r);return Bi(e,t+2,i,l)||u}(V,I,n,r,i,l);return Bi(V,I+4,u,p)||J?Ho(V,I+6,y?t.call(y,n,r,i,l,u,p):t(n,r,i,l,u,p)):function oa(e,t){return e[t]}(V,I+6)}function da(e,t){const n=e[t];return n===Gt?void 0:n}function sg(e,t,n,r,i,l){const u=t+n;return wr(e,u,i)?Ho(e,u+1,l?r.call(l,i):r(i)):da(e,u+1)}function ag(e,t,n,r,i,l,u){const p=t+n;return Bi(e,p,i,l)?Ho(e,p+2,u?r.call(u,i,l):r(i,l)):da(e,p+2)}function lg(e,t,n,r,i,l,u,p){const y=t+n;return Ka(e,y,i,l,u)?Ho(e,y+3,p?r.call(p,i,l,u):r(i,l,u)):da(e,y+3)}function dg(e,t){const n=At();let r;const i=e+22;n.firstCreatePass?(r=function sC(e,t){if(t)for(let n=t.length-1;n>=0;n--){const r=t[n];if(e===r.name)return r}}(t,n.pipeRegistry),n.data[i]=r,r.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(i,r.onDestroy)):r=n.data[i];const l=r.factory||(r.factory=nr(r.type)),u=nt(us);try{const p=Zi(!1),y=l();return Zi(p),function rD(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}(n,Ve(),i,y),y}finally{nt(u)}}function fg(e,t,n){const r=e+22,i=Ve(),l=no(i,r);return fa(i,r)?sg(i,lr(),t,l.transform,n,l):l.transform(n)}function hg(e,t,n,r){const i=e+22,l=Ve(),u=no(l,i);return fa(l,i)?ag(l,lr(),t,u.transform,n,r,u):u.transform(n,r)}function pg(e,t,n,r,i){const l=e+22,u=Ve(),p=no(u,l);return fa(u,l)?lg(u,lr(),t,p.transform,n,r,i,p):p.transform(n,r,i)}function fa(e,t){return e[1].data[t].pure}function du(e){return t=>{setTimeout(e,void 0,t)}}const zo=class cC extends o.x{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){let i=t,l=n||(()=>null),u=r;if(t&&"object"==typeof t){const y=t;i=y.next?.bind(y),l=y.error?.bind(y),u=y.complete?.bind(y)}this.__isAsync&&(l=du(l),i&&(i=du(i)),u&&(u=du(u)));const p=super.subscribe({next:i,error:l,complete:u});return t instanceof x.w0&&t.add(p),p}};function uC(){return this._results[$i()]()}class fu{constructor(t=!1){this._emitDistinctChangesOnly=t,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const n=$i(),r=fu.prototype;r[n]||(r[n]=uC)}get changes(){return this._changes||(this._changes=new zo)}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){const r=this;r.dirty=!1;const i=z(t);(this._changesDetected=!function $(e,t,n){if(e.length!==t.length)return!1;for(let r=0;r{class e{}return e.__NG_ELEMENT_ID__=hC,e})();const dC=ha,fC=class extends dC{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}createEmbeddedView(t,n){const r=this._declarationTContainer.tViews,i=Ha(this._declarationLView,r,t,16,null,r.declTNode,null,null,null,null,n||null);i[17]=this._declarationLView[this._declarationTContainer.index];const u=this._declarationLView[19];return null!==u&&(i[19]=u.createEmbeddedView(r)),Ec(r,i,t),new ta(i)}};function hC(){return ol(Mn(),Ve())}function ol(e,t){return 4&e.type?new fC(t,e,as(e,t)):null}let il=(()=>{class e{}return e.__NG_ELEMENT_ID__=pC,e})();function pC(){return vg(Mn(),Ve())}const gC=il,gg=class extends gC{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return as(this._hostTNode,this._hostLView)}get injector(){return new Ti(this._hostTNode,this._hostLView)}get parentInjector(){const t=Qi(this._hostTNode,this._hostLView);if(ba(t)){const n=gi(t,this._hostLView),r=Zo(t);return new Ti(n[1].data[r+8],n)}return new Ti(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=mg(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-10}createEmbeddedView(t,n,r){let i,l;"number"==typeof r?i=r:null!=r&&(i=r.index,l=r.injector);const u=t.createEmbeddedView(n||{},l);return this.insert(u,i),u}createComponent(t,n,r,i,l){const u=t&&!function m(e){return"function"==typeof e}(t);let p;if(u)p=n;else{const J=n||{};p=J.index,r=J.injector,i=J.projectableNodes,l=J.environmentInjector||J.ngModuleRef}const y=u?t:new na($t(t)),I=r||this.parentInjector;if(!l&&null==y.ngModule){const me=(u?I:this.parentInjector).get(Ni,null);me&&(l=me)}const V=y.create(I,i,void 0,l);return this.insert(V.hostView,p),V}insert(t,n){const r=t._lView,i=r[1];if(function Ui(e){return zn(e[3])}(r)){const V=this.indexOf(t);if(-1!==V)this.detach(V);else{const J=r[3],me=new gg(J,J[6],J[3]);me.detach(me.indexOf(t))}}const l=this._adjustIndex(n),u=this._lContainer;!function uv(e,t,n,r){const i=10+r,l=n.length;r>0&&(n[i-1][4]=t),r0)r.push(u[p/2]);else{const I=l[p+1],V=t[-y];for(let J=10;J{class e{constructor(n){this.appInits=n,this.resolve=al,this.reject=al,this.initialized=!1,this.done=!1,this.donePromise=new Promise((r,i)=>{this.resolve=r,this.reject=i})}runInitializers(){if(this.initialized)return;const n=[],r=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let i=0;i{l.subscribe({complete:p,error:y})});n.push(u)}}Promise.all(n).then(()=>{r()}).catch(i=>{this.reject(i)}),0===n.length&&r(),this.initialized=!0}}return e.\u0275fac=function(n){return new(n||e)(He(Yg,8))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const Wg=new _n("AppId",{providedIn:"root",factory:function Kg(){return`${wu()}${wu()}${wu()}`}});function wu(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const Xg=new _n("Platform Initializer"),UC=new _n("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),qg=new _n("appBootstrapListener");let zC=(()=>{class e{log(n){console.log(n)}warn(n){console.warn(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();const cl=new _n("LocaleId",{providedIn:"root",factory:()=>pt(cl,gt.Optional|gt.SkipSelf)||function GC(){return typeof $localize<"u"&&$localize.locale||ws}()}),YC=new _n("DefaultCurrencyCode",{providedIn:"root",factory:()=>"USD"});class WC{constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}}let KC=(()=>{class e{compileModuleSync(n){return new lu(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){const r=this.compileModuleSync(n),l=ni(On(n).declarations).reduce((u,p)=>{const y=$t(p);return y&&u.push(new na(y)),u},[]);return new WC(r,l)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const ZC=(()=>Promise.resolve(0))();function Eu(e){typeof Zone>"u"?ZC.then(()=>{e&&e.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",e)}class uo{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new zo(!1),this.onMicrotaskEmpty=new zo(!1),this.onStable=new zo(!1),this.onError=new zo(!1),typeof Zone>"u")throw new ie(908,!1);Zone.assertZonePatched();const i=this;i._nesting=0,i._outer=i._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(i._inner=i._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(i._inner=i._inner.fork(Zone.longStackTraceZoneSpec)),i.shouldCoalesceEventChangeDetection=!r&&n,i.shouldCoalesceRunChangeDetection=r,i.lastRequestAnimationFrameId=-1,i.nativeRequestAnimationFrame=function JC(){let e=Ct.requestAnimationFrame,t=Ct.cancelAnimationFrame;if(typeof Zone<"u"&&e&&t){const n=e[Zone.__symbol__("OriginalDelegate")];n&&(e=n);const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r)}return{nativeRequestAnimationFrame:e,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function t_(e){const t=()=>{!function e_(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(Ct,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,Su(e),e.isCheckStableRunning=!0,Iu(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),Su(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,i,l,u,p)=>{try{return Qg(e),n.invokeTask(i,l,u,p)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===l.type||e.shouldCoalesceRunChangeDetection)&&t(),em(e)}},onInvoke:(n,r,i,l,u,p,y)=>{try{return Qg(e),n.invoke(i,l,u,p,y)}finally{e.shouldCoalesceRunChangeDetection&&t(),em(e)}},onHasTask:(n,r,i,l)=>{n.hasTask(i,l),r===i&&("microTask"==l.change?(e._hasPendingMicrotasks=l.microTask,Su(e),Iu(e)):"macroTask"==l.change&&(e.hasPendingMacrotasks=l.macroTask))},onHandleError:(n,r,i,l)=>(n.handleError(i,l),e.runOutsideAngular(()=>e.onError.emit(l)),!1)})}(i)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!uo.isInAngularZone())throw new ie(909,!1)}static assertNotInAngularZone(){if(uo.isInAngularZone())throw new ie(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,i){const l=this._inner,u=l.scheduleEventTask("NgZoneEvent: "+i,t,QC,al,al);try{return l.runTask(u,n,r)}finally{l.cancelTask(u)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const QC={};function Iu(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function Su(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function Qg(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function em(e){e._nesting--,Iu(e)}class n_{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new zo,this.onMicrotaskEmpty=new zo,this.onStable=new zo,this.onError=new zo}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,i){return t.apply(n,r)}}const tm=new _n(""),nm=new _n("");let Mu,r_=(()=>{class e{constructor(n,r,i){this._ngZone=n,this.registry=r,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,Mu||(function o_(e){Mu=e}(i),i.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{uo.assertNotInAngularZone(),Eu(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())Eu(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,i){let l=-1;r&&r>0&&(l=setTimeout(()=>{this._callbacks=this._callbacks.filter(u=>u.timeoutId!==l),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:l,updateCb:i})}whenStable(n,r,i){if(i&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,i),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,i){return[]}}return e.\u0275fac=function(n){return new(n||e)(He(uo),He(rm),He(nm))},e.\u0275prov=wt({token:e,factory:e.\u0275fac}),e})(),rm=(()=>{class e{constructor(){this._applications=new Map}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return Mu?.findTestabilityInTree(this,n,r)??null}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})(),Si=null;const om=new _n("AllowMultipleToken"),Au=new _n("PlatformDestroyListeners");class a_{constructor(t,n){this.name=t,this.token=n}}function sm(e,t,n=[]){const r=`Platform: ${t}`,i=new _n(r);return(l=[])=>{let u=Tu();if(!u||u.injector.get(om,!1)){const p=[...n,...l,{provide:i,useValue:!0}];e?e(p):function l_(e){if(Si&&!Si.get(om,!1))throw new ie(400,!1);Si=e;const t=e.get(lm);(function im(e){const t=e.get(Xg,null);t&&t.forEach(n=>n())})(e)}(function am(e=[],t){return Li.create({name:t,providers:[{provide:nc,useValue:"platform"},{provide:Au,useValue:new Set([()=>Si=null])},...e]})}(p,r))}return function u_(e){const t=Tu();if(!t)throw new ie(401,!1);return t}()}}function Tu(){return Si?.get(lm)??null}let lm=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const i=function um(e,t){let n;return n="noop"===e?new n_:("zone.js"===e?void 0:e)||new uo(t),n}(r?.ngZone,function cm(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!(!e||!e.ngZoneEventCoalescing)||!1,shouldCoalesceRunChangeDetection:!(!e||!e.ngZoneRunCoalescing)||!1}}(r)),l=[{provide:uo,useValue:i}];return i.run(()=>{const u=Li.create({providers:l,parent:this.injector,name:n.moduleType.name}),p=n.create(u),y=p.injector.get(Qs,null);if(!y)throw new ie(402,!1);return i.runOutsideAngular(()=>{const I=i.onError.subscribe({next:V=>{y.handleError(V)}});p.onDestroy(()=>{dl(this._modules,p),I.unsubscribe()})}),function dm(e,t,n){try{const r=n();return Wc(r)?r.catch(i=>{throw t.runOutsideAngular(()=>e.handleError(i)),i}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(y,i,()=>{const I=p.injector.get(ll);return I.runInitializers(),I.donePromise.then(()=>(function Cp(e){et(e,"Expected localeId to be defined"),"string"==typeof e&&(bp=e.toLowerCase().replace(/_/g,"-"))}(p.injector.get(cl,ws)||ws),this._moduleDoBootstrap(p),p))})})}bootstrapModule(n,r=[]){const i=fm({},r);return function i_(e,t,n){const r=new lu(n);return Promise.resolve(r)}(0,0,n).then(l=>this.bootstrapModuleFactory(l,i))}_moduleDoBootstrap(n){const r=n.injector.get(ul);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(i=>r.bootstrap(i));else{if(!n.instance.ngDoBootstrap)throw new ie(403,!1);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new ie(404,!1);this._modules.slice().forEach(r=>r.destroy()),this._destroyListeners.forEach(r=>r());const n=this._injector.get(Au,null);n&&(n.forEach(r=>r()),n.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}}return e.\u0275fac=function(n){return new(n||e)(He(Li))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();function fm(e,t){return Array.isArray(t)?t.reduce(fm,e):{...e,...t}}let ul=(()=>{class e{constructor(n,r,i){this._zone=n,this._injector=r,this._exceptionHandler=i,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this._destroyed=!1,this._destroyListeners=[],this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const l=new N.y(p=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{p.next(this._stable),p.complete()})}),u=new N.y(p=>{let y;this._zone.runOutsideAngular(()=>{y=this._zone.onStable.subscribe(()=>{uo.assertNotInAngularZone(),Eu(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,p.next(!0))})})});const I=this._zone.onUnstable.subscribe(()=>{uo.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{p.next(!1)}))});return()=>{y.unsubscribe(),I.unsubscribe()}});this.isStable=function _(...e){const t=(0,M.yG)(e),n=(0,M._6)(e,1/0),r=e;return r.length?1===r.length?(0,R.Xf)(r[0]):(0,ge.J)(n)((0,U.D)(r,t)):W.E}(l,u.pipe((0,Y.B)()))}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(n,r){const i=n instanceof uf;if(!this._injector.get(ll).done)throw!i&&Un(n),new ie(405,false);let u;u=i?n:this._injector.get(Zs).resolveComponentFactory(n),this.componentTypes.push(u.componentType);const p=function s_(e){return e.isBoundToModule}(u)?void 0:this._injector.get(Es),I=u.create(Li.NULL,[],r||u.selector,p),V=I.location.nativeElement,J=I.injector.get(tm,null);return J?.registerApplication(V),I.onDestroy(()=>{this.detachView(I.hostView),dl(this.components,I),J?.unregisterApplication(V)}),this._loadComponent(I),I}tick(){if(this._runningTick)throw new ie(101,!1);try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;dl(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n),this._injector.get(qg,[]).concat(this._bootstrapListeners).forEach(i=>i(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>dl(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new ie(406,!1);const n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return e.\u0275fac=function(n){return new(n||e)(He(uo),He(Ni),He(Qs))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();function dl(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}function f_(){}let h_=(()=>{class e{}return e.__NG_ELEMENT_ID__=p_,e})();function p_(e){return function g_(e,t,n){if(dr(e)&&!n){const r=rr(e.index,t);return new ta(r,r)}return 47&e.type?new ta(t[16],t):null}(Mn(),Ve(),16==(16&e))}class vm{constructor(){}supports(t){return ra(t)}create(t){return new C_(t)}}const b_=(e,t)=>t;class C_{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||b_}forEachItem(t){let n;for(n=this._itHead;null!==n;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,i=0,l=null;for(;n||r;){const u=!r||n&&n.currentIndex{u=this._trackByFn(i,p),null!==n&&Object.is(n.trackById,u)?(r&&(n=this._verifyReinsertion(n,p,u,i)),Object.is(n.item,p)||this._addIdentityChange(n,p)):(n=this._mismatch(n,p,u,i),r=!0),n=n._next,i++}),this.length=i;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,i){let l;return null===t?l=this._itTail:(l=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,l,i)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(r,i))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,l,i)):t=this._addAfter(new __(n,r),l,i),t}_verifyReinsertion(t,n,r,i){let l=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null);return null!==l?t=this._reinsertAfter(l,t._prev,i):t.currentIndex!=i&&(t.currentIndex=i,this._addToMoves(t,i)),t}_truncate(t){for(;null!==t;){const n=t._next;this._addToRemovals(this._unlink(t)),t=n}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const i=t._prevRemoved,l=t._nextRemoved;return null===i?this._removalsHead=l:i._nextRemoved=l,null===l?this._removalsTail=i:l._prevRemoved=i,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){const i=null===n?this._itHead:n._next;return t._next=i,t._prev=n,null===i?this._itTail=t:i._prev=t,null===n?this._itHead=t:n._next=t,null===this._linkedRecords&&(this._linkedRecords=new ym),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const n=t._prev,r=t._next;return null===n?this._itHead=r:n._next=r,null===r?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new ym),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class __{constructor(t,n){this.item=t,this.trackById=n,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class w_{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;null!==r;r=r._nextDup)if((null===n||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){const n=t._prevDup,r=t._nextDup;return null===n?this._head=r:n._nextDup=r,null===r?this._tail=n:r._prevDup=n,null===this._head}}class ym{constructor(){this.map=new Map}put(t){const n=t.trackById;let r=this.map.get(n);r||(r=new w_,this.map.set(n,r)),r.add(t)}get(t,n){const i=this.map.get(t);return i?i.get(t,n):null}remove(t){const n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function Dm(e,t,n){const r=e.previousIndex;if(null===r)return r;let i=0;return n&&r{if(n&&n.key===i)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{const l=this._getOrCreateRecordForKey(i,r);n=this._insertBeforeOrAppend(n,l)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){const r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){const i=this._records.get(t);this._maybeAddToChanges(i,n);const l=i._prev,u=i._next;return l&&(l._next=u),u&&(u._prev=l),i._next=null,i._prev=null,i}const r=new I_(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}}class I_{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function Cm(){return new Fu([new vm])}let Fu=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(null!=r){const i=r.factories.slice();n=n.concat(i)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||Cm()),deps:[[e,new js,new Hs]]}}find(n){const r=this.factories.find(i=>i.supports(n));if(null!=r)return r;throw new ie(901,!1)}}return e.\u0275prov=wt({token:e,providedIn:"root",factory:Cm}),e})();function _m(){return new ku([new bm])}let ku=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(r){const i=r.factories.slice();n=n.concat(i)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||_m()),deps:[[e,new js,new Hs]]}}find(n){const r=this.factories.find(i=>i.supports(n));if(r)return r;throw new ie(901,!1)}}return e.\u0275prov=wt({token:e,providedIn:"root",factory:_m}),e})();const A_=sm(null,"core",[]);let T_=(()=>{class e{constructor(n){}}return e.\u0275fac=function(n){return new(n||e)(He(ul))},e.\u0275mod=vn({type:e}),e.\u0275inj=Kt({}),e})();function x_(e){return"boolean"==typeof e?e:null!=e&&"false"!==e}},433:(Qe,Fe,w)=>{"use strict";w.d(Fe,{u5:()=>wo,JU:()=>E,a5:()=>Vt,JJ:()=>gt,JL:()=>Yt,F:()=>le,On:()=>fo,c5:()=>Lr,Q7:()=>Wr,_Y:()=>ho});var o=w(8274),x=w(6895),N=w(2076),ge=w(9751),R=w(4742),W=w(8421),M=w(3269),U=w(5403),_=w(3268),Y=w(1810),Z=w(4004);let S=(()=>{class C{constructor(c,a){this._renderer=c,this._elementRef=a,this.onChange=g=>{},this.onTouched=()=>{}}setProperty(c,a){this._renderer.setProperty(this._elementRef.nativeElement,c,a)}registerOnTouched(c){this.onTouched=c}registerOnChange(c){this.onChange=c}setDisabledState(c){this.setProperty("disabled",c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(o.Qsj),o.Y36(o.SBq))},C.\u0275dir=o.lG2({type:C}),C})(),B=(()=>{class C extends S{}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,features:[o.qOj]}),C})();const E=new o.OlP("NgValueAccessor"),K={provide:E,useExisting:(0,o.Gpc)(()=>Te),multi:!0},ke=new o.OlP("CompositionEventMode");let Te=(()=>{class C extends S{constructor(c,a,g){super(c,a),this._compositionMode=g,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function pe(){const C=(0,x.q)()?(0,x.q)().getUserAgent():"";return/android (\d+)/.test(C.toLowerCase())}())}writeValue(c){this.setProperty("value",c??"")}_handleInput(c){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(c)}_compositionStart(){this._composing=!0}_compositionEnd(c){this._composing=!1,this._compositionMode&&this.onChange(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(o.Qsj),o.Y36(o.SBq),o.Y36(ke,8))},C.\u0275dir=o.lG2({type:C,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(c,a){1&c&&o.NdJ("input",function(L){return a._handleInput(L.target.value)})("blur",function(){return a.onTouched()})("compositionstart",function(){return a._compositionStart()})("compositionend",function(L){return a._compositionEnd(L.target.value)})},features:[o._Bn([K]),o.qOj]}),C})();function Be(C){return null==C||("string"==typeof C||Array.isArray(C))&&0===C.length}const oe=new o.OlP("NgValidators"),be=new o.OlP("NgAsyncValidators");function O(C){return Be(C.value)?{required:!0}:null}function de(C){return null}function ne(C){return null!=C}function Ee(C){return(0,o.QGY)(C)?(0,N.D)(C):C}function Ce(C){let s={};return C.forEach(c=>{s=null!=c?{...s,...c}:s}),0===Object.keys(s).length?null:s}function ze(C,s){return s.map(c=>c(C))}function et(C){return C.map(s=>function dt(C){return!C.validate}(s)?s:c=>s.validate(c))}function St(C){return null!=C?function Ue(C){if(!C)return null;const s=C.filter(ne);return 0==s.length?null:function(c){return Ce(ze(c,s))}}(et(C)):null}function nn(C){return null!=C?function Ke(C){if(!C)return null;const s=C.filter(ne);return 0==s.length?null:function(c){return function G(...C){const s=(0,M.jO)(C),{args:c,keys:a}=(0,R.D)(C),g=new ge.y(L=>{const{length:Me}=c;if(!Me)return void L.complete();const Je=new Array(Me);let at=Me,Dt=Me;for(let Zt=0;Zt{bn||(bn=!0,Dt--),Je[Zt]=Ve},()=>at--,void 0,()=>{(!at||!bn)&&(Dt||L.next(a?(0,Y.n)(a,Je):Je),L.complete())}))}});return s?g.pipe((0,_.Z)(s)):g}(ze(c,s).map(Ee)).pipe((0,Z.U)(Ce))}}(et(C)):null}function wt(C,s){return null===C?[s]:Array.isArray(C)?[...C,s]:[C,s]}function pn(C){return C?Array.isArray(C)?C:[C]:[]}function Pt(C,s){return Array.isArray(C)?C.includes(s):C===s}function Ut(C,s){const c=pn(s);return pn(C).forEach(g=>{Pt(c,g)||c.push(g)}),c}function it(C,s){return pn(s).filter(c=>!Pt(C,c))}class Xt{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(s){this._rawValidators=s||[],this._composedValidatorFn=St(this._rawValidators)}_setAsyncValidators(s){this._rawAsyncValidators=s||[],this._composedAsyncValidatorFn=nn(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(s){this._onDestroyCallbacks.push(s)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(s=>s()),this._onDestroyCallbacks=[]}reset(s){this.control&&this.control.reset(s)}hasError(s,c){return!!this.control&&this.control.hasError(s,c)}getError(s,c){return this.control?this.control.getError(s,c):null}}class kt extends Xt{get formDirective(){return null}get path(){return null}}class Vt extends Xt{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class rn{constructor(s){this._cd=s}get isTouched(){return!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return!!this._cd?.submitted}}let gt=(()=>{class C extends rn{constructor(c){super(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(Vt,2))},C.\u0275dir=o.lG2({type:C,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(c,a){2&c&&o.ekj("ng-untouched",a.isUntouched)("ng-touched",a.isTouched)("ng-pristine",a.isPristine)("ng-dirty",a.isDirty)("ng-valid",a.isValid)("ng-invalid",a.isInvalid)("ng-pending",a.isPending)},features:[o.qOj]}),C})(),Yt=(()=>{class C extends rn{constructor(c){super(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(kt,10))},C.\u0275dir=o.lG2({type:C,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(c,a){2&c&&o.ekj("ng-untouched",a.isUntouched)("ng-touched",a.isTouched)("ng-pristine",a.isPristine)("ng-dirty",a.isDirty)("ng-valid",a.isValid)("ng-invalid",a.isInvalid)("ng-pending",a.isPending)("ng-submitted",a.isSubmitted)},features:[o.qOj]}),C})();const He="VALID",Ye="INVALID",pt="PENDING",vt="DISABLED";function Ht(C){return(mn(C)?C.validators:C)||null}function tn(C,s){return(mn(s)?s.asyncValidators:C)||null}function mn(C){return null!=C&&!Array.isArray(C)&&"object"==typeof C}class _e{constructor(s,c){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._assignValidators(s),this._assignAsyncValidators(c)}get validator(){return this._composedValidatorFn}set validator(s){this._rawValidators=this._composedValidatorFn=s}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(s){this._rawAsyncValidators=this._composedAsyncValidatorFn=s}get parent(){return this._parent}get valid(){return this.status===He}get invalid(){return this.status===Ye}get pending(){return this.status==pt}get disabled(){return this.status===vt}get enabled(){return this.status!==vt}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(s){this._assignValidators(s)}setAsyncValidators(s){this._assignAsyncValidators(s)}addValidators(s){this.setValidators(Ut(s,this._rawValidators))}addAsyncValidators(s){this.setAsyncValidators(Ut(s,this._rawAsyncValidators))}removeValidators(s){this.setValidators(it(s,this._rawValidators))}removeAsyncValidators(s){this.setAsyncValidators(it(s,this._rawAsyncValidators))}hasValidator(s){return Pt(this._rawValidators,s)}hasAsyncValidator(s){return Pt(this._rawAsyncValidators,s)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(s={}){this.touched=!0,this._parent&&!s.onlySelf&&this._parent.markAsTouched(s)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(s=>s.markAllAsTouched())}markAsUntouched(s={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(c=>{c.markAsUntouched({onlySelf:!0})}),this._parent&&!s.onlySelf&&this._parent._updateTouched(s)}markAsDirty(s={}){this.pristine=!1,this._parent&&!s.onlySelf&&this._parent.markAsDirty(s)}markAsPristine(s={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(c=>{c.markAsPristine({onlySelf:!0})}),this._parent&&!s.onlySelf&&this._parent._updatePristine(s)}markAsPending(s={}){this.status=pt,!1!==s.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!s.onlySelf&&this._parent.markAsPending(s)}disable(s={}){const c=this._parentMarkedDirty(s.onlySelf);this.status=vt,this.errors=null,this._forEachChild(a=>{a.disable({...s,onlySelf:!0})}),this._updateValue(),!1!==s.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors({...s,skipPristineCheck:c}),this._onDisabledChange.forEach(a=>a(!0))}enable(s={}){const c=this._parentMarkedDirty(s.onlySelf);this.status=He,this._forEachChild(a=>{a.enable({...s,onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:s.emitEvent}),this._updateAncestors({...s,skipPristineCheck:c}),this._onDisabledChange.forEach(a=>a(!1))}_updateAncestors(s){this._parent&&!s.onlySelf&&(this._parent.updateValueAndValidity(s),s.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(s){this._parent=s}getRawValue(){return this.value}updateValueAndValidity(s={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===He||this.status===pt)&&this._runAsyncValidator(s.emitEvent)),!1!==s.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!s.onlySelf&&this._parent.updateValueAndValidity(s)}_updateTreeValidity(s={emitEvent:!0}){this._forEachChild(c=>c._updateTreeValidity(s)),this.updateValueAndValidity({onlySelf:!0,emitEvent:s.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?vt:He}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(s){if(this.asyncValidator){this.status=pt,this._hasOwnPendingAsyncValidator=!0;const c=Ee(this.asyncValidator(this));this._asyncValidationSubscription=c.subscribe(a=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(a,{emitEvent:s})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(s,c={}){this.errors=s,this._updateControlsErrors(!1!==c.emitEvent)}get(s){let c=s;return null==c||(Array.isArray(c)||(c=c.split(".")),0===c.length)?null:c.reduce((a,g)=>a&&a._find(g),this)}getError(s,c){const a=c?this.get(c):this;return a&&a.errors?a.errors[s]:null}hasError(s,c){return!!this.getError(s,c)}get root(){let s=this;for(;s._parent;)s=s._parent;return s}_updateControlsErrors(s){this.status=this._calculateStatus(),s&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(s)}_initObservables(){this.valueChanges=new o.vpe,this.statusChanges=new o.vpe}_calculateStatus(){return this._allControlsDisabled()?vt:this.errors?Ye:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(pt)?pt:this._anyControlsHaveStatus(Ye)?Ye:He}_anyControlsHaveStatus(s){return this._anyControls(c=>c.status===s)}_anyControlsDirty(){return this._anyControls(s=>s.dirty)}_anyControlsTouched(){return this._anyControls(s=>s.touched)}_updatePristine(s={}){this.pristine=!this._anyControlsDirty(),this._parent&&!s.onlySelf&&this._parent._updatePristine(s)}_updateTouched(s={}){this.touched=this._anyControlsTouched(),this._parent&&!s.onlySelf&&this._parent._updateTouched(s)}_registerOnCollectionChange(s){this._onCollectionChange=s}_setUpdateStrategy(s){mn(s)&&null!=s.updateOn&&(this._updateOn=s.updateOn)}_parentMarkedDirty(s){return!s&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}_find(s){return null}_assignValidators(s){this._rawValidators=Array.isArray(s)?s.slice():s,this._composedValidatorFn=function _t(C){return Array.isArray(C)?St(C):C||null}(this._rawValidators)}_assignAsyncValidators(s){this._rawAsyncValidators=Array.isArray(s)?s.slice():s,this._composedAsyncValidatorFn=function Ln(C){return Array.isArray(C)?nn(C):C||null}(this._rawAsyncValidators)}}class fe extends _e{constructor(s,c,a){super(Ht(c),tn(a,c)),this.controls=s,this._initObservables(),this._setUpdateStrategy(c),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(s,c){return this.controls[s]?this.controls[s]:(this.controls[s]=c,c.setParent(this),c._registerOnCollectionChange(this._onCollectionChange),c)}addControl(s,c,a={}){this.registerControl(s,c),this.updateValueAndValidity({emitEvent:a.emitEvent}),this._onCollectionChange()}removeControl(s,c={}){this.controls[s]&&this.controls[s]._registerOnCollectionChange(()=>{}),delete this.controls[s],this.updateValueAndValidity({emitEvent:c.emitEvent}),this._onCollectionChange()}setControl(s,c,a={}){this.controls[s]&&this.controls[s]._registerOnCollectionChange(()=>{}),delete this.controls[s],c&&this.registerControl(s,c),this.updateValueAndValidity({emitEvent:a.emitEvent}),this._onCollectionChange()}contains(s){return this.controls.hasOwnProperty(s)&&this.controls[s].enabled}setValue(s,c={}){(function Ft(C,s,c){C._forEachChild((a,g)=>{if(void 0===c[g])throw new o.vHH(1002,"")})})(this,0,s),Object.keys(s).forEach(a=>{(function ln(C,s,c){const a=C.controls;if(!(s?Object.keys(a):a).length)throw new o.vHH(1e3,"");if(!a[c])throw new o.vHH(1001,"")})(this,!0,a),this.controls[a].setValue(s[a],{onlySelf:!0,emitEvent:c.emitEvent})}),this.updateValueAndValidity(c)}patchValue(s,c={}){null!=s&&(Object.keys(s).forEach(a=>{const g=this.controls[a];g&&g.patchValue(s[a],{onlySelf:!0,emitEvent:c.emitEvent})}),this.updateValueAndValidity(c))}reset(s={},c={}){this._forEachChild((a,g)=>{a.reset(s[g],{onlySelf:!0,emitEvent:c.emitEvent})}),this._updatePristine(c),this._updateTouched(c),this.updateValueAndValidity(c)}getRawValue(){return this._reduceChildren({},(s,c,a)=>(s[a]=c.getRawValue(),s))}_syncPendingControls(){let s=this._reduceChildren(!1,(c,a)=>!!a._syncPendingControls()||c);return s&&this.updateValueAndValidity({onlySelf:!0}),s}_forEachChild(s){Object.keys(this.controls).forEach(c=>{const a=this.controls[c];a&&s(a,c)})}_setUpControls(){this._forEachChild(s=>{s.setParent(this),s._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(s){for(const[c,a]of Object.entries(this.controls))if(this.contains(c)&&s(a))return!0;return!1}_reduceValue(){return this._reduceChildren({},(c,a,g)=>((a.enabled||this.disabled)&&(c[g]=a.value),c))}_reduceChildren(s,c){let a=s;return this._forEachChild((g,L)=>{a=c(a,g,L)}),a}_allControlsDisabled(){for(const s of Object.keys(this.controls))if(this.controls[s].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(s){return this.controls.hasOwnProperty(s)?this.controls[s]:null}}const It=new o.OlP("CallSetDisabledState",{providedIn:"root",factory:()=>cn}),cn="always";function sn(C,s,c=cn){$n(C,s),s.valueAccessor.writeValue(C.value),(C.disabled||"always"===c)&&s.valueAccessor.setDisabledState?.(C.disabled),function xn(C,s){s.valueAccessor.registerOnChange(c=>{C._pendingValue=c,C._pendingChange=!0,C._pendingDirty=!0,"change"===C.updateOn&&tr(C,s)})}(C,s),function Ir(C,s){const c=(a,g)=>{s.valueAccessor.writeValue(a),g&&s.viewToModelUpdate(a)};C.registerOnChange(c),s._registerOnDestroy(()=>{C._unregisterOnChange(c)})}(C,s),function vn(C,s){s.valueAccessor.registerOnTouched(()=>{C._pendingTouched=!0,"blur"===C.updateOn&&C._pendingChange&&tr(C,s),"submit"!==C.updateOn&&C.markAsTouched()})}(C,s),function sr(C,s){if(s.valueAccessor.setDisabledState){const c=a=>{s.valueAccessor.setDisabledState(a)};C.registerOnDisabledChange(c),s._registerOnDestroy(()=>{C._unregisterOnDisabledChange(c)})}}(C,s)}function er(C,s){C.forEach(c=>{c.registerOnValidatorChange&&c.registerOnValidatorChange(s)})}function $n(C,s){const c=function Rt(C){return C._rawValidators}(C);null!==s.validator?C.setValidators(wt(c,s.validator)):"function"==typeof c&&C.setValidators([c]);const a=function Kt(C){return C._rawAsyncValidators}(C);null!==s.asyncValidator?C.setAsyncValidators(wt(a,s.asyncValidator)):"function"==typeof a&&C.setAsyncValidators([a]);const g=()=>C.updateValueAndValidity();er(s._rawValidators,g),er(s._rawAsyncValidators,g)}function tr(C,s){C._pendingDirty&&C.markAsDirty(),C.setValue(C._pendingValue,{emitModelToViewChange:!1}),s.viewToModelUpdate(C._pendingValue),C._pendingChange=!1}const Pe={provide:kt,useExisting:(0,o.Gpc)(()=>le)},X=(()=>Promise.resolve())();let le=(()=>{class C extends kt{constructor(c,a,g){super(),this.callSetDisabledState=g,this.submitted=!1,this._directives=new Set,this.ngSubmit=new o.vpe,this.form=new fe({},St(c),nn(a))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(c){X.then(()=>{const a=this._findContainer(c.path);c.control=a.registerControl(c.name,c.control),sn(c.control,c,this.callSetDisabledState),c.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(c)})}getControl(c){return this.form.get(c.path)}removeControl(c){X.then(()=>{const a=this._findContainer(c.path);a&&a.removeControl(c.name),this._directives.delete(c)})}addFormGroup(c){X.then(()=>{const a=this._findContainer(c.path),g=new fe({});(function cr(C,s){$n(C,s)})(g,c),a.registerControl(c.name,g),g.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(c){X.then(()=>{const a=this._findContainer(c.path);a&&a.removeControl(c.name)})}getFormGroup(c){return this.form.get(c.path)}updateModel(c,a){X.then(()=>{this.form.get(c.path).setValue(a)})}setValue(c){this.control.setValue(c)}onSubmit(c){return this.submitted=!0,function F(C,s){C._syncPendingControls(),s.forEach(c=>{const a=c.control;"submit"===a.updateOn&&a._pendingChange&&(c.viewToModelUpdate(a._pendingValue),a._pendingChange=!1)})}(this.form,this._directives),this.ngSubmit.emit(c),"dialog"===c?.target?.method}onReset(){this.resetForm()}resetForm(c){this.form.reset(c),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(c){return c.pop(),c.length?this.form.get(c):this.form}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(oe,10),o.Y36(be,10),o.Y36(It,8))},C.\u0275dir=o.lG2({type:C,selectors:[["form",3,"ngNoForm","",3,"formGroup",""],["ng-form"],["","ngForm",""]],hostBindings:function(c,a){1&c&&o.NdJ("submit",function(L){return a.onSubmit(L)})("reset",function(){return a.onReset()})},inputs:{options:["ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[o._Bn([Pe]),o.qOj]}),C})();function Ie(C,s){const c=C.indexOf(s);c>-1&&C.splice(c,1)}function je(C){return"object"==typeof C&&null!==C&&2===Object.keys(C).length&&"value"in C&&"disabled"in C}const Re=class extends _e{constructor(s=null,c,a){super(Ht(c),tn(a,c)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(s),this._setUpdateStrategy(c),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),mn(c)&&(c.nonNullable||c.initialValueIsDefault)&&(this.defaultValue=je(s)?s.value:s)}setValue(s,c={}){this.value=this._pendingValue=s,this._onChange.length&&!1!==c.emitModelToViewChange&&this._onChange.forEach(a=>a(this.value,!1!==c.emitViewToModelChange)),this.updateValueAndValidity(c)}patchValue(s,c={}){this.setValue(s,c)}reset(s=this.defaultValue,c={}){this._applyFormState(s),this.markAsPristine(c),this.markAsUntouched(c),this.setValue(this.value,c),this._pendingChange=!1}_updateValue(){}_anyControls(s){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(s){this._onChange.push(s)}_unregisterOnChange(s){Ie(this._onChange,s)}registerOnDisabledChange(s){this._onDisabledChange.push(s)}_unregisterOnDisabledChange(s){Ie(this._onDisabledChange,s)}_forEachChild(s){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(s){je(s)?(this.value=this._pendingValue=s.value,s.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=s}},mr={provide:Vt,useExisting:(0,o.Gpc)(()=>fo)},an=(()=>Promise.resolve())();let fo=(()=>{class C extends Vt{constructor(c,a,g,L,Me,Je){super(),this._changeDetectorRef=Me,this.callSetDisabledState=Je,this.control=new Re,this._registered=!1,this.update=new o.vpe,this._parent=c,this._setValidators(a),this._setAsyncValidators(g),this.valueAccessor=function q(C,s){if(!s)return null;let c,a,g;return Array.isArray(s),s.forEach(L=>{L.constructor===Te?c=L:function rt(C){return Object.getPrototypeOf(C.constructor)===B}(L)?a=L:g=L}),g||a||c||null}(0,L)}ngOnChanges(c){if(this._checkForErrors(),!this._registered||"name"in c){if(this._registered&&(this._checkName(),this.formDirective)){const a=c.name.previousValue;this.formDirective.removeControl({name:a,path:this._getPath(a)})}this._setUpControl()}"isDisabled"in c&&this._updateDisabled(c),function Cn(C,s){if(!C.hasOwnProperty("model"))return!1;const c=C.model;return!!c.isFirstChange()||!Object.is(s,c.currentValue)}(c,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(c){this.viewModel=c,this.update.emit(c)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){sn(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(c){an.then(()=>{this.control.setValue(c,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(c){const a=c.isDisabled.currentValue,g=0!==a&&(0,o.D6c)(a);an.then(()=>{g&&!this.control.disabled?this.control.disable():!g&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(c){return this._parent?function Dn(C,s){return[...s.path,C]}(c,this._parent):[c]}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(kt,9),o.Y36(oe,10),o.Y36(be,10),o.Y36(E,10),o.Y36(o.sBO,8),o.Y36(It,8))},C.\u0275dir=o.lG2({type:C,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[o._Bn([mr]),o.qOj,o.TTD]}),C})(),ho=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275dir=o.lG2({type:C,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""]}),C})(),ar=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({}),C})(),hr=(()=>{class C{constructor(){this._validator=de}ngOnChanges(c){if(this.inputName in c){const a=this.normalizeInput(c[this.inputName].currentValue);this._enabled=this.enabled(a),this._validator=this._enabled?this.createValidator(a):de,this._onChange&&this._onChange()}}validate(c){return this._validator(c)}registerOnValidatorChange(c){this._onChange=c}enabled(c){return null!=c}}return C.\u0275fac=function(c){return new(c||C)},C.\u0275dir=o.lG2({type:C,features:[o.TTD]}),C})();const bo={provide:oe,useExisting:(0,o.Gpc)(()=>Wr),multi:!0};let Wr=(()=>{class C extends hr{constructor(){super(...arguments),this.inputName="required",this.normalizeInput=o.D6c,this.createValidator=c=>O}enabled(c){return c}}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,selectors:[["","required","","formControlName","",3,"type","checkbox"],["","required","","formControl","",3,"type","checkbox"],["","required","","ngModel","",3,"type","checkbox"]],hostVars:1,hostBindings:function(c,a){2&c&&o.uIk("required",a._enabled?"":null)},inputs:{required:"required"},features:[o._Bn([bo]),o.qOj]}),C})();const Zn={provide:oe,useExisting:(0,o.Gpc)(()=>Lr),multi:!0};let Lr=(()=>{class C extends hr{constructor(){super(...arguments),this.inputName="pattern",this.normalizeInput=c=>c,this.createValidator=c=>function ue(C){if(!C)return de;let s,c;return"string"==typeof C?(c="","^"!==C.charAt(0)&&(c+="^"),c+=C,"$"!==C.charAt(C.length-1)&&(c+="$"),s=new RegExp(c)):(c=C.toString(),s=C),a=>{if(Be(a.value))return null;const g=a.value;return s.test(g)?null:{pattern:{requiredPattern:c,actualValue:g}}}}(c)}}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,selectors:[["","pattern","","formControlName",""],["","pattern","","formControl",""],["","pattern","","ngModel",""]],hostVars:1,hostBindings:function(c,a){2&c&&o.uIk("pattern",a._enabled?a.pattern:null)},inputs:{pattern:"pattern"},features:[o._Bn([Zn]),o.qOj]}),C})(),Fo=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({imports:[ar]}),C})(),wo=(()=>{class C{static withConfig(c){return{ngModule:C,providers:[{provide:It,useValue:c.callSetDisabledState??cn}]}}}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({imports:[Fo]}),C})()},1481:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Dx:()=>gt,b2:()=>kt,q6:()=>Pt});var o=w(6895),x=w(8274);class N extends o.w_{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class ge extends N{static makeCurrent(){(0,o.HT)(new ge)}onAndCancel(fe,ee,Se){return fe.addEventListener(ee,Se,!1),()=>{fe.removeEventListener(ee,Se,!1)}}dispatchEvent(fe,ee){fe.dispatchEvent(ee)}remove(fe){fe.parentNode&&fe.parentNode.removeChild(fe)}createElement(fe,ee){return(ee=ee||this.getDefaultDocument()).createElement(fe)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(fe){return fe.nodeType===Node.ELEMENT_NODE}isShadowRoot(fe){return fe instanceof DocumentFragment}getGlobalEventTarget(fe,ee){return"window"===ee?window:"document"===ee?fe:"body"===ee?fe.body:null}getBaseHref(fe){const ee=function W(){return R=R||document.querySelector("base"),R?R.getAttribute("href"):null}();return null==ee?null:function U(_e){M=M||document.createElement("a"),M.setAttribute("href",_e);const fe=M.pathname;return"/"===fe.charAt(0)?fe:`/${fe}`}(ee)}resetBaseElement(){R=null}getUserAgent(){return window.navigator.userAgent}getCookie(fe){return(0,o.Mx)(document.cookie,fe)}}let M,R=null;const _=new x.OlP("TRANSITION_ID"),G=[{provide:x.ip1,useFactory:function Y(_e,fe,ee){return()=>{ee.get(x.CZH).donePromise.then(()=>{const Se=(0,o.q)(),Le=fe.querySelectorAll(`style[ng-transition="${_e}"]`);for(let yt=0;yt{class _e{build(){return new XMLHttpRequest}}return _e.\u0275fac=function(ee){return new(ee||_e)},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const B=new x.OlP("EventManagerPlugins");let E=(()=>{class _e{constructor(ee,Se){this._zone=Se,this._eventNameToPlugin=new Map,ee.forEach(Le=>Le.manager=this),this._plugins=ee.slice().reverse()}addEventListener(ee,Se,Le){return this._findPluginFor(Se).addEventListener(ee,Se,Le)}addGlobalEventListener(ee,Se,Le){return this._findPluginFor(Se).addGlobalEventListener(ee,Se,Le)}getZone(){return this._zone}_findPluginFor(ee){const Se=this._eventNameToPlugin.get(ee);if(Se)return Se;const Le=this._plugins;for(let yt=0;yt{class _e{constructor(){this._stylesSet=new Set}addStyles(ee){const Se=new Set;ee.forEach(Le=>{this._stylesSet.has(Le)||(this._stylesSet.add(Le),Se.add(Le))}),this.onStylesAdded(Se)}onStylesAdded(ee){}getAllStyles(){return Array.from(this._stylesSet)}}return _e.\u0275fac=function(ee){return new(ee||_e)},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})(),K=(()=>{class _e extends P{constructor(ee){super(),this._doc=ee,this._hostNodes=new Map,this._hostNodes.set(ee.head,[])}_addStylesToHost(ee,Se,Le){ee.forEach(yt=>{const It=this._doc.createElement("style");It.textContent=yt,Le.push(Se.appendChild(It))})}addHost(ee){const Se=[];this._addStylesToHost(this._stylesSet,ee,Se),this._hostNodes.set(ee,Se)}removeHost(ee){const Se=this._hostNodes.get(ee);Se&&Se.forEach(pe),this._hostNodes.delete(ee)}onStylesAdded(ee){this._hostNodes.forEach((Se,Le)=>{this._addStylesToHost(ee,Le,Se)})}ngOnDestroy(){this._hostNodes.forEach(ee=>ee.forEach(pe))}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();function pe(_e){(0,o.q)().remove(_e)}const ke={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},Te=/%COMP%/g;function Q(_e,fe,ee){for(let Se=0;Se{if("__ngUnwrap__"===fe)return _e;!1===_e(fe)&&(fe.preventDefault(),fe.returnValue=!1)}}let O=(()=>{class _e{constructor(ee,Se,Le){this.eventManager=ee,this.sharedStylesHost=Se,this.appId=Le,this.rendererByCompId=new Map,this.defaultRenderer=new te(ee)}createRenderer(ee,Se){if(!ee||!Se)return this.defaultRenderer;switch(Se.encapsulation){case x.ifc.Emulated:{let Le=this.rendererByCompId.get(Se.id);return Le||(Le=new ue(this.eventManager,this.sharedStylesHost,Se,this.appId),this.rendererByCompId.set(Se.id,Le)),Le.applyToHost(ee),Le}case 1:case x.ifc.ShadowDom:return new de(this.eventManager,this.sharedStylesHost,ee,Se);default:if(!this.rendererByCompId.has(Se.id)){const Le=Q(Se.id,Se.styles,[]);this.sharedStylesHost.addStyles(Le),this.rendererByCompId.set(Se.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(E),x.LFG(K),x.LFG(x.AFp))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();class te{constructor(fe){this.eventManager=fe,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(fe,ee){return ee?document.createElementNS(ke[ee]||ee,fe):document.createElement(fe)}createComment(fe){return document.createComment(fe)}createText(fe){return document.createTextNode(fe)}appendChild(fe,ee){(De(fe)?fe.content:fe).appendChild(ee)}insertBefore(fe,ee,Se){fe&&(De(fe)?fe.content:fe).insertBefore(ee,Se)}removeChild(fe,ee){fe&&fe.removeChild(ee)}selectRootElement(fe,ee){let Se="string"==typeof fe?document.querySelector(fe):fe;if(!Se)throw new Error(`The selector "${fe}" did not match any elements`);return ee||(Se.textContent=""),Se}parentNode(fe){return fe.parentNode}nextSibling(fe){return fe.nextSibling}setAttribute(fe,ee,Se,Le){if(Le){ee=Le+":"+ee;const yt=ke[Le];yt?fe.setAttributeNS(yt,ee,Se):fe.setAttribute(ee,Se)}else fe.setAttribute(ee,Se)}removeAttribute(fe,ee,Se){if(Se){const Le=ke[Se];Le?fe.removeAttributeNS(Le,ee):fe.removeAttribute(`${Se}:${ee}`)}else fe.removeAttribute(ee)}addClass(fe,ee){fe.classList.add(ee)}removeClass(fe,ee){fe.classList.remove(ee)}setStyle(fe,ee,Se,Le){Le&(x.JOm.DashCase|x.JOm.Important)?fe.style.setProperty(ee,Se,Le&x.JOm.Important?"important":""):fe.style[ee]=Se}removeStyle(fe,ee,Se){Se&x.JOm.DashCase?fe.style.removeProperty(ee):fe.style[ee]=""}setProperty(fe,ee,Se){fe[ee]=Se}setValue(fe,ee){fe.nodeValue=ee}listen(fe,ee,Se){return"string"==typeof fe?this.eventManager.addGlobalEventListener(fe,ee,T(Se)):this.eventManager.addEventListener(fe,ee,T(Se))}}function De(_e){return"TEMPLATE"===_e.tagName&&void 0!==_e.content}class ue extends te{constructor(fe,ee,Se,Le){super(fe),this.component=Se;const yt=Q(Le+"-"+Se.id,Se.styles,[]);ee.addStyles(yt),this.contentAttr=function be(_e){return"_ngcontent-%COMP%".replace(Te,_e)}(Le+"-"+Se.id),this.hostAttr=function Ne(_e){return"_nghost-%COMP%".replace(Te,_e)}(Le+"-"+Se.id)}applyToHost(fe){super.setAttribute(fe,this.hostAttr,"")}createElement(fe,ee){const Se=super.createElement(fe,ee);return super.setAttribute(Se,this.contentAttr,""),Se}}class de extends te{constructor(fe,ee,Se,Le){super(fe),this.sharedStylesHost=ee,this.hostEl=Se,this.shadowRoot=Se.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const yt=Q(Le.id,Le.styles,[]);for(let It=0;It{class _e extends j{constructor(ee){super(ee)}supports(ee){return!0}addEventListener(ee,Se,Le){return ee.addEventListener(Se,Le,!1),()=>this.removeEventListener(ee,Se,Le)}removeEventListener(ee,Se,Le){return ee.removeEventListener(Se,Le)}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const Ee=["alt","control","meta","shift"],Ce={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},ze={alt:_e=>_e.altKey,control:_e=>_e.ctrlKey,meta:_e=>_e.metaKey,shift:_e=>_e.shiftKey};let dt=(()=>{class _e extends j{constructor(ee){super(ee)}supports(ee){return null!=_e.parseEventName(ee)}addEventListener(ee,Se,Le){const yt=_e.parseEventName(Se),It=_e.eventCallback(yt.fullKey,Le,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>(0,o.q)().onAndCancel(ee,yt.domEventName,It))}static parseEventName(ee){const Se=ee.toLowerCase().split("."),Le=Se.shift();if(0===Se.length||"keydown"!==Le&&"keyup"!==Le)return null;const yt=_e._normalizeKey(Se.pop());let It="",cn=Se.indexOf("code");if(cn>-1&&(Se.splice(cn,1),It="code."),Ee.forEach(sn=>{const dn=Se.indexOf(sn);dn>-1&&(Se.splice(dn,1),It+=sn+".")}),It+=yt,0!=Se.length||0===yt.length)return null;const Dn={};return Dn.domEventName=Le,Dn.fullKey=It,Dn}static matchEventFullKeyCode(ee,Se){let Le=Ce[ee.key]||ee.key,yt="";return Se.indexOf("code.")>-1&&(Le=ee.code,yt="code."),!(null==Le||!Le)&&(Le=Le.toLowerCase()," "===Le?Le="space":"."===Le&&(Le="dot"),Ee.forEach(It=>{It!==Le&&(0,ze[It])(ee)&&(yt+=It+".")}),yt+=Le,yt===Se)}static eventCallback(ee,Se,Le){return yt=>{_e.matchEventFullKeyCode(yt,ee)&&Le.runGuarded(()=>Se(yt))}}static _normalizeKey(ee){return"esc"===ee?"escape":ee}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const Pt=(0,x.eFA)(x._c5,"browser",[{provide:x.Lbi,useValue:o.bD},{provide:x.g9A,useValue:function wt(){ge.makeCurrent()},multi:!0},{provide:o.K0,useFactory:function Kt(){return(0,x.RDi)(document),document},deps:[]}]),Ut=new x.OlP(""),it=[{provide:x.rWj,useClass:class Z{addToWindow(fe){x.dqk.getAngularTestability=(Se,Le=!0)=>{const yt=fe.findTestabilityInTree(Se,Le);if(null==yt)throw new Error("Could not find testability for element.");return yt},x.dqk.getAllAngularTestabilities=()=>fe.getAllTestabilities(),x.dqk.getAllAngularRootElements=()=>fe.getAllRootElements(),x.dqk.frameworkStabilizers||(x.dqk.frameworkStabilizers=[]),x.dqk.frameworkStabilizers.push(Se=>{const Le=x.dqk.getAllAngularTestabilities();let yt=Le.length,It=!1;const cn=function(Dn){It=It||Dn,yt--,0==yt&&Se(It)};Le.forEach(function(Dn){Dn.whenStable(cn)})})}findTestabilityInTree(fe,ee,Se){return null==ee?null:fe.getTestability(ee)??(Se?(0,o.q)().isShadowRoot(ee)?this.findTestabilityInTree(fe,ee.host,!0):this.findTestabilityInTree(fe,ee.parentElement,!0):null)}},deps:[]},{provide:x.lri,useClass:x.dDg,deps:[x.R0b,x.eoX,x.rWj]},{provide:x.dDg,useClass:x.dDg,deps:[x.R0b,x.eoX,x.rWj]}],Xt=[{provide:x.zSh,useValue:"root"},{provide:x.qLn,useFactory:function Rt(){return new x.qLn},deps:[]},{provide:B,useClass:ne,multi:!0,deps:[o.K0,x.R0b,x.Lbi]},{provide:B,useClass:dt,multi:!0,deps:[o.K0]},{provide:O,useClass:O,deps:[E,K,x.AFp]},{provide:x.FYo,useExisting:O},{provide:P,useExisting:K},{provide:K,useClass:K,deps:[o.K0]},{provide:E,useClass:E,deps:[B,x.R0b]},{provide:o.JF,useClass:S,deps:[]},[]];let kt=(()=>{class _e{constructor(ee){}static withServerTransition(ee){return{ngModule:_e,providers:[{provide:x.AFp,useValue:ee.appId},{provide:_,useExisting:x.AFp},G]}}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(Ut,12))},_e.\u0275mod=x.oAB({type:_e}),_e.\u0275inj=x.cJS({providers:[...Xt,...it],imports:[o.ez,x.hGG]}),_e})(),gt=(()=>{class _e{constructor(ee){this._doc=ee}getTitle(){return this._doc.title}setTitle(ee){this._doc.title=ee||""}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:function(ee){let Se=null;return Se=ee?new ee:function en(){return new gt((0,x.LFG)(o.K0))}(),Se},providedIn:"root"}),_e})();typeof window<"u"&&window},5472:(Qe,Fe,w)=>{"use strict";w.d(Fe,{gz:()=>Rr,y6:()=>fr,OD:()=>Mt,eC:()=>it,wm:()=>Dl,wN:()=>ya,F0:()=>or,rH:()=>mi,Bz:()=>Xu,Hx:()=>pt});var o=w(8274),x=w(2076),N=w(9646),ge=w(1135);const W=(0,w(3888).d)(f=>function(){f(this),this.name="EmptyError",this.message="no elements in sequence"});var M=w(9751),U=w(4742),_=w(4671),Y=w(3268),G=w(3269),Z=w(1810),S=w(5403),B=w(9672);function E(...f){const h=(0,G.yG)(f),d=(0,G.jO)(f),{args:m,keys:b}=(0,U.D)(f);if(0===m.length)return(0,x.D)([],h);const $=new M.y(function j(f,h,d=_.y){return m=>{P(h,()=>{const{length:b}=f,$=new Array(b);let z=b,ve=b;for(let We=0;We{const ft=(0,x.D)(f[We],h);let bt=!1;ft.subscribe((0,S.x)(m,jt=>{$[We]=jt,bt||(bt=!0,ve--),ve||m.next(d($.slice()))},()=>{--z||m.complete()}))},m)},m)}}(m,h,b?z=>(0,Z.n)(b,z):_.y));return d?$.pipe((0,Y.Z)(d)):$}function P(f,h,d){f?(0,B.f)(d,f,h):h()}var K=w(8189);function ke(...f){return function pe(){return(0,K.J)(1)}()((0,x.D)(f,(0,G.yG)(f)))}var Te=w(8421);function ie(f){return new M.y(h=>{(0,Te.Xf)(f()).subscribe(h)})}var Be=w(9635),re=w(576);function oe(f,h){const d=(0,re.m)(f)?f:()=>f,m=b=>b.error(d());return new M.y(h?b=>h.schedule(m,0,b):m)}var be=w(515),Ne=w(727),Q=w(4482);function T(){return(0,Q.e)((f,h)=>{let d=null;f._refCount++;const m=(0,S.x)(h,void 0,void 0,void 0,()=>{if(!f||f._refCount<=0||0<--f._refCount)return void(d=null);const b=f._connection,$=d;d=null,b&&(!$||b===$)&&b.unsubscribe(),h.unsubscribe()});f.subscribe(m),m.closed||(d=f.connect())})}class k extends M.y{constructor(h,d){super(),this.source=h,this.subjectFactory=d,this._subject=null,this._refCount=0,this._connection=null,(0,Q.A)(h)&&(this.lift=h.lift)}_subscribe(h){return this.getSubject().subscribe(h)}getSubject(){const h=this._subject;return(!h||h.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:h}=this;this._subject=this._connection=null,h?.unsubscribe()}connect(){let h=this._connection;if(!h){h=this._connection=new Ne.w0;const d=this.getSubject();h.add(this.source.subscribe((0,S.x)(d,void 0,()=>{this._teardown(),d.complete()},m=>{this._teardown(),d.error(m)},()=>this._teardown()))),h.closed&&(this._connection=null,h=Ne.w0.EMPTY)}return h}refCount(){return T()(this)}}var O=w(7579),te=w(6895),ce=w(4004),Ae=w(3900),De=w(5698),de=w(9300),ne=w(5577);function Ee(f){return(0,Q.e)((h,d)=>{let m=!1;h.subscribe((0,S.x)(d,b=>{m=!0,d.next(b)},()=>{m||d.next(f),d.complete()}))})}function Ce(f=ze){return(0,Q.e)((h,d)=>{let m=!1;h.subscribe((0,S.x)(d,b=>{m=!0,d.next(b)},()=>m?d.complete():d.error(f())))})}function ze(){return new W}function dt(f,h){const d=arguments.length>=2;return m=>m.pipe(f?(0,de.h)((b,$)=>f(b,$,m)):_.y,(0,De.q)(1),d?Ee(h):Ce(()=>new W))}var et=w(4351),Ue=w(8505);function St(f){return(0,Q.e)((h,d)=>{let $,m=null,b=!1;m=h.subscribe((0,S.x)(d,void 0,void 0,z=>{$=(0,Te.Xf)(f(z,St(f)(h))),m?(m.unsubscribe(),m=null,$.subscribe(d)):b=!0})),b&&(m.unsubscribe(),m=null,$.subscribe(d))})}function Ke(f,h,d,m,b){return($,z)=>{let ve=d,We=h,ft=0;$.subscribe((0,S.x)(z,bt=>{const jt=ft++;We=ve?f(We,bt,jt):(ve=!0,bt),m&&z.next(We)},b&&(()=>{ve&&z.next(We),z.complete()})))}}function nn(f,h){return(0,Q.e)(Ke(f,h,arguments.length>=2,!0))}function wt(f){return f<=0?()=>be.E:(0,Q.e)((h,d)=>{let m=[];h.subscribe((0,S.x)(d,b=>{m.push(b),f{for(const b of m)d.next(b);d.complete()},void 0,()=>{m=null}))})}function Rt(f,h){const d=arguments.length>=2;return m=>m.pipe(f?(0,de.h)((b,$)=>f(b,$,m)):_.y,wt(1),d?Ee(h):Ce(()=>new W))}var Kt=w(2529),Pt=w(8746),Ut=w(1481);const it="primary",Xt=Symbol("RouteTitle");class kt{constructor(h){this.params=h||{}}has(h){return Object.prototype.hasOwnProperty.call(this.params,h)}get(h){if(this.has(h)){const d=this.params[h];return Array.isArray(d)?d[0]:d}return null}getAll(h){if(this.has(h)){const d=this.params[h];return Array.isArray(d)?d:[d]}return[]}get keys(){return Object.keys(this.params)}}function Vt(f){return new kt(f)}function rn(f,h,d){const m=d.path.split("/");if(m.length>f.length||"full"===d.pathMatch&&(h.hasChildren()||m.lengthm[$]===b)}return f===h}function Yt(f){return Array.prototype.concat.apply([],f)}function ht(f){return f.length>0?f[f.length-1]:null}function Et(f,h){for(const d in f)f.hasOwnProperty(d)&&h(f[d],d)}function ut(f){return(0,o.CqO)(f)?f:(0,o.QGY)(f)?(0,x.D)(Promise.resolve(f)):(0,N.of)(f)}const Ct=!1,qe={exact:function Hn(f,h,d){if(!He(f.segments,h.segments)||!Xn(f.segments,h.segments,d)||f.numberOfChildren!==h.numberOfChildren)return!1;for(const m in h.children)if(!f.children[m]||!Hn(f.children[m],h.children[m],d))return!1;return!0},subset:Er},on={exact:function Nt(f,h){return en(f,h)},subset:function zt(f,h){return Object.keys(h).length<=Object.keys(f).length&&Object.keys(h).every(d=>gt(f[d],h[d]))},ignored:()=>!0};function gn(f,h,d){return qe[d.paths](f.root,h.root,d.matrixParams)&&on[d.queryParams](f.queryParams,h.queryParams)&&!("exact"===d.fragment&&f.fragment!==h.fragment)}function Er(f,h,d){return jn(f,h,h.segments,d)}function jn(f,h,d,m){if(f.segments.length>d.length){const b=f.segments.slice(0,d.length);return!(!He(b,d)||h.hasChildren()||!Xn(b,d,m))}if(f.segments.length===d.length){if(!He(f.segments,d)||!Xn(f.segments,d,m))return!1;for(const b in h.children)if(!f.children[b]||!Er(f.children[b],h.children[b],m))return!1;return!0}{const b=d.slice(0,f.segments.length),$=d.slice(f.segments.length);return!!(He(f.segments,b)&&Xn(f.segments,b,m)&&f.children[it])&&jn(f.children[it],h,$,m)}}function Xn(f,h,d){return h.every((m,b)=>on[d](f[b].parameters,m.parameters))}class En{constructor(h=new xe([],{}),d={},m=null){this.root=h,this.queryParams=d,this.fragment=m}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Vt(this.queryParams)),this._queryParamMap}toString(){return Ht.serialize(this)}}class xe{constructor(h,d){this.segments=h,this.children=d,this.parent=null,Et(d,(m,b)=>m.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return _t(this)}}class se{constructor(h,d){this.path=h,this.parameters=d}get parameterMap(){return this._parameterMap||(this._parameterMap=Vt(this.parameters)),this._parameterMap}toString(){return ee(this)}}function He(f,h){return f.length===h.length&&f.every((d,m)=>d.path===h[m].path)}let pt=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return new vt},providedIn:"root"}),f})();class vt{parse(h){const d=new er(h);return new En(d.parseRootSegment(),d.parseQueryParams(),d.parseFragment())}serialize(h){const d=`/${tn(h.root,!0)}`,m=function Le(f){const h=Object.keys(f).map(d=>{const m=f[d];return Array.isArray(m)?m.map(b=>`${mn(d)}=${mn(b)}`).join("&"):`${mn(d)}=${mn(m)}`}).filter(d=>!!d);return h.length?`?${h.join("&")}`:""}(h.queryParams);return`${d}${m}${"string"==typeof h.fragment?`#${function ln(f){return encodeURI(f)}(h.fragment)}`:""}`}}const Ht=new vt;function _t(f){return f.segments.map(h=>ee(h)).join("/")}function tn(f,h){if(!f.hasChildren())return _t(f);if(h){const d=f.children[it]?tn(f.children[it],!1):"",m=[];return Et(f.children,(b,$)=>{$!==it&&m.push(`${$}:${tn(b,!1)}`)}),m.length>0?`${d}(${m.join("//")})`:d}{const d=function Ye(f,h){let d=[];return Et(f.children,(m,b)=>{b===it&&(d=d.concat(h(m,b)))}),Et(f.children,(m,b)=>{b!==it&&(d=d.concat(h(m,b)))}),d}(f,(m,b)=>b===it?[tn(f.children[it],!1)]:[`${b}:${tn(m,!1)}`]);return 1===Object.keys(f.children).length&&null!=f.children[it]?`${_t(f)}/${d[0]}`:`${_t(f)}/(${d.join("//")})`}}function Ln(f){return encodeURIComponent(f).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function mn(f){return Ln(f).replace(/%3B/gi,";")}function Ft(f){return Ln(f).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function _e(f){return decodeURIComponent(f)}function fe(f){return _e(f.replace(/\+/g,"%20"))}function ee(f){return`${Ft(f.path)}${function Se(f){return Object.keys(f).map(h=>`;${Ft(h)}=${Ft(f[h])}`).join("")}(f.parameters)}`}const yt=/^[^\/()?;=#]+/;function It(f){const h=f.match(yt);return h?h[0]:""}const cn=/^[^=?&#]+/,sn=/^[^&#]+/;class er{constructor(h){this.url=h,this.remaining=h}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new xe([],{}):new xe([],this.parseChildren())}parseQueryParams(){const h={};if(this.consumeOptional("?"))do{this.parseQueryParam(h)}while(this.consumeOptional("&"));return h}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const h=[];for(this.peekStartsWith("(")||h.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),h.push(this.parseSegment());let d={};this.peekStartsWith("/(")&&(this.capture("/"),d=this.parseParens(!0));let m={};return this.peekStartsWith("(")&&(m=this.parseParens(!1)),(h.length>0||Object.keys(d).length>0)&&(m[it]=new xe(h,d)),m}parseSegment(){const h=It(this.remaining);if(""===h&&this.peekStartsWith(";"))throw new o.vHH(4009,Ct);return this.capture(h),new se(_e(h),this.parseMatrixParams())}parseMatrixParams(){const h={};for(;this.consumeOptional(";");)this.parseParam(h);return h}parseParam(h){const d=It(this.remaining);if(!d)return;this.capture(d);let m="";if(this.consumeOptional("=")){const b=It(this.remaining);b&&(m=b,this.capture(m))}h[_e(d)]=_e(m)}parseQueryParam(h){const d=function Dn(f){const h=f.match(cn);return h?h[0]:""}(this.remaining);if(!d)return;this.capture(d);let m="";if(this.consumeOptional("=")){const z=function dn(f){const h=f.match(sn);return h?h[0]:""}(this.remaining);z&&(m=z,this.capture(m))}const b=fe(d),$=fe(m);if(h.hasOwnProperty(b)){let z=h[b];Array.isArray(z)||(z=[z],h[b]=z),z.push($)}else h[b]=$}parseParens(h){const d={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const m=It(this.remaining),b=this.remaining[m.length];if("/"!==b&&")"!==b&&";"!==b)throw new o.vHH(4010,Ct);let $;m.indexOf(":")>-1?($=m.slice(0,m.indexOf(":")),this.capture($),this.capture(":")):h&&($=it);const z=this.parseChildren();d[$]=1===Object.keys(z).length?z[it]:new xe([],z),this.consumeOptional("//")}return d}peekStartsWith(h){return this.remaining.startsWith(h)}consumeOptional(h){return!!this.peekStartsWith(h)&&(this.remaining=this.remaining.substring(h.length),!0)}capture(h){if(!this.consumeOptional(h))throw new o.vHH(4011,Ct)}}function sr(f){return f.segments.length>0?new xe([],{[it]:f}):f}function $n(f){const h={};for(const m of Object.keys(f.children)){const $=$n(f.children[m]);($.segments.length>0||$.hasChildren())&&(h[m]=$)}return function Tn(f){if(1===f.numberOfChildren&&f.children[it]){const h=f.children[it];return new xe(f.segments.concat(h.segments),h.children)}return f}(new xe(f.segments,h))}function xn(f){return f instanceof En}function gr(f,h,d,m,b){if(0===d.length)return Qt(h.root,h.root,h.root,m,b);const $=function Cn(f){if("string"==typeof f[0]&&1===f.length&&"/"===f[0])return new On(!0,0,f);let h=0,d=!1;const m=f.reduce((b,$,z)=>{if("object"==typeof $&&null!=$){if($.outlets){const ve={};return Et($.outlets,(We,ft)=>{ve[ft]="string"==typeof We?We.split("/"):We}),[...b,{outlets:ve}]}if($.segmentPath)return[...b,$.segmentPath]}return"string"!=typeof $?[...b,$]:0===z?($.split("/").forEach((ve,We)=>{0==We&&"."===ve||(0==We&&""===ve?d=!0:".."===ve?h++:""!=ve&&b.push(ve))}),b):[...b,$]},[]);return new On(d,h,m)}(d);return $.toRoot()?Qt(h.root,h.root,new xe([],{}),m,b):function z(We){const ft=function q(f,h,d,m){if(f.isAbsolute)return new rt(h.root,!0,0);if(-1===m)return new rt(d,d===h.root,0);return function he(f,h,d){let m=f,b=h,$=d;for(;$>b;){if($-=b,m=m.parent,!m)throw new o.vHH(4005,!1);b=m.segments.length}return new rt(m,!1,b-$)}(d,m+($t(f.commands[0])?0:1),f.numberOfDoubleDots)}($,h,f.snapshot?._urlSegment,We),bt=ft.processChildren?X(ft.segmentGroup,ft.index,$.commands):Pe(ft.segmentGroup,ft.index,$.commands);return Qt(h.root,ft.segmentGroup,bt,m,b)}(f.snapshot?._lastPathIndex)}function $t(f){return"object"==typeof f&&null!=f&&!f.outlets&&!f.segmentPath}function fn(f){return"object"==typeof f&&null!=f&&f.outlets}function Qt(f,h,d,m,b){let z,$={};m&&Et(m,(We,ft)=>{$[ft]=Array.isArray(We)?We.map(bt=>`${bt}`):`${We}`}),z=f===h?d:Un(f,h,d);const ve=sr($n(z));return new En(ve,$,b)}function Un(f,h,d){const m={};return Et(f.children,(b,$)=>{m[$]=b===h?d:Un(b,h,d)}),new xe(f.segments,m)}class On{constructor(h,d,m){if(this.isAbsolute=h,this.numberOfDoubleDots=d,this.commands=m,h&&m.length>0&&$t(m[0]))throw new o.vHH(4003,!1);const b=m.find(fn);if(b&&b!==ht(m))throw new o.vHH(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class rt{constructor(h,d,m){this.segmentGroup=h,this.processChildren=d,this.index=m}}function Pe(f,h,d){if(f||(f=new xe([],{})),0===f.segments.length&&f.hasChildren())return X(f,h,d);const m=function le(f,h,d){let m=0,b=h;const $={match:!1,pathIndex:0,commandIndex:0};for(;b=d.length)return $;const z=f.segments[b],ve=d[m];if(fn(ve))break;const We=`${ve}`,ft=m0&&void 0===We)break;if(We&&ft&&"object"==typeof ft&&void 0===ft.outlets){if(!ot(We,ft,z))return $;m+=2}else{if(!ot(We,{},z))return $;m++}b++}return{match:!0,pathIndex:b,commandIndex:m}}(f,h,d),b=d.slice(m.commandIndex);if(m.match&&m.pathIndex{"string"==typeof $&&($=[$]),null!==$&&(b[z]=Pe(f.children[z],h,$))}),Et(f.children,($,z)=>{void 0===m[z]&&(b[z]=$)}),new xe(f.segments,b)}}function Ie(f,h,d){const m=f.segments.slice(0,h);let b=0;for(;b{"string"==typeof d&&(d=[d]),null!==d&&(h[m]=Ie(new xe([],{}),0,d))}),h}function Re(f){const h={};return Et(f,(d,m)=>h[m]=`${d}`),h}function ot(f,h,d){return f==d.path&&en(h,d.parameters)}class st{constructor(h,d){this.id=h,this.url=d}}class Mt extends st{constructor(h,d,m="imperative",b=null){super(h,d),this.type=0,this.navigationTrigger=m,this.restoredState=b}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class Wt extends st{constructor(h,d,m){super(h,d),this.urlAfterRedirects=m,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class Bt extends st{constructor(h,d,m,b){super(h,d),this.reason=m,this.code=b,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class An extends st{constructor(h,d,m,b){super(h,d),this.error=m,this.target=b,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class Rn extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Pn extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class ur extends st{constructor(h,d,m,b,$){super(h,d),this.urlAfterRedirects=m,this.state=b,this.shouldActivate=$,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class mr extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class an extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class fo{constructor(h){this.route=h,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class ho{constructor(h){this.route=h,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class Zr{constructor(h){this.snapshot=h,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class jr{constructor(h){this.snapshot=h,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class xr{constructor(h){this.snapshot=h,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Or{constructor(h){this.snapshot=h,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class ar{constructor(h,d,m){this.routerEvent=h,this.position=d,this.anchor=m,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class po{constructor(h){this._root=h}get root(){return this._root.value}parent(h){const d=this.pathFromRoot(h);return d.length>1?d[d.length-2]:null}children(h){const d=Fn(h,this._root);return d?d.children.map(m=>m.value):[]}firstChild(h){const d=Fn(h,this._root);return d&&d.children.length>0?d.children[0].value:null}siblings(h){const d=zn(h,this._root);return d.length<2?[]:d[d.length-2].children.map(b=>b.value).filter(b=>b!==h)}pathFromRoot(h){return zn(h,this._root).map(d=>d.value)}}function Fn(f,h){if(f===h.value)return h;for(const d of h.children){const m=Fn(f,d);if(m)return m}return null}function zn(f,h){if(f===h.value)return[h];for(const d of h.children){const m=zn(f,d);if(m.length)return m.unshift(h),m}return[]}class qn{constructor(h,d){this.value=h,this.children=d}toString(){return`TreeNode(${this.value})`}}function dr(f){const h={};return f&&f.children.forEach(d=>h[d.value.outlet]=d),h}class Sr extends po{constructor(h,d){super(h),this.snapshot=d,vo(this,h)}toString(){return this.snapshot.toString()}}function Gn(f,h){const d=function go(f,h){const z=new Pr([],{},{},"",{},it,h,null,f.root,-1,{});return new xo("",new qn(z,[]))}(f,h),m=new ge.X([new se("",{})]),b=new ge.X({}),$=new ge.X({}),z=new ge.X({}),ve=new ge.X(""),We=new Rr(m,b,z,ve,$,it,h,d.root);return We.snapshot=d.root,new Sr(new qn(We,[]),d)}class Rr{constructor(h,d,m,b,$,z,ve,We){this.url=h,this.params=d,this.queryParams=m,this.fragment=b,this.data=$,this.outlet=z,this.component=ve,this.title=this.data?.pipe((0,ce.U)(ft=>ft[Xt]))??(0,N.of)(void 0),this._futureSnapshot=We}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe((0,ce.U)(h=>Vt(h)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe((0,ce.U)(h=>Vt(h)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function vr(f,h="emptyOnly"){const d=f.pathFromRoot;let m=0;if("always"!==h)for(m=d.length-1;m>=1;){const b=d[m],$=d[m-1];if(b.routeConfig&&""===b.routeConfig.path)m--;else{if($.component)break;m--}}return function mo(f){return f.reduce((h,d)=>({params:{...h.params,...d.params},data:{...h.data,...d.data},resolve:{...d.data,...h.resolve,...d.routeConfig?.data,...d._resolvedData}}),{params:{},data:{},resolve:{}})}(d.slice(m))}class Pr{constructor(h,d,m,b,$,z,ve,We,ft,bt,jt){this.url=h,this.params=d,this.queryParams=m,this.fragment=b,this.data=$,this.outlet=z,this.component=ve,this.routeConfig=We,this._urlSegment=ft,this._lastPathIndex=bt,this._resolve=jt}get title(){return this.data?.[Xt]}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=Vt(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Vt(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(m=>m.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class xo extends po{constructor(h,d){super(d),this.url=h,vo(this,d)}toString(){return yo(this._root)}}function vo(f,h){h.value._routerState=f,h.children.forEach(d=>vo(f,d))}function yo(f){const h=f.children.length>0?` { ${f.children.map(yo).join(", ")} } `:"";return`${f.value}${h}`}function Oo(f){if(f.snapshot){const h=f.snapshot,d=f._futureSnapshot;f.snapshot=d,en(h.queryParams,d.queryParams)||f.queryParams.next(d.queryParams),h.fragment!==d.fragment&&f.fragment.next(d.fragment),en(h.params,d.params)||f.params.next(d.params),function Vn(f,h){if(f.length!==h.length)return!1;for(let d=0;den(d.parameters,h[m].parameters))}(f.url,h.url);return d&&!(!f.parent!=!h.parent)&&(!f.parent||Jr(f.parent,h.parent))}function Fr(f,h,d){if(d&&f.shouldReuseRoute(h.value,d.value.snapshot)){const m=d.value;m._futureSnapshot=h.value;const b=function Yo(f,h,d){return h.children.map(m=>{for(const b of d.children)if(f.shouldReuseRoute(m.value,b.value.snapshot))return Fr(f,m,b);return Fr(f,m)})}(f,h,d);return new qn(m,b)}{if(f.shouldAttach(h.value)){const $=f.retrieve(h.value);if(null!==$){const z=$.route;return z.value._futureSnapshot=h.value,z.children=h.children.map(ve=>Fr(f,ve)),z}}const m=function si(f){return new Rr(new ge.X(f.url),new ge.X(f.params),new ge.X(f.queryParams),new ge.X(f.fragment),new ge.X(f.data),f.outlet,f.component,f)}(h.value),b=h.children.map($=>Fr(f,$));return new qn(m,b)}}const Ro="ngNavigationCancelingError";function Ur(f,h){const{redirectTo:d,navigationBehaviorOptions:m}=xn(h)?{redirectTo:h,navigationBehaviorOptions:void 0}:h,b=zr(!1,0,h);return b.url=d,b.navigationBehaviorOptions=m,b}function zr(f,h,d){const m=new Error("NavigationCancelingError: "+(f||""));return m[Ro]=!0,m.cancellationCode=h,d&&(m.url=d),m}function Do(f){return Gr(f)&&xn(f.url)}function Gr(f){return f&&f[Ro]}class Yr{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.injector=null,this.children=new fr,this.attachRef=null}}let fr=(()=>{class f{constructor(){this.contexts=new Map}onChildOutletCreated(d,m){const b=this.getOrCreateContext(d);b.outlet=m,this.contexts.set(d,b)}onChildOutletDestroyed(d){const m=this.getContext(d);m&&(m.outlet=null,m.attachRef=null)}onOutletDeactivated(){const d=this.contexts;return this.contexts=new Map,d}onOutletReAttached(d){this.contexts=d}getOrCreateContext(d){let m=this.getContext(d);return m||(m=new Yr,this.contexts.set(d,m)),m}getContext(d){return this.contexts.get(d)||null}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const hr=!1;let ai=(()=>{class f{constructor(){this.activated=null,this._activatedRoute=null,this.name=it,this.activateEvents=new o.vpe,this.deactivateEvents=new o.vpe,this.attachEvents=new o.vpe,this.detachEvents=new o.vpe,this.parentContexts=(0,o.f3M)(fr),this.location=(0,o.f3M)(o.s_b),this.changeDetector=(0,o.f3M)(o.sBO),this.environmentInjector=(0,o.f3M)(o.lqb)}ngOnChanges(d){if(d.name){const{firstChange:m,previousValue:b}=d.name;if(m)return;this.isTrackedInParentContexts(b)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(b)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name)}isTrackedInParentContexts(d){return this.parentContexts.getContext(d)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const d=this.parentContexts.getContext(this.name);d?.route&&(d.attachRef?this.attach(d.attachRef,d.route):this.activateWith(d.route,d.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new o.vHH(4012,hr);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new o.vHH(4012,hr);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new o.vHH(4012,hr);this.location.detach();const d=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(d.instance),d}attach(d,m){this.activated=d,this._activatedRoute=m,this.location.insert(d.hostView),this.attachEvents.emit(d.instance)}deactivate(){if(this.activated){const d=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(d)}}activateWith(d,m){if(this.isActivated)throw new o.vHH(4013,hr);this._activatedRoute=d;const b=this.location,z=d.snapshot.component,ve=this.parentContexts.getOrCreateContext(this.name).children,We=new nr(d,ve,b.injector);if(m&&function li(f){return!!f.resolveComponentFactory}(m)){const ft=m.resolveComponentFactory(z);this.activated=b.createComponent(ft,b.length,We)}else this.activated=b.createComponent(z,{index:b.length,injector:We,environmentInjector:m??this.environmentInjector});this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275dir=o.lG2({type:f,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[o.TTD]}),f})();class nr{constructor(h,d,m){this.route=h,this.childContexts=d,this.parent=m}get(h,d){return h===Rr?this.route:h===fr?this.childContexts:this.parent.get(h,d)}}let kr=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275cmp=o.Xpm({type:f,selectors:[["ng-component"]],standalone:!0,features:[o.jDz],decls:1,vars:0,template:function(d,m){1&d&&o._UZ(0,"router-outlet")},dependencies:[ai],encapsulation:2}),f})();function bo(f,h){return f.providers&&!f._injector&&(f._injector=(0,o.MMx)(f.providers,h,`Route: ${f.path}`)),f._injector??h}function Nr(f){const h=f.children&&f.children.map(Nr),d=h?{...f,children:h}:{...f};return!d.component&&!d.loadComponent&&(h||d.loadChildren)&&d.outlet&&d.outlet!==it&&(d.component=kr),d}function Zn(f){return f.outlet||it}function Lr(f,h){const d=f.filter(m=>Zn(m)===h);return d.push(...f.filter(m=>Zn(m)!==h)),d}function Po(f){if(!f)return null;if(f.routeConfig?._injector)return f.routeConfig._injector;for(let h=f.parent;h;h=h.parent){const d=h.routeConfig;if(d?._loadedInjector)return d._loadedInjector;if(d?._injector)return d._injector}return null}class Sn{constructor(h,d,m,b){this.routeReuseStrategy=h,this.futureState=d,this.currState=m,this.forwardEvent=b}activate(h){const d=this.futureState._root,m=this.currState?this.currState._root:null;this.deactivateChildRoutes(d,m,h),Oo(this.futureState.root),this.activateChildRoutes(d,m,h)}deactivateChildRoutes(h,d,m){const b=dr(d);h.children.forEach($=>{const z=$.value.outlet;this.deactivateRoutes($,b[z],m),delete b[z]}),Et(b,($,z)=>{this.deactivateRouteAndItsChildren($,m)})}deactivateRoutes(h,d,m){const b=h.value,$=d?d.value:null;if(b===$)if(b.component){const z=m.getContext(b.outlet);z&&this.deactivateChildRoutes(h,d,z.children)}else this.deactivateChildRoutes(h,d,m);else $&&this.deactivateRouteAndItsChildren(d,m)}deactivateRouteAndItsChildren(h,d){h.value.component&&this.routeReuseStrategy.shouldDetach(h.value.snapshot)?this.detachAndStoreRouteSubtree(h,d):this.deactivateRouteAndOutlet(h,d)}detachAndStoreRouteSubtree(h,d){const m=d.getContext(h.value.outlet),b=m&&h.value.component?m.children:d,$=dr(h);for(const z of Object.keys($))this.deactivateRouteAndItsChildren($[z],b);if(m&&m.outlet){const z=m.outlet.detach(),ve=m.children.onOutletDeactivated();this.routeReuseStrategy.store(h.value.snapshot,{componentRef:z,route:h,contexts:ve})}}deactivateRouteAndOutlet(h,d){const m=d.getContext(h.value.outlet),b=m&&h.value.component?m.children:d,$=dr(h);for(const z of Object.keys($))this.deactivateRouteAndItsChildren($[z],b);m&&m.outlet&&(m.outlet.deactivate(),m.children.onOutletDeactivated(),m.attachRef=null,m.resolver=null,m.route=null)}activateChildRoutes(h,d,m){const b=dr(d);h.children.forEach($=>{this.activateRoutes($,b[$.value.outlet],m),this.forwardEvent(new Or($.value.snapshot))}),h.children.length&&this.forwardEvent(new jr(h.value.snapshot))}activateRoutes(h,d,m){const b=h.value,$=d?d.value:null;if(Oo(b),b===$)if(b.component){const z=m.getOrCreateContext(b.outlet);this.activateChildRoutes(h,d,z.children)}else this.activateChildRoutes(h,d,m);else if(b.component){const z=m.getOrCreateContext(b.outlet);if(this.routeReuseStrategy.shouldAttach(b.snapshot)){const ve=this.routeReuseStrategy.retrieve(b.snapshot);this.routeReuseStrategy.store(b.snapshot,null),z.children.onOutletReAttached(ve.contexts),z.attachRef=ve.componentRef,z.route=ve.route.value,z.outlet&&z.outlet.attach(ve.componentRef,ve.route.value),Oo(ve.route.value),this.activateChildRoutes(h,null,z.children)}else{const ve=Po(b.snapshot),We=ve?.get(o._Vd)??null;z.attachRef=null,z.route=b,z.resolver=We,z.injector=ve,z.outlet&&z.outlet.activateWith(b,z.injector),this.activateChildRoutes(h,null,z.children)}}else this.activateChildRoutes(h,null,m)}}class Fo{constructor(h){this.path=h,this.route=this.path[this.path.length-1]}}class wo{constructor(h,d){this.component=h,this.route=d}}function ko(f,h,d){const m=f._root;return Kr(m,h?h._root:null,d,[m.value])}function to(f,h){const d=Symbol(),m=h.get(f,d);return m===d?"function"!=typeof f||(0,o.Z0I)(f)?h.get(f):f:m}function Kr(f,h,d,m,b={canDeactivateChecks:[],canActivateChecks:[]}){const $=dr(h);return f.children.forEach(z=>{(function no(f,h,d,m,b={canDeactivateChecks:[],canActivateChecks:[]}){const $=f.value,z=h?h.value:null,ve=d?d.getContext(f.value.outlet):null;if(z&&$.routeConfig===z.routeConfig){const We=function rr(f,h,d){if("function"==typeof d)return d(f,h);switch(d){case"pathParamsChange":return!He(f.url,h.url);case"pathParamsOrQueryParamsChange":return!He(f.url,h.url)||!en(f.queryParams,h.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Jr(f,h)||!en(f.queryParams,h.queryParams);default:return!Jr(f,h)}}(z,$,$.routeConfig.runGuardsAndResolvers);We?b.canActivateChecks.push(new Fo(m)):($.data=z.data,$._resolvedData=z._resolvedData),Kr(f,h,$.component?ve?ve.children:null:d,m,b),We&&ve&&ve.outlet&&ve.outlet.isActivated&&b.canDeactivateChecks.push(new wo(ve.outlet.component,z))}else z&&ro(h,ve,b),b.canActivateChecks.push(new Fo(m)),Kr(f,null,$.component?ve?ve.children:null:d,m,b)})(z,$[z.value.outlet],d,m.concat([z.value]),b),delete $[z.value.outlet]}),Et($,(z,ve)=>ro(z,d.getContext(ve),b)),b}function ro(f,h,d){const m=dr(f),b=f.value;Et(m,($,z)=>{ro($,b.component?h?h.children.getContext(z):null:h,d)}),d.canDeactivateChecks.push(new wo(b.component&&h&&h.outlet&&h.outlet.isActivated?h.outlet.component:null,b))}function hn(f){return"function"==typeof f}function Je(f){return f instanceof W||"EmptyError"===f?.name}const at=Symbol("INITIAL_VALUE");function Dt(){return(0,Ae.w)(f=>E(f.map(h=>h.pipe((0,De.q)(1),function ue(...f){const h=(0,G.yG)(f);return(0,Q.e)((d,m)=>{(h?ke(f,d,h):ke(f,d)).subscribe(m)})}(at)))).pipe((0,ce.U)(h=>{for(const d of h)if(!0!==d){if(d===at)return at;if(!1===d||d instanceof En)return d}return!0}),(0,de.h)(h=>h!==at),(0,De.q)(1)))}function br(f){return(0,Be.z)((0,Ue.b)(h=>{if(xn(h))throw Ur(0,h)}),(0,ce.U)(h=>!0===h))}const ci={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function ga(f,h,d,m,b){const $=Gi(f,h,d);return $.matched?function zi(f,h,d,m){const b=h.canMatch;if(!b||0===b.length)return(0,N.of)(!0);const $=b.map(z=>{const ve=to(z,f);return ut(function g(f){return f&&hn(f.canMatch)}(ve)?ve.canMatch(h,d):f.runInContext(()=>ve(h,d)))});return(0,N.of)($).pipe(Dt(),br())}(m=bo(h,m),h,d).pipe((0,ce.U)(z=>!0===z?$:{...ci})):(0,N.of)($)}function Gi(f,h,d){if(""===h.path)return"full"===h.pathMatch&&(f.hasChildren()||d.length>0)?{...ci}:{matched:!0,consumedSegments:[],remainingSegments:d,parameters:{},positionalParamSegments:{}};const b=(h.matcher||rn)(d,f,h);if(!b)return{...ci};const $={};Et(b.posParams,(ve,We)=>{$[We]=ve.path});const z=b.consumed.length>0?{...$,...b.consumed[b.consumed.length-1].parameters}:$;return{matched:!0,consumedSegments:b.consumed,remainingSegments:d.slice(b.consumed.length),parameters:z,positionalParamSegments:b.posParams??{}}}function Yi(f,h,d,m){if(d.length>0&&function oo(f,h,d){return d.some(m=>io(f,h,m)&&Zn(m)!==it)}(f,d,m)){const $=new xe(h,function lr(f,h,d,m){const b={};b[it]=m,m._sourceSegment=f,m._segmentIndexShift=h.length;for(const $ of d)if(""===$.path&&Zn($)!==it){const z=new xe([],{});z._sourceSegment=f,z._segmentIndexShift=h.length,b[Zn($)]=z}return b}(f,h,m,new xe(d,f.children)));return $._sourceSegment=f,$._segmentIndexShift=h.length,{segmentGroup:$,slicedSegments:[]}}if(0===d.length&&function As(f,h,d){return d.some(m=>io(f,h,m))}(f,d,m)){const $=new xe(f.segments,function Ms(f,h,d,m,b){const $={};for(const z of m)if(io(f,d,z)&&!b[Zn(z)]){const ve=new xe([],{});ve._sourceSegment=f,ve._segmentIndexShift=h.length,$[Zn(z)]=ve}return{...b,...$}}(f,h,d,m,f.children));return $._sourceSegment=f,$._segmentIndexShift=h.length,{segmentGroup:$,slicedSegments:d}}const b=new xe(f.segments,f.children);return b._sourceSegment=f,b._segmentIndexShift=h.length,{segmentGroup:b,slicedSegments:d}}function io(f,h,d){return(!(f.hasChildren()||h.length>0)||"full"!==d.pathMatch)&&""===d.path}function Br(f,h,d,m){return!!(Zn(f)===m||m!==it&&io(h,d,f))&&("**"===f.path||Gi(h,f,d).matched)}function Ts(f,h,d){return 0===h.length&&!f.children[d]}const qo=!1;class ui{constructor(h){this.segmentGroup=h||null}}class xs{constructor(h){this.urlTree=h}}function No(f){return oe(new ui(f))}function Mi(f){return oe(new xs(f))}class Rs{constructor(h,d,m,b,$){this.injector=h,this.configLoader=d,this.urlSerializer=m,this.urlTree=b,this.config=$,this.allowRedirects=!0}apply(){const h=Yi(this.urlTree.root,[],[],this.config).segmentGroup,d=new xe(h.segments,h.children);return this.expandSegmentGroup(this.injector,this.config,d,it).pipe((0,ce.U)($=>this.createUrlTree($n($),this.urlTree.queryParams,this.urlTree.fragment))).pipe(St($=>{if($ instanceof xs)return this.allowRedirects=!1,this.match($.urlTree);throw $ instanceof ui?this.noMatchError($):$}))}match(h){return this.expandSegmentGroup(this.injector,this.config,h.root,it).pipe((0,ce.U)(b=>this.createUrlTree($n(b),h.queryParams,h.fragment))).pipe(St(b=>{throw b instanceof ui?this.noMatchError(b):b}))}noMatchError(h){return new o.vHH(4002,qo)}createUrlTree(h,d,m){const b=sr(h);return new En(b,d,m)}expandSegmentGroup(h,d,m,b){return 0===m.segments.length&&m.hasChildren()?this.expandChildren(h,d,m).pipe((0,ce.U)($=>new xe([],$))):this.expandSegment(h,m,d,m.segments,b,!0)}expandChildren(h,d,m){const b=[];for(const $ of Object.keys(m.children))"primary"===$?b.unshift($):b.push($);return(0,x.D)(b).pipe((0,et.b)($=>{const z=m.children[$],ve=Lr(d,$);return this.expandSegmentGroup(h,ve,z,$).pipe((0,ce.U)(We=>({segment:We,outlet:$})))}),nn(($,z)=>($[z.outlet]=z.segment,$),{}),Rt())}expandSegment(h,d,m,b,$,z){return(0,x.D)(m).pipe((0,et.b)(ve=>this.expandSegmentAgainstRoute(h,d,m,ve,b,$,z).pipe(St(ft=>{if(ft instanceof ui)return(0,N.of)(null);throw ft}))),dt(ve=>!!ve),St((ve,We)=>{if(Je(ve))return Ts(d,b,$)?(0,N.of)(new xe([],{})):No(d);throw ve}))}expandSegmentAgainstRoute(h,d,m,b,$,z,ve){return Br(b,d,$,z)?void 0===b.redirectTo?this.matchSegmentAgainstRoute(h,d,b,$,z):ve&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z):No(d):No(d)}expandSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z){return"**"===b.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(h,m,b,z):this.expandRegularSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z)}expandWildCardWithParamsAgainstRouteUsingRedirect(h,d,m,b){const $=this.applyRedirectCommands([],m.redirectTo,{});return m.redirectTo.startsWith("/")?Mi($):this.lineralizeSegments(m,$).pipe((0,ne.z)(z=>{const ve=new xe(z,{});return this.expandSegment(h,ve,d,z,b,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z){const{matched:ve,consumedSegments:We,remainingSegments:ft,positionalParamSegments:bt}=Gi(d,b,$);if(!ve)return No(d);const jt=this.applyRedirectCommands(We,b.redirectTo,bt);return b.redirectTo.startsWith("/")?Mi(jt):this.lineralizeSegments(b,jt).pipe((0,ne.z)(wn=>this.expandSegment(h,d,m,wn.concat(ft),z,!1)))}matchSegmentAgainstRoute(h,d,m,b,$){return"**"===m.path?(h=bo(m,h),m.loadChildren?(m._loadedRoutes?(0,N.of)({routes:m._loadedRoutes,injector:m._loadedInjector}):this.configLoader.loadChildren(h,m)).pipe((0,ce.U)(ve=>(m._loadedRoutes=ve.routes,m._loadedInjector=ve.injector,new xe(b,{})))):(0,N.of)(new xe(b,{}))):ga(d,m,b,h).pipe((0,Ae.w)(({matched:z,consumedSegments:ve,remainingSegments:We})=>z?this.getChildConfig(h=m._injector??h,m,b).pipe((0,ne.z)(bt=>{const jt=bt.injector??h,wn=bt.routes,{segmentGroup:lo,slicedSegments:$o}=Yi(d,ve,We,wn),Ci=new xe(lo.segments,lo.children);if(0===$o.length&&Ci.hasChildren())return this.expandChildren(jt,wn,Ci).pipe((0,ce.U)(_i=>new xe(ve,_i)));if(0===wn.length&&0===$o.length)return(0,N.of)(new xe(ve,{}));const Hr=Zn(m)===$;return this.expandSegment(jt,Ci,wn,$o,Hr?it:$,!0).pipe((0,ce.U)(Ri=>new xe(ve.concat(Ri.segments),Ri.children)))})):No(d)))}getChildConfig(h,d,m){return d.children?(0,N.of)({routes:d.children,injector:h}):d.loadChildren?void 0!==d._loadedRoutes?(0,N.of)({routes:d._loadedRoutes,injector:d._loadedInjector}):function Xo(f,h,d,m){const b=h.canLoad;if(void 0===b||0===b.length)return(0,N.of)(!0);const $=b.map(z=>{const ve=to(z,f);return ut(function C(f){return f&&hn(f.canLoad)}(ve)?ve.canLoad(h,d):f.runInContext(()=>ve(h,d)))});return(0,N.of)($).pipe(Dt(),br())}(h,d,m).pipe((0,ne.z)(b=>b?this.configLoader.loadChildren(h,d).pipe((0,Ue.b)($=>{d._loadedRoutes=$.routes,d._loadedInjector=$.injector})):function Wi(f){return oe(zr(qo,3))}())):(0,N.of)({routes:[],injector:h})}lineralizeSegments(h,d){let m=[],b=d.root;for(;;){if(m=m.concat(b.segments),0===b.numberOfChildren)return(0,N.of)(m);if(b.numberOfChildren>1||!b.children[it])return oe(new o.vHH(4e3,qo));b=b.children[it]}}applyRedirectCommands(h,d,m){return this.applyRedirectCreateUrlTree(d,this.urlSerializer.parse(d),h,m)}applyRedirectCreateUrlTree(h,d,m,b){const $=this.createSegmentGroup(h,d.root,m,b);return new En($,this.createQueryParams(d.queryParams,this.urlTree.queryParams),d.fragment)}createQueryParams(h,d){const m={};return Et(h,(b,$)=>{if("string"==typeof b&&b.startsWith(":")){const ve=b.substring(1);m[$]=d[ve]}else m[$]=b}),m}createSegmentGroup(h,d,m,b){const $=this.createSegments(h,d.segments,m,b);let z={};return Et(d.children,(ve,We)=>{z[We]=this.createSegmentGroup(h,ve,m,b)}),new xe($,z)}createSegments(h,d,m,b){return d.map($=>$.path.startsWith(":")?this.findPosParam(h,$,b):this.findOrReturn($,m))}findPosParam(h,d,m){const b=m[d.path.substring(1)];if(!b)throw new o.vHH(4001,qo);return b}findOrReturn(h,d){let m=0;for(const b of d){if(b.path===h.path)return d.splice(m),b;m++}return h}}class A{}class ae{constructor(h,d,m,b,$,z,ve){this.injector=h,this.rootComponentType=d,this.config=m,this.urlTree=b,this.url=$,this.paramsInheritanceStrategy=z,this.urlSerializer=ve}recognize(){const h=Yi(this.urlTree.root,[],[],this.config.filter(d=>void 0===d.redirectTo)).segmentGroup;return this.processSegmentGroup(this.injector,this.config,h,it).pipe((0,ce.U)(d=>{if(null===d)return null;const m=new Pr([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},it,this.rootComponentType,null,this.urlTree.root,-1,{}),b=new qn(m,d),$=new xo(this.url,b);return this.inheritParamsAndData($._root),$}))}inheritParamsAndData(h){const d=h.value,m=vr(d,this.paramsInheritanceStrategy);d.params=Object.freeze(m.params),d.data=Object.freeze(m.data),h.children.forEach(b=>this.inheritParamsAndData(b))}processSegmentGroup(h,d,m,b){return 0===m.segments.length&&m.hasChildren()?this.processChildren(h,d,m):this.processSegment(h,d,m,m.segments,b)}processChildren(h,d,m){return(0,x.D)(Object.keys(m.children)).pipe((0,et.b)(b=>{const $=m.children[b],z=Lr(d,b);return this.processSegmentGroup(h,z,$,b)}),nn((b,$)=>b&&$?(b.push(...$),b):null),(0,Kt.o)(b=>null!==b),Ee(null),Rt(),(0,ce.U)(b=>{if(null===b)return null;const $=qt(b);return function $e(f){f.sort((h,d)=>h.value.outlet===it?-1:d.value.outlet===it?1:h.value.outlet.localeCompare(d.value.outlet))}($),$}))}processSegment(h,d,m,b,$){return(0,x.D)(d).pipe((0,et.b)(z=>this.processSegmentAgainstRoute(z._injector??h,z,m,b,$)),dt(z=>!!z),St(z=>{if(Je(z))return Ts(m,b,$)?(0,N.of)([]):(0,N.of)(null);throw z}))}processSegmentAgainstRoute(h,d,m,b,$){if(d.redirectTo||!Br(d,m,b,$))return(0,N.of)(null);let z;if("**"===d.path){const ve=b.length>0?ht(b).parameters:{},We=Jt(m)+b.length,ft=new Pr(b,ve,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,yn(d),Zn(d),d.component??d._loadedComponent??null,d,un(m),We,Wn(d));z=(0,N.of)({snapshot:ft,consumedSegments:[],remainingSegments:[]})}else z=ga(m,d,b,h).pipe((0,ce.U)(({matched:ve,consumedSegments:We,remainingSegments:ft,parameters:bt})=>{if(!ve)return null;const jt=Jt(m)+We.length;return{snapshot:new Pr(We,bt,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,yn(d),Zn(d),d.component??d._loadedComponent??null,d,un(m),jt,Wn(d)),consumedSegments:We,remainingSegments:ft}}));return z.pipe((0,Ae.w)(ve=>{if(null===ve)return(0,N.of)(null);const{snapshot:We,consumedSegments:ft,remainingSegments:bt}=ve;h=d._injector??h;const jt=d._loadedInjector??h,wn=function Xe(f){return f.children?f.children:f.loadChildren?f._loadedRoutes:[]}(d),{segmentGroup:lo,slicedSegments:$o}=Yi(m,ft,bt,wn.filter(Hr=>void 0===Hr.redirectTo));if(0===$o.length&&lo.hasChildren())return this.processChildren(jt,wn,lo).pipe((0,ce.U)(Hr=>null===Hr?null:[new qn(We,Hr)]));if(0===wn.length&&0===$o.length)return(0,N.of)([new qn(We,[])]);const Ci=Zn(d)===$;return this.processSegment(jt,wn,lo,$o,Ci?it:$).pipe((0,ce.U)(Hr=>null===Hr?null:[new qn(We,Hr)]))}))}}function lt(f){const h=f.value.routeConfig;return h&&""===h.path&&void 0===h.redirectTo}function qt(f){const h=[],d=new Set;for(const m of f){if(!lt(m)){h.push(m);continue}const b=h.find($=>m.value.routeConfig===$.value.routeConfig);void 0!==b?(b.children.push(...m.children),d.add(b)):h.push(m)}for(const m of d){const b=qt(m.children);h.push(new qn(m.value,b))}return h.filter(m=>!d.has(m))}function un(f){let h=f;for(;h._sourceSegment;)h=h._sourceSegment;return h}function Jt(f){let h=f,d=h._segmentIndexShift??0;for(;h._sourceSegment;)h=h._sourceSegment,d+=h._segmentIndexShift??0;return d-1}function yn(f){return f.data||{}}function Wn(f){return f.resolve||{}}function Ai(f){return"string"==typeof f.title||null===f.title}function so(f){return(0,Ae.w)(h=>{const d=f(h);return d?(0,x.D)(d).pipe((0,ce.U)(()=>h)):(0,N.of)(h)})}class gl{constructor(h){this.router=h,this.currentNavigation=null}setupNavigations(h){const d=this.router.events;return h.pipe((0,de.h)(m=>0!==m.id),(0,ce.U)(m=>({...m,extractedUrl:this.router.urlHandlingStrategy.extract(m.rawUrl)})),(0,Ae.w)(m=>{let b=!1,$=!1;return(0,N.of)(m).pipe((0,Ue.b)(z=>{this.currentNavigation={id:z.id,initialUrl:z.rawUrl,extractedUrl:z.extractedUrl,trigger:z.source,extras:z.extras,previousNavigation:this.router.lastSuccessfulNavigation?{...this.router.lastSuccessfulNavigation,previousNavigation:null}:null}}),(0,Ae.w)(z=>{const ve=this.router.browserUrlTree.toString(),We=!this.router.navigated||z.extractedUrl.toString()!==ve||ve!==this.router.currentUrlTree.toString();if(("reload"===this.router.onSameUrlNavigation||We)&&this.router.urlHandlingStrategy.shouldProcessUrl(z.rawUrl))return va(z.source)&&(this.router.browserUrlTree=z.extractedUrl),(0,N.of)(z).pipe((0,Ae.w)(bt=>{const jt=this.router.transitions.getValue();return d.next(new Mt(bt.id,this.router.serializeUrl(bt.extractedUrl),bt.source,bt.restoredState)),jt!==this.router.transitions.getValue()?be.E:Promise.resolve(bt)}),function Ki(f,h,d,m){return(0,Ae.w)(b=>function ma(f,h,d,m,b){return new Rs(f,h,d,m,b).apply()}(f,h,d,b.extractedUrl,m).pipe((0,ce.U)($=>({...b,urlAfterRedirects:$}))))}(this.router.ngModule.injector,this.router.configLoader,this.router.urlSerializer,this.router.config),(0,Ue.b)(bt=>{this.currentNavigation={...this.currentNavigation,finalUrl:bt.urlAfterRedirects},m.urlAfterRedirects=bt.urlAfterRedirects}),function Eo(f,h,d,m,b){return(0,ne.z)($=>function H(f,h,d,m,b,$,z="emptyOnly"){return new ae(f,h,d,m,b,z,$).recognize().pipe((0,Ae.w)(ve=>null===ve?function D(f){return new M.y(h=>h.error(f))}(new A):(0,N.of)(ve)))}(f,h,d,$.urlAfterRedirects,m.serialize($.urlAfterRedirects),m,b).pipe((0,ce.U)(z=>({...$,targetSnapshot:z}))))}(this.router.ngModule.injector,this.router.rootComponentType,this.router.config,this.router.urlSerializer,this.router.paramsInheritanceStrategy),(0,Ue.b)(bt=>{if(m.targetSnapshot=bt.targetSnapshot,"eager"===this.router.urlUpdateStrategy){if(!bt.extras.skipLocationChange){const wn=this.router.urlHandlingStrategy.merge(bt.urlAfterRedirects,bt.rawUrl);this.router.setBrowserUrl(wn,bt)}this.router.browserUrlTree=bt.urlAfterRedirects}const jt=new Rn(bt.id,this.router.serializeUrl(bt.extractedUrl),this.router.serializeUrl(bt.urlAfterRedirects),bt.targetSnapshot);d.next(jt)}));if(We&&this.router.rawUrlTree&&this.router.urlHandlingStrategy.shouldProcessUrl(this.router.rawUrlTree)){const{id:jt,extractedUrl:wn,source:lo,restoredState:$o,extras:Ci}=z,Hr=new Mt(jt,this.router.serializeUrl(wn),lo,$o);d.next(Hr);const Cr=Gn(wn,this.router.rootComponentType).snapshot;return m={...z,targetSnapshot:Cr,urlAfterRedirects:wn,extras:{...Ci,skipLocationChange:!1,replaceUrl:!1}},(0,N.of)(m)}return this.router.rawUrlTree=z.rawUrl,z.resolve(null),be.E}),(0,Ue.b)(z=>{const ve=new Pn(z.id,this.router.serializeUrl(z.extractedUrl),this.router.serializeUrl(z.urlAfterRedirects),z.targetSnapshot);this.router.triggerEvent(ve)}),(0,ce.U)(z=>m={...z,guards:ko(z.targetSnapshot,z.currentSnapshot,this.router.rootContexts)}),function Zt(f,h){return(0,ne.z)(d=>{const{targetSnapshot:m,currentSnapshot:b,guards:{canActivateChecks:$,canDeactivateChecks:z}}=d;return 0===z.length&&0===$.length?(0,N.of)({...d,guardsResult:!0}):function bn(f,h,d,m){return(0,x.D)(f).pipe((0,ne.z)(b=>function $r(f,h,d,m,b){const $=h&&h.routeConfig?h.routeConfig.canDeactivate:null;if(!$||0===$.length)return(0,N.of)(!0);const z=$.map(ve=>{const We=Po(h)??b,ft=to(ve,We);return ut(function a(f){return f&&hn(f.canDeactivate)}(ft)?ft.canDeactivate(f,h,d,m):We.runInContext(()=>ft(f,h,d,m))).pipe(dt())});return(0,N.of)(z).pipe(Dt())}(b.component,b.route,d,h,m)),dt(b=>!0!==b,!0))}(z,m,b,f).pipe((0,ne.z)(ve=>ve&&function Ui(f){return"boolean"==typeof f}(ve)?function Ve(f,h,d,m){return(0,x.D)(h).pipe((0,et.b)(b=>ke(function yr(f,h){return null!==f&&h&&h(new Zr(f)),(0,N.of)(!0)}(b.route.parent,m),function At(f,h){return null!==f&&h&&h(new xr(f)),(0,N.of)(!0)}(b.route,m),function Mn(f,h,d){const m=h[h.length-1],$=h.slice(0,h.length-1).reverse().map(z=>function Jn(f){const h=f.routeConfig?f.routeConfig.canActivateChild:null;return h&&0!==h.length?{node:f,guards:h}:null}(z)).filter(z=>null!==z).map(z=>ie(()=>{const ve=z.guards.map(We=>{const ft=Po(z.node)??d,bt=to(We,ft);return ut(function c(f){return f&&hn(f.canActivateChild)}(bt)?bt.canActivateChild(m,f):ft.runInContext(()=>bt(m,f))).pipe(dt())});return(0,N.of)(ve).pipe(Dt())}));return(0,N.of)($).pipe(Dt())}(f,b.path,d),function Dr(f,h,d){const m=h.routeConfig?h.routeConfig.canActivate:null;if(!m||0===m.length)return(0,N.of)(!0);const b=m.map($=>ie(()=>{const z=Po(h)??d,ve=to($,z);return ut(function s(f){return f&&hn(f.canActivate)}(ve)?ve.canActivate(h,f):z.runInContext(()=>ve(h,f))).pipe(dt())}));return(0,N.of)(b).pipe(Dt())}(f,b.route,d))),dt(b=>!0!==b,!0))}(m,$,f,h):(0,N.of)(ve)),(0,ce.U)(ve=>({...d,guardsResult:ve})))})}(this.router.ngModule.injector,z=>this.router.triggerEvent(z)),(0,Ue.b)(z=>{if(m.guardsResult=z.guardsResult,xn(z.guardsResult))throw Ur(0,z.guardsResult);const ve=new ur(z.id,this.router.serializeUrl(z.extractedUrl),this.router.serializeUrl(z.urlAfterRedirects),z.targetSnapshot,!!z.guardsResult);this.router.triggerEvent(ve)}),(0,de.h)(z=>!!z.guardsResult||(this.router.restoreHistory(z),this.router.cancelNavigationTransition(z,"",3),!1)),so(z=>{if(z.guards.canActivateChecks.length)return(0,N.of)(z).pipe((0,Ue.b)(ve=>{const We=new mr(ve.id,this.router.serializeUrl(ve.extractedUrl),this.router.serializeUrl(ve.urlAfterRedirects),ve.targetSnapshot);this.router.triggerEvent(We)}),(0,Ae.w)(ve=>{let We=!1;return(0,N.of)(ve).pipe(function pr(f,h){return(0,ne.z)(d=>{const{targetSnapshot:m,guards:{canActivateChecks:b}}=d;if(!b.length)return(0,N.of)(d);let $=0;return(0,x.D)(b).pipe((0,et.b)(z=>function Vr(f,h,d,m){const b=f.routeConfig,$=f._resolve;return void 0!==b?.title&&!Ai(b)&&($[Xt]=b.title),function Mr(f,h,d,m){const b=function Lo(f){return[...Object.keys(f),...Object.getOwnPropertySymbols(f)]}(f);if(0===b.length)return(0,N.of)({});const $={};return(0,x.D)(b).pipe((0,ne.z)(z=>function di(f,h,d,m){const b=Po(h)??m,$=to(f,b);return ut($.resolve?$.resolve(h,d):b.runInContext(()=>$(h,d)))}(f[z],h,d,m).pipe(dt(),(0,Ue.b)(ve=>{$[z]=ve}))),wt(1),function pn(f){return(0,ce.U)(()=>f)}($),St(z=>Je(z)?be.E:oe(z)))}($,f,h,m).pipe((0,ce.U)(z=>(f._resolvedData=z,f.data=vr(f,d).resolve,b&&Ai(b)&&(f.data[Xt]=b.title),null)))}(z.route,m,f,h)),(0,Ue.b)(()=>$++),wt(1),(0,ne.z)(z=>$===b.length?(0,N.of)(d):be.E))})}(this.router.paramsInheritanceStrategy,this.router.ngModule.injector),(0,Ue.b)({next:()=>We=!0,complete:()=>{We||(this.router.restoreHistory(ve),this.router.cancelNavigationTransition(ve,"",2))}}))}),(0,Ue.b)(ve=>{const We=new an(ve.id,this.router.serializeUrl(ve.extractedUrl),this.router.serializeUrl(ve.urlAfterRedirects),ve.targetSnapshot);this.router.triggerEvent(We)}))}),so(z=>{const ve=We=>{const ft=[];We.routeConfig?.loadComponent&&!We.routeConfig._loadedComponent&&ft.push(this.router.configLoader.loadComponent(We.routeConfig).pipe((0,Ue.b)(bt=>{We.component=bt}),(0,ce.U)(()=>{})));for(const bt of We.children)ft.push(...ve(bt));return ft};return E(ve(z.targetSnapshot.root)).pipe(Ee(),(0,De.q)(1))}),so(()=>this.router.afterPreactivation()),(0,ce.U)(z=>{const ve=function Go(f,h,d){const m=Fr(f,h._root,d?d._root:void 0);return new Sr(m,h)}(this.router.routeReuseStrategy,z.targetSnapshot,z.currentRouterState);return m={...z,targetRouterState:ve}}),(0,Ue.b)(z=>{this.router.currentUrlTree=z.urlAfterRedirects,this.router.rawUrlTree=this.router.urlHandlingStrategy.merge(z.urlAfterRedirects,z.rawUrl),this.router.routerState=z.targetRouterState,"deferred"===this.router.urlUpdateStrategy&&(z.extras.skipLocationChange||this.router.setBrowserUrl(this.router.rawUrlTree,z),this.router.browserUrlTree=z.urlAfterRedirects)}),((f,h,d)=>(0,ce.U)(m=>(new Sn(h,m.targetRouterState,m.currentRouterState,d).activate(f),m)))(this.router.rootContexts,this.router.routeReuseStrategy,z=>this.router.triggerEvent(z)),(0,Ue.b)({next(){b=!0},complete(){b=!0}}),(0,Pt.x)(()=>{b||$||this.router.cancelNavigationTransition(m,"",1),this.currentNavigation?.id===m.id&&(this.currentNavigation=null)}),St(z=>{if($=!0,Gr(z)){Do(z)||(this.router.navigated=!0,this.router.restoreHistory(m,!0));const ve=new Bt(m.id,this.router.serializeUrl(m.extractedUrl),z.message,z.cancellationCode);if(d.next(ve),Do(z)){const We=this.router.urlHandlingStrategy.merge(z.url,this.router.rawUrlTree),ft={skipLocationChange:m.extras.skipLocationChange,replaceUrl:"eager"===this.router.urlUpdateStrategy||va(m.source)};this.router.scheduleNavigation(We,"imperative",null,ft,{resolve:m.resolve,reject:m.reject,promise:m.promise})}else m.resolve(!1)}else{this.router.restoreHistory(m,!0);const ve=new An(m.id,this.router.serializeUrl(m.extractedUrl),z,m.targetSnapshot??void 0);d.next(ve);try{m.resolve(this.router.errorHandler(z))}catch(We){m.reject(We)}}return be.E}))}))}}function va(f){return"imperative"!==f}let hi=(()=>{class f{buildTitle(d){let m,b=d.root;for(;void 0!==b;)m=this.getResolvedTitleForRoute(b)??m,b=b.children.find($=>$.outlet===it);return m}getResolvedTitleForRoute(d){return d.data[Xt]}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(Ps)},providedIn:"root"}),f})(),Ps=(()=>{class f extends hi{constructor(d){super(),this.title=d}updateTitle(d){const m=this.buildTitle(d);void 0!==m&&this.title.setTitle(m)}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(Ut.Dx))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})(),ya=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(Gu)},providedIn:"root"}),f})();class ml{shouldDetach(h){return!1}store(h,d){}shouldAttach(h){return!1}retrieve(h){return null}shouldReuseRoute(h,d){return h.routeConfig===d.routeConfig}}let Gu=(()=>{class f extends ml{}return f.\u0275fac=function(){let h;return function(m){return(h||(h=o.n5z(f)))(m||f)}}(),f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const pi=new o.OlP("",{providedIn:"root",factory:()=>({})}),ao=new o.OlP("ROUTES");let Xi=(()=>{class f{constructor(d,m){this.injector=d,this.compiler=m,this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap}loadComponent(d){if(this.componentLoaders.get(d))return this.componentLoaders.get(d);if(d._loadedComponent)return(0,N.of)(d._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(d);const m=ut(d.loadComponent()).pipe((0,ce.U)(Zo),(0,Ue.b)($=>{this.onLoadEndListener&&this.onLoadEndListener(d),d._loadedComponent=$}),(0,Pt.x)(()=>{this.componentLoaders.delete(d)})),b=new k(m,()=>new O.x).pipe(T());return this.componentLoaders.set(d,b),b}loadChildren(d,m){if(this.childrenLoaders.get(m))return this.childrenLoaders.get(m);if(m._loadedRoutes)return(0,N.of)({routes:m._loadedRoutes,injector:m._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(m);const $=this.loadModuleFactoryOrRoutes(m.loadChildren).pipe((0,ce.U)(ve=>{this.onLoadEndListener&&this.onLoadEndListener(m);let We,ft,bt=!1;Array.isArray(ve)?ft=ve:(We=ve.create(d).injector,ft=Yt(We.get(ao,[],o.XFs.Self|o.XFs.Optional)));return{routes:ft.map(Nr),injector:We}}),(0,Pt.x)(()=>{this.childrenLoaders.delete(m)})),z=new k($,()=>new O.x).pipe(T());return this.childrenLoaders.set(m,z),z}loadModuleFactoryOrRoutes(d){return ut(d()).pipe((0,ce.U)(Zo),(0,ne.z)(b=>b instanceof o.YKP||Array.isArray(b)?(0,N.of)(b):(0,x.D)(this.compiler.compileModuleAsync(b))))}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(o.zs3),o.LFG(o.Sil))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();function Zo(f){return function ba(f){return f&&"object"==typeof f&&"default"in f}(f)?f.default:f}let vl=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(gi)},providedIn:"root"}),f})(),gi=(()=>{class f{shouldProcessUrl(d){return!0}extract(d){return d}merge(d,m){return d}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();function Zi(f){throw f}function Wu(f,h,d){return h.parse("/")}const Ca={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},_a={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};function Xr(){const f=(0,o.f3M)(pt),h=(0,o.f3M)(fr),d=(0,o.f3M)(te.Ye),m=(0,o.f3M)(o.zs3),b=(0,o.f3M)(o.Sil),$=(0,o.f3M)(ao,{optional:!0})??[],z=(0,o.f3M)(pi,{optional:!0})??{},ve=new or(null,f,h,d,m,b,Yt($));return function yl(f,h){f.errorHandler&&(h.errorHandler=f.errorHandler),f.malformedUriErrorHandler&&(h.malformedUriErrorHandler=f.malformedUriErrorHandler),f.onSameUrlNavigation&&(h.onSameUrlNavigation=f.onSameUrlNavigation),f.paramsInheritanceStrategy&&(h.paramsInheritanceStrategy=f.paramsInheritanceStrategy),f.urlUpdateStrategy&&(h.urlUpdateStrategy=f.urlUpdateStrategy),f.canceledNavigationResolution&&(h.canceledNavigationResolution=f.canceledNavigationResolution)}(z,ve),ve}let or=(()=>{class f{constructor(d,m,b,$,z,ve,We){this.rootComponentType=d,this.urlSerializer=m,this.rootContexts=b,this.location=$,this.config=We,this.lastSuccessfulNavigation=null,this.disposed=!1,this.navigationId=0,this.currentPageId=0,this.isNgZoneEnabled=!1,this.events=new O.x,this.errorHandler=Zi,this.malformedUriErrorHandler=Wu,this.navigated=!1,this.lastSuccessfulId=-1,this.afterPreactivation=()=>(0,N.of)(void 0),this.urlHandlingStrategy=(0,o.f3M)(vl),this.routeReuseStrategy=(0,o.f3M)(ya),this.titleStrategy=(0,o.f3M)(hi),this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.canceledNavigationResolution="replace",this.navigationTransitions=new gl(this),this.configLoader=z.get(Xi),this.configLoader.onLoadEndListener=wn=>this.triggerEvent(new ho(wn)),this.configLoader.onLoadStartListener=wn=>this.triggerEvent(new fo(wn)),this.ngModule=z.get(o.h0i),this.console=z.get(o.c2e);const jt=z.get(o.R0b);this.isNgZoneEnabled=jt instanceof o.R0b&&o.R0b.isInAngularZone(),this.resetConfig(We),this.currentUrlTree=new En,this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=Gn(this.currentUrlTree,this.rootComponentType),this.transitions=new ge.X({id:0,targetPageId:0,currentUrlTree:this.currentUrlTree,extractedUrl:this.urlHandlingStrategy.extract(this.currentUrlTree),urlAfterRedirects:this.urlHandlingStrategy.extract(this.currentUrlTree),rawUrl:this.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:"imperative",restoredState:null,currentSnapshot:this.routerState.snapshot,targetSnapshot:null,currentRouterState:this.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.navigations=this.navigationTransitions.setupNavigations(this.transitions),this.processNavigations()}get browserPageId(){return this.location.getState()?.\u0275routerPageId}resetRootComponentType(d){this.rootComponentType=d,this.routerState.root.component=this.rootComponentType}setTransition(d){this.transitions.next({...this.transitions.value,...d})}initialNavigation(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(d=>{const m="popstate"===d.type?"popstate":"hashchange";"popstate"===m&&setTimeout(()=>{const b={replaceUrl:!0},$=d.state?.navigationId?d.state:null;if(d.state){const ve={...d.state};delete ve.navigationId,delete ve.\u0275routerPageId,0!==Object.keys(ve).length&&(b.state=ve)}const z=this.parseUrl(d.url);this.scheduleNavigation(z,m,$,b)},0)}))}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}triggerEvent(d){this.events.next(d)}resetConfig(d){this.config=d.map(Nr),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.transitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0}createUrlTree(d,m={}){const{relativeTo:b,queryParams:$,fragment:z,queryParamsHandling:ve,preserveFragment:We}=m,ft=b||this.routerState.root,bt=We?this.currentUrlTree.fragment:z;let jt=null;switch(ve){case"merge":jt={...this.currentUrlTree.queryParams,...$};break;case"preserve":jt=this.currentUrlTree.queryParams;break;default:jt=$||null}return null!==jt&&(jt=this.removeEmptyProps(jt)),gr(ft,this.currentUrlTree,d,jt,bt??null)}navigateByUrl(d,m={skipLocationChange:!1}){const b=xn(d)?d:this.parseUrl(d),$=this.urlHandlingStrategy.merge(b,this.rawUrlTree);return this.scheduleNavigation($,"imperative",null,m)}navigate(d,m={skipLocationChange:!1}){return function Ji(f){for(let h=0;h{const $=d[b];return null!=$&&(m[b]=$),m},{})}processNavigations(){this.navigations.subscribe(d=>{this.navigated=!0,this.lastSuccessfulId=d.id,this.currentPageId=d.targetPageId,this.events.next(new Wt(d.id,this.serializeUrl(d.extractedUrl),this.serializeUrl(this.currentUrlTree))),this.lastSuccessfulNavigation=this.getCurrentNavigation(),this.titleStrategy?.updateTitle(this.routerState.snapshot),d.resolve(!0)},d=>{this.console.warn(`Unhandled Navigation Error: ${d}`)})}scheduleNavigation(d,m,b,$,z){if(this.disposed)return Promise.resolve(!1);let ve,We,ft;z?(ve=z.resolve,We=z.reject,ft=z.promise):ft=new Promise((wn,lo)=>{ve=wn,We=lo});const bt=++this.navigationId;let jt;return"computed"===this.canceledNavigationResolution?(0===this.currentPageId&&(b=this.location.getState()),jt=b&&b.\u0275routerPageId?b.\u0275routerPageId:$.replaceUrl||$.skipLocationChange?this.browserPageId??0:(this.browserPageId??0)+1):jt=0,this.setTransition({id:bt,targetPageId:jt,source:m,restoredState:b,currentUrlTree:this.currentUrlTree,rawUrl:d,extras:$,resolve:ve,reject:We,promise:ft,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),ft.catch(wn=>Promise.reject(wn))}setBrowserUrl(d,m){const b=this.urlSerializer.serialize(d),$={...m.extras.state,...this.generateNgRouterState(m.id,m.targetPageId)};this.location.isCurrentPathEqualTo(b)||m.extras.replaceUrl?this.location.replaceState(b,"",$):this.location.go(b,"",$)}restoreHistory(d,m=!1){if("computed"===this.canceledNavigationResolution){const b=this.currentPageId-d.targetPageId;"popstate"!==d.source&&"eager"!==this.urlUpdateStrategy&&this.currentUrlTree!==this.getCurrentNavigation()?.finalUrl||0===b?this.currentUrlTree===this.getCurrentNavigation()?.finalUrl&&0===b&&(this.resetState(d),this.browserUrlTree=d.currentUrlTree,this.resetUrlToCurrentUrlTree()):this.location.historyGo(b)}else"replace"===this.canceledNavigationResolution&&(m&&this.resetState(d),this.resetUrlToCurrentUrlTree())}resetState(d){this.routerState=d.currentRouterState,this.currentUrlTree=d.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,d.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}cancelNavigationTransition(d,m,b){const $=new Bt(d.id,this.serializeUrl(d.extractedUrl),m,b);this.triggerEvent($),d.resolve(!1)}generateNgRouterState(d,m){return"computed"===this.canceledNavigationResolution?{navigationId:d,\u0275routerPageId:m}:{navigationId:d}}}return f.\u0275fac=function(d){o.$Z()},f.\u0275prov=o.Yz7({token:f,factory:function(){return Xr()},providedIn:"root"}),f})(),mi=(()=>{class f{constructor(d,m,b,$,z,ve){this.router=d,this.route=m,this.tabIndexAttribute=b,this.renderer=$,this.el=z,this.locationStrategy=ve,this._preserveFragment=!1,this._skipLocationChange=!1,this._replaceUrl=!1,this.href=null,this.commands=null,this.onChanges=new O.x;const We=z.nativeElement.tagName;this.isAnchorElement="A"===We||"AREA"===We,this.isAnchorElement?this.subscription=d.events.subscribe(ft=>{ft instanceof Wt&&this.updateHref()}):this.setTabIndexIfNotOnNativeEl("0")}set preserveFragment(d){this._preserveFragment=(0,o.D6c)(d)}get preserveFragment(){return this._preserveFragment}set skipLocationChange(d){this._skipLocationChange=(0,o.D6c)(d)}get skipLocationChange(){return this._skipLocationChange}set replaceUrl(d){this._replaceUrl=(0,o.D6c)(d)}get replaceUrl(){return this._replaceUrl}setTabIndexIfNotOnNativeEl(d){null!=this.tabIndexAttribute||this.isAnchorElement||this.applyAttributeValue("tabindex",d)}ngOnChanges(d){this.isAnchorElement&&this.updateHref(),this.onChanges.next(this)}set routerLink(d){null!=d?(this.commands=Array.isArray(d)?d:[d],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(d,m,b,$,z){return!!(null===this.urlTree||this.isAnchorElement&&(0!==d||m||b||$||z||"string"==typeof this.target&&"_self"!=this.target))||(this.router.navigateByUrl(this.urlTree,{skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state}),!this.isAnchorElement)}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){this.href=null!==this.urlTree&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(this.urlTree)):null;const d=null===this.href?null:(0,o.P3R)(this.href,this.el.nativeElement.tagName.toLowerCase(),"href");this.applyAttributeValue("href",d)}applyAttributeValue(d,m){const b=this.renderer,$=this.el.nativeElement;null!==m?b.setAttribute($,d,m):b.removeAttribute($,d)}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}}return f.\u0275fac=function(d){return new(d||f)(o.Y36(or),o.Y36(Rr),o.$8M("tabindex"),o.Y36(o.Qsj),o.Y36(o.SBq),o.Y36(te.S$))},f.\u0275dir=o.lG2({type:f,selectors:[["","routerLink",""]],hostVars:1,hostBindings:function(d,m){1&d&&o.NdJ("click",function($){return m.onClick($.button,$.ctrlKey,$.shiftKey,$.altKey,$.metaKey)}),2&d&&o.uIk("target",m.target)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",relativeTo:"relativeTo",preserveFragment:"preserveFragment",skipLocationChange:"skipLocationChange",replaceUrl:"replaceUrl",routerLink:"routerLink"},standalone:!0,features:[o.TTD]}),f})();class es{}let Dl=(()=>{class f{preload(d,m){return m().pipe(St(()=>(0,N.of)(null)))}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})(),wa=(()=>{class f{constructor(d,m,b,$,z){this.router=d,this.injector=b,this.preloadingStrategy=$,this.loader=z}setUpPreloading(){this.subscription=this.router.events.pipe((0,de.h)(d=>d instanceof Wt),(0,et.b)(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(d,m){const b=[];for(const $ of m){$.providers&&!$._injector&&($._injector=(0,o.MMx)($.providers,d,`Route: ${$.path}`));const z=$._injector??d,ve=$._loadedInjector??z;$.loadChildren&&!$._loadedRoutes&&void 0===$.canLoad||$.loadComponent&&!$._loadedComponent?b.push(this.preloadConfig(z,$)):($.children||$._loadedRoutes)&&b.push(this.processRoutes(ve,$.children??$._loadedRoutes))}return(0,x.D)(b).pipe((0,K.J)())}preloadConfig(d,m){return this.preloadingStrategy.preload(m,()=>{let b;b=m.loadChildren&&void 0===m.canLoad?this.loader.loadChildren(d,m):(0,N.of)(null);const $=b.pipe((0,ne.z)(z=>null===z?(0,N.of)(void 0):(m._loadedRoutes=z.routes,m._loadedInjector=z.injector,this.processRoutes(z.injector??d,z.routes))));if(m.loadComponent&&!m._loadedComponent){const z=this.loader.loadComponent(m);return(0,x.D)([$,z]).pipe((0,K.J)())}return $})}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(or),o.LFG(o.Sil),o.LFG(o.lqb),o.LFG(es),o.LFG(Xi))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const ts=new o.OlP("");let Ns=(()=>{class f{constructor(d,m,b,$={}){this.router=d,this.viewportScroller=m,this.zone=b,this.options=$,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},$.scrollPositionRestoration=$.scrollPositionRestoration||"disabled",$.anchorScrolling=$.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.router.events.subscribe(d=>{d instanceof Mt?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=d.navigationTrigger,this.restoredId=d.restoredState?d.restoredState.navigationId:0):d instanceof Wt&&(this.lastId=d.id,this.scheduleScrollEvent(d,this.router.parseUrl(d.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.router.events.subscribe(d=>{d instanceof ar&&(d.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(d.position):d.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(d.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(d,m){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.router.triggerEvent(new ar(d,"popstate"===this.lastSource?this.store[this.restoredId]:null,m))})},0)})}ngOnDestroy(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()}}return f.\u0275fac=function(d){o.$Z()},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac}),f})();function yi(f,h){return{\u0275kind:f,\u0275providers:h}}function $s(){const f=(0,o.f3M)(o.zs3);return h=>{const d=f.get(o.z2F);if(h!==d.components[0])return;const m=f.get(or),b=f.get(rs);1===f.get(Bs)&&m.initialNavigation(),f.get(Qo,null,o.XFs.Optional)?.setUpPreloading(),f.get(ts,null,o.XFs.Optional)?.init(),m.resetRootComponentType(d.componentTypes[0]),b.closed||(b.next(),b.unsubscribe())}}const rs=new o.OlP("",{factory:()=>new O.x}),Bs=new o.OlP("",{providedIn:"root",factory:()=>1});const Qo=new o.OlP("");function bi(f){return yi(0,[{provide:Qo,useExisting:wa},{provide:es,useExisting:f}])}const _l=new o.OlP("ROUTER_FORROOT_GUARD"),wl=[te.Ye,{provide:pt,useClass:vt},{provide:or,useFactory:Xr},fr,{provide:Rr,useFactory:function Jo(f){return f.routerState.root},deps:[or]},Xi,[]];function _n(){return new o.PXZ("Router",or)}let Xu=(()=>{class f{constructor(d){}static forRoot(d,m){return{ngModule:f,providers:[wl,[],{provide:ao,multi:!0,useValue:d},{provide:_l,useFactory:Qu,deps:[[or,new o.FiY,new o.tp0]]},{provide:pi,useValue:m||{}},m?.useHash?{provide:te.S$,useClass:te.Do}:{provide:te.S$,useClass:te.b0},{provide:ts,useFactory:()=>{const f=(0,o.f3M)(or),h=(0,o.f3M)(te.EM),d=(0,o.f3M)(o.R0b),m=(0,o.f3M)(pi);return m.scrollOffset&&h.setOffset(m.scrollOffset),new Ns(f,h,d,m)}},m?.preloadingStrategy?bi(m.preloadingStrategy).\u0275providers:[],{provide:o.PXZ,multi:!0,useFactory:_n},m?.initialNavigation?ed(m):[],[{provide:El,useFactory:$s},{provide:o.tb,multi:!0,useExisting:El}]]}}static forChild(d){return{ngModule:f,providers:[{provide:ao,multi:!0,useValue:d}]}}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(_l,8))},f.\u0275mod=o.oAB({type:f}),f.\u0275inj=o.cJS({imports:[kr]}),f})();function Qu(f){return"guarded"}function ed(f){return["disabled"===f.initialNavigation?yi(3,[{provide:o.ip1,multi:!0,useFactory:()=>{const h=(0,o.f3M)(or);return()=>{h.setUpLocationChangeListener()}}},{provide:Bs,useValue:2}]).\u0275providers:[],"enabledBlocking"===f.initialNavigation?yi(2,[{provide:Bs,useValue:0},{provide:o.ip1,multi:!0,deps:[o.zs3],useFactory:h=>{const d=h.get(te.V_,Promise.resolve());return()=>d.then(()=>new Promise(b=>{const $=h.get(or),z=h.get(rs);(function m(b){h.get(or).events.pipe((0,de.h)(z=>z instanceof Wt||z instanceof Bt||z instanceof An),(0,ce.U)(z=>z instanceof Wt||z instanceof Bt&&(0===z.code||1===z.code)&&null),(0,de.h)(z=>null!==z),(0,De.q)(1)).subscribe(()=>{b()})})(()=>{b(!0)}),$.afterPreactivation=()=>(b(!0),z.closed?(0,N.of)(void 0):z),$.initialNavigation()}))}}]).\u0275providers:[]]}const El=new o.OlP("")},5861:(Qe,Fe,w)=>{"use strict";function o(N,ge,R,W,M,U,_){try{var Y=N[U](_),G=Y.value}catch(Z){return void R(Z)}Y.done?ge(G):Promise.resolve(G).then(W,M)}function x(N){return function(){var ge=this,R=arguments;return new Promise(function(W,M){var U=N.apply(ge,R);function _(G){o(U,W,M,_,Y,"next",G)}function Y(G){o(U,W,M,_,Y,"throw",G)}_(void 0)})}}w.d(Fe,{Z:()=>x})}},Qe=>{Qe(Qe.s=1394)}]); \ No newline at end of file diff --git a/src/main/resources/app/main.f2513059db4c78f6.js b/src/main/resources/app/main.f2513059db4c78f6.js new file mode 100644 index 000000000..c4764d75d --- /dev/null +++ b/src/main/resources/app/main.f2513059db4c78f6.js @@ -0,0 +1 @@ +(self.webpackChunkapp=self.webpackChunkapp||[]).push([[179],{7423:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Uw:()=>P,fo:()=>B});var o=w(5861);typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"&&global;var U=(()=>{return(T=U||(U={})).Unimplemented="UNIMPLEMENTED",T.Unavailable="UNAVAILABLE",U;var T})();class _ extends Error{constructor(k,O,te){super(k),this.message=k,this.code=O,this.data=te}}const G=T=>{var k,O,te,ce,Ae;const De=T.CapacitorCustomPlatform||null,ue=T.Capacitor||{},de=ue.Plugins=ue.Plugins||{},ne=T.CapacitorPlatforms,Ce=(null===(k=ne?.currentPlatform)||void 0===k?void 0:k.getPlatform)||(()=>null!==De?De.name:(T=>{var k,O;return T?.androidBridge?"android":null!==(O=null===(k=T?.webkit)||void 0===k?void 0:k.messageHandlers)&&void 0!==O&&O.bridge?"ios":"web"})(T)),dt=(null===(O=ne?.currentPlatform)||void 0===O?void 0:O.isNativePlatform)||(()=>"web"!==Ce()),Ue=(null===(te=ne?.currentPlatform)||void 0===te?void 0:te.isPluginAvailable)||(Pt=>!(!Rt.get(Pt)?.platforms.has(Ce())&&!Ke(Pt))),Ke=(null===(ce=ne?.currentPlatform)||void 0===ce?void 0:ce.getPluginHeader)||(Pt=>{var Ut;return null===(Ut=ue.PluginHeaders)||void 0===Ut?void 0:Ut.find(it=>it.name===Pt)}),Rt=new Map,pn=(null===(Ae=ne?.currentPlatform)||void 0===Ae?void 0:Ae.registerPlugin)||((Pt,Ut={})=>{const it=Rt.get(Pt);if(it)return console.warn(`Capacitor plugin "${Pt}" already registered. Cannot register plugins twice.`),it.proxy;const Xt=Ce(),kt=Ke(Pt);let Vt;const rn=function(){var Et=(0,o.Z)(function*(){return!Vt&&Xt in Ut?Vt=Vt="function"==typeof Ut[Xt]?yield Ut[Xt]():Ut[Xt]:null!==De&&!Vt&&"web"in Ut&&(Vt=Vt="function"==typeof Ut.web?yield Ut.web():Ut.web),Vt});return function(){return Et.apply(this,arguments)}}(),en=Et=>{let ut;const Ct=(...qe)=>{const on=rn().then(gn=>{const Nt=((Et,ut)=>{var Ct,qe;if(!kt){if(Et)return null===(qe=Et[ut])||void 0===qe?void 0:qe.bind(Et);throw new _(`"${Pt}" plugin is not implemented on ${Xt}`,U.Unimplemented)}{const on=kt?.methods.find(gn=>ut===gn.name);if(on)return"promise"===on.rtype?gn=>ue.nativePromise(Pt,ut.toString(),gn):(gn,Nt)=>ue.nativeCallback(Pt,ut.toString(),gn,Nt);if(Et)return null===(Ct=Et[ut])||void 0===Ct?void 0:Ct.bind(Et)}})(gn,Et);if(Nt){const Hn=Nt(...qe);return ut=Hn?.remove,Hn}throw new _(`"${Pt}.${Et}()" is not implemented on ${Xt}`,U.Unimplemented)});return"addListener"===Et&&(on.remove=(0,o.Z)(function*(){return ut()})),on};return Ct.toString=()=>`${Et.toString()}() { [capacitor code] }`,Object.defineProperty(Ct,"name",{value:Et,writable:!1,configurable:!1}),Ct},gt=en("addListener"),Yt=en("removeListener"),ht=(Et,ut)=>{const Ct=gt({eventName:Et},ut),qe=function(){var gn=(0,o.Z)(function*(){const Nt=yield Ct;Yt({eventName:Et,callbackId:Nt},ut)});return function(){return gn.apply(this,arguments)}}(),on=new Promise(gn=>Ct.then(()=>gn({remove:qe})));return on.remove=(0,o.Z)(function*(){console.warn("Using addListener() without 'await' is deprecated."),yield qe()}),on},nt=new Proxy({},{get(Et,ut){switch(ut){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return kt?ht:gt;case"removeListener":return Yt;default:return en(ut)}}});return de[Pt]=nt,Rt.set(Pt,{name:Pt,proxy:nt,platforms:new Set([...Object.keys(Ut),...kt?[Xt]:[]])}),nt});return ue.convertFileSrc||(ue.convertFileSrc=Pt=>Pt),ue.getPlatform=Ce,ue.handleError=Pt=>T.console.error(Pt),ue.isNativePlatform=dt,ue.isPluginAvailable=Ue,ue.pluginMethodNoop=(Pt,Ut,it)=>Promise.reject(`${it} does not have an implementation of "${Ut}".`),ue.registerPlugin=pn,ue.Exception=_,ue.DEBUG=!!ue.DEBUG,ue.isLoggingEnabled=!!ue.isLoggingEnabled,ue.platform=ue.getPlatform(),ue.isNative=ue.isNativePlatform(),ue},S=(T=>T.Capacitor=G(T))(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),B=S.registerPlugin;class P{constructor(k){this.listeners={},this.windowListeners={},k&&(console.warn(`Capacitor WebPlugin "${k.name}" config object was deprecated in v3 and will be removed in v4.`),this.config=k)}addListener(k,O){var te=this;this.listeners[k]||(this.listeners[k]=[]),this.listeners[k].push(O);const Ae=this.windowListeners[k];Ae&&!Ae.registered&&this.addWindowListener(Ae);const De=function(){var de=(0,o.Z)(function*(){return te.removeListener(k,O)});return function(){return de.apply(this,arguments)}}(),ue=Promise.resolve({remove:De});return Object.defineProperty(ue,"remove",{value:(de=(0,o.Z)(function*(){console.warn("Using addListener() without 'await' is deprecated."),yield De()}),function(){return de.apply(this,arguments)})}),ue;var de}removeAllListeners(){var k=this;return(0,o.Z)(function*(){k.listeners={};for(const O in k.windowListeners)k.removeWindowListener(k.windowListeners[O]);k.windowListeners={}})()}notifyListeners(k,O){const te=this.listeners[k];te&&te.forEach(ce=>ce(O))}hasListeners(k){return!!this.listeners[k].length}registerWindowListener(k,O){this.windowListeners[O]={registered:!1,windowEventName:k,pluginEventName:O,handler:te=>{this.notifyListeners(O,te)}}}unimplemented(k="not implemented"){return new S.Exception(k,U.Unimplemented)}unavailable(k="not available"){return new S.Exception(k,U.Unavailable)}removeListener(k,O){var te=this;return(0,o.Z)(function*(){const ce=te.listeners[k];if(!ce)return;const Ae=ce.indexOf(O);te.listeners[k].splice(Ae,1),te.listeners[k].length||te.removeWindowListener(te.windowListeners[k])})()}addWindowListener(k){window.addEventListener(k.windowEventName,k.handler),k.registered=!0}removeWindowListener(k){!k||(window.removeEventListener(k.windowEventName,k.handler),k.registered=!1)}}const pe=T=>encodeURIComponent(T).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),ke=T=>T.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class Te extends P{getCookies(){return(0,o.Z)(function*(){const k=document.cookie,O={};return k.split(";").forEach(te=>{if(te.length<=0)return;let[ce,Ae]=te.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");ce=ke(ce).trim(),Ae=ke(Ae).trim(),O[ce]=Ae}),O})()}setCookie(k){return(0,o.Z)(function*(){try{const O=pe(k.key),te=pe(k.value),ce=`; expires=${(k.expires||"").replace("expires=","")}`,Ae=(k.path||"/").replace("path=","");document.cookie=`${O}=${te||""}${ce}; path=${Ae}`}catch(O){return Promise.reject(O)}})()}deleteCookie(k){return(0,o.Z)(function*(){try{document.cookie=`${k.key}=; Max-Age=0`}catch(O){return Promise.reject(O)}})()}clearCookies(){return(0,o.Z)(function*(){try{const k=document.cookie.split(";")||[];for(const O of k)document.cookie=O.replace(/^ +/,"").replace(/=.*/,`=;expires=${(new Date).toUTCString()};path=/`)}catch(k){return Promise.reject(k)}})()}clearAllCookies(){var k=this;return(0,o.Z)(function*(){try{yield k.clearCookies()}catch(O){return Promise.reject(O)}})()}}B("CapacitorCookies",{web:()=>new Te});const Be=function(){var T=(0,o.Z)(function*(k){return new Promise((O,te)=>{const ce=new FileReader;ce.onload=()=>{const Ae=ce.result;O(Ae.indexOf(",")>=0?Ae.split(",")[1]:Ae)},ce.onerror=Ae=>te(Ae),ce.readAsDataURL(k)})});return function(O){return T.apply(this,arguments)}}();class Ne extends P{request(k){return(0,o.Z)(function*(){const O=((T,k={})=>{const O=Object.assign({method:T.method||"GET",headers:T.headers},k),ce=((T={})=>{const k=Object.keys(T);return Object.keys(T).map(ce=>ce.toLocaleLowerCase()).reduce((ce,Ae,De)=>(ce[Ae]=T[k[De]],ce),{})})(T.headers)["content-type"]||"";if("string"==typeof T.data)O.body=T.data;else if(ce.includes("application/x-www-form-urlencoded")){const Ae=new URLSearchParams;for(const[De,ue]of Object.entries(T.data||{}))Ae.set(De,ue);O.body=Ae.toString()}else if(ce.includes("multipart/form-data")){const Ae=new FormData;if(T.data instanceof FormData)T.data.forEach((ue,de)=>{Ae.append(de,ue)});else for(const ue of Object.keys(T.data))Ae.append(ue,T.data[ue]);O.body=Ae;const De=new Headers(O.headers);De.delete("content-type"),O.headers=De}else(ce.includes("application/json")||"object"==typeof T.data)&&(O.body=JSON.stringify(T.data));return O})(k,k.webFetchExtra),te=((T,k=!0)=>T?Object.entries(T).reduce((te,ce)=>{const[Ae,De]=ce;let ue,de;return Array.isArray(De)?(de="",De.forEach(ne=>{ue=k?encodeURIComponent(ne):ne,de+=`${Ae}=${ue}&`}),de.slice(0,-1)):(ue=k?encodeURIComponent(De):De,de=`${Ae}=${ue}`),`${te}&${de}`},"").substr(1):null)(k.params,k.shouldEncodeUrlParams),ce=te?`${k.url}?${te}`:k.url,Ae=yield fetch(ce,O),De=Ae.headers.get("content-type")||"";let de,ne,{responseType:ue="text"}=Ae.ok?k:{};switch(De.includes("application/json")&&(ue="json"),ue){case"arraybuffer":case"blob":ne=yield Ae.blob(),de=yield Be(ne);break;case"json":de=yield Ae.json();break;default:de=yield Ae.text()}const Ee={};return Ae.headers.forEach((Ce,ze)=>{Ee[ze]=Ce}),{data:de,headers:Ee,status:Ae.status,url:Ae.url}})()}get(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"GET"}))})()}post(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"POST"}))})()}put(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"PUT"}))})()}patch(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"PATCH"}))})()}delete(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"DELETE"}))})()}}B("CapacitorHttp",{web:()=>new Ne})},502:(Qe,Fe,w)=>{"use strict";w.d(Fe,{BX:()=>Nr,Br:()=>Zn,dr:()=>Nt,BJ:()=>Hn,oU:()=>zt,cs:()=>nr,yp:()=>jn,YG:()=>xe,Sm:()=>se,PM:()=>ye,hM:()=>_t,wI:()=>tn,W2:()=>Ln,fr:()=>ee,jY:()=>Se,Gu:()=>Le,gu:()=>yt,pK:()=>sn,Ie:()=>dn,rH:()=>er,u8:()=>$n,IK:()=>Tn,td:()=>xn,Q$:()=>vn,q_:()=>tr,z0:()=>cr,zc:()=>$t,uN:()=>Un,jP:()=>fr,Nd:()=>le,VI:()=>Ie,t9:()=>ot,n0:()=>st,PQ:()=>An,jI:()=>Rn,g2:()=>an,wd:()=>ho,sr:()=>jr,Pc:()=>C,r4:()=>rr,HT:()=>Lr,SH:()=>zr,as:()=>en,t4:()=>si,QI:()=>Yt,j9:()=>ht,yF:()=>ko});var o=w(8274),x=w(433),N=w(655),ge=w(8421),R=w(9751),W=w(5577),M=w(1144),U=w(576),_=w(3268);const Y=["addListener","removeListener"],G=["addEventListener","removeEventListener"],Z=["on","off"];function S(s,c,a,g){if((0,U.m)(a)&&(g=a,a=void 0),g)return S(s,c,a).pipe((0,_.Z)(g));const[L,Me]=function P(s){return(0,U.m)(s.addEventListener)&&(0,U.m)(s.removeEventListener)}(s)?G.map(Je=>at=>s[Je](c,at,a)):function E(s){return(0,U.m)(s.addListener)&&(0,U.m)(s.removeListener)}(s)?Y.map(B(s,c)):function j(s){return(0,U.m)(s.on)&&(0,U.m)(s.off)}(s)?Z.map(B(s,c)):[];if(!L&&(0,M.z)(s))return(0,W.z)(Je=>S(Je,c,a))((0,ge.Xf)(s));if(!L)throw new TypeError("Invalid event target");return new R.y(Je=>{const at=(...Dt)=>Je.next(1Me(at)})}function B(s,c){return a=>g=>s[a](c,g)}var K=w(7579),pe=w(1135),ke=w(5472),oe=(w(8834),w(3953),w(3880),w(1911),w(9658)),be=w(5730),Ne=w(697),T=(w(4292),w(4414)),te=(w(3457),w(4349),w(1308)),ne=w(9300),Ee=w(3900),Ce=w(1884),ze=w(6895);const et=oe.i,Ke=["*"],Pt=s=>"function"==typeof __zone_symbol__requestAnimationFrame?__zone_symbol__requestAnimationFrame(s):"function"==typeof requestAnimationFrame?requestAnimationFrame(s):setTimeout(s),Ut=s=>!!s.resolveComponentFactory;let it=(()=>{class s{constructor(a,g){this.injector=a,this.el=g,this.onChange=()=>{},this.onTouched=()=>{}}writeValue(a){this.el.nativeElement.value=this.lastValue=a??"",Xt(this.el)}handleChangeEvent(a,g){a===this.el.nativeElement&&(g!==this.lastValue&&(this.lastValue=g,this.onChange(g)),Xt(this.el))}_handleBlurEvent(a){a===this.el.nativeElement&&(this.onTouched(),Xt(this.el))}registerOnChange(a){this.onChange=a}registerOnTouched(a){this.onTouched=a}setDisabledState(a){this.el.nativeElement.disabled=a}ngOnDestroy(){this.statusChanges&&this.statusChanges.unsubscribe()}ngAfterViewInit(){let a;try{a=this.injector.get(x.a5)}catch{}if(!a)return;a.statusChanges&&(this.statusChanges=a.statusChanges.subscribe(()=>Xt(this.el)));const g=a.control;g&&["markAsTouched","markAllAsTouched","markAsUntouched","markAsDirty","markAsPristine"].forEach(Me=>{if(typeof g[Me]<"u"){const Je=g[Me].bind(g);g[Me]=(...at)=>{Je(...at),Xt(this.el)}}})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,hostBindings:function(a,g){1&a&&o.NdJ("ionBlur",function(Me){return g._handleBlurEvent(Me.target)})}}),s})();const Xt=s=>{Pt(()=>{const c=s.nativeElement,a=null!=c.value&&c.value.toString().length>0,g=kt(c);Vt(c,g);const L=c.closest("ion-item");L&&Vt(L,a?[...g,"item-has-value"]:g)})},kt=s=>{const c=s.classList,a=[];for(let g=0;g{const a=s.classList;a.remove("ion-valid","ion-invalid","ion-touched","ion-untouched","ion-dirty","ion-pristine"),a.add(...c)},rn=(s,c)=>s.substring(0,c.length)===c;let en=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleIonChange(a){this.handleChangeEvent(a,a.value)}registerOnChange(a){super.registerOnChange(g=>{a(""===g?null:parseFloat(g))})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-input","type","number"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleIonChange(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})(),Yt=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleChangeEvent(a){this.handleChangeEvent(a,a.value)}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-range"],["ion-select"],["ion-radio-group"],["ion-segment"],["ion-datetime"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleChangeEvent(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})(),ht=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleInputEvent(a){this.handleChangeEvent(a,a.value)}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-input",3,"type","number"],["ion-textarea"],["ion-searchbar"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleInputEvent(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})();const nt=(s,c)=>{const a=s.prototype;c.forEach(g=>{Object.defineProperty(a,g,{get(){return this.el[g]},set(L){this.z.runOutsideAngular(()=>this.el[g]=L)}})})},Et=(s,c)=>{const a=s.prototype;c.forEach(g=>{a[g]=function(){const L=arguments;return this.z.runOutsideAngular(()=>this.el[g].apply(this.el,L))}})},ut=(s,c,a)=>{a.forEach(g=>s[g]=S(c,g))};function qe(s){return function(a){const{defineCustomElementFn:g,inputs:L,methods:Me}=s;return void 0!==g&&g(),L&&nt(a,L),Me&&Et(a,Me),a}}let Nt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-app"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),Hn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-avatar"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),zt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-back-button"]],inputs:{color:"color",defaultHref:"defaultHref",disabled:"disabled",icon:"icon",mode:"mode",routerAnimation:"routerAnimation",text:"text",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","defaultHref","disabled","icon","mode","routerAnimation","text","type"]})],s),s})(),jn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-badge"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})(),xe=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionFocus","ionBlur"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-button"]],inputs:{buttonType:"buttonType",color:"color",disabled:"disabled",download:"download",expand:"expand",fill:"fill",form:"form",href:"href",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",shape:"shape",size:"size",strong:"strong",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]})],s),s})(),se=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-buttons"]],inputs:{collapse:"collapse"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse"]})],s),s})(),ye=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-card"]],inputs:{button:"button",color:"color",disabled:"disabled",download:"download",href:"href",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]})],s),s})(),_t=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-chip"]],inputs:{color:"color",disabled:"disabled",mode:"mode",outline:"outline"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","disabled","mode","outline"]})],s),s})(),tn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-col"]],inputs:{offset:"offset",offsetLg:"offsetLg",offsetMd:"offsetMd",offsetSm:"offsetSm",offsetXl:"offsetXl",offsetXs:"offsetXs",pull:"pull",pullLg:"pullLg",pullMd:"pullMd",pullSm:"pullSm",pullXl:"pullXl",pullXs:"pullXs",push:"push",pushLg:"pushLg",pushMd:"pushMd",pushSm:"pushSm",pushXl:"pushXl",pushXs:"pushXs",size:"size",sizeLg:"sizeLg",sizeMd:"sizeMd",sizeSm:"sizeSm",sizeXl:"sizeXl",sizeXs:"sizeXs"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["offset","offsetLg","offsetMd","offsetSm","offsetXl","offsetXs","pull","pullLg","pullMd","pullSm","pullXl","pullXs","push","pushLg","pushMd","pushSm","pushXl","pushXs","size","sizeLg","sizeMd","sizeSm","sizeXl","sizeXs"]})],s),s})(),Ln=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionScrollStart","ionScroll","ionScrollEnd"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-content"]],inputs:{color:"color",forceOverscroll:"forceOverscroll",fullscreen:"fullscreen",scrollEvents:"scrollEvents",scrollX:"scrollX",scrollY:"scrollY"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"],methods:["getScrollElement","scrollToTop","scrollToBottom","scrollByPoint","scrollToPoint"]})],s),s})(),ee=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-footer"]],inputs:{collapse:"collapse",mode:"mode",translucent:"translucent"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse","mode","translucent"]})],s),s})(),Se=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-grid"]],inputs:{fixed:"fixed"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["fixed"]})],s),s})(),Le=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-header"]],inputs:{collapse:"collapse",mode:"mode",translucent:"translucent"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse","mode","translucent"]})],s),s})(),yt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-icon"]],inputs:{color:"color",flipRtl:"flipRtl",icon:"icon",ios:"ios",lazy:"lazy",md:"md",mode:"mode",name:"name",sanitize:"sanitize",size:"size",src:"src"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]})],s),s})(),sn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionInput","ionChange","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-input"]],inputs:{accept:"accept",autocapitalize:"autocapitalize",autocomplete:"autocomplete",autocorrect:"autocorrect",autofocus:"autofocus",clearInput:"clearInput",clearOnEdit:"clearOnEdit",color:"color",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",max:"max",maxlength:"maxlength",min:"min",minlength:"minlength",mode:"mode",multiple:"multiple",name:"name",pattern:"pattern",placeholder:"placeholder",readonly:"readonly",required:"required",size:"size",spellcheck:"spellcheck",step:"step",type:"type",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["accept","autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearOnEdit","color","debounce","disabled","enterkeyhint","inputmode","max","maxlength","min","minlength","mode","multiple","name","pattern","placeholder","readonly","required","size","spellcheck","step","type","value"],methods:["setFocus","getInputElement"]})],s),s})(),dn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item"]],inputs:{button:"button",color:"color",counter:"counter",counterFormatter:"counterFormatter",detail:"detail",detailIcon:"detailIcon",disabled:"disabled",download:"download",fill:"fill",href:"href",lines:"lines",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",shape:"shape",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["button","color","counter","counterFormatter","detail","detailIcon","disabled","download","fill","href","lines","mode","rel","routerAnimation","routerDirection","shape","target","type"]})],s),s})(),er=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-divider"]],inputs:{color:"color",mode:"mode",sticky:"sticky"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode","sticky"]})],s),s})(),$n=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-option"]],inputs:{color:"color",disabled:"disabled",download:"download",expandable:"expandable",href:"href",mode:"mode",rel:"rel",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","disabled","download","expandable","href","mode","rel","target","type"]})],s),s})(),Tn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionSwipe"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-options"]],inputs:{side:"side"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["side"]})],s),s})(),xn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionDrag"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-sliding"]],inputs:{disabled:"disabled"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["disabled"],methods:["getOpenAmount","getSlidingRatio","open","close","closeOpened"]})],s),s})(),vn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-label"]],inputs:{color:"color",mode:"mode",position:"position"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode","position"]})],s),s})(),tr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-list"]],inputs:{inset:"inset",lines:"lines",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["inset","lines","mode"],methods:["closeSlidingItems"]})],s),s})(),cr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionWillOpen","ionWillClose","ionDidOpen","ionDidClose"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-menu"]],inputs:{contentId:"contentId",disabled:"disabled",maxEdgeStart:"maxEdgeStart",menuId:"menuId",side:"side",swipeGesture:"swipeGesture",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["contentId","disabled","maxEdgeStart","menuId","side","swipeGesture","type"],methods:["isOpen","isActive","open","close","toggle","setOpen"]})],s),s})(),$t=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-menu-toggle"]],inputs:{autoHide:"autoHide",menu:"menu"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["autoHide","menu"]})],s),s})(),Un=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-note"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})(),le=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-row"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),Ie=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionInput","ionChange","ionCancel","ionClear","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-searchbar"]],inputs:{animated:"animated",autocomplete:"autocomplete",autocorrect:"autocorrect",cancelButtonIcon:"cancelButtonIcon",cancelButtonText:"cancelButtonText",clearIcon:"clearIcon",color:"color",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",mode:"mode",placeholder:"placeholder",searchIcon:"searchIcon",showCancelButton:"showCancelButton",showClearButton:"showClearButton",spellcheck:"spellcheck",type:"type",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["animated","autocomplete","autocorrect","cancelButtonIcon","cancelButtonText","clearIcon","color","debounce","disabled","enterkeyhint","inputmode","mode","placeholder","searchIcon","showCancelButton","showClearButton","spellcheck","type","value"],methods:["setFocus","getInputElement"]})],s),s})(),ot=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionChange","ionCancel","ionDismiss","ionFocus","ionBlur"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-select"]],inputs:{cancelText:"cancelText",compareWith:"compareWith",disabled:"disabled",interface:"interface",interfaceOptions:"interfaceOptions",mode:"mode",multiple:"multiple",name:"name",okText:"okText",placeholder:"placeholder",selectedText:"selectedText",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["cancelText","compareWith","disabled","interface","interfaceOptions","mode","multiple","name","okText","placeholder","selectedText","value"],methods:["open"]})],s),s})(),st=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-select-option"]],inputs:{disabled:"disabled",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["disabled","value"]})],s),s})(),An=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-spinner"]],inputs:{color:"color",duration:"duration",name:"name",paused:"paused"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","duration","name","paused"]})],s),s})(),Rn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionSplitPaneVisible"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-split-pane"]],inputs:{contentId:"contentId",disabled:"disabled",when:"when"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["contentId","disabled","when"]})],s),s})(),an=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionChange","ionInput","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-textarea"]],inputs:{autoGrow:"autoGrow",autocapitalize:"autocapitalize",autofocus:"autofocus",clearOnEdit:"clearOnEdit",color:"color",cols:"cols",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",maxlength:"maxlength",minlength:"minlength",mode:"mode",name:"name",placeholder:"placeholder",readonly:"readonly",required:"required",rows:"rows",spellcheck:"spellcheck",value:"value",wrap:"wrap"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["autoGrow","autocapitalize","autofocus","clearOnEdit","color","cols","debounce","disabled","enterkeyhint","inputmode","maxlength","minlength","mode","name","placeholder","readonly","required","rows","spellcheck","value","wrap"],methods:["setFocus","getInputElement"]})],s),s})(),ho=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-title"]],inputs:{color:"color",size:"size"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","size"]})],s),s})(),jr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-toolbar"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})();class xr{constructor(c={}){this.data=c}get(c){return this.data[c]}}let Or=(()=>{class s{constructor(a,g){this.zone=a,this.appRef=g}create(a,g,L){return new ar(a,g,L,this.appRef,this.zone)}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(o.R0b),o.LFG(o.z2F))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})();class ar{constructor(c,a,g,L,Me){this.resolverOrInjector=c,this.injector=a,this.location=g,this.appRef=L,this.zone=Me,this.elRefMap=new WeakMap,this.elEventsMap=new WeakMap}attachViewToDom(c,a,g,L){return this.zone.run(()=>new Promise(Me=>{Me(Bn(this.zone,this.resolverOrInjector,this.injector,this.location,this.appRef,this.elRefMap,this.elEventsMap,c,a,g,L))}))}removeViewFromDom(c,a){return this.zone.run(()=>new Promise(g=>{const L=this.elRefMap.get(a);if(L){L.destroy(),this.elRefMap.delete(a);const Me=this.elEventsMap.get(a);Me&&(Me(),this.elEventsMap.delete(a))}g()}))}}const Bn=(s,c,a,g,L,Me,Je,at,Dt,Zt,bn)=>{let Ve;const At=o.zs3.create({providers:qn(Zt),parent:a});if(c&&Ut(c)){const $r=c.resolveComponentFactory(Dt);Ve=g?g.createComponent($r,g.length,At):$r.create(At)}else{if(!g)return null;Ve=g.createComponent(Dt,{index:g.indexOf,injector:At,environmentInjector:c})}const yr=Ve.instance,Dr=Ve.location.nativeElement;if(Zt&&Object.assign(yr,Zt),bn)for(const $r of bn)Dr.classList.add($r);const Mn=Fn(s,yr,Dr);return at.appendChild(Dr),g||L.attachView(Ve.hostView),Ve.changeDetectorRef.reattach(),Me.set(Dr,Ve),Je.set(Dr,Mn),Dr},po=[Ne.L,Ne.a,Ne.b,Ne.c,Ne.d],Fn=(s,c,a)=>s.run(()=>{const g=po.filter(L=>"function"==typeof c[L]).map(L=>{const Me=Je=>c[L](Je.detail);return a.addEventListener(L,Me),()=>a.removeEventListener(L,Me)});return()=>g.forEach(L=>L())}),zn=new o.OlP("NavParamsToken"),qn=s=>[{provide:zn,useValue:s},{provide:xr,useFactory:dr,deps:[zn]}],dr=s=>new xr(s),Gn=(s,c)=>((s=s.filter(a=>a.stackId!==c.stackId)).push(c),s),vr=(s,c)=>{const a=s.createUrlTree(["."],{relativeTo:c});return s.serializeUrl(a)},Pr=(s,c)=>{if(!s)return;const a=xo(c);for(let g=0;g=s.length)return a[g];if(a[g]!==s[g])return}},xo=s=>s.split("/").map(c=>c.trim()).filter(c=>""!==c),vo=s=>{s&&(s.ref.destroy(),s.unlistenEvents())};class yo{constructor(c,a,g,L,Me,Je){this.containerEl=a,this.router=g,this.navCtrl=L,this.zone=Me,this.location=Je,this.views=[],this.skipTransition=!1,this.nextId=0,this.tabsPrefix=void 0!==c?xo(c):void 0}createView(c,a){var g;const L=vr(this.router,a),Me=null===(g=c?.location)||void 0===g?void 0:g.nativeElement,Je=Fn(this.zone,c.instance,Me);return{id:this.nextId++,stackId:Pr(this.tabsPrefix,L),unlistenEvents:Je,element:Me,ref:c,url:L}}getExistingView(c){const a=vr(this.router,c),g=this.views.find(L=>L.url===a);return g&&g.ref.changeDetectorRef.reattach(),g}setActive(c){var a,g;const L=this.navCtrl.consumeTransition();let{direction:Me,animation:Je,animationBuilder:at}=L;const Dt=this.activeView,Zt=((s,c)=>!c||s.stackId!==c.stackId)(c,Dt);Zt&&(Me="back",Je=void 0);const bn=this.views.slice();let Ve;const At=this.router;At.getCurrentNavigation?Ve=At.getCurrentNavigation():!(null===(a=At.navigations)||void 0===a)&&a.value&&(Ve=At.navigations.value),null!==(g=Ve?.extras)&&void 0!==g&&g.replaceUrl&&this.views.length>0&&this.views.splice(-1,1);const yr=this.views.includes(c),Dr=this.insertView(c,Me);yr||c.ref.changeDetectorRef.detectChanges();const Mn=c.animationBuilder;return void 0===at&&"back"===Me&&!Zt&&void 0!==Mn&&(at=Mn),Dt&&(Dt.animationBuilder=at),this.zone.runOutsideAngular(()=>this.wait(()=>(Dt&&Dt.ref.changeDetectorRef.detach(),c.ref.changeDetectorRef.reattach(),this.transition(c,Dt,Je,this.canGoBack(1),!1,at).then(()=>Oo(c,Dr,bn,this.location,this.zone)).then(()=>({enteringView:c,direction:Me,animation:Je,tabSwitch:Zt})))))}canGoBack(c,a=this.getActiveStackId()){return this.getStack(a).length>c}pop(c,a=this.getActiveStackId()){return this.zone.run(()=>{var g,L;const Me=this.getStack(a);if(Me.length<=c)return Promise.resolve(!1);const Je=Me[Me.length-c-1];let at=Je.url;const Dt=Je.savedData;if(Dt){const bn=Dt.get("primary");null!==(L=null===(g=bn?.route)||void 0===g?void 0:g._routerState)&&void 0!==L&&L.snapshot.url&&(at=bn.route._routerState.snapshot.url)}const{animationBuilder:Zt}=this.navCtrl.consumeTransition();return this.navCtrl.navigateBack(at,Object.assign(Object.assign({},Je.savedExtras),{animation:Zt})).then(()=>!0)})}startBackTransition(){const c=this.activeView;if(c){const a=this.getStack(c.stackId),g=a[a.length-2],L=g.animationBuilder;return this.wait(()=>this.transition(g,c,"back",this.canGoBack(2),!0,L))}return Promise.resolve()}endBackTransition(c){c?(this.skipTransition=!0,this.pop(1)):this.activeView&&Jr(this.activeView,this.views,this.views,this.location,this.zone)}getLastUrl(c){const a=this.getStack(c);return a.length>0?a[a.length-1]:void 0}getRootUrl(c){const a=this.getStack(c);return a.length>0?a[0]:void 0}getActiveStackId(){return this.activeView?this.activeView.stackId:void 0}hasRunningTask(){return void 0!==this.runningTask}destroy(){this.containerEl=void 0,this.views.forEach(vo),this.activeView=void 0,this.views=[]}getStack(c){return this.views.filter(a=>a.stackId===c)}insertView(c,a){return this.activeView=c,this.views=((s,c,a)=>"root"===a?Gn(s,c):"forward"===a?((s,c)=>(s.indexOf(c)>=0?s=s.filter(g=>g.stackId!==c.stackId||g.id<=c.id):s.push(c),s))(s,c):((s,c)=>s.indexOf(c)>=0?s.filter(g=>g.stackId!==c.stackId||g.id<=c.id):Gn(s,c))(s,c))(this.views,c,a),this.views.slice()}transition(c,a,g,L,Me,Je){if(this.skipTransition)return this.skipTransition=!1,Promise.resolve(!1);if(a===c)return Promise.resolve(!1);const at=c?c.element:void 0,Dt=a?a.element:void 0,Zt=this.containerEl;return at&&at!==Dt&&(at.classList.add("ion-page"),at.classList.add("ion-page-invisible"),at.parentElement!==Zt&&Zt.appendChild(at),Zt.commit)?Zt.commit(at,Dt,{deepWait:!0,duration:void 0===g?0:void 0,direction:g,showGoBack:L,progressAnimation:Me,animationBuilder:Je}):Promise.resolve(!1)}wait(c){return(0,N.mG)(this,void 0,void 0,function*(){void 0!==this.runningTask&&(yield this.runningTask,this.runningTask=void 0);const a=this.runningTask=c();return a.finally(()=>this.runningTask=void 0),a})}}const Oo=(s,c,a,g,L)=>"function"==typeof requestAnimationFrame?new Promise(Me=>{requestAnimationFrame(()=>{Jr(s,c,a,g,L),Me()})}):Promise.resolve(),Jr=(s,c,a,g,L)=>{L.run(()=>a.filter(Me=>!c.includes(Me)).forEach(vo)),c.forEach(Me=>{const at=g.path().split("?")[0].split("#")[0];if(Me!==s&&Me.url!==at){const Dt=Me.element;Dt.setAttribute("aria-hidden","true"),Dt.classList.add("ion-page-hidden"),Me.ref.changeDetectorRef.detach()}})};let Go=(()=>{class s{get(a,g){const L=Yo();return L?L.get(a,g):null}getBoolean(a,g){const L=Yo();return!!L&&L.getBoolean(a,g)}getNumber(a,g){const L=Yo();return L?L.getNumber(a,g):0}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Fr=new o.OlP("USERCONFIG"),Yo=()=>{if(typeof window<"u"){const s=window.Ionic;if(s?.config)return s.config}return null};let si=(()=>{class s{constructor(a,g){this.doc=a,this.backButton=new K.x,this.keyboardDidShow=new K.x,this.keyboardDidHide=new K.x,this.pause=new K.x,this.resume=new K.x,this.resize=new K.x,g.run(()=>{var L;let Me;this.win=a.defaultView,this.backButton.subscribeWithPriority=function(Je,at){return this.subscribe(Dt=>Dt.register(Je,Zt=>g.run(()=>at(Zt))))},Ur(this.pause,a,"pause"),Ur(this.resume,a,"resume"),Ur(this.backButton,a,"ionBackButton"),Ur(this.resize,this.win,"resize"),Ur(this.keyboardDidShow,this.win,"ionKeyboardDidShow"),Ur(this.keyboardDidHide,this.win,"ionKeyboardDidHide"),this._readyPromise=new Promise(Je=>{Me=Je}),null!==(L=this.win)&&void 0!==L&&L.cordova?a.addEventListener("deviceready",()=>{Me("cordova")},{once:!0}):Me("dom")})}is(a){return(0,oe.a)(this.win,a)}platforms(){return(0,oe.g)(this.win)}ready(){return this._readyPromise}get isRTL(){return"rtl"===this.doc.dir}getQueryParam(a){return Ro(this.win.location.href,a)}isLandscape(){return!this.isPortrait()}isPortrait(){var a,g;return null===(g=(a=this.win).matchMedia)||void 0===g?void 0:g.call(a,"(orientation: portrait)").matches}testUserAgent(a){const g=this.win.navigator;return!!(g?.userAgent&&g.userAgent.indexOf(a)>=0)}url(){return this.win.location.href}width(){return this.win.innerWidth}height(){return this.win.innerHeight}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(ze.K0),o.LFG(o.R0b))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Ro=(s,c)=>{c=c.replace(/[[\]\\]/g,"\\$&");const g=new RegExp("[\\?&]"+c+"=([^&#]*)").exec(s);return g?decodeURIComponent(g[1].replace(/\+/g," ")):null},Ur=(s,c,a)=>{c&&c.addEventListener(a,g=>{s.next(g?.detail)})};let zr=(()=>{class s{constructor(a,g,L,Me){this.location=g,this.serializer=L,this.router=Me,this.direction=Gr,this.animated=Yr,this.guessDirection="forward",this.lastNavId=-1,Me&&Me.events.subscribe(Je=>{if(Je instanceof ke.OD){const at=Je.restoredState?Je.restoredState.navigationId:Je.id;this.guessDirection=at{this.pop(),Je()})}navigateForward(a,g={}){return this.setDirection("forward",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}navigateBack(a,g={}){return this.setDirection("back",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}navigateRoot(a,g={}){return this.setDirection("root",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}back(a={animated:!0,animationDirection:"back"}){return this.setDirection("back",a.animated,a.animationDirection,a.animation),this.location.back()}pop(){return(0,N.mG)(this,void 0,void 0,function*(){let a=this.topOutlet;for(;a&&!(yield a.pop());)a=a.parentOutlet})}setDirection(a,g,L,Me){this.direction=a,this.animated=Do(a,g,L),this.animationBuilder=Me}setTopOutlet(a){this.topOutlet=a}consumeTransition(){let g,a="root";const L=this.animationBuilder;return"auto"===this.direction?(a=this.guessDirection,g=this.guessAnimation):(g=this.animated,a=this.direction),this.direction=Gr,this.animated=Yr,this.animationBuilder=void 0,{direction:a,animation:g,animationBuilder:L}}navigate(a,g){if(Array.isArray(a))return this.router.navigate(a,g);{const L=this.serializer.parse(a.toString());return void 0!==g.queryParams&&(L.queryParams=Object.assign({},g.queryParams)),void 0!==g.fragment&&(L.fragment=g.fragment),this.router.navigateByUrl(L,g)}}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(si),o.LFG(ze.Ye),o.LFG(ke.Hx),o.LFG(ke.F0,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Do=(s,c,a)=>{if(!1!==c){if(void 0!==a)return a;if("forward"===s||"back"===s)return s;if("root"===s&&!0===c)return"forward"}},Gr="auto",Yr=void 0;let fr=(()=>{class s{constructor(a,g,L,Me,Je,at,Dt,Zt,bn,Ve,At,yr,Dr){this.parentContexts=a,this.location=g,this.config=Je,this.navCtrl=at,this.componentFactoryResolver=Dt,this.parentOutlet=Dr,this.activated=null,this.activatedView=null,this._activatedRoute=null,this.proxyMap=new WeakMap,this.currentActivatedRoute$=new pe.X(null),this.stackEvents=new o.vpe,this.activateEvents=new o.vpe,this.deactivateEvents=new o.vpe,this.nativeEl=bn.nativeElement,this.name=L||ke.eC,this.tabsPrefix="true"===Me?vr(Ve,yr):void 0,this.stackCtrl=new yo(this.tabsPrefix,this.nativeEl,Ve,at,At,Zt),a.onChildOutletCreated(this.name,this)}set animation(a){this.nativeEl.animation=a}set animated(a){this.nativeEl.animated=a}set swipeGesture(a){this._swipeGesture=a,this.nativeEl.swipeHandler=a?{canStart:()=>this.stackCtrl.canGoBack(1)&&!this.stackCtrl.hasRunningTask(),onStart:()=>this.stackCtrl.startBackTransition(),onEnd:g=>this.stackCtrl.endBackTransition(g)}:void 0}ngOnDestroy(){this.stackCtrl.destroy()}getContext(){return this.parentContexts.getContext(this.name)}ngOnInit(){if(!this.activated){const a=this.getContext();a?.route&&this.activateWith(a.route,a.resolver||null)}new Promise(a=>(0,be.c)(this.nativeEl,a)).then(()=>{void 0===this._swipeGesture&&(this.swipeGesture=this.config.getBoolean("swipeBackEnabled","ios"===this.nativeEl.mode))})}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new Error("Outlet is not activated");return this.activated.instance}get activatedRoute(){if(!this.activated)throw new Error("Outlet is not activated");return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){throw new Error("incompatible reuse strategy")}attach(a,g){throw new Error("incompatible reuse strategy")}deactivate(){if(this.activated){if(this.activatedView){const g=this.getContext();this.activatedView.savedData=new Map(g.children.contexts);const L=this.activatedView.savedData.get("primary");if(L&&g.route&&(L.route=Object.assign({},g.route)),this.activatedView.savedExtras={},g.route){const Me=g.route.snapshot;this.activatedView.savedExtras.queryParams=Me.queryParams,this.activatedView.savedExtras.fragment=Me.fragment}}const a=this.component;this.activatedView=null,this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(a)}}activateWith(a,g){var L;if(this.isActivated)throw new Error("Cannot activate an already activated outlet");this._activatedRoute=a;let Me,Je=this.stackCtrl.getExistingView(a);if(Je){Me=this.activated=Je.ref;const at=Je.savedData;at&&(this.getContext().children.contexts=at),this.updateActivatedRouteProxy(Me.instance,a)}else{const at=a._futureSnapshot;if(null==at.routeConfig.component&&null==this.environmentInjector)return void console.warn('[Ionic Warning]: You must supply an environmentInjector to use standalone components with routing:\n\nIn your component class, add:\n\n import { EnvironmentInjector } from \'@angular/core\';\n constructor(public environmentInjector: EnvironmentInjector) {}\n\nIn your router outlet template, add:\n\n \n\nAlternatively, if you are routing within ion-tabs:\n\n ');const Dt=this.parentContexts.getOrCreateContext(this.name).children,Zt=new pe.X(null),bn=this.createActivatedRouteProxy(Zt,a),Ve=new hr(bn,Dt,this.location.injector),At=null!==(L=at.routeConfig.component)&&void 0!==L?L:at.component;if((g=g||this.componentFactoryResolver)&&Ut(g)){const yr=g.resolveComponentFactory(At);Me=this.activated=this.location.createComponent(yr,this.location.length,Ve)}else Me=this.activated=this.location.createComponent(At,{index:this.location.length,injector:Ve,environmentInjector:g??this.environmentInjector});Zt.next(Me.instance),Je=this.stackCtrl.createView(this.activated,a),this.proxyMap.set(Me.instance,bn),this.currentActivatedRoute$.next({component:Me.instance,activatedRoute:a})}this.activatedView=Je,this.navCtrl.setTopOutlet(this),this.stackCtrl.setActive(Je).then(at=>{this.activateEvents.emit(Me.instance),this.stackEvents.emit(at)})}canGoBack(a=1,g){return this.stackCtrl.canGoBack(a,g)}pop(a=1,g){return this.stackCtrl.pop(a,g)}getLastUrl(a){const g=this.stackCtrl.getLastUrl(a);return g?g.url:void 0}getLastRouteView(a){return this.stackCtrl.getLastUrl(a)}getRootView(a){return this.stackCtrl.getRootUrl(a)}getActiveStackId(){return this.stackCtrl.getActiveStackId()}createActivatedRouteProxy(a,g){const L=new ke.gz;return L._futureSnapshot=g._futureSnapshot,L._routerState=g._routerState,L.snapshot=g.snapshot,L.outlet=g.outlet,L.component=g.component,L._paramMap=this.proxyObservable(a,"paramMap"),L._queryParamMap=this.proxyObservable(a,"queryParamMap"),L.url=this.proxyObservable(a,"url"),L.params=this.proxyObservable(a,"params"),L.queryParams=this.proxyObservable(a,"queryParams"),L.fragment=this.proxyObservable(a,"fragment"),L.data=this.proxyObservable(a,"data"),L}proxyObservable(a,g){return a.pipe((0,ne.h)(L=>!!L),(0,Ee.w)(L=>this.currentActivatedRoute$.pipe((0,ne.h)(Me=>null!==Me&&Me.component===L),(0,Ee.w)(Me=>Me&&Me.activatedRoute[g]),(0,Ce.x)())))}updateActivatedRouteProxy(a,g){const L=this.proxyMap.get(a);if(!L)throw new Error("Could not find activated route proxy for view");L._futureSnapshot=g._futureSnapshot,L._routerState=g._routerState,L.snapshot=g.snapshot,L.outlet=g.outlet,L.component=g.component,this.currentActivatedRoute$.next({component:a,activatedRoute:g})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(ke.y6),o.Y36(o.s_b),o.$8M("name"),o.$8M("tabs"),o.Y36(Go),o.Y36(zr),o.Y36(o._Vd,8),o.Y36(ze.Ye),o.Y36(o.SBq),o.Y36(ke.F0),o.Y36(o.R0b),o.Y36(ke.gz),o.Y36(s,12))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-router-outlet"]],inputs:{animated:"animated",animation:"animation",mode:"mode",swipeGesture:"swipeGesture",environmentInjector:"environmentInjector"},outputs:{stackEvents:"stackEvents",activateEvents:"activate",deactivateEvents:"deactivate"},exportAs:["outlet"]}),s})();class hr{constructor(c,a,g){this.route=c,this.childContexts=a,this.parent=g}get(c,a){return c===ke.gz?this.route:c===ke.y6?this.childContexts:this.parent.get(c,a)}}let nr=(()=>{class s{constructor(a,g,L){this.routerOutlet=a,this.navCtrl=g,this.config=L}onClick(a){var g;const L=this.defaultHref||this.config.get("backButtonDefaultHref");null!==(g=this.routerOutlet)&&void 0!==g&&g.canGoBack()?(this.navCtrl.setDirection("back",void 0,void 0,this.routerAnimation),this.routerOutlet.pop(),a.preventDefault()):null!=L&&(this.navCtrl.navigateBack(L,{animation:this.routerAnimation}),a.preventDefault())}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(fr,8),o.Y36(zr),o.Y36(Go))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-back-button"]],hostBindings:function(a,g){1&a&&o.NdJ("click",function(Me){return g.onClick(Me)})},inputs:{defaultHref:"defaultHref",routerAnimation:"routerAnimation"}}),s})();class kn{constructor(c){this.ctrl=c}create(c){return this.ctrl.create(c||{})}dismiss(c,a,g){return this.ctrl.dismiss(c,a,g)}getTop(){return this.ctrl.getTop()}}let Nr=(()=>{class s extends kn{constructor(){super(T.b)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})(),Zn=(()=>{class s extends kn{constructor(){super(T.a)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})(),Lr=(()=>{class s extends kn{constructor(){super(T.l)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();class Sn{}let Fo=(()=>{class s extends kn{constructor(a,g,L,Me){super(T.m),this.angularDelegate=a,this.resolver=g,this.injector=L,this.environmentInjector=Me}create(a){var g;return super.create(Object.assign(Object.assign({},a),{delegate:this.angularDelegate.create(null!==(g=this.resolver)&&void 0!==g?g:this.environmentInjector,this.injector)}))}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(Or),o.LFG(o._Vd),o.LFG(o.zs3),o.LFG(Sn,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})(),wo=(()=>{class s extends kn{constructor(a,g,L,Me){super(T.c),this.angularDelegate=a,this.resolver=g,this.injector=L,this.environmentInjector=Me}create(a){var g;return super.create(Object.assign(Object.assign({},a),{delegate:this.angularDelegate.create(null!==(g=this.resolver)&&void 0!==g?g:this.environmentInjector,this.injector)}))}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(Or),o.LFG(o._Vd),o.LFG(o.zs3),o.LFG(Sn,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})(),ko=(()=>{class s extends kn{constructor(){super(T.t)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();class rr{shouldDetach(c){return!1}shouldAttach(c){return!1}store(c,a){}retrieve(c){return null}shouldReuseRoute(c,a){if(c.routeConfig!==a.routeConfig)return!1;const g=c.params,L=a.params,Me=Object.keys(g),Je=Object.keys(L);if(Me.length!==Je.length)return!1;for(const at of Me)if(L[at]!==g[at])return!1;return!0}}const ro=(s,c,a)=>()=>{if(c.defaultView&&typeof window<"u"){(s=>{const c=window,a=c.Ionic;a&&a.config&&"Object"!==a.config.constructor.name||(c.Ionic=c.Ionic||{},c.Ionic.config=Object.assign(Object.assign({},c.Ionic.config),s))})(Object.assign(Object.assign({},s),{_zoneGate:Me=>a.run(Me)}));const L="__zone_symbol__addEventListener"in c.body?"__zone_symbol__addEventListener":"addEventListener";return function dt(){var s=[];if(typeof window<"u"){var c=window;(!c.customElements||c.Element&&(!c.Element.prototype.closest||!c.Element.prototype.matches||!c.Element.prototype.remove||!c.Element.prototype.getRootNode))&&s.push(w.e(6748).then(w.t.bind(w,723,23))),("function"!=typeof Object.assign||!Object.entries||!Array.prototype.find||!Array.prototype.includes||!String.prototype.startsWith||!String.prototype.endsWith||c.NodeList&&!c.NodeList.prototype.forEach||!c.fetch||!function(){try{var g=new URL("b","http://a");return g.pathname="c%20d","http://a/c%20d"===g.href&&g.searchParams}catch{return!1}}()||typeof WeakMap>"u")&&s.push(w.e(2214).then(w.t.bind(w,4144,23)))}return Promise.all(s)}().then(()=>((s,c)=>typeof window>"u"?Promise.resolve():(0,te.p)().then(()=>(et(),(0,te.b)(JSON.parse('[["ion-menu_3",[[33,"ion-menu-button",{"color":[513],"disabled":[4],"menu":[1],"autoHide":[4,"auto-hide"],"type":[1],"visible":[32]},[[16,"ionMenuChange","visibilityChanged"],[16,"ionSplitPaneVisible","visibilityChanged"]]],[33,"ion-menu",{"contentId":[513,"content-id"],"menuId":[513,"menu-id"],"type":[1025],"disabled":[1028],"side":[513],"swipeGesture":[4,"swipe-gesture"],"maxEdgeStart":[2,"max-edge-start"],"isPaneVisible":[32],"isEndSide":[32],"isOpen":[64],"isActive":[64],"open":[64],"close":[64],"toggle":[64],"setOpen":[64]},[[16,"ionSplitPaneVisible","onSplitPaneChanged"],[2,"click","onBackdropClick"],[0,"keydown","onKeydown"]]],[1,"ion-menu-toggle",{"menu":[1],"autoHide":[4,"auto-hide"],"visible":[32]},[[16,"ionMenuChange","visibilityChanged"],[16,"ionSplitPaneVisible","visibilityChanged"]]]]],["ion-fab_3",[[33,"ion-fab-button",{"color":[513],"activated":[4],"disabled":[4],"download":[1],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1],"show":[4],"translucent":[4],"type":[1],"size":[1],"closeIcon":[1,"close-icon"]}],[1,"ion-fab",{"horizontal":[1],"vertical":[1],"edge":[4],"activated":[1028],"close":[64],"toggle":[64]}],[1,"ion-fab-list",{"activated":[4],"side":[1]}]]],["ion-refresher_2",[[0,"ion-refresher-content",{"pullingIcon":[1025,"pulling-icon"],"pullingText":[1,"pulling-text"],"refreshingSpinner":[1025,"refreshing-spinner"],"refreshingText":[1,"refreshing-text"]}],[32,"ion-refresher",{"pullMin":[2,"pull-min"],"pullMax":[2,"pull-max"],"closeDuration":[1,"close-duration"],"snapbackDuration":[1,"snapback-duration"],"pullFactor":[2,"pull-factor"],"disabled":[4],"nativeRefresher":[32],"state":[32],"complete":[64],"cancel":[64],"getProgress":[64]}]]],["ion-back-button",[[33,"ion-back-button",{"color":[513],"defaultHref":[1025,"default-href"],"disabled":[516],"icon":[1],"text":[1],"type":[1],"routerAnimation":[16]}]]],["ion-toast",[[33,"ion-toast",{"overlayIndex":[2,"overlay-index"],"color":[513],"enterAnimation":[16],"leaveAnimation":[16],"cssClass":[1,"css-class"],"duration":[2],"header":[1],"message":[1],"keyboardClose":[4,"keyboard-close"],"position":[1],"buttons":[16],"translucent":[4],"animated":[4],"icon":[1],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-card_5",[[33,"ion-card",{"color":[513],"button":[4],"type":[1],"disabled":[4],"download":[1],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1]}],[32,"ion-card-content"],[33,"ion-card-header",{"color":[513],"translucent":[4]}],[33,"ion-card-subtitle",{"color":[513]}],[33,"ion-card-title",{"color":[513]}]]],["ion-item-option_3",[[33,"ion-item-option",{"color":[513],"disabled":[4],"download":[1],"expandable":[4],"href":[1],"rel":[1],"target":[1],"type":[1]}],[32,"ion-item-options",{"side":[1],"fireSwipeEvent":[64]}],[0,"ion-item-sliding",{"disabled":[4],"state":[32],"getOpenAmount":[64],"getSlidingRatio":[64],"open":[64],"close":[64],"closeOpened":[64]}]]],["ion-accordion_2",[[49,"ion-accordion",{"value":[1],"disabled":[4],"readonly":[4],"toggleIcon":[1,"toggle-icon"],"toggleIconSlot":[1,"toggle-icon-slot"],"state":[32],"isNext":[32],"isPrevious":[32]}],[33,"ion-accordion-group",{"animated":[4],"multiple":[4],"value":[1025],"disabled":[4],"readonly":[4],"expand":[1],"requestAccordionToggle":[64],"getAccordions":[64]},[[0,"keydown","onKeydown"]]]]],["ion-breadcrumb_2",[[33,"ion-breadcrumb",{"collapsed":[4],"last":[4],"showCollapsedIndicator":[4,"show-collapsed-indicator"],"color":[1],"active":[4],"disabled":[4],"download":[1],"href":[1],"rel":[1],"separator":[4],"target":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16]}],[33,"ion-breadcrumbs",{"color":[1],"maxItems":[2,"max-items"],"itemsBeforeCollapse":[2,"items-before-collapse"],"itemsAfterCollapse":[2,"items-after-collapse"],"collapsed":[32],"activeChanged":[32]},[[0,"collapsedClick","onCollapsedClick"]]]]],["ion-infinite-scroll_2",[[32,"ion-infinite-scroll-content",{"loadingSpinner":[1025,"loading-spinner"],"loadingText":[1,"loading-text"]}],[0,"ion-infinite-scroll",{"threshold":[1],"disabled":[4],"position":[1],"isLoading":[32],"complete":[64]}]]],["ion-reorder_2",[[33,"ion-reorder",null,[[2,"click","onClick"]]],[0,"ion-reorder-group",{"disabled":[4],"state":[32],"complete":[64]}]]],["ion-segment_2",[[33,"ion-segment-button",{"disabled":[4],"layout":[1],"type":[1],"value":[1],"checked":[32]}],[33,"ion-segment",{"color":[513],"disabled":[4],"scrollable":[4],"swipeGesture":[4,"swipe-gesture"],"value":[1025],"selectOnFocus":[4,"select-on-focus"],"activated":[32]},[[0,"keydown","onKeyDown"]]]]],["ion-tab-bar_2",[[33,"ion-tab-button",{"disabled":[4],"download":[1],"href":[1],"rel":[1],"layout":[1025],"selected":[1028],"tab":[1],"target":[1]},[[8,"ionTabBarChanged","onTabBarChanged"]]],[33,"ion-tab-bar",{"color":[513],"selectedTab":[1,"selected-tab"],"translucent":[4],"keyboardVisible":[32]}]]],["ion-chip",[[1,"ion-chip",{"color":[513],"outline":[4],"disabled":[4]}]]],["ion-datetime-button",[[33,"ion-datetime-button",{"color":[513],"disabled":[516],"datetime":[1],"datetimePresentation":[32],"dateText":[32],"timeText":[32],"datetimeActive":[32],"selectedButton":[32]}]]],["ion-searchbar",[[34,"ion-searchbar",{"color":[513],"animated":[4],"autocomplete":[1],"autocorrect":[1],"cancelButtonIcon":[1,"cancel-button-icon"],"cancelButtonText":[1,"cancel-button-text"],"clearIcon":[1,"clear-icon"],"debounce":[2],"disabled":[4],"inputmode":[1],"enterkeyhint":[1],"placeholder":[1],"searchIcon":[1,"search-icon"],"showCancelButton":[1,"show-cancel-button"],"showClearButton":[1,"show-clear-button"],"spellcheck":[4],"type":[1],"value":[1025],"focused":[32],"noAnimate":[32],"setFocus":[64],"getInputElement":[64]}]]],["ion-toggle",[[33,"ion-toggle",{"color":[513],"name":[1],"checked":[1028],"disabled":[4],"value":[1],"enableOnOffLabels":[4,"enable-on-off-labels"],"activated":[32]}]]],["ion-nav_2",[[1,"ion-nav",{"delegate":[16],"swipeGesture":[1028,"swipe-gesture"],"animated":[4],"animation":[16],"rootParams":[16],"root":[1],"push":[64],"insert":[64],"insertPages":[64],"pop":[64],"popTo":[64],"popToRoot":[64],"removeIndex":[64],"setRoot":[64],"setPages":[64],"setRouteId":[64],"getRouteId":[64],"getActive":[64],"getByIndex":[64],"canGoBack":[64],"getPrevious":[64]}],[0,"ion-nav-link",{"component":[1],"componentProps":[16],"routerDirection":[1,"router-direction"],"routerAnimation":[16]}]]],["ion-input",[[34,"ion-input",{"fireFocusEvents":[4,"fire-focus-events"],"color":[513],"accept":[1],"autocapitalize":[1],"autocomplete":[1],"autocorrect":[1],"autofocus":[4],"clearInput":[4,"clear-input"],"clearOnEdit":[4,"clear-on-edit"],"debounce":[2],"disabled":[4],"enterkeyhint":[1],"inputmode":[1],"max":[8],"maxlength":[2],"min":[8],"minlength":[2],"multiple":[4],"name":[1],"pattern":[1],"placeholder":[1],"readonly":[4],"required":[4],"spellcheck":[4],"step":[1],"size":[2],"type":[1],"value":[1032],"hasFocus":[32],"setFocus":[64],"setBlur":[64],"getInputElement":[64]}]]],["ion-textarea",[[34,"ion-textarea",{"fireFocusEvents":[4,"fire-focus-events"],"color":[513],"autocapitalize":[1],"autofocus":[4],"clearOnEdit":[1028,"clear-on-edit"],"debounce":[2],"disabled":[4],"inputmode":[1],"enterkeyhint":[1],"maxlength":[2],"minlength":[2],"name":[1],"placeholder":[1],"readonly":[4],"required":[4],"spellcheck":[4],"cols":[2],"rows":[2],"wrap":[1],"autoGrow":[516,"auto-grow"],"value":[1025],"hasFocus":[32],"setFocus":[64],"setBlur":[64],"getInputElement":[64]}]]],["ion-backdrop",[[33,"ion-backdrop",{"visible":[4],"tappable":[4],"stopPropagation":[4,"stop-propagation"]},[[2,"click","onMouseDown"]]]]],["ion-loading",[[34,"ion-loading",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"message":[1],"cssClass":[1,"css-class"],"duration":[2],"backdropDismiss":[4,"backdrop-dismiss"],"showBackdrop":[4,"show-backdrop"],"spinner":[1025],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-modal",[[33,"ion-modal",{"hasController":[4,"has-controller"],"overlayIndex":[2,"overlay-index"],"delegate":[16],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"breakpoints":[16],"initialBreakpoint":[2,"initial-breakpoint"],"backdropBreakpoint":[2,"backdrop-breakpoint"],"handle":[4],"handleBehavior":[1,"handle-behavior"],"component":[1],"componentProps":[16],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"showBackdrop":[4,"show-backdrop"],"animated":[4],"swipeToClose":[4,"swipe-to-close"],"presentingElement":[16],"htmlAttributes":[16],"isOpen":[4,"is-open"],"trigger":[1],"keepContentsMounted":[4,"keep-contents-mounted"],"canDismiss":[4,"can-dismiss"],"presented":[32],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64],"setCurrentBreakpoint":[64],"getCurrentBreakpoint":[64]}]]],["ion-route_4",[[0,"ion-route",{"url":[1],"component":[1],"componentProps":[16],"beforeLeave":[16],"beforeEnter":[16]}],[0,"ion-route-redirect",{"from":[1],"to":[1]}],[0,"ion-router",{"root":[1],"useHash":[4,"use-hash"],"canTransition":[64],"push":[64],"back":[64],"printDebug":[64],"navChanged":[64]},[[8,"popstate","onPopState"],[4,"ionBackButton","onBackButton"]]],[1,"ion-router-link",{"color":[513],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1]}]]],["ion-avatar_3",[[33,"ion-avatar"],[33,"ion-badge",{"color":[513]}],[1,"ion-thumbnail"]]],["ion-col_3",[[1,"ion-col",{"offset":[1],"offsetXs":[1,"offset-xs"],"offsetSm":[1,"offset-sm"],"offsetMd":[1,"offset-md"],"offsetLg":[1,"offset-lg"],"offsetXl":[1,"offset-xl"],"pull":[1],"pullXs":[1,"pull-xs"],"pullSm":[1,"pull-sm"],"pullMd":[1,"pull-md"],"pullLg":[1,"pull-lg"],"pullXl":[1,"pull-xl"],"push":[1],"pushXs":[1,"push-xs"],"pushSm":[1,"push-sm"],"pushMd":[1,"push-md"],"pushLg":[1,"push-lg"],"pushXl":[1,"push-xl"],"size":[1],"sizeXs":[1,"size-xs"],"sizeSm":[1,"size-sm"],"sizeMd":[1,"size-md"],"sizeLg":[1,"size-lg"],"sizeXl":[1,"size-xl"]},[[9,"resize","onResize"]]],[1,"ion-grid",{"fixed":[4]}],[1,"ion-row"]]],["ion-slide_2",[[0,"ion-slide"],[36,"ion-slides",{"options":[8],"pager":[4],"scrollbar":[4],"update":[64],"updateAutoHeight":[64],"slideTo":[64],"slideNext":[64],"slidePrev":[64],"getActiveIndex":[64],"getPreviousIndex":[64],"length":[64],"isEnd":[64],"isBeginning":[64],"startAutoplay":[64],"stopAutoplay":[64],"lockSwipeToNext":[64],"lockSwipeToPrev":[64],"lockSwipes":[64],"getSwiper":[64]}]]],["ion-tab_2",[[1,"ion-tab",{"active":[1028],"delegate":[16],"tab":[1],"component":[1],"setActive":[64]}],[1,"ion-tabs",{"useRouter":[1028,"use-router"],"selectedTab":[32],"select":[64],"getTab":[64],"getSelected":[64],"setRouteId":[64],"getRouteId":[64]}]]],["ion-img",[[1,"ion-img",{"alt":[1],"src":[1],"loadSrc":[32],"loadError":[32]}]]],["ion-progress-bar",[[33,"ion-progress-bar",{"type":[1],"reversed":[4],"value":[2],"buffer":[2],"color":[513]}]]],["ion-range",[[33,"ion-range",{"color":[513],"debounce":[2],"name":[1],"dualKnobs":[4,"dual-knobs"],"min":[2],"max":[2],"pin":[4],"pinFormatter":[16],"snaps":[4],"step":[2],"ticks":[4],"activeBarStart":[1026,"active-bar-start"],"disabled":[4],"value":[1026],"ratioA":[32],"ratioB":[32],"pressedKnob":[32]}]]],["ion-split-pane",[[33,"ion-split-pane",{"contentId":[513,"content-id"],"disabled":[4],"when":[8],"visible":[32]}]]],["ion-text",[[1,"ion-text",{"color":[513]}]]],["ion-virtual-scroll",[[0,"ion-virtual-scroll",{"approxItemHeight":[2,"approx-item-height"],"approxHeaderHeight":[2,"approx-header-height"],"approxFooterHeight":[2,"approx-footer-height"],"headerFn":[16],"footerFn":[16],"items":[16],"itemHeight":[16],"headerHeight":[16],"footerHeight":[16],"renderItem":[16],"renderHeader":[16],"renderFooter":[16],"nodeRender":[16],"domRender":[16],"totalHeight":[32],"positionForItem":[64],"checkRange":[64],"checkEnd":[64]},[[9,"resize","onResize"]]]]],["ion-picker-column-internal",[[33,"ion-picker-column-internal",{"items":[16],"value":[1032],"color":[513],"numericInput":[4,"numeric-input"],"isActive":[32],"scrollActiveItemIntoView":[64],"setValue":[64]}]]],["ion-picker-internal",[[33,"ion-picker-internal",null,[[1,"touchstart","preventTouchStartPropagation"]]]]],["ion-radio_2",[[33,"ion-radio",{"color":[513],"name":[1],"disabled":[4],"value":[8],"checked":[32],"buttonTabindex":[32],"setFocus":[64],"setButtonTabindex":[64]}],[0,"ion-radio-group",{"allowEmptySelection":[4,"allow-empty-selection"],"name":[1],"value":[1032]},[[4,"keydown","onKeydown"]]]]],["ion-ripple-effect",[[1,"ion-ripple-effect",{"type":[1],"addRipple":[64]}]]],["ion-button_2",[[33,"ion-button",{"color":[513],"buttonType":[1025,"button-type"],"disabled":[516],"expand":[513],"fill":[1537],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"download":[1],"href":[1],"rel":[1],"shape":[513],"size":[513],"strong":[4],"target":[1],"type":[1],"form":[1]}],[1,"ion-icon",{"mode":[1025],"color":[1],"ios":[1],"md":[1],"flipRtl":[4,"flip-rtl"],"name":[513],"src":[1],"icon":[8],"size":[1],"lazy":[4],"sanitize":[4],"svgContent":[32],"isVisible":[32],"ariaLabel":[32]}]]],["ion-datetime_3",[[33,"ion-datetime",{"color":[1],"name":[1],"disabled":[4],"readonly":[4],"isDateEnabled":[16],"min":[1025],"max":[1025],"presentation":[1],"cancelText":[1,"cancel-text"],"doneText":[1,"done-text"],"clearText":[1,"clear-text"],"yearValues":[8,"year-values"],"monthValues":[8,"month-values"],"dayValues":[8,"day-values"],"hourValues":[8,"hour-values"],"minuteValues":[8,"minute-values"],"locale":[1],"firstDayOfWeek":[2,"first-day-of-week"],"titleSelectedDatesFormatter":[16],"multiple":[4],"value":[1025],"showDefaultTitle":[4,"show-default-title"],"showDefaultButtons":[4,"show-default-buttons"],"showClearButton":[4,"show-clear-button"],"showDefaultTimeLabel":[4,"show-default-time-label"],"hourCycle":[1,"hour-cycle"],"size":[1],"preferWheel":[4,"prefer-wheel"],"showMonthAndYear":[32],"activeParts":[32],"workingParts":[32],"isPresented":[32],"isTimePopoverOpen":[32],"confirm":[64],"reset":[64],"cancel":[64]}],[34,"ion-picker",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"buttons":[16],"columns":[16],"cssClass":[1,"css-class"],"duration":[2],"showBackdrop":[4,"show-backdrop"],"backdropDismiss":[4,"backdrop-dismiss"],"animated":[4],"htmlAttributes":[16],"presented":[32],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64],"getColumn":[64]}],[32,"ion-picker-column",{"col":[16]}]]],["ion-action-sheet",[[34,"ion-action-sheet",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"buttons":[16],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"header":[1],"subHeader":[1,"sub-header"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-alert",[[34,"ion-alert",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"cssClass":[1,"css-class"],"header":[1],"subHeader":[1,"sub-header"],"message":[1],"buttons":[16],"inputs":[1040],"backdropDismiss":[4,"backdrop-dismiss"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]},[[4,"keydown","onKeydown"]]]]],["ion-popover",[[33,"ion-popover",{"hasController":[4,"has-controller"],"delegate":[16],"overlayIndex":[2,"overlay-index"],"enterAnimation":[16],"leaveAnimation":[16],"component":[1],"componentProps":[16],"keyboardClose":[4,"keyboard-close"],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"event":[8],"showBackdrop":[4,"show-backdrop"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"triggerAction":[1,"trigger-action"],"trigger":[1],"size":[1],"dismissOnSelect":[4,"dismiss-on-select"],"reference":[1],"side":[1],"alignment":[1025],"arrow":[4],"isOpen":[4,"is-open"],"keyboardEvents":[4,"keyboard-events"],"keepContentsMounted":[4,"keep-contents-mounted"],"presented":[32],"presentFromTrigger":[64],"present":[64],"dismiss":[64],"getParentPopover":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-checkbox",[[33,"ion-checkbox",{"color":[513],"name":[1],"checked":[1028],"indeterminate":[1028],"disabled":[4],"value":[8]}]]],["ion-select_3",[[33,"ion-select",{"disabled":[4],"cancelText":[1,"cancel-text"],"okText":[1,"ok-text"],"placeholder":[1],"name":[1],"selectedText":[1,"selected-text"],"multiple":[4],"interface":[1],"interfaceOptions":[8,"interface-options"],"compareWith":[1,"compare-with"],"value":[1032],"isExpanded":[32],"open":[64]}],[1,"ion-select-option",{"disabled":[4],"value":[8]}],[34,"ion-select-popover",{"header":[1],"subHeader":[1,"sub-header"],"message":[1],"multiple":[4],"options":[16]},[[0,"ionChange","onSelect"]]]]],["ion-app_8",[[0,"ion-app",{"setFocus":[64]}],[1,"ion-content",{"color":[513],"fullscreen":[4],"forceOverscroll":[1028,"force-overscroll"],"scrollX":[4,"scroll-x"],"scrollY":[4,"scroll-y"],"scrollEvents":[4,"scroll-events"],"getScrollElement":[64],"getBackgroundElement":[64],"scrollToTop":[64],"scrollToBottom":[64],"scrollByPoint":[64],"scrollToPoint":[64]},[[8,"appload","onAppLoad"]]],[36,"ion-footer",{"collapse":[1],"translucent":[4],"keyboardVisible":[32]}],[36,"ion-header",{"collapse":[1],"translucent":[4]}],[1,"ion-router-outlet",{"mode":[1025],"delegate":[16],"animated":[4],"animation":[16],"swipeHandler":[16],"commit":[64],"setRouteId":[64],"getRouteId":[64]}],[33,"ion-title",{"color":[513],"size":[1]}],[33,"ion-toolbar",{"color":[513]},[[0,"ionStyle","childrenStyle"]]],[34,"ion-buttons",{"collapse":[4]}]]],["ion-spinner",[[1,"ion-spinner",{"color":[513],"duration":[2],"name":[1],"paused":[4]}]]],["ion-item_8",[[33,"ion-item-divider",{"color":[513],"sticky":[4]}],[32,"ion-item-group"],[1,"ion-skeleton-text",{"animated":[4]}],[32,"ion-list",{"lines":[1],"inset":[4],"closeSlidingItems":[64]}],[33,"ion-list-header",{"color":[513],"lines":[1]}],[49,"ion-item",{"color":[513],"button":[4],"detail":[4],"detailIcon":[1,"detail-icon"],"disabled":[4],"download":[1],"fill":[1],"shape":[1],"href":[1],"rel":[1],"lines":[1],"counter":[4],"routerAnimation":[16],"routerDirection":[1,"router-direction"],"target":[1],"type":[1],"counterFormatter":[16],"multipleInputs":[32],"focusable":[32],"counterString":[32]},[[0,"ionChange","handleIonChange"],[0,"ionColor","labelColorChanged"],[0,"ionStyle","itemStyle"]]],[34,"ion-label",{"color":[513],"position":[1],"noAnimate":[32]}],[33,"ion-note",{"color":[513]}]]]]'),c))))(0,{exclude:["ion-tabs","ion-tab"],syncQueue:!0,raf:Pt,jmp:Me=>a.runOutsideAngular(Me),ael(Me,Je,at,Dt){Me[L](Je,at,Dt)},rel(Me,Je,at,Dt){Me.removeEventListener(Je,at,Dt)}}))}};let C=(()=>{class s{static forRoot(a){return{ngModule:s,providers:[{provide:Fr,useValue:a},{provide:o.ip1,useFactory:ro,multi:!0,deps:[Fr,ze.K0,o.R0b]}]}}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275mod=o.oAB({type:s}),s.\u0275inj=o.cJS({providers:[Or,Fo,wo],imports:[[ze.ez]]}),s})()},8834:(Qe,Fe,w)=>{"use strict";w.d(Fe,{c:()=>j});var o=w(5730),x=w(3457);let N;const R=P=>P.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),W=P=>{if(void 0===N){const pe=void 0!==P.style.webkitAnimationName;N=void 0===P.style.animationName&&pe?"-webkit-":""}return N},M=(P,K,pe)=>{const ke=K.startsWith("animation")?W(P):"";P.style.setProperty(ke+K,pe)},U=(P,K)=>{const pe=K.startsWith("animation")?W(P):"";P.style.removeProperty(pe+K)},G=[],E=(P=[],K)=>{if(void 0!==K){const pe=Array.isArray(K)?K:[K];return[...P,...pe]}return P},j=P=>{let K,pe,ke,Te,ie,Be,Q,ue,de,ne,Ee,et,Ue,re=[],oe=[],be=[],Ne=!1,T={},k=[],O=[],te={},ce=0,Ae=!1,De=!1,Ce=!0,ze=!1,dt=!0,St=!1;const Ke=P,nn=[],wt=[],Rt=[],Kt=[],pn=[],Pt=[],Ut=[],it=[],Xt=[],kt=[],Vt="function"==typeof AnimationEffect||void 0!==x.w&&"function"==typeof x.w.AnimationEffect,rn="function"==typeof Element&&"function"==typeof Element.prototype.animate&&Vt,en=()=>kt,Et=(X,le)=>((le?.oneTimeCallback?wt:nn).push({c:X,o:le}),Ue),Ct=()=>{if(rn)kt.forEach(X=>{X.cancel()}),kt.length=0;else{const X=Rt.slice();(0,o.r)(()=>{X.forEach(le=>{U(le,"animation-name"),U(le,"animation-duration"),U(le,"animation-timing-function"),U(le,"animation-iteration-count"),U(le,"animation-delay"),U(le,"animation-play-state"),U(le,"animation-fill-mode"),U(le,"animation-direction")})})}},qe=()=>{pn.forEach(X=>{X?.parentNode&&X.parentNode.removeChild(X)}),pn.length=0},He=()=>void 0!==ie?ie:Q?Q.getFill():"both",Ye=()=>void 0!==de?de:void 0!==Be?Be:Q?Q.getDirection():"normal",pt=()=>Ae?"linear":void 0!==ke?ke:Q?Q.getEasing():"linear",vt=()=>De?0:void 0!==ne?ne:void 0!==pe?pe:Q?Q.getDuration():0,Ht=()=>void 0!==Te?Te:Q?Q.getIterations():1,_t=()=>void 0!==Ee?Ee:void 0!==K?K:Q?Q.getDelay():0,sn=()=>{0!==ce&&(ce--,0===ce&&((()=>{Qt(),it.forEach(Re=>Re()),Xt.forEach(Re=>Re());const X=Ce?1:0,le=k,Ie=O,je=te;Rt.forEach(Re=>{const ot=Re.classList;le.forEach(st=>ot.add(st)),Ie.forEach(st=>ot.remove(st));for(const st in je)je.hasOwnProperty(st)&&M(Re,st,je[st])}),nn.forEach(Re=>Re.c(X,Ue)),wt.forEach(Re=>Re.c(X,Ue)),wt.length=0,dt=!0,Ce&&(ze=!0),Ce=!0})(),Q&&Q.animationFinish()))},dn=(X=!0)=>{qe();const le=(P=>(P.forEach(K=>{for(const pe in K)if(K.hasOwnProperty(pe)){const ke=K[pe];if("easing"===pe)K["animation-timing-function"]=ke,delete K[pe];else{const Te=R(pe);Te!==pe&&(K[Te]=ke,delete K[pe])}}}),P))(re);Rt.forEach(Ie=>{if(le.length>0){const je=((P=[])=>P.map(K=>{const pe=K.offset,ke=[];for(const Te in K)K.hasOwnProperty(Te)&&"offset"!==Te&&ke.push(`${Te}: ${K[Te]};`);return`${100*pe}% { ${ke.join(" ")} }`}).join(" "))(le);et=void 0!==P?P:(P=>{let K=G.indexOf(P);return K<0&&(K=G.push(P)-1),`ion-animation-${K}`})(je);const Re=((P,K,pe)=>{var ke;const Te=(P=>{const K=void 0!==P.getRootNode?P.getRootNode():P;return K.head||K})(pe),ie=W(pe),Be=Te.querySelector("#"+P);if(Be)return Be;const re=(null!==(ke=pe.ownerDocument)&&void 0!==ke?ke:document).createElement("style");return re.id=P,re.textContent=`@${ie}keyframes ${P} { ${K} } @${ie}keyframes ${P}-alt { ${K} }`,Te.appendChild(re),re})(et,je,Ie);pn.push(Re),M(Ie,"animation-duration",`${vt()}ms`),M(Ie,"animation-timing-function",pt()),M(Ie,"animation-delay",`${_t()}ms`),M(Ie,"animation-fill-mode",He()),M(Ie,"animation-direction",Ye());const ot=Ht()===1/0?"infinite":Ht().toString();M(Ie,"animation-iteration-count",ot),M(Ie,"animation-play-state","paused"),X&&M(Ie,"animation-name",`${Re.id}-alt`),(0,o.r)(()=>{M(Ie,"animation-name",Re.id||null)})}})},sr=(X=!0)=>{(()=>{Pt.forEach(je=>je()),Ut.forEach(je=>je());const X=oe,le=be,Ie=T;Rt.forEach(je=>{const Re=je.classList;X.forEach(ot=>Re.add(ot)),le.forEach(ot=>Re.remove(ot));for(const ot in Ie)Ie.hasOwnProperty(ot)&&M(je,ot,Ie[ot])})})(),re.length>0&&(rn?(Rt.forEach(X=>{const le=X.animate(re,{id:Ke,delay:_t(),duration:vt(),easing:pt(),iterations:Ht(),fill:He(),direction:Ye()});le.pause(),kt.push(le)}),kt.length>0&&(kt[0].onfinish=()=>{sn()})):dn(X)),Ne=!0},$n=X=>{if(X=Math.min(Math.max(X,0),.9999),rn)kt.forEach(le=>{le.currentTime=le.effect.getComputedTiming().delay+vt()*X,le.pause()});else{const le=`-${vt()*X}ms`;Rt.forEach(Ie=>{re.length>0&&(M(Ie,"animation-delay",le),M(Ie,"animation-play-state","paused"))})}},Tn=X=>{kt.forEach(le=>{le.effect.updateTiming({delay:_t(),duration:vt(),easing:pt(),iterations:Ht(),fill:He(),direction:Ye()})}),void 0!==X&&$n(X)},xn=(X=!0,le)=>{(0,o.r)(()=>{Rt.forEach(Ie=>{M(Ie,"animation-name",et||null),M(Ie,"animation-duration",`${vt()}ms`),M(Ie,"animation-timing-function",pt()),M(Ie,"animation-delay",void 0!==le?`-${le*vt()}ms`:`${_t()}ms`),M(Ie,"animation-fill-mode",He()||null),M(Ie,"animation-direction",Ye()||null);const je=Ht()===1/0?"infinite":Ht().toString();M(Ie,"animation-iteration-count",je),X&&M(Ie,"animation-name",`${et}-alt`),(0,o.r)(()=>{M(Ie,"animation-name",et||null)})})})},vn=(X=!1,le=!0,Ie)=>(X&&Kt.forEach(je=>{je.update(X,le,Ie)}),rn?Tn(Ie):xn(le,Ie),Ue),gr=()=>{Ne&&(rn?kt.forEach(X=>{X.pause()}):Rt.forEach(X=>{M(X,"animation-play-state","paused")}),St=!0)},fn=()=>{ue=void 0,sn()},Qt=()=>{ue&&clearTimeout(ue)},F=X=>new Promise(le=>{X?.sync&&(De=!0,Et(()=>De=!1,{oneTimeCallback:!0})),Ne||sr(),ze&&(rn?($n(0),Tn()):xn(),ze=!1),dt&&(ce=Kt.length+1,dt=!1),Et(()=>le(),{oneTimeCallback:!0}),Kt.forEach(Ie=>{Ie.play()}),rn?(kt.forEach(X=>{X.play()}),(0===re.length||0===Rt.length)&&sn()):(()=>{if(Qt(),(0,o.r)(()=>{Rt.forEach(X=>{re.length>0&&M(X,"animation-play-state","running")})}),0===re.length||0===Rt.length)sn();else{const X=_t()||0,le=vt()||0,Ie=Ht()||1;isFinite(Ie)&&(ue=setTimeout(fn,X+le*Ie+100)),((P,K)=>{let pe;const ke={passive:!0},ie=Be=>{P===Be.target&&(pe&&pe(),Qt(),(0,o.r)(()=>{Rt.forEach(X=>{U(X,"animation-duration"),U(X,"animation-delay"),U(X,"animation-play-state")}),(0,o.r)(sn)}))};P&&(P.addEventListener("webkitAnimationEnd",ie,ke),P.addEventListener("animationend",ie,ke),pe=()=>{P.removeEventListener("webkitAnimationEnd",ie,ke),P.removeEventListener("animationend",ie,ke)})})(Rt[0])}})(),St=!1}),he=(X,le)=>{const Ie=re[0];return void 0===Ie||void 0!==Ie.offset&&0!==Ie.offset?re=[{offset:0,[X]:le},...re]:Ie[X]=le,Ue};return Ue={parentAnimation:Q,elements:Rt,childAnimations:Kt,id:Ke,animationFinish:sn,from:he,to:(X,le)=>{const Ie=re[re.length-1];return void 0===Ie||void 0!==Ie.offset&&1!==Ie.offset?re=[...re,{offset:1,[X]:le}]:Ie[X]=le,Ue},fromTo:(X,le,Ie)=>he(X,le).to(X,Ie),parent:X=>(Q=X,Ue),play:F,pause:()=>(Kt.forEach(X=>{X.pause()}),gr(),Ue),stop:()=>{Kt.forEach(X=>{X.stop()}),Ne&&(Ct(),Ne=!1),Ae=!1,De=!1,dt=!0,de=void 0,ne=void 0,Ee=void 0,ce=0,ze=!1,Ce=!0,St=!1},destroy:X=>(Kt.forEach(le=>{le.destroy(X)}),(X=>{Ct(),X&&qe()})(X),Rt.length=0,Kt.length=0,re.length=0,nn.length=0,wt.length=0,Ne=!1,dt=!0,Ue),keyframes:X=>{const le=re!==X;return re=X,le&&(X=>{rn?en().forEach(le=>{if(le.effect.setKeyframes)le.effect.setKeyframes(X);else{const Ie=new KeyframeEffect(le.effect.target,X,le.effect.getTiming());le.effect=Ie}}):dn()})(re),Ue},addAnimation:X=>{if(null!=X)if(Array.isArray(X))for(const le of X)le.parent(Ue),Kt.push(le);else X.parent(Ue),Kt.push(X);return Ue},addElement:X=>{if(null!=X)if(1===X.nodeType)Rt.push(X);else if(X.length>=0)for(let le=0;le(ie=X,vn(!0),Ue),direction:X=>(Be=X,vn(!0),Ue),iterations:X=>(Te=X,vn(!0),Ue),duration:X=>(!rn&&0===X&&(X=1),pe=X,vn(!0),Ue),easing:X=>(ke=X,vn(!0),Ue),delay:X=>(K=X,vn(!0),Ue),getWebAnimations:en,getKeyframes:()=>re,getFill:He,getDirection:Ye,getDelay:_t,getIterations:Ht,getEasing:pt,getDuration:vt,afterAddRead:X=>(it.push(X),Ue),afterAddWrite:X=>(Xt.push(X),Ue),afterClearStyles:(X=[])=>{for(const le of X)te[le]="";return Ue},afterStyles:(X={})=>(te=X,Ue),afterRemoveClass:X=>(O=E(O,X),Ue),afterAddClass:X=>(k=E(k,X),Ue),beforeAddRead:X=>(Pt.push(X),Ue),beforeAddWrite:X=>(Ut.push(X),Ue),beforeClearStyles:(X=[])=>{for(const le of X)T[le]="";return Ue},beforeStyles:(X={})=>(T=X,Ue),beforeRemoveClass:X=>(be=E(be,X),Ue),beforeAddClass:X=>(oe=E(oe,X),Ue),onFinish:Et,isRunning:()=>0!==ce&&!St,progressStart:(X=!1,le)=>(Kt.forEach(Ie=>{Ie.progressStart(X,le)}),gr(),Ae=X,Ne||sr(),vn(!1,!0,le),Ue),progressStep:X=>(Kt.forEach(le=>{le.progressStep(X)}),$n(X),Ue),progressEnd:(X,le,Ie)=>(Ae=!1,Kt.forEach(je=>{je.progressEnd(X,le,Ie)}),void 0!==Ie&&(ne=Ie),ze=!1,Ce=!0,0===X?(de="reverse"===Ye()?"normal":"reverse","reverse"===de&&(Ce=!1),rn?(vn(),$n(1-le)):(Ee=(1-le)*vt()*-1,vn(!1,!1))):1===X&&(rn?(vn(),$n(le)):(Ee=le*vt()*-1,vn(!1,!1))),void 0!==X&&(Et(()=>{ne=void 0,de=void 0,Ee=void 0},{oneTimeCallback:!0}),Q||F()),Ue)}}},4349:(Qe,Fe,w)=>{"use strict";w.d(Fe,{G:()=>R});class x{constructor(M,U,_,Y,G){this.id=U,this.name=_,this.disableScroll=G,this.priority=1e6*Y+U,this.ctrl=M}canStart(){return!!this.ctrl&&this.ctrl.canStart(this.name)}start(){return!!this.ctrl&&this.ctrl.start(this.name,this.id,this.priority)}capture(){if(!this.ctrl)return!1;const M=this.ctrl.capture(this.name,this.id,this.priority);return M&&this.disableScroll&&this.ctrl.disableScroll(this.id),M}release(){this.ctrl&&(this.ctrl.release(this.id),this.disableScroll&&this.ctrl.enableScroll(this.id))}destroy(){this.release(),this.ctrl=void 0}}class N{constructor(M,U,_,Y){this.id=U,this.disable=_,this.disableScroll=Y,this.ctrl=M}block(){if(this.ctrl){if(this.disable)for(const M of this.disable)this.ctrl.disableGesture(M,this.id);this.disableScroll&&this.ctrl.disableScroll(this.id)}}unblock(){if(this.ctrl){if(this.disable)for(const M of this.disable)this.ctrl.enableGesture(M,this.id);this.disableScroll&&this.ctrl.enableScroll(this.id)}}destroy(){this.unblock(),this.ctrl=void 0}}const ge="backdrop-no-scroll",R=new class o{constructor(){this.gestureId=0,this.requestedStart=new Map,this.disabledGestures=new Map,this.disabledScroll=new Set}createGesture(M){var U;return new x(this,this.newID(),M.name,null!==(U=M.priority)&&void 0!==U?U:0,!!M.disableScroll)}createBlocker(M={}){return new N(this,this.newID(),M.disable,!!M.disableScroll)}start(M,U,_){return this.canStart(M)?(this.requestedStart.set(U,_),!0):(this.requestedStart.delete(U),!1)}capture(M,U,_){if(!this.start(M,U,_))return!1;const Y=this.requestedStart;let G=-1e4;if(Y.forEach(Z=>{G=Math.max(G,Z)}),G===_){this.capturedId=U,Y.clear();const Z=new CustomEvent("ionGestureCaptured",{detail:{gestureName:M}});return document.dispatchEvent(Z),!0}return Y.delete(U),!1}release(M){this.requestedStart.delete(M),this.capturedId===M&&(this.capturedId=void 0)}disableGesture(M,U){let _=this.disabledGestures.get(M);void 0===_&&(_=new Set,this.disabledGestures.set(M,_)),_.add(U)}enableGesture(M,U){const _=this.disabledGestures.get(M);void 0!==_&&_.delete(U)}disableScroll(M){this.disabledScroll.add(M),1===this.disabledScroll.size&&document.body.classList.add(ge)}enableScroll(M){this.disabledScroll.delete(M),0===this.disabledScroll.size&&document.body.classList.remove(ge)}canStart(M){return!(void 0!==this.capturedId||this.isDisabled(M))}isCaptured(){return void 0!==this.capturedId}isScrollDisabled(){return this.disabledScroll.size>0}isDisabled(M){const U=this.disabledGestures.get(M);return!!(U&&U.size>0)}newID(){return this.gestureId++,this.gestureId}}},7593:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{MENU_BACK_BUTTON_PRIORITY:()=>R,OVERLAY_BACK_BUTTON_PRIORITY:()=>ge,blockHardwareBackButton:()=>x,startHardwareBackButton:()=>N});var o=w(5861);const x=()=>{document.addEventListener("backbutton",()=>{})},N=()=>{const W=document;let M=!1;W.addEventListener("backbutton",()=>{if(M)return;let U=0,_=[];const Y=new CustomEvent("ionBackButton",{bubbles:!1,detail:{register(S,B){_.push({priority:S,handler:B,id:U++})}}});W.dispatchEvent(Y);const G=function(){var S=(0,o.Z)(function*(B){try{if(B?.handler){const E=B.handler(Z);null!=E&&(yield E)}}catch(E){console.error(E)}});return function(E){return S.apply(this,arguments)}}(),Z=()=>{if(_.length>0){let S={priority:Number.MIN_SAFE_INTEGER,handler:()=>{},id:-1};_.forEach(B=>{B.priority>=S.priority&&(S=B)}),M=!0,_=_.filter(B=>B.id!==S.id),G(S).then(()=>M=!1)}};Z()})},ge=100,R=99},5730:(Qe,Fe,w)=>{"use strict";w.d(Fe,{a:()=>M,b:()=>U,c:()=>N,d:()=>B,e:()=>E,f:()=>S,g:()=>_,h:()=>Te,i:()=>W,j:()=>ge,k:()=>Z,l:()=>j,m:()=>G,n:()=>P,o:()=>ke,p:()=>pe,q:()=>ie,r:()=>Y,s:()=>Be,t:()=>o,u:()=>K});const o=(re,oe=0)=>new Promise(be=>{x(re,oe,be)}),x=(re,oe=0,be)=>{let Ne,Q;const T={passive:!0},O=()=>{Ne&&Ne()},te=ce=>{(void 0===ce||re===ce.target)&&(O(),be(ce))};return re&&(re.addEventListener("webkitTransitionEnd",te,T),re.addEventListener("transitionend",te,T),Q=setTimeout(te,oe+500),Ne=()=>{Q&&(clearTimeout(Q),Q=void 0),re.removeEventListener("webkitTransitionEnd",te,T),re.removeEventListener("transitionend",te,T)}),O},N=(re,oe)=>{re.componentOnReady?re.componentOnReady().then(be=>oe(be)):Y(()=>oe(re))},ge=(re,oe=[])=>{const be={};return oe.forEach(Ne=>{re.hasAttribute(Ne)&&(null!==re.getAttribute(Ne)&&(be[Ne]=re.getAttribute(Ne)),re.removeAttribute(Ne))}),be},R=["role","aria-activedescendant","aria-atomic","aria-autocomplete","aria-braillelabel","aria-brailleroledescription","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colindextext","aria-colspan","aria-controls","aria-current","aria-describedby","aria-description","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowindextext","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"],W=(re,oe)=>{let be=R;return oe&&oe.length>0&&(be=be.filter(Ne=>!oe.includes(Ne))),ge(re,be)},M=(re,oe,be,Ne)=>{var Q;if(typeof window<"u"){const k=null===(Q=window?.Ionic)||void 0===Q?void 0:Q.config;if(k){const O=k.get("_ael");if(O)return O(re,oe,be,Ne);if(k._ael)return k._ael(re,oe,be,Ne)}}return re.addEventListener(oe,be,Ne)},U=(re,oe,be,Ne)=>{var Q;if(typeof window<"u"){const k=null===(Q=window?.Ionic)||void 0===Q?void 0:Q.config;if(k){const O=k.get("_rel");if(O)return O(re,oe,be,Ne);if(k._rel)return k._rel(re,oe,be,Ne)}}return re.removeEventListener(oe,be,Ne)},_=(re,oe=re)=>re.shadowRoot||oe,Y=re=>"function"==typeof __zone_symbol__requestAnimationFrame?__zone_symbol__requestAnimationFrame(re):"function"==typeof requestAnimationFrame?requestAnimationFrame(re):setTimeout(re),G=re=>!!re.shadowRoot&&!!re.attachShadow,Z=re=>{const oe=re.closest("ion-item");return oe?oe.querySelector("ion-label"):null},S=re=>{if(re.focus(),re.classList.contains("ion-focusable")){const oe=re.closest("ion-app");oe&&oe.setFocus([re])}},B=(re,oe)=>{let be;const Ne=re.getAttribute("aria-labelledby"),Q=re.id;let T=null!==Ne&&""!==Ne.trim()?Ne:oe+"-lbl",k=null!==Ne&&""!==Ne.trim()?document.getElementById(Ne):Z(re);return k?(null===Ne&&(k.id=T),be=k.textContent,k.setAttribute("aria-hidden","true")):""!==Q.trim()&&(k=document.querySelector(`label[for="${Q}"]`),k&&(""!==k.id?T=k.id:k.id=T=`${Q}-lbl`,be=k.textContent)),{label:k,labelId:T,labelText:be}},E=(re,oe,be,Ne,Q)=>{if(re||G(oe)){let T=oe.querySelector("input.aux-input");T||(T=oe.ownerDocument.createElement("input"),T.type="hidden",T.classList.add("aux-input"),oe.appendChild(T)),T.disabled=Q,T.name=be,T.value=Ne||""}},j=(re,oe,be)=>Math.max(re,Math.min(oe,be)),P=(re,oe)=>{if(!re){const be="ASSERT: "+oe;throw console.error(be),new Error(be)}},K=re=>re.timeStamp||Date.now(),pe=re=>{if(re){const oe=re.changedTouches;if(oe&&oe.length>0){const be=oe[0];return{x:be.clientX,y:be.clientY}}if(void 0!==re.pageX)return{x:re.pageX,y:re.pageY}}return{x:0,y:0}},ke=re=>{const oe="rtl"===document.dir;switch(re){case"start":return oe;case"end":return!oe;default:throw new Error(`"${re}" is not a valid value for [side]. Use "start" or "end" instead.`)}},Te=(re,oe)=>{const be=re._original||re;return{_original:re,emit:ie(be.emit.bind(be),oe)}},ie=(re,oe=0)=>{let be;return(...Ne)=>{clearTimeout(be),be=setTimeout(re,oe,...Ne)}},Be=(re,oe)=>{if(re??(re={}),oe??(oe={}),re===oe)return!0;const be=Object.keys(re);if(be.length!==Object.keys(oe).length)return!1;for(const Ne of be)if(!(Ne in oe)||re[Ne]!==oe[Ne])return!1;return!0}},4292:(Qe,Fe,w)=>{"use strict";w.d(Fe,{m:()=>G});var o=w(5861),x=w(7593),N=w(5730),ge=w(9658),R=w(8834);const W=Z=>(0,R.c)().duration(Z?400:300),M=Z=>{let S,B;const E=Z.width+8,j=(0,R.c)(),P=(0,R.c)();Z.isEndSide?(S=E+"px",B="0px"):(S=-E+"px",B="0px"),j.addElement(Z.menuInnerEl).fromTo("transform",`translateX(${S})`,`translateX(${B})`);const pe="ios"===(0,ge.b)(Z),ke=pe?.2:.25;return P.addElement(Z.backdropEl).fromTo("opacity",.01,ke),W(pe).addAnimation([j,P])},U=Z=>{let S,B;const E=(0,ge.b)(Z),j=Z.width;Z.isEndSide?(S=-j+"px",B=j+"px"):(S=j+"px",B=-j+"px");const P=(0,R.c)().addElement(Z.menuInnerEl).fromTo("transform",`translateX(${B})`,"translateX(0px)"),K=(0,R.c)().addElement(Z.contentEl).fromTo("transform","translateX(0px)",`translateX(${S})`),pe=(0,R.c)().addElement(Z.backdropEl).fromTo("opacity",.01,.32);return W("ios"===E).addAnimation([P,K,pe])},_=Z=>{const S=(0,ge.b)(Z),B=Z.width*(Z.isEndSide?-1:1)+"px",E=(0,R.c)().addElement(Z.contentEl).fromTo("transform","translateX(0px)",`translateX(${B})`);return W("ios"===S).addAnimation(E)},G=(()=>{const Z=new Map,S=[],B=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&ne.open()});return function(ne){return ue.apply(this,arguments)}}(),E=function(){var ue=(0,o.Z)(function*(de){const ne=yield void 0!==de?Te(de):ie();return void 0!==ne&&ne.close()});return function(ne){return ue.apply(this,arguments)}}(),j=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&ne.toggle()});return function(ne){return ue.apply(this,arguments)}}(),P=function(){var ue=(0,o.Z)(function*(de,ne){const Ee=yield Te(ne);return Ee&&(Ee.disabled=!de),Ee});return function(ne,Ee){return ue.apply(this,arguments)}}(),K=function(){var ue=(0,o.Z)(function*(de,ne){const Ee=yield Te(ne);return Ee&&(Ee.swipeGesture=de),Ee});return function(ne,Ee){return ue.apply(this,arguments)}}(),pe=function(){var ue=(0,o.Z)(function*(de){if(null!=de){const ne=yield Te(de);return void 0!==ne&&ne.isOpen()}return void 0!==(yield ie())});return function(ne){return ue.apply(this,arguments)}}(),ke=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&!ne.disabled});return function(ne){return ue.apply(this,arguments)}}(),Te=function(){var ue=(0,o.Z)(function*(de){return yield De(),"start"===de||"end"===de?Ae(Ce=>Ce.side===de&&!Ce.disabled)||Ae(Ce=>Ce.side===de):null!=de?Ae(Ee=>Ee.menuId===de):Ae(Ee=>!Ee.disabled)||(S.length>0?S[0].el:void 0)});return function(ne){return ue.apply(this,arguments)}}(),ie=function(){var ue=(0,o.Z)(function*(){return yield De(),O()});return function(){return ue.apply(this,arguments)}}(),Be=function(){var ue=(0,o.Z)(function*(){return yield De(),te()});return function(){return ue.apply(this,arguments)}}(),re=function(){var ue=(0,o.Z)(function*(){return yield De(),ce()});return function(){return ue.apply(this,arguments)}}(),oe=(ue,de)=>{Z.set(ue,de)},Q=ue=>{const de=ue.side;S.filter(ne=>ne.side===de&&ne!==ue).forEach(ne=>ne.disabled=!0)},T=function(){var ue=(0,o.Z)(function*(de,ne,Ee){if(ce())return!1;if(ne){const Ce=yield ie();Ce&&de.el!==Ce&&(yield Ce.setOpen(!1,!1))}return de._setOpen(ne,Ee)});return function(ne,Ee,Ce){return ue.apply(this,arguments)}}(),O=()=>Ae(ue=>ue._isOpen),te=()=>S.map(ue=>ue.el),ce=()=>S.some(ue=>ue.isAnimating),Ae=ue=>{const de=S.find(ue);if(void 0!==de)return de.el},De=()=>Promise.all(Array.from(document.querySelectorAll("ion-menu")).map(ue=>new Promise(de=>(0,N.c)(ue,de))));return oe("reveal",_),oe("push",U),oe("overlay",M),typeof document<"u"&&document.addEventListener("ionBackButton",ue=>{const de=O();de&&ue.detail.register(x.MENU_BACK_BUTTON_PRIORITY,()=>de.close())}),{registerAnimation:oe,get:Te,getMenus:Be,getOpen:ie,isEnabled:ke,swipeGesture:K,isAnimating:re,isOpen:pe,enable:P,toggle:j,close:E,open:B,_getOpenSync:O,_createAnimation:(ue,de)=>{const ne=Z.get(ue);if(!ne)throw new Error("animation not registered");return ne(de)},_register:ue=>{S.indexOf(ue)<0&&(ue.disabled||Q(ue),S.push(ue))},_unregister:ue=>{const de=S.indexOf(ue);de>-1&&S.splice(de,1)},_setOpen:T,_setActiveMenu:Q}})()},3457:(Qe,Fe,w)=>{"use strict";w.d(Fe,{w:()=>o});const o=typeof window<"u"?window:void 0},1308:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>rt,H:()=>Rt,a:()=>Ce,b:()=>cn,c:()=>Cn,e:()=>Er,f:()=>On,g:()=>ze,h:()=>nn,i:()=>zt,j:()=>Ye,k:()=>Dn,p:()=>j,r:()=>er,s:()=>B});var o=w(5861);let N,ge,R,W=!1,M=!1,U=!1,_=!1,Y=!1;const G=typeof window<"u"?window:{},Z=G.document||{head:{}},S={$flags$:0,$resourcesUrl$:"",jmp:F=>F(),raf:F=>requestAnimationFrame(F),ael:(F,q,he,we)=>F.addEventListener(q,he,we),rel:(F,q,he,we)=>F.removeEventListener(q,he,we),ce:(F,q)=>new CustomEvent(F,q)},B=F=>{Object.assign(S,F)},j=F=>Promise.resolve(F),P=(()=>{try{return new CSSStyleSheet,"function"==typeof(new CSSStyleSheet).replaceSync}catch{}return!1})(),K=(F,q,he,we)=>{he&&he.map(([Pe,X,le])=>{const Ie=ke(F,Pe),je=pe(q,le),Re=Te(Pe);S.ael(Ie,X,je,Re),(q.$rmListeners$=q.$rmListeners$||[]).push(()=>S.rel(Ie,X,je,Re))})},pe=(F,q)=>he=>{try{256&F.$flags$?F.$lazyInstance$[q](he):(F.$queuedListeners$=F.$queuedListeners$||[]).push([q,he])}catch(we){Tn(we)}},ke=(F,q)=>4&q?Z:8&q?G:16&q?Z.body:F,Te=F=>0!=(2&F),be="s-id",Ne="sty-id",Q="c-id",k="http://www.w3.org/1999/xlink",ce=new WeakMap,Ae=(F,q,he)=>{let we=tr.get(F);P&&he?(we=we||new CSSStyleSheet,"string"==typeof we?we=q:we.replaceSync(q)):we=q,tr.set(F,we)},De=(F,q,he,we)=>{let Pe=de(q,he);const X=tr.get(Pe);if(F=11===F.nodeType?F:Z,X)if("string"==typeof X){let Ie,le=ce.get(F=F.head||F);le||ce.set(F,le=new Set),le.has(Pe)||(F.host&&(Ie=F.querySelector(`[${Ne}="${Pe}"]`))?Ie.innerHTML=X:(Ie=Z.createElement("style"),Ie.innerHTML=X,F.insertBefore(Ie,F.querySelector("link"))),le&&le.add(Pe))}else F.adoptedStyleSheets.includes(X)||(F.adoptedStyleSheets=[...F.adoptedStyleSheets,X]);return Pe},de=(F,q)=>"sc-"+(q&&32&F.$flags$?F.$tagName$+"-"+q:F.$tagName$),ne=F=>F.replace(/\/\*!@([^\/]+)\*\/[^\{]+\{/g,"$1{"),Ce=F=>Ir.push(F),ze=F=>dn(F).$modeName$,dt={},Ke=F=>"object"==(F=typeof F)||"function"===F,nn=(F,q,...he)=>{let we=null,Pe=null,X=null,le=!1,Ie=!1;const je=[],Re=st=>{for(let Mt=0;Mtst[Mt]).join(" "))}}if("function"==typeof F)return F(null===q?{}:q,je,pn);const ot=wt(F,null);return ot.$attrs$=q,je.length>0&&(ot.$children$=je),ot.$key$=Pe,ot.$name$=X,ot},wt=(F,q)=>({$flags$:0,$tag$:F,$text$:q,$elm$:null,$children$:null,$attrs$:null,$key$:null,$name$:null}),Rt={},pn={forEach:(F,q)=>F.map(Pt).forEach(q),map:(F,q)=>F.map(Pt).map(q).map(Ut)},Pt=F=>({vattrs:F.$attrs$,vchildren:F.$children$,vkey:F.$key$,vname:F.$name$,vtag:F.$tag$,vtext:F.$text$}),Ut=F=>{if("function"==typeof F.vtag){const he=Object.assign({},F.vattrs);return F.vkey&&(he.key=F.vkey),F.vname&&(he.name=F.vname),nn(F.vtag,he,...F.vchildren||[])}const q=wt(F.vtag,F.vtext);return q.$attrs$=F.vattrs,q.$children$=F.vchildren,q.$key$=F.vkey,q.$name$=F.vname,q},it=(F,q,he,we,Pe,X)=>{if(he!==we){let le=$n(F,q),Ie=q.toLowerCase();if("class"===q){const je=F.classList,Re=kt(he),ot=kt(we);je.remove(...Re.filter(st=>st&&!ot.includes(st))),je.add(...ot.filter(st=>st&&!Re.includes(st)))}else if("style"===q){for(const je in he)(!we||null==we[je])&&(je.includes("-")?F.style.removeProperty(je):F.style[je]="");for(const je in we)(!he||we[je]!==he[je])&&(je.includes("-")?F.style.setProperty(je,we[je]):F.style[je]=we[je])}else if("key"!==q)if("ref"===q)we&&we(F);else if(le||"o"!==q[0]||"n"!==q[1]){const je=Ke(we);if((le||je&&null!==we)&&!Pe)try{if(F.tagName.includes("-"))F[q]=we;else{const ot=we??"";"list"===q?le=!1:(null==he||F[q]!=ot)&&(F[q]=ot)}}catch{}let Re=!1;Ie!==(Ie=Ie.replace(/^xlink\:?/,""))&&(q=Ie,Re=!0),null==we||!1===we?(!1!==we||""===F.getAttribute(q))&&(Re?F.removeAttributeNS(k,q):F.removeAttribute(q)):(!le||4&X||Pe)&&!je&&(we=!0===we?"":we,Re?F.setAttributeNS(k,q,we):F.setAttribute(q,we))}else q="-"===q[2]?q.slice(3):$n(G,Ie)?Ie.slice(2):Ie[2]+q.slice(3),he&&S.rel(F,q,he,!1),we&&S.ael(F,q,we,!1)}},Xt=/\s/,kt=F=>F?F.split(Xt):[],Vt=(F,q,he,we)=>{const Pe=11===q.$elm$.nodeType&&q.$elm$.host?q.$elm$.host:q.$elm$,X=F&&F.$attrs$||dt,le=q.$attrs$||dt;for(we in X)we in le||it(Pe,we,X[we],void 0,he,q.$flags$);for(we in le)it(Pe,we,X[we],le[we],he,q.$flags$)},rn=(F,q,he,we)=>{const Pe=q.$children$[he];let le,Ie,je,X=0;if(W||(U=!0,"slot"===Pe.$tag$&&(N&&we.classList.add(N+"-s"),Pe.$flags$|=Pe.$children$?2:1)),null!==Pe.$text$)le=Pe.$elm$=Z.createTextNode(Pe.$text$);else if(1&Pe.$flags$)le=Pe.$elm$=Z.createTextNode("");else{if(_||(_="svg"===Pe.$tag$),le=Pe.$elm$=Z.createElementNS(_?"http://www.w3.org/2000/svg":"http://www.w3.org/1999/xhtml",2&Pe.$flags$?"slot-fb":Pe.$tag$),_&&"foreignObject"===Pe.$tag$&&(_=!1),Vt(null,Pe,_),(F=>null!=F)(N)&&le["s-si"]!==N&&le.classList.add(le["s-si"]=N),Pe.$children$)for(X=0;X{S.$flags$|=1;const he=F.childNodes;for(let we=he.length-1;we>=0;we--){const Pe=he[we];Pe["s-hn"]!==R&&Pe["s-ol"]&&(Et(Pe).insertBefore(Pe,nt(Pe)),Pe["s-ol"].remove(),Pe["s-ol"]=void 0,U=!0),q&&Vn(Pe,q)}S.$flags$&=-2},en=(F,q,he,we,Pe,X)=>{let Ie,le=F["s-cr"]&&F["s-cr"].parentNode||F;for(le.shadowRoot&&le.tagName===R&&(le=le.shadowRoot);Pe<=X;++Pe)we[Pe]&&(Ie=rn(null,he,Pe,F),Ie&&(we[Pe].$elm$=Ie,le.insertBefore(Ie,nt(q))))},gt=(F,q,he,we,Pe)=>{for(;q<=he;++q)(we=F[q])&&(Pe=we.$elm$,Nt(we),M=!0,Pe["s-ol"]?Pe["s-ol"].remove():Vn(Pe,!0),Pe.remove())},ht=(F,q)=>F.$tag$===q.$tag$&&("slot"===F.$tag$?F.$name$===q.$name$:F.$key$===q.$key$),nt=F=>F&&F["s-ol"]||F,Et=F=>(F["s-ol"]?F["s-ol"]:F).parentNode,ut=(F,q)=>{const he=q.$elm$=F.$elm$,we=F.$children$,Pe=q.$children$,X=q.$tag$,le=q.$text$;let Ie;null===le?(_="svg"===X||"foreignObject"!==X&&_,"slot"===X||Vt(F,q,_),null!==we&&null!==Pe?((F,q,he,we)=>{let Bt,An,Pe=0,X=0,le=0,Ie=0,je=q.length-1,Re=q[0],ot=q[je],st=we.length-1,Mt=we[0],Wt=we[st];for(;Pe<=je&&X<=st;)if(null==Re)Re=q[++Pe];else if(null==ot)ot=q[--je];else if(null==Mt)Mt=we[++X];else if(null==Wt)Wt=we[--st];else if(ht(Re,Mt))ut(Re,Mt),Re=q[++Pe],Mt=we[++X];else if(ht(ot,Wt))ut(ot,Wt),ot=q[--je],Wt=we[--st];else if(ht(Re,Wt))("slot"===Re.$tag$||"slot"===Wt.$tag$)&&Vn(Re.$elm$.parentNode,!1),ut(Re,Wt),F.insertBefore(Re.$elm$,ot.$elm$.nextSibling),Re=q[++Pe],Wt=we[--st];else if(ht(ot,Mt))("slot"===Re.$tag$||"slot"===Wt.$tag$)&&Vn(ot.$elm$.parentNode,!1),ut(ot,Mt),F.insertBefore(ot.$elm$,Re.$elm$),ot=q[--je],Mt=we[++X];else{for(le=-1,Ie=Pe;Ie<=je;++Ie)if(q[Ie]&&null!==q[Ie].$key$&&q[Ie].$key$===Mt.$key$){le=Ie;break}le>=0?(An=q[le],An.$tag$!==Mt.$tag$?Bt=rn(q&&q[X],he,le,F):(ut(An,Mt),q[le]=void 0,Bt=An.$elm$),Mt=we[++X]):(Bt=rn(q&&q[X],he,X,F),Mt=we[++X]),Bt&&Et(Re.$elm$).insertBefore(Bt,nt(Re.$elm$))}Pe>je?en(F,null==we[st+1]?null:we[st+1].$elm$,he,we,X,st):X>st&>(q,Pe,je)})(he,we,q,Pe):null!==Pe?(null!==F.$text$&&(he.textContent=""),en(he,null,q,Pe,0,Pe.length-1)):null!==we&>(we,0,we.length-1),_&&"svg"===X&&(_=!1)):(Ie=he["s-cr"])?Ie.parentNode.textContent=le:F.$text$!==le&&(he.data=le)},Ct=F=>{const q=F.childNodes;let he,we,Pe,X,le,Ie;for(we=0,Pe=q.length;we{let q,he,we,Pe,X,le,Ie=0;const je=F.childNodes,Re=je.length;for(;Ie=0;le--)he=we[le],!he["s-cn"]&&!he["s-nr"]&&he["s-hn"]!==q["s-hn"]&&(gn(he,Pe)?(X=qe.find(ot=>ot.$nodeToRelocate$===he),M=!0,he["s-sn"]=he["s-sn"]||Pe,X?X.$slotRefNode$=q:qe.push({$slotRefNode$:q,$nodeToRelocate$:he}),he["s-sr"]&&qe.map(ot=>{gn(ot.$nodeToRelocate$,he["s-sn"])&&(X=qe.find(st=>st.$nodeToRelocate$===he),X&&!ot.$slotRefNode$&&(ot.$slotRefNode$=X.$slotRefNode$))})):qe.some(ot=>ot.$nodeToRelocate$===he)||qe.push({$nodeToRelocate$:he}));1===q.nodeType&&on(q)}},gn=(F,q)=>1===F.nodeType?null===F.getAttribute("slot")&&""===q||F.getAttribute("slot")===q:F["s-sn"]===q||""===q,Nt=F=>{F.$attrs$&&F.$attrs$.ref&&F.$attrs$.ref(null),F.$children$&&F.$children$.map(Nt)},zt=F=>dn(F).$hostElement$,Er=(F,q,he)=>{const we=zt(F);return{emit:Pe=>jn(we,q,{bubbles:!!(4&he),composed:!!(2&he),cancelable:!!(1&he),detail:Pe})}},jn=(F,q,he)=>{const we=S.ce(q,he);return F.dispatchEvent(we),we},Xn=(F,q)=>{q&&!F.$onRenderResolve$&&q["s-p"]&&q["s-p"].push(new Promise(he=>F.$onRenderResolve$=he))},En=(F,q)=>{if(F.$flags$|=16,!(4&F.$flags$))return Xn(F,F.$ancestorComponent$),Cn(()=>xe(F,q));F.$flags$|=512},xe=(F,q)=>{const we=F.$lazyInstance$;let Pe;return q&&(F.$flags$|=256,F.$queuedListeners$&&(F.$queuedListeners$.map(([X,le])=>vt(we,X,le)),F.$queuedListeners$=null),Pe=vt(we,"componentWillLoad")),Pe=Ht(Pe,()=>vt(we,"componentWillRender")),Ht(Pe,()=>se(F,we,q))},se=function(){var F=(0,o.Z)(function*(q,he,we){const Pe=q.$hostElement$,le=Pe["s-rc"];we&&(F=>{const q=F.$cmpMeta$,he=F.$hostElement$,we=q.$flags$,X=De(he.shadowRoot?he.shadowRoot:he.getRootNode(),q,F.$modeName$);10&we&&(he["s-sc"]=X,he.classList.add(X+"-h"),2&we&&he.classList.add(X+"-s"))})(q);ye(q,he),le&&(le.map(je=>je()),Pe["s-rc"]=void 0);{const je=Pe["s-p"],Re=()=>He(q);0===je.length?Re():(Promise.all(je).then(Re),q.$flags$|=4,je.length=0)}});return function(he,we,Pe){return F.apply(this,arguments)}}(),ye=(F,q,he)=>{try{q=q.render&&q.render(),F.$flags$&=-17,F.$flags$|=2,((F,q)=>{const he=F.$hostElement$,we=F.$cmpMeta$,Pe=F.$vnode$||wt(null,null),X=(F=>F&&F.$tag$===Rt)(q)?q:nn(null,null,q);if(R=he.tagName,we.$attrsToReflect$&&(X.$attrs$=X.$attrs$||{},we.$attrsToReflect$.map(([le,Ie])=>X.$attrs$[Ie]=he[le])),X.$tag$=null,X.$flags$|=4,F.$vnode$=X,X.$elm$=Pe.$elm$=he.shadowRoot||he,N=he["s-sc"],ge=he["s-cr"],W=0!=(1&we.$flags$),M=!1,ut(Pe,X),S.$flags$|=1,U){on(X.$elm$);let le,Ie,je,Re,ot,st,Mt=0;for(;Mt{const he=F.$hostElement$,Pe=F.$lazyInstance$,X=F.$ancestorComponent$;vt(Pe,"componentDidRender"),64&F.$flags$?vt(Pe,"componentDidUpdate"):(F.$flags$|=64,_t(he),vt(Pe,"componentDidLoad"),F.$onReadyResolve$(he),X||pt()),F.$onInstanceResolve$(he),F.$onRenderResolve$&&(F.$onRenderResolve$(),F.$onRenderResolve$=void 0),512&F.$flags$&&Un(()=>En(F,!1)),F.$flags$&=-517},Ye=F=>{{const q=dn(F),he=q.$hostElement$.isConnected;return he&&2==(18&q.$flags$)&&En(q,!1),he}},pt=F=>{_t(Z.documentElement),Un(()=>jn(G,"appload",{detail:{namespace:"ionic"}}))},vt=(F,q,he)=>{if(F&&F[q])try{return F[q](he)}catch(we){Tn(we)}},Ht=(F,q)=>F&&F.then?F.then(q):q(),_t=F=>F.classList.add("hydrated"),Ln=(F,q,he,we,Pe,X,le)=>{let Ie,je,Re,ot;if(1===X.nodeType){for(Ie=X.getAttribute(Q),Ie&&(je=Ie.split("."),(je[0]===le||"0"===je[0])&&(Re={$flags$:0,$hostId$:je[0],$nodeId$:je[1],$depth$:je[2],$index$:je[3],$tag$:X.tagName.toLowerCase(),$elm$:X,$attrs$:null,$children$:null,$key$:null,$name$:null,$text$:null},q.push(Re),X.removeAttribute(Q),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re,F=Re,we&&"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$))),ot=X.childNodes.length-1;ot>=0;ot--)Ln(F,q,he,we,Pe,X.childNodes[ot],le);if(X.shadowRoot)for(ot=X.shadowRoot.childNodes.length-1;ot>=0;ot--)Ln(F,q,he,we,Pe,X.shadowRoot.childNodes[ot],le)}else if(8===X.nodeType)je=X.nodeValue.split("."),(je[1]===le||"0"===je[1])&&(Ie=je[0],Re={$flags$:0,$hostId$:je[1],$nodeId$:je[2],$depth$:je[3],$index$:je[4],$elm$:X,$attrs$:null,$children$:null,$key$:null,$name$:null,$tag$:null,$text$:null},"t"===Ie?(Re.$elm$=X.nextSibling,Re.$elm$&&3===Re.$elm$.nodeType&&(Re.$text$=Re.$elm$.textContent,q.push(Re),X.remove(),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re,we&&"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$))):Re.$hostId$===le&&("s"===Ie?(Re.$tag$="slot",X["s-sn"]=je[5]?Re.$name$=je[5]:"",X["s-sr"]=!0,we&&(Re.$elm$=Z.createElement(Re.$tag$),Re.$name$&&Re.$elm$.setAttribute("name",Re.$name$),X.parentNode.insertBefore(Re.$elm$,X),X.remove(),"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$)),he.push(Re),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re):"r"===Ie&&(we?X.remove():(Pe["s-cr"]=X,X["s-cn"]=!0))));else if(F&&"style"===F.$tag$){const st=wt(null,X.textContent);st.$elm$=X,st.$index$="0",F.$children$=[st]}},mn=(F,q)=>{if(1===F.nodeType){let he=0;for(;he{if(q.$members$){F.watchers&&(q.$watchers$=F.watchers);const we=Object.entries(q.$members$),Pe=F.prototype;if(we.map(([X,[le]])=>{31&le||2&he&&32&le?Object.defineProperty(Pe,X,{get(){return((F,q)=>dn(this).$instanceValues$.get(q))(0,X)},set(Ie){((F,q,he,we)=>{const Pe=dn(F),X=Pe.$hostElement$,le=Pe.$instanceValues$.get(q),Ie=Pe.$flags$,je=Pe.$lazyInstance$;he=((F,q)=>null==F||Ke(F)?F:4&q?"false"!==F&&(""===F||!!F):2&q?parseFloat(F):1&q?String(F):F)(he,we.$members$[q][0]);const Re=Number.isNaN(le)&&Number.isNaN(he);if((!(8&Ie)||void 0===le)&&he!==le&&!Re&&(Pe.$instanceValues$.set(q,he),je)){if(we.$watchers$&&128&Ie){const st=we.$watchers$[q];st&&st.map(Mt=>{try{je[Mt](he,le,q)}catch(Wt){Tn(Wt,X)}})}2==(18&Ie)&&En(Pe,!1)}})(this,X,Ie,q)},configurable:!0,enumerable:!0}):1&he&&64&le&&Object.defineProperty(Pe,X,{value(...Ie){const je=dn(this);return je.$onInstancePromise$.then(()=>je.$lazyInstance$[X](...Ie))}})}),1&he){const X=new Map;Pe.attributeChangedCallback=function(le,Ie,je){S.jmp(()=>{const Re=X.get(le);if(this.hasOwnProperty(Re))je=this[Re],delete this[Re];else if(Pe.hasOwnProperty(Re)&&"number"==typeof this[Re]&&this[Re]==je)return;this[Re]=(null!==je||"boolean"!=typeof this[Re])&&je})},F.observedAttributes=we.filter(([le,Ie])=>15&Ie[0]).map(([le,Ie])=>{const je=Ie[1]||le;return X.set(je,le),512&Ie[0]&&q.$attrsToReflect$.push([le,je]),je})}}return F},ee=function(){var F=(0,o.Z)(function*(q,he,we,Pe,X){if(0==(32&he.$flags$)){{if(he.$flags$|=32,(X=vn(we)).then){const Re=()=>{};X=yield X,Re()}X.isProxied||(we.$watchers$=X.watchers,fe(X,we,2),X.isProxied=!0);const je=()=>{};he.$flags$|=8;try{new X(he)}catch(Re){Tn(Re)}he.$flags$&=-9,he.$flags$|=128,je(),Se(he.$lazyInstance$)}if(X.style){let je=X.style;"string"!=typeof je&&(je=je[he.$modeName$=(F=>Ir.map(q=>q(F)).find(q=>!!q))(q)]);const Re=de(we,he.$modeName$);if(!tr.has(Re)){const ot=()=>{};Ae(Re,je,!!(1&we.$flags$)),ot()}}}const le=he.$ancestorComponent$,Ie=()=>En(he,!0);le&&le["s-rc"]?le["s-rc"].push(Ie):Ie()});return function(he,we,Pe,X,le){return F.apply(this,arguments)}}(),Se=F=>{vt(F,"connectedCallback")},yt=F=>{const q=F["s-cr"]=Z.createComment("");q["s-cn"]=!0,F.insertBefore(q,F.firstChild)},cn=(F,q={})=>{const we=[],Pe=q.exclude||[],X=G.customElements,le=Z.head,Ie=le.querySelector("meta[charset]"),je=Z.createElement("style"),Re=[],ot=Z.querySelectorAll(`[${Ne}]`);let st,Mt=!0,Wt=0;for(Object.assign(S,q),S.$resourcesUrl$=new URL(q.resourcesUrl||"./",Z.baseURI).href,S.$flags$|=2;Wt{Bt[1].map(An=>{const Rn={$flags$:An[0],$tagName$:An[1],$members$:An[2],$listeners$:An[3]};Rn.$members$=An[2],Rn.$listeners$=An[3],Rn.$attrsToReflect$=[],Rn.$watchers$={};const Pn=Rn.$tagName$,ur=class extends HTMLElement{constructor(mr){super(mr),sr(mr=this,Rn),1&Rn.$flags$&&mr.attachShadow({mode:"open",delegatesFocus:!!(16&Rn.$flags$)})}connectedCallback(){st&&(clearTimeout(st),st=null),Mt?Re.push(this):S.jmp(()=>(F=>{if(0==(1&S.$flags$)){const q=dn(F),he=q.$cmpMeta$,we=()=>{};if(1&q.$flags$)K(F,q,he.$listeners$),Se(q.$lazyInstance$);else{let Pe;if(q.$flags$|=1,Pe=F.getAttribute(be),Pe){if(1&he.$flags$){const X=De(F.shadowRoot,he,F.getAttribute("s-mode"));F.classList.remove(X+"-h",X+"-s")}((F,q,he,we)=>{const X=F.shadowRoot,le=[],je=X?[]:null,Re=we.$vnode$=wt(q,null);S.$orgLocNodes$||mn(Z.body,S.$orgLocNodes$=new Map),F[be]=he,F.removeAttribute(be),Ln(Re,le,[],je,F,F,he),le.map(ot=>{const st=ot.$hostId$+"."+ot.$nodeId$,Mt=S.$orgLocNodes$.get(st),Wt=ot.$elm$;Mt&&""===Mt["s-en"]&&Mt.parentNode.insertBefore(Wt,Mt.nextSibling),X||(Wt["s-hn"]=q,Mt&&(Wt["s-ol"]=Mt,Wt["s-ol"]["s-nr"]=Wt)),S.$orgLocNodes$.delete(st)}),X&&je.map(ot=>{ot&&X.appendChild(ot)})})(F,he.$tagName$,Pe,q)}Pe||12&he.$flags$&&yt(F);{let X=F;for(;X=X.parentNode||X.host;)if(1===X.nodeType&&X.hasAttribute("s-id")&&X["s-p"]||X["s-p"]){Xn(q,q.$ancestorComponent$=X);break}}he.$members$&&Object.entries(he.$members$).map(([X,[le]])=>{if(31&le&&F.hasOwnProperty(X)){const Ie=F[X];delete F[X],F[X]=Ie}}),Un(()=>ee(F,q,he))}we()}})(this))}disconnectedCallback(){S.jmp(()=>(F=>{if(0==(1&S.$flags$)){const q=dn(this),he=q.$lazyInstance$;q.$rmListeners$&&(q.$rmListeners$.map(we=>we()),q.$rmListeners$=void 0),vt(he,"disconnectedCallback")}})())}componentOnReady(){return dn(this).$onReadyPromise$}};Rn.$lazyBundleId$=Bt[0],!Pe.includes(Pn)&&!X.get(Pn)&&(we.push(Pn),X.define(Pn,fe(ur,Rn,1)))})}),je.innerHTML=we+"{visibility:hidden}.hydrated{visibility:inherit}",je.setAttribute("data-styles",""),le.insertBefore(je,Ie?Ie.nextSibling:le.firstChild),Mt=!1,Re.length?Re.map(Bt=>Bt.connectedCallback()):S.jmp(()=>st=setTimeout(pt,30))},Dn=F=>{const q=new URL(F,S.$resourcesUrl$);return q.origin!==G.location.origin?q.href:q.pathname},sn=new WeakMap,dn=F=>sn.get(F),er=(F,q)=>sn.set(q.$lazyInstance$=F,q),sr=(F,q)=>{const he={$flags$:0,$hostElement$:F,$cmpMeta$:q,$instanceValues$:new Map};return he.$onInstancePromise$=new Promise(we=>he.$onInstanceResolve$=we),he.$onReadyPromise$=new Promise(we=>he.$onReadyResolve$=we),F["s-p"]=[],F["s-rc"]=[],K(F,he,q.$listeners$),sn.set(F,he)},$n=(F,q)=>q in F,Tn=(F,q)=>(0,console.error)(F,q),xn=new Map,vn=(F,q,he)=>{const we=F.$tagName$.replace(/-/g,"_"),Pe=F.$lazyBundleId$,X=xn.get(Pe);return X?X[we]:w(863)(`./${Pe}.entry.js`).then(le=>(xn.set(Pe,le),le[we]),Tn)},tr=new Map,Ir=[],cr=[],gr=[],$t=(F,q)=>he=>{F.push(he),Y||(Y=!0,q&&4&S.$flags$?Un(Qt):S.raf(Qt))},fn=F=>{for(let q=0;q{fn(cr),fn(gr),(Y=cr.length>0)&&S.raf(Qt)},Un=F=>j().then(F),On=$t(cr,!1),Cn=$t(gr,!0),rt={isDev:!1,isBrowser:!0,isServer:!1,isTesting:!1}},697:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>ge,a:()=>R,b:()=>W,c:()=>M,d:()=>U,e:()=>oe,g:()=>Q,l:()=>Be,s:()=>be,t:()=>G});var o=w(5861),x=w(1308),N=w(5730);const ge="ionViewWillEnter",R="ionViewDidEnter",W="ionViewWillLeave",M="ionViewDidLeave",U="ionViewWillUnload",G=T=>new Promise((k,O)=>{(0,x.c)(()=>{Z(T),S(T).then(te=>{te.animation&&te.animation.destroy(),B(T),k(te)},te=>{B(T),O(te)})})}),Z=T=>{const k=T.enteringEl,O=T.leavingEl;Ne(k,O,T.direction),T.showGoBack?k.classList.add("can-go-back"):k.classList.remove("can-go-back"),be(k,!1),k.style.setProperty("pointer-events","none"),O&&(be(O,!1),O.style.setProperty("pointer-events","none"))},S=function(){var T=(0,o.Z)(function*(k){const O=yield E(k);return O&&x.B.isBrowser?j(O,k):P(k)});return function(O){return T.apply(this,arguments)}}(),B=T=>{const k=T.enteringEl,O=T.leavingEl;k.classList.remove("ion-page-invisible"),k.style.removeProperty("pointer-events"),void 0!==O&&(O.classList.remove("ion-page-invisible"),O.style.removeProperty("pointer-events"))},E=function(){var T=(0,o.Z)(function*(k){return k.leavingEl&&k.animated&&0!==k.duration?k.animationBuilder?k.animationBuilder:"ios"===k.mode?(yield Promise.resolve().then(w.bind(w,3953))).iosTransitionAnimation:(yield Promise.resolve().then(w.bind(w,3880))).mdTransitionAnimation:void 0});return function(O){return T.apply(this,arguments)}}(),j=function(){var T=(0,o.Z)(function*(k,O){yield K(O,!0);const te=k(O.baseEl,O);Te(O.enteringEl,O.leavingEl);const ce=yield ke(te,O);return O.progressCallback&&O.progressCallback(void 0),ce&&ie(O.enteringEl,O.leavingEl),{hasCompleted:ce,animation:te}});return function(O,te){return T.apply(this,arguments)}}(),P=function(){var T=(0,o.Z)(function*(k){const O=k.enteringEl,te=k.leavingEl;return yield K(k,!1),Te(O,te),ie(O,te),{hasCompleted:!0}});return function(O){return T.apply(this,arguments)}}(),K=function(){var T=(0,o.Z)(function*(k,O){const ce=(void 0!==k.deepWait?k.deepWait:O)?[oe(k.enteringEl),oe(k.leavingEl)]:[re(k.enteringEl),re(k.leavingEl)];yield Promise.all(ce),yield pe(k.viewIsReady,k.enteringEl)});return function(O,te){return T.apply(this,arguments)}}(),pe=function(){var T=(0,o.Z)(function*(k,O){k&&(yield k(O))});return function(O,te){return T.apply(this,arguments)}}(),ke=(T,k)=>{const O=k.progressCallback,te=new Promise(ce=>{T.onFinish(Ae=>ce(1===Ae))});return O?(T.progressStart(!0),O(T)):T.play(),te},Te=(T,k)=>{Be(k,W),Be(T,ge)},ie=(T,k)=>{Be(T,R),Be(k,M)},Be=(T,k)=>{if(T){const O=new CustomEvent(k,{bubbles:!1,cancelable:!1});T.dispatchEvent(O)}},re=T=>T?new Promise(k=>(0,N.c)(T,k)):Promise.resolve(),oe=function(){var T=(0,o.Z)(function*(k){const O=k;if(O){if(null!=O.componentOnReady){if(null!=(yield O.componentOnReady()))return}else if(null!=O.__registerHost)return void(yield new Promise(ce=>(0,N.r)(ce)));yield Promise.all(Array.from(O.children).map(oe))}});return function(O){return T.apply(this,arguments)}}(),be=(T,k)=>{k?(T.setAttribute("aria-hidden","true"),T.classList.add("ion-page-hidden")):(T.hidden=!1,T.removeAttribute("aria-hidden"),T.classList.remove("ion-page-hidden"))},Ne=(T,k,O)=>{void 0!==T&&(T.style.zIndex="back"===O?"99":"101"),void 0!==k&&(k.style.zIndex="100")},Q=T=>T.classList.contains("ion-page")?T:T.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")||T},1911:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{GESTURE_CONTROLLER:()=>o.G,createGesture:()=>_});var o=w(4349);const x=(S,B,E,j)=>{const P=N(S)?{capture:!!j.capture,passive:!!j.passive}:!!j.capture;let K,pe;return S.__zone_symbol__addEventListener?(K="__zone_symbol__addEventListener",pe="__zone_symbol__removeEventListener"):(K="addEventListener",pe="removeEventListener"),S[K](B,E,P),()=>{S[pe](B,E,P)}},N=S=>{if(void 0===ge)try{const B=Object.defineProperty({},"passive",{get:()=>{ge=!0}});S.addEventListener("optsTest",()=>{},B)}catch{ge=!1}return!!ge};let ge;const M=S=>S instanceof Document?S:S.ownerDocument,_=S=>{let B=!1,E=!1,j=!0,P=!1;const K=Object.assign({disableScroll:!1,direction:"x",gesturePriority:0,passive:!0,maxAngle:40,threshold:10},S),pe=K.canStart,ke=K.onWillStart,Te=K.onStart,ie=K.onEnd,Be=K.notCaptured,re=K.onMove,oe=K.threshold,be=K.passive,Ne=K.blurOnStart,Q={type:"pan",startX:0,startY:0,startTime:0,currentX:0,currentY:0,velocityX:0,velocityY:0,deltaX:0,deltaY:0,currentTime:0,event:void 0,data:void 0},T=((S,B,E)=>{const j=E*(Math.PI/180),P="x"===S,K=Math.cos(j),pe=B*B;let ke=0,Te=0,ie=!1,Be=0;return{start(re,oe){ke=re,Te=oe,Be=0,ie=!0},detect(re,oe){if(!ie)return!1;const be=re-ke,Ne=oe-Te,Q=be*be+Ne*Ne;if(QK?1:k<-K?-1:0,ie=!1,!0},isGesture:()=>0!==Be,getDirection:()=>Be}})(K.direction,K.threshold,K.maxAngle),k=o.G.createGesture({name:S.gestureName,priority:S.gesturePriority,disableScroll:S.disableScroll}),ce=()=>{!B||(P=!1,re&&re(Q))},Ae=()=>!!k.capture()&&(B=!0,j=!1,Q.startX=Q.currentX,Q.startY=Q.currentY,Q.startTime=Q.currentTime,ke?ke(Q).then(ue):ue(),!0),ue=()=>{Ne&&(()=>{if(typeof document<"u"){const ze=document.activeElement;ze?.blur&&ze.blur()}})(),Te&&Te(Q),j=!0},de=()=>{B=!1,E=!1,P=!1,j=!0,k.release()},ne=ze=>{const dt=B,et=j;if(de(),et){if(Y(Q,ze),dt)return void(ie&&ie(Q));Be&&Be(Q)}},Ee=((S,B,E,j,P)=>{let K,pe,ke,Te,ie,Be,re,oe=0;const be=De=>{oe=Date.now()+2e3,B(De)&&(!pe&&E&&(pe=x(S,"touchmove",E,P)),ke||(ke=x(De.target,"touchend",Q,P)),Te||(Te=x(De.target,"touchcancel",Q,P)))},Ne=De=>{oe>Date.now()||!B(De)||(!Be&&E&&(Be=x(M(S),"mousemove",E,P)),re||(re=x(M(S),"mouseup",T,P)))},Q=De=>{k(),j&&j(De)},T=De=>{O(),j&&j(De)},k=()=>{pe&&pe(),ke&&ke(),Te&&Te(),pe=ke=Te=void 0},O=()=>{Be&&Be(),re&&re(),Be=re=void 0},te=()=>{k(),O()},ce=(De=!0)=>{De?(K||(K=x(S,"touchstart",be,P)),ie||(ie=x(S,"mousedown",Ne,P))):(K&&K(),ie&&ie(),K=ie=void 0,te())};return{enable:ce,stop:te,destroy:()=>{ce(!1),j=E=B=void 0}}})(K.el,ze=>{const dt=Z(ze);return!(E||!j||(G(ze,Q),Q.startX=Q.currentX,Q.startY=Q.currentY,Q.startTime=Q.currentTime=dt,Q.velocityX=Q.velocityY=Q.deltaX=Q.deltaY=0,Q.event=ze,pe&&!1===pe(Q))||(k.release(),!k.start()))&&(E=!0,0===oe?Ae():(T.start(Q.startX,Q.startY),!0))},ze=>{B?!P&&j&&(P=!0,Y(Q,ze),requestAnimationFrame(ce)):(Y(Q,ze),T.detect(Q.currentX,Q.currentY)&&(!T.isGesture()||!Ae())&&Ce())},ne,{capture:!1,passive:be}),Ce=()=>{de(),Ee.stop(),Be&&Be(Q)};return{enable(ze=!0){ze||(B&&ne(void 0),de()),Ee.enable(ze)},destroy(){k.destroy(),Ee.destroy()}}},Y=(S,B)=>{if(!B)return;const E=S.currentX,j=S.currentY,P=S.currentTime;G(B,S);const K=S.currentX,pe=S.currentY,Te=(S.currentTime=Z(B))-P;if(Te>0&&Te<100){const Be=(pe-j)/Te;S.velocityX=(K-E)/Te*.7+.3*S.velocityX,S.velocityY=.7*Be+.3*S.velocityY}S.deltaX=K-S.startX,S.deltaY=pe-S.startY,S.event=B},G=(S,B)=>{let E=0,j=0;if(S){const P=S.changedTouches;if(P&&P.length>0){const K=P[0];E=K.clientX,j=K.clientY}else void 0!==S.pageX&&(E=S.pageX,j=S.pageY)}B.currentX=E,B.currentY=j},Z=S=>S.timeStamp||Date.now()},9658:(Qe,Fe,w)=>{"use strict";w.d(Fe,{a:()=>G,b:()=>ce,c:()=>N,g:()=>Y,i:()=>Ae});var o=w(1308);class x{constructor(){this.m=new Map}reset(ue){this.m=new Map(Object.entries(ue))}get(ue,de){const ne=this.m.get(ue);return void 0!==ne?ne:de}getBoolean(ue,de=!1){const ne=this.m.get(ue);return void 0===ne?de:"string"==typeof ne?"true"===ne:!!ne}getNumber(ue,de){const ne=parseFloat(this.m.get(ue));return isNaN(ne)?void 0!==de?de:NaN:ne}set(ue,de){this.m.set(ue,de)}}const N=new x,U="ionic:",_="ionic-persist-config",Y=De=>Z(De),G=(De,ue)=>("string"==typeof De&&(ue=De,De=void 0),Y(De).includes(ue)),Z=(De=window)=>{if(typeof De>"u")return[];De.Ionic=De.Ionic||{};let ue=De.Ionic.platforms;return null==ue&&(ue=De.Ionic.platforms=S(De),ue.forEach(de=>De.document.documentElement.classList.add(`plt-${de}`))),ue},S=De=>{const ue=N.get("platform");return Object.keys(O).filter(de=>{const ne=ue?.[de];return"function"==typeof ne?ne(De):O[de](De)})},E=De=>!!(T(De,/iPad/i)||T(De,/Macintosh/i)&&ie(De)),K=De=>T(De,/android|sink/i),ie=De=>k(De,"(any-pointer:coarse)"),re=De=>oe(De)||be(De),oe=De=>!!(De.cordova||De.phonegap||De.PhoneGap),be=De=>!!De.Capacitor?.isNative,T=(De,ue)=>ue.test(De.navigator.userAgent),k=(De,ue)=>{var de;return null===(de=De.matchMedia)||void 0===de?void 0:de.call(De,ue).matches},O={ipad:E,iphone:De=>T(De,/iPhone/i),ios:De=>T(De,/iPhone|iPod/i)||E(De),android:K,phablet:De=>{const ue=De.innerWidth,de=De.innerHeight,ne=Math.min(ue,de),Ee=Math.max(ue,de);return ne>390&&ne<520&&Ee>620&&Ee<800},tablet:De=>{const ue=De.innerWidth,de=De.innerHeight,ne=Math.min(ue,de),Ee=Math.max(ue,de);return E(De)||(De=>K(De)&&!T(De,/mobile/i))(De)||ne>460&&ne<820&&Ee>780&&Ee<1400},cordova:oe,capacitor:be,electron:De=>T(De,/electron/i),pwa:De=>{var ue;return!(!(null===(ue=De.matchMedia)||void 0===ue?void 0:ue.call(De,"(display-mode: standalone)").matches)&&!De.navigator.standalone)},mobile:ie,mobileweb:De=>ie(De)&&!re(De),desktop:De=>!ie(De),hybrid:re};let te;const ce=De=>De&&(0,o.g)(De)||te,Ae=(De={})=>{if(typeof window>"u")return;const ue=window.document,de=window,ne=de.Ionic=de.Ionic||{},Ee={};De._ael&&(Ee.ael=De._ael),De._rel&&(Ee.rel=De._rel),De._ce&&(Ee.ce=De._ce),(0,o.s)(Ee);const Ce=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(De=>{try{const ue=De.sessionStorage.getItem(_);return null!==ue?JSON.parse(ue):{}}catch{return{}}})(de)),{persistConfig:!1}),ne.config),(De=>{const ue={};return De.location.search.slice(1).split("&").map(de=>de.split("=")).map(([de,ne])=>[decodeURIComponent(de),decodeURIComponent(ne)]).filter(([de])=>((De,ue)=>De.substr(0,ue.length)===ue)(de,U)).map(([de,ne])=>[de.slice(U.length),ne]).forEach(([de,ne])=>{ue[de]=ne}),ue})(de)),De);N.reset(Ce),N.getBoolean("persistConfig")&&((De,ue)=>{try{De.sessionStorage.setItem(_,JSON.stringify(ue))}catch{return}})(de,Ce),Z(de),ne.config=N,ne.mode=te=N.get("mode",ue.documentElement.getAttribute("mode")||(G(de,"ios")?"ios":"md")),N.set("mode",te),ue.documentElement.setAttribute("mode",te),ue.documentElement.classList.add(te),N.getBoolean("_testing")&&N.set("animated",!1);const ze=et=>{var Ue;return null===(Ue=et.tagName)||void 0===Ue?void 0:Ue.startsWith("ION-")},dt=et=>["ios","md"].includes(et);(0,o.a)(et=>{for(;et;){const Ue=et.mode||et.getAttribute("mode");if(Ue){if(dt(Ue))return Ue;ze(et)&&console.warn('Invalid ionic mode: "'+Ue+'", expected: "ios" or "md"')}et=et.parentElement}return te})}},3953:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{iosTransitionAnimation:()=>S,shadow:()=>M});var o=w(8834),x=w(697);w(3457),w(1308);const W=B=>document.querySelector(`${B}.ion-cloned-element`),M=B=>B.shadowRoot||B,U=B=>{const E="ION-TABS"===B.tagName?B:B.querySelector("ion-tabs"),j="ion-content ion-header:not(.header-collapse-condense-inactive) ion-title.title-large";if(null!=E){const P=E.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");return null!=P?P.querySelector(j):null}return B.querySelector(j)},_=(B,E)=>{const j="ION-TABS"===B.tagName?B:B.querySelector("ion-tabs");let P=[];if(null!=j){const K=j.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");null!=K&&(P=K.querySelectorAll("ion-buttons"))}else P=B.querySelectorAll("ion-buttons");for(const K of P){const pe=K.closest("ion-header"),ke=pe&&!pe.classList.contains("header-collapse-condense-inactive"),Te=K.querySelector("ion-back-button"),ie=K.classList.contains("buttons-collapse"),Be="start"===K.slot||""===K.slot;if(null!==Te&&Be&&(ie&&ke&&E||!ie))return Te}return null},G=(B,E,j,P,K,pe)=>{const ke=E?`calc(100% - ${pe.right+4}px)`:pe.left-4+"px",Te=E?"7px":"-7px",ie=E?"-4px":"4px",Be=E?"-4px":"4px",re=E?"right":"left",oe=E?"left":"right",Q=j?[{offset:0,opacity:1,transform:`translate3d(${ie}, ${pe.top-46}px, 0) scale(1)`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${Te}, ${K.top-40}px, 0) scale(2.1)`}]:[{offset:0,opacity:0,transform:`translate3d(${Te}, ${K.top-40}px, 0) scale(2.1)`},{offset:1,opacity:1,transform:`translate3d(${ie}, ${pe.top-46}px, 0) scale(1)`}],O=j?[{offset:0,opacity:1,transform:`translate3d(${Be}, ${pe.top-46}px, 0) scale(1)`},{offset:.2,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`},{offset:1,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`}]:[{offset:0,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`},{offset:1,opacity:1,transform:`translate3d(${Be}, ${pe.top-46}px, 0) scale(1)`}],te=(0,o.c)(),ce=(0,o.c)(),Ae=W("ion-back-button"),De=M(Ae).querySelector(".button-text"),ue=M(Ae).querySelector("ion-icon");Ae.text=P.text,Ae.mode=P.mode,Ae.icon=P.icon,Ae.color=P.color,Ae.disabled=P.disabled,Ae.style.setProperty("display","block"),Ae.style.setProperty("position","fixed"),ce.addElement(ue),te.addElement(De),te.beforeStyles({"transform-origin":`${re} center`}).beforeAddWrite(()=>{P.style.setProperty("display","none"),Ae.style.setProperty(re,ke)}).afterAddWrite(()=>{P.style.setProperty("display",""),Ae.style.setProperty("display","none"),Ae.style.removeProperty(re)}).keyframes(Q),ce.beforeStyles({"transform-origin":`${oe} center`}).keyframes(O),B.addAnimation([te,ce])},Z=(B,E,j,P,K,pe)=>{const ke=E?`calc(100% - ${K.right}px)`:`${K.left}px`,Te=E?"-18px":"18px",ie=E?"right":"left",oe=j?[{offset:0,opacity:0,transform:`translate3d(${Te}, ${pe.top-4}px, 0) scale(0.49)`},{offset:.1,opacity:0},{offset:1,opacity:1,transform:`translate3d(0, ${K.top-2}px, 0) scale(1)`}]:[{offset:0,opacity:.99,transform:`translate3d(0, ${K.top-2}px, 0) scale(1)`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${Te}, ${pe.top-4}px, 0) scale(0.5)`}],be=W("ion-title"),Ne=(0,o.c)();be.innerText=P.innerText,be.size=P.size,be.color=P.color,Ne.addElement(be),Ne.beforeStyles({"transform-origin":`${ie} center`,height:"46px",display:"",position:"relative",[ie]:ke}).beforeAddWrite(()=>{P.style.setProperty("display","none")}).afterAddWrite(()=>{P.style.setProperty("display",""),be.style.setProperty("display","none")}).keyframes(oe),B.addAnimation(Ne)},S=(B,E)=>{var j;try{const P="cubic-bezier(0.32,0.72,0,1)",K="opacity",pe="transform",ke="0%",ie="rtl"===B.ownerDocument.dir,Be=ie?"-99.5%":"99.5%",re=ie?"33%":"-33%",oe=E.enteringEl,be=E.leavingEl,Ne="back"===E.direction,Q=oe.querySelector(":scope > ion-content"),T=oe.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *"),k=oe.querySelectorAll(":scope > ion-header > ion-toolbar"),O=(0,o.c)(),te=(0,o.c)();if(O.addElement(oe).duration((null!==(j=E.duration)&&void 0!==j?j:0)||540).easing(E.easing||P).fill("both").beforeRemoveClass("ion-page-invisible"),be&&null!=B){const ue=(0,o.c)();ue.addElement(B),O.addAnimation(ue)}if(Q||0!==k.length||0!==T.length?(te.addElement(Q),te.addElement(T)):te.addElement(oe.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),O.addAnimation(te),Ne?te.beforeClearStyles([K]).fromTo("transform",`translateX(${re})`,`translateX(${ke})`).fromTo(K,.8,1):te.beforeClearStyles([K]).fromTo("transform",`translateX(${Be})`,`translateX(${ke})`),Q){const ue=M(Q).querySelector(".transition-effect");if(ue){const de=ue.querySelector(".transition-cover"),ne=ue.querySelector(".transition-shadow"),Ee=(0,o.c)(),Ce=(0,o.c)(),ze=(0,o.c)();Ee.addElement(ue).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),Ce.addElement(de).beforeClearStyles([K]).fromTo(K,0,.1),ze.addElement(ne).beforeClearStyles([K]).fromTo(K,.03,.7),Ee.addAnimation([Ce,ze]),te.addAnimation([Ee])}}const ce=oe.querySelector("ion-header.header-collapse-condense"),{forward:Ae,backward:De}=((B,E,j,P,K)=>{const pe=_(P,j),ke=U(K),Te=U(P),ie=_(K,j),Be=null!==pe&&null!==ke&&!j,re=null!==Te&&null!==ie&&j;if(Be){const oe=ke.getBoundingClientRect(),be=pe.getBoundingClientRect();Z(B,E,j,ke,oe,be),G(B,E,j,pe,oe,be)}else if(re){const oe=Te.getBoundingClientRect(),be=ie.getBoundingClientRect();Z(B,E,j,Te,oe,be),G(B,E,j,ie,oe,be)}return{forward:Be,backward:re}})(O,ie,Ne,oe,be);if(k.forEach(ue=>{const de=(0,o.c)();de.addElement(ue),O.addAnimation(de);const ne=(0,o.c)();ne.addElement(ue.querySelector("ion-title"));const Ee=(0,o.c)(),Ce=Array.from(ue.querySelectorAll("ion-buttons,[menuToggle]")),ze=ue.closest("ion-header"),dt=ze?.classList.contains("header-collapse-condense-inactive");let et;et=Ce.filter(Ne?wt=>{const Rt=wt.classList.contains("buttons-collapse");return Rt&&!dt||!Rt}:wt=>!wt.classList.contains("buttons-collapse")),Ee.addElement(et);const Ue=(0,o.c)();Ue.addElement(ue.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])"));const St=(0,o.c)();St.addElement(M(ue).querySelector(".toolbar-background"));const Ke=(0,o.c)(),nn=ue.querySelector("ion-back-button");if(nn&&Ke.addElement(nn),de.addAnimation([ne,Ee,Ue,St,Ke]),Ee.fromTo(K,.01,1),Ue.fromTo(K,.01,1),Ne)dt||ne.fromTo("transform",`translateX(${re})`,`translateX(${ke})`).fromTo(K,.01,1),Ue.fromTo("transform",`translateX(${re})`,`translateX(${ke})`),Ke.fromTo(K,.01,1);else if(ce||ne.fromTo("transform",`translateX(${Be})`,`translateX(${ke})`).fromTo(K,.01,1),Ue.fromTo("transform",`translateX(${Be})`,`translateX(${ke})`),St.beforeClearStyles([K,"transform"]),ze?.translucent?St.fromTo("transform",ie?"translateX(-100%)":"translateX(100%)","translateX(0px)"):St.fromTo(K,.01,"var(--opacity)"),Ae||Ke.fromTo(K,.01,1),nn&&!Ae){const Rt=(0,o.c)();Rt.addElement(M(nn).querySelector(".button-text")).fromTo("transform",ie?"translateX(-100px)":"translateX(100px)","translateX(0px)"),de.addAnimation(Rt)}}),be){const ue=(0,o.c)(),de=be.querySelector(":scope > ion-content"),ne=be.querySelectorAll(":scope > ion-header > ion-toolbar"),Ee=be.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *");if(de||0!==ne.length||0!==Ee.length?(ue.addElement(de),ue.addElement(Ee)):ue.addElement(be.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),O.addAnimation(ue),Ne){ue.beforeClearStyles([K]).fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)");const Ce=(0,x.g)(be);O.afterAddWrite(()=>{"normal"===O.getDirection()&&Ce.style.setProperty("display","none")})}else ue.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).fromTo(K,1,.8);if(de){const Ce=M(de).querySelector(".transition-effect");if(Ce){const ze=Ce.querySelector(".transition-cover"),dt=Ce.querySelector(".transition-shadow"),et=(0,o.c)(),Ue=(0,o.c)(),St=(0,o.c)();et.addElement(Ce).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),Ue.addElement(ze).beforeClearStyles([K]).fromTo(K,.1,0),St.addElement(dt).beforeClearStyles([K]).fromTo(K,.7,.03),et.addAnimation([Ue,St]),ue.addAnimation([et])}}ne.forEach(Ce=>{const ze=(0,o.c)();ze.addElement(Ce);const dt=(0,o.c)();dt.addElement(Ce.querySelector("ion-title"));const et=(0,o.c)(),Ue=Ce.querySelectorAll("ion-buttons,[menuToggle]"),St=Ce.closest("ion-header"),Ke=St?.classList.contains("header-collapse-condense-inactive"),nn=Array.from(Ue).filter(Ut=>{const it=Ut.classList.contains("buttons-collapse");return it&&!Ke||!it});et.addElement(nn);const wt=(0,o.c)(),Rt=Ce.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])");Rt.length>0&&wt.addElement(Rt);const Kt=(0,o.c)();Kt.addElement(M(Ce).querySelector(".toolbar-background"));const pn=(0,o.c)(),Pt=Ce.querySelector("ion-back-button");if(Pt&&pn.addElement(Pt),ze.addAnimation([dt,et,wt,pn,Kt]),O.addAnimation(ze),pn.fromTo(K,.99,0),et.fromTo(K,.99,0),wt.fromTo(K,.99,0),Ne){if(Ke||dt.fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)").fromTo(K,.99,0),wt.fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)"),Kt.beforeClearStyles([K,"transform"]),St?.translucent?Kt.fromTo("transform","translateX(0px)",ie?"translateX(-100%)":"translateX(100%)"):Kt.fromTo(K,"var(--opacity)",0),Pt&&!De){const it=(0,o.c)();it.addElement(M(Pt).querySelector(".button-text")).fromTo("transform",`translateX(${ke})`,`translateX(${(ie?-124:124)+"px"})`),ze.addAnimation(it)}}else Ke||dt.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).fromTo(K,.99,0).afterClearStyles([pe,K]),wt.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).afterClearStyles([pe,K]),pn.afterClearStyles([K]),dt.afterClearStyles([K]),et.afterClearStyles([K])})}return O}catch(P){throw P}}},3880:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{mdTransitionAnimation:()=>R});var o=w(8834),x=w(697);w(3457),w(1308);const R=(W,M)=>{var U,_,Y;const S="back"===M.direction,E=M.leavingEl,j=(0,x.g)(M.enteringEl),P=j.querySelector("ion-toolbar"),K=(0,o.c)();if(K.addElement(j).fill("both").beforeRemoveClass("ion-page-invisible"),S?K.duration((null!==(U=M.duration)&&void 0!==U?U:0)||200).easing("cubic-bezier(0.47,0,0.745,0.715)"):K.duration((null!==(_=M.duration)&&void 0!==_?_:0)||280).easing("cubic-bezier(0.36,0.66,0.04,1)").fromTo("transform","translateY(40px)","translateY(0px)").fromTo("opacity",.01,1),P){const pe=(0,o.c)();pe.addElement(P),K.addAnimation(pe)}if(E&&S){K.duration((null!==(Y=M.duration)&&void 0!==Y?Y:0)||200).easing("cubic-bezier(0.47,0,0.745,0.715)");const pe=(0,o.c)();pe.addElement((0,x.g)(E)).onFinish(ke=>{1===ke&&pe.elements.length>0&&pe.elements[0].style.setProperty("display","none")}).fromTo("transform","translateY(0px)","translateY(40px)").fromTo("opacity",1,0),K.addAnimation(pe)}return K}},4414:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>de,a:()=>U,b:()=>_,c:()=>S,d:()=>Ne,e:()=>E,f:()=>T,g:()=>te,h:()=>W,i:()=>Ae,j:()=>K,k:()=>oe,l:()=>Y,m:()=>G,s:()=>ue,t:()=>B});var o=w(5861),x=w(9658),N=w(7593),ge=w(5730);let R=0;const W=new WeakMap,M=ne=>({create:Ee=>j(ne,Ee),dismiss:(Ee,Ce,ze)=>Be(document,Ee,Ce,ne,ze),getTop:()=>(0,o.Z)(function*(){return oe(document,ne)})()}),U=M("ion-alert"),_=M("ion-action-sheet"),Y=M("ion-loading"),G=M("ion-modal"),S=M("ion-popover"),B=M("ion-toast"),E=ne=>{typeof document<"u"&&ie(document);const Ee=R++;ne.overlayIndex=Ee,ne.hasAttribute("id")||(ne.id=`ion-overlay-${Ee}`)},j=(ne,Ee)=>typeof window<"u"&&typeof window.customElements<"u"?window.customElements.whenDefined(ne).then(()=>{const Ce=document.createElement(ne);return Ce.classList.add("overlay-hidden"),Object.assign(Ce,Object.assign(Object.assign({},Ee),{hasController:!0})),k(document).appendChild(Ce),new Promise(ze=>(0,ge.c)(Ce,ze))}):Promise.resolve(),P='[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])',K=(ne,Ee)=>{let Ce=ne.querySelector(P);const ze=Ce?.shadowRoot;ze&&(Ce=ze.querySelector(P)||Ce),Ce?(0,ge.f)(Ce):Ee.focus()},ke=(ne,Ee)=>{const Ce=Array.from(ne.querySelectorAll(P));let ze=Ce.length>0?Ce[Ce.length-1]:null;const dt=ze?.shadowRoot;dt&&(ze=dt.querySelector(P)||ze),ze?ze.focus():Ee.focus()},ie=ne=>{0===R&&(R=1,ne.addEventListener("focus",Ee=>{((ne,Ee)=>{const Ce=oe(Ee,"ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover"),ze=ne.target;Ce&&ze&&!Ce.classList.contains("ion-disable-focus-trap")&&(Ce.shadowRoot?(()=>{if(Ce.contains(ze))Ce.lastFocus=ze;else{const Ue=Ce.lastFocus;K(Ce,Ce),Ue===Ee.activeElement&&ke(Ce,Ce),Ce.lastFocus=Ee.activeElement}})():(()=>{if(Ce===ze)Ce.lastFocus=void 0;else{const Ue=(0,ge.g)(Ce);if(!Ue.contains(ze))return;const St=Ue.querySelector(".ion-overlay-wrapper");if(!St)return;if(St.contains(ze))Ce.lastFocus=ze;else{const Ke=Ce.lastFocus;K(St,Ce),Ke===Ee.activeElement&&ke(St,Ce),Ce.lastFocus=Ee.activeElement}}})())})(Ee,ne)},!0),ne.addEventListener("ionBackButton",Ee=>{const Ce=oe(ne);Ce?.backdropDismiss&&Ee.detail.register(N.OVERLAY_BACK_BUTTON_PRIORITY,()=>Ce.dismiss(void 0,de))}),ne.addEventListener("keyup",Ee=>{if("Escape"===Ee.key){const Ce=oe(ne);Ce?.backdropDismiss&&Ce.dismiss(void 0,de)}}))},Be=(ne,Ee,Ce,ze,dt)=>{const et=oe(ne,ze,dt);return et?et.dismiss(Ee,Ce):Promise.reject("overlay does not exist")},oe=(ne,Ee,Ce)=>{const ze=((ne,Ee)=>(void 0===Ee&&(Ee="ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover,ion-toast"),Array.from(ne.querySelectorAll(Ee)).filter(Ce=>Ce.overlayIndex>0)))(ne,Ee).filter(dt=>!(ne=>ne.classList.contains("overlay-hidden"))(dt));return void 0===Ce?ze[ze.length-1]:ze.find(dt=>dt.id===Ce)},be=(ne=!1)=>{const Ce=k(document).querySelector("ion-router-outlet, ion-nav, #ion-view-container-root");!Ce||(ne?Ce.setAttribute("aria-hidden","true"):Ce.removeAttribute("aria-hidden"))},Ne=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt,et){var Ue,St;if(Ee.presented)return;be(!0),Ee.presented=!0,Ee.willPresent.emit(),null===(Ue=Ee.willPresentShorthand)||void 0===Ue||Ue.emit();const Ke=(0,x.b)(Ee),nn=Ee.enterAnimation?Ee.enterAnimation:x.c.get(Ce,"ios"===Ke?ze:dt);(yield O(Ee,nn,Ee.el,et))&&(Ee.didPresent.emit(),null===(St=Ee.didPresentShorthand)||void 0===St||St.emit()),"ION-TOAST"!==Ee.el.tagName&&Q(Ee.el),Ee.keyboardClose&&(null===document.activeElement||!Ee.el.contains(document.activeElement))&&Ee.el.focus()});return function(Ce,ze,dt,et,Ue){return ne.apply(this,arguments)}}(),Q=function(){var ne=(0,o.Z)(function*(Ee){let Ce=document.activeElement;if(!Ce)return;const ze=Ce?.shadowRoot;ze&&(Ce=ze.querySelector(P)||Ce),yield Ee.onDidDismiss(),Ce.focus()});return function(Ce){return ne.apply(this,arguments)}}(),T=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt,et,Ue,St){var Ke,nn;if(!Ee.presented)return!1;be(!1),Ee.presented=!1;try{Ee.el.style.setProperty("pointer-events","none"),Ee.willDismiss.emit({data:Ce,role:ze}),null===(Ke=Ee.willDismissShorthand)||void 0===Ke||Ke.emit({data:Ce,role:ze});const wt=(0,x.b)(Ee),Rt=Ee.leaveAnimation?Ee.leaveAnimation:x.c.get(dt,"ios"===wt?et:Ue);"gesture"!==ze&&(yield O(Ee,Rt,Ee.el,St)),Ee.didDismiss.emit({data:Ce,role:ze}),null===(nn=Ee.didDismissShorthand)||void 0===nn||nn.emit({data:Ce,role:ze}),W.delete(Ee),Ee.el.classList.add("overlay-hidden"),Ee.el.style.removeProperty("pointer-events")}catch(wt){console.error(wt)}return Ee.el.remove(),!0});return function(Ce,ze,dt,et,Ue,St,Ke){return ne.apply(this,arguments)}}(),k=ne=>ne.querySelector("ion-app")||ne.body,O=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt){ze.classList.remove("overlay-hidden");const Ue=Ce(Ee.el,dt);(!Ee.animated||!x.c.getBoolean("animated",!0))&&Ue.duration(0),Ee.keyboardClose&&Ue.beforeAddWrite(()=>{const Ke=ze.ownerDocument.activeElement;Ke?.matches("input,ion-input, ion-textarea")&&Ke.blur()});const St=W.get(Ee)||[];return W.set(Ee,[...St,Ue]),yield Ue.play(),!0});return function(Ce,ze,dt,et){return ne.apply(this,arguments)}}(),te=(ne,Ee)=>{let Ce;const ze=new Promise(dt=>Ce=dt);return ce(ne,Ee,dt=>{Ce(dt.detail)}),ze},ce=(ne,Ee,Ce)=>{const ze=dt=>{(0,ge.b)(ne,Ee,ze),Ce(dt)};(0,ge.a)(ne,Ee,ze)},Ae=ne=>"cancel"===ne||ne===de,De=ne=>ne(),ue=(ne,Ee)=>{if("function"==typeof ne)return x.c.get("_zoneGate",De)(()=>{try{return ne(Ee)}catch(ze){throw ze}})},de="backdrop"},600:(Qe,Fe,w)=>{"use strict";w.d(Fe,{v:()=>Z});var o=w(9192),x=w(529),N=w(1135),ge=w(7579),R=w(9646),W=w(3900),M=w(3099),U=w(4004),_=w(7225),Y=w(8274),G=w(502);let Z=(()=>{class S extends o.iw{constructor(E,j){super(),this.http=E,this.loadingCtrl=j,this.loggedIn=!1,this.stationFreezed=!1,this.captionmode=!1,this.geraeteSubject=new N.X([]),this.wertungenSubject=new N.X([]),this.newLastResults=new N.X(void 0),this._clubregistrations=[],this.clubRegistrations=new N.X([]),this.askForUsername=new ge.x,this._competition=void 0,this._durchgang=void 0,this._geraet=void 0,this._step=void 0,this.lastJWTChecked=0,this.wertungenLoading=!1,this.isInitializing=!1,this._activeDurchgangList=[],this.durchgangStarted=new N.X([]),this.wertungUpdated=new ge.x,this.standardErrorHandler=P=>{if(console.log(P),this.resetLoading(),this.wertungenLoading=!1,this.isInitializing=!1,401===P.status)localStorage.removeItem("auth_token"),this.loggedIn=!1,this.showMessage.next({msg:"Die Berechtigung zum erfassen von Wertungen ist abgelaufen.",type:"Berechtigung"});else if(404===P.status)this.loggedIn=!1,this.stationFreezed=!1,this.captionmode=!1,this._competition=void 0,this._durchgang=void 0,this._geraet=void 0,this._step=void 0,localStorage.removeItem("auth_token"),localStorage.removeItem("current_competition"),localStorage.removeItem("current_station"),localStorage.removeItem("auth_clubid"),this.showMessage.next({msg:"Die aktuele Einstellung ist nicht mehr g\xfcltig und wird zur\xfcckgesetzt.",type:"Einstellung"});else{const K={msg:""+P.statusText+"
"+P.message,type:P.name};(!this.lastMessageAck||this.lastMessageAck.msg!==K.msg)&&this.showMessage.next(K)}},this.clublist=[],this.showMessage.subscribe(P=>{this.resetLoading(),this.lastMessageAck=P}),this.resetLoading()}get competition(){return this._competition}get durchgang(){return this._durchgang}get geraet(){return this._geraet}get step(){return this._step}set currentUserName(E){localStorage.setItem("current_username",E)}get currentUserName(){return localStorage.getItem("current_username")}get activeDurchgangList(){return this._activeDurchgangList}get authenticatedClubId(){return localStorage.getItem("auth_clubid")}get competitionName(){if(!this.competitions)return"";const E=this.competitions.filter(j=>j.uuid===this.competition).map(j=>j.titel+", am "+(j.datum+"T").split("T")[0].split("-").reverse().join("-"));return 1===E.length?E[0]:""}getCurrentStation(){return localStorage.getItem("current_station")||this.competition+"/"+this.durchgang+"/"+this.geraet+"/"+this.step}resetLoading(){this.loadingInstance&&(this.loadingInstance.then(E=>E.dismiss()),this.loadingInstance=void 0)}startLoading(E,j){return this.resetLoading(),this.loadingInstance=this.loadingCtrl.create({message:E}),this.loadingInstance.then(P=>P.present()),j&&j.subscribe({next:()=>this.resetLoading(),error:P=>this.resetLoading()}),j}initWithQuery(E){this.isInitializing=!0;const j=new N.X(!1);return E&&E.startsWith("c=")?(this._step=1,E.split("&").forEach(P=>{const[K,pe]=P.split("=");switch(K){case"s":this.currentUserName||this.askForUsername.next(this),localStorage.setItem("auth_token",pe),localStorage.removeItem("auth_clubid"),this.checkJWT(pe);const ke=localStorage.getItem("current_station");ke&&this.initWithQuery(ke);break;case"c":this._competition=pe;break;case"ca":this._competition=void 0;break;case"d":this._durchgang=pe;break;case"st":this._step=parseInt(pe);break;case"g":this._geraet=parseInt(pe),localStorage.setItem("current_station",E),this.checkJWT(),this.stationFreezed=!0;break;case"rs":localStorage.setItem("auth_token",pe),this.unlock(),this.loggedIn=!0,console.log("club auth-token initialized");break;case"rid":localStorage.setItem("auth_clubid",pe),console.log("club id initialized",pe)}}),localStorage.removeItem("external_load"),this.startLoading("Bitte warten ..."),this._geraet?this.getCompetitions().pipe((0,W.w)(()=>this.loadDurchgaenge()),(0,W.w)(()=>this.loadGeraete()),(0,W.w)(()=>this.loadSteps()),(0,W.w)(()=>this.loadWertungen())).subscribe(P=>j.next(!0)):!this._competition||"undefined"===this._competition&&!localStorage.getItem("auth_clubid")?(console.log("initializing clubreg ..."),this.getClubRegistrations(this._competition).subscribe(P=>j.next(!0))):this._competition&&this.getCompetitions().pipe((0,W.w)(()=>this.loadDurchgaenge())).subscribe(P=>j.next(!0))):j.next(!0),j.subscribe(P=>{P&&(this.isInitializing=!1,this.resetLoading())}),j}checkJWT(E){if(E||(E=localStorage.getItem("auth_token")),!E)return void(this.loggedIn=!1);const P=(new Date).getTime()-36e5;(!E||E===localStorage.getItem("auth_token"))&&P{localStorage.setItem("auth_token",K.headers.get("x-access-token")),this.loggedIn=!0,this.competitions&&0!==this.competitions.length?this._competition&&this.getDurchgaenge(this._competition):this.getCompetitions().subscribe(pe=>{this._competition&&this.getDurchgaenge(this._competition)})},error:K=>{console.log(K),401===K.status?(localStorage.removeItem("auth_token"),this.loggedIn=!1,this.showMessage.next({msg:"Die Berechtigung ist abgelaufen. Bitte neu anmelden",type:"Berechtigung"})):this.standardErrorHandler(K)}}),this.lastJWTChecked=(new Date).getTime())}saveClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j.id,j).pipe((0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations.filter(pe=>pe.id!=j.id),K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}saveClubRegistrationPW(E,j){const P=this.startLoading("Neues Password wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j.id+"/pwchange",j).pipe((0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations.filter(pe=>pe.id!=j.id),K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}createClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird registriert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E,j,{observe:"response"}).pipe((0,U.U)(K=>(console.log(K),localStorage.setItem("auth_token",K.headers.get("x-access-token")),localStorage.setItem("auth_clubid",K.body.id+""),this.loggedIn=!0,K.body)),(0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations,K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}deleteClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird gel\xf6scht. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j,{responseType:"text"}).pipe((0,M.B)()));return P.subscribe({next:K=>{this.clublogout(),this._clubregistrations=this._clubregistrations.filter(pe=>pe.id!=j),this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}loadProgramsForCompetition(E){const j=this.startLoading("Programmliste zum Wettkampf wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/programmlist").pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}loadAthletListForClub(E,j){const P=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/athletlist").pipe((0,M.B)()));return P.subscribe({next:K=>{},error:this.standardErrorHandler}),P}loadAthletRegistrations(E,j){const P=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/athletes").pipe((0,M.B)()));return P.subscribe({error:this.standardErrorHandler}),P}createAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E+"/"+j+"/athletes",P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}saveAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j+"/athletes/"+P.id,P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}deleteAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j+"/athletes/"+P.id,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}findCompetitionsByVerein(E){const j=this.startLoading("Es werden fr\xfchere Anmeldungen gesucht. Bitte warten ...",this.http.get(_.AC+"api/competition/byVerein/"+E).pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}copyClubRegsFromCompetition(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+j+"/"+P+"/copyfrom",E,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}loadJudgeProgramDisziplinList(E){const j=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/programmdisziplinlist").pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}loadJudgeRegistrations(E,j){const P=this.startLoading("Wertungsrichter-Liste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/judges").pipe((0,M.B)()));return P.subscribe({error:this.standardErrorHandler}),P}createJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E+"/"+j+"/judges",P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}saveJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j+"/judges/"+P.id,P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}deleteJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j+"/judges/"+P.id,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}clublogout(){this.logout()}utf8_to_b64(E){return window.btoa(unescape(encodeURIComponent(E)))}b64_to_utf8(E){return decodeURIComponent(escape(window.atob(E)))}getClubList(){if(this.clublist&&this.clublist.length>0)return(0,R.of)(this.clublist);const E=this.startLoading("Clubliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/clubnames").pipe((0,M.B)()));return E.subscribe({next:j=>{this.clublist=j},error:this.standardErrorHandler}),E}resetRegistration(E){const j=new x.WM,P=this.http.options(_.AC+"api/registrations/"+this._competition+"/"+E+"/loginreset",{observe:"response",headers:j.set("Host",_.AC),responseType:"text"}).pipe((0,M.B)());return this.startLoading("Mail f\xfcr Login-Reset wird versendet. Bitte warten ...",P)}clublogin(E,j){this.clublogout();const P=new x.WM,K=this.startLoading("Login wird verarbeitet. Bitte warten ...",this.http.options(_.AC+"api/login",{observe:"response",headers:P.set("Authorization","Basic "+this.utf8_to_b64(`${E}:${j}`)),withCredentials:!0,responseType:"text"}).pipe((0,M.B)()));return K.subscribe({next:pe=>{console.log(pe),localStorage.setItem("auth_token",pe.headers.get("x-access-token")),localStorage.setItem("auth_clubid",E),this.loggedIn=!0},error:pe=>{console.log(pe),this.clublogout(),this.resetLoading(),401===pe.status?(localStorage.setItem("auth_token",pe.headers.get("x-access-token")),this.loggedIn=!1):this.standardErrorHandler(pe)}}),K}unlock(){localStorage.removeItem("current_station"),this.checkJWT(),this.stationFreezed=!1}logout(){localStorage.removeItem("auth_token"),localStorage.removeItem("auth_clubid"),this.loggedIn=!1,this.unlock()}getCompetitions(){const E=this.startLoading("Wettkampfliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/competition").pipe((0,M.B)()));return E.subscribe({next:j=>{this.competitions=j},error:this.standardErrorHandler}),E}getClubRegistrations(E){return this.checkJWT(),void 0!==this._clubregistrations&&this._competition===E||this.isInitializing||(this.durchgaenge=[],this._clubregistrations=[],this.geraete=void 0,this.steps=void 0,this.wertungen=void 0,this._competition=E,this._durchgang=void 0,this._geraet=void 0,this._step=void 0),this.loadClubRegistrations()}loadClubRegistrations(){return this._competition&&"undefined"!==this._competition?(this.startLoading("Clubanmeldungen werden geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+this._competition).pipe((0,M.B)())).subscribe({next:j=>{localStorage.setItem("current_competition",this._competition),this._clubregistrations=j,this.clubRegistrations.next(j)},error:this.standardErrorHandler}),this.clubRegistrations):(0,R.of)([])}loadRegistrationSyncActions(){if(!this._competition||"undefined"===this._competition)return(0,R.of)([]);const E=this.startLoading("Pendente An-/Abmeldungen werden geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+this._competition+"/syncactions").pipe((0,M.B)()));return E.subscribe({error:this.standardErrorHandler}),E}resetCompetition(E){console.log("reset data"),this.durchgaenge=[],this._clubregistrations=[],this.clubRegistrations.next([]),this.geraete=void 0,this.geraeteSubject.next([]),this.steps=void 0,this.wertungen=void 0,this.wertungenSubject.next([]),this._competition=E,this._durchgang=void 0,this._geraet=void 0,this._step=void 0}getDurchgaenge(E){return this.checkJWT(),void 0!==this.durchgaenge&&this._competition===E||this.isInitializing?(0,R.of)(this.durchgaenge||[]):(this.resetCompetition(E),this.loadDurchgaenge())}loadDurchgaenge(){if(!this._competition||"undefined"===this._competition)return(0,R.of)([]);const E=this.startLoading("Durchgangliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition).pipe((0,M.B)())),j=this._durchgang;return E.subscribe({next:P=>{if(localStorage.setItem("current_competition",this._competition),this.durchgaenge=P,j){const K=this.durchgaenge.filter(pe=>{const ke=(0,o._5)(pe);return j===pe||j===ke});1===K.length&&(this._durchgang=K[0])}},error:this.standardErrorHandler}),E}getGeraete(E,j){return void 0!==this.geraete&&this._competition===E&&this._durchgang===j||this.isInitializing?(0,R.of)(this.geraete||[]):(this.geraete=[],this.steps=void 0,this.wertungen=void 0,this._competition=E,this._durchgang=j,this._geraet=void 0,this._step=void 0,this.captionmode=!0,this.loadGeraete())}loadGeraete(){if(this.geraete=[],!this._competition||"undefined"===this._competition)return console.log("reusing geraetelist"),(0,R.of)([]);console.log("renewing geraetelist");let E="";E=this.captionmode&&this._durchgang&&"undefined"!==this._durchgang?_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang):_.AC+"api/durchgang/"+this._competition+"/geraete";const j=this.startLoading("Ger\xe4te zum Durchgang werden geladen. Bitte warten ...",this.http.get(E).pipe((0,M.B)()));return j.subscribe({next:P=>{this.geraete=P,this.geraeteSubject.next(this.geraete)},error:this.standardErrorHandler}),j}getSteps(E,j,P){if(void 0!==this.steps&&this._competition===E&&this._durchgang===j&&this._geraet===P||this.isInitializing)return(0,R.of)(this.steps||[]);this.steps=[],this.wertungen=void 0,this._competition=E,this._durchgang=j,this._geraet=P,this._step=void 0;const K=this.loadSteps();return K.subscribe({next:pe=>{this.steps=pe.map(ke=>parseInt(ke)),(void 0===this._step||this.steps.indexOf(this._step)<0)&&(this._step=this.steps[0],this.loadWertungen())},error:this.standardErrorHandler}),K}loadSteps(){if(this.steps=[],!this._competition||"undefined"===this._competition||!this._durchgang||"undefined"===this._durchgang||void 0===this._geraet)return(0,R.of)([]);const E=this.startLoading("Stationen zum Ger\xe4t werden geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/"+this._geraet).pipe((0,M.B)()));return E.subscribe({next:j=>{this.steps=j},error:this.standardErrorHandler}),E}getWertungen(E,j,P,K){void 0!==this.wertungen&&this._competition===E&&this._durchgang===j&&this._geraet===P&&this._step===K||this.isInitializing||(this.wertungen=[],this._competition=E,this._durchgang=j,this._geraet=P,this._step=K,this.loadWertungen())}activateCaptionMode(){this.competitions||this.getCompetitions(),this.durchgaenge||this.loadDurchgaenge(),(!this.captionmode||!this.geraete)&&(this.captionmode=!0,this.loadGeraete()),this.geraet&&!this.steps&&this.loadSteps(),this.geraet&&(this.disconnectWS(!0),this.initWebsocket())}loadWertungen(){if(this.wertungenLoading||void 0===this._geraet||void 0===this._step)return(0,R.of)([]);this.activateCaptionMode();const E=this._step;this.wertungenLoading=!0;const j=this.startLoading("Riegenteilnehmer werden geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/"+this._geraet+"/"+this._step).pipe((0,M.B)()));return j.subscribe({next:P=>{this.wertungenLoading=!1,this._step!==E?this.loadWertungen():(this.wertungen=P,this.wertungenSubject.next(this.wertungen))},error:this.standardErrorHandler}),j}loadAthletWertungen(E,j){return this.activateNonCaptionMode(E),this.startLoading("Wertungen werden geladen. Bitte warten ...",this.http.get(_.AC+`api/athlet/${this._competition}/${j}`).pipe((0,M.B)()))}activateNonCaptionMode(E){return this._competition!==E||this.captionmode||!this.geraete||0===this.geraete.length||E&&!this.isWebsocketConnected()?(this.captionmode=!1,this._competition=E,this.disconnectWS(!0),this.initWebsocket(),this.loadGeraete()):(0,R.of)(this.geraete)}loadStartlist(E){return this._competition?this.startLoading("Teilnehmerliste wird geladen. Bitte warten ...",E?this.http.get(_.AC+"api/report/"+this._competition+"/startlist?q="+E).pipe((0,M.B)()):this.http.get(_.AC+"api/report/"+this._competition+"/startlist").pipe((0,M.B)())):(0,R.of)()}isMessageAck(E){return"MessageAck"===E.type}updateWertung(E,j,P,K){const pe=K.wettkampfUUID,ke=new ge.x;return this.shouldConnectAgain()&&this.reconnect(),this.startLoading("Wertung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/durchgang/"+pe+"/"+(0,o.gT)(E)+"/"+P+"/"+j,K).pipe((0,M.B)())).subscribe({next:Te=>{if(!this.isMessageAck(Te)&&Te.wertung){let ie=!1;this.wertungen=this.wertungen.map(Be=>Be.wertung.id===Te.wertung.id?(ie=!0,Te):Be),this.wertungenSubject.next(this.wertungen),ke.next(Te),ie&&ke.complete()}else{const ie=Te;this.showMessage.next(ie),ke.error(ie.msg),ke.complete()}},error:this.standardErrorHandler}),ke}finishStation(E,j,P,K){const pe=new ge.x;return this.startLoading("Station wird abgeschlossen. Bitte warten ...",this.http.post(_.AC+"api/durchgang/"+E+"/finish",{type:"FinishDurchgangStation",wettkampfUUID:E,durchgang:j,geraet:P,step:K}).pipe((0,M.B)())).subscribe({next:ke=>{const Te=this.steps.filter(ie=>ie>K);Te.length>0?this._step=Te[0]:(localStorage.removeItem("current_station"),this.checkJWT(),this.stationFreezed=!1,this._step=this.steps[0]),this.loadWertungen().subscribe(ie=>{pe.next(Te)})},error:this.standardErrorHandler}),pe.asObservable()}nextStep(){const E=this.steps.filter(j=>j>this._step);return E.length>0?E[0]:this.steps[0]}prevStep(){const E=this.steps.filter(j=>j0?E[E.length-1]:this.steps[this.steps.length-1]}getPrevGeraet(){let E=this.geraete.indexOf(this.geraete.find(j=>j.id===this._geraet))-1;return E<0&&(E=this.geraete.length-1),this.geraete[E].id}getNextGeraet(){let E=this.geraete.indexOf(this.geraete.find(j=>j.id===this._geraet))+1;return E>=this.geraete.length&&(E=0),this.geraete[E].id}nextGeraet(){if(this.loggedIn){const E=this.steps.filter(j=>j>this._step);return(0,R.of)(E.length>0?E[0]:this.steps[0])}{const E=this._step;return this._geraet=this.getNextGeraet(),this.loadSteps().pipe((0,U.U)(j=>{const P=j.filter(K=>K>E);return P.length>0?P[0]:this.steps[0]}))}}prevGeraet(){if(this.loggedIn){const E=this.steps.filter(j=>j0?E[E.length-1]:this.steps[this.steps.length-1])}{const E=this._step;return this._geraet=this.getPrevGeraet(),this.loadSteps().pipe((0,U.U)(j=>{const P=this.steps.filter(K=>K0?P[P.length-1]:this.steps[this.steps.length-1]}))}}getScoreList(E){return this._competition?this.startLoading("Rangliste wird geladen. Bitte warten ...",this.http.get(`${_.AC}${E}`).pipe((0,M.B)())):(0,R.of)({})}getScoreLists(){return this._competition?this.startLoading("Ranglisten werden geladen. Bitte warten ...",this.http.get(`${_.AC}api/scores/${this._competition}`).pipe((0,M.B)())):(0,R.of)(Object.assign({}))}getWebsocketBackendUrl(){let E=location.host;const P="https:"===location.protocol?"wss:":"ws:";let K="api/";return K=this._durchgang&&this.captionmode?K+"durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/ws":K+"durchgang/"+this._competition+"/all/ws",E=E&&""!==E?(P+"//"+E+"/").replace("index.html",""):"wss://kutuapp.sharevic.net/",E+K}handleWebsocketMessage(E){switch(E.type){case"BulkEvent":return E.events.map(pe=>this.handleWebsocketMessage(pe)).reduce((pe,ke)=>pe&&ke);case"DurchgangStarted":return this._activeDurchgangList=[...this.activeDurchgangList,E],this.durchgangStarted.next(this.activeDurchgangList),!0;case"DurchgangFinished":const P=E;return this._activeDurchgangList=this.activeDurchgangList.filter(pe=>pe.durchgang!==P.durchgang||pe.wettkampfUUID!==P.wettkampfUUID),this.durchgangStarted.next(this.activeDurchgangList),!0;case"AthletWertungUpdatedSequenced":case"AthletWertungUpdated":const K=E;return this.wertungen=this.wertungen.map(pe=>pe.id===K.wertung.athletId&&pe.wertung.wettkampfdisziplinId===K.wertung.wettkampfdisziplinId?Object.assign({},pe,{wertung:K.wertung}):pe),this.wertungenSubject.next(this.wertungen),this.wertungUpdated.next(K),!0;case"AthletMovedInWettkampf":case"AthletRemovedFromWettkampf":return this.loadWertungen(),!0;case"NewLastResults":return this.newLastResults.next(E),!0;case"MessageAck":return console.log(E.msg),this.showMessage.next(E),!0;default:return!1}}}return S.\u0275fac=function(E){return new(E||S)(Y.LFG(x.eN),Y.LFG(G.HT))},S.\u0275prov=Y.Yz7({token:S,factory:S.\u0275fac,providedIn:"root"}),S})()},9192:(Qe,Fe,w)=>{"use strict";w.d(Fe,{iw:()=>B,_5:()=>Z,gT:()=>S});var o=w(1135),x=w(7579),N=w(1566),ge=w(9751),R=w(3532);var _=w(7225),Y=w(2529),G=w(8274);function Z(E){return E?E.replace(/[,&.*+?/^${}()|[\]\\]/g,"_"):""}function S(E){return E?encodeURIComponent(Z(E)):""}let B=(()=>{class E{constructor(){this.identifiedState=!1,this.connectedState=!1,this.explicitClosed=!0,this.reconnectInterval=3e4,this.reconnectAttempts=480,this.lstKeepAliveReceived=0,this.connected=new o.X(!1),this.identified=new o.X(!1),this.logMessages=new o.X(""),this.showMessage=new x.x,this.lastMessages=[]}get stopped(){return this.explicitClosed}startKeepAliveObservation(){setTimeout(()=>{const K=(new Date).getTime()-this.lstKeepAliveReceived;!this.explicitClosed&&!this.reconnectionObservable&&K>this.reconnectInterval?(this.logMessages.next("connection verified since "+K+"ms. It seems to be dead and need to be reconnected!"),this.disconnectWS(!1),this.reconnect()):this.logMessages.next("connection verified since "+K+"ms"),this.startKeepAliveObservation()},this.reconnectInterval)}sendMessage(P){this.websocket?this.connectedState&&this.websocket.send(P):this.connect(P)}disconnectWS(P=!0){this.explicitClosed=P,this.lstKeepAliveReceived=0,this.websocket?(this.websocket.close(),P&&this.close()):this.close()}close(){this.websocket&&(this.websocket.onerror=void 0,this.websocket.onclose=void 0,this.websocket.onopen=void 0,this.websocket.onmessage=void 0,this.websocket.close()),this.websocket=void 0,this.identifiedState=!1,this.lstKeepAliveReceived=0,this.identified.next(this.identifiedState),this.connectedState=!1,this.connected.next(this.connectedState)}isWebsocketConnected(){return this.websocket&&this.websocket.readyState===this.websocket.OPEN}isWebsocketConnecting(){return this.websocket&&this.websocket.readyState===this.websocket.CONNECTING}shouldConnectAgain(){return!(this.isWebsocketConnected()||this.isWebsocketConnecting())}reconnect(){if(!this.reconnectionObservable){this.logMessages.next("start try reconnection ..."),this.reconnectionObservable=function U(E=0,j=N.z){return E<0&&(E=0),function M(E=0,j,P=N.P){let K=-1;return null!=j&&((0,R.K)(j)?P=j:K=j),new ge.y(pe=>{let ke=function W(E){return E instanceof Date&&!isNaN(E)}(E)?+E-P.now():E;ke<0&&(ke=0);let Te=0;return P.schedule(function(){pe.closed||(pe.next(Te++),0<=K?this.schedule(void 0,K):pe.complete())},ke)})}(E,E,j)}(this.reconnectInterval).pipe((0,Y.o)((K,pe)=>pe{this.shouldConnectAgain()&&(this.logMessages.next("continue with reconnection ..."),this.connect(void 0))},null,()=>{this.reconnectionObservable=null,P.unsubscribe(),this.isWebsocketConnected()?this.logMessages.next("finish with reconnection (successfull)"):this.isWebsocketConnecting()?this.logMessages.next("continue with reconnection (CONNECTING)"):(!this.websocket||this.websocket.CLOSING||this.websocket.CLOSED)&&(this.disconnectWS(),this.logMessages.next("finish with reconnection (unsuccessfull)"))})}}initWebsocket(){this.logMessages.subscribe(P=>{this.lastMessages.push((0,_.sZ)(!0)+` - ${P}`),this.lastMessages=this.lastMessages.slice(Math.max(this.lastMessages.length-50,0))}),this.logMessages.next("init"),this.backendUrl=this.getWebsocketBackendUrl()+`?clientid=${(0,_.ix)()}`,this.logMessages.next("init with "+this.backendUrl),this.connect(void 0),this.startKeepAliveObservation()}connect(P){this.disconnectWS(),this.explicitClosed=!1,this.websocket=new WebSocket(this.backendUrl),this.websocket.onopen=()=>{this.connectedState=!0,this.connected.next(this.connectedState),P&&this.sendMessage(P)},this.websocket.onclose=pe=>{switch(this.close(),pe.code){case 1001:this.logMessages.next("Going Away"),this.explicitClosed||this.reconnect();break;case 1002:this.logMessages.next("Protocol error"),this.explicitClosed||this.reconnect();break;case 1003:this.logMessages.next("Unsupported Data"),this.explicitClosed||this.reconnect();break;case 1005:this.logMessages.next("No Status Rcvd"),this.explicitClosed||this.reconnect();break;case 1006:this.logMessages.next("Abnormal Closure"),this.explicitClosed||this.reconnect();break;case 1007:this.logMessages.next("Invalid frame payload data"),this.explicitClosed||this.reconnect();break;case 1008:this.logMessages.next("Policy Violation"),this.explicitClosed||this.reconnect();break;case 1009:this.logMessages.next("Message Too Big"),this.explicitClosed||this.reconnect();break;case 1010:this.logMessages.next("Mandatory Ext."),this.explicitClosed||this.reconnect();break;case 1011:this.logMessages.next("Internal Server Error"),this.explicitClosed||this.reconnect();break;case 1015:this.logMessages.next("TLS handshake")}},this.websocket.onmessage=pe=>{if(this.lstKeepAliveReceived=(new Date).getTime(),!pe.data.startsWith("Connection established.")&&"keepAlive"!==pe.data)try{const ke=JSON.parse(pe.data);"MessageAck"===ke.type?(console.log(ke.msg),this.showMessage.next(ke)):this.handleWebsocketMessage(ke)||(console.log(ke),this.logMessages.next("unknown message: "+pe.data))}catch(ke){this.logMessages.next(ke+": "+pe.data)}},this.websocket.onerror=pe=>{this.logMessages.next(pe.message+", "+pe.type)}}}return E.\u0275fac=function(P){return new(P||E)},E.\u0275prov=G.Yz7({token:E,factory:E.\u0275fac,providedIn:"root"}),E})()},7225:(Qe,Fe,w)=>{"use strict";w.d(Fe,{AC:()=>M,WZ:()=>B,ix:()=>S,sZ:()=>Y,tC:()=>_});const ge=location.host,M=(location.protocol+"//"+ge+"/").replace("index.html","");function _(E){let j=new Date;j=function U(E){return null!=E&&""!==E&&!isNaN(Number(E.toString()))}(E)?new Date(parseInt(E)):new Date(Date.parse(E));const P=`${j.getFullYear().toString()}-${("0"+(j.getMonth()+1)).slice(-2)}-${("0"+j.getDate()).slice(-2)}`;return console.log(P),P}function Y(E=!1){return function G(E,j=!1){const P=("0"+E.getDate()).slice(-2)+"-"+("0"+(E.getMonth()+1)).slice(-2)+"-"+E.getFullYear()+" "+("0"+E.getHours()).slice(-2)+":"+("0"+E.getMinutes()).slice(-2);return j?P+":"+("0"+E.getSeconds()).slice(-2):P}(new Date,E)}function S(){let E=localStorage.getItem("clientid");return E||(E=function Z(){function E(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return E()+E()+"-"+E()+"-"+E()+"-"+E()+"-"+E()+E()+E()}(),localStorage.setItem("clientid",E)),localStorage.getItem("current_username")+":"+E}const B={1:"boden.svg",2:"pferdpauschen.svg",3:"ringe.svg",4:"sprung.svg",5:"barren.svg",6:"reck.svg",26:"ringe.svg",27:"stufenbarren.svg",28:"schwebebalken.svg",29:"minitramp.svg",30:"minitramp.svg",31:"ringe.svg"}},1394:(Qe,Fe,w)=>{"use strict";var o=w(1481),x=w(8274),N=w(5472),ge=w(529),R=w(502);const M=(0,w(7423).fo)("SplashScreen",{web:()=>w.e(2680).then(w.bind(w,2680)).then(T=>new T.SplashScreenWeb)});var U=w(6895),_=w(3608);let Y=(()=>{class T{constructor(O){this.document=O;const te=localStorage.getItem("theme");te?this.setGlobalCSS(te):this.setTheme({})}setTheme(O){const te=function S(T){T={...G,...T};const{primary:k,secondary:O,tertiary:te,success:ce,warning:Ae,danger:De,dark:ue,medium:de,light:ne}=T,Ee=.2,Ce=.2;return`\n --ion-color-base: ${ne};\n --ion-color-contrast: ${ue};\n --ion-background-color: ${ne};\n --ion-card-background-color: ${E(ne,.4)};\n --ion-card-shadow-color1: ${E(ue,2).alpha(.2)};\n --ion-card-shadow-color2: ${E(ue,2).alpha(.14)};\n --ion-card-shadow-color3: ${E(ue,2).alpha(.12)};\n --ion-card-color: ${E(ue,2)};\n --ion-text-color: ${ue};\n --ion-toolbar-background-color: ${_(ne).lighten(Ce)};\n --ion-toolbar-text-color: ${B(ue,.2)};\n --ion-item-background-color: ${B(ne,.1)};\n --ion-item-background-activated: ${B(ne,.3)};\n --ion-item-text-color: ${B(ue,.1)};\n --ion-item-border-color: ${_(de).lighten(Ce)};\n --ion-overlay-background-color: ${E(ne,.1)};\n --ion-color-primary: ${k};\n --ion-color-primary-rgb: ${j(k)};\n --ion-color-primary-contrast: ${B(k)};\n --ion-color-primary-contrast-rgb: ${j(B(k))};\n --ion-color-primary-shade: ${_(k).darken(Ee)};\n --ion-color-primary-tint: ${_(k).lighten(Ce)};\n --ion-color-secondary: ${O};\n --ion-color-secondary-rgb: ${j(O)};\n --ion-color-secondary-contrast: ${B(O)};\n --ion-color-secondary-contrast-rgb: ${j(B(O))};\n --ion-color-secondary-shade: ${_(O).darken(Ee)};\n --ion-color-secondary-tint: ${_(O).lighten(Ce)};\n --ion-color-tertiary: ${te};\n --ion-color-tertiary-rgb: ${j(te)};\n --ion-color-tertiary-contrast: ${B(te)};\n --ion-color-tertiary-contrast-rgb: ${j(B(te))};\n --ion-color-tertiary-shade: ${_(te).darken(Ee)};\n --ion-color-tertiary-tint: ${_(te).lighten(Ce)};\n --ion-color-success: ${ce};\n --ion-color-success-rgb: ${j(ce)};\n --ion-color-success-contrast: ${B(ce)};\n --ion-color-success-contrast-rgb: ${j(B(ce))};\n --ion-color-success-shade: ${_(ce).darken(Ee)};\n --ion-color-success-tint: ${_(ce).lighten(Ce)};\n --ion-color-warning: ${Ae};\n --ion-color-warning-rgb: ${j(Ae)};\n --ion-color-warning-contrast: ${B(Ae)};\n --ion-color-warning-contrast-rgb: ${j(B(Ae))};\n --ion-color-warning-shade: ${_(Ae).darken(Ee)};\n --ion-color-warning-tint: ${_(Ae).lighten(Ce)};\n --ion-color-danger: ${De};\n --ion-color-danger-rgb: ${j(De)};\n --ion-color-danger-contrast: ${B(De)};\n --ion-color-danger-contrast-rgb: ${j(B(De))};\n --ion-color-danger-shade: ${_(De).darken(Ee)};\n --ion-color-danger-tint: ${_(De).lighten(Ce)};\n --ion-color-dark: ${ue};\n --ion-color-dark-rgb: ${j(ue)};\n --ion-color-dark-contrast: ${B(ue)};\n --ion-color-dark-contrast-rgb: ${j(B(ue))};\n --ion-color-dark-shade: ${_(ue).darken(Ee)};\n --ion-color-dark-tint: ${_(ue).lighten(Ce)};\n --ion-color-medium: ${de};\n --ion-color-medium-rgb: ${j(de)};\n --ion-color-medium-contrast: ${B(de)};\n --ion-color-medium-contrast-rgb: ${j(B(de))};\n --ion-color-medium-shade: ${_(de).darken(Ee)};\n --ion-color-medium-tint: ${_(de).lighten(Ce)};\n --ion-color-light: ${ne};\n --ion-color-light-rgb: ${j(ne)};\n --ion-color-light-contrast: ${B(ne)};\n --ion-color-light-contrast-rgb: ${j(B(ne))};\n --ion-color-light-shade: ${_(ne).darken(Ee)};\n --ion-color-light-tint: ${_(ne).lighten(Ce)};`+function Z(T,k){void 0===T&&(T="#ffffff"),void 0===k&&(k="#000000");const O=new _(T);let te="";for(let ce=5;ce<100;ce+=5){const De=ce/100;te+=` --ion-color-step-${ce+"0"}: ${O.mix(_(k),De).hex()};`,ce<95&&(te+="\n")}return te}(ue,ne)}(O);this.setGlobalCSS(te),localStorage.setItem("theme",te)}setVariable(O,te){this.document.documentElement.style.setProperty(O,te)}setGlobalCSS(O){this.document.documentElement.style.cssText=O}get storedTheme(){return localStorage.getItem("theme")}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(U.K0))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})();const G={primary:"#3880ff",secondary:"#0cd1e8",tertiary:"#7044ff",success:"#10dc60",warning:"#ff7b00",danger:"#f04141",dark:"#222428",medium:"#989aa2",light:"#fcfdff"};function B(T,k=.8){const O=_(T);return O.isDark()?O.lighten(k):O.darken(k)}function E(T,k=.8){const O=_(T);return O.isDark()?O.darken(k):O.lighten(k)}function j(T){const k=_(T);return`${k.red()}, ${k.green()}, ${k.blue()}`}var P=w(600);function K(T,k){if(1&T){const O=x.EpF();x.TgZ(0,"ion-item",4),x.NdJ("click",function(){const Ae=x.CHM(O).$implicit,De=x.oxw();return x.KtG(De.openPage(Ae.url))}),x._UZ(1,"ion-icon",9),x.TgZ(2,"ion-label"),x._uU(3),x.qZA()()}if(2&T){const O=k.$implicit;x.xp6(1),x.Q6J("name",O.icon),x.xp6(2),x.hij(" ",O.title," ")}}function pe(T,k){if(1&T){const O=x.EpF();x.TgZ(0,"ion-item",4),x.NdJ("click",function(){const Ae=x.CHM(O).$implicit,De=x.oxw();return x.KtG(De.changeTheme(Ae))}),x._UZ(1,"ion-icon",6),x.TgZ(2,"ion-label"),x._uU(3),x.qZA()()}if(2&T){const O=k.$implicit,te=x.oxw();x.Udp("background-color",te.themes[O].light)("color",te.themes[O].dark),x.xp6(2),x.Udp("background-color",te.themes[O].light)("color",te.themes[O].dark),x.xp6(1),x.hij(" ",O," ")}}let ke=(()=>{class T{constructor(O,te,ce,Ae,De,ue,de){this.platform=O,this.navController=te,this.route=ce,this.router=Ae,this.themeSwitcher=De,this.backendService=ue,this.alertCtrl=de,this.themes={Blau:{primary:"#ffa238",secondary:"#a19137",tertiary:"#421804",success:"#0eb651",warning:"#ff7b00",danger:"#f04141",dark:"#fffdf5",medium:"#454259",light:"#03163d"},Sport:{primary:"#ffa238",secondary:"#7dc0ff",tertiary:"#421804",success:"#0eb651",warning:"#ff7b00",danger:"#f04141",dark:"#03163d",medium:"#8092dd",light:"#fffdf5"},Dunkel:{primary:"#8DBB82",secondary:"#FCFF6C",tertiary:"#FE5F55",warning:"#ffce00",medium:"#BCC2C7",dark:"#DADFE1",light:"#363232"},Neon:{primary:"#23ff00",secondary:"#4CE0B3",tertiary:"#FF5E79",warning:"#ff7b00",light:"#F4EDF2",medium:"#B682A5",dark:"#34162A"}},this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"},{title:"Letzte Resultate",url:"last-results",icon:"radio"},{title:"Top Resultate",url:"top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"},{title:"Wettkampfanmeldungen",url:"/registration",icon:"people-outline"}],this.backendService.askForUsername.subscribe(ne=>{this.alertCtrl.create({header:"Settings",message:ne.currentUserName?"Dein Benutzername":"Du bist das erste Mal hier. Bitte gib einen Benutzernamen an",inputs:[{name:"username",placeholder:"Benutzername",value:ne.currentUserName}],buttons:[{text:"Abbrechen",role:"cancel",handler:()=>{console.log("Cancel clicked")}},{text:"Speichern",handler:Ce=>{if(!(Ce.username&&Ce.username.trim().length>1))return!1;ne.currentUserName=Ce.username.trim()}}]}).then(Ce=>Ce.present())}),this.backendService.showMessage.subscribe(ne=>{let Ee=ne.msg;(!Ee||0===Ee.trim().length)&&(Ee="Die gew\xfcnschte Aktion ist aktuell nicht m\xf6glich."),this.alertCtrl.create({header:"Achtung",message:Ee,buttons:["OK"]}).then(ze=>ze.present())}),this.initializeApp()}get themeKeys(){return Object.keys(this.themes)}clearPosParam(){this.router.navigate(["."],{relativeTo:this.route,queryParams:{}})}initializeApp(){this.platform.ready().then(()=>{if(M.show(),window.location.href.indexOf("?")>0)try{const O=window.location.href.split("?")[1],te=atob(O);O.startsWith("all")?(this.appPages=[{title:"Alle Resultate",url:"/all-results",icon:"radio"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/last-results")):O.startsWith("top")?(this.appPages=[{title:"Top Resultate",url:"/top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/top-results")):te.startsWith("last")?(this.appPages=[{title:"Aktuelle Resultate",url:"/last-results",icon:"radio"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/last-results"),this.backendService.initWithQuery(te.substring(5))):te.startsWith("top")?(this.appPages=[{title:"Top Resultate",url:"/top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/top-results"),this.backendService.initWithQuery(te.substring(4))):te.startsWith("registration")?(window.history.replaceState({},document.title,window.location.href.split("?")[0]),this.clearPosParam(),console.log("initializing with "+te),localStorage.setItem("external_load",te),this.backendService.initWithQuery(te.substring(13)).subscribe(ce=>{console.log("clubreg initialzed. navigate to clubreg-editor"),this.navController.navigateRoot("/registration/"+this.backendService.competition+"/"+localStorage.getItem("auth_clubid"))})):(window.history.replaceState({},document.title,window.location.href.split("?")[0]),this.clearPosParam(),console.log("initializing with "+te),localStorage.setItem("external_load",te),this.backendService.initWithQuery(te).subscribe(ce=>{te.startsWith("c=")&&te.indexOf("&st=")>-1&&te.indexOf("&g=")>-1&&(this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"}],this.navController.navigateRoot("/station"))}))}catch(O){console.log(O)}else if(localStorage.getItem("current_station")){const O=localStorage.getItem("current_station");this.backendService.initWithQuery(O).subscribe(te=>{O.startsWith("c=")&&O.indexOf("&st=")&&O.indexOf("&g=")&&(this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"}],this.navController.navigateRoot("/station"))})}else if(localStorage.getItem("current_competition")){const O=localStorage.getItem("current_competition");this.backendService.getDurchgaenge(O)}M.hide()})}askUserName(){this.backendService.askForUsername.next(this.backendService)}changeTheme(O){this.themeSwitcher.setTheme(this.themes[O])}openPage(O){this.navController.navigateRoot(O)}}return T.\u0275fac=function(O){return new(O||T)(x.Y36(R.t4),x.Y36(R.SH),x.Y36(N.gz),x.Y36(N.F0),x.Y36(Y),x.Y36(P.v),x.Y36(R.Br))},T.\u0275cmp=x.Xpm({type:T,selectors:[["app-root"]],decls:25,vars:2,consts:[["contentId","main","disabled","true"],["contentId","main"],["auto-hide","false"],["menuClose","",3,"click",4,"ngFor","ngForOf"],["menuClose","",3,"click"],["slot","start","name","settings"],["slot","start","name","color-palette"],["menuClose","",3,"background-color","color","click",4,"ngFor","ngForOf"],["id","main"],["slot","start",3,"name"]],template:function(O,te){1&O&&(x.TgZ(0,"ion-app")(1,"ion-split-pane",0)(2,"ion-menu",1)(3,"ion-header")(4,"ion-toolbar")(5,"ion-title"),x._uU(6,"Menu"),x.qZA()()(),x.TgZ(7,"ion-content")(8,"ion-list")(9,"ion-menu-toggle",2),x.YNc(10,K,4,2,"ion-item",3),x.TgZ(11,"ion-item",4),x.NdJ("click",function(){return te.askUserName()}),x._UZ(12,"ion-icon",5),x.TgZ(13,"ion-label"),x._uU(14," Settings "),x.qZA()(),x.TgZ(15,"ion-item-divider"),x._uU(16,"\xa0"),x._UZ(17,"br"),x._uU(18," Farbschema"),x.qZA(),x.TgZ(19,"ion-item",4),x.NdJ("click",function(){return te.changeTheme("")}),x._UZ(20,"ion-icon",6),x.TgZ(21,"ion-label"),x._uU(22," Standardfarben "),x.qZA()(),x.YNc(23,pe,4,9,"ion-item",7),x.qZA()()()(),x._UZ(24,"ion-router-outlet",8),x.qZA()()),2&O&&(x.xp6(10),x.Q6J("ngForOf",te.appPages),x.xp6(13),x.Q6J("ngForOf",te.themeKeys))},dependencies:[U.sg,R.dr,R.W2,R.Gu,R.gu,R.Ie,R.rH,R.Q$,R.q_,R.z0,R.zc,R.jI,R.wd,R.sr,R.jP],encapsulation:2}),T})(),Te=(()=>{class T{constructor(O,te){this.router=O,this.backendService=te}canActivate(O){return!(!this.backendService.geraet||!this.backendService.step)||(this.router.navigate(["home"]),!1)}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(N.F0),x.LFG(P.v))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})(),ie=(()=>{class T{constructor(O,te){this.router=O,this.backendService=te}canActivate(O){const te=O.paramMap.get("wkId"),ce=O.paramMap.get("regId");return!!("0"===ce||this.backendService.loggedIn&&this.backendService.authenticatedClubId===ce)||(this.router.navigate(["registration/"+te]),!1)}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(N.F0),x.LFG(P.v))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})();const Be=[{path:"",redirectTo:"home",pathMatch:"full"},{path:"home",loadChildren:()=>w.e(4902).then(w.bind(w,4902)).then(T=>T.HomePageModule)},{path:"station",canActivate:[Te],loadChildren:()=>Promise.all([w.e(8592),w.e(3050)]).then(w.bind(w,3050)).then(T=>T.StationPageModule)},{path:"wertung-editor/:itemId",canActivate:[Te],loadChildren:()=>w.e(9151).then(w.bind(w,9151)).then(T=>T.WertungEditorPageModule)},{path:"last-results",loadChildren:()=>Promise.all([w.e(8592),w.e(9946)]).then(w.bind(w,9946)).then(T=>T.LastResultsPageModule)},{path:"top-results",loadChildren:()=>Promise.all([w.e(8592),w.e(5332)]).then(w.bind(w,5332)).then(T=>T.LastTopResultsPageModule)},{path:"search-athlet",loadChildren:()=>Promise.all([w.e(8592),w.e(3375)]).then(w.bind(w,3375)).then(T=>T.SearchAthletPageModule)},{path:"search-athlet/:wkId",loadChildren:()=>Promise.all([w.e(8592),w.e(3375)]).then(w.bind(w,3375)).then(T=>T.SearchAthletPageModule)},{path:"athlet-view/:wkId/:athletId",loadChildren:()=>Promise.all([w.e(8592),w.e(5201)]).then(w.bind(w,5201)).then(T=>T.AthletViewPageModule)},{path:"registration",loadChildren:()=>Promise.all([w.e(8592),w.e(5323)]).then(w.bind(w,5323)).then(T=>T.RegistrationPageModule)},{path:"registration/:wkId",loadChildren:()=>Promise.all([w.e(8592),w.e(5323)]).then(w.bind(w,5323)).then(T=>T.RegistrationPageModule)},{path:"registration/:wkId/:regId",canActivate:[ie],loadChildren:()=>w.e(1994).then(w.bind(w,1994)).then(T=>T.ClubregEditorPageModule)},{path:"reg-athletlist/:wkId/:regId",canActivate:[ie],loadChildren:()=>Promise.all([w.e(8592),w.e(170)]).then(w.bind(w,170)).then(T=>T.RegAthletlistPageModule)},{path:"reg-athletlist/:wkId/:regId/:athletId",canActivate:[ie],loadChildren:()=>w.e(5231).then(w.bind(w,5231)).then(T=>T.RegAthletEditorPageModule)},{path:"reg-judgelist/:wkId/:regId",canActivate:[ie],loadChildren:()=>Promise.all([w.e(8592),w.e(6482)]).then(w.bind(w,6482)).then(T=>T.RegJudgelistPageModule)},{path:"reg-judgelist/:wkId/:regId/:judgeId",canActivate:[ie],loadChildren:()=>w.e(1053).then(w.bind(w,1053)).then(T=>T.RegJudgeEditorPageModule)}];let re=(()=>{class T{}return T.\u0275fac=function(O){return new(O||T)},T.\u0275mod=x.oAB({type:T}),T.\u0275inj=x.cJS({imports:[N.Bz.forRoot(Be,{preloadingStrategy:N.wm}),N.Bz]}),T})();var oe=w(7225);let be=(()=>{class T{constructor(){}intercept(O,te){const ce=O.headers.get("x-access-token")||localStorage.getItem("auth_token");return O=O.clone({setHeaders:{clientid:`${(0,oe.ix)()}`,"x-access-token":`${ce}`}}),te.handle(O)}}return T.\u0275fac=function(O){return new(O||T)},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})(),Ne=(()=>{class T{}return T.\u0275fac=function(O){return new(O||T)},T.\u0275mod=x.oAB({type:T,bootstrap:[ke]}),T.\u0275inj=x.cJS({providers:[Te,{provide:N.wN,useClass:R.r4},P.v,Y,be,{provide:ge.TP,useClass:be,multi:!0}],imports:[ge.JF,o.b2,R.Pc.forRoot(),re]}),T})();(0,x.G48)(),o.q6().bootstrapModule(Ne).catch(T=>console.log(T))},9914:Qe=>{"use strict";Qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},9655:(Qe,Fe,w)=>{var o=w(9914),x=w(6931),N=Object.hasOwnProperty,ge=Object.create(null);for(var R in o)N.call(o,R)&&(ge[o[R]]=R);var W=Qe.exports={to:{},get:{}};function M(_,Y,G){return Math.min(Math.max(Y,_),G)}function U(_){var Y=Math.round(_).toString(16).toUpperCase();return Y.length<2?"0"+Y:Y}W.get=function(_){var G,Z;switch(_.substring(0,3).toLowerCase()){case"hsl":G=W.get.hsl(_),Z="hsl";break;case"hwb":G=W.get.hwb(_),Z="hwb";break;default:G=W.get.rgb(_),Z="rgb"}return G?{model:Z,value:G}:null},W.get.rgb=function(_){if(!_)return null;var j,P,K,E=[0,0,0,1];if(j=_.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(K=j[2],j=j[1],P=0;P<3;P++){var pe=2*P;E[P]=parseInt(j.slice(pe,pe+2),16)}K&&(E[3]=parseInt(K,16)/255)}else if(j=_.match(/^#([a-f0-9]{3,4})$/i)){for(K=(j=j[1])[3],P=0;P<3;P++)E[P]=parseInt(j[P]+j[P],16);K&&(E[3]=parseInt(K+K,16)/255)}else if(j=_.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(P=0;P<3;P++)E[P]=parseInt(j[P+1],0);j[4]&&(E[3]=j[5]?.01*parseFloat(j[4]):parseFloat(j[4]))}else{if(!(j=_.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)))return(j=_.match(/^(\w+)$/))?"transparent"===j[1]?[0,0,0,0]:N.call(o,j[1])?((E=o[j[1]])[3]=1,E):null:null;for(P=0;P<3;P++)E[P]=Math.round(2.55*parseFloat(j[P+1]));j[4]&&(E[3]=j[5]?.01*parseFloat(j[4]):parseFloat(j[4]))}for(P=0;P<3;P++)E[P]=M(E[P],0,255);return E[3]=M(E[3],0,1),E},W.get.hsl=function(_){if(!_)return null;var G=_.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(G){var Z=parseFloat(G[4]);return[(parseFloat(G[1])%360+360)%360,M(parseFloat(G[2]),0,100),M(parseFloat(G[3]),0,100),M(isNaN(Z)?1:Z,0,1)]}return null},W.get.hwb=function(_){if(!_)return null;var G=_.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(G){var Z=parseFloat(G[4]);return[(parseFloat(G[1])%360+360)%360,M(parseFloat(G[2]),0,100),M(parseFloat(G[3]),0,100),M(isNaN(Z)?1:Z,0,1)]}return null},W.to.hex=function(){var _=x(arguments);return"#"+U(_[0])+U(_[1])+U(_[2])+(_[3]<1?U(Math.round(255*_[3])):"")},W.to.rgb=function(){var _=x(arguments);return _.length<4||1===_[3]?"rgb("+Math.round(_[0])+", "+Math.round(_[1])+", "+Math.round(_[2])+")":"rgba("+Math.round(_[0])+", "+Math.round(_[1])+", "+Math.round(_[2])+", "+_[3]+")"},W.to.rgb.percent=function(){var _=x(arguments),Y=Math.round(_[0]/255*100),G=Math.round(_[1]/255*100),Z=Math.round(_[2]/255*100);return _.length<4||1===_[3]?"rgb("+Y+"%, "+G+"%, "+Z+"%)":"rgba("+Y+"%, "+G+"%, "+Z+"%, "+_[3]+")"},W.to.hsl=function(){var _=x(arguments);return _.length<4||1===_[3]?"hsl("+_[0]+", "+_[1]+"%, "+_[2]+"%)":"hsla("+_[0]+", "+_[1]+"%, "+_[2]+"%, "+_[3]+")"},W.to.hwb=function(){var _=x(arguments),Y="";return _.length>=4&&1!==_[3]&&(Y=", "+_[3]),"hwb("+_[0]+", "+_[1]+"%, "+_[2]+"%"+Y+")"},W.to.keyword=function(_){return ge[_.slice(0,3)]}},3608:(Qe,Fe,w)=>{const o=w(9655),x=w(798),N=["keyword","gray","hex"],ge={};for(const S of Object.keys(x))ge[[...x[S].labels].sort().join("")]=S;const R={};function W(S,B){if(!(this instanceof W))return new W(S,B);if(B&&B in N&&(B=null),B&&!(B in x))throw new Error("Unknown model: "+B);let E,j;if(null==S)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(S instanceof W)this.model=S.model,this.color=[...S.color],this.valpha=S.valpha;else if("string"==typeof S){const P=o.get(S);if(null===P)throw new Error("Unable to parse color from string: "+S);this.model=P.model,j=x[this.model].channels,this.color=P.value.slice(0,j),this.valpha="number"==typeof P.value[j]?P.value[j]:1}else if(S.length>0){this.model=B||"rgb",j=x[this.model].channels;const P=Array.prototype.slice.call(S,0,j);this.color=Z(P,j),this.valpha="number"==typeof S[j]?S[j]:1}else if("number"==typeof S)this.model="rgb",this.color=[S>>16&255,S>>8&255,255&S],this.valpha=1;else{this.valpha=1;const P=Object.keys(S);"alpha"in S&&(P.splice(P.indexOf("alpha"),1),this.valpha="number"==typeof S.alpha?S.alpha:0);const K=P.sort().join("");if(!(K in ge))throw new Error("Unable to parse color from object: "+JSON.stringify(S));this.model=ge[K];const{labels:pe}=x[this.model],ke=[];for(E=0;E(S%360+360)%360),saturationl:_("hsl",1,Y(100)),lightness:_("hsl",2,Y(100)),saturationv:_("hsv",1,Y(100)),value:_("hsv",2,Y(100)),chroma:_("hcg",1,Y(100)),gray:_("hcg",2,Y(100)),white:_("hwb",1,Y(100)),wblack:_("hwb",2,Y(100)),cyan:_("cmyk",0,Y(100)),magenta:_("cmyk",1,Y(100)),yellow:_("cmyk",2,Y(100)),black:_("cmyk",3,Y(100)),x:_("xyz",0,Y(95.047)),y:_("xyz",1,Y(100)),z:_("xyz",2,Y(108.833)),l:_("lab",0,Y(100)),a:_("lab",1),b:_("lab",2),keyword(S){return void 0!==S?new W(S):x[this.model].keyword(this.color)},hex(S){return void 0!==S?new W(S):o.to.hex(this.rgb().round().color)},hexa(S){if(void 0!==S)return new W(S);const B=this.rgb().round().color;let E=Math.round(255*this.valpha).toString(16).toUpperCase();return 1===E.length&&(E="0"+E),o.to.hex(B)+E},rgbNumber(){const S=this.rgb().color;return(255&S[0])<<16|(255&S[1])<<8|255&S[2]},luminosity(){const S=this.rgb().color,B=[];for(const[E,j]of S.entries()){const P=j/255;B[E]=P<=.04045?P/12.92:((P+.055)/1.055)**2.4}return.2126*B[0]+.7152*B[1]+.0722*B[2]},contrast(S){const B=this.luminosity(),E=S.luminosity();return B>E?(B+.05)/(E+.05):(E+.05)/(B+.05)},level(S){const B=this.contrast(S);return B>=7?"AAA":B>=4.5?"AA":""},isDark(){const S=this.rgb().color;return(2126*S[0]+7152*S[1]+722*S[2])/1e4<128},isLight(){return!this.isDark()},negate(){const S=this.rgb();for(let B=0;B<3;B++)S.color[B]=255-S.color[B];return S},lighten(S){const B=this.hsl();return B.color[2]+=B.color[2]*S,B},darken(S){const B=this.hsl();return B.color[2]-=B.color[2]*S,B},saturate(S){const B=this.hsl();return B.color[1]+=B.color[1]*S,B},desaturate(S){const B=this.hsl();return B.color[1]-=B.color[1]*S,B},whiten(S){const B=this.hwb();return B.color[1]+=B.color[1]*S,B},blacken(S){const B=this.hwb();return B.color[2]+=B.color[2]*S,B},grayscale(){const S=this.rgb().color,B=.3*S[0]+.59*S[1]+.11*S[2];return W.rgb(B,B,B)},fade(S){return this.alpha(this.valpha-this.valpha*S)},opaquer(S){return this.alpha(this.valpha+this.valpha*S)},rotate(S){const B=this.hsl();let E=B.color[0];return E=(E+S)%360,E=E<0?360+E:E,B.color[0]=E,B},mix(S,B){if(!S||!S.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof S);const E=S.rgb(),j=this.rgb(),P=void 0===B?.5:B,K=2*P-1,pe=E.alpha()-j.alpha(),ke=((K*pe==-1?K:(K+pe)/(1+K*pe))+1)/2,Te=1-ke;return W.rgb(ke*E.red()+Te*j.red(),ke*E.green()+Te*j.green(),ke*E.blue()+Te*j.blue(),E.alpha()*P+j.alpha()*(1-P))}};for(const S of Object.keys(x)){if(N.includes(S))continue;const{channels:B}=x[S];W.prototype[S]=function(...E){return this.model===S?new W(this):new W(E.length>0?E:[...G(x[this.model][S].raw(this.color)),this.valpha],S)},W[S]=function(...E){let j=E[0];return"number"==typeof j&&(j=Z(E,B)),new W(j,S)}}function U(S){return function(B){return function M(S,B){return Number(S.toFixed(B))}(B,S)}}function _(S,B,E){S=Array.isArray(S)?S:[S];for(const j of S)(R[j]||(R[j]=[]))[B]=E;return S=S[0],function(j){let P;return void 0!==j?(E&&(j=E(j)),P=this[S](),P.color[B]=j,P):(P=this[S]().color[B],E&&(P=E(P)),P)}}function Y(S){return function(B){return Math.max(0,Math.min(S,B))}}function G(S){return Array.isArray(S)?S:[S]}function Z(S,B){for(let E=0;E{const o=w(1382),x={};for(const R of Object.keys(o))x[o[R]]=R;const N={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};Qe.exports=N;for(const R of Object.keys(N)){if(!("channels"in N[R]))throw new Error("missing channels property: "+R);if(!("labels"in N[R]))throw new Error("missing channel labels property: "+R);if(N[R].labels.length!==N[R].channels)throw new Error("channel and label counts mismatch: "+R);const{channels:W,labels:M}=N[R];delete N[R].channels,delete N[R].labels,Object.defineProperty(N[R],"channels",{value:W}),Object.defineProperty(N[R],"labels",{value:M})}function ge(R,W){return(R[0]-W[0])**2+(R[1]-W[1])**2+(R[2]-W[2])**2}N.rgb.hsl=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.min(W,M,U),Y=Math.max(W,M,U),G=Y-_;let Z,S;Y===_?Z=0:W===Y?Z=(M-U)/G:M===Y?Z=2+(U-W)/G:U===Y&&(Z=4+(W-M)/G),Z=Math.min(60*Z,360),Z<0&&(Z+=360);const B=(_+Y)/2;return S=Y===_?0:B<=.5?G/(Y+_):G/(2-Y-_),[Z,100*S,100*B]},N.rgb.hsv=function(R){let W,M,U,_,Y;const G=R[0]/255,Z=R[1]/255,S=R[2]/255,B=Math.max(G,Z,S),E=B-Math.min(G,Z,S),j=function(P){return(B-P)/6/E+.5};return 0===E?(_=0,Y=0):(Y=E/B,W=j(G),M=j(Z),U=j(S),G===B?_=U-M:Z===B?_=1/3+W-U:S===B&&(_=2/3+M-W),_<0?_+=1:_>1&&(_-=1)),[360*_,100*Y,100*B]},N.rgb.hwb=function(R){const W=R[0],M=R[1];let U=R[2];const _=N.rgb.hsl(R)[0],Y=1/255*Math.min(W,Math.min(M,U));return U=1-1/255*Math.max(W,Math.max(M,U)),[_,100*Y,100*U]},N.rgb.cmyk=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.min(1-W,1-M,1-U);return[100*((1-W-_)/(1-_)||0),100*((1-M-_)/(1-_)||0),100*((1-U-_)/(1-_)||0),100*_]},N.rgb.keyword=function(R){const W=x[R];if(W)return W;let U,M=1/0;for(const _ of Object.keys(o)){const G=ge(R,o[_]);G.04045?((W+.055)/1.055)**2.4:W/12.92,M=M>.04045?((M+.055)/1.055)**2.4:M/12.92,U=U>.04045?((U+.055)/1.055)**2.4:U/12.92,[100*(.4124*W+.3576*M+.1805*U),100*(.2126*W+.7152*M+.0722*U),100*(.0193*W+.1192*M+.9505*U)]},N.rgb.lab=function(R){const W=N.rgb.xyz(R);let M=W[0],U=W[1],_=W[2];return M/=95.047,U/=100,_/=108.883,M=M>.008856?M**(1/3):7.787*M+16/116,U=U>.008856?U**(1/3):7.787*U+16/116,_=_>.008856?_**(1/3):7.787*_+16/116,[116*U-16,500*(M-U),200*(U-_)]},N.hsl.rgb=function(R){const W=R[0]/360,M=R[1]/100,U=R[2]/100;let _,Y,G;if(0===M)return G=255*U,[G,G,G];_=U<.5?U*(1+M):U+M-U*M;const Z=2*U-_,S=[0,0,0];for(let B=0;B<3;B++)Y=W+1/3*-(B-1),Y<0&&Y++,Y>1&&Y--,G=6*Y<1?Z+6*(_-Z)*Y:2*Y<1?_:3*Y<2?Z+(_-Z)*(2/3-Y)*6:Z,S[B]=255*G;return S},N.hsl.hsv=function(R){const W=R[0];let M=R[1]/100,U=R[2]/100,_=M;const Y=Math.max(U,.01);return U*=2,M*=U<=1?U:2-U,_*=Y<=1?Y:2-Y,[W,100*(0===U?2*_/(Y+_):2*M/(U+M)),(U+M)/2*100]},N.hsv.rgb=function(R){const W=R[0]/60,M=R[1]/100;let U=R[2]/100;const _=Math.floor(W)%6,Y=W-Math.floor(W),G=255*U*(1-M),Z=255*U*(1-M*Y),S=255*U*(1-M*(1-Y));switch(U*=255,_){case 0:return[U,S,G];case 1:return[Z,U,G];case 2:return[G,U,S];case 3:return[G,Z,U];case 4:return[S,G,U];case 5:return[U,G,Z]}},N.hsv.hsl=function(R){const W=R[0],M=R[1]/100,U=R[2]/100,_=Math.max(U,.01);let Y,G;G=(2-M)*U;const Z=(2-M)*_;return Y=M*_,Y/=Z<=1?Z:2-Z,Y=Y||0,G/=2,[W,100*Y,100*G]},N.hwb.rgb=function(R){const W=R[0]/360;let M=R[1]/100,U=R[2]/100;const _=M+U;let Y;_>1&&(M/=_,U/=_);const G=Math.floor(6*W),Z=1-U;Y=6*W-G,0!=(1&G)&&(Y=1-Y);const S=M+Y*(Z-M);let B,E,j;switch(G){default:case 6:case 0:B=Z,E=S,j=M;break;case 1:B=S,E=Z,j=M;break;case 2:B=M,E=Z,j=S;break;case 3:B=M,E=S,j=Z;break;case 4:B=S,E=M,j=Z;break;case 5:B=Z,E=M,j=S}return[255*B,255*E,255*j]},N.cmyk.rgb=function(R){const M=R[1]/100,U=R[2]/100,_=R[3]/100;return[255*(1-Math.min(1,R[0]/100*(1-_)+_)),255*(1-Math.min(1,M*(1-_)+_)),255*(1-Math.min(1,U*(1-_)+_))]},N.xyz.rgb=function(R){const W=R[0]/100,M=R[1]/100,U=R[2]/100;let _,Y,G;return _=3.2406*W+-1.5372*M+-.4986*U,Y=-.9689*W+1.8758*M+.0415*U,G=.0557*W+-.204*M+1.057*U,_=_>.0031308?1.055*_**(1/2.4)-.055:12.92*_,Y=Y>.0031308?1.055*Y**(1/2.4)-.055:12.92*Y,G=G>.0031308?1.055*G**(1/2.4)-.055:12.92*G,_=Math.min(Math.max(0,_),1),Y=Math.min(Math.max(0,Y),1),G=Math.min(Math.max(0,G),1),[255*_,255*Y,255*G]},N.xyz.lab=function(R){let W=R[0],M=R[1],U=R[2];return W/=95.047,M/=100,U/=108.883,W=W>.008856?W**(1/3):7.787*W+16/116,M=M>.008856?M**(1/3):7.787*M+16/116,U=U>.008856?U**(1/3):7.787*U+16/116,[116*M-16,500*(W-M),200*(M-U)]},N.lab.xyz=function(R){let _,Y,G;Y=(R[0]+16)/116,_=R[1]/500+Y,G=Y-R[2]/200;const Z=Y**3,S=_**3,B=G**3;return Y=Z>.008856?Z:(Y-16/116)/7.787,_=S>.008856?S:(_-16/116)/7.787,G=B>.008856?B:(G-16/116)/7.787,_*=95.047,Y*=100,G*=108.883,[_,Y,G]},N.lab.lch=function(R){const W=R[0],M=R[1],U=R[2];let _;return _=360*Math.atan2(U,M)/2/Math.PI,_<0&&(_+=360),[W,Math.sqrt(M*M+U*U),_]},N.lch.lab=function(R){const M=R[1],_=R[2]/360*2*Math.PI;return[R[0],M*Math.cos(_),M*Math.sin(_)]},N.rgb.ansi16=function(R,W=null){const[M,U,_]=R;let Y=null===W?N.rgb.hsv(R)[2]:W;if(Y=Math.round(Y/50),0===Y)return 30;let G=30+(Math.round(_/255)<<2|Math.round(U/255)<<1|Math.round(M/255));return 2===Y&&(G+=60),G},N.hsv.ansi16=function(R){return N.rgb.ansi16(N.hsv.rgb(R),R[2])},N.rgb.ansi256=function(R){const W=R[0],M=R[1],U=R[2];return W===M&&M===U?W<8?16:W>248?231:Math.round((W-8)/247*24)+232:16+36*Math.round(W/255*5)+6*Math.round(M/255*5)+Math.round(U/255*5)},N.ansi16.rgb=function(R){let W=R%10;if(0===W||7===W)return R>50&&(W+=3.5),W=W/10.5*255,[W,W,W];const M=.5*(1+~~(R>50));return[(1&W)*M*255,(W>>1&1)*M*255,(W>>2&1)*M*255]},N.ansi256.rgb=function(R){if(R>=232){const Y=10*(R-232)+8;return[Y,Y,Y]}let W;return R-=16,[Math.floor(R/36)/5*255,Math.floor((W=R%36)/6)/5*255,W%6/5*255]},N.rgb.hex=function(R){const M=(((255&Math.round(R[0]))<<16)+((255&Math.round(R[1]))<<8)+(255&Math.round(R[2]))).toString(16).toUpperCase();return"000000".substring(M.length)+M},N.hex.rgb=function(R){const W=R.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!W)return[0,0,0];let M=W[0];3===W[0].length&&(M=M.split("").map(Z=>Z+Z).join(""));const U=parseInt(M,16);return[U>>16&255,U>>8&255,255&U]},N.rgb.hcg=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.max(Math.max(W,M),U),Y=Math.min(Math.min(W,M),U),G=_-Y;let Z,S;return Z=G<1?Y/(1-G):0,S=G<=0?0:_===W?(M-U)/G%6:_===M?2+(U-W)/G:4+(W-M)/G,S/=6,S%=1,[360*S,100*G,100*Z]},N.hsl.hcg=function(R){const W=R[1]/100,M=R[2]/100,U=M<.5?2*W*M:2*W*(1-M);let _=0;return U<1&&(_=(M-.5*U)/(1-U)),[R[0],100*U,100*_]},N.hsv.hcg=function(R){const M=R[2]/100,U=R[1]/100*M;let _=0;return U<1&&(_=(M-U)/(1-U)),[R[0],100*U,100*_]},N.hcg.rgb=function(R){const M=R[1]/100,U=R[2]/100;if(0===M)return[255*U,255*U,255*U];const _=[0,0,0],Y=R[0]/360%1*6,G=Y%1,Z=1-G;let S=0;switch(Math.floor(Y)){case 0:_[0]=1,_[1]=G,_[2]=0;break;case 1:_[0]=Z,_[1]=1,_[2]=0;break;case 2:_[0]=0,_[1]=1,_[2]=G;break;case 3:_[0]=0,_[1]=Z,_[2]=1;break;case 4:_[0]=G,_[1]=0,_[2]=1;break;default:_[0]=1,_[1]=0,_[2]=Z}return S=(1-M)*U,[255*(M*_[0]+S),255*(M*_[1]+S),255*(M*_[2]+S)]},N.hcg.hsv=function(R){const W=R[1]/100,U=W+R[2]/100*(1-W);let _=0;return U>0&&(_=W/U),[R[0],100*_,100*U]},N.hcg.hsl=function(R){const W=R[1]/100,U=R[2]/100*(1-W)+.5*W;let _=0;return U>0&&U<.5?_=W/(2*U):U>=.5&&U<1&&(_=W/(2*(1-U))),[R[0],100*_,100*U]},N.hcg.hwb=function(R){const W=R[1]/100,U=W+R[2]/100*(1-W);return[R[0],100*(U-W),100*(1-U)]},N.hwb.hcg=function(R){const U=1-R[2]/100,_=U-R[1]/100;let Y=0;return _<1&&(Y=(U-_)/(1-_)),[R[0],100*_,100*Y]},N.apple.rgb=function(R){return[R[0]/65535*255,R[1]/65535*255,R[2]/65535*255]},N.rgb.apple=function(R){return[R[0]/255*65535,R[1]/255*65535,R[2]/255*65535]},N.gray.rgb=function(R){return[R[0]/100*255,R[0]/100*255,R[0]/100*255]},N.gray.hsl=function(R){return[0,0,R[0]]},N.gray.hsv=N.gray.hsl,N.gray.hwb=function(R){return[0,100,R[0]]},N.gray.cmyk=function(R){return[0,0,0,R[0]]},N.gray.lab=function(R){return[R[0],0,0]},N.gray.hex=function(R){const W=255&Math.round(R[0]/100*255),U=((W<<16)+(W<<8)+W).toString(16).toUpperCase();return"000000".substring(U.length)+U},N.rgb.gray=function(R){return[(R[0]+R[1]+R[2])/3/255*100]}},798:(Qe,Fe,w)=>{const o=w(2539),x=w(2535),N={};Object.keys(o).forEach(M=>{N[M]={},Object.defineProperty(N[M],"channels",{value:o[M].channels}),Object.defineProperty(N[M],"labels",{value:o[M].labels});const U=x(M);Object.keys(U).forEach(Y=>{const G=U[Y];N[M][Y]=function W(M){const U=function(..._){const Y=_[0];if(null==Y)return Y;Y.length>1&&(_=Y);const G=M(_);if("object"==typeof G)for(let Z=G.length,S=0;S1&&(_=Y),M(_))};return"conversion"in M&&(U.conversion=M.conversion),U}(G)})}),Qe.exports=N},2535:(Qe,Fe,w)=>{const o=w(2539);function ge(W,M){return function(U){return M(W(U))}}function R(W,M){const U=[M[W].parent,W];let _=o[M[W].parent][W],Y=M[W].parent;for(;M[Y].parent;)U.unshift(M[Y].parent),_=ge(o[M[Y].parent][Y],_),Y=M[Y].parent;return _.conversion=U,_}Qe.exports=function(W){const M=function N(W){const M=function x(){const W={},M=Object.keys(o);for(let U=M.length,_=0;_{"use strict";Qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},1135:(Qe,Fe,w)=>{"use strict";w.d(Fe,{X:()=>x});var o=w(7579);class x extends o.x{constructor(ge){super(),this._value=ge}get value(){return this.getValue()}_subscribe(ge){const R=super._subscribe(ge);return!R.closed&&ge.next(this._value),R}getValue(){const{hasError:ge,thrownError:R,_value:W}=this;if(ge)throw R;return this._throwIfClosed(),W}next(ge){super.next(this._value=ge)}}},9751:(Qe,Fe,w)=>{"use strict";w.d(Fe,{y:()=>U});var o=w(2961),x=w(727),N=w(8822),ge=w(9635),R=w(2416),W=w(576),M=w(2806);let U=(()=>{class Z{constructor(B){B&&(this._subscribe=B)}lift(B){const E=new Z;return E.source=this,E.operator=B,E}subscribe(B,E,j){const P=function G(Z){return Z&&Z instanceof o.Lv||function Y(Z){return Z&&(0,W.m)(Z.next)&&(0,W.m)(Z.error)&&(0,W.m)(Z.complete)}(Z)&&(0,x.Nn)(Z)}(B)?B:new o.Hp(B,E,j);return(0,M.x)(()=>{const{operator:K,source:pe}=this;P.add(K?K.call(P,pe):pe?this._subscribe(P):this._trySubscribe(P))}),P}_trySubscribe(B){try{return this._subscribe(B)}catch(E){B.error(E)}}forEach(B,E){return new(E=_(E))((j,P)=>{const K=new o.Hp({next:pe=>{try{B(pe)}catch(ke){P(ke),K.unsubscribe()}},error:P,complete:j});this.subscribe(K)})}_subscribe(B){var E;return null===(E=this.source)||void 0===E?void 0:E.subscribe(B)}[N.L](){return this}pipe(...B){return(0,ge.U)(B)(this)}toPromise(B){return new(B=_(B))((E,j)=>{let P;this.subscribe(K=>P=K,K=>j(K),()=>E(P))})}}return Z.create=S=>new Z(S),Z})();function _(Z){var S;return null!==(S=Z??R.v.Promise)&&void 0!==S?S:Promise}},7579:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>M});var o=w(9751),x=w(727);const ge=(0,w(3888).d)(_=>function(){_(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var R=w(8737),W=w(2806);let M=(()=>{class _ extends o.y{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(G){const Z=new U(this,this);return Z.operator=G,Z}_throwIfClosed(){if(this.closed)throw new ge}next(G){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const Z of this.currentObservers)Z.next(G)}})}error(G){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=G;const{observers:Z}=this;for(;Z.length;)Z.shift().error(G)}})}complete(){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:G}=this;for(;G.length;)G.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var G;return(null===(G=this.observers)||void 0===G?void 0:G.length)>0}_trySubscribe(G){return this._throwIfClosed(),super._trySubscribe(G)}_subscribe(G){return this._throwIfClosed(),this._checkFinalizedStatuses(G),this._innerSubscribe(G)}_innerSubscribe(G){const{hasError:Z,isStopped:S,observers:B}=this;return Z||S?x.Lc:(this.currentObservers=null,B.push(G),new x.w0(()=>{this.currentObservers=null,(0,R.P)(B,G)}))}_checkFinalizedStatuses(G){const{hasError:Z,thrownError:S,isStopped:B}=this;Z?G.error(S):B&&G.complete()}asObservable(){const G=new o.y;return G.source=this,G}}return _.create=(Y,G)=>new U(Y,G),_})();class U extends M{constructor(Y,G){super(),this.destination=Y,this.source=G}next(Y){var G,Z;null===(Z=null===(G=this.destination)||void 0===G?void 0:G.next)||void 0===Z||Z.call(G,Y)}error(Y){var G,Z;null===(Z=null===(G=this.destination)||void 0===G?void 0:G.error)||void 0===Z||Z.call(G,Y)}complete(){var Y,G;null===(G=null===(Y=this.destination)||void 0===Y?void 0:Y.complete)||void 0===G||G.call(Y)}_subscribe(Y){var G,Z;return null!==(Z=null===(G=this.source)||void 0===G?void 0:G.subscribe(Y))&&void 0!==Z?Z:x.Lc}}},2961:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Hp:()=>j,Lv:()=>Z});var o=w(576),x=w(727),N=w(2416),ge=w(7849);function R(){}const W=_("C",void 0,void 0);function _(Te,ie,Be){return{kind:Te,value:ie,error:Be}}var Y=w(3410),G=w(2806);class Z extends x.w0{constructor(ie){super(),this.isStopped=!1,ie?(this.destination=ie,(0,x.Nn)(ie)&&ie.add(this)):this.destination=ke}static create(ie,Be,re){return new j(ie,Be,re)}next(ie){this.isStopped?pe(function U(Te){return _("N",Te,void 0)}(ie),this):this._next(ie)}error(ie){this.isStopped?pe(function M(Te){return _("E",void 0,Te)}(ie),this):(this.isStopped=!0,this._error(ie))}complete(){this.isStopped?pe(W,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(ie){this.destination.next(ie)}_error(ie){try{this.destination.error(ie)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const S=Function.prototype.bind;function B(Te,ie){return S.call(Te,ie)}class E{constructor(ie){this.partialObserver=ie}next(ie){const{partialObserver:Be}=this;if(Be.next)try{Be.next(ie)}catch(re){P(re)}}error(ie){const{partialObserver:Be}=this;if(Be.error)try{Be.error(ie)}catch(re){P(re)}else P(ie)}complete(){const{partialObserver:ie}=this;if(ie.complete)try{ie.complete()}catch(Be){P(Be)}}}class j extends Z{constructor(ie,Be,re){let oe;if(super(),(0,o.m)(ie)||!ie)oe={next:ie??void 0,error:Be??void 0,complete:re??void 0};else{let be;this&&N.v.useDeprecatedNextContext?(be=Object.create(ie),be.unsubscribe=()=>this.unsubscribe(),oe={next:ie.next&&B(ie.next,be),error:ie.error&&B(ie.error,be),complete:ie.complete&&B(ie.complete,be)}):oe=ie}this.destination=new E(oe)}}function P(Te){N.v.useDeprecatedSynchronousErrorHandling?(0,G.O)(Te):(0,ge.h)(Te)}function pe(Te,ie){const{onStoppedNotification:Be}=N.v;Be&&Y.z.setTimeout(()=>Be(Te,ie))}const ke={closed:!0,next:R,error:function K(Te){throw Te},complete:R}},727:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Lc:()=>W,w0:()=>R,Nn:()=>M});var o=w(576);const N=(0,w(3888).d)(_=>function(G){_(this),this.message=G?`${G.length} errors occurred during unsubscription:\n${G.map((Z,S)=>`${S+1}) ${Z.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=G});var ge=w(8737);class R{constructor(Y){this.initialTeardown=Y,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let Y;if(!this.closed){this.closed=!0;const{_parentage:G}=this;if(G)if(this._parentage=null,Array.isArray(G))for(const B of G)B.remove(this);else G.remove(this);const{initialTeardown:Z}=this;if((0,o.m)(Z))try{Z()}catch(B){Y=B instanceof N?B.errors:[B]}const{_finalizers:S}=this;if(S){this._finalizers=null;for(const B of S)try{U(B)}catch(E){Y=Y??[],E instanceof N?Y=[...Y,...E.errors]:Y.push(E)}}if(Y)throw new N(Y)}}add(Y){var G;if(Y&&Y!==this)if(this.closed)U(Y);else{if(Y instanceof R){if(Y.closed||Y._hasParent(this))return;Y._addParent(this)}(this._finalizers=null!==(G=this._finalizers)&&void 0!==G?G:[]).push(Y)}}_hasParent(Y){const{_parentage:G}=this;return G===Y||Array.isArray(G)&&G.includes(Y)}_addParent(Y){const{_parentage:G}=this;this._parentage=Array.isArray(G)?(G.push(Y),G):G?[G,Y]:Y}_removeParent(Y){const{_parentage:G}=this;G===Y?this._parentage=null:Array.isArray(G)&&(0,ge.P)(G,Y)}remove(Y){const{_finalizers:G}=this;G&&(0,ge.P)(G,Y),Y instanceof R&&Y._removeParent(this)}}R.EMPTY=(()=>{const _=new R;return _.closed=!0,_})();const W=R.EMPTY;function M(_){return _ instanceof R||_&&"closed"in _&&(0,o.m)(_.remove)&&(0,o.m)(_.add)&&(0,o.m)(_.unsubscribe)}function U(_){(0,o.m)(_)?_():_.unsubscribe()}},2416:(Qe,Fe,w)=>{"use strict";w.d(Fe,{v:()=>o});const o={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1}},515:(Qe,Fe,w)=>{"use strict";w.d(Fe,{E:()=>x});const x=new(w(9751).y)(R=>R.complete())},2076:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>re});var o=w(8421),x=w(9672),N=w(4482),ge=w(5403);function R(oe,be=0){return(0,N.e)((Ne,Q)=>{Ne.subscribe((0,ge.x)(Q,T=>(0,x.f)(Q,oe,()=>Q.next(T),be),()=>(0,x.f)(Q,oe,()=>Q.complete(),be),T=>(0,x.f)(Q,oe,()=>Q.error(T),be)))})}function W(oe,be=0){return(0,N.e)((Ne,Q)=>{Q.add(oe.schedule(()=>Ne.subscribe(Q),be))})}var _=w(9751),G=w(2202),Z=w(576);function B(oe,be){if(!oe)throw new Error("Iterable cannot be null");return new _.y(Ne=>{(0,x.f)(Ne,be,()=>{const Q=oe[Symbol.asyncIterator]();(0,x.f)(Ne,be,()=>{Q.next().then(T=>{T.done?Ne.complete():Ne.next(T.value)})},0,!0)})})}var E=w(3670),j=w(8239),P=w(1144),K=w(6495),pe=w(2206),ke=w(4532),Te=w(3260);function re(oe,be){return be?function Be(oe,be){if(null!=oe){if((0,E.c)(oe))return function M(oe,be){return(0,o.Xf)(oe).pipe(W(be),R(be))}(oe,be);if((0,P.z)(oe))return function Y(oe,be){return new _.y(Ne=>{let Q=0;return be.schedule(function(){Q===oe.length?Ne.complete():(Ne.next(oe[Q++]),Ne.closed||this.schedule())})})}(oe,be);if((0,j.t)(oe))return function U(oe,be){return(0,o.Xf)(oe).pipe(W(be),R(be))}(oe,be);if((0,pe.D)(oe))return B(oe,be);if((0,K.T)(oe))return function S(oe,be){return new _.y(Ne=>{let Q;return(0,x.f)(Ne,be,()=>{Q=oe[G.h](),(0,x.f)(Ne,be,()=>{let T,k;try{({value:T,done:k}=Q.next())}catch(O){return void Ne.error(O)}k?Ne.complete():Ne.next(T)},0,!0)}),()=>(0,Z.m)(Q?.return)&&Q.return()})}(oe,be);if((0,Te.L)(oe))return function ie(oe,be){return B((0,Te.Q)(oe),be)}(oe,be)}throw(0,ke.z)(oe)}(oe,be):(0,o.Xf)(oe)}},8421:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Xf:()=>S});var o=w(655),x=w(1144),N=w(8239),ge=w(9751),R=w(3670),W=w(2206),M=w(4532),U=w(6495),_=w(3260),Y=w(576),G=w(7849),Z=w(8822);function S(Te){if(Te instanceof ge.y)return Te;if(null!=Te){if((0,R.c)(Te))return function B(Te){return new ge.y(ie=>{const Be=Te[Z.L]();if((0,Y.m)(Be.subscribe))return Be.subscribe(ie);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(Te);if((0,x.z)(Te))return function E(Te){return new ge.y(ie=>{for(let Be=0;Be{Te.then(Be=>{ie.closed||(ie.next(Be),ie.complete())},Be=>ie.error(Be)).then(null,G.h)})}(Te);if((0,W.D)(Te))return K(Te);if((0,U.T)(Te))return function P(Te){return new ge.y(ie=>{for(const Be of Te)if(ie.next(Be),ie.closed)return;ie.complete()})}(Te);if((0,_.L)(Te))return function pe(Te){return K((0,_.Q)(Te))}(Te)}throw(0,M.z)(Te)}function K(Te){return new ge.y(ie=>{(function ke(Te,ie){var Be,re,oe,be;return(0,o.mG)(this,void 0,void 0,function*(){try{for(Be=(0,o.KL)(Te);!(re=yield Be.next()).done;)if(ie.next(re.value),ie.closed)return}catch(Ne){oe={error:Ne}}finally{try{re&&!re.done&&(be=Be.return)&&(yield be.call(Be))}finally{if(oe)throw oe.error}}ie.complete()})})(Te,ie).catch(Be=>ie.error(Be))})}},9646:(Qe,Fe,w)=>{"use strict";w.d(Fe,{of:()=>N});var o=w(3269),x=w(2076);function N(...ge){const R=(0,o.yG)(ge);return(0,x.D)(ge,R)}},5403:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>x});var o=w(2961);function x(ge,R,W,M,U){return new N(ge,R,W,M,U)}class N extends o.Lv{constructor(R,W,M,U,_,Y){super(R),this.onFinalize=_,this.shouldUnsubscribe=Y,this._next=W?function(G){try{W(G)}catch(Z){R.error(Z)}}:super._next,this._error=U?function(G){try{U(G)}catch(Z){R.error(Z)}finally{this.unsubscribe()}}:super._error,this._complete=M?function(){try{M()}catch(G){R.error(G)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var R;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:W}=this;super.unsubscribe(),!W&&(null===(R=this.onFinalize)||void 0===R||R.call(this))}}}},4351:(Qe,Fe,w)=>{"use strict";w.d(Fe,{b:()=>N});var o=w(5577),x=w(576);function N(ge,R){return(0,x.m)(R)?(0,o.z)(ge,R,1):(0,o.z)(ge,1)}},1884:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>ge});var o=w(4671),x=w(4482),N=w(5403);function ge(W,M=o.y){return W=W??R,(0,x.e)((U,_)=>{let Y,G=!0;U.subscribe((0,N.x)(_,Z=>{const S=M(Z);(G||!W(Y,S))&&(G=!1,Y=S,_.next(Z))}))})}function R(W,M){return W===M}},9300:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>N});var o=w(4482),x=w(5403);function N(ge,R){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>ge.call(R,_,U++)&&M.next(_)))})}},8746:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>x});var o=w(4482);function x(N){return(0,o.e)((ge,R)=>{try{ge.subscribe(R)}finally{R.add(N)}})}},4004:(Qe,Fe,w)=>{"use strict";w.d(Fe,{U:()=>N});var o=w(4482),x=w(5403);function N(ge,R){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>{M.next(ge.call(R,_,U++))}))})}},8189:(Qe,Fe,w)=>{"use strict";w.d(Fe,{J:()=>N});var o=w(5577),x=w(4671);function N(ge=1/0){return(0,o.z)(x.y,ge)}},5577:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>U});var o=w(4004),x=w(8421),N=w(4482),ge=w(9672),R=w(5403),M=w(576);function U(_,Y,G=1/0){return(0,M.m)(Y)?U((Z,S)=>(0,o.U)((B,E)=>Y(Z,B,S,E))((0,x.Xf)(_(Z,S))),G):("number"==typeof Y&&(G=Y),(0,N.e)((Z,S)=>function W(_,Y,G,Z,S,B,E,j){const P=[];let K=0,pe=0,ke=!1;const Te=()=>{ke&&!P.length&&!K&&Y.complete()},ie=re=>K{B&&Y.next(re),K++;let oe=!1;(0,x.Xf)(G(re,pe++)).subscribe((0,R.x)(Y,be=>{S?.(be),B?ie(be):Y.next(be)},()=>{oe=!0},void 0,()=>{if(oe)try{for(K--;P.length&&KBe(be)):Be(be)}Te()}catch(be){Y.error(be)}}))};return _.subscribe((0,R.x)(Y,ie,()=>{ke=!0,Te()})),()=>{j?.()}}(Z,S,_,G)))}},3099:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>R});var o=w(8421),x=w(7579),N=w(2961),ge=w(4482);function R(M={}){const{connector:U=(()=>new x.x),resetOnError:_=!0,resetOnComplete:Y=!0,resetOnRefCountZero:G=!0}=M;return Z=>{let S,B,E,j=0,P=!1,K=!1;const pe=()=>{B?.unsubscribe(),B=void 0},ke=()=>{pe(),S=E=void 0,P=K=!1},Te=()=>{const ie=S;ke(),ie?.unsubscribe()};return(0,ge.e)((ie,Be)=>{j++,!K&&!P&&pe();const re=E=E??U();Be.add(()=>{j--,0===j&&!K&&!P&&(B=W(Te,G))}),re.subscribe(Be),!S&&j>0&&(S=new N.Hp({next:oe=>re.next(oe),error:oe=>{K=!0,pe(),B=W(ke,_,oe),re.error(oe)},complete:()=>{P=!0,pe(),B=W(ke,Y),re.complete()}}),(0,o.Xf)(ie).subscribe(S))})(Z)}}function W(M,U,..._){if(!0===U)return void M();if(!1===U)return;const Y=new N.Hp({next:()=>{Y.unsubscribe(),M()}});return U(..._).subscribe(Y)}},3900:(Qe,Fe,w)=>{"use strict";w.d(Fe,{w:()=>ge});var o=w(8421),x=w(4482),N=w(5403);function ge(R,W){return(0,x.e)((M,U)=>{let _=null,Y=0,G=!1;const Z=()=>G&&!_&&U.complete();M.subscribe((0,N.x)(U,S=>{_?.unsubscribe();let B=0;const E=Y++;(0,o.Xf)(R(S,E)).subscribe(_=(0,N.x)(U,j=>U.next(W?W(S,j,E,B++):j),()=>{_=null,Z()}))},()=>{G=!0,Z()}))})}},5698:(Qe,Fe,w)=>{"use strict";w.d(Fe,{q:()=>ge});var o=w(515),x=w(4482),N=w(5403);function ge(R){return R<=0?()=>o.E:(0,x.e)((W,M)=>{let U=0;W.subscribe((0,N.x)(M,_=>{++U<=R&&(M.next(_),R<=U&&M.complete())}))})}},2529:(Qe,Fe,w)=>{"use strict";w.d(Fe,{o:()=>N});var o=w(4482),x=w(5403);function N(ge,R=!1){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>{const Y=ge(_,U++);(Y||R)&&M.next(_),!Y&&M.complete()}))})}},8505:(Qe,Fe,w)=>{"use strict";w.d(Fe,{b:()=>R});var o=w(576),x=w(4482),N=w(5403),ge=w(4671);function R(W,M,U){const _=(0,o.m)(W)||M||U?{next:W,error:M,complete:U}:W;return _?(0,x.e)((Y,G)=>{var Z;null===(Z=_.subscribe)||void 0===Z||Z.call(_);let S=!0;Y.subscribe((0,N.x)(G,B=>{var E;null===(E=_.next)||void 0===E||E.call(_,B),G.next(B)},()=>{var B;S=!1,null===(B=_.complete)||void 0===B||B.call(_),G.complete()},B=>{var E;S=!1,null===(E=_.error)||void 0===E||E.call(_,B),G.error(B)},()=>{var B,E;S&&(null===(B=_.unsubscribe)||void 0===B||B.call(_)),null===(E=_.finalize)||void 0===E||E.call(_)}))}):ge.y}},1566:(Qe,Fe,w)=>{"use strict";w.d(Fe,{P:()=>Y,z:()=>_});var o=w(727);class x extends o.w0{constructor(Z,S){super()}schedule(Z,S=0){return this}}const N={setInterval(G,Z,...S){const{delegate:B}=N;return B?.setInterval?B.setInterval(G,Z,...S):setInterval(G,Z,...S)},clearInterval(G){const{delegate:Z}=N;return(Z?.clearInterval||clearInterval)(G)},delegate:void 0};var ge=w(8737);const W={now:()=>(W.delegate||Date).now(),delegate:void 0};class M{constructor(Z,S=M.now){this.schedulerActionCtor=Z,this.now=S}schedule(Z,S=0,B){return new this.schedulerActionCtor(this,Z).schedule(B,S)}}M.now=W.now;const _=new class U extends M{constructor(Z,S=M.now){super(Z,S),this.actions=[],this._active=!1}flush(Z){const{actions:S}=this;if(this._active)return void S.push(Z);let B;this._active=!0;do{if(B=Z.execute(Z.state,Z.delay))break}while(Z=S.shift());if(this._active=!1,B){for(;Z=S.shift();)Z.unsubscribe();throw B}}}(class R extends x{constructor(Z,S){super(Z,S),this.scheduler=Z,this.work=S,this.pending=!1}schedule(Z,S=0){var B;if(this.closed)return this;this.state=Z;const E=this.id,j=this.scheduler;return null!=E&&(this.id=this.recycleAsyncId(j,E,S)),this.pending=!0,this.delay=S,this.id=null!==(B=this.id)&&void 0!==B?B:this.requestAsyncId(j,this.id,S),this}requestAsyncId(Z,S,B=0){return N.setInterval(Z.flush.bind(Z,this),B)}recycleAsyncId(Z,S,B=0){if(null!=B&&this.delay===B&&!1===this.pending)return S;null!=S&&N.clearInterval(S)}execute(Z,S){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const B=this._execute(Z,S);if(B)return B;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(Z,S){let E,B=!1;try{this.work(Z)}catch(j){B=!0,E=j||new Error("Scheduled action threw falsy error")}if(B)return this.unsubscribe(),E}unsubscribe(){if(!this.closed){const{id:Z,scheduler:S}=this,{actions:B}=S;this.work=this.state=this.scheduler=null,this.pending=!1,(0,ge.P)(B,this),null!=Z&&(this.id=this.recycleAsyncId(S,Z,null)),this.delay=null,super.unsubscribe()}}}),Y=_},3410:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>o});const o={setTimeout(x,N,...ge){const{delegate:R}=o;return R?.setTimeout?R.setTimeout(x,N,...ge):setTimeout(x,N,...ge)},clearTimeout(x){const{delegate:N}=o;return(N?.clearTimeout||clearTimeout)(x)},delegate:void 0}},2202:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>x});const x=function o(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}()},8822:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>o});const o="function"==typeof Symbol&&Symbol.observable||"@@observable"},3269:(Qe,Fe,w)=>{"use strict";w.d(Fe,{_6:()=>W,jO:()=>ge,yG:()=>R});var o=w(576),x=w(3532);function N(M){return M[M.length-1]}function ge(M){return(0,o.m)(N(M))?M.pop():void 0}function R(M){return(0,x.K)(N(M))?M.pop():void 0}function W(M,U){return"number"==typeof N(M)?M.pop():U}},4742:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>R});const{isArray:o}=Array,{getPrototypeOf:x,prototype:N,keys:ge}=Object;function R(M){if(1===M.length){const U=M[0];if(o(U))return{args:U,keys:null};if(function W(M){return M&&"object"==typeof M&&x(M)===N}(U)){const _=ge(U);return{args:_.map(Y=>U[Y]),keys:_}}}return{args:M,keys:null}}},8737:(Qe,Fe,w)=>{"use strict";function o(x,N){if(x){const ge=x.indexOf(N);0<=ge&&x.splice(ge,1)}}w.d(Fe,{P:()=>o})},3888:(Qe,Fe,w)=>{"use strict";function o(x){const ge=x(R=>{Error.call(R),R.stack=(new Error).stack});return ge.prototype=Object.create(Error.prototype),ge.prototype.constructor=ge,ge}w.d(Fe,{d:()=>o})},1810:(Qe,Fe,w)=>{"use strict";function o(x,N){return x.reduce((ge,R,W)=>(ge[R]=N[W],ge),{})}w.d(Fe,{n:()=>o})},2806:(Qe,Fe,w)=>{"use strict";w.d(Fe,{O:()=>ge,x:()=>N});var o=w(2416);let x=null;function N(R){if(o.v.useDeprecatedSynchronousErrorHandling){const W=!x;if(W&&(x={errorThrown:!1,error:null}),R(),W){const{errorThrown:M,error:U}=x;if(x=null,M)throw U}}else R()}function ge(R){o.v.useDeprecatedSynchronousErrorHandling&&x&&(x.errorThrown=!0,x.error=R)}},9672:(Qe,Fe,w)=>{"use strict";function o(x,N,ge,R=0,W=!1){const M=N.schedule(function(){ge(),W?x.add(this.schedule(null,R)):this.unsubscribe()},R);if(x.add(M),!W)return M}w.d(Fe,{f:()=>o})},4671:(Qe,Fe,w)=>{"use strict";function o(x){return x}w.d(Fe,{y:()=>o})},1144:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>o});const o=x=>x&&"number"==typeof x.length&&"function"!=typeof x},2206:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>x});var o=w(576);function x(N){return Symbol.asyncIterator&&(0,o.m)(N?.[Symbol.asyncIterator])}},576:(Qe,Fe,w)=>{"use strict";function o(x){return"function"==typeof x}w.d(Fe,{m:()=>o})},3670:(Qe,Fe,w)=>{"use strict";w.d(Fe,{c:()=>N});var o=w(8822),x=w(576);function N(ge){return(0,x.m)(ge[o.L])}},6495:(Qe,Fe,w)=>{"use strict";w.d(Fe,{T:()=>N});var o=w(2202),x=w(576);function N(ge){return(0,x.m)(ge?.[o.h])}},8239:(Qe,Fe,w)=>{"use strict";w.d(Fe,{t:()=>x});var o=w(576);function x(N){return(0,o.m)(N?.then)}},3260:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>ge,Q:()=>N});var o=w(655),x=w(576);function N(R){return(0,o.FC)(this,arguments,function*(){const M=R.getReader();try{for(;;){const{value:U,done:_}=yield(0,o.qq)(M.read());if(_)return yield(0,o.qq)(void 0);yield yield(0,o.qq)(U)}}finally{M.releaseLock()}})}function ge(R){return(0,x.m)(R?.getReader)}},3532:(Qe,Fe,w)=>{"use strict";w.d(Fe,{K:()=>x});var o=w(576);function x(N){return N&&(0,o.m)(N.schedule)}},4482:(Qe,Fe,w)=>{"use strict";w.d(Fe,{A:()=>x,e:()=>N});var o=w(576);function x(ge){return(0,o.m)(ge?.lift)}function N(ge){return R=>{if(x(R))return R.lift(function(W){try{return ge(W,this)}catch(M){this.error(M)}});throw new TypeError("Unable to lift unknown Observable type")}}},3268:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Z:()=>ge});var o=w(4004);const{isArray:x}=Array;function ge(R){return(0,o.U)(W=>function N(R,W){return x(W)?R(...W):R(W)}(R,W))}},9635:(Qe,Fe,w)=>{"use strict";w.d(Fe,{U:()=>N,z:()=>x});var o=w(4671);function x(...ge){return N(ge)}function N(ge){return 0===ge.length?o.y:1===ge.length?ge[0]:function(W){return ge.reduce((M,U)=>U(M),W)}}},7849:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>N});var o=w(2416),x=w(3410);function N(ge){x.z.setTimeout(()=>{const{onUnhandledError:R}=o.v;if(!R)throw ge;R(ge)})}},4532:(Qe,Fe,w)=>{"use strict";function o(x){return new TypeError(`You provided ${null!==x&&"object"==typeof x?"an invalid object":`'${x}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}w.d(Fe,{z:()=>o})},6931:(Qe,Fe,w)=>{"use strict";var o=w(1708),x=Array.prototype.concat,N=Array.prototype.slice,ge=Qe.exports=function(W){for(var M=[],U=0,_=W.length;U<_;U++){var Y=W[U];o(Y)?M=x.call(M,N.call(Y)):M.push(Y)}return M};ge.wrap=function(R){return function(){return R(ge(arguments))}}},1708:Qe=>{Qe.exports=function(w){return!(!w||"string"==typeof w)&&(w instanceof Array||Array.isArray(w)||w.length>=0&&(w.splice instanceof Function||Object.getOwnPropertyDescriptor(w,w.length-1)&&"String"!==w.constructor.name))}},863:(Qe,Fe,w)=>{var o={"./ion-accordion_2.entry.js":[9654,8592,9654],"./ion-action-sheet.entry.js":[3648,8592,3648],"./ion-alert.entry.js":[1118,8592,1118],"./ion-app_8.entry.js":[53,8592,3236],"./ion-avatar_3.entry.js":[4753,4753],"./ion-back-button.entry.js":[2073,8592,2073],"./ion-backdrop.entry.js":[8939,8939],"./ion-breadcrumb_2.entry.js":[7544,8592,7544],"./ion-button_2.entry.js":[5652,5652],"./ion-card_5.entry.js":[388,388],"./ion-checkbox.entry.js":[9922,9922],"./ion-chip.entry.js":[657,657],"./ion-col_3.entry.js":[9824,9824],"./ion-datetime-button.entry.js":[9230,1435,9230],"./ion-datetime_3.entry.js":[4959,1435,8592,4959],"./ion-fab_3.entry.js":[5836,8592,5836],"./ion-img.entry.js":[1033,1033],"./ion-infinite-scroll_2.entry.js":[8034,8592,5817],"./ion-input.entry.js":[1217,1217],"./ion-item-option_3.entry.js":[2933,8592,4651],"./ion-item_8.entry.js":[4711,8592,4711],"./ion-loading.entry.js":[9434,8592,9434],"./ion-menu_3.entry.js":[8136,8592,8136],"./ion-modal.entry.js":[2349,8592,2349],"./ion-nav_2.entry.js":[5349,8592,5349],"./ion-picker-column-internal.entry.js":[7602,8592,7602],"./ion-picker-internal.entry.js":[9016,9016],"./ion-popover.entry.js":[3804,8592,3804],"./ion-progress-bar.entry.js":[4174,4174],"./ion-radio_2.entry.js":[4432,4432],"./ion-range.entry.js":[1709,8592,1709],"./ion-refresher_2.entry.js":[3326,8592,2175],"./ion-reorder_2.entry.js":[3583,8592,1186],"./ion-ripple-effect.entry.js":[9958,9958],"./ion-route_4.entry.js":[4330,4330],"./ion-searchbar.entry.js":[8628,8592,8628],"./ion-segment_2.entry.js":[9325,8592,9325],"./ion-select_3.entry.js":[2773,2773],"./ion-slide_2.entry.js":[1650,1650],"./ion-spinner.entry.js":[4908,8592,4908],"./ion-split-pane.entry.js":[9536,9536],"./ion-tab-bar_2.entry.js":[438,8592,438],"./ion-tab_2.entry.js":[1536,8592,1536],"./ion-text.entry.js":[4376,4376],"./ion-textarea.entry.js":[6560,6560],"./ion-toast.entry.js":[6120,8592,6120],"./ion-toggle.entry.js":[5168,8592,5168],"./ion-virtual-scroll.entry.js":[2289,2289]};function x(N){if(!w.o(o,N))return Promise.resolve().then(()=>{var W=new Error("Cannot find module '"+N+"'");throw W.code="MODULE_NOT_FOUND",W});var ge=o[N],R=ge[0];return Promise.all(ge.slice(1).map(w.e)).then(()=>w(R))}x.keys=()=>Object.keys(o),x.id=863,Qe.exports=x},655:(Qe,Fe,w)=>{"use strict";function R(Q,T,k,O){var Ae,te=arguments.length,ce=te<3?T:null===O?O=Object.getOwnPropertyDescriptor(T,k):O;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)ce=Reflect.decorate(Q,T,k,O);else for(var De=Q.length-1;De>=0;De--)(Ae=Q[De])&&(ce=(te<3?Ae(ce):te>3?Ae(T,k,ce):Ae(T,k))||ce);return te>3&&ce&&Object.defineProperty(T,k,ce),ce}function U(Q,T,k,O){return new(k||(k=Promise))(function(ce,Ae){function De(ne){try{de(O.next(ne))}catch(Ee){Ae(Ee)}}function ue(ne){try{de(O.throw(ne))}catch(Ee){Ae(Ee)}}function de(ne){ne.done?ce(ne.value):function te(ce){return ce instanceof k?ce:new k(function(Ae){Ae(ce)})}(ne.value).then(De,ue)}de((O=O.apply(Q,T||[])).next())})}function P(Q){return this instanceof P?(this.v=Q,this):new P(Q)}function K(Q,T,k){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var te,O=k.apply(Q,T||[]),ce=[];return te={},Ae("next"),Ae("throw"),Ae("return"),te[Symbol.asyncIterator]=function(){return this},te;function Ae(Ce){O[Ce]&&(te[Ce]=function(ze){return new Promise(function(dt,et){ce.push([Ce,ze,dt,et])>1||De(Ce,ze)})})}function De(Ce,ze){try{!function ue(Ce){Ce.value instanceof P?Promise.resolve(Ce.value.v).then(de,ne):Ee(ce[0][2],Ce)}(O[Ce](ze))}catch(dt){Ee(ce[0][3],dt)}}function de(Ce){De("next",Ce)}function ne(Ce){De("throw",Ce)}function Ee(Ce,ze){Ce(ze),ce.shift(),ce.length&&De(ce[0][0],ce[0][1])}}function ke(Q){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var k,T=Q[Symbol.asyncIterator];return T?T.call(Q):(Q=function Z(Q){var T="function"==typeof Symbol&&Symbol.iterator,k=T&&Q[T],O=0;if(k)return k.call(Q);if(Q&&"number"==typeof Q.length)return{next:function(){return Q&&O>=Q.length&&(Q=void 0),{value:Q&&Q[O++],done:!Q}}};throw new TypeError(T?"Object is not iterable.":"Symbol.iterator is not defined.")}(Q),k={},O("next"),O("throw"),O("return"),k[Symbol.asyncIterator]=function(){return this},k);function O(ce){k[ce]=Q[ce]&&function(Ae){return new Promise(function(De,ue){!function te(ce,Ae,De,ue){Promise.resolve(ue).then(function(de){ce({value:de,done:De})},Ae)}(De,ue,(Ae=Q[ce](Ae)).done,Ae.value)})}}}w.d(Fe,{FC:()=>K,KL:()=>ke,gn:()=>R,mG:()=>U,qq:()=>P})},6895:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Do:()=>ke,EM:()=>zr,HT:()=>R,JF:()=>hr,JJ:()=>Gn,K0:()=>M,Mx:()=>gr,O5:()=>q,OU:()=>Pr,Ov:()=>mr,PC:()=>st,S$:()=>P,V_:()=>Y,Ye:()=>Te,b0:()=>pe,bD:()=>yo,ez:()=>vo,mk:()=>$t,q:()=>N,sg:()=>Cn,tP:()=>Mt,uU:()=>ar,w_:()=>W});var o=w(8274);let x=null;function N(){return x}function R(v){x||(x=v)}class W{}const M=new o.OlP("DocumentToken");let U=(()=>{class v{historyGo(D){throw new Error("Not implemented")}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275prov=o.Yz7({token:v,factory:function(){return function _(){return(0,o.LFG)(G)}()},providedIn:"platform"}),v})();const Y=new o.OlP("Location Initialized");let G=(()=>{class v extends U{constructor(D){super(),this._doc=D,this._init()}_init(){this.location=window.location,this._history=window.history}getBaseHrefFromDOM(){return N().getBaseHref(this._doc)}onPopState(D){const H=N().getGlobalEventTarget(this._doc,"window");return H.addEventListener("popstate",D,!1),()=>H.removeEventListener("popstate",D)}onHashChange(D){const H=N().getGlobalEventTarget(this._doc,"window");return H.addEventListener("hashchange",D,!1),()=>H.removeEventListener("hashchange",D)}get href(){return this.location.href}get protocol(){return this.location.protocol}get hostname(){return this.location.hostname}get port(){return this.location.port}get pathname(){return this.location.pathname}get search(){return this.location.search}get hash(){return this.location.hash}set pathname(D){this.location.pathname=D}pushState(D,H,ae){Z()?this._history.pushState(D,H,ae):this.location.hash=ae}replaceState(D,H,ae){Z()?this._history.replaceState(D,H,ae):this.location.hash=ae}forward(){this._history.forward()}back(){this._history.back()}historyGo(D=0){this._history.go(D)}getState(){return this._history.state}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(M))},v.\u0275prov=o.Yz7({token:v,factory:function(){return function S(){return new G((0,o.LFG)(M))}()},providedIn:"platform"}),v})();function Z(){return!!window.history.pushState}function B(v,A){if(0==v.length)return A;if(0==A.length)return v;let D=0;return v.endsWith("/")&&D++,A.startsWith("/")&&D++,2==D?v+A.substring(1):1==D?v+A:v+"/"+A}function E(v){const A=v.match(/#|\?|$/),D=A&&A.index||v.length;return v.slice(0,D-("/"===v[D-1]?1:0))+v.slice(D)}function j(v){return v&&"?"!==v[0]?"?"+v:v}let P=(()=>{class v{historyGo(D){throw new Error("Not implemented")}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275prov=o.Yz7({token:v,factory:function(){return(0,o.f3M)(pe)},providedIn:"root"}),v})();const K=new o.OlP("appBaseHref");let pe=(()=>{class v extends P{constructor(D,H){super(),this._platformLocation=D,this._removeListenerFns=[],this._baseHref=H??this._platformLocation.getBaseHrefFromDOM()??(0,o.f3M)(M).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(D){this._removeListenerFns.push(this._platformLocation.onPopState(D),this._platformLocation.onHashChange(D))}getBaseHref(){return this._baseHref}prepareExternalUrl(D){return B(this._baseHref,D)}path(D=!1){const H=this._platformLocation.pathname+j(this._platformLocation.search),ae=this._platformLocation.hash;return ae&&D?`${H}${ae}`:H}pushState(D,H,ae,$e){const Xe=this.prepareExternalUrl(ae+j($e));this._platformLocation.pushState(D,H,Xe)}replaceState(D,H,ae,$e){const Xe=this.prepareExternalUrl(ae+j($e));this._platformLocation.replaceState(D,H,Xe)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(D=0){this._platformLocation.historyGo?.(D)}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(U),o.LFG(K,8))},v.\u0275prov=o.Yz7({token:v,factory:v.\u0275fac,providedIn:"root"}),v})(),ke=(()=>{class v extends P{constructor(D,H){super(),this._platformLocation=D,this._baseHref="",this._removeListenerFns=[],null!=H&&(this._baseHref=H)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(D){this._removeListenerFns.push(this._platformLocation.onPopState(D),this._platformLocation.onHashChange(D))}getBaseHref(){return this._baseHref}path(D=!1){let H=this._platformLocation.hash;return null==H&&(H="#"),H.length>0?H.substring(1):H}prepareExternalUrl(D){const H=B(this._baseHref,D);return H.length>0?"#"+H:H}pushState(D,H,ae,$e){let Xe=this.prepareExternalUrl(ae+j($e));0==Xe.length&&(Xe=this._platformLocation.pathname),this._platformLocation.pushState(D,H,Xe)}replaceState(D,H,ae,$e){let Xe=this.prepareExternalUrl(ae+j($e));0==Xe.length&&(Xe=this._platformLocation.pathname),this._platformLocation.replaceState(D,H,Xe)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(D=0){this._platformLocation.historyGo?.(D)}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(U),o.LFG(K,8))},v.\u0275prov=o.Yz7({token:v,factory:v.\u0275fac}),v})(),Te=(()=>{class v{constructor(D){this._subject=new o.vpe,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=D;const H=this._locationStrategy.getBaseHref();this._baseHref=E(re(H)),this._locationStrategy.onPopState(ae=>{this._subject.emit({url:this.path(!0),pop:!0,state:ae.state,type:ae.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(D=!1){return this.normalize(this._locationStrategy.path(D))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(D,H=""){return this.path()==this.normalize(D+j(H))}normalize(D){return v.stripTrailingSlash(function Be(v,A){return v&&A.startsWith(v)?A.substring(v.length):A}(this._baseHref,re(D)))}prepareExternalUrl(D){return D&&"/"!==D[0]&&(D="/"+D),this._locationStrategy.prepareExternalUrl(D)}go(D,H="",ae=null){this._locationStrategy.pushState(ae,"",D,H),this._notifyUrlChangeListeners(this.prepareExternalUrl(D+j(H)),ae)}replaceState(D,H="",ae=null){this._locationStrategy.replaceState(ae,"",D,H),this._notifyUrlChangeListeners(this.prepareExternalUrl(D+j(H)),ae)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(D=0){this._locationStrategy.historyGo?.(D)}onUrlChange(D){return this._urlChangeListeners.push(D),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(H=>{this._notifyUrlChangeListeners(H.url,H.state)})),()=>{const H=this._urlChangeListeners.indexOf(D);this._urlChangeListeners.splice(H,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(D="",H){this._urlChangeListeners.forEach(ae=>ae(D,H))}subscribe(D,H,ae){return this._subject.subscribe({next:D,error:H,complete:ae})}}return v.normalizeQueryParams=j,v.joinWithSlash=B,v.stripTrailingSlash=E,v.\u0275fac=function(D){return new(D||v)(o.LFG(P))},v.\u0275prov=o.Yz7({token:v,factory:function(){return function ie(){return new Te((0,o.LFG)(P))}()},providedIn:"root"}),v})();function re(v){return v.replace(/\/index.html$/,"")}var be=(()=>((be=be||{})[be.Decimal=0]="Decimal",be[be.Percent=1]="Percent",be[be.Currency=2]="Currency",be[be.Scientific=3]="Scientific",be))(),Q=(()=>((Q=Q||{})[Q.Format=0]="Format",Q[Q.Standalone=1]="Standalone",Q))(),T=(()=>((T=T||{})[T.Narrow=0]="Narrow",T[T.Abbreviated=1]="Abbreviated",T[T.Wide=2]="Wide",T[T.Short=3]="Short",T))(),k=(()=>((k=k||{})[k.Short=0]="Short",k[k.Medium=1]="Medium",k[k.Long=2]="Long",k[k.Full=3]="Full",k))(),O=(()=>((O=O||{})[O.Decimal=0]="Decimal",O[O.Group=1]="Group",O[O.List=2]="List",O[O.PercentSign=3]="PercentSign",O[O.PlusSign=4]="PlusSign",O[O.MinusSign=5]="MinusSign",O[O.Exponential=6]="Exponential",O[O.SuperscriptingExponent=7]="SuperscriptingExponent",O[O.PerMille=8]="PerMille",O[O.Infinity=9]="Infinity",O[O.NaN=10]="NaN",O[O.TimeSeparator=11]="TimeSeparator",O[O.CurrencyDecimal=12]="CurrencyDecimal",O[O.CurrencyGroup=13]="CurrencyGroup",O))();function Ce(v,A){return it((0,o.cg1)(v)[o.wAp.DateFormat],A)}function ze(v,A){return it((0,o.cg1)(v)[o.wAp.TimeFormat],A)}function dt(v,A){return it((0,o.cg1)(v)[o.wAp.DateTimeFormat],A)}function et(v,A){const D=(0,o.cg1)(v),H=D[o.wAp.NumberSymbols][A];if(typeof H>"u"){if(A===O.CurrencyDecimal)return D[o.wAp.NumberSymbols][O.Decimal];if(A===O.CurrencyGroup)return D[o.wAp.NumberSymbols][O.Group]}return H}function Kt(v){if(!v[o.wAp.ExtraData])throw new Error(`Missing extra locale data for the locale "${v[o.wAp.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function it(v,A){for(let D=A;D>-1;D--)if(typeof v[D]<"u")return v[D];throw new Error("Locale data API: locale data undefined")}function Xt(v){const[A,D]=v.split(":");return{hours:+A,minutes:+D}}const Vn=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,en={},gt=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;var Yt=(()=>((Yt=Yt||{})[Yt.Short=0]="Short",Yt[Yt.ShortGMT=1]="ShortGMT",Yt[Yt.Long=2]="Long",Yt[Yt.Extended=3]="Extended",Yt))(),ht=(()=>((ht=ht||{})[ht.FullYear=0]="FullYear",ht[ht.Month=1]="Month",ht[ht.Date=2]="Date",ht[ht.Hours=3]="Hours",ht[ht.Minutes=4]="Minutes",ht[ht.Seconds=5]="Seconds",ht[ht.FractionalSeconds=6]="FractionalSeconds",ht[ht.Day=7]="Day",ht))(),nt=(()=>((nt=nt||{})[nt.DayPeriods=0]="DayPeriods",nt[nt.Days=1]="Days",nt[nt.Months=2]="Months",nt[nt.Eras=3]="Eras",nt))();function Et(v,A,D,H){let ae=function tn(v){if(mn(v))return v;if("number"==typeof v&&!isNaN(v))return new Date(v);if("string"==typeof v){if(v=v.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(v)){const[ae,$e=1,Xe=1]=v.split("-").map(lt=>+lt);return ut(ae,$e-1,Xe)}const D=parseFloat(v);if(!isNaN(v-D))return new Date(D);let H;if(H=v.match(Vn))return function Ln(v){const A=new Date(0);let D=0,H=0;const ae=v[8]?A.setUTCFullYear:A.setFullYear,$e=v[8]?A.setUTCHours:A.setHours;v[9]&&(D=Number(v[9]+v[10]),H=Number(v[9]+v[11])),ae.call(A,Number(v[1]),Number(v[2])-1,Number(v[3]));const Xe=Number(v[4]||0)-D,lt=Number(v[5]||0)-H,qt=Number(v[6]||0),Tt=Math.floor(1e3*parseFloat("0."+(v[7]||0)));return $e.call(A,Xe,lt,qt,Tt),A}(H)}const A=new Date(v);if(!mn(A))throw new Error(`Unable to convert "${v}" into a date`);return A}(v);A=Ct(D,A)||A;let lt,Xe=[];for(;A;){if(lt=gt.exec(A),!lt){Xe.push(A);break}{Xe=Xe.concat(lt.slice(1));const un=Xe.pop();if(!un)break;A=un}}let qt=ae.getTimezoneOffset();H&&(qt=vt(H,qt),ae=function _t(v,A,D){const H=D?-1:1,ae=v.getTimezoneOffset();return function Ht(v,A){return(v=new Date(v.getTime())).setMinutes(v.getMinutes()+A),v}(v,H*(vt(A,ae)-ae))}(ae,H,!0));let Tt="";return Xe.forEach(un=>{const Jt=function pt(v){if(Ye[v])return Ye[v];let A;switch(v){case"G":case"GG":case"GGG":A=zt(nt.Eras,T.Abbreviated);break;case"GGGG":A=zt(nt.Eras,T.Wide);break;case"GGGGG":A=zt(nt.Eras,T.Narrow);break;case"y":A=Nt(ht.FullYear,1,0,!1,!0);break;case"yy":A=Nt(ht.FullYear,2,0,!0,!0);break;case"yyy":A=Nt(ht.FullYear,3,0,!1,!0);break;case"yyyy":A=Nt(ht.FullYear,4,0,!1,!0);break;case"Y":A=He(1);break;case"YY":A=He(2,!0);break;case"YYY":A=He(3);break;case"YYYY":A=He(4);break;case"M":case"L":A=Nt(ht.Month,1,1);break;case"MM":case"LL":A=Nt(ht.Month,2,1);break;case"MMM":A=zt(nt.Months,T.Abbreviated);break;case"MMMM":A=zt(nt.Months,T.Wide);break;case"MMMMM":A=zt(nt.Months,T.Narrow);break;case"LLL":A=zt(nt.Months,T.Abbreviated,Q.Standalone);break;case"LLLL":A=zt(nt.Months,T.Wide,Q.Standalone);break;case"LLLLL":A=zt(nt.Months,T.Narrow,Q.Standalone);break;case"w":A=ye(1);break;case"ww":A=ye(2);break;case"W":A=ye(1,!0);break;case"d":A=Nt(ht.Date,1);break;case"dd":A=Nt(ht.Date,2);break;case"c":case"cc":A=Nt(ht.Day,1);break;case"ccc":A=zt(nt.Days,T.Abbreviated,Q.Standalone);break;case"cccc":A=zt(nt.Days,T.Wide,Q.Standalone);break;case"ccccc":A=zt(nt.Days,T.Narrow,Q.Standalone);break;case"cccccc":A=zt(nt.Days,T.Short,Q.Standalone);break;case"E":case"EE":case"EEE":A=zt(nt.Days,T.Abbreviated);break;case"EEEE":A=zt(nt.Days,T.Wide);break;case"EEEEE":A=zt(nt.Days,T.Narrow);break;case"EEEEEE":A=zt(nt.Days,T.Short);break;case"a":case"aa":case"aaa":A=zt(nt.DayPeriods,T.Abbreviated);break;case"aaaa":A=zt(nt.DayPeriods,T.Wide);break;case"aaaaa":A=zt(nt.DayPeriods,T.Narrow);break;case"b":case"bb":case"bbb":A=zt(nt.DayPeriods,T.Abbreviated,Q.Standalone,!0);break;case"bbbb":A=zt(nt.DayPeriods,T.Wide,Q.Standalone,!0);break;case"bbbbb":A=zt(nt.DayPeriods,T.Narrow,Q.Standalone,!0);break;case"B":case"BB":case"BBB":A=zt(nt.DayPeriods,T.Abbreviated,Q.Format,!0);break;case"BBBB":A=zt(nt.DayPeriods,T.Wide,Q.Format,!0);break;case"BBBBB":A=zt(nt.DayPeriods,T.Narrow,Q.Format,!0);break;case"h":A=Nt(ht.Hours,1,-12);break;case"hh":A=Nt(ht.Hours,2,-12);break;case"H":A=Nt(ht.Hours,1);break;case"HH":A=Nt(ht.Hours,2);break;case"m":A=Nt(ht.Minutes,1);break;case"mm":A=Nt(ht.Minutes,2);break;case"s":A=Nt(ht.Seconds,1);break;case"ss":A=Nt(ht.Seconds,2);break;case"S":A=Nt(ht.FractionalSeconds,1);break;case"SS":A=Nt(ht.FractionalSeconds,2);break;case"SSS":A=Nt(ht.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":A=jn(Yt.Short);break;case"ZZZZZ":A=jn(Yt.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":A=jn(Yt.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":A=jn(Yt.Long);break;default:return null}return Ye[v]=A,A}(un);Tt+=Jt?Jt(ae,D,qt):"''"===un?"'":un.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),Tt}function ut(v,A,D){const H=new Date(0);return H.setFullYear(v,A,D),H.setHours(0,0,0),H}function Ct(v,A){const D=function ce(v){return(0,o.cg1)(v)[o.wAp.LocaleId]}(v);if(en[D]=en[D]||{},en[D][A])return en[D][A];let H="";switch(A){case"shortDate":H=Ce(v,k.Short);break;case"mediumDate":H=Ce(v,k.Medium);break;case"longDate":H=Ce(v,k.Long);break;case"fullDate":H=Ce(v,k.Full);break;case"shortTime":H=ze(v,k.Short);break;case"mediumTime":H=ze(v,k.Medium);break;case"longTime":H=ze(v,k.Long);break;case"fullTime":H=ze(v,k.Full);break;case"short":const ae=Ct(v,"shortTime"),$e=Ct(v,"shortDate");H=qe(dt(v,k.Short),[ae,$e]);break;case"medium":const Xe=Ct(v,"mediumTime"),lt=Ct(v,"mediumDate");H=qe(dt(v,k.Medium),[Xe,lt]);break;case"long":const qt=Ct(v,"longTime"),Tt=Ct(v,"longDate");H=qe(dt(v,k.Long),[qt,Tt]);break;case"full":const un=Ct(v,"fullTime"),Jt=Ct(v,"fullDate");H=qe(dt(v,k.Full),[un,Jt])}return H&&(en[D][A]=H),H}function qe(v,A){return A&&(v=v.replace(/\{([^}]+)}/g,function(D,H){return null!=A&&H in A?A[H]:D})),v}function on(v,A,D="-",H,ae){let $e="";(v<0||ae&&v<=0)&&(ae?v=1-v:(v=-v,$e=D));let Xe=String(v);for(;Xe.length0||lt>-D)&&(lt+=D),v===ht.Hours)0===lt&&-12===D&&(lt=12);else if(v===ht.FractionalSeconds)return function gn(v,A){return on(v,3).substring(0,A)}(lt,A);const qt=et(Xe,O.MinusSign);return on(lt,A,qt,H,ae)}}function zt(v,A,D=Q.Format,H=!1){return function(ae,$e){return function Er(v,A,D,H,ae,$e){switch(D){case nt.Months:return function ue(v,A,D){const H=(0,o.cg1)(v),$e=it([H[o.wAp.MonthsFormat],H[o.wAp.MonthsStandalone]],A);return it($e,D)}(A,ae,H)[v.getMonth()];case nt.Days:return function De(v,A,D){const H=(0,o.cg1)(v),$e=it([H[o.wAp.DaysFormat],H[o.wAp.DaysStandalone]],A);return it($e,D)}(A,ae,H)[v.getDay()];case nt.DayPeriods:const Xe=v.getHours(),lt=v.getMinutes();if($e){const Tt=function pn(v){const A=(0,o.cg1)(v);return Kt(A),(A[o.wAp.ExtraData][2]||[]).map(H=>"string"==typeof H?Xt(H):[Xt(H[0]),Xt(H[1])])}(A),un=function Pt(v,A,D){const H=(0,o.cg1)(v);Kt(H);const $e=it([H[o.wAp.ExtraData][0],H[o.wAp.ExtraData][1]],A)||[];return it($e,D)||[]}(A,ae,H),Jt=Tt.findIndex(Yn=>{if(Array.isArray(Yn)){const[yn,Wn]=Yn,Eo=Xe>=yn.hours&<>=yn.minutes,pr=Xe0?Math.floor(ae/60):Math.ceil(ae/60);switch(v){case Yt.Short:return(ae>=0?"+":"")+on(Xe,2,$e)+on(Math.abs(ae%60),2,$e);case Yt.ShortGMT:return"GMT"+(ae>=0?"+":"")+on(Xe,1,$e);case Yt.Long:return"GMT"+(ae>=0?"+":"")+on(Xe,2,$e)+":"+on(Math.abs(ae%60),2,$e);case Yt.Extended:return 0===H?"Z":(ae>=0?"+":"")+on(Xe,2,$e)+":"+on(Math.abs(ae%60),2,$e);default:throw new Error(`Unknown zone width "${v}"`)}}}function se(v){return ut(v.getFullYear(),v.getMonth(),v.getDate()+(4-v.getDay()))}function ye(v,A=!1){return function(D,H){let ae;if(A){const $e=new Date(D.getFullYear(),D.getMonth(),1).getDay()-1,Xe=D.getDate();ae=1+Math.floor((Xe+$e)/7)}else{const $e=se(D),Xe=function xe(v){const A=ut(v,0,1).getDay();return ut(v,0,1+(A<=4?4:11)-A)}($e.getFullYear()),lt=$e.getTime()-Xe.getTime();ae=1+Math.round(lt/6048e5)}return on(ae,v,et(H,O.MinusSign))}}function He(v,A=!1){return function(D,H){return on(se(D).getFullYear(),v,et(H,O.MinusSign),A)}}const Ye={};function vt(v,A){v=v.replace(/:/g,"");const D=Date.parse("Jan 01, 1970 00:00:00 "+v)/6e4;return isNaN(D)?A:D}function mn(v){return v instanceof Date&&!isNaN(v.valueOf())}const ln=/^(\d+)?\.((\d+)(-(\d+))?)?$/;function xn(v){const A=parseInt(v);if(isNaN(A))throw new Error("Invalid integer literal when parsing "+v);return A}function gr(v,A){A=encodeURIComponent(A);for(const D of v.split(";")){const H=D.indexOf("="),[ae,$e]=-1==H?[D,""]:[D.slice(0,H),D.slice(H+1)];if(ae.trim()===A)return decodeURIComponent($e)}return null}let $t=(()=>{class v{constructor(D,H,ae,$e){this._iterableDiffers=D,this._keyValueDiffers=H,this._ngEl=ae,this._renderer=$e,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(D){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof D?D.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(D){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof D?D.split(/\s+/):D,this._rawClass&&((0,o.sIi)(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const D=this._iterableDiffer.diff(this._rawClass);D&&this._applyIterableChanges(D)}else if(this._keyValueDiffer){const D=this._keyValueDiffer.diff(this._rawClass);D&&this._applyKeyValueChanges(D)}}_applyKeyValueChanges(D){D.forEachAddedItem(H=>this._toggleClass(H.key,H.currentValue)),D.forEachChangedItem(H=>this._toggleClass(H.key,H.currentValue)),D.forEachRemovedItem(H=>{H.previousValue&&this._toggleClass(H.key,!1)})}_applyIterableChanges(D){D.forEachAddedItem(H=>{if("string"!=typeof H.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${(0,o.AaK)(H.item)}`);this._toggleClass(H.item,!0)}),D.forEachRemovedItem(H=>this._toggleClass(H.item,!1))}_applyClasses(D){D&&(Array.isArray(D)||D instanceof Set?D.forEach(H=>this._toggleClass(H,!0)):Object.keys(D).forEach(H=>this._toggleClass(H,!!D[H])))}_removeClasses(D){D&&(Array.isArray(D)||D instanceof Set?D.forEach(H=>this._toggleClass(H,!1)):Object.keys(D).forEach(H=>this._toggleClass(H,!1)))}_toggleClass(D,H){(D=D.trim())&&D.split(/\s+/g).forEach(ae=>{H?this._renderer.addClass(this._ngEl.nativeElement,ae):this._renderer.removeClass(this._ngEl.nativeElement,ae)})}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.ZZ4),o.Y36(o.aQg),o.Y36(o.SBq),o.Y36(o.Qsj))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0}),v})();class On{constructor(A,D,H,ae){this.$implicit=A,this.ngForOf=D,this.index=H,this.count=ae}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Cn=(()=>{class v{constructor(D,H,ae){this._viewContainer=D,this._template=H,this._differs=ae,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(D){this._ngForOf=D,this._ngForOfDirty=!0}set ngForTrackBy(D){this._trackByFn=D}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(D){D&&(this._template=D)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const D=this._ngForOf;!this._differ&&D&&(this._differ=this._differs.find(D).create(this.ngForTrackBy))}if(this._differ){const D=this._differ.diff(this._ngForOf);D&&this._applyChanges(D)}}_applyChanges(D){const H=this._viewContainer;D.forEachOperation((ae,$e,Xe)=>{if(null==ae.previousIndex)H.createEmbeddedView(this._template,new On(ae.item,this._ngForOf,-1,-1),null===Xe?void 0:Xe);else if(null==Xe)H.remove(null===$e?void 0:$e);else if(null!==$e){const lt=H.get($e);H.move(lt,Xe),rt(lt,ae)}});for(let ae=0,$e=H.length;ae<$e;ae++){const lt=H.get(ae).context;lt.index=ae,lt.count=$e,lt.ngForOf=this._ngForOf}D.forEachIdentityChange(ae=>{rt(H.get(ae.currentIndex),ae)})}static ngTemplateContextGuard(D,H){return!0}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b),o.Y36(o.Rgc),o.Y36(o.ZZ4))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0}),v})();function rt(v,A){v.context.$implicit=A.item}let q=(()=>{class v{constructor(D,H){this._viewContainer=D,this._context=new he,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=H}set ngIf(D){this._context.$implicit=this._context.ngIf=D,this._updateView()}set ngIfThen(D){we("ngIfThen",D),this._thenTemplateRef=D,this._thenViewRef=null,this._updateView()}set ngIfElse(D){we("ngIfElse",D),this._elseTemplateRef=D,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(D,H){return!0}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b),o.Y36(o.Rgc))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0}),v})();class he{constructor(){this.$implicit=null,this.ngIf=null}}function we(v,A){if(A&&!A.createEmbeddedView)throw new Error(`${v} must be a TemplateRef, but received '${(0,o.AaK)(A)}'.`)}let st=(()=>{class v{constructor(D,H,ae){this._ngEl=D,this._differs=H,this._renderer=ae,this._ngStyle=null,this._differ=null}set ngStyle(D){this._ngStyle=D,!this._differ&&D&&(this._differ=this._differs.find(D).create())}ngDoCheck(){if(this._differ){const D=this._differ.diff(this._ngStyle);D&&this._applyChanges(D)}}_setStyle(D,H){const[ae,$e]=D.split("."),Xe=-1===ae.indexOf("-")?void 0:o.JOm.DashCase;null!=H?this._renderer.setStyle(this._ngEl.nativeElement,ae,$e?`${H}${$e}`:H,Xe):this._renderer.removeStyle(this._ngEl.nativeElement,ae,Xe)}_applyChanges(D){D.forEachRemovedItem(H=>this._setStyle(H.key,null)),D.forEachAddedItem(H=>this._setStyle(H.key,H.currentValue)),D.forEachChangedItem(H=>this._setStyle(H.key,H.currentValue))}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.SBq),o.Y36(o.aQg),o.Y36(o.Qsj))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0}),v})(),Mt=(()=>{class v{constructor(D){this._viewContainerRef=D,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null,this.ngTemplateOutletInjector=null}ngOnChanges(D){if(D.ngTemplateOutlet||D.ngTemplateOutletInjector){const H=this._viewContainerRef;if(this._viewRef&&H.remove(H.indexOf(this._viewRef)),this.ngTemplateOutlet){const{ngTemplateOutlet:ae,ngTemplateOutletContext:$e,ngTemplateOutletInjector:Xe}=this;this._viewRef=H.createEmbeddedView(ae,$e,Xe?{injector:Xe}:void 0)}else this._viewRef=null}else this._viewRef&&D.ngTemplateOutletContext&&this.ngTemplateOutletContext&&(this._viewRef.context=this.ngTemplateOutletContext)}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},standalone:!0,features:[o.TTD]}),v})();function Bt(v,A){return new o.vHH(2100,!1)}class An{createSubscription(A,D){return A.subscribe({next:D,error:H=>{throw H}})}dispose(A){A.unsubscribe()}}class Rn{createSubscription(A,D){return A.then(D,H=>{throw H})}dispose(A){}}const Pn=new Rn,ur=new An;let mr=(()=>{class v{constructor(D){this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null,this._ref=D}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(D){return this._obj?D!==this._obj?(this._dispose(),this.transform(D)):this._latestValue:(D&&this._subscribe(D),this._latestValue)}_subscribe(D){this._obj=D,this._strategy=this._selectStrategy(D),this._subscription=this._strategy.createSubscription(D,H=>this._updateLatestValue(D,H))}_selectStrategy(D){if((0,o.QGY)(D))return Pn;if((0,o.F4k)(D))return ur;throw Bt()}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(D,H){D===this._obj&&(this._latestValue=H,this._ref.markForCheck())}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.sBO,16))},v.\u0275pipe=o.Yjl({name:"async",type:v,pure:!1,standalone:!0}),v})();const xr=new o.OlP("DATE_PIPE_DEFAULT_TIMEZONE"),Or=new o.OlP("DATE_PIPE_DEFAULT_OPTIONS");let ar=(()=>{class v{constructor(D,H,ae){this.locale=D,this.defaultTimezone=H,this.defaultOptions=ae}transform(D,H,ae,$e){if(null==D||""===D||D!=D)return null;try{return Et(D,H??this.defaultOptions?.dateFormat??"mediumDate",$e||this.locale,ae??this.defaultOptions?.timezone??this.defaultTimezone??void 0)}catch(Xe){throw Bt()}}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.soG,16),o.Y36(xr,24),o.Y36(Or,24))},v.\u0275pipe=o.Yjl({name:"date",type:v,pure:!0,standalone:!0}),v})(),Gn=(()=>{class v{constructor(D){this._locale=D}transform(D,H,ae){if(!function vr(v){return!(null==v||""===v||v!=v)}(D))return null;ae=ae||this._locale;try{return function dn(v,A,D){return function cn(v,A,D,H,ae,$e,Xe=!1){let lt="",qt=!1;if(isFinite(v)){let Tt=function $n(v){let H,ae,$e,Xe,lt,A=Math.abs(v)+"",D=0;for((ae=A.indexOf("."))>-1&&(A=A.replace(".","")),($e=A.search(/e/i))>0?(ae<0&&(ae=$e),ae+=+A.slice($e+1),A=A.substring(0,$e)):ae<0&&(ae=A.length),$e=0;"0"===A.charAt($e);$e++);if($e===(lt=A.length))H=[0],ae=1;else{for(lt--;"0"===A.charAt(lt);)lt--;for(ae-=$e,H=[],Xe=0;$e<=lt;$e++,Xe++)H[Xe]=Number(A.charAt($e))}return ae>22&&(H=H.splice(0,21),D=ae-1,ae=1),{digits:H,exponent:D,integerLen:ae}}(v);Xe&&(Tt=function sr(v){if(0===v.digits[0])return v;const A=v.digits.length-v.integerLen;return v.exponent?v.exponent+=2:(0===A?v.digits.push(0,0):1===A&&v.digits.push(0),v.integerLen+=2),v}(Tt));let un=A.minInt,Jt=A.minFrac,Yn=A.maxFrac;if($e){const Mr=$e.match(ln);if(null===Mr)throw new Error(`${$e} is not a valid digit info`);const Lo=Mr[1],di=Mr[3],Ai=Mr[5];null!=Lo&&(un=xn(Lo)),null!=di&&(Jt=xn(di)),null!=Ai?Yn=xn(Ai):null!=di&&Jt>Yn&&(Yn=Jt)}!function Tn(v,A,D){if(A>D)throw new Error(`The minimum number of digits after fraction (${A}) is higher than the maximum (${D}).`);let H=v.digits,ae=H.length-v.integerLen;const $e=Math.min(Math.max(A,ae),D);let Xe=$e+v.integerLen,lt=H[Xe];if(Xe>0){H.splice(Math.max(v.integerLen,Xe));for(let Jt=Xe;Jt=5)if(Xe-1<0){for(let Jt=0;Jt>Xe;Jt--)H.unshift(0),v.integerLen++;H.unshift(1),v.integerLen++}else H[Xe-1]++;for(;ae=Tt?Wn.pop():qt=!1),Yn>=10?1:0},0);un&&(H.unshift(un),v.integerLen++)}(Tt,Jt,Yn);let yn=Tt.digits,Wn=Tt.integerLen;const Eo=Tt.exponent;let pr=[];for(qt=yn.every(Mr=>!Mr);Wn0?pr=yn.splice(Wn,yn.length):(pr=yn,yn=[0]);const Vr=[];for(yn.length>=A.lgSize&&Vr.unshift(yn.splice(-A.lgSize,yn.length).join(""));yn.length>A.gSize;)Vr.unshift(yn.splice(-A.gSize,yn.length).join(""));yn.length&&Vr.unshift(yn.join("")),lt=Vr.join(et(D,H)),pr.length&&(lt+=et(D,ae)+pr.join("")),Eo&&(lt+=et(D,O.Exponential)+"+"+Eo)}else lt=et(D,O.Infinity);return lt=v<0&&!qt?A.negPre+lt+A.negSuf:A.posPre+lt+A.posSuf,lt}(v,function er(v,A="-"){const D={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},H=v.split(";"),ae=H[0],$e=H[1],Xe=-1!==ae.indexOf(".")?ae.split("."):[ae.substring(0,ae.lastIndexOf("0")+1),ae.substring(ae.lastIndexOf("0")+1)],lt=Xe[0],qt=Xe[1]||"";D.posPre=lt.substring(0,lt.indexOf("#"));for(let un=0;un{class v{transform(D,H,ae){if(null==D)return null;if(!this.supports(D))throw Bt();return D.slice(H,ae)}supports(D){return"string"==typeof D||Array.isArray(D)}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275pipe=o.Yjl({name:"slice",type:v,pure:!1,standalone:!0}),v})(),vo=(()=>{class v{}return v.\u0275fac=function(D){return new(D||v)},v.\u0275mod=o.oAB({type:v}),v.\u0275inj=o.cJS({}),v})();const yo="browser";let zr=(()=>{class v{}return v.\u0275prov=(0,o.Yz7)({token:v,providedIn:"root",factory:()=>new Do((0,o.LFG)(M),window)}),v})();class Do{constructor(A,D){this.document=A,this.window=D,this.offset=()=>[0,0]}setOffset(A){this.offset=Array.isArray(A)?()=>A:A}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(A){this.supportsScrolling()&&this.window.scrollTo(A[0],A[1])}scrollToAnchor(A){if(!this.supportsScrolling())return;const D=function Yr(v,A){const D=v.getElementById(A)||v.getElementsByName(A)[0];if(D)return D;if("function"==typeof v.createTreeWalker&&v.body&&(v.body.createShadowRoot||v.body.attachShadow)){const H=v.createTreeWalker(v.body,NodeFilter.SHOW_ELEMENT);let ae=H.currentNode;for(;ae;){const $e=ae.shadowRoot;if($e){const Xe=$e.getElementById(A)||$e.querySelector(`[name="${A}"]`);if(Xe)return Xe}ae=H.nextNode()}}return null}(this.document,A);D&&(this.scrollToElement(D),D.focus())}setHistoryScrollRestoration(A){if(this.supportScrollRestoration()){const D=this.window.history;D&&D.scrollRestoration&&(D.scrollRestoration=A)}}scrollToElement(A){const D=A.getBoundingClientRect(),H=D.left+this.window.pageXOffset,ae=D.top+this.window.pageYOffset,$e=this.offset();this.window.scrollTo(H-$e[0],ae-$e[1])}supportScrollRestoration(){try{if(!this.supportsScrolling())return!1;const A=Gr(this.window.history)||Gr(Object.getPrototypeOf(this.window.history));return!(!A||!A.writable&&!A.set)}catch{return!1}}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}function Gr(v){return Object.getOwnPropertyDescriptor(v,"scrollRestoration")}class hr{}},529:(Qe,Fe,w)=>{"use strict";w.d(Fe,{JF:()=>jn,TP:()=>de,WM:()=>Y,eN:()=>ce});var o=w(6895),x=w(8274),N=w(9646),ge=w(9751),R=w(4351),W=w(9300),M=w(4004);class U{}class _{}class Y{constructor(se){this.normalizedNames=new Map,this.lazyUpdate=null,se?this.lazyInit="string"==typeof se?()=>{this.headers=new Map,se.split("\n").forEach(ye=>{const He=ye.indexOf(":");if(He>0){const Ye=ye.slice(0,He),pt=Ye.toLowerCase(),vt=ye.slice(He+1).trim();this.maybeSetNormalizedName(Ye,pt),this.headers.has(pt)?this.headers.get(pt).push(vt):this.headers.set(pt,[vt])}})}:()=>{this.headers=new Map,Object.keys(se).forEach(ye=>{let He=se[ye];const Ye=ye.toLowerCase();"string"==typeof He&&(He=[He]),He.length>0&&(this.headers.set(Ye,He),this.maybeSetNormalizedName(ye,Ye))})}:this.headers=new Map}has(se){return this.init(),this.headers.has(se.toLowerCase())}get(se){this.init();const ye=this.headers.get(se.toLowerCase());return ye&&ye.length>0?ye[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(se){return this.init(),this.headers.get(se.toLowerCase())||null}append(se,ye){return this.clone({name:se,value:ye,op:"a"})}set(se,ye){return this.clone({name:se,value:ye,op:"s"})}delete(se,ye){return this.clone({name:se,value:ye,op:"d"})}maybeSetNormalizedName(se,ye){this.normalizedNames.has(ye)||this.normalizedNames.set(ye,se)}init(){this.lazyInit&&(this.lazyInit instanceof Y?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(se=>this.applyUpdate(se)),this.lazyUpdate=null))}copyFrom(se){se.init(),Array.from(se.headers.keys()).forEach(ye=>{this.headers.set(ye,se.headers.get(ye)),this.normalizedNames.set(ye,se.normalizedNames.get(ye))})}clone(se){const ye=new Y;return ye.lazyInit=this.lazyInit&&this.lazyInit instanceof Y?this.lazyInit:this,ye.lazyUpdate=(this.lazyUpdate||[]).concat([se]),ye}applyUpdate(se){const ye=se.name.toLowerCase();switch(se.op){case"a":case"s":let He=se.value;if("string"==typeof He&&(He=[He]),0===He.length)return;this.maybeSetNormalizedName(se.name,ye);const Ye=("a"===se.op?this.headers.get(ye):void 0)||[];Ye.push(...He),this.headers.set(ye,Ye);break;case"d":const pt=se.value;if(pt){let vt=this.headers.get(ye);if(!vt)return;vt=vt.filter(Ht=>-1===pt.indexOf(Ht)),0===vt.length?(this.headers.delete(ye),this.normalizedNames.delete(ye)):this.headers.set(ye,vt)}else this.headers.delete(ye),this.normalizedNames.delete(ye)}}forEach(se){this.init(),Array.from(this.normalizedNames.keys()).forEach(ye=>se(this.normalizedNames.get(ye),this.headers.get(ye)))}}class Z{encodeKey(se){return j(se)}encodeValue(se){return j(se)}decodeKey(se){return decodeURIComponent(se)}decodeValue(se){return decodeURIComponent(se)}}const B=/%(\d[a-f0-9])/gi,E={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function j(xe){return encodeURIComponent(xe).replace(B,(se,ye)=>E[ye]??se)}function P(xe){return`${xe}`}class K{constructor(se={}){if(this.updates=null,this.cloneFrom=null,this.encoder=se.encoder||new Z,se.fromString){if(se.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function S(xe,se){const ye=new Map;return xe.length>0&&xe.replace(/^\?/,"").split("&").forEach(Ye=>{const pt=Ye.indexOf("="),[vt,Ht]=-1==pt?[se.decodeKey(Ye),""]:[se.decodeKey(Ye.slice(0,pt)),se.decodeValue(Ye.slice(pt+1))],_t=ye.get(vt)||[];_t.push(Ht),ye.set(vt,_t)}),ye}(se.fromString,this.encoder)}else se.fromObject?(this.map=new Map,Object.keys(se.fromObject).forEach(ye=>{const He=se.fromObject[ye],Ye=Array.isArray(He)?He.map(P):[P(He)];this.map.set(ye,Ye)})):this.map=null}has(se){return this.init(),this.map.has(se)}get(se){this.init();const ye=this.map.get(se);return ye?ye[0]:null}getAll(se){return this.init(),this.map.get(se)||null}keys(){return this.init(),Array.from(this.map.keys())}append(se,ye){return this.clone({param:se,value:ye,op:"a"})}appendAll(se){const ye=[];return Object.keys(se).forEach(He=>{const Ye=se[He];Array.isArray(Ye)?Ye.forEach(pt=>{ye.push({param:He,value:pt,op:"a"})}):ye.push({param:He,value:Ye,op:"a"})}),this.clone(ye)}set(se,ye){return this.clone({param:se,value:ye,op:"s"})}delete(se,ye){return this.clone({param:se,value:ye,op:"d"})}toString(){return this.init(),this.keys().map(se=>{const ye=this.encoder.encodeKey(se);return this.map.get(se).map(He=>ye+"="+this.encoder.encodeValue(He)).join("&")}).filter(se=>""!==se).join("&")}clone(se){const ye=new K({encoder:this.encoder});return ye.cloneFrom=this.cloneFrom||this,ye.updates=(this.updates||[]).concat(se),ye}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(se=>this.map.set(se,this.cloneFrom.map.get(se))),this.updates.forEach(se=>{switch(se.op){case"a":case"s":const ye=("a"===se.op?this.map.get(se.param):void 0)||[];ye.push(P(se.value)),this.map.set(se.param,ye);break;case"d":if(void 0===se.value){this.map.delete(se.param);break}{let He=this.map.get(se.param)||[];const Ye=He.indexOf(P(se.value));-1!==Ye&&He.splice(Ye,1),He.length>0?this.map.set(se.param,He):this.map.delete(se.param)}}}),this.cloneFrom=this.updates=null)}}class ke{constructor(){this.map=new Map}set(se,ye){return this.map.set(se,ye),this}get(se){return this.map.has(se)||this.map.set(se,se.defaultValue()),this.map.get(se)}delete(se){return this.map.delete(se),this}has(se){return this.map.has(se)}keys(){return this.map.keys()}}function ie(xe){return typeof ArrayBuffer<"u"&&xe instanceof ArrayBuffer}function Be(xe){return typeof Blob<"u"&&xe instanceof Blob}function re(xe){return typeof FormData<"u"&&xe instanceof FormData}class be{constructor(se,ye,He,Ye){let pt;if(this.url=ye,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=se.toUpperCase(),function Te(xe){switch(xe){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||Ye?(this.body=void 0!==He?He:null,pt=Ye):pt=He,pt&&(this.reportProgress=!!pt.reportProgress,this.withCredentials=!!pt.withCredentials,pt.responseType&&(this.responseType=pt.responseType),pt.headers&&(this.headers=pt.headers),pt.context&&(this.context=pt.context),pt.params&&(this.params=pt.params)),this.headers||(this.headers=new Y),this.context||(this.context=new ke),this.params){const vt=this.params.toString();if(0===vt.length)this.urlWithParams=ye;else{const Ht=ye.indexOf("?");this.urlWithParams=ye+(-1===Ht?"?":Htmn.set(ln,se.setHeaders[ln]),_t)),se.setParams&&(tn=Object.keys(se.setParams).reduce((mn,ln)=>mn.set(ln,se.setParams[ln]),tn)),new be(ye,He,pt,{params:tn,headers:_t,context:Ln,reportProgress:Ht,responseType:Ye,withCredentials:vt})}}var Ne=(()=>((Ne=Ne||{})[Ne.Sent=0]="Sent",Ne[Ne.UploadProgress=1]="UploadProgress",Ne[Ne.ResponseHeader=2]="ResponseHeader",Ne[Ne.DownloadProgress=3]="DownloadProgress",Ne[Ne.Response=4]="Response",Ne[Ne.User=5]="User",Ne))();class Q{constructor(se,ye=200,He="OK"){this.headers=se.headers||new Y,this.status=void 0!==se.status?se.status:ye,this.statusText=se.statusText||He,this.url=se.url||null,this.ok=this.status>=200&&this.status<300}}class T extends Q{constructor(se={}){super(se),this.type=Ne.ResponseHeader}clone(se={}){return new T({headers:se.headers||this.headers,status:void 0!==se.status?se.status:this.status,statusText:se.statusText||this.statusText,url:se.url||this.url||void 0})}}class k extends Q{constructor(se={}){super(se),this.type=Ne.Response,this.body=void 0!==se.body?se.body:null}clone(se={}){return new k({body:void 0!==se.body?se.body:this.body,headers:se.headers||this.headers,status:void 0!==se.status?se.status:this.status,statusText:se.statusText||this.statusText,url:se.url||this.url||void 0})}}class O extends Q{constructor(se){super(se,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${se.url||"(unknown url)"}`:`Http failure response for ${se.url||"(unknown url)"}: ${se.status} ${se.statusText}`,this.error=se.error||null}}function te(xe,se){return{body:se,headers:xe.headers,context:xe.context,observe:xe.observe,params:xe.params,reportProgress:xe.reportProgress,responseType:xe.responseType,withCredentials:xe.withCredentials}}let ce=(()=>{class xe{constructor(ye){this.handler=ye}request(ye,He,Ye={}){let pt;if(ye instanceof be)pt=ye;else{let _t,tn;_t=Ye.headers instanceof Y?Ye.headers:new Y(Ye.headers),Ye.params&&(tn=Ye.params instanceof K?Ye.params:new K({fromObject:Ye.params})),pt=new be(ye,He,void 0!==Ye.body?Ye.body:null,{headers:_t,context:Ye.context,params:tn,reportProgress:Ye.reportProgress,responseType:Ye.responseType||"json",withCredentials:Ye.withCredentials})}const vt=(0,N.of)(pt).pipe((0,R.b)(_t=>this.handler.handle(_t)));if(ye instanceof be||"events"===Ye.observe)return vt;const Ht=vt.pipe((0,W.h)(_t=>_t instanceof k));switch(Ye.observe||"body"){case"body":switch(pt.responseType){case"arraybuffer":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&!(_t.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return _t.body}));case"blob":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&!(_t.body instanceof Blob))throw new Error("Response is not a Blob.");return _t.body}));case"text":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&"string"!=typeof _t.body)throw new Error("Response is not a string.");return _t.body}));default:return Ht.pipe((0,M.U)(_t=>_t.body))}case"response":return Ht;default:throw new Error(`Unreachable: unhandled observe type ${Ye.observe}}`)}}delete(ye,He={}){return this.request("DELETE",ye,He)}get(ye,He={}){return this.request("GET",ye,He)}head(ye,He={}){return this.request("HEAD",ye,He)}jsonp(ye,He){return this.request("JSONP",ye,{params:(new K).append(He,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(ye,He={}){return this.request("OPTIONS",ye,He)}patch(ye,He,Ye={}){return this.request("PATCH",ye,te(Ye,He))}post(ye,He,Ye={}){return this.request("POST",ye,te(Ye,He))}put(ye,He,Ye={}){return this.request("PUT",ye,te(Ye,He))}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(U))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();function Ae(xe,se){return se(xe)}function De(xe,se){return(ye,He)=>se.intercept(ye,{handle:Ye=>xe(Ye,He)})}const de=new x.OlP("HTTP_INTERCEPTORS"),ne=new x.OlP("HTTP_INTERCEPTOR_FNS");function Ee(){let xe=null;return(se,ye)=>(null===xe&&(xe=((0,x.f3M)(de,{optional:!0})??[]).reduceRight(De,Ae)),xe(se,ye))}let Ce=(()=>{class xe extends U{constructor(ye,He){super(),this.backend=ye,this.injector=He,this.chain=null}handle(ye){if(null===this.chain){const He=Array.from(new Set(this.injector.get(ne)));this.chain=He.reduceRight((Ye,pt)=>function ue(xe,se,ye){return(He,Ye)=>ye.runInContext(()=>se(He,pt=>xe(pt,Ye)))}(Ye,pt,this.injector),Ae)}return this.chain(ye,He=>this.backend.handle(He))}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(_),x.LFG(x.lqb))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();const Pt=/^\)\]\}',?\n/;let it=(()=>{class xe{constructor(ye){this.xhrFactory=ye}handle(ye){if("JSONP"===ye.method)throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");return new ge.y(He=>{const Ye=this.xhrFactory.build();if(Ye.open(ye.method,ye.urlWithParams),ye.withCredentials&&(Ye.withCredentials=!0),ye.headers.forEach((Ft,_e)=>Ye.setRequestHeader(Ft,_e.join(","))),ye.headers.has("Accept")||Ye.setRequestHeader("Accept","application/json, text/plain, */*"),!ye.headers.has("Content-Type")){const Ft=ye.detectContentTypeHeader();null!==Ft&&Ye.setRequestHeader("Content-Type",Ft)}if(ye.responseType){const Ft=ye.responseType.toLowerCase();Ye.responseType="json"!==Ft?Ft:"text"}const pt=ye.serializeBody();let vt=null;const Ht=()=>{if(null!==vt)return vt;const Ft=Ye.statusText||"OK",_e=new Y(Ye.getAllResponseHeaders()),fe=function Ut(xe){return"responseURL"in xe&&xe.responseURL?xe.responseURL:/^X-Request-URL:/m.test(xe.getAllResponseHeaders())?xe.getResponseHeader("X-Request-URL"):null}(Ye)||ye.url;return vt=new T({headers:_e,status:Ye.status,statusText:Ft,url:fe}),vt},_t=()=>{let{headers:Ft,status:_e,statusText:fe,url:ee}=Ht(),Se=null;204!==_e&&(Se=typeof Ye.response>"u"?Ye.responseText:Ye.response),0===_e&&(_e=Se?200:0);let Le=_e>=200&&_e<300;if("json"===ye.responseType&&"string"==typeof Se){const yt=Se;Se=Se.replace(Pt,"");try{Se=""!==Se?JSON.parse(Se):null}catch(It){Se=yt,Le&&(Le=!1,Se={error:It,text:Se})}}Le?(He.next(new k({body:Se,headers:Ft,status:_e,statusText:fe,url:ee||void 0})),He.complete()):He.error(new O({error:Se,headers:Ft,status:_e,statusText:fe,url:ee||void 0}))},tn=Ft=>{const{url:_e}=Ht(),fe=new O({error:Ft,status:Ye.status||0,statusText:Ye.statusText||"Unknown Error",url:_e||void 0});He.error(fe)};let Ln=!1;const mn=Ft=>{Ln||(He.next(Ht()),Ln=!0);let _e={type:Ne.DownloadProgress,loaded:Ft.loaded};Ft.lengthComputable&&(_e.total=Ft.total),"text"===ye.responseType&&!!Ye.responseText&&(_e.partialText=Ye.responseText),He.next(_e)},ln=Ft=>{let _e={type:Ne.UploadProgress,loaded:Ft.loaded};Ft.lengthComputable&&(_e.total=Ft.total),He.next(_e)};return Ye.addEventListener("load",_t),Ye.addEventListener("error",tn),Ye.addEventListener("timeout",tn),Ye.addEventListener("abort",tn),ye.reportProgress&&(Ye.addEventListener("progress",mn),null!==pt&&Ye.upload&&Ye.upload.addEventListener("progress",ln)),Ye.send(pt),He.next({type:Ne.Sent}),()=>{Ye.removeEventListener("error",tn),Ye.removeEventListener("abort",tn),Ye.removeEventListener("load",_t),Ye.removeEventListener("timeout",tn),ye.reportProgress&&(Ye.removeEventListener("progress",mn),null!==pt&&Ye.upload&&Ye.upload.removeEventListener("progress",ln)),Ye.readyState!==Ye.DONE&&Ye.abort()}})}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(o.JF))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();const Xt=new x.OlP("XSRF_ENABLED"),kt="XSRF-TOKEN",Vt=new x.OlP("XSRF_COOKIE_NAME",{providedIn:"root",factory:()=>kt}),rn="X-XSRF-TOKEN",Vn=new x.OlP("XSRF_HEADER_NAME",{providedIn:"root",factory:()=>rn});class en{}let gt=(()=>{class xe{constructor(ye,He,Ye){this.doc=ye,this.platform=He,this.cookieName=Ye,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const ye=this.doc.cookie||"";return ye!==this.lastCookieString&&(this.parseCount++,this.lastToken=(0,o.Mx)(ye,this.cookieName),this.lastCookieString=ye),this.lastToken}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(o.K0),x.LFG(x.Lbi),x.LFG(Vt))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();function Yt(xe,se){const ye=xe.url.toLowerCase();if(!(0,x.f3M)(Xt)||"GET"===xe.method||"HEAD"===xe.method||ye.startsWith("http://")||ye.startsWith("https://"))return se(xe);const He=(0,x.f3M)(en).getToken(),Ye=(0,x.f3M)(Vn);return null!=He&&!xe.headers.has(Ye)&&(xe=xe.clone({headers:xe.headers.set(Ye,He)})),se(xe)}var nt=(()=>((nt=nt||{})[nt.Interceptors=0]="Interceptors",nt[nt.LegacyInterceptors=1]="LegacyInterceptors",nt[nt.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",nt[nt.NoXsrfProtection=3]="NoXsrfProtection",nt[nt.JsonpSupport=4]="JsonpSupport",nt[nt.RequestsMadeViaParent=5]="RequestsMadeViaParent",nt))();function Et(xe,se){return{\u0275kind:xe,\u0275providers:se}}function ut(...xe){const se=[ce,it,Ce,{provide:U,useExisting:Ce},{provide:_,useExisting:it},{provide:ne,useValue:Yt,multi:!0},{provide:Xt,useValue:!0},{provide:en,useClass:gt}];for(const ye of xe)se.push(...ye.\u0275providers);return(0,x.MR2)(se)}const qe=new x.OlP("LEGACY_INTERCEPTOR_FN");function gn({cookieName:xe,headerName:se}){const ye=[];return void 0!==xe&&ye.push({provide:Vt,useValue:xe}),void 0!==se&&ye.push({provide:Vn,useValue:se}),Et(nt.CustomXsrfConfiguration,ye)}let jn=(()=>{class xe{}return xe.\u0275fac=function(ye){return new(ye||xe)},xe.\u0275mod=x.oAB({type:xe}),xe.\u0275inj=x.cJS({providers:[ut(Et(nt.LegacyInterceptors,[{provide:qe,useFactory:Ee},{provide:ne,useExisting:qe,multi:!0}]),gn({cookieName:kt,headerName:rn}))]}),xe})()},8274:(Qe,Fe,w)=>{"use strict";w.d(Fe,{tb:()=>qg,AFp:()=>Wg,ip1:()=>Yg,CZH:()=>ll,hGG:()=>T_,z2F:()=>ul,sBO:()=>h_,Sil:()=>KC,_Vd:()=>Zs,EJc:()=>YC,Xts:()=>Jl,SBq:()=>Js,lqb:()=>Ni,qLn:()=>Qs,vpe:()=>zo,XFs:()=>gt,OlP:()=>_n,zs3:()=>Li,ZZ4:()=>Fu,aQg:()=>ku,soG:()=>cl,YKP:()=>Wp,h0i:()=>Es,PXZ:()=>a_,R0b:()=>uo,FiY:()=>Hs,Lbi:()=>UC,g9A:()=>Xg,Qsj:()=>sy,FYo:()=>ff,JOm:()=>Bo,tp0:()=>js,Rgc:()=>ha,dDg:()=>r_,eoX:()=>rm,GfV:()=>hf,s_b:()=>il,ifc:()=>ee,MMx:()=>cu,Lck:()=>Ub,eFA:()=>sm,G48:()=>f_,Gpc:()=>j,f3M:()=>pt,MR2:()=>Gv,_c5:()=>A_,c2e:()=>zC,zSh:()=>nc,wAp:()=>Ot,vHH:()=>ie,lri:()=>tm,rWj:()=>nm,D6c:()=>x_,cg1:()=>tu,kL8:()=>yp,dqk:()=>Ct,Z0I:()=>Pt,sIi:()=>ra,CqO:()=>wh,QGY:()=>Wc,QP$:()=>Un,F4k:()=>_h,RDi:()=>wv,AaK:()=>S,qOj:()=>Lc,TTD:()=>kr,_Bn:()=>Yp,jDz:()=>Xp,xp6:()=>Cf,uIk:()=>Vc,Tol:()=>Wh,ekj:()=>qc,Suo:()=>_g,Xpm:()=>sr,lG2:()=>cr,Yz7:()=>wt,cJS:()=>Kt,oAB:()=>vn,Yjl:()=>gr,Y36:()=>us,_UZ:()=>Uc,GkF:()=>Yc,qZA:()=>qa,TgZ:()=>Xa,EpF:()=>Ch,n5z:()=>$s,LFG:()=>He,$8M:()=>Vs,$Z:()=>Ff,NdJ:()=>Kc,CRH:()=>wg,oxw:()=>Ah,ALo:()=>dg,lcZ:()=>fg,xi3:()=>hg,Dn7:()=>pg,Hsn:()=>xh,F$t:()=>Th,Q6J:()=>Hc,MGl:()=>Za,VKq:()=>ng,WLB:()=>rg,kEZ:()=>og,HTZ:()=>ig,iGM:()=>bg,MAs:()=>bh,KtG:()=>Dr,evT:()=>pf,CHM:()=>yr,oJD:()=>Xd,P3R:()=>Jd,kYT:()=>tr,Udp:()=>Xc,YNc:()=>Dh,W1O:()=>Mg,_uU:()=>ep,Oqu:()=>Jc,hij:()=>Qa,AsE:()=>Qc,lnq:()=>eu,Gf:()=>Cg});var o=w(7579),x=w(727),N=w(9751),ge=w(8189),R=w(8421),W=w(515),M=w(3269),U=w(2076),Y=w(3099);function G(e){for(let t in e)if(e[t]===G)return t;throw Error("Could not find renamed property on target object.")}function Z(e,t){for(const n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function S(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(S).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function B(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const E=G({__forward_ref__:G});function j(e){return e.__forward_ref__=j,e.toString=function(){return S(this())},e}function P(e){return K(e)?e():e}function K(e){return"function"==typeof e&&e.hasOwnProperty(E)&&e.__forward_ref__===j}function pe(e){return e&&!!e.\u0275providers}const Te="https://g.co/ng/security#xss";class ie extends Error{constructor(t,n){super(function Be(e,t){return`NG0${Math.abs(e)}${t?": "+t.trim():""}`}(t,n)),this.code=t}}function re(e){return"string"==typeof e?e:null==e?"":String(e)}function T(e,t){throw new ie(-201,!1)}function et(e,t){null==e&&function Ue(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function wt(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Kt(e){return{providers:e.providers||[],imports:e.imports||[]}}function pn(e){return Ut(e,Vt)||Ut(e,Vn)}function Pt(e){return null!==pn(e)}function Ut(e,t){return e.hasOwnProperty(t)?e[t]:null}function kt(e){return e&&(e.hasOwnProperty(rn)||e.hasOwnProperty(en))?e[rn]:null}const Vt=G({\u0275prov:G}),rn=G({\u0275inj:G}),Vn=G({ngInjectableDef:G}),en=G({ngInjectorDef:G});var gt=(()=>((gt=gt||{})[gt.Default=0]="Default",gt[gt.Host=1]="Host",gt[gt.Self=2]="Self",gt[gt.SkipSelf=4]="SkipSelf",gt[gt.Optional=8]="Optional",gt))();let Yt;function nt(e){const t=Yt;return Yt=e,t}function Et(e,t,n){const r=pn(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n>.Optional?null:void 0!==t?t:void T(S(e))}const Ct=(()=>typeof globalThis<"u"&&globalThis||typeof global<"u"&&global||typeof window<"u"&&window||typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self)(),Nt={},Hn="__NG_DI_FLAG__",zt="ngTempTokenPath",jn=/\n/gm,En="__source";let xe;function se(e){const t=xe;return xe=e,t}function ye(e,t=gt.Default){if(void 0===xe)throw new ie(-203,!1);return null===xe?Et(e,void 0,t):xe.get(e,t>.Optional?null:void 0,t)}function He(e,t=gt.Default){return(function ht(){return Yt}()||ye)(P(e),t)}function pt(e,t=gt.Default){return He(e,vt(t))}function vt(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Ht(e){const t=[];for(let n=0;n((Ft=Ft||{})[Ft.OnPush=0]="OnPush",Ft[Ft.Default=1]="Default",Ft))(),ee=(()=>{return(e=ee||(ee={}))[e.Emulated=0]="Emulated",e[e.None=2]="None",e[e.ShadowDom=3]="ShadowDom",ee;var e})();const Se={},Le=[],yt=G({\u0275cmp:G}),It=G({\u0275dir:G}),cn=G({\u0275pipe:G}),Dn=G({\u0275mod:G}),sn=G({\u0275fac:G}),dn=G({__NG_ELEMENT_ID__:G});let er=0;function sr(e){return ln(()=>{const n=!0===e.standalone,r={},i={type:e.type,providersResolver:null,decls:e.decls,vars:e.vars,factory:null,template:e.template||null,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:r,inputs:null,outputs:null,exportAs:e.exportAs||null,onPush:e.changeDetection===Ft.OnPush,directiveDefs:null,pipeDefs:null,standalone:n,dependencies:n&&e.dependencies||null,getStandaloneInjector:null,selectors:e.selectors||Le,viewQuery:e.viewQuery||null,features:e.features||null,data:e.data||{},encapsulation:e.encapsulation||ee.Emulated,id:"c"+er++,styles:e.styles||Le,_:null,setInput:null,schemas:e.schemas||null,tView:null,findHostDirectiveDefs:null,hostDirectives:null},l=e.dependencies,u=e.features;return i.inputs=Ir(e.inputs,r),i.outputs=Ir(e.outputs),u&&u.forEach(p=>p(i)),i.directiveDefs=l?()=>("function"==typeof l?l():l).map(Tn).filter(xn):null,i.pipeDefs=l?()=>("function"==typeof l?l():l).map(Qt).filter(xn):null,i})}function Tn(e){return $t(e)||fn(e)}function xn(e){return null!==e}function vn(e){return ln(()=>({type:e.type,bootstrap:e.bootstrap||Le,declarations:e.declarations||Le,imports:e.imports||Le,exports:e.exports||Le,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function tr(e,t){return ln(()=>{const n=On(e,!0);n.declarations=t.declarations||Le,n.imports=t.imports||Le,n.exports=t.exports||Le})}function Ir(e,t){if(null==e)return Se;const n={};for(const r in e)if(e.hasOwnProperty(r)){let i=e[r],l=i;Array.isArray(i)&&(l=i[1],i=i[0]),n[i]=r,t&&(t[i]=l)}return n}const cr=sr;function gr(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,standalone:!0===e.standalone,onDestroy:e.type.prototype.ngOnDestroy||null}}function $t(e){return e[yt]||null}function fn(e){return e[It]||null}function Qt(e){return e[cn]||null}function Un(e){const t=$t(e)||fn(e)||Qt(e);return null!==t&&t.standalone}function On(e,t){const n=e[Dn]||null;if(!n&&!0===t)throw new Error(`Type ${S(e)} does not have '\u0275mod' property.`);return n}function Fn(e){return Array.isArray(e)&&"object"==typeof e[1]}function zn(e){return Array.isArray(e)&&!0===e[1]}function qn(e){return 0!=(4&e.flags)}function dr(e){return e.componentOffset>-1}function Sr(e){return 1==(1&e.flags)}function Gn(e){return null!==e.template}function go(e){return 0!=(256&e[2])}function nr(e,t){return e.hasOwnProperty(sn)?e[sn]:null}class li{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function kr(){return bo}function bo(e){return e.type.prototype.ngOnChanges&&(e.setInput=Wr),Wo}function Wo(){const e=Qr(this),t=e?.current;if(t){const n=e.previous;if(n===Se)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function Wr(e,t,n,r){const i=this.declaredInputs[n],l=Qr(e)||function eo(e,t){return e[Co]=t}(e,{previous:Se,current:null}),u=l.current||(l.current={}),p=l.previous,y=p[i];u[i]=new li(y&&y.currentValue,t,p===Se),e[r]=t}kr.ngInherit=!0;const Co="__ngSimpleChanges__";function Qr(e){return e[Co]||null}function Sn(e){for(;Array.isArray(e);)e=e[0];return e}function ko(e,t){return Sn(t[e])}function Jn(e,t){return Sn(t[e.index])}function Kr(e,t){return e.data[t]}function no(e,t){return e[t]}function rr(e,t){const n=t[e];return Fn(n)?n:n[0]}function hn(e){return 64==(64&e[2])}function C(e,t){return null==t?null:e[t]}function s(e){e[18]=0}function c(e,t){e[5]+=t;let n=e,r=e[3];for(;null!==r&&(1===t&&1===n[5]||-1===t&&0===n[5]);)r[5]+=t,n=r,r=r[3]}const a={lFrame:A(null),bindingsEnabled:!0};function Dt(){return a.bindingsEnabled}function Ve(){return a.lFrame.lView}function At(){return a.lFrame.tView}function yr(e){return a.lFrame.contextLView=e,e[8]}function Dr(e){return a.lFrame.contextLView=null,e}function Mn(){let e=$r();for(;null!==e&&64===e.type;)e=e.parent;return e}function $r(){return a.lFrame.currentTNode}function br(e,t){const n=a.lFrame;n.currentTNode=e,n.isParent=t}function zi(){return a.lFrame.isParent}function ci(){a.lFrame.isParent=!1}function lr(){const e=a.lFrame;let t=e.bindingRootIndex;return-1===t&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function oo(){return a.lFrame.bindingIndex}function io(){return a.lFrame.bindingIndex++}function Br(e){const t=a.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function ui(e,t){const n=a.lFrame;n.bindingIndex=n.bindingRootIndex=e,No(t)}function No(e){a.lFrame.currentDirectiveIndex=e}function Os(){return a.lFrame.currentQueryIndex}function Wi(e){a.lFrame.currentQueryIndex=e}function ma(e){const t=e[1];return 2===t.type?t.declTNode:1===t.type?e[6]:null}function Rs(e,t,n){if(n>.SkipSelf){let i=t,l=e;for(;!(i=i.parent,null!==i||n>.Host||(i=ma(l),null===i||(l=l[15],10&i.type))););if(null===i)return!1;t=i,e=l}const r=a.lFrame=v();return r.currentTNode=t,r.lView=e,!0}function Ki(e){const t=v(),n=e[1];a.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function v(){const e=a.lFrame,t=null===e?null:e.child;return null===t?A(e):t}function A(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function D(){const e=a.lFrame;return a.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const H=D;function ae(){const e=D();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function lt(){return a.lFrame.selectedIndex}function qt(e){a.lFrame.selectedIndex=e}function Tt(){const e=a.lFrame;return Kr(e.tView,e.selectedIndex)}function pr(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[y]<0&&(e[18]+=65536),(p>11>16&&(3&e[2])===t){e[2]+=2048;try{l.call(p)}finally{}}}else try{l.call(p)}finally{}}class fi{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function pi(e,t,n){let r=0;for(;rt){u=l-1;break}}}for(;l>16}(e),r=t;for(;n>0;)r=r[15],n--;return r}let qi=!0;function Zi(e){const t=qi;return qi=e,t}let yl=0;const Xr={};function Ji(e,t){const n=ks(e,t);if(-1!==n)return n;const r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,mi(r.data,e),mi(t,null),mi(r.blueprint,null));const i=Qi(e,t),l=e.injectorIndex;if(ba(i)){const u=Zo(i),p=gi(i,t),y=p[1].data;for(let I=0;I<8;I++)t[l+I]=p[u+I]|y[u+I]}return t[l+8]=i,l}function mi(e,t){e.push(0,0,0,0,0,0,0,0,t)}function ks(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function Qi(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,i=t;for(;null!==i;){if(r=Ia(i),null===r)return-1;if(n++,i=i[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return-1}function es(e,t,n){!function or(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(dn)&&(r=n[dn]),null==r&&(r=n[dn]=yl++);const i=255&r;t.data[e+(i>>5)]|=1<=0?255&t:Ku:t}(n);if("function"==typeof l){if(!Rs(t,e,r))return r>.Host?bl(i,0,r):wa(t,n,r,i);try{const u=l(r);if(null!=u||r>.Optional)return u;T()}finally{H()}}else if("number"==typeof l){let u=null,p=ks(e,t),y=-1,I=r>.Host?t[16][6]:null;for((-1===p||r>.SkipSelf)&&(y=-1===p?Qi(e,t):t[p+8],-1!==y&&Ea(r,!1)?(u=t[1],p=Zo(y),t=gi(y,t)):p=-1);-1!==p;){const V=t[1];if(ns(l,p,V.data)){const J=vi(p,t,n,u,r,I);if(J!==Xr)return J}y=t[p+8],-1!==y&&Ea(r,t[1].data[p+8]===I)&&ns(l,p,t)?(u=V,p=Zo(y),t=gi(y,t)):p=-1}}return i}function vi(e,t,n,r,i,l){const u=t[1],p=u.data[e+8],V=Ls(p,u,n,null==r?dr(p)&&qi:r!=u&&0!=(3&p.type),i>.Host&&l===p);return null!==V?Jo(t,u,V,p):Xr}function Ls(e,t,n,r,i){const l=e.providerIndexes,u=t.data,p=1048575&l,y=e.directiveStart,V=l>>20,me=i?p+V:e.directiveEnd;for(let Oe=r?p:p+V;Oe=y&&Ge.type===n)return Oe}if(i){const Oe=u[y];if(Oe&&Gn(Oe)&&Oe.type===n)return y}return null}function Jo(e,t,n,r){let i=e[n];const l=t.data;if(function gl(e){return e instanceof fi}(i)){const u=i;u.resolving&&function be(e,t){const n=t?`. Dependency path: ${t.join(" > ")} > ${e}`:"";throw new ie(-200,`Circular dependency in DI detected for ${e}${n}`)}(function oe(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():re(e)}(l[n]));const p=Zi(u.canSeeViewProviders);u.resolving=!0;const y=u.injectImpl?nt(u.injectImpl):null;Rs(e,r,gt.Default);try{i=e[n]=u.factory(void 0,l,e,r),t.firstCreatePass&&n>=r.directiveStart&&function Eo(e,t,n){const{ngOnChanges:r,ngOnInit:i,ngDoCheck:l}=t.type.prototype;if(r){const u=bo(t);(n.preOrderHooks||(n.preOrderHooks=[])).push(e,u),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,u)}i&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-e,i),l&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,l),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,l))}(n,l[n],t)}finally{null!==y&&nt(y),Zi(p),u.resolving=!1,H()}}return i}function ns(e,t,n){return!!(n[t+(e>>5)]&1<{const t=e.prototype.constructor,n=t[sn]||rs(t),r=Object.prototype;let i=Object.getPrototypeOf(e.prototype).constructor;for(;i&&i!==r;){const l=i[sn]||rs(i);if(l&&l!==n)return l;i=Object.getPrototypeOf(i)}return l=>new l})}function rs(e){return K(e)?()=>{const t=rs(P(e));return t&&t()}:nr(e)}function Ia(e){const t=e[1],n=t.type;return 2===n?t.declTNode:1===n?e[6]:null}function Vs(e){return function Dl(e,t){if("class"===t)return e.classes;if("style"===t)return e.styles;const n=e.attrs;if(n){const r=n.length;let i=0;for(;i{const r=function ei(e){return function(...n){if(e){const r=e(...n);for(const i in r)this[i]=r[i]}}}(t);function i(...l){if(this instanceof i)return r.apply(this,l),this;const u=new i(...l);return p.annotation=u,p;function p(y,I,V){const J=y.hasOwnProperty(Qo)?y[Qo]:Object.defineProperty(y,Qo,{value:[]})[Qo];for(;J.length<=V;)J.push(null);return(J[V]=J[V]||[]).push(u),y}}return n&&(i.prototype=Object.create(n.prototype)),i.prototype.ngMetadataName=e,i.annotationCls=i,i})}class _n{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=wt({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}function z(e,t){void 0===t&&(t=e);for(let n=0;nArray.isArray(n)?ve(n,t):t(n))}function We(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function ft(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function bt(e,t){const n=[];for(let r=0;r=0?e[1|r]=n:(r=~r,function lo(e,t,n,r){let i=e.length;if(i==t)e.push(n,r);else if(1===i)e.push(r,e[0]),e[0]=n;else{for(i--,e.push(e[i-1],e[i]);i>t;)e[i]=e[i-2],i--;e[t]=n,e[t+1]=r}}(e,r,t,n)),r}function Ri(e,t){const n=_i(e,t);if(n>=0)return e[1|n]}function _i(e,t){return function td(e,t,n){let r=0,i=e.length>>n;for(;i!==r;){const l=r+(i-r>>1),u=e[l<t?i=l:r=l+1}return~(i<((Bo=Bo||{})[Bo.Important=1]="Important",Bo[Bo.DashCase=2]="DashCase",Bo))();const xl=new Map;let Gm=0;const Rl="__ngContext__";function _r(e,t){Fn(t)?(e[Rl]=t[20],function Wm(e){xl.set(e[20],e)}(t)):e[Rl]=t}function Fl(e,t){return undefined(e,t)}function Ys(e){const t=e[3];return zn(t)?t[3]:t}function kl(e){return _d(e[13])}function Nl(e){return _d(e[4])}function _d(e){for(;null!==e&&!zn(e);)e=e[4];return e}function is(e,t,n,r,i){if(null!=r){let l,u=!1;zn(r)?l=r:Fn(r)&&(u=!0,r=r[0]);const p=Sn(r);0===e&&null!==n?null==i?Ad(t,n,p):Pi(t,n,p,i||null,!0):1===e&&null!==n?Pi(t,n,p,i||null,!0):2===e?function Ul(e,t,n){const r=Ta(e,t);r&&function pv(e,t,n,r){e.removeChild(t,n,r)}(e,r,t,n)}(t,p,u):3===e&&t.destroyNode(p),null!=l&&function vv(e,t,n,r,i){const l=n[7];l!==Sn(n)&&is(t,e,r,l,i);for(let p=10;p0&&(e[n-1][4]=r[4]);const l=ft(e,10+t);!function sv(e,t){Ws(e,t,t[11],2,null,null),t[0]=null,t[6]=null}(r[1],r);const u=l[19];null!==u&&u.detachView(l[1]),r[3]=null,r[4]=null,r[2]&=-65}return r}function Id(e,t){if(!(128&t[2])){const n=t[11];n.destroyNode&&Ws(e,t,n,3,null,null),function cv(e){let t=e[13];if(!t)return Vl(e[1],e);for(;t;){let n=null;if(Fn(t))n=t[13];else{const r=t[10];r&&(n=r)}if(!n){for(;t&&!t[4]&&t!==e;)Fn(t)&&Vl(t[1],t),t=t[3];null===t&&(t=e),Fn(t)&&Vl(t[1],t),n=t&&t[4]}t=n}}(t)}}function Vl(e,t){if(!(128&t[2])){t[2]&=-65,t[2]|=128,function hv(e,t){let n;if(null!=e&&null!=(n=e.destroyHooks))for(let r=0;r=0?r[i=u]():r[i=-u].unsubscribe(),l+=2}else{const u=r[i=n[l+1]];n[l].call(u)}if(null!==r){for(let l=i+1;l-1){const{encapsulation:l}=e.data[r.directiveStart+i];if(l===ee.None||l===ee.Emulated)return null}return Jn(r,n)}}(e,t.parent,n)}function Pi(e,t,n,r,i){e.insertBefore(t,n,r,i)}function Ad(e,t,n){e.appendChild(t,n)}function Td(e,t,n,r,i){null!==r?Pi(e,t,n,r,i):Ad(e,t,n)}function Ta(e,t){return e.parentNode(t)}function xd(e,t,n){return Rd(e,t,n)}let Ra,Yl,Pa,Rd=function Od(e,t,n){return 40&e.type?Jn(e,n):null};function xa(e,t,n,r){const i=Sd(e,r,t),l=t[11],p=xd(r.parent||t[6],r,t);if(null!=i)if(Array.isArray(n))for(let y=0;ye,createScript:e=>e,createScriptURL:e=>e})}catch{}return Ra}()?.createHTML(e)||e}function wv(e){Yl=e}function Wl(){if(void 0===Pa&&(Pa=null,Ct.trustedTypes))try{Pa=Ct.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return Pa}function Bd(e){return Wl()?.createHTML(e)||e}function Hd(e){return Wl()?.createScriptURL(e)||e}class jd{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Te})`}}function wi(e){return e instanceof jd?e.changingThisBreaksApplicationSecurity:e}function Ks(e,t){const n=function Tv(e){return e instanceof jd&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${Te})`)}return n===t}class xv{constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{const n=(new window.DOMParser).parseFromString(Fi(t),"text/html").body;return null===n?this.inertDocumentHelper.getInertBodyElement(t):(n.removeChild(n.firstChild),n)}catch{return null}}}class Ov{constructor(t){if(this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),null==this.inertDocument.body){const n=this.inertDocument.createElement("html");this.inertDocument.appendChild(n);const r=this.inertDocument.createElement("body");n.appendChild(r)}}getInertBodyElement(t){const n=this.inertDocument.createElement("template");if("content"in n)return n.innerHTML=Fi(t),n;const r=this.inertDocument.createElement("body");return r.innerHTML=Fi(t),this.defaultDoc.documentMode&&this.stripCustomNsAttrs(r),r}stripCustomNsAttrs(t){const n=t.attributes;for(let i=n.length-1;0"),!0}endElement(t){const n=t.nodeName.toLowerCase();Xl.hasOwnProperty(n)&&!zd.hasOwnProperty(n)&&(this.buf.push(""))}chars(t){this.buf.push(Kd(t))}checkClobberedElement(t,n){if(n&&(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${t.outerHTML}`);return n}}const Nv=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Lv=/([^\#-~ |!])/g;function Kd(e){return e.replace(/&/g,"&").replace(Nv,function(t){return"&#"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+";"}).replace(Lv,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}let Fa;function Zl(e){return"content"in e&&function Bv(e){return e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.nodeName}(e)?e.content:null}var Qn=(()=>((Qn=Qn||{})[Qn.NONE=0]="NONE",Qn[Qn.HTML=1]="HTML",Qn[Qn.STYLE=2]="STYLE",Qn[Qn.SCRIPT=3]="SCRIPT",Qn[Qn.URL=4]="URL",Qn[Qn.RESOURCE_URL=5]="RESOURCE_URL",Qn))();function Xd(e){const t=qs();return t?Bd(t.sanitize(Qn.HTML,e)||""):Ks(e,"HTML")?Bd(wi(e)):function $v(e,t){let n=null;try{Fa=Fa||function Ud(e){const t=new Ov(e);return function Rv(){try{return!!(new window.DOMParser).parseFromString(Fi(""),"text/html")}catch{return!1}}()?new xv(t):t}(e);let r=t?String(t):"";n=Fa.getInertBodyElement(r);let i=5,l=r;do{if(0===i)throw new Error("Failed to sanitize html because the input is unstable");i--,r=l,l=n.innerHTML,n=Fa.getInertBodyElement(r)}while(r!==l);return Fi((new kv).sanitizeChildren(Zl(n)||n))}finally{if(n){const r=Zl(n)||n;for(;r.firstChild;)r.removeChild(r.firstChild)}}}(function $d(){return void 0!==Yl?Yl:typeof document<"u"?document:void 0}(),re(e))}function qd(e){const t=qs();return t?t.sanitize(Qn.URL,e)||"":Ks(e,"URL")?wi(e):Kl(re(e))}function Zd(e){const t=qs();if(t)return Hd(t.sanitize(Qn.RESOURCE_URL,e)||"");if(Ks(e,"ResourceURL"))return Hd(wi(e));throw new ie(904,!1)}function Jd(e,t,n){return function zv(e,t){return"src"===t&&("embed"===e||"frame"===e||"iframe"===e||"media"===e||"script"===e)||"href"===t&&("base"===e||"link"===e)?Zd:qd}(t,n)(e)}function qs(){const e=Ve();return e&&e[12]}const Jl=new _n("ENVIRONMENT_INITIALIZER"),Qd=new _n("INJECTOR",-1),ef=new _n("INJECTOR_DEF_TYPES");class tf{get(t,n=Nt){if(n===Nt){const r=new Error(`NullInjectorError: No provider for ${S(t)}!`);throw r.name="NullInjectorError",r}return n}}function Gv(e){return{\u0275providers:e}}function Yv(...e){return{\u0275providers:nf(0,e),\u0275fromNgModule:!0}}function nf(e,...t){const n=[],r=new Set;let i;return ve(t,l=>{const u=l;Ql(u,n,[],r)&&(i||(i=[]),i.push(u))}),void 0!==i&&rf(i,n),n}function rf(e,t){for(let n=0;n{t.push(l)})}}function Ql(e,t,n,r){if(!(e=P(e)))return!1;let i=null,l=kt(e);const u=!l&&$t(e);if(l||u){if(u&&!u.standalone)return!1;i=e}else{const y=e.ngModule;if(l=kt(y),!l)return!1;i=y}const p=r.has(i);if(u){if(p)return!1;if(r.add(i),u.dependencies){const y="function"==typeof u.dependencies?u.dependencies():u.dependencies;for(const I of y)Ql(I,t,n,r)}}else{if(!l)return!1;{if(null!=l.imports&&!p){let I;r.add(i);try{ve(l.imports,V=>{Ql(V,t,n,r)&&(I||(I=[]),I.push(V))})}finally{}void 0!==I&&rf(I,t)}if(!p){const I=nr(i)||(()=>new i);t.push({provide:i,useFactory:I,deps:Le},{provide:ef,useValue:i,multi:!0},{provide:Jl,useValue:()=>He(i),multi:!0})}const y=l.providers;null==y||p||ec(y,V=>{t.push(V)})}}return i!==e&&void 0!==e.providers}function ec(e,t){for(let n of e)pe(n)&&(n=n.\u0275providers),Array.isArray(n)?ec(n,t):t(n)}const Wv=G({provide:String,useValue:G});function tc(e){return null!==e&&"object"==typeof e&&Wv in e}function ki(e){return"function"==typeof e}const nc=new _n("Set Injector scope."),ka={},Xv={};let rc;function Na(){return void 0===rc&&(rc=new tf),rc}class Ni{}class lf extends Ni{constructor(t,n,r,i){super(),this.parent=n,this.source=r,this.scopes=i,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,ic(t,u=>this.processProvider(u)),this.records.set(Qd,ss(void 0,this)),i.has("environment")&&this.records.set(Ni,ss(void 0,this));const l=this.records.get(nc);null!=l&&"string"==typeof l.value&&this.scopes.add(l.value),this.injectorDefTypes=new Set(this.get(ef.multi,Le,gt.Self))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const t of this._ngOnDestroyHooks)t.ngOnDestroy();for(const t of this._onDestroyHooks)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),this._onDestroyHooks.length=0}}onDestroy(t){this._onDestroyHooks.push(t)}runInContext(t){this.assertNotDestroyed();const n=se(this),r=nt(void 0);try{return t()}finally{se(n),nt(r)}}get(t,n=Nt,r=gt.Default){this.assertNotDestroyed(),r=vt(r);const i=se(this),l=nt(void 0);try{if(!(r>.SkipSelf)){let p=this.records.get(t);if(void 0===p){const y=function ey(e){return"function"==typeof e||"object"==typeof e&&e instanceof _n}(t)&&pn(t);p=y&&this.injectableDefInScope(y)?ss(oc(t),ka):null,this.records.set(t,p)}if(null!=p)return this.hydrate(t,p)}return(r>.Self?Na():this.parent).get(t,n=r>.Optional&&n===Nt?null:n)}catch(u){if("NullInjectorError"===u.name){if((u[zt]=u[zt]||[]).unshift(S(t)),i)throw u;return function Ln(e,t,n,r){const i=e[zt];throw t[En]&&i.unshift(t[En]),e.message=function mn(e,t,n,r=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let i=S(t);if(Array.isArray(t))i=t.map(S).join(" -> ");else if("object"==typeof t){let l=[];for(let u in t)if(t.hasOwnProperty(u)){let p=t[u];l.push(u+":"+("string"==typeof p?JSON.stringify(p):S(p)))}i=`{${l.join(", ")}}`}return`${n}${r?"("+r+")":""}[${i}]: ${e.replace(jn,"\n ")}`}("\n"+e.message,i,n,r),e.ngTokenPath=i,e[zt]=null,e}(u,t,"R3InjectorError",this.source)}throw u}finally{nt(l),se(i)}}resolveInjectorInitializers(){const t=se(this),n=nt(void 0);try{const r=this.get(Jl.multi,Le,gt.Self);for(const i of r)i()}finally{se(t),nt(n)}}toString(){const t=[],n=this.records;for(const r of n.keys())t.push(S(r));return`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new ie(205,!1)}processProvider(t){let n=ki(t=P(t))?t:P(t&&t.provide);const r=function Zv(e){return tc(e)?ss(void 0,e.useValue):ss(cf(e),ka)}(t);if(ki(t)||!0!==t.multi)this.records.get(n);else{let i=this.records.get(n);i||(i=ss(void 0,ka,!0),i.factory=()=>Ht(i.multi),this.records.set(n,i)),n=t,i.multi.push(t)}this.records.set(n,r)}hydrate(t,n){return n.value===ka&&(n.value=Xv,n.value=n.factory()),"object"==typeof n.value&&n.value&&function Qv(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=P(t.providedIn);return"string"==typeof n?"any"===n||this.scopes.has(n):this.injectorDefTypes.has(n)}}function oc(e){const t=pn(e),n=null!==t?t.factory:nr(e);if(null!==n)return n;if(e instanceof _n)throw new ie(204,!1);if(e instanceof Function)return function qv(e){const t=e.length;if(t>0)throw bt(t,"?"),new ie(204,!1);const n=function it(e){const t=e&&(e[Vt]||e[Vn]);if(t){const n=function Xt(e){if(e.hasOwnProperty("name"))return e.name;const t=(""+e).match(/^function\s*([^\s(]+)/);return null===t?"":t[1]}(e);return console.warn(`DEPRECATED: DI is instantiating a token "${n}" that inherits its @Injectable decorator but does not provide one itself.\nThis will become an error in a future version of Angular. Please add @Injectable() to the "${n}" class.`),t}return null}(e);return null!==n?()=>n.factory(e):()=>new e}(e);throw new ie(204,!1)}function cf(e,t,n){let r;if(ki(e)){const i=P(e);return nr(i)||oc(i)}if(tc(e))r=()=>P(e.useValue);else if(function af(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...Ht(e.deps||[]));else if(function sf(e){return!(!e||!e.useExisting)}(e))r=()=>He(P(e.useExisting));else{const i=P(e&&(e.useClass||e.provide));if(!function Jv(e){return!!e.deps}(e))return nr(i)||oc(i);r=()=>new i(...Ht(e.deps))}return r}function ss(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function ic(e,t){for(const n of e)Array.isArray(n)?ic(n,t):n&&pe(n)?ic(n.\u0275providers,t):t(n)}class ty{}class uf{}class ry{resolveComponentFactory(t){throw function ny(e){const t=Error(`No component factory found for ${S(e)}. Did you add it to @NgModule.entryComponents?`);return t.ngComponent=e,t}(t)}}let Zs=(()=>{class e{}return e.NULL=new ry,e})();function oy(){return as(Mn(),Ve())}function as(e,t){return new Js(Jn(e,t))}let Js=(()=>{class e{constructor(n){this.nativeElement=n}}return e.__NG_ELEMENT_ID__=oy,e})();function iy(e){return e instanceof Js?e.nativeElement:e}class ff{}let sy=(()=>{class e{}return e.__NG_ELEMENT_ID__=()=>function ay(){const e=Ve(),n=rr(Mn().index,e);return(Fn(n)?n:e)[11]}(),e})(),ly=(()=>{class e{}return e.\u0275prov=wt({token:e,providedIn:"root",factory:()=>null}),e})();class hf{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const cy=new hf("15.0.1"),sc={};function lc(e){return e.ngOriginalError}class Qs{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t);this._console.error("ERROR",t),n&&this._console.error("ORIGINAL ERROR",n)}_findOriginalError(t){let n=t&&lc(t);for(;n&&lc(n);)n=lc(n);return n||null}}function pf(e){return e.ownerDocument}function ni(e){return e instanceof Function?e():e}function mf(e,t,n){let r=e.length;for(;;){const i=e.indexOf(t,n);if(-1===i)return i;if(0===i||e.charCodeAt(i-1)<=32){const l=t.length;if(i+l===r||e.charCodeAt(i+l)<=32)return i}n=i+1}}const vf="ng-template";function Dy(e,t,n){let r=0;for(;rl?"":i[J+1].toLowerCase();const Oe=8&r?me:null;if(Oe&&-1!==mf(Oe,I,0)||2&r&&I!==me){if(Io(r))return!1;u=!0}}}}else{if(!u&&!Io(r)&&!Io(y))return!1;if(u&&Io(y))continue;u=!1,r=y|1&r}}return Io(r)||u}function Io(e){return 0==(1&e)}function _y(e,t,n,r){if(null===t)return-1;let i=0;if(r||!n){let l=!1;for(;i-1)for(n++;n0?'="'+p+'"':"")+"]"}else 8&r?i+="."+u:4&r&&(i+=" "+u);else""!==i&&!Io(u)&&(t+=bf(l,i),i=""),r=u,l=l||!Io(r);n++}return""!==i&&(t+=bf(l,i)),t}const Gt={};function Cf(e){_f(At(),Ve(),lt()+e,!1)}function _f(e,t,n,r){if(!r)if(3==(3&t[2])){const l=e.preOrderCheckHooks;null!==l&&Vr(t,l,n)}else{const l=e.preOrderHooks;null!==l&&Mr(t,l,0,n)}qt(n)}function Sf(e,t=null,n=null,r){const i=Mf(e,t,n,r);return i.resolveInjectorInitializers(),i}function Mf(e,t=null,n=null,r,i=new Set){const l=[n||Le,Yv(e)];return r=r||("object"==typeof e?void 0:S(e)),new lf(l,t||Na(),r||null,i)}let Li=(()=>{class e{static create(n,r){if(Array.isArray(n))return Sf({name:""},r,n,"");{const i=n.name??"";return Sf({name:i},n.parent,n.providers,i)}}}return e.THROW_IF_NOT_FOUND=Nt,e.NULL=new tf,e.\u0275prov=wt({token:e,providedIn:"any",factory:()=>He(Qd)}),e.__NG_ELEMENT_ID__=-1,e})();function us(e,t=gt.Default){const n=Ve();return null===n?He(e,t):ts(Mn(),n,P(e),t)}function Ff(){throw new Error("invalid")}function $a(e,t){return e<<17|t<<2}function So(e){return e>>17&32767}function hc(e){return 2|e}function ri(e){return(131068&e)>>2}function pc(e,t){return-131069&e|t<<2}function gc(e){return 1|e}function Gf(e,t){const n=e.contentQueries;if(null!==n)for(let r=0;r22&&_f(e,t,22,!1),n(r,i)}finally{qt(l)}}function Ic(e,t,n){if(qn(t)){const i=t.directiveEnd;for(let l=t.directiveStart;l0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(u)!=p&&u.push(p),u.push(n,r,l)}}(e,t,r,ea(e,n,i.hostVars,Gt),i)}function w0(e,t,n){const r=Jn(t,e),i=Wf(n),l=e[10],u=Ua(e,Ha(e,i,null,n.onPush?32:16,r,t,l,l.createRenderer(r,n),null,null,null));e[t.index]=u}function Vo(e,t,n,r,i,l){const u=Jn(e,t);!function Oc(e,t,n,r,i,l,u){if(null==l)e.removeAttribute(t,i,n);else{const p=null==u?re(l):u(l,r||"",i);e.setAttribute(t,i,p,n)}}(t[11],u,l,e.value,n,r,i)}function E0(e,t,n,r,i,l){const u=l[t];if(null!==u){const p=r.setInput;for(let y=0;y0&&Rc(n)}}function Rc(e){for(let r=kl(e);null!==r;r=Nl(r))for(let i=10;i0&&Rc(l)}const n=e[1].components;if(null!==n)for(let r=0;r0&&Rc(i)}}function T0(e,t){const n=rr(t,e),r=n[1];(function x0(e,t){for(let n=t.length;n-1&&(Bl(t,r),ft(n,r))}this._attachedToViewContainer=!1}Id(this._lView[1],this._lView)}onDestroy(t){Kf(this._lView[1],this._lView,null,t)}markForCheck(){Pc(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-65}reattach(){this._lView[2]|=64}detectChanges(){za(this._lView[1],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new ie(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function lv(e,t){Ws(e,t,t[11],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new ie(902,!1);this._appRef=t}}class O0 extends ta{constructor(t){super(t),this._view=t}detectChanges(){const t=this._view;za(t[1],t,t[8],!1)}checkNoChanges(){}get context(){return null}}class Nc extends Zs{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const n=$t(t);return new na(n,this.ngModule)}}function ih(e){const t=[];for(let n in e)e.hasOwnProperty(n)&&t.push({propName:e[n],templateName:n});return t}class P0{constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){r=vt(r);const i=this.injector.get(t,sc,r);return i!==sc||n===sc?i:this.parentInjector.get(t,n,r)}}class na extends uf{constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function Ay(e){return e.map(My).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}get inputs(){return ih(this.componentDef.inputs)}get outputs(){return ih(this.componentDef.outputs)}create(t,n,r,i){let l=(i=i||this.ngModule)instanceof Ni?i:i?.injector;l&&null!==this.componentDef.getStandaloneInjector&&(l=this.componentDef.getStandaloneInjector(l)||l);const u=l?new P0(t,l):t,p=u.get(ff,null);if(null===p)throw new ie(407,!1);const y=u.get(ly,null),I=p.createRenderer(null,this.componentDef),V=this.componentDef.selectors[0][0]||"div",J=r?function c0(e,t,n){return e.selectRootElement(t,n===ee.ShadowDom)}(I,r,this.componentDef.encapsulation):$l(I,V,function R0(e){const t=e.toLowerCase();return"svg"===t?"svg":"math"===t?"math":null}(V)),me=this.componentDef.onPush?288:272,Oe=Ac(0,null,null,1,0,null,null,null,null,null),Ge=Ha(null,Oe,null,me,null,null,p,I,y,u,null);let tt,ct;Ki(Ge);try{const mt=this.componentDef;let xt,Ze=null;mt.findHostDirectiveDefs?(xt=[],Ze=new Map,mt.findHostDirectiveDefs(mt,xt,Ze),xt.push(mt)):xt=[mt];const Lt=function N0(e,t){const n=e[1];return e[22]=t,ds(n,22,2,"#host",null)}(Ge,J),In=function L0(e,t,n,r,i,l,u,p){const y=i[1];!function $0(e,t,n,r){for(const i of e)t.mergedAttrs=ao(t.mergedAttrs,i.hostAttrs);null!==t.mergedAttrs&&(Ga(t,t.mergedAttrs,!0),null!==n&&Ld(r,n,t))}(r,e,t,u);const I=l.createRenderer(t,n),V=Ha(i,Wf(n),null,n.onPush?32:16,i[e.index],e,l,I,p||null,null,null);return y.firstCreatePass&&xc(y,e,r.length-1),Ua(i,V),i[e.index]=V}(Lt,J,mt,xt,Ge,p,I);ct=Kr(Oe,22),J&&function V0(e,t,n,r){if(r)pi(e,n,["ng-version",cy.full]);else{const{attrs:i,classes:l}=function Ty(e){const t=[],n=[];let r=1,i=2;for(;r0&&Nd(e,n,l.join(" "))}}(I,mt,J,r),void 0!==n&&function H0(e,t,n){const r=e.projection=[];for(let i=0;i=0;r--){const i=e[r];i.hostVars=t+=i.hostVars,i.hostAttrs=ao(i.hostAttrs,n=ao(n,i.hostAttrs))}}(r)}function $c(e){return e===Se?{}:e===Le?[]:e}function z0(e,t){const n=e.viewQuery;e.viewQuery=n?(r,i)=>{t(r,i),n(r,i)}:t}function G0(e,t){const n=e.contentQueries;e.contentQueries=n?(r,i,l)=>{t(r,i,l),n(r,i,l)}:t}function Y0(e,t){const n=e.hostBindings;e.hostBindings=n?(r,i)=>{t(r,i),n(r,i)}:t}let Wa=null;function $i(){if(!Wa){const e=Ct.Symbol;if(e&&e.iterator)Wa=e.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let n=0;nu(Sn(Lt[r.index])):r.index;let Ze=null;if(!u&&p&&(Ze=function sD(e,t,n,r){const i=e.cleanup;if(null!=i)for(let l=0;ly?p[y]:null}"string"==typeof u&&(l+=2)}return null}(e,t,i,r.index)),null!==Ze)(Ze.__ngLastListenerFn__||Ze).__ngNextListenerFn__=l,Ze.__ngLastListenerFn__=l,me=!1;else{l=Mh(r,t,V,l,!1);const Lt=n.listen(ct,i,l);J.push(l,Lt),I&&I.push(i,xt,mt,mt+1)}}else l=Mh(r,t,V,l,!1);const Oe=r.outputs;let Ge;if(me&&null!==Oe&&(Ge=Oe[i])){const tt=Ge.length;if(tt)for(let ct=0;ct-1?rr(e.index,t):t);let y=Sh(t,0,r,u),I=l.__ngNextListenerFn__;for(;I;)y=Sh(t,0,I,u)&&y,I=I.__ngNextListenerFn__;return i&&!1===y&&(u.preventDefault(),u.returnValue=!1),y}}function Ah(e=1){return function $e(e){return(a.lFrame.contextLView=function Xe(e,t){for(;e>0;)t=t[15],e--;return t}(e,a.lFrame.contextLView))[8]}(e)}function aD(e,t){let n=null;const r=function wy(e){const t=e.attrs;if(null!=t){const n=t.indexOf(5);if(0==(1&n))return t[n+1]}return null}(e);for(let i=0;i=0}const ir={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Hh(e){return e.substring(ir.key,ir.keyEnd)}function jh(e,t){const n=ir.textEnd;return n===t?-1:(t=ir.keyEnd=function pD(e,t,n){for(;t32;)t++;return t}(e,ir.key=t,n),Cs(e,t,n))}function Cs(e,t,n){for(;t=0;n=jh(t,n))Cr(e,Hh(t),!0)}function Mo(e,t,n,r){const i=Ve(),l=At(),u=Br(2);l.firstUpdatePass&&Xh(l,e,u,r),t!==Gt&&wr(i,u,t)&&Zh(l,l.data[lt()],i,i[11],e,i[u+1]=function ED(e,t){return null==e||("string"==typeof t?e+=t:"object"==typeof e&&(e=S(wi(e)))),e}(t,n),r,u)}function Kh(e,t){return t>=e.expandoStartIndex}function Xh(e,t,n,r){const i=e.data;if(null===i[n+1]){const l=i[lt()],u=Kh(e,n);Qh(l,r)&&null===t&&!u&&(t=!1),t=function yD(e,t,n,r){const i=function Mi(e){const t=a.lFrame.currentDirectiveIndex;return-1===t?null:e[t]}(e);let l=r?t.residualClasses:t.residualStyles;if(null===i)0===(r?t.classBindings:t.styleBindings)&&(n=ia(n=Zc(null,e,t,n,r),t.attrs,r),l=null);else{const u=t.directiveStylingLast;if(-1===u||e[u]!==i)if(n=Zc(i,e,t,n,r),null===l){let y=function DD(e,t,n){const r=n?t.classBindings:t.styleBindings;if(0!==ri(r))return e[So(r)]}(e,t,r);void 0!==y&&Array.isArray(y)&&(y=Zc(null,e,t,y[1],r),y=ia(y,t.attrs,r),function bD(e,t,n,r){e[So(n?t.classBindings:t.styleBindings)]=r}(e,t,r,y))}else l=function CD(e,t,n){let r;const i=t.directiveEnd;for(let l=1+t.directiveStylingLast;l0)&&(I=!0)}else V=n;if(i)if(0!==y){const me=So(e[p+1]);e[r+1]=$a(me,p),0!==me&&(e[me+1]=pc(e[me+1],r)),e[p+1]=function Ky(e,t){return 131071&e|t<<17}(e[p+1],r)}else e[r+1]=$a(p,0),0!==p&&(e[p+1]=pc(e[p+1],r)),p=r;else e[r+1]=$a(y,0),0===p?p=r:e[y+1]=pc(e[y+1],r),y=r;I&&(e[r+1]=hc(e[r+1])),Vh(e,V,r,!0),Vh(e,V,r,!1),function cD(e,t,n,r,i){const l=i?e.residualClasses:e.residualStyles;null!=l&&"string"==typeof t&&_i(l,t)>=0&&(n[r+1]=gc(n[r+1]))}(t,V,e,r,l),u=$a(p,y),l?t.classBindings=u:t.styleBindings=u}(i,l,t,n,u,r)}}function Zc(e,t,n,r,i){let l=null;const u=n.directiveEnd;let p=n.directiveStylingLast;for(-1===p?p=n.directiveStart:p++;p0;){const y=e[i],I=Array.isArray(y),V=I?y[1]:y,J=null===V;let me=n[i+1];me===Gt&&(me=J?Le:void 0);let Oe=J?Ri(me,r):V===r?me:void 0;if(I&&!Ja(Oe)&&(Oe=Ri(y,r)),Ja(Oe)&&(p=Oe,u))return p;const Ge=e[i+1];i=u?So(Ge):ri(Ge)}if(null!==t){let y=l?t.residualClasses:t.residualStyles;null!=y&&(p=Ri(y,r))}return p}function Ja(e){return void 0!==e}function Qh(e,t){return 0!=(e.flags&(t?8:16))}function ep(e,t=""){const n=Ve(),r=At(),i=e+22,l=r.firstCreatePass?ds(r,i,1,t,null):r.data[i],u=n[i]=function Ll(e,t){return e.createText(t)}(n[11],t);xa(r,n,u,l),br(l,!1)}function Jc(e){return Qa("",e,""),Jc}function Qa(e,t,n){const r=Ve(),i=hs(r,e,t,n);return i!==Gt&&oi(r,lt(),i),Qa}function Qc(e,t,n,r,i){const l=Ve(),u=function ps(e,t,n,r,i,l){const p=Bi(e,oo(),n,i);return Br(2),p?t+re(n)+r+re(i)+l:Gt}(l,e,t,n,r,i);return u!==Gt&&oi(l,lt(),u),Qc}function eu(e,t,n,r,i,l,u){const p=Ve(),y=function gs(e,t,n,r,i,l,u,p){const I=Ka(e,oo(),n,i,u);return Br(3),I?t+re(n)+r+re(i)+l+re(u)+p:Gt}(p,e,t,n,r,i,l,u);return y!==Gt&&oi(p,lt(),y),eu}const Vi=void 0;var zD=["en",[["a","p"],["AM","PM"],Vi],[["AM","PM"],Vi,Vi],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],Vi,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],Vi,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",Vi,"{1} 'at' {0}",Vi],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",function UD(e){const n=Math.floor(Math.abs(e)),r=e.toString().replace(/^[^.]*\.?/,"").length;return 1===n&&0===r?1:5}];let _s={};function tu(e){const t=function GD(e){return e.toLowerCase().replace(/_/g,"-")}(e);let n=Dp(t);if(n)return n;const r=t.split("-")[0];if(n=Dp(r),n)return n;if("en"===r)return zD;throw new ie(701,!1)}function yp(e){return tu(e)[Ot.PluralCase]}function Dp(e){return e in _s||(_s[e]=Ct.ng&&Ct.ng.common&&Ct.ng.common.locales&&Ct.ng.common.locales[e]),_s[e]}var Ot=(()=>((Ot=Ot||{})[Ot.LocaleId=0]="LocaleId",Ot[Ot.DayPeriodsFormat=1]="DayPeriodsFormat",Ot[Ot.DayPeriodsStandalone=2]="DayPeriodsStandalone",Ot[Ot.DaysFormat=3]="DaysFormat",Ot[Ot.DaysStandalone=4]="DaysStandalone",Ot[Ot.MonthsFormat=5]="MonthsFormat",Ot[Ot.MonthsStandalone=6]="MonthsStandalone",Ot[Ot.Eras=7]="Eras",Ot[Ot.FirstDayOfWeek=8]="FirstDayOfWeek",Ot[Ot.WeekendRange=9]="WeekendRange",Ot[Ot.DateFormat=10]="DateFormat",Ot[Ot.TimeFormat=11]="TimeFormat",Ot[Ot.DateTimeFormat=12]="DateTimeFormat",Ot[Ot.NumberSymbols=13]="NumberSymbols",Ot[Ot.NumberFormats=14]="NumberFormats",Ot[Ot.CurrencyCode=15]="CurrencyCode",Ot[Ot.CurrencySymbol=16]="CurrencySymbol",Ot[Ot.CurrencyName=17]="CurrencyName",Ot[Ot.Currencies=18]="Currencies",Ot[Ot.Directionality=19]="Directionality",Ot[Ot.PluralCase=20]="PluralCase",Ot[Ot.ExtraData=21]="ExtraData",Ot))();const ws="en-US";let bp=ws;function ou(e,t,n,r,i){if(e=P(e),Array.isArray(e))for(let l=0;l>20;if(ki(e)||!e.multi){const Oe=new fi(y,i,us),Ge=su(p,t,i?V:V+me,J);-1===Ge?(es(Ji(I,u),l,p),iu(l,e,t.length),t.push(p),I.directiveStart++,I.directiveEnd++,i&&(I.providerIndexes+=1048576),n.push(Oe),u.push(Oe)):(n[Ge]=Oe,u[Ge]=Oe)}else{const Oe=su(p,t,V+me,J),Ge=su(p,t,V,V+me),tt=Oe>=0&&n[Oe],ct=Ge>=0&&n[Ge];if(i&&!ct||!i&&!tt){es(Ji(I,u),l,p);const mt=function jb(e,t,n,r,i){const l=new fi(e,n,us);return l.multi=[],l.index=t,l.componentProviders=0,Gp(l,i,r&&!n),l}(i?Hb:Vb,n.length,i,r,y);!i&&ct&&(n[Ge].providerFactory=mt),iu(l,e,t.length,0),t.push(p),I.directiveStart++,I.directiveEnd++,i&&(I.providerIndexes+=1048576),n.push(mt),u.push(mt)}else iu(l,e,Oe>-1?Oe:Ge,Gp(n[i?Ge:Oe],y,!i&&r));!i&&r&&ct&&n[Ge].componentProviders++}}}function iu(e,t,n,r){const i=ki(t),l=function Kv(e){return!!e.useClass}(t);if(i||l){const y=(l?P(t.useClass):t).prototype.ngOnDestroy;if(y){const I=e.destroyHooks||(e.destroyHooks=[]);if(!i&&t.multi){const V=I.indexOf(n);-1===V?I.push(n,[r,y]):I[V+1].push(r,y)}else I.push(n,y)}}}function Gp(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function su(e,t,n,r){for(let i=n;i{n.providersResolver=(r,i)=>function Bb(e,t,n){const r=At();if(r.firstCreatePass){const i=Gn(e);ou(n,r.data,r.blueprint,i,!0),ou(t,r.data,r.blueprint,i,!1)}}(r,i?i(e):e,t)}}class Es{}class Wp{}function Ub(e,t){return new Kp(e,t??null)}class Kp extends Es{constructor(t,n){super(),this._parent=n,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Nc(this);const r=On(t);this._bootstrapComponents=ni(r.bootstrap),this._r3Injector=Mf(t,n,[{provide:Es,useValue:this},{provide:Zs,useValue:this.componentFactoryResolver}],S(t),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(t)}get injector(){return this._r3Injector}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class lu extends Wp{constructor(t){super(),this.moduleType=t}create(t){return new Kp(this.moduleType,t)}}class zb extends Es{constructor(t,n,r){super(),this.componentFactoryResolver=new Nc(this),this.instance=null;const i=new lf([...t,{provide:Es,useValue:this},{provide:Zs,useValue:this.componentFactoryResolver}],n||Na(),r,new Set(["environment"]));this.injector=i,i.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}}function cu(e,t,n=null){return new zb(e,t,n).injector}let Gb=(()=>{class e{constructor(n){this._injector=n,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n.id)){const r=nf(0,n.type),i=r.length>0?cu([r],this._injector,`Standalone[${n.type.name}]`):null;this.cachedInjectors.set(n.id,i)}return this.cachedInjectors.get(n.id)}ngOnDestroy(){try{for(const n of this.cachedInjectors.values())null!==n&&n.destroy()}finally{this.cachedInjectors.clear()}}}return e.\u0275prov=wt({token:e,providedIn:"environment",factory:()=>new e(He(Ni))}),e})();function Xp(e){e.getStandaloneInjector=t=>t.get(Gb).getOrCreateStandaloneInjector(e)}function ng(e,t,n,r){return sg(Ve(),lr(),e,t,n,r)}function rg(e,t,n,r,i){return ag(Ve(),lr(),e,t,n,r,i)}function og(e,t,n,r,i,l){return lg(Ve(),lr(),e,t,n,r,i,l)}function ig(e,t,n,r,i,l,u,p,y){const I=lr()+e,V=Ve(),J=function co(e,t,n,r,i,l){const u=Bi(e,t,n,r);return Bi(e,t+2,i,l)||u}(V,I,n,r,i,l);return Bi(V,I+4,u,p)||J?Ho(V,I+6,y?t.call(y,n,r,i,l,u,p):t(n,r,i,l,u,p)):function oa(e,t){return e[t]}(V,I+6)}function da(e,t){const n=e[t];return n===Gt?void 0:n}function sg(e,t,n,r,i,l){const u=t+n;return wr(e,u,i)?Ho(e,u+1,l?r.call(l,i):r(i)):da(e,u+1)}function ag(e,t,n,r,i,l,u){const p=t+n;return Bi(e,p,i,l)?Ho(e,p+2,u?r.call(u,i,l):r(i,l)):da(e,p+2)}function lg(e,t,n,r,i,l,u,p){const y=t+n;return Ka(e,y,i,l,u)?Ho(e,y+3,p?r.call(p,i,l,u):r(i,l,u)):da(e,y+3)}function dg(e,t){const n=At();let r;const i=e+22;n.firstCreatePass?(r=function sC(e,t){if(t)for(let n=t.length-1;n>=0;n--){const r=t[n];if(e===r.name)return r}}(t,n.pipeRegistry),n.data[i]=r,r.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(i,r.onDestroy)):r=n.data[i];const l=r.factory||(r.factory=nr(r.type)),u=nt(us);try{const p=Zi(!1),y=l();return Zi(p),function rD(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}(n,Ve(),i,y),y}finally{nt(u)}}function fg(e,t,n){const r=e+22,i=Ve(),l=no(i,r);return fa(i,r)?sg(i,lr(),t,l.transform,n,l):l.transform(n)}function hg(e,t,n,r){const i=e+22,l=Ve(),u=no(l,i);return fa(l,i)?ag(l,lr(),t,u.transform,n,r,u):u.transform(n,r)}function pg(e,t,n,r,i){const l=e+22,u=Ve(),p=no(u,l);return fa(u,l)?lg(u,lr(),t,p.transform,n,r,i,p):p.transform(n,r,i)}function fa(e,t){return e[1].data[t].pure}function du(e){return t=>{setTimeout(e,void 0,t)}}const zo=class cC extends o.x{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){let i=t,l=n||(()=>null),u=r;if(t&&"object"==typeof t){const y=t;i=y.next?.bind(y),l=y.error?.bind(y),u=y.complete?.bind(y)}this.__isAsync&&(l=du(l),i&&(i=du(i)),u&&(u=du(u)));const p=super.subscribe({next:i,error:l,complete:u});return t instanceof x.w0&&t.add(p),p}};function uC(){return this._results[$i()]()}class fu{constructor(t=!1){this._emitDistinctChangesOnly=t,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const n=$i(),r=fu.prototype;r[n]||(r[n]=uC)}get changes(){return this._changes||(this._changes=new zo)}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){const r=this;r.dirty=!1;const i=z(t);(this._changesDetected=!function $(e,t,n){if(e.length!==t.length)return!1;for(let r=0;r{class e{}return e.__NG_ELEMENT_ID__=hC,e})();const dC=ha,fC=class extends dC{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}createEmbeddedView(t,n){const r=this._declarationTContainer.tViews,i=Ha(this._declarationLView,r,t,16,null,r.declTNode,null,null,null,null,n||null);i[17]=this._declarationLView[this._declarationTContainer.index];const u=this._declarationLView[19];return null!==u&&(i[19]=u.createEmbeddedView(r)),Ec(r,i,t),new ta(i)}};function hC(){return ol(Mn(),Ve())}function ol(e,t){return 4&e.type?new fC(t,e,as(e,t)):null}let il=(()=>{class e{}return e.__NG_ELEMENT_ID__=pC,e})();function pC(){return vg(Mn(),Ve())}const gC=il,gg=class extends gC{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return as(this._hostTNode,this._hostLView)}get injector(){return new Ti(this._hostTNode,this._hostLView)}get parentInjector(){const t=Qi(this._hostTNode,this._hostLView);if(ba(t)){const n=gi(t,this._hostLView),r=Zo(t);return new Ti(n[1].data[r+8],n)}return new Ti(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=mg(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-10}createEmbeddedView(t,n,r){let i,l;"number"==typeof r?i=r:null!=r&&(i=r.index,l=r.injector);const u=t.createEmbeddedView(n||{},l);return this.insert(u,i),u}createComponent(t,n,r,i,l){const u=t&&!function m(e){return"function"==typeof e}(t);let p;if(u)p=n;else{const J=n||{};p=J.index,r=J.injector,i=J.projectableNodes,l=J.environmentInjector||J.ngModuleRef}const y=u?t:new na($t(t)),I=r||this.parentInjector;if(!l&&null==y.ngModule){const me=(u?I:this.parentInjector).get(Ni,null);me&&(l=me)}const V=y.create(I,i,void 0,l);return this.insert(V.hostView,p),V}insert(t,n){const r=t._lView,i=r[1];if(function Ui(e){return zn(e[3])}(r)){const V=this.indexOf(t);if(-1!==V)this.detach(V);else{const J=r[3],me=new gg(J,J[6],J[3]);me.detach(me.indexOf(t))}}const l=this._adjustIndex(n),u=this._lContainer;!function uv(e,t,n,r){const i=10+r,l=n.length;r>0&&(n[i-1][4]=t),r0)r.push(u[p/2]);else{const I=l[p+1],V=t[-y];for(let J=10;J{class e{constructor(n){this.appInits=n,this.resolve=al,this.reject=al,this.initialized=!1,this.done=!1,this.donePromise=new Promise((r,i)=>{this.resolve=r,this.reject=i})}runInitializers(){if(this.initialized)return;const n=[],r=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let i=0;i{l.subscribe({complete:p,error:y})});n.push(u)}}Promise.all(n).then(()=>{r()}).catch(i=>{this.reject(i)}),0===n.length&&r(),this.initialized=!0}}return e.\u0275fac=function(n){return new(n||e)(He(Yg,8))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const Wg=new _n("AppId",{providedIn:"root",factory:function Kg(){return`${wu()}${wu()}${wu()}`}});function wu(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const Xg=new _n("Platform Initializer"),UC=new _n("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),qg=new _n("appBootstrapListener");let zC=(()=>{class e{log(n){console.log(n)}warn(n){console.warn(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();const cl=new _n("LocaleId",{providedIn:"root",factory:()=>pt(cl,gt.Optional|gt.SkipSelf)||function GC(){return typeof $localize<"u"&&$localize.locale||ws}()}),YC=new _n("DefaultCurrencyCode",{providedIn:"root",factory:()=>"USD"});class WC{constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}}let KC=(()=>{class e{compileModuleSync(n){return new lu(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){const r=this.compileModuleSync(n),l=ni(On(n).declarations).reduce((u,p)=>{const y=$t(p);return y&&u.push(new na(y)),u},[]);return new WC(r,l)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const ZC=(()=>Promise.resolve(0))();function Eu(e){typeof Zone>"u"?ZC.then(()=>{e&&e.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",e)}class uo{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new zo(!1),this.onMicrotaskEmpty=new zo(!1),this.onStable=new zo(!1),this.onError=new zo(!1),typeof Zone>"u")throw new ie(908,!1);Zone.assertZonePatched();const i=this;i._nesting=0,i._outer=i._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(i._inner=i._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(i._inner=i._inner.fork(Zone.longStackTraceZoneSpec)),i.shouldCoalesceEventChangeDetection=!r&&n,i.shouldCoalesceRunChangeDetection=r,i.lastRequestAnimationFrameId=-1,i.nativeRequestAnimationFrame=function JC(){let e=Ct.requestAnimationFrame,t=Ct.cancelAnimationFrame;if(typeof Zone<"u"&&e&&t){const n=e[Zone.__symbol__("OriginalDelegate")];n&&(e=n);const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r)}return{nativeRequestAnimationFrame:e,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function t_(e){const t=()=>{!function e_(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(Ct,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,Su(e),e.isCheckStableRunning=!0,Iu(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),Su(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,i,l,u,p)=>{try{return Qg(e),n.invokeTask(i,l,u,p)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===l.type||e.shouldCoalesceRunChangeDetection)&&t(),em(e)}},onInvoke:(n,r,i,l,u,p,y)=>{try{return Qg(e),n.invoke(i,l,u,p,y)}finally{e.shouldCoalesceRunChangeDetection&&t(),em(e)}},onHasTask:(n,r,i,l)=>{n.hasTask(i,l),r===i&&("microTask"==l.change?(e._hasPendingMicrotasks=l.microTask,Su(e),Iu(e)):"macroTask"==l.change&&(e.hasPendingMacrotasks=l.macroTask))},onHandleError:(n,r,i,l)=>(n.handleError(i,l),e.runOutsideAngular(()=>e.onError.emit(l)),!1)})}(i)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!uo.isInAngularZone())throw new ie(909,!1)}static assertNotInAngularZone(){if(uo.isInAngularZone())throw new ie(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,i){const l=this._inner,u=l.scheduleEventTask("NgZoneEvent: "+i,t,QC,al,al);try{return l.runTask(u,n,r)}finally{l.cancelTask(u)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const QC={};function Iu(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function Su(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function Qg(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function em(e){e._nesting--,Iu(e)}class n_{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new zo,this.onMicrotaskEmpty=new zo,this.onStable=new zo,this.onError=new zo}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,i){return t.apply(n,r)}}const tm=new _n(""),nm=new _n("");let Mu,r_=(()=>{class e{constructor(n,r,i){this._ngZone=n,this.registry=r,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,Mu||(function o_(e){Mu=e}(i),i.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{uo.assertNotInAngularZone(),Eu(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())Eu(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,i){let l=-1;r&&r>0&&(l=setTimeout(()=>{this._callbacks=this._callbacks.filter(u=>u.timeoutId!==l),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:l,updateCb:i})}whenStable(n,r,i){if(i&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,i),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,i){return[]}}return e.\u0275fac=function(n){return new(n||e)(He(uo),He(rm),He(nm))},e.\u0275prov=wt({token:e,factory:e.\u0275fac}),e})(),rm=(()=>{class e{constructor(){this._applications=new Map}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return Mu?.findTestabilityInTree(this,n,r)??null}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})(),Si=null;const om=new _n("AllowMultipleToken"),Au=new _n("PlatformDestroyListeners");class a_{constructor(t,n){this.name=t,this.token=n}}function sm(e,t,n=[]){const r=`Platform: ${t}`,i=new _n(r);return(l=[])=>{let u=Tu();if(!u||u.injector.get(om,!1)){const p=[...n,...l,{provide:i,useValue:!0}];e?e(p):function l_(e){if(Si&&!Si.get(om,!1))throw new ie(400,!1);Si=e;const t=e.get(lm);(function im(e){const t=e.get(Xg,null);t&&t.forEach(n=>n())})(e)}(function am(e=[],t){return Li.create({name:t,providers:[{provide:nc,useValue:"platform"},{provide:Au,useValue:new Set([()=>Si=null])},...e]})}(p,r))}return function u_(e){const t=Tu();if(!t)throw new ie(401,!1);return t}()}}function Tu(){return Si?.get(lm)??null}let lm=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const i=function um(e,t){let n;return n="noop"===e?new n_:("zone.js"===e?void 0:e)||new uo(t),n}(r?.ngZone,function cm(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!(!e||!e.ngZoneEventCoalescing)||!1,shouldCoalesceRunChangeDetection:!(!e||!e.ngZoneRunCoalescing)||!1}}(r)),l=[{provide:uo,useValue:i}];return i.run(()=>{const u=Li.create({providers:l,parent:this.injector,name:n.moduleType.name}),p=n.create(u),y=p.injector.get(Qs,null);if(!y)throw new ie(402,!1);return i.runOutsideAngular(()=>{const I=i.onError.subscribe({next:V=>{y.handleError(V)}});p.onDestroy(()=>{dl(this._modules,p),I.unsubscribe()})}),function dm(e,t,n){try{const r=n();return Wc(r)?r.catch(i=>{throw t.runOutsideAngular(()=>e.handleError(i)),i}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(y,i,()=>{const I=p.injector.get(ll);return I.runInitializers(),I.donePromise.then(()=>(function Cp(e){et(e,"Expected localeId to be defined"),"string"==typeof e&&(bp=e.toLowerCase().replace(/_/g,"-"))}(p.injector.get(cl,ws)||ws),this._moduleDoBootstrap(p),p))})})}bootstrapModule(n,r=[]){const i=fm({},r);return function i_(e,t,n){const r=new lu(n);return Promise.resolve(r)}(0,0,n).then(l=>this.bootstrapModuleFactory(l,i))}_moduleDoBootstrap(n){const r=n.injector.get(ul);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(i=>r.bootstrap(i));else{if(!n.instance.ngDoBootstrap)throw new ie(403,!1);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new ie(404,!1);this._modules.slice().forEach(r=>r.destroy()),this._destroyListeners.forEach(r=>r());const n=this._injector.get(Au,null);n&&(n.forEach(r=>r()),n.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}}return e.\u0275fac=function(n){return new(n||e)(He(Li))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();function fm(e,t){return Array.isArray(t)?t.reduce(fm,e):{...e,...t}}let ul=(()=>{class e{constructor(n,r,i){this._zone=n,this._injector=r,this._exceptionHandler=i,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this._destroyed=!1,this._destroyListeners=[],this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const l=new N.y(p=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{p.next(this._stable),p.complete()})}),u=new N.y(p=>{let y;this._zone.runOutsideAngular(()=>{y=this._zone.onStable.subscribe(()=>{uo.assertNotInAngularZone(),Eu(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,p.next(!0))})})});const I=this._zone.onUnstable.subscribe(()=>{uo.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{p.next(!1)}))});return()=>{y.unsubscribe(),I.unsubscribe()}});this.isStable=function _(...e){const t=(0,M.yG)(e),n=(0,M._6)(e,1/0),r=e;return r.length?1===r.length?(0,R.Xf)(r[0]):(0,ge.J)(n)((0,U.D)(r,t)):W.E}(l,u.pipe((0,Y.B)()))}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(n,r){const i=n instanceof uf;if(!this._injector.get(ll).done)throw!i&&Un(n),new ie(405,false);let u;u=i?n:this._injector.get(Zs).resolveComponentFactory(n),this.componentTypes.push(u.componentType);const p=function s_(e){return e.isBoundToModule}(u)?void 0:this._injector.get(Es),I=u.create(Li.NULL,[],r||u.selector,p),V=I.location.nativeElement,J=I.injector.get(tm,null);return J?.registerApplication(V),I.onDestroy(()=>{this.detachView(I.hostView),dl(this.components,I),J?.unregisterApplication(V)}),this._loadComponent(I),I}tick(){if(this._runningTick)throw new ie(101,!1);try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;dl(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n),this._injector.get(qg,[]).concat(this._bootstrapListeners).forEach(i=>i(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>dl(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new ie(406,!1);const n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return e.\u0275fac=function(n){return new(n||e)(He(uo),He(Ni),He(Qs))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();function dl(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}function f_(){}let h_=(()=>{class e{}return e.__NG_ELEMENT_ID__=p_,e})();function p_(e){return function g_(e,t,n){if(dr(e)&&!n){const r=rr(e.index,t);return new ta(r,r)}return 47&e.type?new ta(t[16],t):null}(Mn(),Ve(),16==(16&e))}class vm{constructor(){}supports(t){return ra(t)}create(t){return new C_(t)}}const b_=(e,t)=>t;class C_{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||b_}forEachItem(t){let n;for(n=this._itHead;null!==n;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,i=0,l=null;for(;n||r;){const u=!r||n&&n.currentIndex{u=this._trackByFn(i,p),null!==n&&Object.is(n.trackById,u)?(r&&(n=this._verifyReinsertion(n,p,u,i)),Object.is(n.item,p)||this._addIdentityChange(n,p)):(n=this._mismatch(n,p,u,i),r=!0),n=n._next,i++}),this.length=i;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,i){let l;return null===t?l=this._itTail:(l=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,l,i)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(r,i))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,l,i)):t=this._addAfter(new __(n,r),l,i),t}_verifyReinsertion(t,n,r,i){let l=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null);return null!==l?t=this._reinsertAfter(l,t._prev,i):t.currentIndex!=i&&(t.currentIndex=i,this._addToMoves(t,i)),t}_truncate(t){for(;null!==t;){const n=t._next;this._addToRemovals(this._unlink(t)),t=n}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const i=t._prevRemoved,l=t._nextRemoved;return null===i?this._removalsHead=l:i._nextRemoved=l,null===l?this._removalsTail=i:l._prevRemoved=i,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){const i=null===n?this._itHead:n._next;return t._next=i,t._prev=n,null===i?this._itTail=t:i._prev=t,null===n?this._itHead=t:n._next=t,null===this._linkedRecords&&(this._linkedRecords=new ym),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const n=t._prev,r=t._next;return null===n?this._itHead=r:n._next=r,null===r?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new ym),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class __{constructor(t,n){this.item=t,this.trackById=n,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class w_{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;null!==r;r=r._nextDup)if((null===n||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){const n=t._prevDup,r=t._nextDup;return null===n?this._head=r:n._nextDup=r,null===r?this._tail=n:r._prevDup=n,null===this._head}}class ym{constructor(){this.map=new Map}put(t){const n=t.trackById;let r=this.map.get(n);r||(r=new w_,this.map.set(n,r)),r.add(t)}get(t,n){const i=this.map.get(t);return i?i.get(t,n):null}remove(t){const n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function Dm(e,t,n){const r=e.previousIndex;if(null===r)return r;let i=0;return n&&r{if(n&&n.key===i)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{const l=this._getOrCreateRecordForKey(i,r);n=this._insertBeforeOrAppend(n,l)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){const r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){const i=this._records.get(t);this._maybeAddToChanges(i,n);const l=i._prev,u=i._next;return l&&(l._next=u),u&&(u._prev=l),i._next=null,i._prev=null,i}const r=new I_(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}}class I_{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function Cm(){return new Fu([new vm])}let Fu=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(null!=r){const i=r.factories.slice();n=n.concat(i)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||Cm()),deps:[[e,new js,new Hs]]}}find(n){const r=this.factories.find(i=>i.supports(n));if(null!=r)return r;throw new ie(901,!1)}}return e.\u0275prov=wt({token:e,providedIn:"root",factory:Cm}),e})();function _m(){return new ku([new bm])}let ku=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(r){const i=r.factories.slice();n=n.concat(i)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||_m()),deps:[[e,new js,new Hs]]}}find(n){const r=this.factories.find(i=>i.supports(n));if(r)return r;throw new ie(901,!1)}}return e.\u0275prov=wt({token:e,providedIn:"root",factory:_m}),e})();const A_=sm(null,"core",[]);let T_=(()=>{class e{constructor(n){}}return e.\u0275fac=function(n){return new(n||e)(He(ul))},e.\u0275mod=vn({type:e}),e.\u0275inj=Kt({}),e})();function x_(e){return"boolean"==typeof e?e:null!=e&&"false"!==e}},433:(Qe,Fe,w)=>{"use strict";w.d(Fe,{u5:()=>wo,JU:()=>E,a5:()=>Vt,JJ:()=>gt,JL:()=>Yt,F:()=>le,On:()=>fo,c5:()=>Lr,Q7:()=>Wr,_Y:()=>ho});var o=w(8274),x=w(6895),N=w(2076),ge=w(9751),R=w(4742),W=w(8421),M=w(3269),U=w(5403),_=w(3268),Y=w(1810),Z=w(4004);let S=(()=>{class C{constructor(c,a){this._renderer=c,this._elementRef=a,this.onChange=g=>{},this.onTouched=()=>{}}setProperty(c,a){this._renderer.setProperty(this._elementRef.nativeElement,c,a)}registerOnTouched(c){this.onTouched=c}registerOnChange(c){this.onChange=c}setDisabledState(c){this.setProperty("disabled",c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(o.Qsj),o.Y36(o.SBq))},C.\u0275dir=o.lG2({type:C}),C})(),B=(()=>{class C extends S{}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,features:[o.qOj]}),C})();const E=new o.OlP("NgValueAccessor"),K={provide:E,useExisting:(0,o.Gpc)(()=>Te),multi:!0},ke=new o.OlP("CompositionEventMode");let Te=(()=>{class C extends S{constructor(c,a,g){super(c,a),this._compositionMode=g,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function pe(){const C=(0,x.q)()?(0,x.q)().getUserAgent():"";return/android (\d+)/.test(C.toLowerCase())}())}writeValue(c){this.setProperty("value",c??"")}_handleInput(c){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(c)}_compositionStart(){this._composing=!0}_compositionEnd(c){this._composing=!1,this._compositionMode&&this.onChange(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(o.Qsj),o.Y36(o.SBq),o.Y36(ke,8))},C.\u0275dir=o.lG2({type:C,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(c,a){1&c&&o.NdJ("input",function(L){return a._handleInput(L.target.value)})("blur",function(){return a.onTouched()})("compositionstart",function(){return a._compositionStart()})("compositionend",function(L){return a._compositionEnd(L.target.value)})},features:[o._Bn([K]),o.qOj]}),C})();function Be(C){return null==C||("string"==typeof C||Array.isArray(C))&&0===C.length}const oe=new o.OlP("NgValidators"),be=new o.OlP("NgAsyncValidators");function O(C){return Be(C.value)?{required:!0}:null}function de(C){return null}function ne(C){return null!=C}function Ee(C){return(0,o.QGY)(C)?(0,N.D)(C):C}function Ce(C){let s={};return C.forEach(c=>{s=null!=c?{...s,...c}:s}),0===Object.keys(s).length?null:s}function ze(C,s){return s.map(c=>c(C))}function et(C){return C.map(s=>function dt(C){return!C.validate}(s)?s:c=>s.validate(c))}function St(C){return null!=C?function Ue(C){if(!C)return null;const s=C.filter(ne);return 0==s.length?null:function(c){return Ce(ze(c,s))}}(et(C)):null}function nn(C){return null!=C?function Ke(C){if(!C)return null;const s=C.filter(ne);return 0==s.length?null:function(c){return function G(...C){const s=(0,M.jO)(C),{args:c,keys:a}=(0,R.D)(C),g=new ge.y(L=>{const{length:Me}=c;if(!Me)return void L.complete();const Je=new Array(Me);let at=Me,Dt=Me;for(let Zt=0;Zt{bn||(bn=!0,Dt--),Je[Zt]=Ve},()=>at--,void 0,()=>{(!at||!bn)&&(Dt||L.next(a?(0,Y.n)(a,Je):Je),L.complete())}))}});return s?g.pipe((0,_.Z)(s)):g}(ze(c,s).map(Ee)).pipe((0,Z.U)(Ce))}}(et(C)):null}function wt(C,s){return null===C?[s]:Array.isArray(C)?[...C,s]:[C,s]}function pn(C){return C?Array.isArray(C)?C:[C]:[]}function Pt(C,s){return Array.isArray(C)?C.includes(s):C===s}function Ut(C,s){const c=pn(s);return pn(C).forEach(g=>{Pt(c,g)||c.push(g)}),c}function it(C,s){return pn(s).filter(c=>!Pt(C,c))}class Xt{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(s){this._rawValidators=s||[],this._composedValidatorFn=St(this._rawValidators)}_setAsyncValidators(s){this._rawAsyncValidators=s||[],this._composedAsyncValidatorFn=nn(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(s){this._onDestroyCallbacks.push(s)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(s=>s()),this._onDestroyCallbacks=[]}reset(s){this.control&&this.control.reset(s)}hasError(s,c){return!!this.control&&this.control.hasError(s,c)}getError(s,c){return this.control?this.control.getError(s,c):null}}class kt extends Xt{get formDirective(){return null}get path(){return null}}class Vt extends Xt{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class rn{constructor(s){this._cd=s}get isTouched(){return!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return!!this._cd?.submitted}}let gt=(()=>{class C extends rn{constructor(c){super(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(Vt,2))},C.\u0275dir=o.lG2({type:C,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(c,a){2&c&&o.ekj("ng-untouched",a.isUntouched)("ng-touched",a.isTouched)("ng-pristine",a.isPristine)("ng-dirty",a.isDirty)("ng-valid",a.isValid)("ng-invalid",a.isInvalid)("ng-pending",a.isPending)},features:[o.qOj]}),C})(),Yt=(()=>{class C extends rn{constructor(c){super(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(kt,10))},C.\u0275dir=o.lG2({type:C,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(c,a){2&c&&o.ekj("ng-untouched",a.isUntouched)("ng-touched",a.isTouched)("ng-pristine",a.isPristine)("ng-dirty",a.isDirty)("ng-valid",a.isValid)("ng-invalid",a.isInvalid)("ng-pending",a.isPending)("ng-submitted",a.isSubmitted)},features:[o.qOj]}),C})();const He="VALID",Ye="INVALID",pt="PENDING",vt="DISABLED";function Ht(C){return(mn(C)?C.validators:C)||null}function tn(C,s){return(mn(s)?s.asyncValidators:C)||null}function mn(C){return null!=C&&!Array.isArray(C)&&"object"==typeof C}class _e{constructor(s,c){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._assignValidators(s),this._assignAsyncValidators(c)}get validator(){return this._composedValidatorFn}set validator(s){this._rawValidators=this._composedValidatorFn=s}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(s){this._rawAsyncValidators=this._composedAsyncValidatorFn=s}get parent(){return this._parent}get valid(){return this.status===He}get invalid(){return this.status===Ye}get pending(){return this.status==pt}get disabled(){return this.status===vt}get enabled(){return this.status!==vt}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(s){this._assignValidators(s)}setAsyncValidators(s){this._assignAsyncValidators(s)}addValidators(s){this.setValidators(Ut(s,this._rawValidators))}addAsyncValidators(s){this.setAsyncValidators(Ut(s,this._rawAsyncValidators))}removeValidators(s){this.setValidators(it(s,this._rawValidators))}removeAsyncValidators(s){this.setAsyncValidators(it(s,this._rawAsyncValidators))}hasValidator(s){return Pt(this._rawValidators,s)}hasAsyncValidator(s){return Pt(this._rawAsyncValidators,s)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(s={}){this.touched=!0,this._parent&&!s.onlySelf&&this._parent.markAsTouched(s)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(s=>s.markAllAsTouched())}markAsUntouched(s={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(c=>{c.markAsUntouched({onlySelf:!0})}),this._parent&&!s.onlySelf&&this._parent._updateTouched(s)}markAsDirty(s={}){this.pristine=!1,this._parent&&!s.onlySelf&&this._parent.markAsDirty(s)}markAsPristine(s={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(c=>{c.markAsPristine({onlySelf:!0})}),this._parent&&!s.onlySelf&&this._parent._updatePristine(s)}markAsPending(s={}){this.status=pt,!1!==s.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!s.onlySelf&&this._parent.markAsPending(s)}disable(s={}){const c=this._parentMarkedDirty(s.onlySelf);this.status=vt,this.errors=null,this._forEachChild(a=>{a.disable({...s,onlySelf:!0})}),this._updateValue(),!1!==s.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors({...s,skipPristineCheck:c}),this._onDisabledChange.forEach(a=>a(!0))}enable(s={}){const c=this._parentMarkedDirty(s.onlySelf);this.status=He,this._forEachChild(a=>{a.enable({...s,onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:s.emitEvent}),this._updateAncestors({...s,skipPristineCheck:c}),this._onDisabledChange.forEach(a=>a(!1))}_updateAncestors(s){this._parent&&!s.onlySelf&&(this._parent.updateValueAndValidity(s),s.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(s){this._parent=s}getRawValue(){return this.value}updateValueAndValidity(s={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===He||this.status===pt)&&this._runAsyncValidator(s.emitEvent)),!1!==s.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!s.onlySelf&&this._parent.updateValueAndValidity(s)}_updateTreeValidity(s={emitEvent:!0}){this._forEachChild(c=>c._updateTreeValidity(s)),this.updateValueAndValidity({onlySelf:!0,emitEvent:s.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?vt:He}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(s){if(this.asyncValidator){this.status=pt,this._hasOwnPendingAsyncValidator=!0;const c=Ee(this.asyncValidator(this));this._asyncValidationSubscription=c.subscribe(a=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(a,{emitEvent:s})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(s,c={}){this.errors=s,this._updateControlsErrors(!1!==c.emitEvent)}get(s){let c=s;return null==c||(Array.isArray(c)||(c=c.split(".")),0===c.length)?null:c.reduce((a,g)=>a&&a._find(g),this)}getError(s,c){const a=c?this.get(c):this;return a&&a.errors?a.errors[s]:null}hasError(s,c){return!!this.getError(s,c)}get root(){let s=this;for(;s._parent;)s=s._parent;return s}_updateControlsErrors(s){this.status=this._calculateStatus(),s&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(s)}_initObservables(){this.valueChanges=new o.vpe,this.statusChanges=new o.vpe}_calculateStatus(){return this._allControlsDisabled()?vt:this.errors?Ye:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(pt)?pt:this._anyControlsHaveStatus(Ye)?Ye:He}_anyControlsHaveStatus(s){return this._anyControls(c=>c.status===s)}_anyControlsDirty(){return this._anyControls(s=>s.dirty)}_anyControlsTouched(){return this._anyControls(s=>s.touched)}_updatePristine(s={}){this.pristine=!this._anyControlsDirty(),this._parent&&!s.onlySelf&&this._parent._updatePristine(s)}_updateTouched(s={}){this.touched=this._anyControlsTouched(),this._parent&&!s.onlySelf&&this._parent._updateTouched(s)}_registerOnCollectionChange(s){this._onCollectionChange=s}_setUpdateStrategy(s){mn(s)&&null!=s.updateOn&&(this._updateOn=s.updateOn)}_parentMarkedDirty(s){return!s&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}_find(s){return null}_assignValidators(s){this._rawValidators=Array.isArray(s)?s.slice():s,this._composedValidatorFn=function _t(C){return Array.isArray(C)?St(C):C||null}(this._rawValidators)}_assignAsyncValidators(s){this._rawAsyncValidators=Array.isArray(s)?s.slice():s,this._composedAsyncValidatorFn=function Ln(C){return Array.isArray(C)?nn(C):C||null}(this._rawAsyncValidators)}}class fe extends _e{constructor(s,c,a){super(Ht(c),tn(a,c)),this.controls=s,this._initObservables(),this._setUpdateStrategy(c),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(s,c){return this.controls[s]?this.controls[s]:(this.controls[s]=c,c.setParent(this),c._registerOnCollectionChange(this._onCollectionChange),c)}addControl(s,c,a={}){this.registerControl(s,c),this.updateValueAndValidity({emitEvent:a.emitEvent}),this._onCollectionChange()}removeControl(s,c={}){this.controls[s]&&this.controls[s]._registerOnCollectionChange(()=>{}),delete this.controls[s],this.updateValueAndValidity({emitEvent:c.emitEvent}),this._onCollectionChange()}setControl(s,c,a={}){this.controls[s]&&this.controls[s]._registerOnCollectionChange(()=>{}),delete this.controls[s],c&&this.registerControl(s,c),this.updateValueAndValidity({emitEvent:a.emitEvent}),this._onCollectionChange()}contains(s){return this.controls.hasOwnProperty(s)&&this.controls[s].enabled}setValue(s,c={}){(function Ft(C,s,c){C._forEachChild((a,g)=>{if(void 0===c[g])throw new o.vHH(1002,"")})})(this,0,s),Object.keys(s).forEach(a=>{(function ln(C,s,c){const a=C.controls;if(!(s?Object.keys(a):a).length)throw new o.vHH(1e3,"");if(!a[c])throw new o.vHH(1001,"")})(this,!0,a),this.controls[a].setValue(s[a],{onlySelf:!0,emitEvent:c.emitEvent})}),this.updateValueAndValidity(c)}patchValue(s,c={}){null!=s&&(Object.keys(s).forEach(a=>{const g=this.controls[a];g&&g.patchValue(s[a],{onlySelf:!0,emitEvent:c.emitEvent})}),this.updateValueAndValidity(c))}reset(s={},c={}){this._forEachChild((a,g)=>{a.reset(s[g],{onlySelf:!0,emitEvent:c.emitEvent})}),this._updatePristine(c),this._updateTouched(c),this.updateValueAndValidity(c)}getRawValue(){return this._reduceChildren({},(s,c,a)=>(s[a]=c.getRawValue(),s))}_syncPendingControls(){let s=this._reduceChildren(!1,(c,a)=>!!a._syncPendingControls()||c);return s&&this.updateValueAndValidity({onlySelf:!0}),s}_forEachChild(s){Object.keys(this.controls).forEach(c=>{const a=this.controls[c];a&&s(a,c)})}_setUpControls(){this._forEachChild(s=>{s.setParent(this),s._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(s){for(const[c,a]of Object.entries(this.controls))if(this.contains(c)&&s(a))return!0;return!1}_reduceValue(){return this._reduceChildren({},(c,a,g)=>((a.enabled||this.disabled)&&(c[g]=a.value),c))}_reduceChildren(s,c){let a=s;return this._forEachChild((g,L)=>{a=c(a,g,L)}),a}_allControlsDisabled(){for(const s of Object.keys(this.controls))if(this.controls[s].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(s){return this.controls.hasOwnProperty(s)?this.controls[s]:null}}const It=new o.OlP("CallSetDisabledState",{providedIn:"root",factory:()=>cn}),cn="always";function sn(C,s,c=cn){$n(C,s),s.valueAccessor.writeValue(C.value),(C.disabled||"always"===c)&&s.valueAccessor.setDisabledState?.(C.disabled),function xn(C,s){s.valueAccessor.registerOnChange(c=>{C._pendingValue=c,C._pendingChange=!0,C._pendingDirty=!0,"change"===C.updateOn&&tr(C,s)})}(C,s),function Ir(C,s){const c=(a,g)=>{s.valueAccessor.writeValue(a),g&&s.viewToModelUpdate(a)};C.registerOnChange(c),s._registerOnDestroy(()=>{C._unregisterOnChange(c)})}(C,s),function vn(C,s){s.valueAccessor.registerOnTouched(()=>{C._pendingTouched=!0,"blur"===C.updateOn&&C._pendingChange&&tr(C,s),"submit"!==C.updateOn&&C.markAsTouched()})}(C,s),function sr(C,s){if(s.valueAccessor.setDisabledState){const c=a=>{s.valueAccessor.setDisabledState(a)};C.registerOnDisabledChange(c),s._registerOnDestroy(()=>{C._unregisterOnDisabledChange(c)})}}(C,s)}function er(C,s){C.forEach(c=>{c.registerOnValidatorChange&&c.registerOnValidatorChange(s)})}function $n(C,s){const c=function Rt(C){return C._rawValidators}(C);null!==s.validator?C.setValidators(wt(c,s.validator)):"function"==typeof c&&C.setValidators([c]);const a=function Kt(C){return C._rawAsyncValidators}(C);null!==s.asyncValidator?C.setAsyncValidators(wt(a,s.asyncValidator)):"function"==typeof a&&C.setAsyncValidators([a]);const g=()=>C.updateValueAndValidity();er(s._rawValidators,g),er(s._rawAsyncValidators,g)}function tr(C,s){C._pendingDirty&&C.markAsDirty(),C.setValue(C._pendingValue,{emitModelToViewChange:!1}),s.viewToModelUpdate(C._pendingValue),C._pendingChange=!1}const Pe={provide:kt,useExisting:(0,o.Gpc)(()=>le)},X=(()=>Promise.resolve())();let le=(()=>{class C extends kt{constructor(c,a,g){super(),this.callSetDisabledState=g,this.submitted=!1,this._directives=new Set,this.ngSubmit=new o.vpe,this.form=new fe({},St(c),nn(a))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(c){X.then(()=>{const a=this._findContainer(c.path);c.control=a.registerControl(c.name,c.control),sn(c.control,c,this.callSetDisabledState),c.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(c)})}getControl(c){return this.form.get(c.path)}removeControl(c){X.then(()=>{const a=this._findContainer(c.path);a&&a.removeControl(c.name),this._directives.delete(c)})}addFormGroup(c){X.then(()=>{const a=this._findContainer(c.path),g=new fe({});(function cr(C,s){$n(C,s)})(g,c),a.registerControl(c.name,g),g.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(c){X.then(()=>{const a=this._findContainer(c.path);a&&a.removeControl(c.name)})}getFormGroup(c){return this.form.get(c.path)}updateModel(c,a){X.then(()=>{this.form.get(c.path).setValue(a)})}setValue(c){this.control.setValue(c)}onSubmit(c){return this.submitted=!0,function F(C,s){C._syncPendingControls(),s.forEach(c=>{const a=c.control;"submit"===a.updateOn&&a._pendingChange&&(c.viewToModelUpdate(a._pendingValue),a._pendingChange=!1)})}(this.form,this._directives),this.ngSubmit.emit(c),"dialog"===c?.target?.method}onReset(){this.resetForm()}resetForm(c){this.form.reset(c),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(c){return c.pop(),c.length?this.form.get(c):this.form}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(oe,10),o.Y36(be,10),o.Y36(It,8))},C.\u0275dir=o.lG2({type:C,selectors:[["form",3,"ngNoForm","",3,"formGroup",""],["ng-form"],["","ngForm",""]],hostBindings:function(c,a){1&c&&o.NdJ("submit",function(L){return a.onSubmit(L)})("reset",function(){return a.onReset()})},inputs:{options:["ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[o._Bn([Pe]),o.qOj]}),C})();function Ie(C,s){const c=C.indexOf(s);c>-1&&C.splice(c,1)}function je(C){return"object"==typeof C&&null!==C&&2===Object.keys(C).length&&"value"in C&&"disabled"in C}const Re=class extends _e{constructor(s=null,c,a){super(Ht(c),tn(a,c)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(s),this._setUpdateStrategy(c),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),mn(c)&&(c.nonNullable||c.initialValueIsDefault)&&(this.defaultValue=je(s)?s.value:s)}setValue(s,c={}){this.value=this._pendingValue=s,this._onChange.length&&!1!==c.emitModelToViewChange&&this._onChange.forEach(a=>a(this.value,!1!==c.emitViewToModelChange)),this.updateValueAndValidity(c)}patchValue(s,c={}){this.setValue(s,c)}reset(s=this.defaultValue,c={}){this._applyFormState(s),this.markAsPristine(c),this.markAsUntouched(c),this.setValue(this.value,c),this._pendingChange=!1}_updateValue(){}_anyControls(s){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(s){this._onChange.push(s)}_unregisterOnChange(s){Ie(this._onChange,s)}registerOnDisabledChange(s){this._onDisabledChange.push(s)}_unregisterOnDisabledChange(s){Ie(this._onDisabledChange,s)}_forEachChild(s){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(s){je(s)?(this.value=this._pendingValue=s.value,s.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=s}},mr={provide:Vt,useExisting:(0,o.Gpc)(()=>fo)},an=(()=>Promise.resolve())();let fo=(()=>{class C extends Vt{constructor(c,a,g,L,Me,Je){super(),this._changeDetectorRef=Me,this.callSetDisabledState=Je,this.control=new Re,this._registered=!1,this.update=new o.vpe,this._parent=c,this._setValidators(a),this._setAsyncValidators(g),this.valueAccessor=function q(C,s){if(!s)return null;let c,a,g;return Array.isArray(s),s.forEach(L=>{L.constructor===Te?c=L:function rt(C){return Object.getPrototypeOf(C.constructor)===B}(L)?a=L:g=L}),g||a||c||null}(0,L)}ngOnChanges(c){if(this._checkForErrors(),!this._registered||"name"in c){if(this._registered&&(this._checkName(),this.formDirective)){const a=c.name.previousValue;this.formDirective.removeControl({name:a,path:this._getPath(a)})}this._setUpControl()}"isDisabled"in c&&this._updateDisabled(c),function Cn(C,s){if(!C.hasOwnProperty("model"))return!1;const c=C.model;return!!c.isFirstChange()||!Object.is(s,c.currentValue)}(c,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(c){this.viewModel=c,this.update.emit(c)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){sn(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(c){an.then(()=>{this.control.setValue(c,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(c){const a=c.isDisabled.currentValue,g=0!==a&&(0,o.D6c)(a);an.then(()=>{g&&!this.control.disabled?this.control.disable():!g&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(c){return this._parent?function Dn(C,s){return[...s.path,C]}(c,this._parent):[c]}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(kt,9),o.Y36(oe,10),o.Y36(be,10),o.Y36(E,10),o.Y36(o.sBO,8),o.Y36(It,8))},C.\u0275dir=o.lG2({type:C,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[o._Bn([mr]),o.qOj,o.TTD]}),C})(),ho=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275dir=o.lG2({type:C,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""]}),C})(),ar=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({}),C})(),hr=(()=>{class C{constructor(){this._validator=de}ngOnChanges(c){if(this.inputName in c){const a=this.normalizeInput(c[this.inputName].currentValue);this._enabled=this.enabled(a),this._validator=this._enabled?this.createValidator(a):de,this._onChange&&this._onChange()}}validate(c){return this._validator(c)}registerOnValidatorChange(c){this._onChange=c}enabled(c){return null!=c}}return C.\u0275fac=function(c){return new(c||C)},C.\u0275dir=o.lG2({type:C,features:[o.TTD]}),C})();const bo={provide:oe,useExisting:(0,o.Gpc)(()=>Wr),multi:!0};let Wr=(()=>{class C extends hr{constructor(){super(...arguments),this.inputName="required",this.normalizeInput=o.D6c,this.createValidator=c=>O}enabled(c){return c}}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,selectors:[["","required","","formControlName","",3,"type","checkbox"],["","required","","formControl","",3,"type","checkbox"],["","required","","ngModel","",3,"type","checkbox"]],hostVars:1,hostBindings:function(c,a){2&c&&o.uIk("required",a._enabled?"":null)},inputs:{required:"required"},features:[o._Bn([bo]),o.qOj]}),C})();const Zn={provide:oe,useExisting:(0,o.Gpc)(()=>Lr),multi:!0};let Lr=(()=>{class C extends hr{constructor(){super(...arguments),this.inputName="pattern",this.normalizeInput=c=>c,this.createValidator=c=>function ue(C){if(!C)return de;let s,c;return"string"==typeof C?(c="","^"!==C.charAt(0)&&(c+="^"),c+=C,"$"!==C.charAt(C.length-1)&&(c+="$"),s=new RegExp(c)):(c=C.toString(),s=C),a=>{if(Be(a.value))return null;const g=a.value;return s.test(g)?null:{pattern:{requiredPattern:c,actualValue:g}}}}(c)}}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,selectors:[["","pattern","","formControlName",""],["","pattern","","formControl",""],["","pattern","","ngModel",""]],hostVars:1,hostBindings:function(c,a){2&c&&o.uIk("pattern",a._enabled?a.pattern:null)},inputs:{pattern:"pattern"},features:[o._Bn([Zn]),o.qOj]}),C})(),Fo=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({imports:[ar]}),C})(),wo=(()=>{class C{static withConfig(c){return{ngModule:C,providers:[{provide:It,useValue:c.callSetDisabledState??cn}]}}}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({imports:[Fo]}),C})()},1481:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Dx:()=>gt,b2:()=>kt,q6:()=>Pt});var o=w(6895),x=w(8274);class N extends o.w_{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class ge extends N{static makeCurrent(){(0,o.HT)(new ge)}onAndCancel(fe,ee,Se){return fe.addEventListener(ee,Se,!1),()=>{fe.removeEventListener(ee,Se,!1)}}dispatchEvent(fe,ee){fe.dispatchEvent(ee)}remove(fe){fe.parentNode&&fe.parentNode.removeChild(fe)}createElement(fe,ee){return(ee=ee||this.getDefaultDocument()).createElement(fe)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(fe){return fe.nodeType===Node.ELEMENT_NODE}isShadowRoot(fe){return fe instanceof DocumentFragment}getGlobalEventTarget(fe,ee){return"window"===ee?window:"document"===ee?fe:"body"===ee?fe.body:null}getBaseHref(fe){const ee=function W(){return R=R||document.querySelector("base"),R?R.getAttribute("href"):null}();return null==ee?null:function U(_e){M=M||document.createElement("a"),M.setAttribute("href",_e);const fe=M.pathname;return"/"===fe.charAt(0)?fe:`/${fe}`}(ee)}resetBaseElement(){R=null}getUserAgent(){return window.navigator.userAgent}getCookie(fe){return(0,o.Mx)(document.cookie,fe)}}let M,R=null;const _=new x.OlP("TRANSITION_ID"),G=[{provide:x.ip1,useFactory:function Y(_e,fe,ee){return()=>{ee.get(x.CZH).donePromise.then(()=>{const Se=(0,o.q)(),Le=fe.querySelectorAll(`style[ng-transition="${_e}"]`);for(let yt=0;yt{class _e{build(){return new XMLHttpRequest}}return _e.\u0275fac=function(ee){return new(ee||_e)},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const B=new x.OlP("EventManagerPlugins");let E=(()=>{class _e{constructor(ee,Se){this._zone=Se,this._eventNameToPlugin=new Map,ee.forEach(Le=>Le.manager=this),this._plugins=ee.slice().reverse()}addEventListener(ee,Se,Le){return this._findPluginFor(Se).addEventListener(ee,Se,Le)}addGlobalEventListener(ee,Se,Le){return this._findPluginFor(Se).addGlobalEventListener(ee,Se,Le)}getZone(){return this._zone}_findPluginFor(ee){const Se=this._eventNameToPlugin.get(ee);if(Se)return Se;const Le=this._plugins;for(let yt=0;yt{class _e{constructor(){this._stylesSet=new Set}addStyles(ee){const Se=new Set;ee.forEach(Le=>{this._stylesSet.has(Le)||(this._stylesSet.add(Le),Se.add(Le))}),this.onStylesAdded(Se)}onStylesAdded(ee){}getAllStyles(){return Array.from(this._stylesSet)}}return _e.\u0275fac=function(ee){return new(ee||_e)},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})(),K=(()=>{class _e extends P{constructor(ee){super(),this._doc=ee,this._hostNodes=new Map,this._hostNodes.set(ee.head,[])}_addStylesToHost(ee,Se,Le){ee.forEach(yt=>{const It=this._doc.createElement("style");It.textContent=yt,Le.push(Se.appendChild(It))})}addHost(ee){const Se=[];this._addStylesToHost(this._stylesSet,ee,Se),this._hostNodes.set(ee,Se)}removeHost(ee){const Se=this._hostNodes.get(ee);Se&&Se.forEach(pe),this._hostNodes.delete(ee)}onStylesAdded(ee){this._hostNodes.forEach((Se,Le)=>{this._addStylesToHost(ee,Le,Se)})}ngOnDestroy(){this._hostNodes.forEach(ee=>ee.forEach(pe))}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();function pe(_e){(0,o.q)().remove(_e)}const ke={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},Te=/%COMP%/g;function Q(_e,fe,ee){for(let Se=0;Se{if("__ngUnwrap__"===fe)return _e;!1===_e(fe)&&(fe.preventDefault(),fe.returnValue=!1)}}let O=(()=>{class _e{constructor(ee,Se,Le){this.eventManager=ee,this.sharedStylesHost=Se,this.appId=Le,this.rendererByCompId=new Map,this.defaultRenderer=new te(ee)}createRenderer(ee,Se){if(!ee||!Se)return this.defaultRenderer;switch(Se.encapsulation){case x.ifc.Emulated:{let Le=this.rendererByCompId.get(Se.id);return Le||(Le=new ue(this.eventManager,this.sharedStylesHost,Se,this.appId),this.rendererByCompId.set(Se.id,Le)),Le.applyToHost(ee),Le}case 1:case x.ifc.ShadowDom:return new de(this.eventManager,this.sharedStylesHost,ee,Se);default:if(!this.rendererByCompId.has(Se.id)){const Le=Q(Se.id,Se.styles,[]);this.sharedStylesHost.addStyles(Le),this.rendererByCompId.set(Se.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(E),x.LFG(K),x.LFG(x.AFp))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();class te{constructor(fe){this.eventManager=fe,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(fe,ee){return ee?document.createElementNS(ke[ee]||ee,fe):document.createElement(fe)}createComment(fe){return document.createComment(fe)}createText(fe){return document.createTextNode(fe)}appendChild(fe,ee){(De(fe)?fe.content:fe).appendChild(ee)}insertBefore(fe,ee,Se){fe&&(De(fe)?fe.content:fe).insertBefore(ee,Se)}removeChild(fe,ee){fe&&fe.removeChild(ee)}selectRootElement(fe,ee){let Se="string"==typeof fe?document.querySelector(fe):fe;if(!Se)throw new Error(`The selector "${fe}" did not match any elements`);return ee||(Se.textContent=""),Se}parentNode(fe){return fe.parentNode}nextSibling(fe){return fe.nextSibling}setAttribute(fe,ee,Se,Le){if(Le){ee=Le+":"+ee;const yt=ke[Le];yt?fe.setAttributeNS(yt,ee,Se):fe.setAttribute(ee,Se)}else fe.setAttribute(ee,Se)}removeAttribute(fe,ee,Se){if(Se){const Le=ke[Se];Le?fe.removeAttributeNS(Le,ee):fe.removeAttribute(`${Se}:${ee}`)}else fe.removeAttribute(ee)}addClass(fe,ee){fe.classList.add(ee)}removeClass(fe,ee){fe.classList.remove(ee)}setStyle(fe,ee,Se,Le){Le&(x.JOm.DashCase|x.JOm.Important)?fe.style.setProperty(ee,Se,Le&x.JOm.Important?"important":""):fe.style[ee]=Se}removeStyle(fe,ee,Se){Se&x.JOm.DashCase?fe.style.removeProperty(ee):fe.style[ee]=""}setProperty(fe,ee,Se){fe[ee]=Se}setValue(fe,ee){fe.nodeValue=ee}listen(fe,ee,Se){return"string"==typeof fe?this.eventManager.addGlobalEventListener(fe,ee,T(Se)):this.eventManager.addEventListener(fe,ee,T(Se))}}function De(_e){return"TEMPLATE"===_e.tagName&&void 0!==_e.content}class ue extends te{constructor(fe,ee,Se,Le){super(fe),this.component=Se;const yt=Q(Le+"-"+Se.id,Se.styles,[]);ee.addStyles(yt),this.contentAttr=function be(_e){return"_ngcontent-%COMP%".replace(Te,_e)}(Le+"-"+Se.id),this.hostAttr=function Ne(_e){return"_nghost-%COMP%".replace(Te,_e)}(Le+"-"+Se.id)}applyToHost(fe){super.setAttribute(fe,this.hostAttr,"")}createElement(fe,ee){const Se=super.createElement(fe,ee);return super.setAttribute(Se,this.contentAttr,""),Se}}class de extends te{constructor(fe,ee,Se,Le){super(fe),this.sharedStylesHost=ee,this.hostEl=Se,this.shadowRoot=Se.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const yt=Q(Le.id,Le.styles,[]);for(let It=0;It{class _e extends j{constructor(ee){super(ee)}supports(ee){return!0}addEventListener(ee,Se,Le){return ee.addEventListener(Se,Le,!1),()=>this.removeEventListener(ee,Se,Le)}removeEventListener(ee,Se,Le){return ee.removeEventListener(Se,Le)}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const Ee=["alt","control","meta","shift"],Ce={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},ze={alt:_e=>_e.altKey,control:_e=>_e.ctrlKey,meta:_e=>_e.metaKey,shift:_e=>_e.shiftKey};let dt=(()=>{class _e extends j{constructor(ee){super(ee)}supports(ee){return null!=_e.parseEventName(ee)}addEventListener(ee,Se,Le){const yt=_e.parseEventName(Se),It=_e.eventCallback(yt.fullKey,Le,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>(0,o.q)().onAndCancel(ee,yt.domEventName,It))}static parseEventName(ee){const Se=ee.toLowerCase().split("."),Le=Se.shift();if(0===Se.length||"keydown"!==Le&&"keyup"!==Le)return null;const yt=_e._normalizeKey(Se.pop());let It="",cn=Se.indexOf("code");if(cn>-1&&(Se.splice(cn,1),It="code."),Ee.forEach(sn=>{const dn=Se.indexOf(sn);dn>-1&&(Se.splice(dn,1),It+=sn+".")}),It+=yt,0!=Se.length||0===yt.length)return null;const Dn={};return Dn.domEventName=Le,Dn.fullKey=It,Dn}static matchEventFullKeyCode(ee,Se){let Le=Ce[ee.key]||ee.key,yt="";return Se.indexOf("code.")>-1&&(Le=ee.code,yt="code."),!(null==Le||!Le)&&(Le=Le.toLowerCase()," "===Le?Le="space":"."===Le&&(Le="dot"),Ee.forEach(It=>{It!==Le&&(0,ze[It])(ee)&&(yt+=It+".")}),yt+=Le,yt===Se)}static eventCallback(ee,Se,Le){return yt=>{_e.matchEventFullKeyCode(yt,ee)&&Le.runGuarded(()=>Se(yt))}}static _normalizeKey(ee){return"esc"===ee?"escape":ee}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const Pt=(0,x.eFA)(x._c5,"browser",[{provide:x.Lbi,useValue:o.bD},{provide:x.g9A,useValue:function wt(){ge.makeCurrent()},multi:!0},{provide:o.K0,useFactory:function Kt(){return(0,x.RDi)(document),document},deps:[]}]),Ut=new x.OlP(""),it=[{provide:x.rWj,useClass:class Z{addToWindow(fe){x.dqk.getAngularTestability=(Se,Le=!0)=>{const yt=fe.findTestabilityInTree(Se,Le);if(null==yt)throw new Error("Could not find testability for element.");return yt},x.dqk.getAllAngularTestabilities=()=>fe.getAllTestabilities(),x.dqk.getAllAngularRootElements=()=>fe.getAllRootElements(),x.dqk.frameworkStabilizers||(x.dqk.frameworkStabilizers=[]),x.dqk.frameworkStabilizers.push(Se=>{const Le=x.dqk.getAllAngularTestabilities();let yt=Le.length,It=!1;const cn=function(Dn){It=It||Dn,yt--,0==yt&&Se(It)};Le.forEach(function(Dn){Dn.whenStable(cn)})})}findTestabilityInTree(fe,ee,Se){return null==ee?null:fe.getTestability(ee)??(Se?(0,o.q)().isShadowRoot(ee)?this.findTestabilityInTree(fe,ee.host,!0):this.findTestabilityInTree(fe,ee.parentElement,!0):null)}},deps:[]},{provide:x.lri,useClass:x.dDg,deps:[x.R0b,x.eoX,x.rWj]},{provide:x.dDg,useClass:x.dDg,deps:[x.R0b,x.eoX,x.rWj]}],Xt=[{provide:x.zSh,useValue:"root"},{provide:x.qLn,useFactory:function Rt(){return new x.qLn},deps:[]},{provide:B,useClass:ne,multi:!0,deps:[o.K0,x.R0b,x.Lbi]},{provide:B,useClass:dt,multi:!0,deps:[o.K0]},{provide:O,useClass:O,deps:[E,K,x.AFp]},{provide:x.FYo,useExisting:O},{provide:P,useExisting:K},{provide:K,useClass:K,deps:[o.K0]},{provide:E,useClass:E,deps:[B,x.R0b]},{provide:o.JF,useClass:S,deps:[]},[]];let kt=(()=>{class _e{constructor(ee){}static withServerTransition(ee){return{ngModule:_e,providers:[{provide:x.AFp,useValue:ee.appId},{provide:_,useExisting:x.AFp},G]}}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(Ut,12))},_e.\u0275mod=x.oAB({type:_e}),_e.\u0275inj=x.cJS({providers:[...Xt,...it],imports:[o.ez,x.hGG]}),_e})(),gt=(()=>{class _e{constructor(ee){this._doc=ee}getTitle(){return this._doc.title}setTitle(ee){this._doc.title=ee||""}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:function(ee){let Se=null;return Se=ee?new ee:function en(){return new gt((0,x.LFG)(o.K0))}(),Se},providedIn:"root"}),_e})();typeof window<"u"&&window},5472:(Qe,Fe,w)=>{"use strict";w.d(Fe,{gz:()=>Rr,y6:()=>fr,OD:()=>Mt,eC:()=>it,wm:()=>Dl,wN:()=>ya,F0:()=>or,rH:()=>mi,Bz:()=>Xu,Hx:()=>pt});var o=w(8274),x=w(2076),N=w(9646),ge=w(1135);const W=(0,w(3888).d)(f=>function(){f(this),this.name="EmptyError",this.message="no elements in sequence"});var M=w(9751),U=w(4742),_=w(4671),Y=w(3268),G=w(3269),Z=w(1810),S=w(5403),B=w(9672);function E(...f){const h=(0,G.yG)(f),d=(0,G.jO)(f),{args:m,keys:b}=(0,U.D)(f);if(0===m.length)return(0,x.D)([],h);const $=new M.y(function j(f,h,d=_.y){return m=>{P(h,()=>{const{length:b}=f,$=new Array(b);let z=b,ve=b;for(let We=0;We{const ft=(0,x.D)(f[We],h);let bt=!1;ft.subscribe((0,S.x)(m,jt=>{$[We]=jt,bt||(bt=!0,ve--),ve||m.next(d($.slice()))},()=>{--z||m.complete()}))},m)},m)}}(m,h,b?z=>(0,Z.n)(b,z):_.y));return d?$.pipe((0,Y.Z)(d)):$}function P(f,h,d){f?(0,B.f)(d,f,h):h()}var K=w(8189);function ke(...f){return function pe(){return(0,K.J)(1)}()((0,x.D)(f,(0,G.yG)(f)))}var Te=w(8421);function ie(f){return new M.y(h=>{(0,Te.Xf)(f()).subscribe(h)})}var Be=w(9635),re=w(576);function oe(f,h){const d=(0,re.m)(f)?f:()=>f,m=b=>b.error(d());return new M.y(h?b=>h.schedule(m,0,b):m)}var be=w(515),Ne=w(727),Q=w(4482);function T(){return(0,Q.e)((f,h)=>{let d=null;f._refCount++;const m=(0,S.x)(h,void 0,void 0,void 0,()=>{if(!f||f._refCount<=0||0<--f._refCount)return void(d=null);const b=f._connection,$=d;d=null,b&&(!$||b===$)&&b.unsubscribe(),h.unsubscribe()});f.subscribe(m),m.closed||(d=f.connect())})}class k extends M.y{constructor(h,d){super(),this.source=h,this.subjectFactory=d,this._subject=null,this._refCount=0,this._connection=null,(0,Q.A)(h)&&(this.lift=h.lift)}_subscribe(h){return this.getSubject().subscribe(h)}getSubject(){const h=this._subject;return(!h||h.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:h}=this;this._subject=this._connection=null,h?.unsubscribe()}connect(){let h=this._connection;if(!h){h=this._connection=new Ne.w0;const d=this.getSubject();h.add(this.source.subscribe((0,S.x)(d,void 0,()=>{this._teardown(),d.complete()},m=>{this._teardown(),d.error(m)},()=>this._teardown()))),h.closed&&(this._connection=null,h=Ne.w0.EMPTY)}return h}refCount(){return T()(this)}}var O=w(7579),te=w(6895),ce=w(4004),Ae=w(3900),De=w(5698),de=w(9300),ne=w(5577);function Ee(f){return(0,Q.e)((h,d)=>{let m=!1;h.subscribe((0,S.x)(d,b=>{m=!0,d.next(b)},()=>{m||d.next(f),d.complete()}))})}function Ce(f=ze){return(0,Q.e)((h,d)=>{let m=!1;h.subscribe((0,S.x)(d,b=>{m=!0,d.next(b)},()=>m?d.complete():d.error(f())))})}function ze(){return new W}function dt(f,h){const d=arguments.length>=2;return m=>m.pipe(f?(0,de.h)((b,$)=>f(b,$,m)):_.y,(0,De.q)(1),d?Ee(h):Ce(()=>new W))}var et=w(4351),Ue=w(8505);function St(f){return(0,Q.e)((h,d)=>{let $,m=null,b=!1;m=h.subscribe((0,S.x)(d,void 0,void 0,z=>{$=(0,Te.Xf)(f(z,St(f)(h))),m?(m.unsubscribe(),m=null,$.subscribe(d)):b=!0})),b&&(m.unsubscribe(),m=null,$.subscribe(d))})}function Ke(f,h,d,m,b){return($,z)=>{let ve=d,We=h,ft=0;$.subscribe((0,S.x)(z,bt=>{const jt=ft++;We=ve?f(We,bt,jt):(ve=!0,bt),m&&z.next(We)},b&&(()=>{ve&&z.next(We),z.complete()})))}}function nn(f,h){return(0,Q.e)(Ke(f,h,arguments.length>=2,!0))}function wt(f){return f<=0?()=>be.E:(0,Q.e)((h,d)=>{let m=[];h.subscribe((0,S.x)(d,b=>{m.push(b),f{for(const b of m)d.next(b);d.complete()},void 0,()=>{m=null}))})}function Rt(f,h){const d=arguments.length>=2;return m=>m.pipe(f?(0,de.h)((b,$)=>f(b,$,m)):_.y,wt(1),d?Ee(h):Ce(()=>new W))}var Kt=w(2529),Pt=w(8746),Ut=w(1481);const it="primary",Xt=Symbol("RouteTitle");class kt{constructor(h){this.params=h||{}}has(h){return Object.prototype.hasOwnProperty.call(this.params,h)}get(h){if(this.has(h)){const d=this.params[h];return Array.isArray(d)?d[0]:d}return null}getAll(h){if(this.has(h)){const d=this.params[h];return Array.isArray(d)?d:[d]}return[]}get keys(){return Object.keys(this.params)}}function Vt(f){return new kt(f)}function rn(f,h,d){const m=d.path.split("/");if(m.length>f.length||"full"===d.pathMatch&&(h.hasChildren()||m.lengthm[$]===b)}return f===h}function Yt(f){return Array.prototype.concat.apply([],f)}function ht(f){return f.length>0?f[f.length-1]:null}function Et(f,h){for(const d in f)f.hasOwnProperty(d)&&h(f[d],d)}function ut(f){return(0,o.CqO)(f)?f:(0,o.QGY)(f)?(0,x.D)(Promise.resolve(f)):(0,N.of)(f)}const Ct=!1,qe={exact:function Hn(f,h,d){if(!He(f.segments,h.segments)||!Xn(f.segments,h.segments,d)||f.numberOfChildren!==h.numberOfChildren)return!1;for(const m in h.children)if(!f.children[m]||!Hn(f.children[m],h.children[m],d))return!1;return!0},subset:Er},on={exact:function Nt(f,h){return en(f,h)},subset:function zt(f,h){return Object.keys(h).length<=Object.keys(f).length&&Object.keys(h).every(d=>gt(f[d],h[d]))},ignored:()=>!0};function gn(f,h,d){return qe[d.paths](f.root,h.root,d.matrixParams)&&on[d.queryParams](f.queryParams,h.queryParams)&&!("exact"===d.fragment&&f.fragment!==h.fragment)}function Er(f,h,d){return jn(f,h,h.segments,d)}function jn(f,h,d,m){if(f.segments.length>d.length){const b=f.segments.slice(0,d.length);return!(!He(b,d)||h.hasChildren()||!Xn(b,d,m))}if(f.segments.length===d.length){if(!He(f.segments,d)||!Xn(f.segments,d,m))return!1;for(const b in h.children)if(!f.children[b]||!Er(f.children[b],h.children[b],m))return!1;return!0}{const b=d.slice(0,f.segments.length),$=d.slice(f.segments.length);return!!(He(f.segments,b)&&Xn(f.segments,b,m)&&f.children[it])&&jn(f.children[it],h,$,m)}}function Xn(f,h,d){return h.every((m,b)=>on[d](f[b].parameters,m.parameters))}class En{constructor(h=new xe([],{}),d={},m=null){this.root=h,this.queryParams=d,this.fragment=m}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Vt(this.queryParams)),this._queryParamMap}toString(){return Ht.serialize(this)}}class xe{constructor(h,d){this.segments=h,this.children=d,this.parent=null,Et(d,(m,b)=>m.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return _t(this)}}class se{constructor(h,d){this.path=h,this.parameters=d}get parameterMap(){return this._parameterMap||(this._parameterMap=Vt(this.parameters)),this._parameterMap}toString(){return ee(this)}}function He(f,h){return f.length===h.length&&f.every((d,m)=>d.path===h[m].path)}let pt=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return new vt},providedIn:"root"}),f})();class vt{parse(h){const d=new er(h);return new En(d.parseRootSegment(),d.parseQueryParams(),d.parseFragment())}serialize(h){const d=`/${tn(h.root,!0)}`,m=function Le(f){const h=Object.keys(f).map(d=>{const m=f[d];return Array.isArray(m)?m.map(b=>`${mn(d)}=${mn(b)}`).join("&"):`${mn(d)}=${mn(m)}`}).filter(d=>!!d);return h.length?`?${h.join("&")}`:""}(h.queryParams);return`${d}${m}${"string"==typeof h.fragment?`#${function ln(f){return encodeURI(f)}(h.fragment)}`:""}`}}const Ht=new vt;function _t(f){return f.segments.map(h=>ee(h)).join("/")}function tn(f,h){if(!f.hasChildren())return _t(f);if(h){const d=f.children[it]?tn(f.children[it],!1):"",m=[];return Et(f.children,(b,$)=>{$!==it&&m.push(`${$}:${tn(b,!1)}`)}),m.length>0?`${d}(${m.join("//")})`:d}{const d=function Ye(f,h){let d=[];return Et(f.children,(m,b)=>{b===it&&(d=d.concat(h(m,b)))}),Et(f.children,(m,b)=>{b!==it&&(d=d.concat(h(m,b)))}),d}(f,(m,b)=>b===it?[tn(f.children[it],!1)]:[`${b}:${tn(m,!1)}`]);return 1===Object.keys(f.children).length&&null!=f.children[it]?`${_t(f)}/${d[0]}`:`${_t(f)}/(${d.join("//")})`}}function Ln(f){return encodeURIComponent(f).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function mn(f){return Ln(f).replace(/%3B/gi,";")}function Ft(f){return Ln(f).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function _e(f){return decodeURIComponent(f)}function fe(f){return _e(f.replace(/\+/g,"%20"))}function ee(f){return`${Ft(f.path)}${function Se(f){return Object.keys(f).map(h=>`;${Ft(h)}=${Ft(f[h])}`).join("")}(f.parameters)}`}const yt=/^[^\/()?;=#]+/;function It(f){const h=f.match(yt);return h?h[0]:""}const cn=/^[^=?&#]+/,sn=/^[^&#]+/;class er{constructor(h){this.url=h,this.remaining=h}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new xe([],{}):new xe([],this.parseChildren())}parseQueryParams(){const h={};if(this.consumeOptional("?"))do{this.parseQueryParam(h)}while(this.consumeOptional("&"));return h}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const h=[];for(this.peekStartsWith("(")||h.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),h.push(this.parseSegment());let d={};this.peekStartsWith("/(")&&(this.capture("/"),d=this.parseParens(!0));let m={};return this.peekStartsWith("(")&&(m=this.parseParens(!1)),(h.length>0||Object.keys(d).length>0)&&(m[it]=new xe(h,d)),m}parseSegment(){const h=It(this.remaining);if(""===h&&this.peekStartsWith(";"))throw new o.vHH(4009,Ct);return this.capture(h),new se(_e(h),this.parseMatrixParams())}parseMatrixParams(){const h={};for(;this.consumeOptional(";");)this.parseParam(h);return h}parseParam(h){const d=It(this.remaining);if(!d)return;this.capture(d);let m="";if(this.consumeOptional("=")){const b=It(this.remaining);b&&(m=b,this.capture(m))}h[_e(d)]=_e(m)}parseQueryParam(h){const d=function Dn(f){const h=f.match(cn);return h?h[0]:""}(this.remaining);if(!d)return;this.capture(d);let m="";if(this.consumeOptional("=")){const z=function dn(f){const h=f.match(sn);return h?h[0]:""}(this.remaining);z&&(m=z,this.capture(m))}const b=fe(d),$=fe(m);if(h.hasOwnProperty(b)){let z=h[b];Array.isArray(z)||(z=[z],h[b]=z),z.push($)}else h[b]=$}parseParens(h){const d={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const m=It(this.remaining),b=this.remaining[m.length];if("/"!==b&&")"!==b&&";"!==b)throw new o.vHH(4010,Ct);let $;m.indexOf(":")>-1?($=m.slice(0,m.indexOf(":")),this.capture($),this.capture(":")):h&&($=it);const z=this.parseChildren();d[$]=1===Object.keys(z).length?z[it]:new xe([],z),this.consumeOptional("//")}return d}peekStartsWith(h){return this.remaining.startsWith(h)}consumeOptional(h){return!!this.peekStartsWith(h)&&(this.remaining=this.remaining.substring(h.length),!0)}capture(h){if(!this.consumeOptional(h))throw new o.vHH(4011,Ct)}}function sr(f){return f.segments.length>0?new xe([],{[it]:f}):f}function $n(f){const h={};for(const m of Object.keys(f.children)){const $=$n(f.children[m]);($.segments.length>0||$.hasChildren())&&(h[m]=$)}return function Tn(f){if(1===f.numberOfChildren&&f.children[it]){const h=f.children[it];return new xe(f.segments.concat(h.segments),h.children)}return f}(new xe(f.segments,h))}function xn(f){return f instanceof En}function gr(f,h,d,m,b){if(0===d.length)return Qt(h.root,h.root,h.root,m,b);const $=function Cn(f){if("string"==typeof f[0]&&1===f.length&&"/"===f[0])return new On(!0,0,f);let h=0,d=!1;const m=f.reduce((b,$,z)=>{if("object"==typeof $&&null!=$){if($.outlets){const ve={};return Et($.outlets,(We,ft)=>{ve[ft]="string"==typeof We?We.split("/"):We}),[...b,{outlets:ve}]}if($.segmentPath)return[...b,$.segmentPath]}return"string"!=typeof $?[...b,$]:0===z?($.split("/").forEach((ve,We)=>{0==We&&"."===ve||(0==We&&""===ve?d=!0:".."===ve?h++:""!=ve&&b.push(ve))}),b):[...b,$]},[]);return new On(d,h,m)}(d);return $.toRoot()?Qt(h.root,h.root,new xe([],{}),m,b):function z(We){const ft=function q(f,h,d,m){if(f.isAbsolute)return new rt(h.root,!0,0);if(-1===m)return new rt(d,d===h.root,0);return function he(f,h,d){let m=f,b=h,$=d;for(;$>b;){if($-=b,m=m.parent,!m)throw new o.vHH(4005,!1);b=m.segments.length}return new rt(m,!1,b-$)}(d,m+($t(f.commands[0])?0:1),f.numberOfDoubleDots)}($,h,f.snapshot?._urlSegment,We),bt=ft.processChildren?X(ft.segmentGroup,ft.index,$.commands):Pe(ft.segmentGroup,ft.index,$.commands);return Qt(h.root,ft.segmentGroup,bt,m,b)}(f.snapshot?._lastPathIndex)}function $t(f){return"object"==typeof f&&null!=f&&!f.outlets&&!f.segmentPath}function fn(f){return"object"==typeof f&&null!=f&&f.outlets}function Qt(f,h,d,m,b){let z,$={};m&&Et(m,(We,ft)=>{$[ft]=Array.isArray(We)?We.map(bt=>`${bt}`):`${We}`}),z=f===h?d:Un(f,h,d);const ve=sr($n(z));return new En(ve,$,b)}function Un(f,h,d){const m={};return Et(f.children,(b,$)=>{m[$]=b===h?d:Un(b,h,d)}),new xe(f.segments,m)}class On{constructor(h,d,m){if(this.isAbsolute=h,this.numberOfDoubleDots=d,this.commands=m,h&&m.length>0&&$t(m[0]))throw new o.vHH(4003,!1);const b=m.find(fn);if(b&&b!==ht(m))throw new o.vHH(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class rt{constructor(h,d,m){this.segmentGroup=h,this.processChildren=d,this.index=m}}function Pe(f,h,d){if(f||(f=new xe([],{})),0===f.segments.length&&f.hasChildren())return X(f,h,d);const m=function le(f,h,d){let m=0,b=h;const $={match:!1,pathIndex:0,commandIndex:0};for(;b=d.length)return $;const z=f.segments[b],ve=d[m];if(fn(ve))break;const We=`${ve}`,ft=m0&&void 0===We)break;if(We&&ft&&"object"==typeof ft&&void 0===ft.outlets){if(!ot(We,ft,z))return $;m+=2}else{if(!ot(We,{},z))return $;m++}b++}return{match:!0,pathIndex:b,commandIndex:m}}(f,h,d),b=d.slice(m.commandIndex);if(m.match&&m.pathIndex{"string"==typeof $&&($=[$]),null!==$&&(b[z]=Pe(f.children[z],h,$))}),Et(f.children,($,z)=>{void 0===m[z]&&(b[z]=$)}),new xe(f.segments,b)}}function Ie(f,h,d){const m=f.segments.slice(0,h);let b=0;for(;b{"string"==typeof d&&(d=[d]),null!==d&&(h[m]=Ie(new xe([],{}),0,d))}),h}function Re(f){const h={};return Et(f,(d,m)=>h[m]=`${d}`),h}function ot(f,h,d){return f==d.path&&en(h,d.parameters)}class st{constructor(h,d){this.id=h,this.url=d}}class Mt extends st{constructor(h,d,m="imperative",b=null){super(h,d),this.type=0,this.navigationTrigger=m,this.restoredState=b}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class Wt extends st{constructor(h,d,m){super(h,d),this.urlAfterRedirects=m,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class Bt extends st{constructor(h,d,m,b){super(h,d),this.reason=m,this.code=b,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class An extends st{constructor(h,d,m,b){super(h,d),this.error=m,this.target=b,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class Rn extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Pn extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class ur extends st{constructor(h,d,m,b,$){super(h,d),this.urlAfterRedirects=m,this.state=b,this.shouldActivate=$,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class mr extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class an extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class fo{constructor(h){this.route=h,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class ho{constructor(h){this.route=h,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class Zr{constructor(h){this.snapshot=h,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class jr{constructor(h){this.snapshot=h,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class xr{constructor(h){this.snapshot=h,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Or{constructor(h){this.snapshot=h,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class ar{constructor(h,d,m){this.routerEvent=h,this.position=d,this.anchor=m,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class po{constructor(h){this._root=h}get root(){return this._root.value}parent(h){const d=this.pathFromRoot(h);return d.length>1?d[d.length-2]:null}children(h){const d=Fn(h,this._root);return d?d.children.map(m=>m.value):[]}firstChild(h){const d=Fn(h,this._root);return d&&d.children.length>0?d.children[0].value:null}siblings(h){const d=zn(h,this._root);return d.length<2?[]:d[d.length-2].children.map(b=>b.value).filter(b=>b!==h)}pathFromRoot(h){return zn(h,this._root).map(d=>d.value)}}function Fn(f,h){if(f===h.value)return h;for(const d of h.children){const m=Fn(f,d);if(m)return m}return null}function zn(f,h){if(f===h.value)return[h];for(const d of h.children){const m=zn(f,d);if(m.length)return m.unshift(h),m}return[]}class qn{constructor(h,d){this.value=h,this.children=d}toString(){return`TreeNode(${this.value})`}}function dr(f){const h={};return f&&f.children.forEach(d=>h[d.value.outlet]=d),h}class Sr extends po{constructor(h,d){super(h),this.snapshot=d,vo(this,h)}toString(){return this.snapshot.toString()}}function Gn(f,h){const d=function go(f,h){const z=new Pr([],{},{},"",{},it,h,null,f.root,-1,{});return new xo("",new qn(z,[]))}(f,h),m=new ge.X([new se("",{})]),b=new ge.X({}),$=new ge.X({}),z=new ge.X({}),ve=new ge.X(""),We=new Rr(m,b,z,ve,$,it,h,d.root);return We.snapshot=d.root,new Sr(new qn(We,[]),d)}class Rr{constructor(h,d,m,b,$,z,ve,We){this.url=h,this.params=d,this.queryParams=m,this.fragment=b,this.data=$,this.outlet=z,this.component=ve,this.title=this.data?.pipe((0,ce.U)(ft=>ft[Xt]))??(0,N.of)(void 0),this._futureSnapshot=We}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe((0,ce.U)(h=>Vt(h)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe((0,ce.U)(h=>Vt(h)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function vr(f,h="emptyOnly"){const d=f.pathFromRoot;let m=0;if("always"!==h)for(m=d.length-1;m>=1;){const b=d[m],$=d[m-1];if(b.routeConfig&&""===b.routeConfig.path)m--;else{if($.component)break;m--}}return function mo(f){return f.reduce((h,d)=>({params:{...h.params,...d.params},data:{...h.data,...d.data},resolve:{...d.data,...h.resolve,...d.routeConfig?.data,...d._resolvedData}}),{params:{},data:{},resolve:{}})}(d.slice(m))}class Pr{constructor(h,d,m,b,$,z,ve,We,ft,bt,jt){this.url=h,this.params=d,this.queryParams=m,this.fragment=b,this.data=$,this.outlet=z,this.component=ve,this.routeConfig=We,this._urlSegment=ft,this._lastPathIndex=bt,this._resolve=jt}get title(){return this.data?.[Xt]}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=Vt(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Vt(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(m=>m.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class xo extends po{constructor(h,d){super(d),this.url=h,vo(this,d)}toString(){return yo(this._root)}}function vo(f,h){h.value._routerState=f,h.children.forEach(d=>vo(f,d))}function yo(f){const h=f.children.length>0?` { ${f.children.map(yo).join(", ")} } `:"";return`${f.value}${h}`}function Oo(f){if(f.snapshot){const h=f.snapshot,d=f._futureSnapshot;f.snapshot=d,en(h.queryParams,d.queryParams)||f.queryParams.next(d.queryParams),h.fragment!==d.fragment&&f.fragment.next(d.fragment),en(h.params,d.params)||f.params.next(d.params),function Vn(f,h){if(f.length!==h.length)return!1;for(let d=0;den(d.parameters,h[m].parameters))}(f.url,h.url);return d&&!(!f.parent!=!h.parent)&&(!f.parent||Jr(f.parent,h.parent))}function Fr(f,h,d){if(d&&f.shouldReuseRoute(h.value,d.value.snapshot)){const m=d.value;m._futureSnapshot=h.value;const b=function Yo(f,h,d){return h.children.map(m=>{for(const b of d.children)if(f.shouldReuseRoute(m.value,b.value.snapshot))return Fr(f,m,b);return Fr(f,m)})}(f,h,d);return new qn(m,b)}{if(f.shouldAttach(h.value)){const $=f.retrieve(h.value);if(null!==$){const z=$.route;return z.value._futureSnapshot=h.value,z.children=h.children.map(ve=>Fr(f,ve)),z}}const m=function si(f){return new Rr(new ge.X(f.url),new ge.X(f.params),new ge.X(f.queryParams),new ge.X(f.fragment),new ge.X(f.data),f.outlet,f.component,f)}(h.value),b=h.children.map($=>Fr(f,$));return new qn(m,b)}}const Ro="ngNavigationCancelingError";function Ur(f,h){const{redirectTo:d,navigationBehaviorOptions:m}=xn(h)?{redirectTo:h,navigationBehaviorOptions:void 0}:h,b=zr(!1,0,h);return b.url=d,b.navigationBehaviorOptions=m,b}function zr(f,h,d){const m=new Error("NavigationCancelingError: "+(f||""));return m[Ro]=!0,m.cancellationCode=h,d&&(m.url=d),m}function Do(f){return Gr(f)&&xn(f.url)}function Gr(f){return f&&f[Ro]}class Yr{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.injector=null,this.children=new fr,this.attachRef=null}}let fr=(()=>{class f{constructor(){this.contexts=new Map}onChildOutletCreated(d,m){const b=this.getOrCreateContext(d);b.outlet=m,this.contexts.set(d,b)}onChildOutletDestroyed(d){const m=this.getContext(d);m&&(m.outlet=null,m.attachRef=null)}onOutletDeactivated(){const d=this.contexts;return this.contexts=new Map,d}onOutletReAttached(d){this.contexts=d}getOrCreateContext(d){let m=this.getContext(d);return m||(m=new Yr,this.contexts.set(d,m)),m}getContext(d){return this.contexts.get(d)||null}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const hr=!1;let ai=(()=>{class f{constructor(){this.activated=null,this._activatedRoute=null,this.name=it,this.activateEvents=new o.vpe,this.deactivateEvents=new o.vpe,this.attachEvents=new o.vpe,this.detachEvents=new o.vpe,this.parentContexts=(0,o.f3M)(fr),this.location=(0,o.f3M)(o.s_b),this.changeDetector=(0,o.f3M)(o.sBO),this.environmentInjector=(0,o.f3M)(o.lqb)}ngOnChanges(d){if(d.name){const{firstChange:m,previousValue:b}=d.name;if(m)return;this.isTrackedInParentContexts(b)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(b)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name)}isTrackedInParentContexts(d){return this.parentContexts.getContext(d)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const d=this.parentContexts.getContext(this.name);d?.route&&(d.attachRef?this.attach(d.attachRef,d.route):this.activateWith(d.route,d.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new o.vHH(4012,hr);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new o.vHH(4012,hr);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new o.vHH(4012,hr);this.location.detach();const d=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(d.instance),d}attach(d,m){this.activated=d,this._activatedRoute=m,this.location.insert(d.hostView),this.attachEvents.emit(d.instance)}deactivate(){if(this.activated){const d=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(d)}}activateWith(d,m){if(this.isActivated)throw new o.vHH(4013,hr);this._activatedRoute=d;const b=this.location,z=d.snapshot.component,ve=this.parentContexts.getOrCreateContext(this.name).children,We=new nr(d,ve,b.injector);if(m&&function li(f){return!!f.resolveComponentFactory}(m)){const ft=m.resolveComponentFactory(z);this.activated=b.createComponent(ft,b.length,We)}else this.activated=b.createComponent(z,{index:b.length,injector:We,environmentInjector:m??this.environmentInjector});this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275dir=o.lG2({type:f,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[o.TTD]}),f})();class nr{constructor(h,d,m){this.route=h,this.childContexts=d,this.parent=m}get(h,d){return h===Rr?this.route:h===fr?this.childContexts:this.parent.get(h,d)}}let kr=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275cmp=o.Xpm({type:f,selectors:[["ng-component"]],standalone:!0,features:[o.jDz],decls:1,vars:0,template:function(d,m){1&d&&o._UZ(0,"router-outlet")},dependencies:[ai],encapsulation:2}),f})();function bo(f,h){return f.providers&&!f._injector&&(f._injector=(0,o.MMx)(f.providers,h,`Route: ${f.path}`)),f._injector??h}function Nr(f){const h=f.children&&f.children.map(Nr),d=h?{...f,children:h}:{...f};return!d.component&&!d.loadComponent&&(h||d.loadChildren)&&d.outlet&&d.outlet!==it&&(d.component=kr),d}function Zn(f){return f.outlet||it}function Lr(f,h){const d=f.filter(m=>Zn(m)===h);return d.push(...f.filter(m=>Zn(m)!==h)),d}function Po(f){if(!f)return null;if(f.routeConfig?._injector)return f.routeConfig._injector;for(let h=f.parent;h;h=h.parent){const d=h.routeConfig;if(d?._loadedInjector)return d._loadedInjector;if(d?._injector)return d._injector}return null}class Sn{constructor(h,d,m,b){this.routeReuseStrategy=h,this.futureState=d,this.currState=m,this.forwardEvent=b}activate(h){const d=this.futureState._root,m=this.currState?this.currState._root:null;this.deactivateChildRoutes(d,m,h),Oo(this.futureState.root),this.activateChildRoutes(d,m,h)}deactivateChildRoutes(h,d,m){const b=dr(d);h.children.forEach($=>{const z=$.value.outlet;this.deactivateRoutes($,b[z],m),delete b[z]}),Et(b,($,z)=>{this.deactivateRouteAndItsChildren($,m)})}deactivateRoutes(h,d,m){const b=h.value,$=d?d.value:null;if(b===$)if(b.component){const z=m.getContext(b.outlet);z&&this.deactivateChildRoutes(h,d,z.children)}else this.deactivateChildRoutes(h,d,m);else $&&this.deactivateRouteAndItsChildren(d,m)}deactivateRouteAndItsChildren(h,d){h.value.component&&this.routeReuseStrategy.shouldDetach(h.value.snapshot)?this.detachAndStoreRouteSubtree(h,d):this.deactivateRouteAndOutlet(h,d)}detachAndStoreRouteSubtree(h,d){const m=d.getContext(h.value.outlet),b=m&&h.value.component?m.children:d,$=dr(h);for(const z of Object.keys($))this.deactivateRouteAndItsChildren($[z],b);if(m&&m.outlet){const z=m.outlet.detach(),ve=m.children.onOutletDeactivated();this.routeReuseStrategy.store(h.value.snapshot,{componentRef:z,route:h,contexts:ve})}}deactivateRouteAndOutlet(h,d){const m=d.getContext(h.value.outlet),b=m&&h.value.component?m.children:d,$=dr(h);for(const z of Object.keys($))this.deactivateRouteAndItsChildren($[z],b);m&&m.outlet&&(m.outlet.deactivate(),m.children.onOutletDeactivated(),m.attachRef=null,m.resolver=null,m.route=null)}activateChildRoutes(h,d,m){const b=dr(d);h.children.forEach($=>{this.activateRoutes($,b[$.value.outlet],m),this.forwardEvent(new Or($.value.snapshot))}),h.children.length&&this.forwardEvent(new jr(h.value.snapshot))}activateRoutes(h,d,m){const b=h.value,$=d?d.value:null;if(Oo(b),b===$)if(b.component){const z=m.getOrCreateContext(b.outlet);this.activateChildRoutes(h,d,z.children)}else this.activateChildRoutes(h,d,m);else if(b.component){const z=m.getOrCreateContext(b.outlet);if(this.routeReuseStrategy.shouldAttach(b.snapshot)){const ve=this.routeReuseStrategy.retrieve(b.snapshot);this.routeReuseStrategy.store(b.snapshot,null),z.children.onOutletReAttached(ve.contexts),z.attachRef=ve.componentRef,z.route=ve.route.value,z.outlet&&z.outlet.attach(ve.componentRef,ve.route.value),Oo(ve.route.value),this.activateChildRoutes(h,null,z.children)}else{const ve=Po(b.snapshot),We=ve?.get(o._Vd)??null;z.attachRef=null,z.route=b,z.resolver=We,z.injector=ve,z.outlet&&z.outlet.activateWith(b,z.injector),this.activateChildRoutes(h,null,z.children)}}else this.activateChildRoutes(h,null,m)}}class Fo{constructor(h){this.path=h,this.route=this.path[this.path.length-1]}}class wo{constructor(h,d){this.component=h,this.route=d}}function ko(f,h,d){const m=f._root;return Kr(m,h?h._root:null,d,[m.value])}function to(f,h){const d=Symbol(),m=h.get(f,d);return m===d?"function"!=typeof f||(0,o.Z0I)(f)?h.get(f):f:m}function Kr(f,h,d,m,b={canDeactivateChecks:[],canActivateChecks:[]}){const $=dr(h);return f.children.forEach(z=>{(function no(f,h,d,m,b={canDeactivateChecks:[],canActivateChecks:[]}){const $=f.value,z=h?h.value:null,ve=d?d.getContext(f.value.outlet):null;if(z&&$.routeConfig===z.routeConfig){const We=function rr(f,h,d){if("function"==typeof d)return d(f,h);switch(d){case"pathParamsChange":return!He(f.url,h.url);case"pathParamsOrQueryParamsChange":return!He(f.url,h.url)||!en(f.queryParams,h.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Jr(f,h)||!en(f.queryParams,h.queryParams);default:return!Jr(f,h)}}(z,$,$.routeConfig.runGuardsAndResolvers);We?b.canActivateChecks.push(new Fo(m)):($.data=z.data,$._resolvedData=z._resolvedData),Kr(f,h,$.component?ve?ve.children:null:d,m,b),We&&ve&&ve.outlet&&ve.outlet.isActivated&&b.canDeactivateChecks.push(new wo(ve.outlet.component,z))}else z&&ro(h,ve,b),b.canActivateChecks.push(new Fo(m)),Kr(f,null,$.component?ve?ve.children:null:d,m,b)})(z,$[z.value.outlet],d,m.concat([z.value]),b),delete $[z.value.outlet]}),Et($,(z,ve)=>ro(z,d.getContext(ve),b)),b}function ro(f,h,d){const m=dr(f),b=f.value;Et(m,($,z)=>{ro($,b.component?h?h.children.getContext(z):null:h,d)}),d.canDeactivateChecks.push(new wo(b.component&&h&&h.outlet&&h.outlet.isActivated?h.outlet.component:null,b))}function hn(f){return"function"==typeof f}function Je(f){return f instanceof W||"EmptyError"===f?.name}const at=Symbol("INITIAL_VALUE");function Dt(){return(0,Ae.w)(f=>E(f.map(h=>h.pipe((0,De.q)(1),function ue(...f){const h=(0,G.yG)(f);return(0,Q.e)((d,m)=>{(h?ke(f,d,h):ke(f,d)).subscribe(m)})}(at)))).pipe((0,ce.U)(h=>{for(const d of h)if(!0!==d){if(d===at)return at;if(!1===d||d instanceof En)return d}return!0}),(0,de.h)(h=>h!==at),(0,De.q)(1)))}function br(f){return(0,Be.z)((0,Ue.b)(h=>{if(xn(h))throw Ur(0,h)}),(0,ce.U)(h=>!0===h))}const ci={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function ga(f,h,d,m,b){const $=Gi(f,h,d);return $.matched?function zi(f,h,d,m){const b=h.canMatch;if(!b||0===b.length)return(0,N.of)(!0);const $=b.map(z=>{const ve=to(z,f);return ut(function g(f){return f&&hn(f.canMatch)}(ve)?ve.canMatch(h,d):f.runInContext(()=>ve(h,d)))});return(0,N.of)($).pipe(Dt(),br())}(m=bo(h,m),h,d).pipe((0,ce.U)(z=>!0===z?$:{...ci})):(0,N.of)($)}function Gi(f,h,d){if(""===h.path)return"full"===h.pathMatch&&(f.hasChildren()||d.length>0)?{...ci}:{matched:!0,consumedSegments:[],remainingSegments:d,parameters:{},positionalParamSegments:{}};const b=(h.matcher||rn)(d,f,h);if(!b)return{...ci};const $={};Et(b.posParams,(ve,We)=>{$[We]=ve.path});const z=b.consumed.length>0?{...$,...b.consumed[b.consumed.length-1].parameters}:$;return{matched:!0,consumedSegments:b.consumed,remainingSegments:d.slice(b.consumed.length),parameters:z,positionalParamSegments:b.posParams??{}}}function Yi(f,h,d,m){if(d.length>0&&function oo(f,h,d){return d.some(m=>io(f,h,m)&&Zn(m)!==it)}(f,d,m)){const $=new xe(h,function lr(f,h,d,m){const b={};b[it]=m,m._sourceSegment=f,m._segmentIndexShift=h.length;for(const $ of d)if(""===$.path&&Zn($)!==it){const z=new xe([],{});z._sourceSegment=f,z._segmentIndexShift=h.length,b[Zn($)]=z}return b}(f,h,m,new xe(d,f.children)));return $._sourceSegment=f,$._segmentIndexShift=h.length,{segmentGroup:$,slicedSegments:[]}}if(0===d.length&&function As(f,h,d){return d.some(m=>io(f,h,m))}(f,d,m)){const $=new xe(f.segments,function Ms(f,h,d,m,b){const $={};for(const z of m)if(io(f,d,z)&&!b[Zn(z)]){const ve=new xe([],{});ve._sourceSegment=f,ve._segmentIndexShift=h.length,$[Zn(z)]=ve}return{...b,...$}}(f,h,d,m,f.children));return $._sourceSegment=f,$._segmentIndexShift=h.length,{segmentGroup:$,slicedSegments:d}}const b=new xe(f.segments,f.children);return b._sourceSegment=f,b._segmentIndexShift=h.length,{segmentGroup:b,slicedSegments:d}}function io(f,h,d){return(!(f.hasChildren()||h.length>0)||"full"!==d.pathMatch)&&""===d.path}function Br(f,h,d,m){return!!(Zn(f)===m||m!==it&&io(h,d,f))&&("**"===f.path||Gi(h,f,d).matched)}function Ts(f,h,d){return 0===h.length&&!f.children[d]}const qo=!1;class ui{constructor(h){this.segmentGroup=h||null}}class xs{constructor(h){this.urlTree=h}}function No(f){return oe(new ui(f))}function Mi(f){return oe(new xs(f))}class Rs{constructor(h,d,m,b,$){this.injector=h,this.configLoader=d,this.urlSerializer=m,this.urlTree=b,this.config=$,this.allowRedirects=!0}apply(){const h=Yi(this.urlTree.root,[],[],this.config).segmentGroup,d=new xe(h.segments,h.children);return this.expandSegmentGroup(this.injector,this.config,d,it).pipe((0,ce.U)($=>this.createUrlTree($n($),this.urlTree.queryParams,this.urlTree.fragment))).pipe(St($=>{if($ instanceof xs)return this.allowRedirects=!1,this.match($.urlTree);throw $ instanceof ui?this.noMatchError($):$}))}match(h){return this.expandSegmentGroup(this.injector,this.config,h.root,it).pipe((0,ce.U)(b=>this.createUrlTree($n(b),h.queryParams,h.fragment))).pipe(St(b=>{throw b instanceof ui?this.noMatchError(b):b}))}noMatchError(h){return new o.vHH(4002,qo)}createUrlTree(h,d,m){const b=sr(h);return new En(b,d,m)}expandSegmentGroup(h,d,m,b){return 0===m.segments.length&&m.hasChildren()?this.expandChildren(h,d,m).pipe((0,ce.U)($=>new xe([],$))):this.expandSegment(h,m,d,m.segments,b,!0)}expandChildren(h,d,m){const b=[];for(const $ of Object.keys(m.children))"primary"===$?b.unshift($):b.push($);return(0,x.D)(b).pipe((0,et.b)($=>{const z=m.children[$],ve=Lr(d,$);return this.expandSegmentGroup(h,ve,z,$).pipe((0,ce.U)(We=>({segment:We,outlet:$})))}),nn(($,z)=>($[z.outlet]=z.segment,$),{}),Rt())}expandSegment(h,d,m,b,$,z){return(0,x.D)(m).pipe((0,et.b)(ve=>this.expandSegmentAgainstRoute(h,d,m,ve,b,$,z).pipe(St(ft=>{if(ft instanceof ui)return(0,N.of)(null);throw ft}))),dt(ve=>!!ve),St((ve,We)=>{if(Je(ve))return Ts(d,b,$)?(0,N.of)(new xe([],{})):No(d);throw ve}))}expandSegmentAgainstRoute(h,d,m,b,$,z,ve){return Br(b,d,$,z)?void 0===b.redirectTo?this.matchSegmentAgainstRoute(h,d,b,$,z):ve&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z):No(d):No(d)}expandSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z){return"**"===b.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(h,m,b,z):this.expandRegularSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z)}expandWildCardWithParamsAgainstRouteUsingRedirect(h,d,m,b){const $=this.applyRedirectCommands([],m.redirectTo,{});return m.redirectTo.startsWith("/")?Mi($):this.lineralizeSegments(m,$).pipe((0,ne.z)(z=>{const ve=new xe(z,{});return this.expandSegment(h,ve,d,z,b,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z){const{matched:ve,consumedSegments:We,remainingSegments:ft,positionalParamSegments:bt}=Gi(d,b,$);if(!ve)return No(d);const jt=this.applyRedirectCommands(We,b.redirectTo,bt);return b.redirectTo.startsWith("/")?Mi(jt):this.lineralizeSegments(b,jt).pipe((0,ne.z)(wn=>this.expandSegment(h,d,m,wn.concat(ft),z,!1)))}matchSegmentAgainstRoute(h,d,m,b,$){return"**"===m.path?(h=bo(m,h),m.loadChildren?(m._loadedRoutes?(0,N.of)({routes:m._loadedRoutes,injector:m._loadedInjector}):this.configLoader.loadChildren(h,m)).pipe((0,ce.U)(ve=>(m._loadedRoutes=ve.routes,m._loadedInjector=ve.injector,new xe(b,{})))):(0,N.of)(new xe(b,{}))):ga(d,m,b,h).pipe((0,Ae.w)(({matched:z,consumedSegments:ve,remainingSegments:We})=>z?this.getChildConfig(h=m._injector??h,m,b).pipe((0,ne.z)(bt=>{const jt=bt.injector??h,wn=bt.routes,{segmentGroup:lo,slicedSegments:$o}=Yi(d,ve,We,wn),Ci=new xe(lo.segments,lo.children);if(0===$o.length&&Ci.hasChildren())return this.expandChildren(jt,wn,Ci).pipe((0,ce.U)(_i=>new xe(ve,_i)));if(0===wn.length&&0===$o.length)return(0,N.of)(new xe(ve,{}));const Hr=Zn(m)===$;return this.expandSegment(jt,Ci,wn,$o,Hr?it:$,!0).pipe((0,ce.U)(Ri=>new xe(ve.concat(Ri.segments),Ri.children)))})):No(d)))}getChildConfig(h,d,m){return d.children?(0,N.of)({routes:d.children,injector:h}):d.loadChildren?void 0!==d._loadedRoutes?(0,N.of)({routes:d._loadedRoutes,injector:d._loadedInjector}):function Xo(f,h,d,m){const b=h.canLoad;if(void 0===b||0===b.length)return(0,N.of)(!0);const $=b.map(z=>{const ve=to(z,f);return ut(function C(f){return f&&hn(f.canLoad)}(ve)?ve.canLoad(h,d):f.runInContext(()=>ve(h,d)))});return(0,N.of)($).pipe(Dt(),br())}(h,d,m).pipe((0,ne.z)(b=>b?this.configLoader.loadChildren(h,d).pipe((0,Ue.b)($=>{d._loadedRoutes=$.routes,d._loadedInjector=$.injector})):function Wi(f){return oe(zr(qo,3))}())):(0,N.of)({routes:[],injector:h})}lineralizeSegments(h,d){let m=[],b=d.root;for(;;){if(m=m.concat(b.segments),0===b.numberOfChildren)return(0,N.of)(m);if(b.numberOfChildren>1||!b.children[it])return oe(new o.vHH(4e3,qo));b=b.children[it]}}applyRedirectCommands(h,d,m){return this.applyRedirectCreateUrlTree(d,this.urlSerializer.parse(d),h,m)}applyRedirectCreateUrlTree(h,d,m,b){const $=this.createSegmentGroup(h,d.root,m,b);return new En($,this.createQueryParams(d.queryParams,this.urlTree.queryParams),d.fragment)}createQueryParams(h,d){const m={};return Et(h,(b,$)=>{if("string"==typeof b&&b.startsWith(":")){const ve=b.substring(1);m[$]=d[ve]}else m[$]=b}),m}createSegmentGroup(h,d,m,b){const $=this.createSegments(h,d.segments,m,b);let z={};return Et(d.children,(ve,We)=>{z[We]=this.createSegmentGroup(h,ve,m,b)}),new xe($,z)}createSegments(h,d,m,b){return d.map($=>$.path.startsWith(":")?this.findPosParam(h,$,b):this.findOrReturn($,m))}findPosParam(h,d,m){const b=m[d.path.substring(1)];if(!b)throw new o.vHH(4001,qo);return b}findOrReturn(h,d){let m=0;for(const b of d){if(b.path===h.path)return d.splice(m),b;m++}return h}}class A{}class ae{constructor(h,d,m,b,$,z,ve){this.injector=h,this.rootComponentType=d,this.config=m,this.urlTree=b,this.url=$,this.paramsInheritanceStrategy=z,this.urlSerializer=ve}recognize(){const h=Yi(this.urlTree.root,[],[],this.config.filter(d=>void 0===d.redirectTo)).segmentGroup;return this.processSegmentGroup(this.injector,this.config,h,it).pipe((0,ce.U)(d=>{if(null===d)return null;const m=new Pr([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},it,this.rootComponentType,null,this.urlTree.root,-1,{}),b=new qn(m,d),$=new xo(this.url,b);return this.inheritParamsAndData($._root),$}))}inheritParamsAndData(h){const d=h.value,m=vr(d,this.paramsInheritanceStrategy);d.params=Object.freeze(m.params),d.data=Object.freeze(m.data),h.children.forEach(b=>this.inheritParamsAndData(b))}processSegmentGroup(h,d,m,b){return 0===m.segments.length&&m.hasChildren()?this.processChildren(h,d,m):this.processSegment(h,d,m,m.segments,b)}processChildren(h,d,m){return(0,x.D)(Object.keys(m.children)).pipe((0,et.b)(b=>{const $=m.children[b],z=Lr(d,b);return this.processSegmentGroup(h,z,$,b)}),nn((b,$)=>b&&$?(b.push(...$),b):null),(0,Kt.o)(b=>null!==b),Ee(null),Rt(),(0,ce.U)(b=>{if(null===b)return null;const $=qt(b);return function $e(f){f.sort((h,d)=>h.value.outlet===it?-1:d.value.outlet===it?1:h.value.outlet.localeCompare(d.value.outlet))}($),$}))}processSegment(h,d,m,b,$){return(0,x.D)(d).pipe((0,et.b)(z=>this.processSegmentAgainstRoute(z._injector??h,z,m,b,$)),dt(z=>!!z),St(z=>{if(Je(z))return Ts(m,b,$)?(0,N.of)([]):(0,N.of)(null);throw z}))}processSegmentAgainstRoute(h,d,m,b,$){if(d.redirectTo||!Br(d,m,b,$))return(0,N.of)(null);let z;if("**"===d.path){const ve=b.length>0?ht(b).parameters:{},We=Jt(m)+b.length,ft=new Pr(b,ve,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,yn(d),Zn(d),d.component??d._loadedComponent??null,d,un(m),We,Wn(d));z=(0,N.of)({snapshot:ft,consumedSegments:[],remainingSegments:[]})}else z=ga(m,d,b,h).pipe((0,ce.U)(({matched:ve,consumedSegments:We,remainingSegments:ft,parameters:bt})=>{if(!ve)return null;const jt=Jt(m)+We.length;return{snapshot:new Pr(We,bt,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,yn(d),Zn(d),d.component??d._loadedComponent??null,d,un(m),jt,Wn(d)),consumedSegments:We,remainingSegments:ft}}));return z.pipe((0,Ae.w)(ve=>{if(null===ve)return(0,N.of)(null);const{snapshot:We,consumedSegments:ft,remainingSegments:bt}=ve;h=d._injector??h;const jt=d._loadedInjector??h,wn=function Xe(f){return f.children?f.children:f.loadChildren?f._loadedRoutes:[]}(d),{segmentGroup:lo,slicedSegments:$o}=Yi(m,ft,bt,wn.filter(Hr=>void 0===Hr.redirectTo));if(0===$o.length&&lo.hasChildren())return this.processChildren(jt,wn,lo).pipe((0,ce.U)(Hr=>null===Hr?null:[new qn(We,Hr)]));if(0===wn.length&&0===$o.length)return(0,N.of)([new qn(We,[])]);const Ci=Zn(d)===$;return this.processSegment(jt,wn,lo,$o,Ci?it:$).pipe((0,ce.U)(Hr=>null===Hr?null:[new qn(We,Hr)]))}))}}function lt(f){const h=f.value.routeConfig;return h&&""===h.path&&void 0===h.redirectTo}function qt(f){const h=[],d=new Set;for(const m of f){if(!lt(m)){h.push(m);continue}const b=h.find($=>m.value.routeConfig===$.value.routeConfig);void 0!==b?(b.children.push(...m.children),d.add(b)):h.push(m)}for(const m of d){const b=qt(m.children);h.push(new qn(m.value,b))}return h.filter(m=>!d.has(m))}function un(f){let h=f;for(;h._sourceSegment;)h=h._sourceSegment;return h}function Jt(f){let h=f,d=h._segmentIndexShift??0;for(;h._sourceSegment;)h=h._sourceSegment,d+=h._segmentIndexShift??0;return d-1}function yn(f){return f.data||{}}function Wn(f){return f.resolve||{}}function Ai(f){return"string"==typeof f.title||null===f.title}function so(f){return(0,Ae.w)(h=>{const d=f(h);return d?(0,x.D)(d).pipe((0,ce.U)(()=>h)):(0,N.of)(h)})}class gl{constructor(h){this.router=h,this.currentNavigation=null}setupNavigations(h){const d=this.router.events;return h.pipe((0,de.h)(m=>0!==m.id),(0,ce.U)(m=>({...m,extractedUrl:this.router.urlHandlingStrategy.extract(m.rawUrl)})),(0,Ae.w)(m=>{let b=!1,$=!1;return(0,N.of)(m).pipe((0,Ue.b)(z=>{this.currentNavigation={id:z.id,initialUrl:z.rawUrl,extractedUrl:z.extractedUrl,trigger:z.source,extras:z.extras,previousNavigation:this.router.lastSuccessfulNavigation?{...this.router.lastSuccessfulNavigation,previousNavigation:null}:null}}),(0,Ae.w)(z=>{const ve=this.router.browserUrlTree.toString(),We=!this.router.navigated||z.extractedUrl.toString()!==ve||ve!==this.router.currentUrlTree.toString();if(("reload"===this.router.onSameUrlNavigation||We)&&this.router.urlHandlingStrategy.shouldProcessUrl(z.rawUrl))return va(z.source)&&(this.router.browserUrlTree=z.extractedUrl),(0,N.of)(z).pipe((0,Ae.w)(bt=>{const jt=this.router.transitions.getValue();return d.next(new Mt(bt.id,this.router.serializeUrl(bt.extractedUrl),bt.source,bt.restoredState)),jt!==this.router.transitions.getValue()?be.E:Promise.resolve(bt)}),function Ki(f,h,d,m){return(0,Ae.w)(b=>function ma(f,h,d,m,b){return new Rs(f,h,d,m,b).apply()}(f,h,d,b.extractedUrl,m).pipe((0,ce.U)($=>({...b,urlAfterRedirects:$}))))}(this.router.ngModule.injector,this.router.configLoader,this.router.urlSerializer,this.router.config),(0,Ue.b)(bt=>{this.currentNavigation={...this.currentNavigation,finalUrl:bt.urlAfterRedirects},m.urlAfterRedirects=bt.urlAfterRedirects}),function Eo(f,h,d,m,b){return(0,ne.z)($=>function H(f,h,d,m,b,$,z="emptyOnly"){return new ae(f,h,d,m,b,z,$).recognize().pipe((0,Ae.w)(ve=>null===ve?function D(f){return new M.y(h=>h.error(f))}(new A):(0,N.of)(ve)))}(f,h,d,$.urlAfterRedirects,m.serialize($.urlAfterRedirects),m,b).pipe((0,ce.U)(z=>({...$,targetSnapshot:z}))))}(this.router.ngModule.injector,this.router.rootComponentType,this.router.config,this.router.urlSerializer,this.router.paramsInheritanceStrategy),(0,Ue.b)(bt=>{if(m.targetSnapshot=bt.targetSnapshot,"eager"===this.router.urlUpdateStrategy){if(!bt.extras.skipLocationChange){const wn=this.router.urlHandlingStrategy.merge(bt.urlAfterRedirects,bt.rawUrl);this.router.setBrowserUrl(wn,bt)}this.router.browserUrlTree=bt.urlAfterRedirects}const jt=new Rn(bt.id,this.router.serializeUrl(bt.extractedUrl),this.router.serializeUrl(bt.urlAfterRedirects),bt.targetSnapshot);d.next(jt)}));if(We&&this.router.rawUrlTree&&this.router.urlHandlingStrategy.shouldProcessUrl(this.router.rawUrlTree)){const{id:jt,extractedUrl:wn,source:lo,restoredState:$o,extras:Ci}=z,Hr=new Mt(jt,this.router.serializeUrl(wn),lo,$o);d.next(Hr);const Cr=Gn(wn,this.router.rootComponentType).snapshot;return m={...z,targetSnapshot:Cr,urlAfterRedirects:wn,extras:{...Ci,skipLocationChange:!1,replaceUrl:!1}},(0,N.of)(m)}return this.router.rawUrlTree=z.rawUrl,z.resolve(null),be.E}),(0,Ue.b)(z=>{const ve=new Pn(z.id,this.router.serializeUrl(z.extractedUrl),this.router.serializeUrl(z.urlAfterRedirects),z.targetSnapshot);this.router.triggerEvent(ve)}),(0,ce.U)(z=>m={...z,guards:ko(z.targetSnapshot,z.currentSnapshot,this.router.rootContexts)}),function Zt(f,h){return(0,ne.z)(d=>{const{targetSnapshot:m,currentSnapshot:b,guards:{canActivateChecks:$,canDeactivateChecks:z}}=d;return 0===z.length&&0===$.length?(0,N.of)({...d,guardsResult:!0}):function bn(f,h,d,m){return(0,x.D)(f).pipe((0,ne.z)(b=>function $r(f,h,d,m,b){const $=h&&h.routeConfig?h.routeConfig.canDeactivate:null;if(!$||0===$.length)return(0,N.of)(!0);const z=$.map(ve=>{const We=Po(h)??b,ft=to(ve,We);return ut(function a(f){return f&&hn(f.canDeactivate)}(ft)?ft.canDeactivate(f,h,d,m):We.runInContext(()=>ft(f,h,d,m))).pipe(dt())});return(0,N.of)(z).pipe(Dt())}(b.component,b.route,d,h,m)),dt(b=>!0!==b,!0))}(z,m,b,f).pipe((0,ne.z)(ve=>ve&&function Ui(f){return"boolean"==typeof f}(ve)?function Ve(f,h,d,m){return(0,x.D)(h).pipe((0,et.b)(b=>ke(function yr(f,h){return null!==f&&h&&h(new Zr(f)),(0,N.of)(!0)}(b.route.parent,m),function At(f,h){return null!==f&&h&&h(new xr(f)),(0,N.of)(!0)}(b.route,m),function Mn(f,h,d){const m=h[h.length-1],$=h.slice(0,h.length-1).reverse().map(z=>function Jn(f){const h=f.routeConfig?f.routeConfig.canActivateChild:null;return h&&0!==h.length?{node:f,guards:h}:null}(z)).filter(z=>null!==z).map(z=>ie(()=>{const ve=z.guards.map(We=>{const ft=Po(z.node)??d,bt=to(We,ft);return ut(function c(f){return f&&hn(f.canActivateChild)}(bt)?bt.canActivateChild(m,f):ft.runInContext(()=>bt(m,f))).pipe(dt())});return(0,N.of)(ve).pipe(Dt())}));return(0,N.of)($).pipe(Dt())}(f,b.path,d),function Dr(f,h,d){const m=h.routeConfig?h.routeConfig.canActivate:null;if(!m||0===m.length)return(0,N.of)(!0);const b=m.map($=>ie(()=>{const z=Po(h)??d,ve=to($,z);return ut(function s(f){return f&&hn(f.canActivate)}(ve)?ve.canActivate(h,f):z.runInContext(()=>ve(h,f))).pipe(dt())}));return(0,N.of)(b).pipe(Dt())}(f,b.route,d))),dt(b=>!0!==b,!0))}(m,$,f,h):(0,N.of)(ve)),(0,ce.U)(ve=>({...d,guardsResult:ve})))})}(this.router.ngModule.injector,z=>this.router.triggerEvent(z)),(0,Ue.b)(z=>{if(m.guardsResult=z.guardsResult,xn(z.guardsResult))throw Ur(0,z.guardsResult);const ve=new ur(z.id,this.router.serializeUrl(z.extractedUrl),this.router.serializeUrl(z.urlAfterRedirects),z.targetSnapshot,!!z.guardsResult);this.router.triggerEvent(ve)}),(0,de.h)(z=>!!z.guardsResult||(this.router.restoreHistory(z),this.router.cancelNavigationTransition(z,"",3),!1)),so(z=>{if(z.guards.canActivateChecks.length)return(0,N.of)(z).pipe((0,Ue.b)(ve=>{const We=new mr(ve.id,this.router.serializeUrl(ve.extractedUrl),this.router.serializeUrl(ve.urlAfterRedirects),ve.targetSnapshot);this.router.triggerEvent(We)}),(0,Ae.w)(ve=>{let We=!1;return(0,N.of)(ve).pipe(function pr(f,h){return(0,ne.z)(d=>{const{targetSnapshot:m,guards:{canActivateChecks:b}}=d;if(!b.length)return(0,N.of)(d);let $=0;return(0,x.D)(b).pipe((0,et.b)(z=>function Vr(f,h,d,m){const b=f.routeConfig,$=f._resolve;return void 0!==b?.title&&!Ai(b)&&($[Xt]=b.title),function Mr(f,h,d,m){const b=function Lo(f){return[...Object.keys(f),...Object.getOwnPropertySymbols(f)]}(f);if(0===b.length)return(0,N.of)({});const $={};return(0,x.D)(b).pipe((0,ne.z)(z=>function di(f,h,d,m){const b=Po(h)??m,$=to(f,b);return ut($.resolve?$.resolve(h,d):b.runInContext(()=>$(h,d)))}(f[z],h,d,m).pipe(dt(),(0,Ue.b)(ve=>{$[z]=ve}))),wt(1),function pn(f){return(0,ce.U)(()=>f)}($),St(z=>Je(z)?be.E:oe(z)))}($,f,h,m).pipe((0,ce.U)(z=>(f._resolvedData=z,f.data=vr(f,d).resolve,b&&Ai(b)&&(f.data[Xt]=b.title),null)))}(z.route,m,f,h)),(0,Ue.b)(()=>$++),wt(1),(0,ne.z)(z=>$===b.length?(0,N.of)(d):be.E))})}(this.router.paramsInheritanceStrategy,this.router.ngModule.injector),(0,Ue.b)({next:()=>We=!0,complete:()=>{We||(this.router.restoreHistory(ve),this.router.cancelNavigationTransition(ve,"",2))}}))}),(0,Ue.b)(ve=>{const We=new an(ve.id,this.router.serializeUrl(ve.extractedUrl),this.router.serializeUrl(ve.urlAfterRedirects),ve.targetSnapshot);this.router.triggerEvent(We)}))}),so(z=>{const ve=We=>{const ft=[];We.routeConfig?.loadComponent&&!We.routeConfig._loadedComponent&&ft.push(this.router.configLoader.loadComponent(We.routeConfig).pipe((0,Ue.b)(bt=>{We.component=bt}),(0,ce.U)(()=>{})));for(const bt of We.children)ft.push(...ve(bt));return ft};return E(ve(z.targetSnapshot.root)).pipe(Ee(),(0,De.q)(1))}),so(()=>this.router.afterPreactivation()),(0,ce.U)(z=>{const ve=function Go(f,h,d){const m=Fr(f,h._root,d?d._root:void 0);return new Sr(m,h)}(this.router.routeReuseStrategy,z.targetSnapshot,z.currentRouterState);return m={...z,targetRouterState:ve}}),(0,Ue.b)(z=>{this.router.currentUrlTree=z.urlAfterRedirects,this.router.rawUrlTree=this.router.urlHandlingStrategy.merge(z.urlAfterRedirects,z.rawUrl),this.router.routerState=z.targetRouterState,"deferred"===this.router.urlUpdateStrategy&&(z.extras.skipLocationChange||this.router.setBrowserUrl(this.router.rawUrlTree,z),this.router.browserUrlTree=z.urlAfterRedirects)}),((f,h,d)=>(0,ce.U)(m=>(new Sn(h,m.targetRouterState,m.currentRouterState,d).activate(f),m)))(this.router.rootContexts,this.router.routeReuseStrategy,z=>this.router.triggerEvent(z)),(0,Ue.b)({next(){b=!0},complete(){b=!0}}),(0,Pt.x)(()=>{b||$||this.router.cancelNavigationTransition(m,"",1),this.currentNavigation?.id===m.id&&(this.currentNavigation=null)}),St(z=>{if($=!0,Gr(z)){Do(z)||(this.router.navigated=!0,this.router.restoreHistory(m,!0));const ve=new Bt(m.id,this.router.serializeUrl(m.extractedUrl),z.message,z.cancellationCode);if(d.next(ve),Do(z)){const We=this.router.urlHandlingStrategy.merge(z.url,this.router.rawUrlTree),ft={skipLocationChange:m.extras.skipLocationChange,replaceUrl:"eager"===this.router.urlUpdateStrategy||va(m.source)};this.router.scheduleNavigation(We,"imperative",null,ft,{resolve:m.resolve,reject:m.reject,promise:m.promise})}else m.resolve(!1)}else{this.router.restoreHistory(m,!0);const ve=new An(m.id,this.router.serializeUrl(m.extractedUrl),z,m.targetSnapshot??void 0);d.next(ve);try{m.resolve(this.router.errorHandler(z))}catch(We){m.reject(We)}}return be.E}))}))}}function va(f){return"imperative"!==f}let hi=(()=>{class f{buildTitle(d){let m,b=d.root;for(;void 0!==b;)m=this.getResolvedTitleForRoute(b)??m,b=b.children.find($=>$.outlet===it);return m}getResolvedTitleForRoute(d){return d.data[Xt]}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(Ps)},providedIn:"root"}),f})(),Ps=(()=>{class f extends hi{constructor(d){super(),this.title=d}updateTitle(d){const m=this.buildTitle(d);void 0!==m&&this.title.setTitle(m)}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(Ut.Dx))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})(),ya=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(Gu)},providedIn:"root"}),f})();class ml{shouldDetach(h){return!1}store(h,d){}shouldAttach(h){return!1}retrieve(h){return null}shouldReuseRoute(h,d){return h.routeConfig===d.routeConfig}}let Gu=(()=>{class f extends ml{}return f.\u0275fac=function(){let h;return function(m){return(h||(h=o.n5z(f)))(m||f)}}(),f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const pi=new o.OlP("",{providedIn:"root",factory:()=>({})}),ao=new o.OlP("ROUTES");let Xi=(()=>{class f{constructor(d,m){this.injector=d,this.compiler=m,this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap}loadComponent(d){if(this.componentLoaders.get(d))return this.componentLoaders.get(d);if(d._loadedComponent)return(0,N.of)(d._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(d);const m=ut(d.loadComponent()).pipe((0,ce.U)(Zo),(0,Ue.b)($=>{this.onLoadEndListener&&this.onLoadEndListener(d),d._loadedComponent=$}),(0,Pt.x)(()=>{this.componentLoaders.delete(d)})),b=new k(m,()=>new O.x).pipe(T());return this.componentLoaders.set(d,b),b}loadChildren(d,m){if(this.childrenLoaders.get(m))return this.childrenLoaders.get(m);if(m._loadedRoutes)return(0,N.of)({routes:m._loadedRoutes,injector:m._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(m);const $=this.loadModuleFactoryOrRoutes(m.loadChildren).pipe((0,ce.U)(ve=>{this.onLoadEndListener&&this.onLoadEndListener(m);let We,ft,bt=!1;Array.isArray(ve)?ft=ve:(We=ve.create(d).injector,ft=Yt(We.get(ao,[],o.XFs.Self|o.XFs.Optional)));return{routes:ft.map(Nr),injector:We}}),(0,Pt.x)(()=>{this.childrenLoaders.delete(m)})),z=new k($,()=>new O.x).pipe(T());return this.childrenLoaders.set(m,z),z}loadModuleFactoryOrRoutes(d){return ut(d()).pipe((0,ce.U)(Zo),(0,ne.z)(b=>b instanceof o.YKP||Array.isArray(b)?(0,N.of)(b):(0,x.D)(this.compiler.compileModuleAsync(b))))}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(o.zs3),o.LFG(o.Sil))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();function Zo(f){return function ba(f){return f&&"object"==typeof f&&"default"in f}(f)?f.default:f}let vl=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(gi)},providedIn:"root"}),f})(),gi=(()=>{class f{shouldProcessUrl(d){return!0}extract(d){return d}merge(d,m){return d}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();function Zi(f){throw f}function Wu(f,h,d){return h.parse("/")}const Ca={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},_a={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};function Xr(){const f=(0,o.f3M)(pt),h=(0,o.f3M)(fr),d=(0,o.f3M)(te.Ye),m=(0,o.f3M)(o.zs3),b=(0,o.f3M)(o.Sil),$=(0,o.f3M)(ao,{optional:!0})??[],z=(0,o.f3M)(pi,{optional:!0})??{},ve=new or(null,f,h,d,m,b,Yt($));return function yl(f,h){f.errorHandler&&(h.errorHandler=f.errorHandler),f.malformedUriErrorHandler&&(h.malformedUriErrorHandler=f.malformedUriErrorHandler),f.onSameUrlNavigation&&(h.onSameUrlNavigation=f.onSameUrlNavigation),f.paramsInheritanceStrategy&&(h.paramsInheritanceStrategy=f.paramsInheritanceStrategy),f.urlUpdateStrategy&&(h.urlUpdateStrategy=f.urlUpdateStrategy),f.canceledNavigationResolution&&(h.canceledNavigationResolution=f.canceledNavigationResolution)}(z,ve),ve}let or=(()=>{class f{constructor(d,m,b,$,z,ve,We){this.rootComponentType=d,this.urlSerializer=m,this.rootContexts=b,this.location=$,this.config=We,this.lastSuccessfulNavigation=null,this.disposed=!1,this.navigationId=0,this.currentPageId=0,this.isNgZoneEnabled=!1,this.events=new O.x,this.errorHandler=Zi,this.malformedUriErrorHandler=Wu,this.navigated=!1,this.lastSuccessfulId=-1,this.afterPreactivation=()=>(0,N.of)(void 0),this.urlHandlingStrategy=(0,o.f3M)(vl),this.routeReuseStrategy=(0,o.f3M)(ya),this.titleStrategy=(0,o.f3M)(hi),this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.canceledNavigationResolution="replace",this.navigationTransitions=new gl(this),this.configLoader=z.get(Xi),this.configLoader.onLoadEndListener=wn=>this.triggerEvent(new ho(wn)),this.configLoader.onLoadStartListener=wn=>this.triggerEvent(new fo(wn)),this.ngModule=z.get(o.h0i),this.console=z.get(o.c2e);const jt=z.get(o.R0b);this.isNgZoneEnabled=jt instanceof o.R0b&&o.R0b.isInAngularZone(),this.resetConfig(We),this.currentUrlTree=new En,this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=Gn(this.currentUrlTree,this.rootComponentType),this.transitions=new ge.X({id:0,targetPageId:0,currentUrlTree:this.currentUrlTree,extractedUrl:this.urlHandlingStrategy.extract(this.currentUrlTree),urlAfterRedirects:this.urlHandlingStrategy.extract(this.currentUrlTree),rawUrl:this.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:"imperative",restoredState:null,currentSnapshot:this.routerState.snapshot,targetSnapshot:null,currentRouterState:this.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.navigations=this.navigationTransitions.setupNavigations(this.transitions),this.processNavigations()}get browserPageId(){return this.location.getState()?.\u0275routerPageId}resetRootComponentType(d){this.rootComponentType=d,this.routerState.root.component=this.rootComponentType}setTransition(d){this.transitions.next({...this.transitions.value,...d})}initialNavigation(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(d=>{const m="popstate"===d.type?"popstate":"hashchange";"popstate"===m&&setTimeout(()=>{const b={replaceUrl:!0},$=d.state?.navigationId?d.state:null;if(d.state){const ve={...d.state};delete ve.navigationId,delete ve.\u0275routerPageId,0!==Object.keys(ve).length&&(b.state=ve)}const z=this.parseUrl(d.url);this.scheduleNavigation(z,m,$,b)},0)}))}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}triggerEvent(d){this.events.next(d)}resetConfig(d){this.config=d.map(Nr),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.transitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0}createUrlTree(d,m={}){const{relativeTo:b,queryParams:$,fragment:z,queryParamsHandling:ve,preserveFragment:We}=m,ft=b||this.routerState.root,bt=We?this.currentUrlTree.fragment:z;let jt=null;switch(ve){case"merge":jt={...this.currentUrlTree.queryParams,...$};break;case"preserve":jt=this.currentUrlTree.queryParams;break;default:jt=$||null}return null!==jt&&(jt=this.removeEmptyProps(jt)),gr(ft,this.currentUrlTree,d,jt,bt??null)}navigateByUrl(d,m={skipLocationChange:!1}){const b=xn(d)?d:this.parseUrl(d),$=this.urlHandlingStrategy.merge(b,this.rawUrlTree);return this.scheduleNavigation($,"imperative",null,m)}navigate(d,m={skipLocationChange:!1}){return function Ji(f){for(let h=0;h{const $=d[b];return null!=$&&(m[b]=$),m},{})}processNavigations(){this.navigations.subscribe(d=>{this.navigated=!0,this.lastSuccessfulId=d.id,this.currentPageId=d.targetPageId,this.events.next(new Wt(d.id,this.serializeUrl(d.extractedUrl),this.serializeUrl(this.currentUrlTree))),this.lastSuccessfulNavigation=this.getCurrentNavigation(),this.titleStrategy?.updateTitle(this.routerState.snapshot),d.resolve(!0)},d=>{this.console.warn(`Unhandled Navigation Error: ${d}`)})}scheduleNavigation(d,m,b,$,z){if(this.disposed)return Promise.resolve(!1);let ve,We,ft;z?(ve=z.resolve,We=z.reject,ft=z.promise):ft=new Promise((wn,lo)=>{ve=wn,We=lo});const bt=++this.navigationId;let jt;return"computed"===this.canceledNavigationResolution?(0===this.currentPageId&&(b=this.location.getState()),jt=b&&b.\u0275routerPageId?b.\u0275routerPageId:$.replaceUrl||$.skipLocationChange?this.browserPageId??0:(this.browserPageId??0)+1):jt=0,this.setTransition({id:bt,targetPageId:jt,source:m,restoredState:b,currentUrlTree:this.currentUrlTree,rawUrl:d,extras:$,resolve:ve,reject:We,promise:ft,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),ft.catch(wn=>Promise.reject(wn))}setBrowserUrl(d,m){const b=this.urlSerializer.serialize(d),$={...m.extras.state,...this.generateNgRouterState(m.id,m.targetPageId)};this.location.isCurrentPathEqualTo(b)||m.extras.replaceUrl?this.location.replaceState(b,"",$):this.location.go(b,"",$)}restoreHistory(d,m=!1){if("computed"===this.canceledNavigationResolution){const b=this.currentPageId-d.targetPageId;"popstate"!==d.source&&"eager"!==this.urlUpdateStrategy&&this.currentUrlTree!==this.getCurrentNavigation()?.finalUrl||0===b?this.currentUrlTree===this.getCurrentNavigation()?.finalUrl&&0===b&&(this.resetState(d),this.browserUrlTree=d.currentUrlTree,this.resetUrlToCurrentUrlTree()):this.location.historyGo(b)}else"replace"===this.canceledNavigationResolution&&(m&&this.resetState(d),this.resetUrlToCurrentUrlTree())}resetState(d){this.routerState=d.currentRouterState,this.currentUrlTree=d.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,d.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}cancelNavigationTransition(d,m,b){const $=new Bt(d.id,this.serializeUrl(d.extractedUrl),m,b);this.triggerEvent($),d.resolve(!1)}generateNgRouterState(d,m){return"computed"===this.canceledNavigationResolution?{navigationId:d,\u0275routerPageId:m}:{navigationId:d}}}return f.\u0275fac=function(d){o.$Z()},f.\u0275prov=o.Yz7({token:f,factory:function(){return Xr()},providedIn:"root"}),f})(),mi=(()=>{class f{constructor(d,m,b,$,z,ve){this.router=d,this.route=m,this.tabIndexAttribute=b,this.renderer=$,this.el=z,this.locationStrategy=ve,this._preserveFragment=!1,this._skipLocationChange=!1,this._replaceUrl=!1,this.href=null,this.commands=null,this.onChanges=new O.x;const We=z.nativeElement.tagName;this.isAnchorElement="A"===We||"AREA"===We,this.isAnchorElement?this.subscription=d.events.subscribe(ft=>{ft instanceof Wt&&this.updateHref()}):this.setTabIndexIfNotOnNativeEl("0")}set preserveFragment(d){this._preserveFragment=(0,o.D6c)(d)}get preserveFragment(){return this._preserveFragment}set skipLocationChange(d){this._skipLocationChange=(0,o.D6c)(d)}get skipLocationChange(){return this._skipLocationChange}set replaceUrl(d){this._replaceUrl=(0,o.D6c)(d)}get replaceUrl(){return this._replaceUrl}setTabIndexIfNotOnNativeEl(d){null!=this.tabIndexAttribute||this.isAnchorElement||this.applyAttributeValue("tabindex",d)}ngOnChanges(d){this.isAnchorElement&&this.updateHref(),this.onChanges.next(this)}set routerLink(d){null!=d?(this.commands=Array.isArray(d)?d:[d],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(d,m,b,$,z){return!!(null===this.urlTree||this.isAnchorElement&&(0!==d||m||b||$||z||"string"==typeof this.target&&"_self"!=this.target))||(this.router.navigateByUrl(this.urlTree,{skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state}),!this.isAnchorElement)}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){this.href=null!==this.urlTree&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(this.urlTree)):null;const d=null===this.href?null:(0,o.P3R)(this.href,this.el.nativeElement.tagName.toLowerCase(),"href");this.applyAttributeValue("href",d)}applyAttributeValue(d,m){const b=this.renderer,$=this.el.nativeElement;null!==m?b.setAttribute($,d,m):b.removeAttribute($,d)}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}}return f.\u0275fac=function(d){return new(d||f)(o.Y36(or),o.Y36(Rr),o.$8M("tabindex"),o.Y36(o.Qsj),o.Y36(o.SBq),o.Y36(te.S$))},f.\u0275dir=o.lG2({type:f,selectors:[["","routerLink",""]],hostVars:1,hostBindings:function(d,m){1&d&&o.NdJ("click",function($){return m.onClick($.button,$.ctrlKey,$.shiftKey,$.altKey,$.metaKey)}),2&d&&o.uIk("target",m.target)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",relativeTo:"relativeTo",preserveFragment:"preserveFragment",skipLocationChange:"skipLocationChange",replaceUrl:"replaceUrl",routerLink:"routerLink"},standalone:!0,features:[o.TTD]}),f})();class es{}let Dl=(()=>{class f{preload(d,m){return m().pipe(St(()=>(0,N.of)(null)))}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})(),wa=(()=>{class f{constructor(d,m,b,$,z){this.router=d,this.injector=b,this.preloadingStrategy=$,this.loader=z}setUpPreloading(){this.subscription=this.router.events.pipe((0,de.h)(d=>d instanceof Wt),(0,et.b)(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(d,m){const b=[];for(const $ of m){$.providers&&!$._injector&&($._injector=(0,o.MMx)($.providers,d,`Route: ${$.path}`));const z=$._injector??d,ve=$._loadedInjector??z;$.loadChildren&&!$._loadedRoutes&&void 0===$.canLoad||$.loadComponent&&!$._loadedComponent?b.push(this.preloadConfig(z,$)):($.children||$._loadedRoutes)&&b.push(this.processRoutes(ve,$.children??$._loadedRoutes))}return(0,x.D)(b).pipe((0,K.J)())}preloadConfig(d,m){return this.preloadingStrategy.preload(m,()=>{let b;b=m.loadChildren&&void 0===m.canLoad?this.loader.loadChildren(d,m):(0,N.of)(null);const $=b.pipe((0,ne.z)(z=>null===z?(0,N.of)(void 0):(m._loadedRoutes=z.routes,m._loadedInjector=z.injector,this.processRoutes(z.injector??d,z.routes))));if(m.loadComponent&&!m._loadedComponent){const z=this.loader.loadComponent(m);return(0,x.D)([$,z]).pipe((0,K.J)())}return $})}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(or),o.LFG(o.Sil),o.LFG(o.lqb),o.LFG(es),o.LFG(Xi))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const ts=new o.OlP("");let Ns=(()=>{class f{constructor(d,m,b,$={}){this.router=d,this.viewportScroller=m,this.zone=b,this.options=$,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},$.scrollPositionRestoration=$.scrollPositionRestoration||"disabled",$.anchorScrolling=$.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.router.events.subscribe(d=>{d instanceof Mt?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=d.navigationTrigger,this.restoredId=d.restoredState?d.restoredState.navigationId:0):d instanceof Wt&&(this.lastId=d.id,this.scheduleScrollEvent(d,this.router.parseUrl(d.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.router.events.subscribe(d=>{d instanceof ar&&(d.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(d.position):d.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(d.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(d,m){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.router.triggerEvent(new ar(d,"popstate"===this.lastSource?this.store[this.restoredId]:null,m))})},0)})}ngOnDestroy(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()}}return f.\u0275fac=function(d){o.$Z()},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac}),f})();function yi(f,h){return{\u0275kind:f,\u0275providers:h}}function $s(){const f=(0,o.f3M)(o.zs3);return h=>{const d=f.get(o.z2F);if(h!==d.components[0])return;const m=f.get(or),b=f.get(rs);1===f.get(Bs)&&m.initialNavigation(),f.get(Qo,null,o.XFs.Optional)?.setUpPreloading(),f.get(ts,null,o.XFs.Optional)?.init(),m.resetRootComponentType(d.componentTypes[0]),b.closed||(b.next(),b.unsubscribe())}}const rs=new o.OlP("",{factory:()=>new O.x}),Bs=new o.OlP("",{providedIn:"root",factory:()=>1});const Qo=new o.OlP("");function bi(f){return yi(0,[{provide:Qo,useExisting:wa},{provide:es,useExisting:f}])}const _l=new o.OlP("ROUTER_FORROOT_GUARD"),wl=[te.Ye,{provide:pt,useClass:vt},{provide:or,useFactory:Xr},fr,{provide:Rr,useFactory:function Jo(f){return f.routerState.root},deps:[or]},Xi,[]];function _n(){return new o.PXZ("Router",or)}let Xu=(()=>{class f{constructor(d){}static forRoot(d,m){return{ngModule:f,providers:[wl,[],{provide:ao,multi:!0,useValue:d},{provide:_l,useFactory:Qu,deps:[[or,new o.FiY,new o.tp0]]},{provide:pi,useValue:m||{}},m?.useHash?{provide:te.S$,useClass:te.Do}:{provide:te.S$,useClass:te.b0},{provide:ts,useFactory:()=>{const f=(0,o.f3M)(or),h=(0,o.f3M)(te.EM),d=(0,o.f3M)(o.R0b),m=(0,o.f3M)(pi);return m.scrollOffset&&h.setOffset(m.scrollOffset),new Ns(f,h,d,m)}},m?.preloadingStrategy?bi(m.preloadingStrategy).\u0275providers:[],{provide:o.PXZ,multi:!0,useFactory:_n},m?.initialNavigation?ed(m):[],[{provide:El,useFactory:$s},{provide:o.tb,multi:!0,useExisting:El}]]}}static forChild(d){return{ngModule:f,providers:[{provide:ao,multi:!0,useValue:d}]}}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(_l,8))},f.\u0275mod=o.oAB({type:f}),f.\u0275inj=o.cJS({imports:[kr]}),f})();function Qu(f){return"guarded"}function ed(f){return["disabled"===f.initialNavigation?yi(3,[{provide:o.ip1,multi:!0,useFactory:()=>{const h=(0,o.f3M)(or);return()=>{h.setUpLocationChangeListener()}}},{provide:Bs,useValue:2}]).\u0275providers:[],"enabledBlocking"===f.initialNavigation?yi(2,[{provide:Bs,useValue:0},{provide:o.ip1,multi:!0,deps:[o.zs3],useFactory:h=>{const d=h.get(te.V_,Promise.resolve());return()=>d.then(()=>new Promise(b=>{const $=h.get(or),z=h.get(rs);(function m(b){h.get(or).events.pipe((0,de.h)(z=>z instanceof Wt||z instanceof Bt||z instanceof An),(0,ce.U)(z=>z instanceof Wt||z instanceof Bt&&(0===z.code||1===z.code)&&null),(0,de.h)(z=>null!==z),(0,De.q)(1)).subscribe(()=>{b()})})(()=>{b(!0)}),$.afterPreactivation=()=>(b(!0),z.closed?(0,N.of)(void 0):z),$.initialNavigation()}))}}]).\u0275providers:[]]}const El=new o.OlP("")},5861:(Qe,Fe,w)=>{"use strict";function o(N,ge,R,W,M,U,_){try{var Y=N[U](_),G=Y.value}catch(Z){return void R(Z)}Y.done?ge(G):Promise.resolve(G).then(W,M)}function x(N){return function(){var ge=this,R=arguments;return new Promise(function(W,M){var U=N.apply(ge,R);function _(G){o(U,W,M,_,Y,"next",G)}function Y(G){o(U,W,M,_,Y,"throw",G)}_(void 0)})}}w.d(Fe,{Z:()=>x})}},Qe=>{Qe(Qe.s=1394)}]); \ No newline at end of file From be5581c5aa888a64cefd4a08e9811cf0e3f33d53 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Mon, 3 Apr 2023 22:32:43 +0200 Subject: [PATCH 22/99] =?UTF-8?q?#87=20PoC=20for=20Turn10=20and=20TG=20All?= =?UTF-8?q?g=C3=A4u=20WK-Modes=20-=20New=20riegenmodus=203=20grouping=20ge?= =?UTF-8?q?schlecht/jahrgang/verein?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reg-athlet-editor.page.ts | 2 +- .../reg-athletlist/reg-athletlist.page.ts | 2 +- .../scala/ch/seidel/kutu/domain/package.scala | 1 + .../seidel/kutu/squad/DurchgangBuilder.scala | 49 ++++++++----------- .../ch/seidel/kutu/squad/JGClubGrouper.scala | 19 +++++++ .../ch/seidel/kutu/squad/RiegenBuilder.scala | 3 ++ 6 files changed, 46 insertions(+), 30 deletions(-) create mode 100644 src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala diff --git a/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts b/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts index 91265b434..63aa237ce 100644 --- a/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts +++ b/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts @@ -84,7 +84,7 @@ export class RegAthletEditorPage implements OnInit { needsPGMChoice(): boolean { const pgm = [...this.wkPgms][0]; - return !(pgm.aggregate == 1 && pgm.riegenmode == 2); + return !(pgm.aggregate == 1 && pgm.riegenmode > 1); } alter(athlet: AthletRegistration): number { diff --git a/newclient/resultcatcher/src/app/registration/reg-athletlist/reg-athletlist.page.ts b/newclient/resultcatcher/src/app/registration/reg-athletlist/reg-athletlist.page.ts index 21df0e267..67ddb0985 100644 --- a/newclient/resultcatcher/src/app/registration/reg-athletlist/reg-athletlist.page.ts +++ b/newclient/resultcatcher/src/app/registration/reg-athletlist/reg-athletlist.page.ts @@ -218,7 +218,7 @@ export class RegAthletlistPage implements OnInit { needsPGMChoice(): boolean { const pgm = [...this.wkPgms][0]; - return !(pgm.aggregate == 1 && pgm.riegenmode == 2); + return !(pgm.aggregate == 1 && pgm.riegenmode > 1); } similarRegistration(a: AthletRegistration, b: AthletRegistration): boolean { return a.athletId === b.athletId || diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index d39167b61..1aefe8cab 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -200,6 +200,7 @@ package object domain { val KIND_EMPTY_RIEGE = 1; val RIEGENMODE_BY_Program = 1; val RIEGENMODE_BY_JG = 2; + val RIEGENMODE_BY_JG_VEREIN = 3; } case class RiegeRaw(wettkampfId: Long, r: String, durchgang: Option[String], start: Option[Long], kind: Int) extends DataObject { diff --git a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala index bacb100a2..0a6ac4ba8 100644 --- a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala @@ -31,8 +31,6 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli val wkdisziplinlist = service.listWettkampfDisziplines(wettkampfId) val dzl = disziplinlist.filter(d => onDisziplinList.isEmpty || onDisziplinList.get.contains(d)) - val wkGrouper = KuTuGeTuGrouper.wkGrouper - val wkFilteredGrouper = wkGrouper.take(if(riegencnt == 0) wkGrouper.size-1 else wkGrouper.size) if(progAthlWertungen.keys.size > 1) { val toDebug = (progAthlWertungen.keys.size, progAthlWertungen.keys.map(k => (progAthlWertungen(k).size, progAthlWertungen(k).map(w => w._2.size).sum))).toString logger.debug(toDebug) @@ -52,34 +50,29 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli case None => if (dzlffm == dzlfff) GemischteRiegen else GetrennteDurchgaenge case Some(option) => option } - wertungen.head._2.head.wettkampfdisziplin.programm.riegenmode match { + val (shortGrouper, fullGrouper, jgGroup) = wertungen.head._2.head.wettkampfdisziplin.programm.riegenmode match { case RiegeRaw.RIEGENMODE_BY_JG => - val atGrouper = ATTGrouper.atGrouper - val atgr = atGrouper.take(atGrouper.size-1) - splitSex match { - case GemischteRiegen => - groupWertungen(programm, wertungen, atgr, atGrouper, dzlff, maxRiegenSize, GemischteRiegen, true) - case GemischterDurchgang => - groupWertungen(programm, wertungen, atgr, atGrouper, dzlff, maxRiegenSize, GemischterDurchgang, true) - case GetrennteDurchgaenge => - val m = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("M")) - val w = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("W")) - groupWertungen(programm + "-Tu", m, atgr, atGrouper, dzlffm, maxRiegenSize, GetrennteDurchgaenge, true) ++ - groupWertungen(programm + "-Ti", w, atgr, atGrouper, dzlfff, maxRiegenSize, GetrennteDurchgaenge, true) - } + val fullGrouper = ATTGrouper.atGrouper + val shortGrouper = fullGrouper.take(fullGrouper.size - 1) + (shortGrouper, fullGrouper, true) + case RiegeRaw.RIEGENMODE_BY_JG_VEREIN => + val fullGrouper = JGClubGrouper.jgclubGrouper + (fullGrouper, fullGrouper, true) case _ => - // Startgeräte selektieren - splitSex match { - case GemischteRiegen => - groupWertungen(programm, wertungen, wkFilteredGrouper, wkGrouper, dzlff, maxRiegenSize, GemischteRiegen, false) - case GemischterDurchgang => - groupWertungen(programm, wertungen, wkFilteredGrouper, wkGrouper, dzlff, maxRiegenSize, GemischterDurchgang, false) - case GetrennteDurchgaenge => - val m = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("M")) - val w = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("W")) - groupWertungen(programm + "-Tu", m, wkFilteredGrouper, wkGrouper, dzlffm, maxRiegenSize, GetrennteDurchgaenge, false) ++ - groupWertungen(programm + "-Ti", w, wkFilteredGrouper, wkGrouper, dzlfff, maxRiegenSize, GetrennteDurchgaenge, false) - } + val fullGrouper = KuTuGeTuGrouper.wkGrouper + val shortGrouper = fullGrouper.take(if (riegencnt == 0) fullGrouper.size - 1 else fullGrouper.size) + (shortGrouper, fullGrouper, false) + } + splitSex match { + case GemischteRiegen => + groupWertungen(programm, wertungen, shortGrouper, fullGrouper, dzlff, maxRiegenSize, GemischteRiegen, jgGroup) + case GemischterDurchgang => + groupWertungen(programm, wertungen, shortGrouper, fullGrouper, dzlff, maxRiegenSize, GemischterDurchgang, jgGroup) + case GetrennteDurchgaenge => + val m = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("M")) + val w = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("W")) + groupWertungen(programm + "-Tu", m, shortGrouper, fullGrouper, dzlffm, maxRiegenSize, GetrennteDurchgaenge, jgGroup) ++ + groupWertungen(programm + "-Ti", w, shortGrouper, fullGrouper, dzlfff, maxRiegenSize, GetrennteDurchgaenge, jgGroup) } } diff --git a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala new file mode 100644 index 000000000..013bf76b6 --- /dev/null +++ b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala @@ -0,0 +1,19 @@ +package ch.seidel.kutu.squad + +import ch.seidel.kutu.domain._ + +case object JGClubGrouper extends RiegenGrouper { + + override def generateRiegenName(w: WertungView) = groupKey(jgclubGrouper)(w) + + override protected def buildGrouper(riegencnt: Int): (List[WertungView => String], List[WertungView => String]) = { + (jgclubGrouper, jgclubGrouper) + } + + val jgclubGrouper: List[WertungView => String] = List( + x => x.athlet.geschlecht, + x => (x.athlet.gebdat match {case Some(d) => f"$d%tY"; case _ => ""}), + x => x.athlet.verein match {case Some(v) => v.easyprint case None => ""} + ) + +} \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala index 77cfd405c..d2e553005 100644 --- a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala @@ -32,6 +32,8 @@ trait RiegenBuilder { val riegencount = rotationstation.sum if (wertungen.head.wettkampfdisziplin.programm.riegenmode == RiegeRaw.RIEGENMODE_BY_JG) { ATTGrouper.suggestRiegen(riegencount, wertungen) + } else if (wertungen.head.wettkampfdisziplin.programm.riegenmode == RiegeRaw.RIEGENMODE_BY_JG_VEREIN) { + JGClubGrouper.suggestRiegen(riegencount, wertungen) } else { KuTuGeTuGrouper.suggestRiegen(riegencount, wertungen) } @@ -43,6 +45,7 @@ object RiegenBuilder { def generateRiegenName(w: WertungView) = { w.wettkampfdisziplin.programm.riegenmode match { case RiegeRaw.RIEGENMODE_BY_JG => ATTGrouper.generateRiegenName(w) + case RiegeRaw.RIEGENMODE_BY_JG_VEREIN => JGClubGrouper.generateRiegenName(w) case _ => KuTuGeTuGrouper.generateRiegenName(w) } } From 38452ba7aa22d7a9768d0b8409d5b064672c7652 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Mon, 3 Apr 2023 00:08:37 +0200 Subject: [PATCH 23/99] =?UTF-8?q?#87=20PoC=20for=20Turn10=20and=20TG=20All?= =?UTF-8?q?g=C3=A4u=20WK-Modes=20-=20Simplify=20Turn10=20Fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Split Schema-Changes and Insert of new WK-Pgms - TG Allgäu - Add missing gear Pferd Pauschen - Turn10 - Limit Max score to 20 points - Add missing gear Pferd Pauschen --- .../dbscripts/AddWKDisziplinMetafields-pg.sql | 240 ----------------- .../AddWKDisziplinMetafields-sqllite.sql | 240 ----------------- .../resources/dbscripts/AddWKTestPgms-pg.sql | 250 ++++++++++++++++++ .../dbscripts/AddWKTestPgms-sqllite.sql | 250 ++++++++++++++++++ .../ch/seidel/kutu/domain/DBService.scala | 46 ++-- .../seidel/kutu/domain/WettkampfService.scala | 12 +- .../kutu/view/WettkampfWertungTab.scala | 12 +- .../ch/seidel/kutu/base/TestDBService.scala | 1 + .../ch/seidel/kutu/domain/WettkampfSpec.scala | 40 +-- 9 files changed, 561 insertions(+), 530 deletions(-) create mode 100644 src/main/resources/dbscripts/AddWKTestPgms-pg.sql create mode 100644 src/main/resources/dbscripts/AddWKTestPgms-sqllite.sql diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql index 2808bdad1..f29a91935 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql @@ -112,243 +112,3 @@ update programm where id=1 or parent_id=1 ; - --- Test Programm-Extensions --- KuTu DTL Kür & Pflicht -insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; -insert into disziplin (id, name) values (3, 'Ring') on conflict (id) do nothing; -insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; -insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; -insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; -insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(184, 'KuTu DTL Kür & Pflicht', 0, null, 184, 0, 100, '29ee216c-f1bf-4940-9b2f-a98b6af0ef73', 1) -,(185, 'Kür', 1, 184, 185, 0, 100, '9868786d-29fd-4560-8a14-a32a5dd56c7a', 1) -,(186, 'WK I Kür', 1, 185, 186, 0, 100, 'a731a36f-2190-403a-8dff-5009b862d6b2', 1) -,(187, 'WK II LK1', 1, 185, 187, 0, 100, '1aa8711c-5bf3-45bd-98cf-8f143fe57f94', 1) -,(188, 'WK III LK1', 1, 185, 188, 16, 17, '0a685ee1-e4bd-450a-b387-5470d4424e13', 1) -,(189, 'WK IV LK2', 1, 185, 189, 14, 15, '6517a841-fc1e-49fa-8d45-9c90cad2a739', 1) -,(190, 'Pflicht', 1, 184, 190, 0, 100, 'df6de257-03e0-4b61-8855-e7f9c4b416b0', 1) -,(191, 'WK V Jug', 1, 190, 191, 14, 18, '1f29b75e-6800-4eab-9350-1d5029bafa69', 1) -,(192, 'WK VI Schüler A', 1, 190, 192, 12, 13, 'd7b983af-cbac-4ffc-bbe1-90255a2c828c', 1) -,(193, 'WK VII Schüler B', 1, 190, 193, 10, 11, 'acddda1d-3561-4bf8-9c3e-c8d6caaa5771', 1) -,(194, 'WK VIII Schüler C', 1, 190, 194, 8, 9, '7f0921ec-8e35-4f00-b9d4-9a9e7fccc3d8', 1) -,(195, 'WK IX Schüler D', 1, 190, 195, 0, 7, '67dd95d0-5b48-4f82-b109-8c564754b577', 1); -insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(847, 186, 1, '', '', 1.0, 1, 0, 0, 3, 1, 0, 30, 1) -,(848, 186, 3, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) -,(849, 186, 4, '', '', 1.0, 1, 0, 2, 3, 1, 0, 30, 1) -,(850, 186, 5, '', '', 1.0, 1, 0, 3, 3, 1, 0, 30, 1) -,(851, 186, 6, '', '', 1.0, 1, 0, 4, 3, 1, 0, 30, 1) -,(852, 187, 1, '', '', 1.0, 1, 0, 5, 3, 1, 0, 30, 1) -,(853, 187, 3, '', '', 1.0, 1, 0, 6, 3, 1, 0, 30, 1) -,(854, 187, 4, '', '', 1.0, 1, 0, 7, 3, 1, 0, 30, 1) -,(855, 187, 5, '', '', 1.0, 1, 0, 8, 3, 1, 0, 30, 1) -,(856, 187, 6, '', '', 1.0, 1, 0, 9, 3, 1, 0, 30, 1) -,(857, 188, 1, '', '', 1.0, 1, 0, 10, 3, 1, 0, 30, 1) -,(858, 188, 3, '', '', 1.0, 1, 0, 11, 3, 1, 0, 30, 1) -,(859, 188, 4, '', '', 1.0, 1, 0, 12, 3, 1, 0, 30, 1) -,(860, 188, 5, '', '', 1.0, 1, 0, 13, 3, 1, 0, 30, 1) -,(861, 188, 6, '', '', 1.0, 1, 0, 14, 3, 1, 0, 30, 1) -,(862, 189, 1, '', '', 1.0, 1, 0, 15, 3, 1, 0, 30, 1) -,(863, 189, 3, '', '', 1.0, 1, 0, 16, 3, 1, 0, 30, 1) -,(864, 189, 4, '', '', 1.0, 1, 0, 17, 3, 1, 0, 30, 1) -,(865, 189, 5, '', '', 1.0, 1, 0, 18, 3, 1, 0, 30, 1) -,(866, 189, 6, '', '', 1.0, 1, 0, 19, 3, 1, 0, 30, 1) -,(867, 191, 1, '', '', 1.0, 1, 0, 20, 3, 1, 0, 30, 1) -,(868, 191, 3, '', '', 1.0, 1, 0, 21, 3, 1, 0, 30, 1) -,(869, 191, 4, '', '', 1.0, 1, 0, 22, 3, 1, 0, 30, 1) -,(870, 191, 5, '', '', 1.0, 1, 0, 23, 3, 1, 0, 30, 1) -,(871, 191, 6, '', '', 1.0, 1, 0, 24, 3, 1, 0, 30, 1) -,(872, 192, 1, '', '', 1.0, 1, 0, 25, 3, 1, 0, 30, 1) -,(873, 192, 3, '', '', 1.0, 1, 0, 26, 3, 1, 0, 30, 1) -,(874, 192, 4, '', '', 1.0, 1, 0, 27, 3, 1, 0, 30, 1) -,(875, 192, 5, '', '', 1.0, 1, 0, 28, 3, 1, 0, 30, 1) -,(876, 192, 6, '', '', 1.0, 1, 0, 29, 3, 1, 0, 30, 1) -,(877, 193, 1, '', '', 1.0, 1, 0, 30, 3, 1, 0, 30, 1) -,(878, 193, 3, '', '', 1.0, 1, 0, 31, 3, 1, 0, 30, 1) -,(879, 193, 4, '', '', 1.0, 1, 0, 32, 3, 1, 0, 30, 1) -,(880, 193, 5, '', '', 1.0, 1, 0, 33, 3, 1, 0, 30, 1) -,(881, 193, 6, '', '', 1.0, 1, 0, 34, 3, 1, 0, 30, 1) -,(882, 194, 1, '', '', 1.0, 1, 0, 35, 3, 1, 0, 30, 1) -,(883, 194, 3, '', '', 1.0, 1, 0, 36, 3, 1, 0, 30, 1) -,(884, 194, 4, '', '', 1.0, 1, 0, 37, 3, 1, 0, 30, 1) -,(885, 194, 5, '', '', 1.0, 1, 0, 38, 3, 1, 0, 30, 1) -,(886, 194, 6, '', '', 1.0, 1, 0, 39, 3, 1, 0, 30, 1) -,(887, 195, 1, '', '', 1.0, 1, 0, 40, 3, 1, 0, 30, 1) -,(888, 195, 3, '', '', 1.0, 1, 0, 41, 3, 1, 0, 30, 1) -,(889, 195, 4, '', '', 1.0, 1, 0, 42, 3, 1, 0, 30, 1) -,(890, 195, 5, '', '', 1.0, 1, 0, 43, 3, 1, 0, 30, 1) -,(891, 195, 6, '', '', 1.0, 1, 0, 44, 3, 1, 0, 30, 1); - --- KuTuRi DTL Kür & Pflicht -insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; -insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; -insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; -insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; -insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(196, 'KuTuRi DTL Kür & Pflicht', 0, null, 196, 0, 100, 'b66dac1b-e2cf-43b5-a919-0d94aa42680c', 1) -,(197, 'Kür', 1, 196, 197, 0, 100, 'b371f1b4-ff84-4a65-b536-9ff6e0479a6d', 1) -,(198, 'WK I Kür', 1, 197, 198, 0, 100, '932da381-63ea-4166-9bb5-04d7d684d105', 1) -,(199, 'WK II LK1', 1, 197, 199, 0, 100, '146a17d5-7ab4-4086-81f1-db3329b07e2a', 1) -,(200, 'WK III LK1', 1, 197, 200, 16, 17, 'b70b2f6d-1321-4666-bac8-5807a15786eb', 1) -,(201, 'WK IV LK2', 1, 197, 201, 14, 15, '28efc451-d762-42ea-9618-b4c0f23cbe9b', 1) -,(202, 'Pflicht', 1, 196, 202, 0, 100, '04d249b9-5c2c-4a97-a6bc-ee86062d6cac', 1) -,(203, 'WK V Jug', 1, 202, 203, 14, 18, 'd0c91f7c-fe42-466a-a7c0-c3bec17133fe', 1) -,(204, 'WK VI Schüler A', 1, 202, 204, 12, 13, '45584b7f-498c-42a8-b6bb-c06525cac332', 1) -,(205, 'WK VII Schüler B', 1, 202, 205, 10, 11, '863da537-b5d0-4259-ae62-b358f70c0ff4', 1) -,(206, 'WK VIII Schüler C', 1, 202, 206, 8, 9, '6567925e-2335-421c-b677-d426adb258e3', 1) -,(207, 'WK IX Schüler D', 1, 202, 207, 0, 7, 'e5224fa7-15c8-4840-8c9c-f2db160e1147', 1); -insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(892, 198, 4, '', '', 1.0, 0, 1, 0, 3, 1, 0, 30, 1) -,(893, 198, 5, '', '', 1.0, 0, 1, 1, 3, 1, 0, 30, 1) -,(894, 198, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) -,(895, 198, 1, '', '', 1.0, 0, 1, 3, 3, 1, 0, 30, 1) -,(896, 199, 4, '', '', 1.0, 0, 1, 4, 3, 1, 0, 30, 1) -,(897, 199, 5, '', '', 1.0, 0, 1, 5, 3, 1, 0, 30, 1) -,(898, 199, 28, '', '', 1.0, 0, 1, 6, 3, 1, 0, 30, 1) -,(899, 199, 1, '', '', 1.0, 0, 1, 7, 3, 1, 0, 30, 1) -,(900, 200, 4, '', '', 1.0, 0, 1, 8, 3, 1, 0, 30, 1) -,(901, 200, 5, '', '', 1.0, 0, 1, 9, 3, 1, 0, 30, 1) -,(902, 200, 28, '', '', 1.0, 0, 1, 10, 3, 1, 0, 30, 1) -,(903, 200, 1, '', '', 1.0, 0, 1, 11, 3, 1, 0, 30, 1) -,(904, 201, 4, '', '', 1.0, 0, 1, 12, 3, 1, 0, 30, 1) -,(905, 201, 5, '', '', 1.0, 0, 1, 13, 3, 1, 0, 30, 1) -,(906, 201, 28, '', '', 1.0, 0, 1, 14, 3, 1, 0, 30, 1) -,(907, 201, 1, '', '', 1.0, 0, 1, 15, 3, 1, 0, 30, 1) -,(908, 203, 4, '', '', 1.0, 0, 1, 16, 3, 1, 0, 30, 1) -,(909, 203, 5, '', '', 1.0, 0, 1, 17, 3, 1, 0, 30, 1) -,(910, 203, 28, '', '', 1.0, 0, 1, 18, 3, 1, 0, 30, 1) -,(911, 203, 1, '', '', 1.0, 0, 1, 19, 3, 1, 0, 30, 1) -,(912, 204, 4, '', '', 1.0, 0, 1, 20, 3, 1, 0, 30, 1) -,(913, 204, 5, '', '', 1.0, 0, 1, 21, 3, 1, 0, 30, 1) -,(914, 204, 28, '', '', 1.0, 0, 1, 22, 3, 1, 0, 30, 1) -,(915, 204, 1, '', '', 1.0, 0, 1, 23, 3, 1, 0, 30, 1) -,(916, 205, 4, '', '', 1.0, 0, 1, 24, 3, 1, 0, 30, 1) -,(917, 205, 5, '', '', 1.0, 0, 1, 25, 3, 1, 0, 30, 1) -,(918, 205, 28, '', '', 1.0, 0, 1, 26, 3, 1, 0, 30, 1) -,(919, 205, 1, '', '', 1.0, 0, 1, 27, 3, 1, 0, 30, 1) -,(920, 206, 4, '', '', 1.0, 0, 1, 28, 3, 1, 0, 30, 1) -,(921, 206, 5, '', '', 1.0, 0, 1, 29, 3, 1, 0, 30, 1) -,(922, 206, 28, '', '', 1.0, 0, 1, 30, 3, 1, 0, 30, 1) -,(923, 206, 1, '', '', 1.0, 0, 1, 31, 3, 1, 0, 30, 1) -,(924, 207, 4, '', '', 1.0, 0, 1, 32, 3, 1, 0, 30, 1) -,(925, 207, 5, '', '', 1.0, 0, 1, 33, 3, 1, 0, 30, 1) -,(926, 207, 28, '', '', 1.0, 0, 1, 34, 3, 1, 0, 30, 1) -,(927, 207, 1, '', '', 1.0, 0, 1, 35, 3, 1, 0, 30, 1); - --- Turn10-verein -insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; -insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; -insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; -insert into disziplin (id, name) values (30, 'Minitramp') on conflict (id) do nothing; -insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; -insert into disziplin (id, name) values (27, 'Stufenbarren') on conflict (id) do nothing; -insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; -insert into disziplin (id, name) values (32, 'Ringe') on conflict (id) do nothing; -insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(208, 'Turn10-Verein', 0, null, 208, 0, 100, 'b2d95501-52d2-4070-ab8c-27406cddb8fb', 2) -,(209, 'BS', 0, 208, 209, 0, 100, '812702c4-39b5-47c1-9c32-30243e7433a7', 2) -,(210, 'OS', 0, 208, 210, 0, 100, '6ea03ad7-0a10-4d34-b7b2-730f6325ef00', 2); -insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(928, 209, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) -,(929, 209, 5, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) -,(930, 209, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) -,(931, 209, 30, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) -,(932, 209, 6, '', '', 1.0, 1, 0, 4, 3, 1, 0, 30, 1) -,(933, 209, 27, '', '', 1.0, 0, 1, 5, 3, 1, 0, 30, 1) -,(934, 209, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) -,(935, 209, 32, '', '', 1.0, 1, 0, 7, 3, 1, 0, 30, 1) -,(936, 210, 1, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) -,(937, 210, 5, '', '', 1.0, 1, 0, 9, 3, 1, 0, 30, 1) -,(938, 210, 28, '', '', 1.0, 0, 1, 10, 3, 1, 0, 30, 1) -,(939, 210, 30, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) -,(940, 210, 6, '', '', 1.0, 1, 0, 12, 3, 1, 0, 30, 1) -,(941, 210, 27, '', '', 1.0, 0, 1, 13, 3, 1, 0, 30, 1) -,(942, 210, 4, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) -,(943, 210, 32, '', '', 1.0, 1, 0, 15, 3, 1, 0, 30, 1); - --- Turn10-Schule -insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; -insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; -insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; -insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; -insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; -insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(211, 'Turn10-Schule', 0, null, 211, 0, 100, 'e3f740c0-4b4e-4b0f-9cb5-c884363d4217', 2) -,(212, 'BS', 0, 211, 212, 0, 100, '316ab2c8-6fff-4f4d-b2a4-afd360f63fcd', 2) -,(213, 'OS', 0, 211, 213, 0, 100, '9585596a-a571-414d-9a32-000a1e38c307', 2); -insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(944, 212, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) -,(945, 212, 5, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) -,(946, 212, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) -,(947, 212, 6, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) -,(948, 212, 4, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) -,(949, 213, 1, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) -,(950, 213, 5, '', '', 1.0, 1, 0, 6, 3, 1, 0, 30, 1) -,(951, 213, 28, '', '', 1.0, 0, 1, 7, 3, 1, 0, 30, 1) -,(952, 213, 6, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) -,(953, 213, 4, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1); - --- GeTu BLTV -insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; -insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; -insert into disziplin (id, name) values (3, 'Ring') on conflict (id) do nothing; -insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; -insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; -insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(214, 'GeTu BLTV', 0, null, 214, 0, 100, '244a53f9-f182-4b7f-905b-53d894b6f463', 1) -,(215, 'K1', 0, 214, 215, 0, 10, '5d65d5ee-aa3a-4ca9-b262-6f6c644ef645', 1) -,(216, 'K2', 0, 214, 216, 0, 12, '92ffa6b2-5568-4bd1-87ff-433957ca50e9', 1) -,(217, 'K3', 0, 214, 217, 0, 14, 'd336fdb2-9109-4403-8aff-288c9fae9385', 1) -,(218, 'K4', 0, 214, 218, 0, 16, 'bddb5e4a-9159-4260-b587-5d74cf652d3e', 1) -,(219, 'K5', 0, 214, 219, 0, 100, 'b76a5db7-1438-44f6-b38b-3ff982f120c2', 1) -,(220, 'K6', 0, 214, 220, 0, 100, '5b74c500-0104-4c1e-9bbc-f0c3ed258681', 1) -,(221, 'K7', 0, 214, 221, 0, 100, '41077087-1700-43d4-b507-327b0907d861', 1) -,(222, 'KD', 0, 214, 222, 22, 100, '460ef56f-1b60-4a10-8874-73edbaba022d', 1) -,(223, 'KH', 0, 214, 223, 28, 100, '01119fbf-27b7-4fe8-aad1-7df31972af70', 1); -insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(954, 215, 6, '', '', 1.0, 1, 1, 0, 3, 0, 0, 30, 1) -,(955, 215, 1, '', '', 1.0, 1, 1, 1, 3, 0, 0, 30, 1) -,(956, 215, 3, '', '', 1.0, 1, 1, 2, 3, 0, 0, 30, 1) -,(957, 215, 4, '', '', 1.0, 1, 1, 3, 3, 0, 0, 30, 1) -,(958, 215, 5, '', '', 1.0, 1, 0, 4, 3, 0, 0, 30, 0) -,(959, 216, 6, '', '', 1.0, 1, 1, 5, 3, 0, 0, 30, 1) -,(960, 216, 1, '', '', 1.0, 1, 1, 6, 3, 0, 0, 30, 1) -,(961, 216, 3, '', '', 1.0, 1, 1, 7, 3, 0, 0, 30, 1) -,(962, 216, 4, '', '', 1.0, 1, 1, 8, 3, 0, 0, 30, 1) -,(963, 216, 5, '', '', 1.0, 1, 0, 9, 3, 0, 0, 30, 0) -,(964, 217, 6, '', '', 1.0, 1, 1, 10, 3, 0, 0, 30, 1) -,(965, 217, 1, '', '', 1.0, 1, 1, 11, 3, 0, 0, 30, 1) -,(966, 217, 3, '', '', 1.0, 1, 1, 12, 3, 0, 0, 30, 1) -,(967, 217, 4, '', '', 1.0, 1, 1, 13, 3, 0, 0, 30, 1) -,(968, 217, 5, '', '', 1.0, 1, 0, 14, 3, 0, 0, 30, 0) -,(969, 218, 6, '', '', 1.0, 1, 1, 15, 3, 0, 0, 30, 1) -,(970, 218, 1, '', '', 1.0, 1, 1, 16, 3, 0, 0, 30, 1) -,(971, 218, 3, '', '', 1.0, 1, 1, 17, 3, 0, 0, 30, 1) -,(972, 218, 4, '', '', 1.0, 1, 1, 18, 3, 0, 0, 30, 1) -,(973, 218, 5, '', '', 1.0, 1, 0, 19, 3, 0, 0, 30, 0) -,(974, 219, 6, '', '', 1.0, 1, 1, 20, 3, 0, 0, 30, 1) -,(975, 219, 1, '', '', 1.0, 1, 1, 21, 3, 0, 0, 30, 1) -,(976, 219, 3, '', '', 1.0, 1, 1, 22, 3, 0, 0, 30, 1) -,(977, 219, 4, '', '', 1.0, 1, 1, 23, 3, 0, 0, 30, 1) -,(978, 219, 5, '', '', 1.0, 1, 0, 24, 3, 0, 0, 30, 0) -,(979, 220, 6, '', '', 1.0, 1, 1, 25, 3, 0, 0, 30, 1) -,(980, 220, 1, '', '', 1.0, 1, 1, 26, 3, 0, 0, 30, 1) -,(981, 220, 3, '', '', 1.0, 1, 1, 27, 3, 0, 0, 30, 1) -,(982, 220, 4, '', '', 1.0, 1, 1, 28, 3, 0, 0, 30, 1) -,(983, 220, 5, '', '', 1.0, 1, 0, 29, 3, 0, 0, 30, 0) -,(984, 221, 6, '', '', 1.0, 1, 1, 30, 3, 0, 0, 30, 1) -,(985, 221, 1, '', '', 1.0, 1, 1, 31, 3, 0, 0, 30, 1) -,(986, 221, 3, '', '', 1.0, 1, 1, 32, 3, 0, 0, 30, 1) -,(987, 221, 4, '', '', 1.0, 1, 1, 33, 3, 0, 0, 30, 1) -,(988, 221, 5, '', '', 1.0, 1, 0, 34, 3, 0, 0, 30, 0) -,(989, 222, 6, '', '', 1.0, 1, 1, 35, 3, 0, 0, 30, 1) -,(990, 222, 1, '', '', 1.0, 1, 1, 36, 3, 0, 0, 30, 1) -,(991, 222, 3, '', '', 1.0, 1, 1, 37, 3, 0, 0, 30, 1) -,(992, 222, 4, '', '', 1.0, 1, 1, 38, 3, 0, 0, 30, 1) -,(993, 222, 5, '', '', 1.0, 1, 0, 39, 3, 0, 0, 30, 0) -,(994, 223, 6, '', '', 1.0, 1, 1, 40, 3, 0, 0, 30, 1) -,(995, 223, 1, '', '', 1.0, 1, 1, 41, 3, 0, 0, 30, 1) -,(996, 223, 3, '', '', 1.0, 1, 1, 42, 3, 0, 0, 30, 1) -,(997, 223, 4, '', '', 1.0, 1, 1, 43, 3, 0, 0, 30, 1) -,(998, 223, 5, '', '', 1.0, 1, 0, 44, 3, 0, 0, 30, 0); diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql index 30d8d1260..296c98aa7 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql @@ -118,243 +118,3 @@ UPDATE programm UPDATE programm set alter_von=28 where id=43; - --- Test Programm-Extensions --- KuTu DTL Kür & Pflicht -insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; -insert into disziplin (id, name) values (3, 'Ring') on conflict (id) do nothing; -insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; -insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; -insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; -insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(184, 'KuTu DTL Kür & Pflicht', 0, null, 184, 0, 100, '29ee216c-f1bf-4940-9b2f-a98b6af0ef73', 1) -,(185, 'Kür', 1, 184, 185, 0, 100, '9868786d-29fd-4560-8a14-a32a5dd56c7a', 1) -,(186, 'WK I Kür', 1, 185, 186, 0, 100, 'a731a36f-2190-403a-8dff-5009b862d6b2', 1) -,(187, 'WK II LK1', 1, 185, 187, 0, 100, '1aa8711c-5bf3-45bd-98cf-8f143fe57f94', 1) -,(188, 'WK III LK1', 1, 185, 188, 16, 17, '0a685ee1-e4bd-450a-b387-5470d4424e13', 1) -,(189, 'WK IV LK2', 1, 185, 189, 14, 15, '6517a841-fc1e-49fa-8d45-9c90cad2a739', 1) -,(190, 'Pflicht', 1, 184, 190, 0, 100, 'df6de257-03e0-4b61-8855-e7f9c4b416b0', 1) -,(191, 'WK V Jug', 1, 190, 191, 14, 18, '1f29b75e-6800-4eab-9350-1d5029bafa69', 1) -,(192, 'WK VI Schüler A', 1, 190, 192, 12, 13, 'd7b983af-cbac-4ffc-bbe1-90255a2c828c', 1) -,(193, 'WK VII Schüler B', 1, 190, 193, 10, 11, 'acddda1d-3561-4bf8-9c3e-c8d6caaa5771', 1) -,(194, 'WK VIII Schüler C', 1, 190, 194, 8, 9, '7f0921ec-8e35-4f00-b9d4-9a9e7fccc3d8', 1) -,(195, 'WK IX Schüler D', 1, 190, 195, 0, 7, '67dd95d0-5b48-4f82-b109-8c564754b577', 1); -insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(847, 186, 1, '', '', 1.0, 1, 0, 0, 3, 1, 0, 30, 1) -,(848, 186, 3, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) -,(849, 186, 4, '', '', 1.0, 1, 0, 2, 3, 1, 0, 30, 1) -,(850, 186, 5, '', '', 1.0, 1, 0, 3, 3, 1, 0, 30, 1) -,(851, 186, 6, '', '', 1.0, 1, 0, 4, 3, 1, 0, 30, 1) -,(852, 187, 1, '', '', 1.0, 1, 0, 5, 3, 1, 0, 30, 1) -,(853, 187, 3, '', '', 1.0, 1, 0, 6, 3, 1, 0, 30, 1) -,(854, 187, 4, '', '', 1.0, 1, 0, 7, 3, 1, 0, 30, 1) -,(855, 187, 5, '', '', 1.0, 1, 0, 8, 3, 1, 0, 30, 1) -,(856, 187, 6, '', '', 1.0, 1, 0, 9, 3, 1, 0, 30, 1) -,(857, 188, 1, '', '', 1.0, 1, 0, 10, 3, 1, 0, 30, 1) -,(858, 188, 3, '', '', 1.0, 1, 0, 11, 3, 1, 0, 30, 1) -,(859, 188, 4, '', '', 1.0, 1, 0, 12, 3, 1, 0, 30, 1) -,(860, 188, 5, '', '', 1.0, 1, 0, 13, 3, 1, 0, 30, 1) -,(861, 188, 6, '', '', 1.0, 1, 0, 14, 3, 1, 0, 30, 1) -,(862, 189, 1, '', '', 1.0, 1, 0, 15, 3, 1, 0, 30, 1) -,(863, 189, 3, '', '', 1.0, 1, 0, 16, 3, 1, 0, 30, 1) -,(864, 189, 4, '', '', 1.0, 1, 0, 17, 3, 1, 0, 30, 1) -,(865, 189, 5, '', '', 1.0, 1, 0, 18, 3, 1, 0, 30, 1) -,(866, 189, 6, '', '', 1.0, 1, 0, 19, 3, 1, 0, 30, 1) -,(867, 191, 1, '', '', 1.0, 1, 0, 20, 3, 1, 0, 30, 1) -,(868, 191, 3, '', '', 1.0, 1, 0, 21, 3, 1, 0, 30, 1) -,(869, 191, 4, '', '', 1.0, 1, 0, 22, 3, 1, 0, 30, 1) -,(870, 191, 5, '', '', 1.0, 1, 0, 23, 3, 1, 0, 30, 1) -,(871, 191, 6, '', '', 1.0, 1, 0, 24, 3, 1, 0, 30, 1) -,(872, 192, 1, '', '', 1.0, 1, 0, 25, 3, 1, 0, 30, 1) -,(873, 192, 3, '', '', 1.0, 1, 0, 26, 3, 1, 0, 30, 1) -,(874, 192, 4, '', '', 1.0, 1, 0, 27, 3, 1, 0, 30, 1) -,(875, 192, 5, '', '', 1.0, 1, 0, 28, 3, 1, 0, 30, 1) -,(876, 192, 6, '', '', 1.0, 1, 0, 29, 3, 1, 0, 30, 1) -,(877, 193, 1, '', '', 1.0, 1, 0, 30, 3, 1, 0, 30, 1) -,(878, 193, 3, '', '', 1.0, 1, 0, 31, 3, 1, 0, 30, 1) -,(879, 193, 4, '', '', 1.0, 1, 0, 32, 3, 1, 0, 30, 1) -,(880, 193, 5, '', '', 1.0, 1, 0, 33, 3, 1, 0, 30, 1) -,(881, 193, 6, '', '', 1.0, 1, 0, 34, 3, 1, 0, 30, 1) -,(882, 194, 1, '', '', 1.0, 1, 0, 35, 3, 1, 0, 30, 1) -,(883, 194, 3, '', '', 1.0, 1, 0, 36, 3, 1, 0, 30, 1) -,(884, 194, 4, '', '', 1.0, 1, 0, 37, 3, 1, 0, 30, 1) -,(885, 194, 5, '', '', 1.0, 1, 0, 38, 3, 1, 0, 30, 1) -,(886, 194, 6, '', '', 1.0, 1, 0, 39, 3, 1, 0, 30, 1) -,(887, 195, 1, '', '', 1.0, 1, 0, 40, 3, 1, 0, 30, 1) -,(888, 195, 3, '', '', 1.0, 1, 0, 41, 3, 1, 0, 30, 1) -,(889, 195, 4, '', '', 1.0, 1, 0, 42, 3, 1, 0, 30, 1) -,(890, 195, 5, '', '', 1.0, 1, 0, 43, 3, 1, 0, 30, 1) -,(891, 195, 6, '', '', 1.0, 1, 0, 44, 3, 1, 0, 30, 1); - --- KuTuRi DTL Kür & Pflicht -insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; -insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; -insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; -insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; -insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(196, 'KuTuRi DTL Kür & Pflicht', 0, null, 196, 0, 100, 'b66dac1b-e2cf-43b5-a919-0d94aa42680c', 1) -,(197, 'Kür', 1, 196, 197, 0, 100, 'b371f1b4-ff84-4a65-b536-9ff6e0479a6d', 1) -,(198, 'WK I Kür', 1, 197, 198, 0, 100, '932da381-63ea-4166-9bb5-04d7d684d105', 1) -,(199, 'WK II LK1', 1, 197, 199, 0, 100, '146a17d5-7ab4-4086-81f1-db3329b07e2a', 1) -,(200, 'WK III LK1', 1, 197, 200, 16, 17, 'b70b2f6d-1321-4666-bac8-5807a15786eb', 1) -,(201, 'WK IV LK2', 1, 197, 201, 14, 15, '28efc451-d762-42ea-9618-b4c0f23cbe9b', 1) -,(202, 'Pflicht', 1, 196, 202, 0, 100, '04d249b9-5c2c-4a97-a6bc-ee86062d6cac', 1) -,(203, 'WK V Jug', 1, 202, 203, 14, 18, 'd0c91f7c-fe42-466a-a7c0-c3bec17133fe', 1) -,(204, 'WK VI Schüler A', 1, 202, 204, 12, 13, '45584b7f-498c-42a8-b6bb-c06525cac332', 1) -,(205, 'WK VII Schüler B', 1, 202, 205, 10, 11, '863da537-b5d0-4259-ae62-b358f70c0ff4', 1) -,(206, 'WK VIII Schüler C', 1, 202, 206, 8, 9, '6567925e-2335-421c-b677-d426adb258e3', 1) -,(207, 'WK IX Schüler D', 1, 202, 207, 0, 7, 'e5224fa7-15c8-4840-8c9c-f2db160e1147', 1); -insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(892, 198, 4, '', '', 1.0, 0, 1, 0, 3, 1, 0, 30, 1) -,(893, 198, 5, '', '', 1.0, 0, 1, 1, 3, 1, 0, 30, 1) -,(894, 198, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) -,(895, 198, 1, '', '', 1.0, 0, 1, 3, 3, 1, 0, 30, 1) -,(896, 199, 4, '', '', 1.0, 0, 1, 4, 3, 1, 0, 30, 1) -,(897, 199, 5, '', '', 1.0, 0, 1, 5, 3, 1, 0, 30, 1) -,(898, 199, 28, '', '', 1.0, 0, 1, 6, 3, 1, 0, 30, 1) -,(899, 199, 1, '', '', 1.0, 0, 1, 7, 3, 1, 0, 30, 1) -,(900, 200, 4, '', '', 1.0, 0, 1, 8, 3, 1, 0, 30, 1) -,(901, 200, 5, '', '', 1.0, 0, 1, 9, 3, 1, 0, 30, 1) -,(902, 200, 28, '', '', 1.0, 0, 1, 10, 3, 1, 0, 30, 1) -,(903, 200, 1, '', '', 1.0, 0, 1, 11, 3, 1, 0, 30, 1) -,(904, 201, 4, '', '', 1.0, 0, 1, 12, 3, 1, 0, 30, 1) -,(905, 201, 5, '', '', 1.0, 0, 1, 13, 3, 1, 0, 30, 1) -,(906, 201, 28, '', '', 1.0, 0, 1, 14, 3, 1, 0, 30, 1) -,(907, 201, 1, '', '', 1.0, 0, 1, 15, 3, 1, 0, 30, 1) -,(908, 203, 4, '', '', 1.0, 0, 1, 16, 3, 1, 0, 30, 1) -,(909, 203, 5, '', '', 1.0, 0, 1, 17, 3, 1, 0, 30, 1) -,(910, 203, 28, '', '', 1.0, 0, 1, 18, 3, 1, 0, 30, 1) -,(911, 203, 1, '', '', 1.0, 0, 1, 19, 3, 1, 0, 30, 1) -,(912, 204, 4, '', '', 1.0, 0, 1, 20, 3, 1, 0, 30, 1) -,(913, 204, 5, '', '', 1.0, 0, 1, 21, 3, 1, 0, 30, 1) -,(914, 204, 28, '', '', 1.0, 0, 1, 22, 3, 1, 0, 30, 1) -,(915, 204, 1, '', '', 1.0, 0, 1, 23, 3, 1, 0, 30, 1) -,(916, 205, 4, '', '', 1.0, 0, 1, 24, 3, 1, 0, 30, 1) -,(917, 205, 5, '', '', 1.0, 0, 1, 25, 3, 1, 0, 30, 1) -,(918, 205, 28, '', '', 1.0, 0, 1, 26, 3, 1, 0, 30, 1) -,(919, 205, 1, '', '', 1.0, 0, 1, 27, 3, 1, 0, 30, 1) -,(920, 206, 4, '', '', 1.0, 0, 1, 28, 3, 1, 0, 30, 1) -,(921, 206, 5, '', '', 1.0, 0, 1, 29, 3, 1, 0, 30, 1) -,(922, 206, 28, '', '', 1.0, 0, 1, 30, 3, 1, 0, 30, 1) -,(923, 206, 1, '', '', 1.0, 0, 1, 31, 3, 1, 0, 30, 1) -,(924, 207, 4, '', '', 1.0, 0, 1, 32, 3, 1, 0, 30, 1) -,(925, 207, 5, '', '', 1.0, 0, 1, 33, 3, 1, 0, 30, 1) -,(926, 207, 28, '', '', 1.0, 0, 1, 34, 3, 1, 0, 30, 1) -,(927, 207, 1, '', '', 1.0, 0, 1, 35, 3, 1, 0, 30, 1); - --- Turn10-Verein -insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; -insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; -insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; -insert into disziplin (id, name) values (30, 'Minitramp') on conflict (id) do nothing; -insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; -insert into disziplin (id, name) values (27, 'Stufenbarren') on conflict (id) do nothing; -insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; -insert into disziplin (id, name) values (32, 'Ringe') on conflict (id) do nothing; -insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(208, 'Turn10-Verein', 0, null, 208, 0, 100, 'b2d95501-52d2-4070-ab8c-27406cddb8fb', 2) -,(209, 'BS', 0, 208, 209, 0, 100, '812702c4-39b5-47c1-9c32-30243e7433a7', 2) -,(210, 'OS', 0, 208, 210, 0, 100, '6ea03ad7-0a10-4d34-b7b2-730f6325ef00', 2); -insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(928, 209, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) -,(929, 209, 5, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) -,(930, 209, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) -,(931, 209, 30, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) -,(932, 209, 6, '', '', 1.0, 1, 0, 4, 3, 1, 0, 30, 1) -,(933, 209, 27, '', '', 1.0, 0, 1, 5, 3, 1, 0, 30, 1) -,(934, 209, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 30, 1) -,(935, 209, 32, '', '', 1.0, 1, 0, 7, 3, 1, 0, 30, 1) -,(936, 210, 1, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) -,(937, 210, 5, '', '', 1.0, 1, 0, 9, 3, 1, 0, 30, 1) -,(938, 210, 28, '', '', 1.0, 0, 1, 10, 3, 1, 0, 30, 1) -,(939, 210, 30, '', '', 1.0, 1, 1, 11, 3, 1, 0, 30, 1) -,(940, 210, 6, '', '', 1.0, 1, 0, 12, 3, 1, 0, 30, 1) -,(941, 210, 27, '', '', 1.0, 0, 1, 13, 3, 1, 0, 30, 1) -,(942, 210, 4, '', '', 1.0, 1, 1, 14, 3, 1, 0, 30, 1) -,(943, 210, 32, '', '', 1.0, 1, 0, 15, 3, 1, 0, 30, 1); -insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; -insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; -insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; -insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; -insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; -insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values - --- Turn10-Schule -(211, 'Turn10-Schule', 0, null, 211, 0, 100, 'e3f740c0-4b4e-4b0f-9cb5-c884363d4217', 2) -,(212, 'BS', 0, 211, 212, 0, 100, '316ab2c8-6fff-4f4d-b2a4-afd360f63fcd', 2) -,(213, 'OS', 0, 211, 213, 0, 100, '9585596a-a571-414d-9a32-000a1e38c307', 2); -insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(944, 212, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 30, 1) -,(945, 212, 5, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) -,(946, 212, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) -,(947, 212, 6, '', '', 1.0, 1, 1, 3, 3, 1, 0, 30, 1) -,(948, 212, 4, '', '', 1.0, 1, 1, 4, 3, 1, 0, 30, 1) -,(949, 213, 1, '', '', 1.0, 1, 1, 5, 3, 1, 0, 30, 1) -,(950, 213, 5, '', '', 1.0, 1, 0, 6, 3, 1, 0, 30, 1) -,(951, 213, 28, '', '', 1.0, 0, 1, 7, 3, 1, 0, 30, 1) -,(952, 213, 6, '', '', 1.0, 1, 1, 8, 3, 1, 0, 30, 1) -,(953, 213, 4, '', '', 1.0, 1, 1, 9, 3, 1, 0, 30, 1); - --- GeTu BLTV -insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; -insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; -insert into disziplin (id, name) values (3, 'Ring') on conflict (id) do nothing; -insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; -insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; -insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(214, 'GeTu BLTV', 0, null, 214, 0, 100, '244a53f9-f182-4b7f-905b-53d894b6f463', 1) -,(215, 'K1', 0, 214, 215, 0, 10, '5d65d5ee-aa3a-4ca9-b262-6f6c644ef645', 1) -,(216, 'K2', 0, 214, 216, 0, 12, '92ffa6b2-5568-4bd1-87ff-433957ca50e9', 1) -,(217, 'K3', 0, 214, 217, 0, 14, 'd336fdb2-9109-4403-8aff-288c9fae9385', 1) -,(218, 'K4', 0, 214, 218, 0, 16, 'bddb5e4a-9159-4260-b587-5d74cf652d3e', 1) -,(219, 'K5', 0, 214, 219, 0, 100, 'b76a5db7-1438-44f6-b38b-3ff982f120c2', 1) -,(220, 'K6', 0, 214, 220, 0, 100, '5b74c500-0104-4c1e-9bbc-f0c3ed258681', 1) -,(221, 'K7', 0, 214, 221, 0, 100, '41077087-1700-43d4-b507-327b0907d861', 1) -,(222, 'KD', 0, 214, 222, 22, 100, '460ef56f-1b60-4a10-8874-73edbaba022d', 1) -,(223, 'KH', 0, 214, 223, 28, 100, '01119fbf-27b7-4fe8-aad1-7df31972af70', 1); -insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values -(954, 215, 6, '', '', 1.0, 1, 1, 0, 3, 0, 0, 30, 1) -,(955, 215, 1, '', '', 1.0, 1, 1, 1, 3, 0, 0, 30, 1) -,(956, 215, 3, '', '', 1.0, 1, 1, 2, 3, 0, 0, 30, 1) -,(957, 215, 4, '', '', 1.0, 1, 1, 3, 3, 0, 0, 30, 1) -,(958, 215, 5, '', '', 1.0, 1, 0, 4, 3, 0, 0, 30, 0) -,(959, 216, 6, '', '', 1.0, 1, 1, 5, 3, 0, 0, 30, 1) -,(960, 216, 1, '', '', 1.0, 1, 1, 6, 3, 0, 0, 30, 1) -,(961, 216, 3, '', '', 1.0, 1, 1, 7, 3, 0, 0, 30, 1) -,(962, 216, 4, '', '', 1.0, 1, 1, 8, 3, 0, 0, 30, 1) -,(963, 216, 5, '', '', 1.0, 1, 0, 9, 3, 0, 0, 30, 0) -,(964, 217, 6, '', '', 1.0, 1, 1, 10, 3, 0, 0, 30, 1) -,(965, 217, 1, '', '', 1.0, 1, 1, 11, 3, 0, 0, 30, 1) -,(966, 217, 3, '', '', 1.0, 1, 1, 12, 3, 0, 0, 30, 1) -,(967, 217, 4, '', '', 1.0, 1, 1, 13, 3, 0, 0, 30, 1) -,(968, 217, 5, '', '', 1.0, 1, 0, 14, 3, 0, 0, 30, 0) -,(969, 218, 6, '', '', 1.0, 1, 1, 15, 3, 0, 0, 30, 1) -,(970, 218, 1, '', '', 1.0, 1, 1, 16, 3, 0, 0, 30, 1) -,(971, 218, 3, '', '', 1.0, 1, 1, 17, 3, 0, 0, 30, 1) -,(972, 218, 4, '', '', 1.0, 1, 1, 18, 3, 0, 0, 30, 1) -,(973, 218, 5, '', '', 1.0, 1, 0, 19, 3, 0, 0, 30, 0) -,(974, 219, 6, '', '', 1.0, 1, 1, 20, 3, 0, 0, 30, 1) -,(975, 219, 1, '', '', 1.0, 1, 1, 21, 3, 0, 0, 30, 1) -,(976, 219, 3, '', '', 1.0, 1, 1, 22, 3, 0, 0, 30, 1) -,(977, 219, 4, '', '', 1.0, 1, 1, 23, 3, 0, 0, 30, 1) -,(978, 219, 5, '', '', 1.0, 1, 0, 24, 3, 0, 0, 30, 0) -,(979, 220, 6, '', '', 1.0, 1, 1, 25, 3, 0, 0, 30, 1) -,(980, 220, 1, '', '', 1.0, 1, 1, 26, 3, 0, 0, 30, 1) -,(981, 220, 3, '', '', 1.0, 1, 1, 27, 3, 0, 0, 30, 1) -,(982, 220, 4, '', '', 1.0, 1, 1, 28, 3, 0, 0, 30, 1) -,(983, 220, 5, '', '', 1.0, 1, 0, 29, 3, 0, 0, 30, 0) -,(984, 221, 6, '', '', 1.0, 1, 1, 30, 3, 0, 0, 30, 1) -,(985, 221, 1, '', '', 1.0, 1, 1, 31, 3, 0, 0, 30, 1) -,(986, 221, 3, '', '', 1.0, 1, 1, 32, 3, 0, 0, 30, 1) -,(987, 221, 4, '', '', 1.0, 1, 1, 33, 3, 0, 0, 30, 1) -,(988, 221, 5, '', '', 1.0, 1, 0, 34, 3, 0, 0, 30, 0) -,(989, 222, 6, '', '', 1.0, 1, 1, 35, 3, 0, 0, 30, 1) -,(990, 222, 1, '', '', 1.0, 1, 1, 36, 3, 0, 0, 30, 1) -,(991, 222, 3, '', '', 1.0, 1, 1, 37, 3, 0, 0, 30, 1) -,(992, 222, 4, '', '', 1.0, 1, 1, 38, 3, 0, 0, 30, 1) -,(993, 222, 5, '', '', 1.0, 1, 0, 39, 3, 0, 0, 30, 0) -,(994, 223, 6, '', '', 1.0, 1, 1, 40, 3, 0, 0, 30, 1) -,(995, 223, 1, '', '', 1.0, 1, 1, 41, 3, 0, 0, 30, 1) -,(996, 223, 3, '', '', 1.0, 1, 1, 42, 3, 0, 0, 30, 1) -,(997, 223, 4, '', '', 1.0, 1, 1, 43, 3, 0, 0, 30, 1) -,(998, 223, 5, '', '', 1.0, 1, 0, 44, 3, 0, 0, 30, 0); diff --git a/src/main/resources/dbscripts/AddWKTestPgms-pg.sql b/src/main/resources/dbscripts/AddWKTestPgms-pg.sql new file mode 100644 index 000000000..f1ca4c80f --- /dev/null +++ b/src/main/resources/dbscripts/AddWKTestPgms-pg.sql @@ -0,0 +1,250 @@ +-- set search_path to kutu; +-- Test Programm-Extensions +-- KuTu TG Allgäu Kür & Pflicht +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (2, 'Pferd Pauschen') on conflict (id) do nothing; +insert into disziplin (id, name) values (3, 'Ring') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(44, 'KuTu TG Allgäu Kür & Pflicht', 0, null, 44, 0, 100, 'c6592fdf-1b60-4334-8db0-a678a637e699', 1) +,(45, 'Kür', 1, 44, 45, 0, 100, '0131ab0a-d275-445c-860a-5b4fce152653', 1) +,(46, 'WK I Kür', 1, 45, 46, 0, 100, '9e6045ce-b9f7-4c91-b54a-5ec50d18628b', 1) +,(47, 'WK II LK1', 1, 45, 47, 0, 100, 'cba44d99-0544-4a4b-b9c5-a97a00e2b7a5', 1) +,(48, 'WK III LK1', 1, 45, 48, 16, 17, 'a0209937-dc49-4d56-b8cf-5998cbf96a53', 1) +,(49, 'WK IV LK2', 1, 45, 49, 14, 15, 'f414e11d-9943-44c6-9267-99b4568bebb2', 1) +,(50, 'Pflicht', 1, 44, 50, 0, 100, 'c6f67d97-a913-4a82-a1c4-e1684191e41a', 1) +,(51, 'WK V Jug', 1, 50, 51, 14, 18, '91026459-df00-45ee-a44f-ad2e81a815ec', 1) +,(52, 'WK VI Schüler A', 1, 50, 52, 12, 13, '64f80cf6-2a30-4a77-80d0-5c7bd3ee0737', 1) +,(53, 'WK VII Schüler B', 1, 50, 53, 10, 11, '3799370c-eff9-42cd-9868-16d36ecc1a53', 1) +,(54, 'WK VIII Schüler C', 1, 50, 54, 8, 9, 'bde177ad-90be-489c-9120-fb1974722f00', 1) +,(55, 'WK IX Schüler D', 1, 50, 55, 0, 7, 'f4bc8841-6f2d-47af-b52c-72fc8ab63c0e', 1) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(154, 46, 1, '', '', 1.0, 1, 0, 0, 3, 1, 0, 30, 1) +,(155, 46, 2, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) +,(156, 46, 3, '', '', 1.0, 1, 0, 2, 3, 1, 0, 30, 1) +,(157, 46, 4, '', '', 1.0, 1, 0, 3, 3, 1, 0, 30, 1) +,(158, 46, 5, '', '', 1.0, 1, 0, 4, 3, 1, 0, 30, 1) +,(159, 46, 6, '', '', 1.0, 1, 0, 5, 3, 1, 0, 30, 1) +,(160, 47, 1, '', '', 1.0, 1, 0, 6, 3, 1, 0, 30, 1) +,(161, 47, 2, '', '', 1.0, 1, 0, 7, 3, 1, 0, 30, 1) +,(162, 47, 3, '', '', 1.0, 1, 0, 8, 3, 1, 0, 30, 1) +,(163, 47, 4, '', '', 1.0, 1, 0, 9, 3, 1, 0, 30, 1) +,(164, 47, 5, '', '', 1.0, 1, 0, 10, 3, 1, 0, 30, 1) +,(165, 47, 6, '', '', 1.0, 1, 0, 11, 3, 1, 0, 30, 1) +,(166, 48, 1, '', '', 1.0, 1, 0, 12, 3, 1, 0, 30, 1) +,(167, 48, 2, '', '', 1.0, 1, 0, 13, 3, 1, 0, 30, 1) +,(168, 48, 3, '', '', 1.0, 1, 0, 14, 3, 1, 0, 30, 1) +,(169, 48, 4, '', '', 1.0, 1, 0, 15, 3, 1, 0, 30, 1) +,(170, 48, 5, '', '', 1.0, 1, 0, 16, 3, 1, 0, 30, 1) +,(171, 48, 6, '', '', 1.0, 1, 0, 17, 3, 1, 0, 30, 1) +,(172, 49, 1, '', '', 1.0, 1, 0, 18, 3, 1, 0, 30, 1) +,(173, 49, 2, '', '', 1.0, 1, 0, 19, 3, 1, 0, 30, 1) +,(174, 49, 3, '', '', 1.0, 1, 0, 20, 3, 1, 0, 30, 1) +,(175, 49, 4, '', '', 1.0, 1, 0, 21, 3, 1, 0, 30, 1) +,(176, 49, 5, '', '', 1.0, 1, 0, 22, 3, 1, 0, 30, 1) +,(177, 49, 6, '', '', 1.0, 1, 0, 23, 3, 1, 0, 30, 1) +,(178, 51, 1, '', '', 1.0, 1, 0, 24, 3, 1, 0, 30, 1) +,(179, 51, 2, '', '', 1.0, 1, 0, 25, 3, 1, 0, 30, 1) +,(180, 51, 3, '', '', 1.0, 1, 0, 26, 3, 1, 0, 30, 1) +,(181, 51, 4, '', '', 1.0, 1, 0, 27, 3, 1, 0, 30, 1) +,(182, 51, 5, '', '', 1.0, 1, 0, 28, 3, 1, 0, 30, 1) +,(183, 51, 6, '', '', 1.0, 1, 0, 29, 3, 1, 0, 30, 1) +,(184, 52, 1, '', '', 1.0, 1, 0, 30, 3, 1, 0, 30, 1) +,(185, 52, 2, '', '', 1.0, 1, 0, 31, 3, 1, 0, 30, 1) +,(186, 52, 3, '', '', 1.0, 1, 0, 32, 3, 1, 0, 30, 1) +,(187, 52, 4, '', '', 1.0, 1, 0, 33, 3, 1, 0, 30, 1) +,(188, 52, 5, '', '', 1.0, 1, 0, 34, 3, 1, 0, 30, 1) +,(189, 52, 6, '', '', 1.0, 1, 0, 35, 3, 1, 0, 30, 1) +,(190, 53, 1, '', '', 1.0, 1, 0, 36, 3, 1, 0, 30, 1) +,(191, 53, 2, '', '', 1.0, 1, 0, 37, 3, 1, 0, 30, 1) +,(192, 53, 3, '', '', 1.0, 1, 0, 38, 3, 1, 0, 30, 1) +,(193, 53, 4, '', '', 1.0, 1, 0, 39, 3, 1, 0, 30, 1) +,(194, 53, 5, '', '', 1.0, 1, 0, 40, 3, 1, 0, 30, 1) +,(195, 53, 6, '', '', 1.0, 1, 0, 41, 3, 1, 0, 30, 1) +,(196, 54, 1, '', '', 1.0, 1, 0, 42, 3, 1, 0, 30, 1) +,(197, 54, 2, '', '', 1.0, 1, 0, 43, 3, 1, 0, 30, 1) +,(198, 54, 3, '', '', 1.0, 1, 0, 44, 3, 1, 0, 30, 1) +,(199, 54, 4, '', '', 1.0, 1, 0, 45, 3, 1, 0, 30, 1) +,(200, 54, 5, '', '', 1.0, 1, 0, 46, 3, 1, 0, 30, 1) +,(201, 54, 6, '', '', 1.0, 1, 0, 47, 3, 1, 0, 30, 1) +,(202, 55, 1, '', '', 1.0, 1, 0, 48, 3, 1, 0, 30, 1) +,(203, 55, 2, '', '', 1.0, 1, 0, 49, 3, 1, 0, 30, 1) +,(204, 55, 3, '', '', 1.0, 1, 0, 50, 3, 1, 0, 30, 1) +,(205, 55, 4, '', '', 1.0, 1, 0, 51, 3, 1, 0, 30, 1) +,(206, 55, 5, '', '', 1.0, 1, 0, 52, 3, 1, 0, 30, 1) +,(207, 55, 6, '', '', 1.0, 1, 0, 53, 3, 1, 0, 30, 1) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; +-- KuTuRi TG Allgäu Kür & Pflicht +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (27, 'Stufenbarren') on conflict (id) do nothing; +insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(56, 'KuTuRi TG Allgäu Kür & Pflicht', 0, null, 56, 0, 100, 'b81b5ed8-8656-4abb-b64d-d9850531b35b', 1) +,(57, 'Kür', 1, 56, 57, 0, 100, '8403a2bf-1bf0-46b0-915b-43adf9dac15e', 1) +,(58, 'WK I Kür', 1, 57, 58, 0, 100, 'fc51cda7-3725-46c6-9828-461ecf2ab819', 1) +,(59, 'WK II LK1', 1, 57, 59, 0, 100, 'f853dffb-fd60-4e66-8f1e-fcb1888a261a', 1) +,(60, 'WK III LK1', 1, 57, 60, 16, 17, '54409c90-c8f6-4032-a55d-64930d918e7b', 1) +,(61, 'WK IV LK2', 1, 57, 61, 14, 15, '7575f0ef-041f-40ee-980b-92586371b965', 1) +,(62, 'Pflicht', 1, 56, 62, 0, 100, '6f1ee180-ca6b-4f66-8986-feace96498bf', 1) +,(63, 'WK V Jug', 1, 62, 63, 14, 18, '40134f8a-7b04-400c-93e4-8a16a4f493c7', 1) +,(64, 'WK VI Schüler A', 1, 62, 64, 12, 13, 'dc063ba7-c7ce-4202-afea-2c4610dea8d7', 1) +,(65, 'WK VII Schüler B', 1, 62, 65, 10, 11, '377dd29e-bcd6-4f97-b710-266ca7c3e482', 1) +,(66, 'WK VIII Schüler C', 1, 62, 66, 8, 9, '624c8e42-b82e-46ef-b2e6-60aae417443f', 1) +,(67, 'WK IX Schüler D', 1, 62, 67, 0, 7, 'c79769b6-9b16-4d3b-b9ff-b5dce68d9b43', 1) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(208, 58, 4, '', '', 1.0, 0, 1, 0, 3, 1, 0, 30, 1) +,(209, 58, 27, '', '', 1.0, 0, 1, 1, 3, 1, 0, 30, 1) +,(210, 58, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) +,(211, 58, 1, '', '', 1.0, 0, 1, 3, 3, 1, 0, 30, 1) +,(212, 59, 4, '', '', 1.0, 0, 1, 4, 3, 1, 0, 30, 1) +,(213, 59, 27, '', '', 1.0, 0, 1, 5, 3, 1, 0, 30, 1) +,(214, 59, 28, '', '', 1.0, 0, 1, 6, 3, 1, 0, 30, 1) +,(215, 59, 1, '', '', 1.0, 0, 1, 7, 3, 1, 0, 30, 1) +,(216, 60, 4, '', '', 1.0, 0, 1, 8, 3, 1, 0, 30, 1) +,(217, 60, 27, '', '', 1.0, 0, 1, 9, 3, 1, 0, 30, 1) +,(218, 60, 28, '', '', 1.0, 0, 1, 10, 3, 1, 0, 30, 1) +,(219, 60, 1, '', '', 1.0, 0, 1, 11, 3, 1, 0, 30, 1) +,(220, 61, 4, '', '', 1.0, 0, 1, 12, 3, 1, 0, 30, 1) +,(221, 61, 27, '', '', 1.0, 0, 1, 13, 3, 1, 0, 30, 1) +,(222, 61, 28, '', '', 1.0, 0, 1, 14, 3, 1, 0, 30, 1) +,(223, 61, 1, '', '', 1.0, 0, 1, 15, 3, 1, 0, 30, 1) +,(224, 63, 4, '', '', 1.0, 0, 1, 16, 3, 1, 0, 30, 1) +,(225, 63, 27, '', '', 1.0, 0, 1, 17, 3, 1, 0, 30, 1) +,(226, 63, 28, '', '', 1.0, 0, 1, 18, 3, 1, 0, 30, 1) +,(227, 63, 1, '', '', 1.0, 0, 1, 19, 3, 1, 0, 30, 1) +,(228, 64, 4, '', '', 1.0, 0, 1, 20, 3, 1, 0, 30, 1) +,(229, 64, 27, '', '', 1.0, 0, 1, 21, 3, 1, 0, 30, 1) +,(230, 64, 28, '', '', 1.0, 0, 1, 22, 3, 1, 0, 30, 1) +,(231, 64, 1, '', '', 1.0, 0, 1, 23, 3, 1, 0, 30, 1) +,(232, 65, 4, '', '', 1.0, 0, 1, 24, 3, 1, 0, 30, 1) +,(233, 65, 27, '', '', 1.0, 0, 1, 25, 3, 1, 0, 30, 1) +,(234, 65, 28, '', '', 1.0, 0, 1, 26, 3, 1, 0, 30, 1) +,(235, 65, 1, '', '', 1.0, 0, 1, 27, 3, 1, 0, 30, 1) +,(236, 66, 4, '', '', 1.0, 0, 1, 28, 3, 1, 0, 30, 1) +,(237, 66, 27, '', '', 1.0, 0, 1, 29, 3, 1, 0, 30, 1) +,(238, 66, 28, '', '', 1.0, 0, 1, 30, 3, 1, 0, 30, 1) +,(239, 66, 1, '', '', 1.0, 0, 1, 31, 3, 1, 0, 30, 1) +,(240, 67, 4, '', '', 1.0, 0, 1, 32, 3, 1, 0, 30, 1) +,(241, 67, 27, '', '', 1.0, 0, 1, 33, 3, 1, 0, 30, 1) +,(242, 67, 28, '', '', 1.0, 0, 1, 34, 3, 1, 0, 30, 1) +,(243, 67, 1, '', '', 1.0, 0, 1, 35, 3, 1, 0, 30, 1) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; +-- Turn10-Verein +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; +insert into disziplin (id, name) values (30, 'Minitramp') on conflict (id) do nothing; +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into disziplin (id, name) values (27, 'Stufenbarren') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (2, 'Pferd Pauschen') on conflict (id) do nothing; +insert into disziplin (id, name) values (31, 'Ringe') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(68, 'Turn10-Verein', 0, null, 68, 0, 100, 'eac48376-aeac-4241-8db5-d910bbae82f0', 3) +,(69, 'BS', 0, 68, 69, 0, 100, '197e83c9-7ca7-4bac-96e8-ac8be828f1ab', 3) +,(70, 'OS', 0, 68, 70, 0, 100, 'fbf335c2-89b4-44de-91bf-79f616180fe6', 3) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(244, 69, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 20, 1) +,(245, 69, 5, '', '', 1.0, 1, 0, 1, 3, 1, 0, 20, 1) +,(246, 69, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 20, 1) +,(247, 69, 30, '', '', 1.0, 1, 1, 3, 3, 1, 0, 20, 1) +,(248, 69, 6, '', '', 1.0, 1, 1, 4, 3, 1, 0, 20, 1) +,(249, 69, 27, '', '', 1.0, 0, 1, 5, 3, 1, 0, 20, 1) +,(250, 69, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 20, 1) +,(251, 69, 2, '', '', 1.0, 1, 0, 7, 3, 1, 0, 20, 1) +,(252, 69, 31, '', '', 1.0, 1, 0, 8, 3, 1, 0, 20, 1) +,(253, 70, 1, '', '', 1.0, 1, 1, 9, 3, 1, 0, 20, 1) +,(254, 70, 5, '', '', 1.0, 1, 0, 10, 3, 1, 0, 20, 1) +,(255, 70, 28, '', '', 1.0, 0, 1, 11, 3, 1, 0, 20, 1) +,(256, 70, 30, '', '', 1.0, 1, 1, 12, 3, 1, 0, 20, 1) +,(257, 70, 6, '', '', 1.0, 1, 1, 13, 3, 1, 0, 20, 1) +,(258, 70, 27, '', '', 1.0, 0, 1, 14, 3, 1, 0, 20, 1) +,(259, 70, 4, '', '', 1.0, 1, 1, 15, 3, 1, 0, 20, 1) +,(260, 70, 2, '', '', 1.0, 1, 0, 16, 3, 1, 0, 20, 1) +,(261, 70, 31, '', '', 1.0, 1, 0, 17, 3, 1, 0, 20, 1) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; +-- Turn10-Schule +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(71, 'Turn10-Schule', 0, null, 71, 0, 100, 'f027daf4-c4a3-42e5-8338-16c5beafa479', 2) +,(72, 'BS', 0, 71, 72, 0, 100, '43c48811-d02c-43fc-ac2c-fada22603543', 2) +,(73, 'OS', 0, 71, 73, 0, 100, '1c444a9a-ea7e-4e4d-9f5f-90d4b00966ff', 2) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(262, 72, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 20, 1) +,(263, 72, 5, '', '', 1.0, 1, 0, 1, 3, 1, 0, 20, 1) +,(264, 72, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 20, 1) +,(265, 72, 6, '', '', 1.0, 1, 1, 3, 3, 1, 0, 20, 1) +,(266, 72, 4, '', '', 1.0, 1, 1, 4, 3, 1, 0, 20, 1) +,(267, 73, 1, '', '', 1.0, 1, 1, 5, 3, 1, 0, 20, 1) +,(268, 73, 5, '', '', 1.0, 1, 0, 6, 3, 1, 0, 20, 1) +,(269, 73, 28, '', '', 1.0, 0, 1, 7, 3, 1, 0, 20, 1) +,(270, 73, 6, '', '', 1.0, 1, 1, 8, 3, 1, 0, 20, 1) +,(271, 73, 4, '', '', 1.0, 1, 1, 9, 3, 1, 0, 20, 1) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; +-- GeTu BLTV +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (26, 'Schaukelringe') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(74, 'GeTu BLTV', 0, null, 74, 0, 100, '829ea6f3-daa1-41f0-8422-8131258d4e20', 1) +,(75, 'K1', 0, 74, 75, 0, 10, '624e3abb-c0c4-415b-a7f1-43e6c12ea5fc', 1) +,(76, 'K2', 0, 74, 76, 0, 12, 'f5839635-7086-4d89-b254-f006bcb5be21', 1) +,(77, 'K3', 0, 74, 77, 0, 14, 'e3e31aa7-cf09-40ec-a7dd-b1d10ffe2aee', 1) +,(78, 'K4', 0, 74, 78, 0, 16, '99860754-8f03-4987-887f-19e4897b9e8a', 1) +,(79, 'K5', 0, 74, 79, 0, 100, '7e6c37ca-7b27-4531-845f-5655ec3fec52', 1) +,(80, 'K6', 0, 74, 80, 0, 100, '66481152-9a5d-456c-ab26-5563ba42934b', 1) +,(81, 'K7', 0, 74, 81, 0, 100, 'a8752867-3890-451f-a4e6-41ac176ece68', 1) +,(82, 'KD', 0, 74, 82, 22, 100, 'd0d0c3db-347f-4a11-8dad-8d17fa237806', 1) +,(83, 'KH', 0, 74, 83, 28, 100, '7b93d519-6003-4038-a1ac-78f19eb915e9', 1) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(272, 75, 6, '', '', 1.0, 1, 1, 0, 3, 0, 0, 10, 1) +,(273, 75, 1, '', '', 1.0, 1, 1, 1, 3, 0, 0, 10, 1) +,(274, 75, 26, '', '', 1.0, 1, 1, 2, 3, 0, 0, 10, 1) +,(275, 75, 4, '', '', 1.0, 1, 1, 3, 3, 0, 0, 10, 1) +,(276, 75, 5, '', '', 1.0, 1, 0, 4, 3, 0, 0, 10, 0) +,(277, 76, 6, '', '', 1.0, 1, 1, 5, 3, 0, 0, 10, 1) +,(278, 76, 1, '', '', 1.0, 1, 1, 6, 3, 0, 0, 10, 1) +,(279, 76, 26, '', '', 1.0, 1, 1, 7, 3, 0, 0, 10, 1) +,(280, 76, 4, '', '', 1.0, 1, 1, 8, 3, 0, 0, 10, 1) +,(281, 76, 5, '', '', 1.0, 1, 0, 9, 3, 0, 0, 10, 0) +,(282, 77, 6, '', '', 1.0, 1, 1, 10, 3, 0, 0, 10, 1) +,(283, 77, 1, '', '', 1.0, 1, 1, 11, 3, 0, 0, 10, 1) +,(284, 77, 26, '', '', 1.0, 1, 1, 12, 3, 0, 0, 10, 1) +,(285, 77, 4, '', '', 1.0, 1, 1, 13, 3, 0, 0, 10, 1) +,(286, 77, 5, '', '', 1.0, 1, 0, 14, 3, 0, 0, 10, 0) +,(287, 78, 6, '', '', 1.0, 1, 1, 15, 3, 0, 0, 10, 1) +,(288, 78, 1, '', '', 1.0, 1, 1, 16, 3, 0, 0, 10, 1) +,(289, 78, 26, '', '', 1.0, 1, 1, 17, 3, 0, 0, 10, 1) +,(290, 78, 4, '', '', 1.0, 1, 1, 18, 3, 0, 0, 10, 1) +,(291, 78, 5, '', '', 1.0, 1, 0, 19, 3, 0, 0, 10, 0) +,(292, 79, 6, '', '', 1.0, 1, 1, 20, 3, 0, 0, 10, 1) +,(293, 79, 1, '', '', 1.0, 1, 1, 21, 3, 0, 0, 10, 1) +,(294, 79, 26, '', '', 1.0, 1, 1, 22, 3, 0, 0, 10, 1) +,(295, 79, 4, '', '', 1.0, 1, 1, 23, 3, 0, 0, 10, 1) +,(296, 79, 5, '', '', 1.0, 1, 0, 24, 3, 0, 0, 10, 0) +,(297, 80, 6, '', '', 1.0, 1, 1, 25, 3, 0, 0, 10, 1) +,(298, 80, 1, '', '', 1.0, 1, 1, 26, 3, 0, 0, 10, 1) +,(299, 80, 26, '', '', 1.0, 1, 1, 27, 3, 0, 0, 10, 1) +,(300, 80, 4, '', '', 1.0, 1, 1, 28, 3, 0, 0, 10, 1) +,(301, 80, 5, '', '', 1.0, 1, 0, 29, 3, 0, 0, 10, 0) +,(302, 81, 6, '', '', 1.0, 1, 1, 30, 3, 0, 0, 10, 1) +,(303, 81, 1, '', '', 1.0, 1, 1, 31, 3, 0, 0, 10, 1) +,(304, 81, 26, '', '', 1.0, 1, 1, 32, 3, 0, 0, 10, 1) +,(305, 81, 4, '', '', 1.0, 1, 1, 33, 3, 0, 0, 10, 1) +,(306, 81, 5, '', '', 1.0, 1, 0, 34, 3, 0, 0, 10, 0) +,(307, 82, 6, '', '', 1.0, 1, 1, 35, 3, 0, 0, 10, 1) +,(308, 82, 1, '', '', 1.0, 1, 1, 36, 3, 0, 0, 10, 1) +,(309, 82, 26, '', '', 1.0, 1, 1, 37, 3, 0, 0, 10, 1) +,(310, 82, 4, '', '', 1.0, 1, 1, 38, 3, 0, 0, 10, 1) +,(311, 82, 5, '', '', 1.0, 1, 0, 39, 3, 0, 0, 10, 0) +,(312, 83, 6, '', '', 1.0, 1, 1, 40, 3, 0, 0, 10, 1) +,(313, 83, 1, '', '', 1.0, 1, 1, 41, 3, 0, 0, 10, 1) +,(314, 83, 26, '', '', 1.0, 1, 1, 42, 3, 0, 0, 10, 1) +,(315, 83, 4, '', '', 1.0, 1, 1, 43, 3, 0, 0, 10, 1) +,(316, 83, 5, '', '', 1.0, 1, 0, 44, 3, 0, 0, 10, 0) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; + diff --git a/src/main/resources/dbscripts/AddWKTestPgms-sqllite.sql b/src/main/resources/dbscripts/AddWKTestPgms-sqllite.sql new file mode 100644 index 000000000..f611c98f1 --- /dev/null +++ b/src/main/resources/dbscripts/AddWKTestPgms-sqllite.sql @@ -0,0 +1,250 @@ +-- set search_path to kutu; +-- Test Programm-Extensions +-- KuTu TG Allgäu Kür & Pflicht +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (2, 'Pferd Pauschen') on conflict (id) do nothing; +insert into disziplin (id, name) values (3, 'Ring') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(44, 'KuTu TG Allgäu Kür & Pflicht', 0, null, 44, 0, 100, 'c6592fdf-1b60-4334-8db0-a678a637e699', 1) +,(45, 'Kür', 1, 44, 45, 0, 100, '0131ab0a-d275-445c-860a-5b4fce152653', 1) +,(46, 'WK I Kür', 1, 45, 46, 0, 100, '9e6045ce-b9f7-4c91-b54a-5ec50d18628b', 1) +,(47, 'WK II LK1', 1, 45, 47, 0, 100, 'cba44d99-0544-4a4b-b9c5-a97a00e2b7a5', 1) +,(48, 'WK III LK1', 1, 45, 48, 16, 17, 'a0209937-dc49-4d56-b8cf-5998cbf96a53', 1) +,(49, 'WK IV LK2', 1, 45, 49, 14, 15, 'f414e11d-9943-44c6-9267-99b4568bebb2', 1) +,(50, 'Pflicht', 1, 44, 50, 0, 100, 'c6f67d97-a913-4a82-a1c4-e1684191e41a', 1) +,(51, 'WK V Jug', 1, 50, 51, 14, 18, '91026459-df00-45ee-a44f-ad2e81a815ec', 1) +,(52, 'WK VI Schüler A', 1, 50, 52, 12, 13, '64f80cf6-2a30-4a77-80d0-5c7bd3ee0737', 1) +,(53, 'WK VII Schüler B', 1, 50, 53, 10, 11, '3799370c-eff9-42cd-9868-16d36ecc1a53', 1) +,(54, 'WK VIII Schüler C', 1, 50, 54, 8, 9, 'bde177ad-90be-489c-9120-fb1974722f00', 1) +,(55, 'WK IX Schüler D', 1, 50, 55, 0, 7, 'f4bc8841-6f2d-47af-b52c-72fc8ab63c0e', 1) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(154, 46, 1, '', '', 1.0, 1, 0, 0, 3, 1, 0, 30, 1) +,(155, 46, 2, '', '', 1.0, 1, 0, 1, 3, 1, 0, 30, 1) +,(156, 46, 3, '', '', 1.0, 1, 0, 2, 3, 1, 0, 30, 1) +,(157, 46, 4, '', '', 1.0, 1, 0, 3, 3, 1, 0, 30, 1) +,(158, 46, 5, '', '', 1.0, 1, 0, 4, 3, 1, 0, 30, 1) +,(159, 46, 6, '', '', 1.0, 1, 0, 5, 3, 1, 0, 30, 1) +,(160, 47, 1, '', '', 1.0, 1, 0, 6, 3, 1, 0, 30, 1) +,(161, 47, 2, '', '', 1.0, 1, 0, 7, 3, 1, 0, 30, 1) +,(162, 47, 3, '', '', 1.0, 1, 0, 8, 3, 1, 0, 30, 1) +,(163, 47, 4, '', '', 1.0, 1, 0, 9, 3, 1, 0, 30, 1) +,(164, 47, 5, '', '', 1.0, 1, 0, 10, 3, 1, 0, 30, 1) +,(165, 47, 6, '', '', 1.0, 1, 0, 11, 3, 1, 0, 30, 1) +,(166, 48, 1, '', '', 1.0, 1, 0, 12, 3, 1, 0, 30, 1) +,(167, 48, 2, '', '', 1.0, 1, 0, 13, 3, 1, 0, 30, 1) +,(168, 48, 3, '', '', 1.0, 1, 0, 14, 3, 1, 0, 30, 1) +,(169, 48, 4, '', '', 1.0, 1, 0, 15, 3, 1, 0, 30, 1) +,(170, 48, 5, '', '', 1.0, 1, 0, 16, 3, 1, 0, 30, 1) +,(171, 48, 6, '', '', 1.0, 1, 0, 17, 3, 1, 0, 30, 1) +,(172, 49, 1, '', '', 1.0, 1, 0, 18, 3, 1, 0, 30, 1) +,(173, 49, 2, '', '', 1.0, 1, 0, 19, 3, 1, 0, 30, 1) +,(174, 49, 3, '', '', 1.0, 1, 0, 20, 3, 1, 0, 30, 1) +,(175, 49, 4, '', '', 1.0, 1, 0, 21, 3, 1, 0, 30, 1) +,(176, 49, 5, '', '', 1.0, 1, 0, 22, 3, 1, 0, 30, 1) +,(177, 49, 6, '', '', 1.0, 1, 0, 23, 3, 1, 0, 30, 1) +,(178, 51, 1, '', '', 1.0, 1, 0, 24, 3, 1, 0, 30, 1) +,(179, 51, 2, '', '', 1.0, 1, 0, 25, 3, 1, 0, 30, 1) +,(180, 51, 3, '', '', 1.0, 1, 0, 26, 3, 1, 0, 30, 1) +,(181, 51, 4, '', '', 1.0, 1, 0, 27, 3, 1, 0, 30, 1) +,(182, 51, 5, '', '', 1.0, 1, 0, 28, 3, 1, 0, 30, 1) +,(183, 51, 6, '', '', 1.0, 1, 0, 29, 3, 1, 0, 30, 1) +,(184, 52, 1, '', '', 1.0, 1, 0, 30, 3, 1, 0, 30, 1) +,(185, 52, 2, '', '', 1.0, 1, 0, 31, 3, 1, 0, 30, 1) +,(186, 52, 3, '', '', 1.0, 1, 0, 32, 3, 1, 0, 30, 1) +,(187, 52, 4, '', '', 1.0, 1, 0, 33, 3, 1, 0, 30, 1) +,(188, 52, 5, '', '', 1.0, 1, 0, 34, 3, 1, 0, 30, 1) +,(189, 52, 6, '', '', 1.0, 1, 0, 35, 3, 1, 0, 30, 1) +,(190, 53, 1, '', '', 1.0, 1, 0, 36, 3, 1, 0, 30, 1) +,(191, 53, 2, '', '', 1.0, 1, 0, 37, 3, 1, 0, 30, 1) +,(192, 53, 3, '', '', 1.0, 1, 0, 38, 3, 1, 0, 30, 1) +,(193, 53, 4, '', '', 1.0, 1, 0, 39, 3, 1, 0, 30, 1) +,(194, 53, 5, '', '', 1.0, 1, 0, 40, 3, 1, 0, 30, 1) +,(195, 53, 6, '', '', 1.0, 1, 0, 41, 3, 1, 0, 30, 1) +,(196, 54, 1, '', '', 1.0, 1, 0, 42, 3, 1, 0, 30, 1) +,(197, 54, 2, '', '', 1.0, 1, 0, 43, 3, 1, 0, 30, 1) +,(198, 54, 3, '', '', 1.0, 1, 0, 44, 3, 1, 0, 30, 1) +,(199, 54, 4, '', '', 1.0, 1, 0, 45, 3, 1, 0, 30, 1) +,(200, 54, 5, '', '', 1.0, 1, 0, 46, 3, 1, 0, 30, 1) +,(201, 54, 6, '', '', 1.0, 1, 0, 47, 3, 1, 0, 30, 1) +,(202, 55, 1, '', '', 1.0, 1, 0, 48, 3, 1, 0, 30, 1) +,(203, 55, 2, '', '', 1.0, 1, 0, 49, 3, 1, 0, 30, 1) +,(204, 55, 3, '', '', 1.0, 1, 0, 50, 3, 1, 0, 30, 1) +,(205, 55, 4, '', '', 1.0, 1, 0, 51, 3, 1, 0, 30, 1) +,(206, 55, 5, '', '', 1.0, 1, 0, 52, 3, 1, 0, 30, 1) +,(207, 55, 6, '', '', 1.0, 1, 0, 53, 3, 1, 0, 30, 1) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; +-- KuTuRi TG Allgäu Kür & Pflicht +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (27, 'Stufenbarren') on conflict (id) do nothing; +insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(56, 'KuTuRi TG Allgäu Kür & Pflicht', 0, null, 56, 0, 100, 'b81b5ed8-8656-4abb-b64d-d9850531b35b', 1) +,(57, 'Kür', 1, 56, 57, 0, 100, '8403a2bf-1bf0-46b0-915b-43adf9dac15e', 1) +,(58, 'WK I Kür', 1, 57, 58, 0, 100, 'fc51cda7-3725-46c6-9828-461ecf2ab819', 1) +,(59, 'WK II LK1', 1, 57, 59, 0, 100, 'f853dffb-fd60-4e66-8f1e-fcb1888a261a', 1) +,(60, 'WK III LK1', 1, 57, 60, 16, 17, '54409c90-c8f6-4032-a55d-64930d918e7b', 1) +,(61, 'WK IV LK2', 1, 57, 61, 14, 15, '7575f0ef-041f-40ee-980b-92586371b965', 1) +,(62, 'Pflicht', 1, 56, 62, 0, 100, '6f1ee180-ca6b-4f66-8986-feace96498bf', 1) +,(63, 'WK V Jug', 1, 62, 63, 14, 18, '40134f8a-7b04-400c-93e4-8a16a4f493c7', 1) +,(64, 'WK VI Schüler A', 1, 62, 64, 12, 13, 'dc063ba7-c7ce-4202-afea-2c4610dea8d7', 1) +,(65, 'WK VII Schüler B', 1, 62, 65, 10, 11, '377dd29e-bcd6-4f97-b710-266ca7c3e482', 1) +,(66, 'WK VIII Schüler C', 1, 62, 66, 8, 9, '624c8e42-b82e-46ef-b2e6-60aae417443f', 1) +,(67, 'WK IX Schüler D', 1, 62, 67, 0, 7, 'c79769b6-9b16-4d3b-b9ff-b5dce68d9b43', 1) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(208, 58, 4, '', '', 1.0, 0, 1, 0, 3, 1, 0, 30, 1) +,(209, 58, 27, '', '', 1.0, 0, 1, 1, 3, 1, 0, 30, 1) +,(210, 58, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 30, 1) +,(211, 58, 1, '', '', 1.0, 0, 1, 3, 3, 1, 0, 30, 1) +,(212, 59, 4, '', '', 1.0, 0, 1, 4, 3, 1, 0, 30, 1) +,(213, 59, 27, '', '', 1.0, 0, 1, 5, 3, 1, 0, 30, 1) +,(214, 59, 28, '', '', 1.0, 0, 1, 6, 3, 1, 0, 30, 1) +,(215, 59, 1, '', '', 1.0, 0, 1, 7, 3, 1, 0, 30, 1) +,(216, 60, 4, '', '', 1.0, 0, 1, 8, 3, 1, 0, 30, 1) +,(217, 60, 27, '', '', 1.0, 0, 1, 9, 3, 1, 0, 30, 1) +,(218, 60, 28, '', '', 1.0, 0, 1, 10, 3, 1, 0, 30, 1) +,(219, 60, 1, '', '', 1.0, 0, 1, 11, 3, 1, 0, 30, 1) +,(220, 61, 4, '', '', 1.0, 0, 1, 12, 3, 1, 0, 30, 1) +,(221, 61, 27, '', '', 1.0, 0, 1, 13, 3, 1, 0, 30, 1) +,(222, 61, 28, '', '', 1.0, 0, 1, 14, 3, 1, 0, 30, 1) +,(223, 61, 1, '', '', 1.0, 0, 1, 15, 3, 1, 0, 30, 1) +,(224, 63, 4, '', '', 1.0, 0, 1, 16, 3, 1, 0, 30, 1) +,(225, 63, 27, '', '', 1.0, 0, 1, 17, 3, 1, 0, 30, 1) +,(226, 63, 28, '', '', 1.0, 0, 1, 18, 3, 1, 0, 30, 1) +,(227, 63, 1, '', '', 1.0, 0, 1, 19, 3, 1, 0, 30, 1) +,(228, 64, 4, '', '', 1.0, 0, 1, 20, 3, 1, 0, 30, 1) +,(229, 64, 27, '', '', 1.0, 0, 1, 21, 3, 1, 0, 30, 1) +,(230, 64, 28, '', '', 1.0, 0, 1, 22, 3, 1, 0, 30, 1) +,(231, 64, 1, '', '', 1.0, 0, 1, 23, 3, 1, 0, 30, 1) +,(232, 65, 4, '', '', 1.0, 0, 1, 24, 3, 1, 0, 30, 1) +,(233, 65, 27, '', '', 1.0, 0, 1, 25, 3, 1, 0, 30, 1) +,(234, 65, 28, '', '', 1.0, 0, 1, 26, 3, 1, 0, 30, 1) +,(235, 65, 1, '', '', 1.0, 0, 1, 27, 3, 1, 0, 30, 1) +,(236, 66, 4, '', '', 1.0, 0, 1, 28, 3, 1, 0, 30, 1) +,(237, 66, 27, '', '', 1.0, 0, 1, 29, 3, 1, 0, 30, 1) +,(238, 66, 28, '', '', 1.0, 0, 1, 30, 3, 1, 0, 30, 1) +,(239, 66, 1, '', '', 1.0, 0, 1, 31, 3, 1, 0, 30, 1) +,(240, 67, 4, '', '', 1.0, 0, 1, 32, 3, 1, 0, 30, 1) +,(241, 67, 27, '', '', 1.0, 0, 1, 33, 3, 1, 0, 30, 1) +,(242, 67, 28, '', '', 1.0, 0, 1, 34, 3, 1, 0, 30, 1) +,(243, 67, 1, '', '', 1.0, 0, 1, 35, 3, 1, 0, 30, 1) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; +-- Turn10-Verein +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; +insert into disziplin (id, name) values (30, 'Minitramp') on conflict (id) do nothing; +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into disziplin (id, name) values (27, 'Stufenbarren') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (2, 'Pferd Pauschen') on conflict (id) do nothing; +insert into disziplin (id, name) values (31, 'Ringe') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(68, 'Turn10-Verein', 0, null, 68, 0, 100, 'eac48376-aeac-4241-8db5-d910bbae82f0', 3) +,(69, 'BS', 0, 68, 69, 0, 100, '197e83c9-7ca7-4bac-96e8-ac8be828f1ab', 3) +,(70, 'OS', 0, 68, 70, 0, 100, 'fbf335c2-89b4-44de-91bf-79f616180fe6', 3) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(244, 69, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 20, 1) +,(245, 69, 5, '', '', 1.0, 1, 0, 1, 3, 1, 0, 20, 1) +,(246, 69, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 20, 1) +,(247, 69, 30, '', '', 1.0, 1, 1, 3, 3, 1, 0, 20, 1) +,(248, 69, 6, '', '', 1.0, 1, 1, 4, 3, 1, 0, 20, 1) +,(249, 69, 27, '', '', 1.0, 0, 1, 5, 3, 1, 0, 20, 1) +,(250, 69, 4, '', '', 1.0, 1, 1, 6, 3, 1, 0, 20, 1) +,(251, 69, 2, '', '', 1.0, 1, 0, 7, 3, 1, 0, 20, 1) +,(252, 69, 31, '', '', 1.0, 1, 0, 8, 3, 1, 0, 20, 1) +,(253, 70, 1, '', '', 1.0, 1, 1, 9, 3, 1, 0, 20, 1) +,(254, 70, 5, '', '', 1.0, 1, 0, 10, 3, 1, 0, 20, 1) +,(255, 70, 28, '', '', 1.0, 0, 1, 11, 3, 1, 0, 20, 1) +,(256, 70, 30, '', '', 1.0, 1, 1, 12, 3, 1, 0, 20, 1) +,(257, 70, 6, '', '', 1.0, 1, 1, 13, 3, 1, 0, 20, 1) +,(258, 70, 27, '', '', 1.0, 0, 1, 14, 3, 1, 0, 20, 1) +,(259, 70, 4, '', '', 1.0, 1, 1, 15, 3, 1, 0, 20, 1) +,(260, 70, 2, '', '', 1.0, 1, 0, 16, 3, 1, 0, 20, 1) +,(261, 70, 31, '', '', 1.0, 1, 0, 17, 3, 1, 0, 20, 1) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; +-- Turn10-Schule +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(71, 'Turn10-Schule', 0, null, 71, 0, 100, 'f027daf4-c4a3-42e5-8338-16c5beafa479', 2) +,(72, 'BS', 0, 71, 72, 0, 100, '43c48811-d02c-43fc-ac2c-fada22603543', 2) +,(73, 'OS', 0, 71, 73, 0, 100, '1c444a9a-ea7e-4e4d-9f5f-90d4b00966ff', 2) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(262, 72, 1, '', '', 1.0, 1, 1, 0, 3, 1, 0, 20, 1) +,(263, 72, 5, '', '', 1.0, 1, 0, 1, 3, 1, 0, 20, 1) +,(264, 72, 28, '', '', 1.0, 0, 1, 2, 3, 1, 0, 20, 1) +,(265, 72, 6, '', '', 1.0, 1, 1, 3, 3, 1, 0, 20, 1) +,(266, 72, 4, '', '', 1.0, 1, 1, 4, 3, 1, 0, 20, 1) +,(267, 73, 1, '', '', 1.0, 1, 1, 5, 3, 1, 0, 20, 1) +,(268, 73, 5, '', '', 1.0, 1, 0, 6, 3, 1, 0, 20, 1) +,(269, 73, 28, '', '', 1.0, 0, 1, 7, 3, 1, 0, 20, 1) +,(270, 73, 6, '', '', 1.0, 1, 1, 8, 3, 1, 0, 20, 1) +,(271, 73, 4, '', '', 1.0, 1, 1, 9, 3, 1, 0, 20, 1) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; +-- GeTu BLTV +insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; +insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; +insert into disziplin (id, name) values (26, 'Schaukelringe') on conflict (id) do nothing; +insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; +insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; +insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values +(74, 'GeTu BLTV', 0, null, 74, 0, 100, '829ea6f3-daa1-41f0-8422-8131258d4e20', 1) +,(75, 'K1', 0, 74, 75, 0, 10, '624e3abb-c0c4-415b-a7f1-43e6c12ea5fc', 1) +,(76, 'K2', 0, 74, 76, 0, 12, 'f5839635-7086-4d89-b254-f006bcb5be21', 1) +,(77, 'K3', 0, 74, 77, 0, 14, 'e3e31aa7-cf09-40ec-a7dd-b1d10ffe2aee', 1) +,(78, 'K4', 0, 74, 78, 0, 16, '99860754-8f03-4987-887f-19e4897b9e8a', 1) +,(79, 'K5', 0, 74, 79, 0, 100, '7e6c37ca-7b27-4531-845f-5655ec3fec52', 1) +,(80, 'K6', 0, 74, 80, 0, 100, '66481152-9a5d-456c-ab26-5563ba42934b', 1) +,(81, 'K7', 0, 74, 81, 0, 100, 'a8752867-3890-451f-a4e6-41ac176ece68', 1) +,(82, 'KD', 0, 74, 82, 22, 100, 'd0d0c3db-347f-4a11-8dad-8d17fa237806', 1) +,(83, 'KH', 0, 74, 83, 28, 100, '7b93d519-6003-4038-a1ac-78f19eb915e9', 1) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; +insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values +(272, 75, 6, '', '', 1.0, 1, 1, 0, 3, 0, 0, 10, 1) +,(273, 75, 1, '', '', 1.0, 1, 1, 1, 3, 0, 0, 10, 1) +,(274, 75, 26, '', '', 1.0, 1, 1, 2, 3, 0, 0, 10, 1) +,(275, 75, 4, '', '', 1.0, 1, 1, 3, 3, 0, 0, 10, 1) +,(276, 75, 5, '', '', 1.0, 1, 0, 4, 3, 0, 0, 10, 0) +,(277, 76, 6, '', '', 1.0, 1, 1, 5, 3, 0, 0, 10, 1) +,(278, 76, 1, '', '', 1.0, 1, 1, 6, 3, 0, 0, 10, 1) +,(279, 76, 26, '', '', 1.0, 1, 1, 7, 3, 0, 0, 10, 1) +,(280, 76, 4, '', '', 1.0, 1, 1, 8, 3, 0, 0, 10, 1) +,(281, 76, 5, '', '', 1.0, 1, 0, 9, 3, 0, 0, 10, 0) +,(282, 77, 6, '', '', 1.0, 1, 1, 10, 3, 0, 0, 10, 1) +,(283, 77, 1, '', '', 1.0, 1, 1, 11, 3, 0, 0, 10, 1) +,(284, 77, 26, '', '', 1.0, 1, 1, 12, 3, 0, 0, 10, 1) +,(285, 77, 4, '', '', 1.0, 1, 1, 13, 3, 0, 0, 10, 1) +,(286, 77, 5, '', '', 1.0, 1, 0, 14, 3, 0, 0, 10, 0) +,(287, 78, 6, '', '', 1.0, 1, 1, 15, 3, 0, 0, 10, 1) +,(288, 78, 1, '', '', 1.0, 1, 1, 16, 3, 0, 0, 10, 1) +,(289, 78, 26, '', '', 1.0, 1, 1, 17, 3, 0, 0, 10, 1) +,(290, 78, 4, '', '', 1.0, 1, 1, 18, 3, 0, 0, 10, 1) +,(291, 78, 5, '', '', 1.0, 1, 0, 19, 3, 0, 0, 10, 0) +,(292, 79, 6, '', '', 1.0, 1, 1, 20, 3, 0, 0, 10, 1) +,(293, 79, 1, '', '', 1.0, 1, 1, 21, 3, 0, 0, 10, 1) +,(294, 79, 26, '', '', 1.0, 1, 1, 22, 3, 0, 0, 10, 1) +,(295, 79, 4, '', '', 1.0, 1, 1, 23, 3, 0, 0, 10, 1) +,(296, 79, 5, '', '', 1.0, 1, 0, 24, 3, 0, 0, 10, 0) +,(297, 80, 6, '', '', 1.0, 1, 1, 25, 3, 0, 0, 10, 1) +,(298, 80, 1, '', '', 1.0, 1, 1, 26, 3, 0, 0, 10, 1) +,(299, 80, 26, '', '', 1.0, 1, 1, 27, 3, 0, 0, 10, 1) +,(300, 80, 4, '', '', 1.0, 1, 1, 28, 3, 0, 0, 10, 1) +,(301, 80, 5, '', '', 1.0, 1, 0, 29, 3, 0, 0, 10, 0) +,(302, 81, 6, '', '', 1.0, 1, 1, 30, 3, 0, 0, 10, 1) +,(303, 81, 1, '', '', 1.0, 1, 1, 31, 3, 0, 0, 10, 1) +,(304, 81, 26, '', '', 1.0, 1, 1, 32, 3, 0, 0, 10, 1) +,(305, 81, 4, '', '', 1.0, 1, 1, 33, 3, 0, 0, 10, 1) +,(306, 81, 5, '', '', 1.0, 1, 0, 34, 3, 0, 0, 10, 0) +,(307, 82, 6, '', '', 1.0, 1, 1, 35, 3, 0, 0, 10, 1) +,(308, 82, 1, '', '', 1.0, 1, 1, 36, 3, 0, 0, 10, 1) +,(309, 82, 26, '', '', 1.0, 1, 1, 37, 3, 0, 0, 10, 1) +,(310, 82, 4, '', '', 1.0, 1, 1, 38, 3, 0, 0, 10, 1) +,(311, 82, 5, '', '', 1.0, 1, 0, 39, 3, 0, 0, 10, 0) +,(312, 83, 6, '', '', 1.0, 1, 1, 40, 3, 0, 0, 10, 1) +,(313, 83, 1, '', '', 1.0, 1, 1, 41, 3, 0, 0, 10, 1) +,(314, 83, 26, '', '', 1.0, 1, 1, 42, 3, 0, 0, 10, 1) +,(315, 83, 4, '', '', 1.0, 1, 1, 43, 3, 0, 0, 10, 1) +,(316, 83, 5, '', '', 1.0, 1, 0, 44, 3, 0, 0, 10, 0) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; + diff --git a/src/main/scala/ch/seidel/kutu/domain/DBService.scala b/src/main/scala/ch/seidel/kutu/domain/DBService.scala index aa95adc3b..32c8777d6 100644 --- a/src/main/scala/ch/seidel/kutu/domain/DBService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/DBService.scala @@ -84,6 +84,7 @@ object DBService { , "AddAnmeldungTables-u2-sqllite.sql" , "AddNotificationMailToWettkampf-sqllite.sql" , "AddWKDisziplinMetafields-sqllite.sql" + , "AddWKTestPgms-sqllite.sql" ) (!dbfile.exists() || dbfile.length() == 0, Config.importDataFrom) match { @@ -172,6 +173,7 @@ object DBService { , "AddAnmeldungTables-u2-pg.sql" , "AddNotificationMailToWettkampf-pg.sql" , "AddWKDisziplinMetafields-pg.sql" + , "AddWKTestPgms-pg.sql" ) installDB(db, sqlScripts) /*Config.importDataFrom match { @@ -330,26 +332,30 @@ object DBService { }.map { filename => logger.info(s"running sql-script: $filename ...") val file = getClass.getResourceAsStream("/dbscripts/" + filename) - val sqlscript = Source.fromInputStream(file, "utf-8").getLines().toList - try { - migrationDone(db, filename, - executeDBScript(sqlscript, db)) - } - catch { - case e: Exception => - logger.error("Error on executing database setup script", e); - val errorfile = new File(dbhomedir + s"/$appVersion-$filename.err") - errorfile.getParentFile.mkdirs() - val fos = Files.newOutputStream(errorfile.toPath, StandardOpenOption.CREATE, StandardOpenOption.APPEND) - try { - fos.write(e.getMessage.getBytes("utf-8")) - fos.write("\n\nStatement:\n".getBytes("utf-8")); - fos.write(sqlscript.mkString("\n").getBytes("utf-8")) - fos.write("\n".getBytes("utf-8")) - } finally { - fos.close - } - throw new DatabaseNotInitializedException() + if (file == null) { + println(filename + " not found") + } else { + val sqlscript = Source.fromInputStream(file, "utf-8").getLines().toList + try { + migrationDone(db, filename, + executeDBScript(sqlscript, db)) + } + catch { + case e: Exception => + logger.error("Error on executing database setup script", e); + val errorfile = new File(dbhomedir + s"/$appVersion-$filename.err") + errorfile.getParentFile.mkdirs() + val fos = Files.newOutputStream(errorfile.toPath, StandardOpenOption.CREATE, StandardOpenOption.APPEND) + try { + fos.write(e.getMessage.getBytes("utf-8")) + fos.write("\n\nStatement:\n".getBytes("utf-8")); + fos.write(sqlscript.mkString("\n").getBytes("utf-8")) + fos.write("\n".getBytes("utf-8")) + } finally { + fos.close + } + throw new DatabaseNotInitializedException() + } } } } diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index 3f112e13e..de3bd963a 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -782,7 +782,7 @@ trait WettkampfService extends DBService } } - def insertWettkampfProgram(rootprogram: String, riegenmode: Int, dnoteUsed: Int, disziplinlist: List[String], programlist: List[String]): List[WettkampfdisziplinView] = { + def insertWettkampfProgram(rootprogram: String, riegenmode: Int, maxScore: Int, dnoteUsed: Int, disziplinlist: List[String], programlist: List[String]): List[WettkampfdisziplinView] = { val programme = Await.result(database.run{(sql""" select * from programm """.as[ProgrammRaw]).withPinnedSession}, Duration.Inf) @@ -828,18 +828,18 @@ trait WettkampfService extends DBService sqlu""" INSERT INTO disziplin (name) VALUES - ($w) + ($name) """ >> sql""" SELECT * from disziplin where name=$name """.as[Disziplin] } - val insertedDiszList = Await.result(database.run{ + val insertedDiszList = (Await.result(database.run{ DBIO.sequence(diszInserts).transactionally }, Duration.Inf).flatten ++ disziplinlist.flatMap{w => val name = nameMatcher.findFirstMatchIn(w).map(md => md.group(1)).mkString disciplines.filter(d => d.name.equalsIgnoreCase(name)) - } + }).sortBy(d => disziplinlist.indexWhere(dl => dl.startsWith(d.name))) val rootPgmInsert = sqlu""" INSERT INTO programm @@ -911,9 +911,9 @@ trait WettkampfService extends DBService case _ => 1 } sqlu""" INSERT INTO wettkampfdisziplin - (id, programm_id, disziplin_id, notenfaktor, ord, masculin, feminim, dnote, startgeraet) + (id, programm_id, disziplin_id, notenfaktor, ord, masculin, feminim, dnote, max, startgeraet) VALUES - ($id, ${p.id}, ${d.id}, 1.000, $i, $m, $f, $dnoteUsed, $start) + ($id, ${p.id}, ${d.id}, 1.000, $i, $m, $f, $dnoteUsed, $maxScore, $start) """ >> sql""" SELECT * from wettkampfdisziplin where id=$id diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index fdf58cce8..95de5834a 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -260,9 +260,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr (cell) => { if (cell.tableRow.value != null && cell.tableRow.value.item.value != null && index < cell.tableRow.value.item.value.size) { val w = cell.tableRow.value.item.value(index) - val editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) && - w.init.wettkampfdisziplin.isDNoteUsed && - w.matchesSexAssignment + val editable = w.matchesSexAssignment cell.editable = editable cell.pseudoClassStateChanged(editableCssClass, cell.isEditable) } @@ -272,7 +270,10 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr styleClass += "table-cell-with-value" prefWidth = if (wertung.init.wettkampfdisziplin.isDNoteUsed) 60 else 0 + editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) && wertung.init.wettkampfdisziplin.isDNoteUsed visible = wertung.init.wettkampfdisziplin.isDNoteUsed + + onEditCommit = (evt: CellEditEvent[IndexedSeq[WertungEditor], Double]) => { if (evt.rowValue != null) { val disciplin = evt.rowValue(index) @@ -305,8 +306,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr (cell) => { if (cell.tableRow.value != null && cell.tableRow.value.item.value != null && index < cell.tableRow.value.item.value.size) { val w = cell.tableRow.value.item.value(index) - val editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) && - w.matchesSexAssignment + val editable = w.matchesSexAssignment cell.editable = editable cell.pseudoClassStateChanged(editableCssClass, cell.isEditable) } @@ -316,7 +316,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr styleClass += "table-cell-with-value" prefWidth = 60 - //editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) + editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) onEditCommit = (evt: CellEditEvent[IndexedSeq[WertungEditor], Double]) => { if (evt.rowValue != null) { val disciplin = evt.rowValue(index) diff --git a/src/test/scala/ch/seidel/kutu/base/TestDBService.scala b/src/test/scala/ch/seidel/kutu/base/TestDBService.scala index e6fa43bd4..38ac1836e 100644 --- a/src/test/scala/ch/seidel/kutu/base/TestDBService.scala +++ b/src/test/scala/ch/seidel/kutu/base/TestDBService.scala @@ -54,6 +54,7 @@ object TestDBService { , "AddAnmeldungTables-u2-sqllite.sql" , "AddNotificationMailToWettkampf-sqllite.sql" , "AddWKDisziplinMetafields-sqllite.sql" + //, "AddWKTestPgms-sqllite.sql" ) installDBFunctions(tempDatabase) diff --git a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala index 3108b95ca..ab1078ab7 100644 --- a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala @@ -66,7 +66,7 @@ class WettkampfSpec extends KuTuBaseSpec { WettkampfdisziplinView(164,Testprogramm2 / LK3 (von=0, bis=100),Disziplin(30,Ringe),,None,StandardWettkampf(1.0),1,1,4,3,1,0,30,1) WettkampfdisziplinView(165,Testprogramm2 / LK3 (von=0, bis=100),Disziplin(5,Barren),,None,StandardWettkampf(1.0),1,1,5,3,1,0,30,1) */ - val tp1 = insertWettkampfProgram("Testprogramm1", 2, 1, + val tp1 = insertWettkampfProgram("Testprogramm1", 2, 10, 1, List("Boden", "Sprung"), List("AK1(von=5 bis=10)", "AK2(von=11 bis=20)", "AK3(von=21 bis=50)") ) @@ -78,7 +78,7 @@ class WettkampfSpec extends KuTuBaseSpec { assert(tp1(2).programm.alterVon == 11) assert(tp1(2).programm.alterBis == 20) - val tp2 = insertWettkampfProgram("Testprogramm2", 1, 0, + val tp2 = insertWettkampfProgram("Testprogramm2", 1, 10, 0, List("Barren", "Ringe"), List("LK1", "LK2", "LK3") ) @@ -90,9 +90,10 @@ class WettkampfSpec extends KuTuBaseSpec { assert(tp2(1).programm.alterVon == 0) assert(tp2(1).programm.alterBis == 100) } - "create KuTu DTL Kür & Pflicht" in { - val tga = insertWettkampfProgram(s"KuTu DTL Kür & Pflicht-Test", 1, 1, - List("Boden(sex=m)", "Pferd(sex=m)", "Ring(sex=m)", "Sprung(sex=m)", "Barren(sex=m)", "Reck(sex=m)"), + + "create KuTu TG Allgäu Kür & Pflicht" in { + val tgam = insertWettkampfProgram(s"KuTu TG Allgäu Kür & Pflicht-Test", 1, 30, 1, + List("Boden(sex=m)", "Pferd Pauschen(sex=m)", "Ring(sex=m)", "Sprung(sex=m)", "Barren(sex=m)", "Reck(sex=m)"), List( "Kür/WK I Kür" , "Kür/WK II LK1" @@ -105,11 +106,11 @@ class WettkampfSpec extends KuTuBaseSpec { , "Pflicht/WK IX Schüler D(von=0 bis=7)" ) ) - printNewWettkampfModeInsertStatements(tga) + printNewWettkampfModeInsertStatements(tgam) } - "create KuTuRi DTL Kür & Pflicht-" in { - val tga = insertWettkampfProgram(s"KuTuRi DTL Kür & Pflicht-Test", 1, 1, - List("Sprung(sex=w)", "Barren(sex=w)", "Balken(sex=w)", "Boden(sex=w)"), + "create KuTuRi TG Allgäu Kür & Pflicht-" in { + val tgaw = insertWettkampfProgram(s"KuTuRi TG Allgäu Kür & Pflicht-Test", 1, 30, 1, + List("Sprung(sex=w)", "Stufenbarren(sex=w)", "Balken(sex=w)", "Boden(sex=w)"), List( "Kür/WK I Kür" , "Kür/WK II LK1" @@ -122,20 +123,20 @@ class WettkampfSpec extends KuTuBaseSpec { , "Pflicht/WK IX Schüler D(von=0 bis=7)" ) ) - printNewWettkampfModeInsertStatements(tga) + printNewWettkampfModeInsertStatements(tgaw) } "create Turn10" in { - val turn10v = insertWettkampfProgram(s"Turn10-Verein-Test", 2, 1, + val turn10v = insertWettkampfProgram(s"Turn10-Verein-Test", 3, 20, 1, // Ti: Boden, Balken, Minitramp, Reck/Stufenbarren, Sprung. // Tu: Boden, Barren, Minitramp, Reck, Sprung, Pferd, Ringe - List("Boden", "Barren(sex=m)", "Balken(sex=w)", "Minitramp", "Reck(sex=m)", "Stufenbarren(sex=w)", "Sprung", "Pferdpauschen(sex=m)", "Ringe(sex=m)"), + List("Boden", "Barren(sex=m)", "Balken(sex=w)", "Minitramp", "Reck", "Stufenbarren(sex=w)", "Sprung", "Pferd Pauschen(sex=m)", "Ringe(sex=m)"), List( "BS" , "OS" ) ) printNewWettkampfModeInsertStatements(turn10v) - val turn10s = insertWettkampfProgram(s"Turn10-Schule-Test", 2, 1, + val turn10s = insertWettkampfProgram(s"Turn10-Schule-Test", 2, 20, 1, // Ti: Boden, Balken, Reck, Sprung. // Tu: Boden, Barren, Reck, Sprung. List("Boden", "Barren(sex=m)", "Balken(sex=w)", "Reck", "Sprung"), @@ -147,8 +148,8 @@ class WettkampfSpec extends KuTuBaseSpec { printNewWettkampfModeInsertStatements(turn10s) } "create GeTu BLTV" in { - val tga = insertWettkampfProgram(s"GeTu BLTV-Test", 1, 0, - List("Reck", "Boden", "Ring", "Sprung", "Barren(sex=m start=0)"), + val btv = insertWettkampfProgram(s"GeTu BLTV-Test", 1, 10,0, + List("Reck", "Boden", "Schaukelringe", "Sprung", "Barren(sex=m start=0)"), List( "K1(bis=10)" , "K2(bis=12)" @@ -161,12 +162,13 @@ class WettkampfSpec extends KuTuBaseSpec { , "KH(von=28)" ) ) - printNewWettkampfModeInsertStatements(tga) + printNewWettkampfModeInsertStatements(btv) } } private def printNewWettkampfModeInsertStatements(tga: List[WettkampfdisziplinView]) = { + println(s"-- ${tga.head.programm.head.name}") val inserts = tga .map(wdp => wdp.disziplin) .distinct @@ -183,9 +185,11 @@ class WettkampfSpec extends KuTuBaseSpec { flatten(wdp.programm) } .distinct.sortBy(_.id) - .map(p => s"(${p.id}, '${p.name}', ${p.aggregate}, ${p.parent.map(_.id.toString).getOrElse("null")}, ${p.ord}, ${p.alterVon}, ${p.alterBis}, '${p.uuid}', ${p.riegenmode})").mkString("", "\n,", ";").split("\n").toList) ::: + .map(p => s"(${p.id}, '${p.name}', ${p.aggregate}, ${p.parent.map(_.id.toString).getOrElse("null")}, ${p.ord}, ${p.alterVon}, ${p.alterBis}, '${p.uuid}', ${p.riegenmode})") + .mkString("", "\n,", " on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode;").split("\n").toList) ::: ("insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values " +: tga - .map(wdp => s"(${wdp.id}, ${wdp.programm.id}, ${wdp.disziplin.id}, '${wdp.kurzbeschreibung}', ${wdp.detailbeschreibung.map(b => s"'$b'").getOrElse("''")}, ${wdp.notenSpez.calcEndnote(0.000d, 1.000d, wdp)}, ${wdp.masculin}, ${wdp.feminim}, ${wdp.ord}, ${wdp.scale}, ${wdp.dnote}, ${wdp.min}, ${wdp.max}, ${wdp.startgeraet})").mkString("", "\n,", ";").split("\n").toList) + .map(wdp => s"(${wdp.id}, ${wdp.programm.id}, ${wdp.disziplin.id}, '${wdp.kurzbeschreibung}', ${wdp.detailbeschreibung.map(b => s"'$b'").getOrElse("''")}, ${wdp.notenSpez.calcEndnote(0.000d, 1.000d, wdp)}, ${wdp.masculin}, ${wdp.feminim}, ${wdp.ord}, ${wdp.scale}, ${wdp.dnote}, ${wdp.min}, ${wdp.max}, ${wdp.startgeraet})") + .mkString("", "\n,", " on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet;").split("\n").toList) println(inserts.mkString("\n")) } From dcc64fae5b2f8b79192cb9ea45576f72e9a759fd Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Mon, 3 Apr 2023 20:50:46 +0000 Subject: [PATCH 24/99] update with generated Client from Github Actions CI for build with [skip ci] --- .../app/{170.888b46156ab59294.js => 170.fc6a678bdb89d268.js} | 2 +- src/main/resources/app/5231.3ae1e1b25fad7395.js | 1 - src/main/resources/app/5231.b4e1e45bfcb05fdb.js | 1 + src/main/resources/app/index.html | 2 +- ...{runtime.22601c53cd249e98.js => runtime.9d2b60a5286e0d40.js} | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) rename src/main/resources/app/{170.888b46156ab59294.js => 170.fc6a678bdb89d268.js} (71%) delete mode 100644 src/main/resources/app/5231.3ae1e1b25fad7395.js create mode 100644 src/main/resources/app/5231.b4e1e45bfcb05fdb.js rename src/main/resources/app/{runtime.22601c53cd249e98.js => runtime.9d2b60a5286e0d40.js} (54%) diff --git a/src/main/resources/app/170.888b46156ab59294.js b/src/main/resources/app/170.fc6a678bdb89d268.js similarity index 71% rename from src/main/resources/app/170.888b46156ab59294.js rename to src/main/resources/app/170.fc6a678bdb89d268.js index 729efd8ca..65580e07d 100644 --- a/src/main/resources/app/170.888b46156ab59294.js +++ b/src/main/resources/app/170.fc6a678bdb89d268.js @@ -1 +1 @@ -"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[170],{170:($,u,l)=>{l.r(u),l.d(u,{RegAthletlistPageModule:()=>N});var g=l(6895),d=l(433),m=l(5472),o=l(502),_=l(1135),A=l(7579),v=l(9646),p=l(5698),f=l(9300),b=l(4004),x=l(8372),R=l(1884),I=l(8505),C=l(3900),Z=l(3099),t=l(8274),T=l(600);let k=(()=>{class n{constructor(){this.selected=new t.vpe}statusBadgeColor(){return"in sync"===this.status?"success":"warning"}statusComment(){return"in sync"===this.status?"":this.status.substring(this.status.indexOf("(")+1,this.status.length-1)}statusBadgeText(){return"in sync"===this.status?"\u2714 "+this.status:"\u2757 "+this.status.substring(0,this.status.indexOf("(")-1)}ngOnInit(){}getProgrammText(e){const i=this.programmlist.find(r=>r.id===e);return i?i.name:"..."}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=t.Xpm({type:n,selectors:[["app-reg-athlet-item"]],inputs:{athletregistration:"athletregistration",status:"status",programmlist:"programmlist"},outputs:{selected:"selected"},decls:14,vars:9,consts:[[3,"click"],["slot","start"],["src","assets/imgs/athlete.png"],["slot","end",3,"color"]],template:function(e,i){1&e&&(t.TgZ(0,"ion-item",0),t.NdJ("click",function(){return i.selected?i.selected.emit(i.athletregistration):{}}),t.TgZ(1,"ion-avatar",1),t._UZ(2,"img",2),t.qZA(),t.TgZ(3,"ion-label"),t._uU(4),t._UZ(5,"br"),t.TgZ(6,"small"),t._uU(7),t.ALo(8,"date"),t.qZA()(),t.TgZ(9,"ion-badge",3),t._uU(10),t._UZ(11,"br"),t.TgZ(12,"small"),t._uU(13),t.qZA()()()),2&e&&(t.xp6(4),t.lnq("",i.athletregistration.name,", ",i.athletregistration.vorname," (",i.athletregistration.geschlecht,")"),t.xp6(3),t.hij("(",t.lcZ(8,7,i.athletregistration.gebdat),")"),t.xp6(2),t.Q6J("color",i.statusBadgeColor()),t.xp6(1),t.Oqu(i.statusBadgeText()),t.xp6(3),t.Oqu(i.statusComment()))},dependencies:[o.BJ,o.yp,o.Ie,o.Q$,g.uU]}),n})();function y(n,a){if(1&n&&(t.TgZ(0,"ion-select-option",10),t._uU(1),t.ALo(2,"date"),t.qZA()),2&n){const e=a.$implicit;t.Q6J("value",e.uuid),t.xp6(1),t.hij(" ",e.titel+" "+t.xi3(2,2,e.datum,"dd-MM-yy"),"")}}function P(n,a){if(1&n){const e=t.EpF();t.TgZ(0,"ion-select",8),t.NdJ("ngModelChange",function(r){t.CHM(e);const s=t.oxw(2);return t.KtG(s.competition=r)}),t.YNc(1,y,3,5,"ion-select-option",9),t.qZA()}if(2&n){const e=t.oxw(2);t.Q6J("ngModel",e.competition),t.xp6(1),t.Q6J("ngForOf",e.getCompetitions())}}function S(n,a){if(1&n&&(t.TgZ(0,"ion-col")(1,"ion-item")(2,"ion-label"),t._uU(3,"Wettkampf"),t.qZA(),t.YNc(4,P,2,2,"ion-select",7),t.qZA()()),2&n){const e=t.oxw();t.xp6(4),t.Q6J("ngIf",e.getCompetitions().length>0)}}function M(n,a){if(1&n&&(t.TgZ(0,"ion-note",11),t._uU(1),t.qZA()),2&n){const e=t.oxw();t.xp6(1),t.hij(" ",e.competitionName()," ")}}function w(n,a){1&n&&(t.TgZ(0,"ion-item")(1,"ion-label"),t._uU(2,"loading ..."),t.qZA(),t._UZ(3,"ion-spinner"),t.qZA())}function U(n,a){if(1&n){const e=t.EpF();t.TgZ(0,"ion-item-option",19),t.NdJ("click",function(){t.CHM(e);const r=t.oxw().$implicit,s=t.MAs(1),c=t.oxw(3);return t.KtG(c.delete(r,s))}),t._UZ(1,"ion-icon",17),t._uU(2," L\xf6schen "),t.qZA()}}function L(n,a){if(1&n){const e=t.EpF();t.TgZ(0,"ion-item-sliding",null,13)(2,"app-reg-athlet-item",14),t.NdJ("click",function(){const s=t.CHM(e).$implicit,c=t.MAs(1),h=t.oxw(3);return t.KtG(h.itemTapped(s,c))}),t.qZA(),t.TgZ(3,"ion-item-options",15)(4,"ion-item-option",16),t.NdJ("click",function(){const s=t.CHM(e).$implicit,c=t.MAs(1),h=t.oxw(3);return t.KtG(h.edit(s,c))}),t._UZ(5,"ion-icon",17),t._uU(6),t.qZA(),t.YNc(7,U,3,0,"ion-item-option",18),t.qZA()()}if(2&n){const e=a.$implicit,i=t.oxw(3);t.xp6(2),t.Q6J("athletregistration",e)("status",i.getStatus(e))("programmlist",i.wkPgms),t.xp6(4),t.hij(" ",i.isLoggedInAsClub()?"Bearbeiten":i.isLoggedIn()?"Best\xe4tigen":"Anzeigen"," "),t.xp6(1),t.Q6J("ngIf",i.isLoggedInAsClub())}}function Q(n,a){if(1&n&&(t.TgZ(0,"div")(1,"ion-item-divider"),t._uU(2),t.qZA(),t.YNc(3,L,8,5,"ion-item-sliding",12),t.qZA()),2&n){const e=a.$implicit,i=t.oxw(2);t.xp6(2),t.Oqu(e.name),t.xp6(1),t.Q6J("ngForOf",i.filteredStartList(e.id))}}function J(n,a){if(1&n&&(t.TgZ(0,"ion-content")(1,"ion-list"),t.YNc(2,w,4,0,"ion-item",3),t.ALo(3,"async"),t.YNc(4,Q,4,2,"div",12),t.qZA()()),2&n){const e=t.oxw();t.xp6(2),t.Q6J("ngIf",t.lcZ(3,2,e.busy)||!(e.competition&&e.currentRegistration&&e.filteredPrograms)),t.xp6(2),t.Q6J("ngForOf",e.filteredPrograms)}}function O(n,a){if(1&n){const e=t.EpF();t.TgZ(0,"ion-button",20),t.NdJ("click",function(){t.CHM(e);const r=t.oxw();return t.KtG(r.createRegistration())}),t._UZ(1,"ion-icon",21),t._uU(2," Neue Anmeldung... "),t.qZA()}}const F=[{path:"",component:(()=>{class n{constructor(e,i,r,s){this.navCtrl=e,this.route=i,this.backendService=r,this.alertCtrl=s,this.busy=new _.X(!1),this.tMyQueryStream=new A.x,this.sFilterTask=void 0,this.sSyncActions=[],this.backendService.competitions||this.backendService.getCompetitions()}ngOnInit(){this.busy.next(!0);const e=this.route.snapshot.paramMap.get("wkId");this.currentRegId=parseInt(this.route.snapshot.paramMap.get("regId")),e?this.competition=e:this.backendService.competition&&(this.competition=this.backendService.competition)}ionViewWillEnter(){this.refreshList()}getSyncActions(){this.backendService.loadRegistrationSyncActions().pipe((0,p.q)(1)).subscribe(e=>{this.sSyncActions=e})}getStatus(e){if(this.sSyncActions){const i=this.sSyncActions.find(r=>r.verein.id===e.vereinregistrationId&&r.caption.indexOf(e.name)>-1&&r.caption.indexOf(e.vorname)>-1);return i?"pending ("+i.caption.substring(0,(i.caption+":").indexOf(":"))+")":"in sync"}return"n/a"}refreshList(){this.busy.next(!0),this.currentRegistration=void 0,this.getSyncActions(),this.backendService.getClubRegistrations(this.competition).pipe((0,f.h)(e=>!!e.find(i=>i.id===this.currentRegId)),(0,p.q)(1)).subscribe(e=>{this.currentRegistration=e.find(i=>i.id===this.currentRegId),console.log("ask athletes-list for registration"),this.backendService.loadAthletRegistrations(this.competition,this.currentRegId).subscribe(i=>{this.busy.next(!1),this.athletregistrations=i,this.tMyQueryStream.pipe((0,f.h)(s=>!!s&&!!s.target),(0,b.U)(s=>s.target.value||"*"),(0,x.b)(300),(0,R.x)(),(0,I.b)(s=>this.busy.next(!0)),(0,C.w)(this.runQuery(i)),(0,Z.B)()).subscribe(s=>{this.sFilteredRegistrationList=s,this.busy.next(!1)})})})}set competition(e){(!this.currentRegistration||e!==this.backendService.competition)&&this.backendService.loadProgramsForCompetition(this.competition).subscribe(i=>{this.wkPgms=i})}get competition(){return this.backendService.competition||""}getCompetitions(){return this.backendService.competitions||[]}competitionName(){return this.backendService.competitionName}runQuery(e){return i=>{const r=i.trim(),s=new Map;return e&&e.forEach(c=>{if(this.filter(r)(c)){const B=s.get(c.programId)||[];s.set(c.programId,[...B,c].sort((Y,q)=>Y.name.localeCompare(q.name)))}}),(0,v.of)(s)}}set athletregistrations(e){this.sAthletRegistrationList=e,this.runQuery(e)("*").subscribe(i=>this.sFilteredRegistrationList=i),this.reloadList(this.sMyQuery||"*")}get athletregistrations(){return this.sAthletRegistrationList}get filteredPrograms(){return[...this.wkPgms.filter(e=>this.sFilteredRegistrationList?.has(e.id))]}mapProgram(e){return this.wkPgms.filter(i=>i.id==e)[0]}filteredStartList(e){return this.sFilteredRegistrationList?.get(e)||this.sAthletRegistrationList||[]}reloadList(e){this.tMyQueryStream.next(e)}itemTapped(e,i){i.getOpenAmount().then(r=>{r>0?i.close():i.open("end")})}isLoggedInAsClub(){return this.backendService.loggedIn&&this.backendService.authenticatedClubId===this.currentRegId+""}isLoggedInAsAdmin(){return this.backendService.loggedIn&&!!this.backendService.authenticatedClubId}isLoggedIn(){return this.backendService.loggedIn}filter(e){const i=e.toUpperCase().split(" ");return r=>"*"===e.trim()||i.filter(s=>{if(r.name.toUpperCase().indexOf(s)>-1||r.vorname.toUpperCase().indexOf(s)>-1||this.wkPgms.find(c=>r.programId===c.id&&c.name===s)||r.gebdat.indexOf(s)>-1||3==s.length&&r.geschlecht.indexOf(s.substring(1,2))>-1)return!0}).length===i.length}createRegistration(){this.navCtrl.navigateForward(`reg-athletlist/${this.backendService.competition}/${this.currentRegId}/0`)}edit(e,i){this.navCtrl.navigateForward(`reg-athletlist/${this.backendService.competition}/${this.currentRegId}/${e.id}`),i.close()}needsPGMChoice(){const e=[...this.wkPgms][0];return!(1==e.aggregate&&2==e.riegenmode)}similarRegistration(e,i){return e.athletId===i.athletId||e.name===i.name&&e.vorname===i.vorname&&e.gebdat===i.gebdat&&e.geschlecht===i.geschlecht}delete(e,i){i.close(),this.alertCtrl.create({header:"Achtung",subHeader:"L\xf6schen der Athlet-Anmeldung am Wettkampf",message:"Hiermit wird die Anmeldung von "+e.name+", "+e.vorname+" am Wettkampf gel\xf6scht.",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"OKAY",handler:()=>{this.needsPGMChoice()||this.athletregistrations.filter(s=>this.similarRegistration(s,e)).filter(s=>s.id!==e.id).forEach(s=>{this.backendService.deleteAthletRegistration(this.backendService.competition,this.currentRegId,s)}),this.backendService.deleteAthletRegistration(this.backendService.competition,this.currentRegId,e).subscribe(()=>{this.refreshList()})}}]}).then(s=>s.present())}}return n.\u0275fac=function(e){return new(e||n)(t.Y36(o.SH),t.Y36(m.gz),t.Y36(T.v),t.Y36(o.Br))},n.\u0275cmp=t.Xpm({type:n,selectors:[["app-reg-athletlist"]],decls:18,vars:5,consts:[["slot","start"],["defaultHref","/"],["no-padding",""],[4,"ngIf"],["slot","end",4,"ngIf"],["placeholder","Search","showCancelButton","never",3,"ngModel","ngModelChange","ionInput","ionCancel"],["size","large","expand","block","color","success",3,"click",4,"ngIf"],["placeholder","Bitte ausw\xe4hlen","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange",4,"ngIf"],["placeholder","Bitte ausw\xe4hlen","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["slot","end"],[4,"ngFor","ngForOf"],["slidingAthletRegistrationItem",""],[3,"athletregistration","status","programmlist","click"],["side","end"],["color","primary",3,"click"],["name","arrow-forward-circle-outline","ios","md-arrow-forward-circle-outline"],["color","danger",3,"click",4,"ngIf"],["color","danger",3,"click"],["size","large","expand","block","color","success",3,"click"],["slot","start","name","add"]],template:function(e,i){1&e&&(t.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),t._UZ(3,"ion-back-button",1),t.qZA(),t.TgZ(4,"ion-title")(5,"ion-grid",2)(6,"ion-row")(7,"ion-col")(8,"ion-label"),t._uU(9,"Angemeldete Athleten/Athletinnen"),t.qZA()(),t.YNc(10,S,5,1,"ion-col",3),t.qZA()()(),t.YNc(11,M,2,1,"ion-note",4),t.qZA(),t.TgZ(12,"ion-searchbar",5),t.NdJ("ngModelChange",function(s){return i.sMyQuery=s})("ionInput",function(s){return i.reloadList(s)})("ionCancel",function(s){return i.reloadList(s)}),t.qZA()(),t.YNc(13,J,5,4,"ion-content",3),t.TgZ(14,"ion-footer")(15,"ion-toolbar")(16,"ion-list"),t.YNc(17,O,3,0,"ion-button",6),t.qZA()()()),2&e&&(t.xp6(10),t.Q6J("ngIf",!i.competition),t.xp6(1),t.Q6J("ngIf",i.competition),t.xp6(1),t.Q6J("ngModel",i.sMyQuery),t.xp6(1),t.Q6J("ngIf",i.wkPgms&&i.wkPgms.length>0),t.xp6(4),t.Q6J("ngIf",i.isLoggedInAsClub()))},dependencies:[g.sg,g.O5,d.JJ,d.On,o.oU,o.YG,o.Sm,o.wI,o.W2,o.fr,o.jY,o.Gu,o.gu,o.Ie,o.rH,o.u8,o.IK,o.td,o.Q$,o.q_,o.uN,o.Nd,o.VI,o.t9,o.n0,o.PQ,o.wd,o.sr,o.QI,o.j9,o.cs,k,g.Ov,g.uU]}),n})()}];let N=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=t.oAB({type:n}),n.\u0275inj=t.cJS({imports:[g.ez,d.u5,o.Pc,m.Bz.forChild(F)]}),n})()}}]); \ No newline at end of file +"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[170],{170:($,u,l)=>{l.r(u),l.d(u,{RegAthletlistPageModule:()=>N});var g=l(6895),d=l(433),m=l(5472),o=l(502),_=l(1135),A=l(7579),v=l(9646),p=l(5698),f=l(9300),b=l(4004),x=l(8372),R=l(1884),I=l(8505),C=l(3900),Z=l(3099),t=l(8274),T=l(600);let k=(()=>{class n{constructor(){this.selected=new t.vpe}statusBadgeColor(){return"in sync"===this.status?"success":"warning"}statusComment(){return"in sync"===this.status?"":this.status.substring(this.status.indexOf("(")+1,this.status.length-1)}statusBadgeText(){return"in sync"===this.status?"\u2714 "+this.status:"\u2757 "+this.status.substring(0,this.status.indexOf("(")-1)}ngOnInit(){}getProgrammText(e){const i=this.programmlist.find(r=>r.id===e);return i?i.name:"..."}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=t.Xpm({type:n,selectors:[["app-reg-athlet-item"]],inputs:{athletregistration:"athletregistration",status:"status",programmlist:"programmlist"},outputs:{selected:"selected"},decls:14,vars:9,consts:[[3,"click"],["slot","start"],["src","assets/imgs/athlete.png"],["slot","end",3,"color"]],template:function(e,i){1&e&&(t.TgZ(0,"ion-item",0),t.NdJ("click",function(){return i.selected?i.selected.emit(i.athletregistration):{}}),t.TgZ(1,"ion-avatar",1),t._UZ(2,"img",2),t.qZA(),t.TgZ(3,"ion-label"),t._uU(4),t._UZ(5,"br"),t.TgZ(6,"small"),t._uU(7),t.ALo(8,"date"),t.qZA()(),t.TgZ(9,"ion-badge",3),t._uU(10),t._UZ(11,"br"),t.TgZ(12,"small"),t._uU(13),t.qZA()()()),2&e&&(t.xp6(4),t.lnq("",i.athletregistration.name,", ",i.athletregistration.vorname," (",i.athletregistration.geschlecht,")"),t.xp6(3),t.hij("(",t.lcZ(8,7,i.athletregistration.gebdat),")"),t.xp6(2),t.Q6J("color",i.statusBadgeColor()),t.xp6(1),t.Oqu(i.statusBadgeText()),t.xp6(3),t.Oqu(i.statusComment()))},dependencies:[o.BJ,o.yp,o.Ie,o.Q$,g.uU]}),n})();function y(n,a){if(1&n&&(t.TgZ(0,"ion-select-option",10),t._uU(1),t.ALo(2,"date"),t.qZA()),2&n){const e=a.$implicit;t.Q6J("value",e.uuid),t.xp6(1),t.hij(" ",e.titel+" "+t.xi3(2,2,e.datum,"dd-MM-yy"),"")}}function P(n,a){if(1&n){const e=t.EpF();t.TgZ(0,"ion-select",8),t.NdJ("ngModelChange",function(r){t.CHM(e);const s=t.oxw(2);return t.KtG(s.competition=r)}),t.YNc(1,y,3,5,"ion-select-option",9),t.qZA()}if(2&n){const e=t.oxw(2);t.Q6J("ngModel",e.competition),t.xp6(1),t.Q6J("ngForOf",e.getCompetitions())}}function S(n,a){if(1&n&&(t.TgZ(0,"ion-col")(1,"ion-item")(2,"ion-label"),t._uU(3,"Wettkampf"),t.qZA(),t.YNc(4,P,2,2,"ion-select",7),t.qZA()()),2&n){const e=t.oxw();t.xp6(4),t.Q6J("ngIf",e.getCompetitions().length>0)}}function M(n,a){if(1&n&&(t.TgZ(0,"ion-note",11),t._uU(1),t.qZA()),2&n){const e=t.oxw();t.xp6(1),t.hij(" ",e.competitionName()," ")}}function w(n,a){1&n&&(t.TgZ(0,"ion-item")(1,"ion-label"),t._uU(2,"loading ..."),t.qZA(),t._UZ(3,"ion-spinner"),t.qZA())}function U(n,a){if(1&n){const e=t.EpF();t.TgZ(0,"ion-item-option",19),t.NdJ("click",function(){t.CHM(e);const r=t.oxw().$implicit,s=t.MAs(1),c=t.oxw(3);return t.KtG(c.delete(r,s))}),t._UZ(1,"ion-icon",17),t._uU(2," L\xf6schen "),t.qZA()}}function L(n,a){if(1&n){const e=t.EpF();t.TgZ(0,"ion-item-sliding",null,13)(2,"app-reg-athlet-item",14),t.NdJ("click",function(){const s=t.CHM(e).$implicit,c=t.MAs(1),h=t.oxw(3);return t.KtG(h.itemTapped(s,c))}),t.qZA(),t.TgZ(3,"ion-item-options",15)(4,"ion-item-option",16),t.NdJ("click",function(){const s=t.CHM(e).$implicit,c=t.MAs(1),h=t.oxw(3);return t.KtG(h.edit(s,c))}),t._UZ(5,"ion-icon",17),t._uU(6),t.qZA(),t.YNc(7,U,3,0,"ion-item-option",18),t.qZA()()}if(2&n){const e=a.$implicit,i=t.oxw(3);t.xp6(2),t.Q6J("athletregistration",e)("status",i.getStatus(e))("programmlist",i.wkPgms),t.xp6(4),t.hij(" ",i.isLoggedInAsClub()?"Bearbeiten":i.isLoggedIn()?"Best\xe4tigen":"Anzeigen"," "),t.xp6(1),t.Q6J("ngIf",i.isLoggedInAsClub())}}function Q(n,a){if(1&n&&(t.TgZ(0,"div")(1,"ion-item-divider"),t._uU(2),t.qZA(),t.YNc(3,L,8,5,"ion-item-sliding",12),t.qZA()),2&n){const e=a.$implicit,i=t.oxw(2);t.xp6(2),t.Oqu(e.name),t.xp6(1),t.Q6J("ngForOf",i.filteredStartList(e.id))}}function J(n,a){if(1&n&&(t.TgZ(0,"ion-content")(1,"ion-list"),t.YNc(2,w,4,0,"ion-item",3),t.ALo(3,"async"),t.YNc(4,Q,4,2,"div",12),t.qZA()()),2&n){const e=t.oxw();t.xp6(2),t.Q6J("ngIf",t.lcZ(3,2,e.busy)||!(e.competition&&e.currentRegistration&&e.filteredPrograms)),t.xp6(2),t.Q6J("ngForOf",e.filteredPrograms)}}function O(n,a){if(1&n){const e=t.EpF();t.TgZ(0,"ion-button",20),t.NdJ("click",function(){t.CHM(e);const r=t.oxw();return t.KtG(r.createRegistration())}),t._UZ(1,"ion-icon",21),t._uU(2," Neue Anmeldung... "),t.qZA()}}const F=[{path:"",component:(()=>{class n{constructor(e,i,r,s){this.navCtrl=e,this.route=i,this.backendService=r,this.alertCtrl=s,this.busy=new _.X(!1),this.tMyQueryStream=new A.x,this.sFilterTask=void 0,this.sSyncActions=[],this.backendService.competitions||this.backendService.getCompetitions()}ngOnInit(){this.busy.next(!0);const e=this.route.snapshot.paramMap.get("wkId");this.currentRegId=parseInt(this.route.snapshot.paramMap.get("regId")),e?this.competition=e:this.backendService.competition&&(this.competition=this.backendService.competition)}ionViewWillEnter(){this.refreshList()}getSyncActions(){this.backendService.loadRegistrationSyncActions().pipe((0,p.q)(1)).subscribe(e=>{this.sSyncActions=e})}getStatus(e){if(this.sSyncActions){const i=this.sSyncActions.find(r=>r.verein.id===e.vereinregistrationId&&r.caption.indexOf(e.name)>-1&&r.caption.indexOf(e.vorname)>-1);return i?"pending ("+i.caption.substring(0,(i.caption+":").indexOf(":"))+")":"in sync"}return"n/a"}refreshList(){this.busy.next(!0),this.currentRegistration=void 0,this.getSyncActions(),this.backendService.getClubRegistrations(this.competition).pipe((0,f.h)(e=>!!e.find(i=>i.id===this.currentRegId)),(0,p.q)(1)).subscribe(e=>{this.currentRegistration=e.find(i=>i.id===this.currentRegId),console.log("ask athletes-list for registration"),this.backendService.loadAthletRegistrations(this.competition,this.currentRegId).subscribe(i=>{this.busy.next(!1),this.athletregistrations=i,this.tMyQueryStream.pipe((0,f.h)(s=>!!s&&!!s.target),(0,b.U)(s=>s.target.value||"*"),(0,x.b)(300),(0,R.x)(),(0,I.b)(s=>this.busy.next(!0)),(0,C.w)(this.runQuery(i)),(0,Z.B)()).subscribe(s=>{this.sFilteredRegistrationList=s,this.busy.next(!1)})})})}set competition(e){(!this.currentRegistration||e!==this.backendService.competition)&&this.backendService.loadProgramsForCompetition(this.competition).subscribe(i=>{this.wkPgms=i})}get competition(){return this.backendService.competition||""}getCompetitions(){return this.backendService.competitions||[]}competitionName(){return this.backendService.competitionName}runQuery(e){return i=>{const r=i.trim(),s=new Map;return e&&e.forEach(c=>{if(this.filter(r)(c)){const B=s.get(c.programId)||[];s.set(c.programId,[...B,c].sort((Y,q)=>Y.name.localeCompare(q.name)))}}),(0,v.of)(s)}}set athletregistrations(e){this.sAthletRegistrationList=e,this.runQuery(e)("*").subscribe(i=>this.sFilteredRegistrationList=i),this.reloadList(this.sMyQuery||"*")}get athletregistrations(){return this.sAthletRegistrationList}get filteredPrograms(){return[...this.wkPgms.filter(e=>this.sFilteredRegistrationList?.has(e.id))]}mapProgram(e){return this.wkPgms.filter(i=>i.id==e)[0]}filteredStartList(e){return this.sFilteredRegistrationList?.get(e)||this.sAthletRegistrationList||[]}reloadList(e){this.tMyQueryStream.next(e)}itemTapped(e,i){i.getOpenAmount().then(r=>{r>0?i.close():i.open("end")})}isLoggedInAsClub(){return this.backendService.loggedIn&&this.backendService.authenticatedClubId===this.currentRegId+""}isLoggedInAsAdmin(){return this.backendService.loggedIn&&!!this.backendService.authenticatedClubId}isLoggedIn(){return this.backendService.loggedIn}filter(e){const i=e.toUpperCase().split(" ");return r=>"*"===e.trim()||i.filter(s=>{if(r.name.toUpperCase().indexOf(s)>-1||r.vorname.toUpperCase().indexOf(s)>-1||this.wkPgms.find(c=>r.programId===c.id&&c.name===s)||r.gebdat.indexOf(s)>-1||3==s.length&&r.geschlecht.indexOf(s.substring(1,2))>-1)return!0}).length===i.length}createRegistration(){this.navCtrl.navigateForward(`reg-athletlist/${this.backendService.competition}/${this.currentRegId}/0`)}edit(e,i){this.navCtrl.navigateForward(`reg-athletlist/${this.backendService.competition}/${this.currentRegId}/${e.id}`),i.close()}needsPGMChoice(){const e=[...this.wkPgms][0];return!(1==e.aggregate&&e.riegenmode>1)}similarRegistration(e,i){return e.athletId===i.athletId||e.name===i.name&&e.vorname===i.vorname&&e.gebdat===i.gebdat&&e.geschlecht===i.geschlecht}delete(e,i){i.close(),this.alertCtrl.create({header:"Achtung",subHeader:"L\xf6schen der Athlet-Anmeldung am Wettkampf",message:"Hiermit wird die Anmeldung von "+e.name+", "+e.vorname+" am Wettkampf gel\xf6scht.",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"OKAY",handler:()=>{this.needsPGMChoice()||this.athletregistrations.filter(s=>this.similarRegistration(s,e)).filter(s=>s.id!==e.id).forEach(s=>{this.backendService.deleteAthletRegistration(this.backendService.competition,this.currentRegId,s)}),this.backendService.deleteAthletRegistration(this.backendService.competition,this.currentRegId,e).subscribe(()=>{this.refreshList()})}}]}).then(s=>s.present())}}return n.\u0275fac=function(e){return new(e||n)(t.Y36(o.SH),t.Y36(m.gz),t.Y36(T.v),t.Y36(o.Br))},n.\u0275cmp=t.Xpm({type:n,selectors:[["app-reg-athletlist"]],decls:18,vars:5,consts:[["slot","start"],["defaultHref","/"],["no-padding",""],[4,"ngIf"],["slot","end",4,"ngIf"],["placeholder","Search","showCancelButton","never",3,"ngModel","ngModelChange","ionInput","ionCancel"],["size","large","expand","block","color","success",3,"click",4,"ngIf"],["placeholder","Bitte ausw\xe4hlen","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange",4,"ngIf"],["placeholder","Bitte ausw\xe4hlen","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["slot","end"],[4,"ngFor","ngForOf"],["slidingAthletRegistrationItem",""],[3,"athletregistration","status","programmlist","click"],["side","end"],["color","primary",3,"click"],["name","arrow-forward-circle-outline","ios","md-arrow-forward-circle-outline"],["color","danger",3,"click",4,"ngIf"],["color","danger",3,"click"],["size","large","expand","block","color","success",3,"click"],["slot","start","name","add"]],template:function(e,i){1&e&&(t.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),t._UZ(3,"ion-back-button",1),t.qZA(),t.TgZ(4,"ion-title")(5,"ion-grid",2)(6,"ion-row")(7,"ion-col")(8,"ion-label"),t._uU(9,"Angemeldete Athleten/Athletinnen"),t.qZA()(),t.YNc(10,S,5,1,"ion-col",3),t.qZA()()(),t.YNc(11,M,2,1,"ion-note",4),t.qZA(),t.TgZ(12,"ion-searchbar",5),t.NdJ("ngModelChange",function(s){return i.sMyQuery=s})("ionInput",function(s){return i.reloadList(s)})("ionCancel",function(s){return i.reloadList(s)}),t.qZA()(),t.YNc(13,J,5,4,"ion-content",3),t.TgZ(14,"ion-footer")(15,"ion-toolbar")(16,"ion-list"),t.YNc(17,O,3,0,"ion-button",6),t.qZA()()()),2&e&&(t.xp6(10),t.Q6J("ngIf",!i.competition),t.xp6(1),t.Q6J("ngIf",i.competition),t.xp6(1),t.Q6J("ngModel",i.sMyQuery),t.xp6(1),t.Q6J("ngIf",i.wkPgms&&i.wkPgms.length>0),t.xp6(4),t.Q6J("ngIf",i.isLoggedInAsClub()))},dependencies:[g.sg,g.O5,d.JJ,d.On,o.oU,o.YG,o.Sm,o.wI,o.W2,o.fr,o.jY,o.Gu,o.gu,o.Ie,o.rH,o.u8,o.IK,o.td,o.Q$,o.q_,o.uN,o.Nd,o.VI,o.t9,o.n0,o.PQ,o.wd,o.sr,o.QI,o.j9,o.cs,k,g.Ov,g.uU]}),n})()}];let N=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=t.oAB({type:n}),n.\u0275inj=t.cJS({imports:[g.ez,d.u5,o.Pc,m.Bz.forChild(F)]}),n})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/5231.3ae1e1b25fad7395.js b/src/main/resources/app/5231.3ae1e1b25fad7395.js deleted file mode 100644 index 4667126de..000000000 --- a/src/main/resources/app/5231.3ae1e1b25fad7395.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[5231],{5231:(k,u,d)=>{d.r(u),d.d(u,{RegAthletEditorPageModule:()=>M});var h=d(6895),g=d(433),m=d(5472),a=d(502),_=d(7225),e=d(8274),p=d(600);function b(r,l){if(1&r&&(e.TgZ(0,"ion-select-option",15)(1,"ion-avatar",2),e._UZ(2,"img",8),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4),e._UZ(5,"br"),e.TgZ(6,"small"),e._uU(7),e.ALo(8,"date"),e.qZA()()()),2&r){const t=l.$implicit;e.Q6J("value",t.athletId),e.xp6(4),e.lnq("",t.name,", ",t.vorname," (",t.geschlecht,")"),e.xp6(3),e.hij("(",e.lcZ(8,5,t.gebdat),")")}}function A(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-select",19),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw(2);return e.KtG(o.selectedClubAthletId=n)}),e.YNc(1,b,9,7,"ion-select-option",20),e.qZA()}if(2&r){const t=e.oxw(2);e.Q6J("ngModel",t.selectedClubAthletId),e.xp6(1),e.Q6J("ngForOf",t.clubAthletList)}}function f(r,l){1&r&&(e.TgZ(0,"ion-item-divider")(1,"ion-avatar",0),e._UZ(2,"img",21),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4,"Einteilung"),e.qZA()())}function I(r,l){if(1&r&&(e.TgZ(0,"ion-select-option",15),e._uU(1),e.qZA()),2&r){const t=l.$implicit;e.Q6J("value",t.id),e.xp6(1),e.Oqu(t.name)}}function v(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-item")(1,"ion-avatar",0),e._uU(2," \xa0 "),e.qZA(),e.TgZ(3,"ion-label",12),e._uU(4,"Programm/Kategorie"),e.qZA(),e.TgZ(5,"ion-select",22),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw(2);return e.KtG(o.registration.programId=n)}),e.YNc(6,I,2,2,"ion-select-option",20),e.qZA()()}if(2&r){const t=e.oxw(2);e.xp6(5),e.Q6J("ngModel",t.registration.programId),e.xp6(1),e.Q6J("ngForOf",t.filterPGMsForAthlet(t.registration))}}function Z(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-content")(1,"form",6,7),e.NdJ("ngSubmit",function(){e.CHM(t);const n=e.MAs(2),o=e.oxw();return e.KtG(o.save(n))})("keyup.enter",function(){e.CHM(t);const n=e.MAs(2),o=e.oxw();return e.KtG(o.save(n))}),e.TgZ(3,"ion-list")(4,"ion-item-divider")(5,"ion-avatar",0),e._UZ(6,"img",8),e.qZA(),e.TgZ(7,"ion-label"),e._uU(8,"Athlet / Athletin"),e.qZA(),e.YNc(9,A,2,2,"ion-select",9),e.qZA(),e.TgZ(10,"ion-item")(11,"ion-avatar",0),e._uU(12," \xa0 "),e.qZA(),e.TgZ(13,"ion-input",10),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.name=n)}),e.qZA(),e.TgZ(14,"ion-input",11),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.vorname=n)}),e.qZA()(),e.TgZ(15,"ion-item")(16,"ion-avatar",0),e._uU(17," \xa0 "),e.qZA(),e.TgZ(18,"ion-label",12),e._uU(19,"Geburtsdatum"),e.qZA(),e.TgZ(20,"ion-input",13),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.gebdat=n)}),e.qZA()(),e.TgZ(21,"ion-item")(22,"ion-avatar",0),e._uU(23," \xa0 "),e.qZA(),e.TgZ(24,"ion-label",12),e._uU(25,"Geschlecht"),e.qZA(),e.TgZ(26,"ion-select",14),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.geschlecht=n)}),e.TgZ(27,"ion-select-option",15),e._uU(28,"weiblich"),e.qZA(),e.TgZ(29,"ion-select-option",15),e._uU(30,"m\xe4nnlich"),e.qZA()()(),e.YNc(31,f,5,0,"ion-item-divider",4),e.YNc(32,v,7,2,"ion-item",4),e.qZA(),e.TgZ(33,"ion-list")(34,"ion-button",16,17),e._UZ(36,"ion-icon",18),e._uU(37,"Speichern"),e.qZA()()()()}if(2&r){const t=e.MAs(2),i=e.oxw();e.xp6(9),e.Q6J("ngIf",0===i.registration.id&&i.clubAthletList.length>0),e.xp6(4),e.Q6J("disabled",!1)("ngModel",i.registration.name),e.xp6(1),e.Q6J("disabled",!1)("ngModel",i.registration.vorname),e.xp6(6),e.Q6J("disabled",!1)("ngModel",i.registration.gebdat),e.xp6(6),e.Q6J("ngModel",i.registration.geschlecht),e.xp6(1),e.Q6J("value","W"),e.xp6(2),e.Q6J("value","M"),e.xp6(2),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(1),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(2),e.Q6J("disabled",i.waiting||!i.isFormValid()||!t.valid||t.untouched)}}function x(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-button",23,24),e.NdJ("click",function(){e.CHM(t);const n=e.oxw();return e.KtG(n.delete())}),e._UZ(2,"ion-icon",25),e._uU(3,"Anmeldung l\xf6schen"),e.qZA()}if(2&r){const t=e.oxw();e.Q6J("disabled",t.waiting)}}const C=[{path:"",component:(()=>{class r{constructor(t,i,n,o,s){this.navCtrl=t,this.route=i,this.backendService=n,this.alertCtrl=o,this.zone=s,this.waiting=!1}ngOnInit(){this.waiting=!0,this.wkId=this.route.snapshot.paramMap.get("wkId"),this.regId=parseInt(this.route.snapshot.paramMap.get("regId")),this.athletId=parseInt(this.route.snapshot.paramMap.get("athletId")),this.backendService.getCompetitions().subscribe(t=>{const i=t.find(n=>n.uuid===this.wkId);this.wettkampfId=parseInt(i.id),this.backendService.loadProgramsForCompetition(i.uuid).subscribe(n=>{this.wkPgms=n,this.backendService.loadAthletListForClub(this.wkId,this.regId).subscribe(o=>{this.clubAthletList=o,this.backendService.loadAthletRegistrations(this.wkId,this.regId).subscribe(s=>{this.clubAthletListCurrent=s,this.updateUI(this.athletId?s.find(c=>c.id===this.athletId):{id:0,vereinregistrationId:this.regId,name:"",vorname:"",geschlecht:"W",gebdat:void 0,programId:void 0,registrationTime:0})})})})})}get selectedClubAthletId(){return this._selectedClubAthletId}set selectedClubAthletId(t){this._selectedClubAthletId=t,this.registration=this.clubAthletList.find(i=>i.athletId===t)}needsPGMChoice(){const t=[...this.wkPgms][0];return!(1==t.aggregate&&2==t.riegenmode)}alter(t){const i=new Date(t.gebdat).getFullYear();return new Date(Date.now()).getFullYear()-i}similarRegistration(t,i){return t.athletId===i.athletId||t.name===i.name&&t.vorname===i.vorname&&t.gebdat===i.gebdat&&t.geschlecht===i.geschlecht}alternatives(t){return this.clubAthletListCurrent?.filter(i=>this.similarRegistration(i,t)&&(i.id!=t.id||i.programId!=t.programId))||[]}getAthletPgm(t){return this.wkPgms.find(i=>i.id===t.programId)||Object.assign({parent:0})}filterPGMsForAthlet(t){const i=this.alter(t),n=this.alternatives(t);return this.wkPgms.filter(o=>(o.alterVon||0)<=i&&(o.alterBis||100)>=i&&0===n.filter(s=>s.programId===o.id||this.getAthletPgm(s).parentId===o.parentId).length)}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.wettkampf=this.backendService.competitionName,this.registration=Object.assign({},t),this.registration.gebdat=(0,_.tC)(this.registration.gebdat)})}isFormValid(){return!this.registration?.programId&&!this.needsPGMChoice()&&(this.registration.programId=this.filterPGMsForAthlet(this.registration)[0]?.id),!!this.registration.gebdat&&!!this.registration.geschlecht&&this.registration.geschlecht.length>0&&!!this.registration.name&&this.registration.name.length>0&&!!this.registration.vorname&&this.registration.vorname.length>0&&!!this.registration.programId&&this.registration.programId>0}checkPersonOverride(t){if(t.athletId){const i=[...this.clubAthletListCurrent,...this.clubAthletList].find(n=>n.athletId===t.athletId);if(i.geschlecht!==t.geschlecht||new Date((0,_.tC)(i.gebdat)).toJSON()!==new Date(t.gebdat).toJSON()||i.name!==t.name||i.vorname!==t.vorname)return!0}return!1}save(t){if(!t.valid)return;const i=Object.assign({},this.registration,{gebdat:new Date(t.value.gebdat).toJSON()});0===this.athletId||0===i.id?(this.needsPGMChoice()||this.filterPGMsForAthlet(this.registration).filter(n=>n.id!==i.programId).forEach(n=>{this.backendService.createAthletRegistration(this.wkId,this.regId,Object.assign({},i,{programId:n.id}))}),this.backendService.createAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})):this.checkPersonOverride(i)?this.alertCtrl.create({header:"Achtung",subHeader:"Person \xfcberschreiben vs korrigieren",message:"Es wurden \xc4nderungen an den Personen-Feldern vorgenommen. Diese sind ausschliesslich f\xfcr Korrekturen zul\xe4ssig. Die Identit\xe4t der Person darf dadurch nicht ge\xe4ndert werden!",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"Korektur durchf\xfchren",handler:()=>{this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.clubAthletListCurrent.filter(s=>this.similarRegistration(this.registration,s)).filter(s=>s.id!==this.registration.id).forEach(s=>{const c=Object.assign({},i,{id:s.id,registrationTime:s.registrationTime,programId:s.programId});this.backendService.saveAthletRegistration(this.wkId,this.regId,c)}),this.navCtrl.pop()})}}]}).then(s=>s.present()):this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})}delete(){this.alertCtrl.create({header:"Achtung",subHeader:"L\xf6schen der Athlet-Anmeldung am Wettkampf",message:"Hiermit wird die Anmeldung von "+this.registration.name+", "+this.registration.vorname+" am Wettkampf gel\xf6scht.",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"OKAY",handler:()=>{this.needsPGMChoice()||this.clubAthletListCurrent.filter(i=>this.similarRegistration(this.registration,i)).filter(i=>i.id!==this.registration.id).forEach(i=>{this.backendService.deleteAthletRegistration(this.wkId,this.regId,i)}),this.backendService.deleteAthletRegistration(this.wkId,this.regId,this.registration).subscribe(()=>{this.navCtrl.pop()})}}]}).then(i=>i.present())}}return r.\u0275fac=function(t){return new(t||r)(e.Y36(a.SH),e.Y36(m.gz),e.Y36(p.v),e.Y36(a.Br),e.Y36(e.R0b))},r.\u0275cmp=e.Xpm({type:r,selectors:[["app-reg-athlet-editor"]],decls:14,vars:3,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[4,"ngIf"],["size","large","expand","block","color","danger",3,"disabled","click",4,"ngIf"],[3,"ngSubmit","keyup.enter"],["athletRegistrationForm","ngForm"],["src","assets/imgs/athlete.png"],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange",4,"ngIf"],["required","","placeholder","Name","type","text","name","name","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Vorname","type","text","name","vorname","required","",3,"disabled","ngModel","ngModelChange"],["color","primary"],["required","","placeholder","Geburtsdatum","type","date","display-timezone","utc","name","gebdat","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Geschlecht","name","geschlecht","okText","Okay","cancelText","Abbrechen","required","",3,"ngModel","ngModelChange"],[3,"value"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name",""],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],["src","assets/imgs/wettkampf.png"],["required","","placeholder","Programm/Kategorie","name","programId","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],["size","large","expand","block","color","danger",3,"disabled","click"],["btnDelete",""],["slot","start","name","trash"]],template:function(t,i){1&t&&(e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5,"Anmeldung Athlet/Athletin"),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA()()()(),e.YNc(9,Z,38,13,"ion-content",4),e.TgZ(10,"ion-footer")(11,"ion-toolbar")(12,"ion-list"),e.YNc(13,x,4,1,"ion-button",5),e.qZA()()()),2&t&&(e.xp6(8),e.hij("f\xfcr ",i.wettkampf,""),e.xp6(1),e.Q6J("ngIf",i.registration),e.xp6(4),e.Q6J("ngIf",i.athletId>0))},dependencies:[h.sg,h.O5,g._Y,g.JJ,g.JL,g.Q7,g.On,g.F,a.BJ,a.oU,a.YG,a.Sm,a.W2,a.fr,a.Gu,a.gu,a.pK,a.Ie,a.rH,a.Q$,a.q_,a.uN,a.t9,a.n0,a.wd,a.sr,a.QI,a.j9,a.cs,h.uU]}),r})()}];let M=(()=>{class r{}return r.\u0275fac=function(t){return new(t||r)},r.\u0275mod=e.oAB({type:r}),r.\u0275inj=e.cJS({imports:[h.ez,g.u5,a.Pc,m.Bz.forChild(C)]}),r})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/5231.b4e1e45bfcb05fdb.js b/src/main/resources/app/5231.b4e1e45bfcb05fdb.js new file mode 100644 index 000000000..14e479ed3 --- /dev/null +++ b/src/main/resources/app/5231.b4e1e45bfcb05fdb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[5231],{5231:(k,u,d)=>{d.r(u),d.d(u,{RegAthletEditorPageModule:()=>M});var h=d(6895),g=d(433),m=d(5472),a=d(502),_=d(7225),e=d(8274),p=d(600);function b(r,l){if(1&r&&(e.TgZ(0,"ion-select-option",15)(1,"ion-avatar",2),e._UZ(2,"img",8),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4),e._UZ(5,"br"),e.TgZ(6,"small"),e._uU(7),e.ALo(8,"date"),e.qZA()()()),2&r){const t=l.$implicit;e.Q6J("value",t.athletId),e.xp6(4),e.lnq("",t.name,", ",t.vorname," (",t.geschlecht,")"),e.xp6(3),e.hij("(",e.lcZ(8,5,t.gebdat),")")}}function A(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-select",19),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw(2);return e.KtG(o.selectedClubAthletId=n)}),e.YNc(1,b,9,7,"ion-select-option",20),e.qZA()}if(2&r){const t=e.oxw(2);e.Q6J("ngModel",t.selectedClubAthletId),e.xp6(1),e.Q6J("ngForOf",t.clubAthletList)}}function f(r,l){1&r&&(e.TgZ(0,"ion-item-divider")(1,"ion-avatar",0),e._UZ(2,"img",21),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4,"Einteilung"),e.qZA()())}function I(r,l){if(1&r&&(e.TgZ(0,"ion-select-option",15),e._uU(1),e.qZA()),2&r){const t=l.$implicit;e.Q6J("value",t.id),e.xp6(1),e.Oqu(t.name)}}function v(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-item")(1,"ion-avatar",0),e._uU(2," \xa0 "),e.qZA(),e.TgZ(3,"ion-label",12),e._uU(4,"Programm/Kategorie"),e.qZA(),e.TgZ(5,"ion-select",22),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw(2);return e.KtG(o.registration.programId=n)}),e.YNc(6,I,2,2,"ion-select-option",20),e.qZA()()}if(2&r){const t=e.oxw(2);e.xp6(5),e.Q6J("ngModel",t.registration.programId),e.xp6(1),e.Q6J("ngForOf",t.filterPGMsForAthlet(t.registration))}}function Z(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-content")(1,"form",6,7),e.NdJ("ngSubmit",function(){e.CHM(t);const n=e.MAs(2),o=e.oxw();return e.KtG(o.save(n))})("keyup.enter",function(){e.CHM(t);const n=e.MAs(2),o=e.oxw();return e.KtG(o.save(n))}),e.TgZ(3,"ion-list")(4,"ion-item-divider")(5,"ion-avatar",0),e._UZ(6,"img",8),e.qZA(),e.TgZ(7,"ion-label"),e._uU(8,"Athlet / Athletin"),e.qZA(),e.YNc(9,A,2,2,"ion-select",9),e.qZA(),e.TgZ(10,"ion-item")(11,"ion-avatar",0),e._uU(12," \xa0 "),e.qZA(),e.TgZ(13,"ion-input",10),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.name=n)}),e.qZA(),e.TgZ(14,"ion-input",11),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.vorname=n)}),e.qZA()(),e.TgZ(15,"ion-item")(16,"ion-avatar",0),e._uU(17," \xa0 "),e.qZA(),e.TgZ(18,"ion-label",12),e._uU(19,"Geburtsdatum"),e.qZA(),e.TgZ(20,"ion-input",13),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.gebdat=n)}),e.qZA()(),e.TgZ(21,"ion-item")(22,"ion-avatar",0),e._uU(23," \xa0 "),e.qZA(),e.TgZ(24,"ion-label",12),e._uU(25,"Geschlecht"),e.qZA(),e.TgZ(26,"ion-select",14),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.geschlecht=n)}),e.TgZ(27,"ion-select-option",15),e._uU(28,"weiblich"),e.qZA(),e.TgZ(29,"ion-select-option",15),e._uU(30,"m\xe4nnlich"),e.qZA()()(),e.YNc(31,f,5,0,"ion-item-divider",4),e.YNc(32,v,7,2,"ion-item",4),e.qZA(),e.TgZ(33,"ion-list")(34,"ion-button",16,17),e._UZ(36,"ion-icon",18),e._uU(37,"Speichern"),e.qZA()()()()}if(2&r){const t=e.MAs(2),i=e.oxw();e.xp6(9),e.Q6J("ngIf",0===i.registration.id&&i.clubAthletList.length>0),e.xp6(4),e.Q6J("disabled",!1)("ngModel",i.registration.name),e.xp6(1),e.Q6J("disabled",!1)("ngModel",i.registration.vorname),e.xp6(6),e.Q6J("disabled",!1)("ngModel",i.registration.gebdat),e.xp6(6),e.Q6J("ngModel",i.registration.geschlecht),e.xp6(1),e.Q6J("value","W"),e.xp6(2),e.Q6J("value","M"),e.xp6(2),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(1),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(2),e.Q6J("disabled",i.waiting||!i.isFormValid()||!t.valid||t.untouched)}}function x(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-button",23,24),e.NdJ("click",function(){e.CHM(t);const n=e.oxw();return e.KtG(n.delete())}),e._UZ(2,"ion-icon",25),e._uU(3,"Anmeldung l\xf6schen"),e.qZA()}if(2&r){const t=e.oxw();e.Q6J("disabled",t.waiting)}}const C=[{path:"",component:(()=>{class r{constructor(t,i,n,o,s){this.navCtrl=t,this.route=i,this.backendService=n,this.alertCtrl=o,this.zone=s,this.waiting=!1}ngOnInit(){this.waiting=!0,this.wkId=this.route.snapshot.paramMap.get("wkId"),this.regId=parseInt(this.route.snapshot.paramMap.get("regId")),this.athletId=parseInt(this.route.snapshot.paramMap.get("athletId")),this.backendService.getCompetitions().subscribe(t=>{const i=t.find(n=>n.uuid===this.wkId);this.wettkampfId=parseInt(i.id),this.backendService.loadProgramsForCompetition(i.uuid).subscribe(n=>{this.wkPgms=n,this.backendService.loadAthletListForClub(this.wkId,this.regId).subscribe(o=>{this.clubAthletList=o,this.backendService.loadAthletRegistrations(this.wkId,this.regId).subscribe(s=>{this.clubAthletListCurrent=s,this.updateUI(this.athletId?s.find(c=>c.id===this.athletId):{id:0,vereinregistrationId:this.regId,name:"",vorname:"",geschlecht:"W",gebdat:void 0,programId:void 0,registrationTime:0})})})})})}get selectedClubAthletId(){return this._selectedClubAthletId}set selectedClubAthletId(t){this._selectedClubAthletId=t,this.registration=this.clubAthletList.find(i=>i.athletId===t)}needsPGMChoice(){const t=[...this.wkPgms][0];return!(1==t.aggregate&&t.riegenmode>1)}alter(t){const i=new Date(t.gebdat).getFullYear();return new Date(Date.now()).getFullYear()-i}similarRegistration(t,i){return t.athletId===i.athletId||t.name===i.name&&t.vorname===i.vorname&&t.gebdat===i.gebdat&&t.geschlecht===i.geschlecht}alternatives(t){return this.clubAthletListCurrent?.filter(i=>this.similarRegistration(i,t)&&(i.id!=t.id||i.programId!=t.programId))||[]}getAthletPgm(t){return this.wkPgms.find(i=>i.id===t.programId)||Object.assign({parent:0})}filterPGMsForAthlet(t){const i=this.alter(t),n=this.alternatives(t);return this.wkPgms.filter(o=>(o.alterVon||0)<=i&&(o.alterBis||100)>=i&&0===n.filter(s=>s.programId===o.id||this.getAthletPgm(s).parentId===o.parentId).length)}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.wettkampf=this.backendService.competitionName,this.registration=Object.assign({},t),this.registration.gebdat=(0,_.tC)(this.registration.gebdat)})}isFormValid(){return!this.registration?.programId&&!this.needsPGMChoice()&&(this.registration.programId=this.filterPGMsForAthlet(this.registration)[0]?.id),!!this.registration.gebdat&&!!this.registration.geschlecht&&this.registration.geschlecht.length>0&&!!this.registration.name&&this.registration.name.length>0&&!!this.registration.vorname&&this.registration.vorname.length>0&&!!this.registration.programId&&this.registration.programId>0}checkPersonOverride(t){if(t.athletId){const i=[...this.clubAthletListCurrent,...this.clubAthletList].find(n=>n.athletId===t.athletId);if(i.geschlecht!==t.geschlecht||new Date((0,_.tC)(i.gebdat)).toJSON()!==new Date(t.gebdat).toJSON()||i.name!==t.name||i.vorname!==t.vorname)return!0}return!1}save(t){if(!t.valid)return;const i=Object.assign({},this.registration,{gebdat:new Date(t.value.gebdat).toJSON()});0===this.athletId||0===i.id?(this.needsPGMChoice()||this.filterPGMsForAthlet(this.registration).filter(n=>n.id!==i.programId).forEach(n=>{this.backendService.createAthletRegistration(this.wkId,this.regId,Object.assign({},i,{programId:n.id}))}),this.backendService.createAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})):this.checkPersonOverride(i)?this.alertCtrl.create({header:"Achtung",subHeader:"Person \xfcberschreiben vs korrigieren",message:"Es wurden \xc4nderungen an den Personen-Feldern vorgenommen. Diese sind ausschliesslich f\xfcr Korrekturen zul\xe4ssig. Die Identit\xe4t der Person darf dadurch nicht ge\xe4ndert werden!",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"Korektur durchf\xfchren",handler:()=>{this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.clubAthletListCurrent.filter(s=>this.similarRegistration(this.registration,s)).filter(s=>s.id!==this.registration.id).forEach(s=>{const c=Object.assign({},i,{id:s.id,registrationTime:s.registrationTime,programId:s.programId});this.backendService.saveAthletRegistration(this.wkId,this.regId,c)}),this.navCtrl.pop()})}}]}).then(s=>s.present()):this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})}delete(){this.alertCtrl.create({header:"Achtung",subHeader:"L\xf6schen der Athlet-Anmeldung am Wettkampf",message:"Hiermit wird die Anmeldung von "+this.registration.name+", "+this.registration.vorname+" am Wettkampf gel\xf6scht.",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"OKAY",handler:()=>{this.needsPGMChoice()||this.clubAthletListCurrent.filter(i=>this.similarRegistration(this.registration,i)).filter(i=>i.id!==this.registration.id).forEach(i=>{this.backendService.deleteAthletRegistration(this.wkId,this.regId,i)}),this.backendService.deleteAthletRegistration(this.wkId,this.regId,this.registration).subscribe(()=>{this.navCtrl.pop()})}}]}).then(i=>i.present())}}return r.\u0275fac=function(t){return new(t||r)(e.Y36(a.SH),e.Y36(m.gz),e.Y36(p.v),e.Y36(a.Br),e.Y36(e.R0b))},r.\u0275cmp=e.Xpm({type:r,selectors:[["app-reg-athlet-editor"]],decls:14,vars:3,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[4,"ngIf"],["size","large","expand","block","color","danger",3,"disabled","click",4,"ngIf"],[3,"ngSubmit","keyup.enter"],["athletRegistrationForm","ngForm"],["src","assets/imgs/athlete.png"],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange",4,"ngIf"],["required","","placeholder","Name","type","text","name","name","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Vorname","type","text","name","vorname","required","",3,"disabled","ngModel","ngModelChange"],["color","primary"],["required","","placeholder","Geburtsdatum","type","date","display-timezone","utc","name","gebdat","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Geschlecht","name","geschlecht","okText","Okay","cancelText","Abbrechen","required","",3,"ngModel","ngModelChange"],[3,"value"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name",""],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],["src","assets/imgs/wettkampf.png"],["required","","placeholder","Programm/Kategorie","name","programId","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],["size","large","expand","block","color","danger",3,"disabled","click"],["btnDelete",""],["slot","start","name","trash"]],template:function(t,i){1&t&&(e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5,"Anmeldung Athlet/Athletin"),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA()()()(),e.YNc(9,Z,38,13,"ion-content",4),e.TgZ(10,"ion-footer")(11,"ion-toolbar")(12,"ion-list"),e.YNc(13,x,4,1,"ion-button",5),e.qZA()()()),2&t&&(e.xp6(8),e.hij("f\xfcr ",i.wettkampf,""),e.xp6(1),e.Q6J("ngIf",i.registration),e.xp6(4),e.Q6J("ngIf",i.athletId>0))},dependencies:[h.sg,h.O5,g._Y,g.JJ,g.JL,g.Q7,g.On,g.F,a.BJ,a.oU,a.YG,a.Sm,a.W2,a.fr,a.Gu,a.gu,a.pK,a.Ie,a.rH,a.Q$,a.q_,a.uN,a.t9,a.n0,a.wd,a.sr,a.QI,a.j9,a.cs,h.uU]}),r})()}];let M=(()=>{class r{}return r.\u0275fac=function(t){return new(t||r)},r.\u0275mod=e.oAB({type:r}),r.\u0275inj=e.cJS({imports:[h.ez,g.u5,a.Pc,m.Bz.forChild(C)]}),r})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/index.html b/src/main/resources/app/index.html index f9959c1e5..6340d6658 100644 --- a/src/main/resources/app/index.html +++ b/src/main/resources/app/index.html @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/src/main/resources/app/runtime.22601c53cd249e98.js b/src/main/resources/app/runtime.9d2b60a5286e0d40.js similarity index 54% rename from src/main/resources/app/runtime.22601c53cd249e98.js rename to src/main/resources/app/runtime.9d2b60a5286e0d40.js index 8356e462c..bad8b360c 100644 --- a/src/main/resources/app/runtime.22601c53cd249e98.js +++ b/src/main/resources/app/runtime.9d2b60a5286e0d40.js @@ -1 +1 @@ -(()=>{"use strict";var e,v={},g={};function f(e){var r=g[e];if(void 0!==r)return r.exports;var a=g[e]={exports:{}};return v[e].call(a.exports,a,a.exports,f),a.exports}f.m=v,e=[],f.O=(r,a,d,b)=>{if(!a){var t=1/0;for(c=0;c=b)&&Object.keys(f.O).every(p=>f.O[p](a[n]))?a.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[a,d,b]},f.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return f.d(r,{a:r}),r},(()=>{var r,e=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;f.t=function(a,d){if(1&d&&(a=this(a)),8&d||"object"==typeof a&&a&&(4&d&&a.__esModule||16&d&&"function"==typeof a.then))return a;var b=Object.create(null);f.r(b);var c={};r=r||[null,e({}),e([]),e(e)];for(var t=2&d&&a;"object"==typeof t&&!~r.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>a[l]);return c.default=()=>a,f.d(b,c),b}})(),f.d=(e,r)=>{for(var a in r)f.o(r,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:r[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((r,a)=>(f.f[a](e,r),r),[])),f.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"888b46156ab59294",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"3ae1e1b25fad7395",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9151:"21577e63c2cd66c2",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),f.miniCssF=e=>{},f.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e={},r="app:";f.l=(a,d,b,c)=>{if(e[a])e[a].push(d);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[a];if(delete e[a],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),f.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;f.tt=()=>(void 0===e&&(e={createScriptURL:r=>r},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),f.tu=e=>f.tt().createScriptURL(e),f.p="",(()=>{var e={3666:0};f.f.j=(d,b)=>{var c=f.o(e,d)?e[d]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=d){var t=new Promise((o,s)=>c=e[d]=[o,s]);b.push(c[2]=t);var l=f.p+f.u(d),n=new Error;f.l(l,o=>{if(f.o(e,d)&&(0!==(c=e[d])&&(e[d]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+d+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+d,d)}else e[d]=0},f.O.j=d=>0===e[d];var r=(d,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)f.o(t,n)&&(f.m[n]=t[n]);if(l)var s=l(f)}for(d&&d(b);o{"use strict";var e,v={},g={};function f(e){var d=g[e];if(void 0!==d)return d.exports;var a=g[e]={exports:{}};return v[e].call(a.exports,a,a.exports,f),a.exports}f.m=v,e=[],f.O=(d,a,r,b)=>{if(!a){var t=1/0;for(c=0;c=b)&&Object.keys(f.O).every(p=>f.O[p](a[n]))?a.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[a,r,b]},f.n=e=>{var d=e&&e.__esModule?()=>e.default:()=>e;return f.d(d,{a:d}),d},(()=>{var d,e=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;f.t=function(a,r){if(1&r&&(a=this(a)),8&r||"object"==typeof a&&a&&(4&r&&a.__esModule||16&r&&"function"==typeof a.then))return a;var b=Object.create(null);f.r(b);var c={};d=d||[null,e({}),e([]),e(e)];for(var t=2&r&&a;"object"==typeof t&&!~d.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>a[l]);return c.default=()=>a,f.d(b,c),b}})(),f.d=(e,d)=>{for(var a in d)f.o(d,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:d[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((d,a)=>(f.f[a](e,d),d),[])),f.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"fc6a678bdb89d268",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"b4e1e45bfcb05fdb",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9151:"21577e63c2cd66c2",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),f.miniCssF=e=>{},f.o=(e,d)=>Object.prototype.hasOwnProperty.call(e,d),(()=>{var e={},d="app:";f.l=(a,r,b,c)=>{if(e[a])e[a].push(r);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[a];if(delete e[a],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),f.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;f.tt=()=>(void 0===e&&(e={createScriptURL:d=>d},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),f.tu=e=>f.tt().createScriptURL(e),f.p="",(()=>{var e={3666:0};f.f.j=(r,b)=>{var c=f.o(e,r)?e[r]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=r){var t=new Promise((o,s)=>c=e[r]=[o,s]);b.push(c[2]=t);var l=f.p+f.u(r),n=new Error;f.l(l,o=>{if(f.o(e,r)&&(0!==(c=e[r])&&(e[r]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+r+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+r,r)}else e[r]=0},f.O.j=r=>0===e[r];var d=(r,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)f.o(t,n)&&(f.m[n]=t[n]);if(l)var s=l(f)}for(r&&r(b);o Date: Thu, 6 Apr 2023 23:42:46 +0200 Subject: [PATCH 25/99] #659 Fix automatic squad-assignment logic - with nonmixed-sex competition-rounds, there was a div/zero, if there where just one sex --- .../seidel/kutu/squad/DurchgangBuilder.scala | 12 +- .../kutu/squad/StartGeraetGrouper.scala | 210 +++++++++--------- 2 files changed, 121 insertions(+), 101 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala index 0a6ac4ba8..ed956d7fa 100644 --- a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala @@ -71,8 +71,16 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli case GetrennteDurchgaenge => val m = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("M")) val w = wertungen.filter(w => w._1.geschlecht.equalsIgnoreCase("W")) - groupWertungen(programm + "-Tu", m, shortGrouper, fullGrouper, dzlffm, maxRiegenSize, GetrennteDurchgaenge, jgGroup) ++ - groupWertungen(programm + "-Ti", w, shortGrouper, fullGrouper, dzlfff, maxRiegenSize, GetrennteDurchgaenge, jgGroup) + (m.nonEmpty,w.nonEmpty) match { + case (true, true) => + groupWertungen(programm + "-Tu", m, shortGrouper, fullGrouper, dzlffm, maxRiegenSize, GetrennteDurchgaenge, jgGroup) ++ + groupWertungen(programm + "-Ti", w, shortGrouper, fullGrouper, dzlfff, maxRiegenSize, GetrennteDurchgaenge, jgGroup) + case (false, true) => + groupWertungen(programm, w, shortGrouper, fullGrouper, dzlfff, maxRiegenSize, GetrennteDurchgaenge, jgGroup) + case (true,false) => + groupWertungen(programm, m, shortGrouper, fullGrouper, dzlffm, maxRiegenSize, GetrennteDurchgaenge, jgGroup) + case _ => Seq.empty + } } } diff --git a/src/main/scala/ch/seidel/kutu/squad/StartGeraetGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/StartGeraetGrouper.scala index c36b52ebc..2455d2ca7 100644 --- a/src/main/scala/ch/seidel/kutu/squad/StartGeraetGrouper.scala +++ b/src/main/scala/ch/seidel/kutu/squad/StartGeraetGrouper.scala @@ -9,105 +9,114 @@ import scala.collection.immutable trait StartGeraetGrouper extends RiegenSplitter with Stager { private val logger = LoggerFactory.getLogger(classOf[StartGeraetGrouper]) - - def groupWertungen(programm: String, wertungen: Map[AthletView, Seq[WertungView]], - grp: List[WertungView => String], grpAll: List[WertungView => String], - startgeraete: List[Disziplin], maxRiegenSize: Int, splitSex: SexDivideRule, jahrgangGroup: Boolean) - (implicit cache: scala.collection.mutable.Map[String, Int]) = { - - val startgeraeteSize = startgeraete.size - // per groupkey, transform map to seq, sorted by all groupkeys - val atheltenInRiege = wertungen.groupBy(w => groupKey(grp)(w._2.head)).toSeq.map{x => - (/*grpkey*/ x._1, // Riegenname - /*values*/ x._2.foldLeft((Seq[(AthletView, Seq[WertungView])](), Set[Long]())){(acc, w) => + def groupWertungen(programm: String, wertungen: Map[AthletView, Seq[WertungView]], + grp: List[WertungView => String], grpAll: List[WertungView => String], + startgeraete: List[Disziplin], maxRiegenSize: Int, splitSex: SexDivideRule, jahrgangGroup: Boolean) + (implicit cache: scala.collection.mutable.Map[String, Int]): Seq[(String, String, Disziplin, Seq[(AthletView, Seq[WertungView])])] = { + + val startgeraeteSize = startgeraete.size + if (startgeraeteSize == 0) { + Seq.empty + } else { + // per groupkey, transform map to seq, sorted by all groupkeys + val atheltenInRiege = wertungen.groupBy(w => groupKey(grp)(w._2.head)).toSeq.map { x => + ( /*grpkey*/ x._1, // Riegenname + /*values*/ x._2.foldLeft((Seq[(AthletView, Seq[WertungView])](), Set[Long]())) { (acc, w) => val (data, seen) = acc - val (athlet, _ ) = w - if(seen.contains(athlet.id)) acc else (w +: data, seen + athlet.id) + val (athlet, _) = w + if (seen.contains(athlet.id)) acc else (w +: data, seen + athlet.id) } - ._1.sortBy(w => groupKey(grpAll)(w._2.head)) // Liste der Athleten in der Riege, mit ihren Wertungen - ) - } + ._1.sortBy(w => groupKey(grpAll)(w._2.head)) // Liste der Athleten in der Riege, mit ihren Wertungen + ) + } - val athletensum = atheltenInRiege.flatMap{_._2.map(aw => aw._1.id)}.toSet.size - val maxRiegenSize2 = if(maxRiegenSize > 0) maxRiegenSize else math.max(14, math.ceil(1d * athletensum / startgeraeteSize).intValue()) - val riegen = splitToMaxTurnerCount(atheltenInRiege, maxRiegenSize2, cache).map(r => Map(r._1 -> r._2)) - // Maximalausdehnung. Nun die sinnvollen Zusammenlegungen - val riegenindex = buildRiegenIndex(riegen) - val workmodel = buildWorkModel(riegen) + val athletensum = atheltenInRiege.flatMap { + _._2.map(aw => aw._1.id) + }.toSet.size + val maxRiegenSize2 = if (maxRiegenSize > 0) maxRiegenSize else math.max(14, math.ceil(1d * athletensum / startgeraeteSize).intValue()) + val riegen = splitToMaxTurnerCount(atheltenInRiege, maxRiegenSize2, cache).map(r => Map(r._1 -> r._2)) + // Maximalausdehnung. Nun die sinnvollen Zusammenlegungen + val riegenindex = buildRiegenIndex(riegen) + val workmodel = buildWorkModel(riegen) - def combineToDurchgangSize(relevantcombis: GeraeteRiegen): GeraeteRiegen = { - splitSex match { - case GemischterDurchgang => - val rcm = relevantcombis.filter(c => c.turnerriegen.head.geschlecht.equalsIgnoreCase("M")) - val rcw = relevantcombis.filter(c => c.turnerriegen.head.geschlecht.equalsIgnoreCase("W")) - val maxMGeraete = startgeraeteSize * rcm.size / relevantcombis.size - val maxWGeraete = startgeraeteSize * rcw.size / relevantcombis.size - buildPairs(maxMGeraete, maxRiegenSize2, rcm)++ buildPairs(maxWGeraete, maxRiegenSize2, rcw) - case _ => - buildPairs(startgeraeteSize, maxRiegenSize2, relevantcombis) + def combineToDurchgangSize(relevantcombis: GeraeteRiegen): GeraeteRiegen = { + splitSex match { + case GemischterDurchgang => + val rcm = relevantcombis.filter(c => c.turnerriegen.head.geschlecht.equalsIgnoreCase("M")) + val rcw = relevantcombis.filter(c => c.turnerriegen.head.geschlecht.equalsIgnoreCase("W")) + val maxMGeraete = startgeraeteSize * rcm.size / relevantcombis.size + val maxWGeraete = startgeraeteSize * rcw.size / relevantcombis.size + buildPairs(maxMGeraete, maxRiegenSize2, rcm) ++ buildPairs(maxWGeraete, maxRiegenSize2, rcw) + case _ => + buildPairs(startgeraeteSize, maxRiegenSize2, relevantcombis) + } } - } - def handleVereinMerges(startriegen: GeraeteRiegen): GeraeteRiegen = { - if(jahrgangGroup) { - startriegen - } - else splitSex match { - case GemischteRiegen => bringVereineTogether(startriegen, maxRiegenSize2, splitSex) - case GemischterDurchgang => startriegen - case GetrennteDurchgaenge => bringVereineTogether(startriegen, maxRiegenSize2, splitSex) + def handleVereinMerges(startriegen: GeraeteRiegen): GeraeteRiegen = { + if (jahrgangGroup) { + startriegen + } + else splitSex match { + case GemischteRiegen => bringVereineTogether(startriegen, maxRiegenSize2, splitSex) + case GemischterDurchgang => startriegen + case GetrennteDurchgaenge => bringVereineTogether(startriegen, maxRiegenSize2, splitSex) + } } - } - - val alignedriegen = if(workmodel.isEmpty) workmodel else handleVereinMerges(combineToDurchgangSize(workmodel)) - // Startgeräteverteilung - distributeToStartgeraete(programm, startgeraete, maxRiegenSize, rebuildWertungen(alignedriegen, riegenindex)) + val alignedriegen = if (workmodel.isEmpty) workmodel else handleVereinMerges(combineToDurchgangSize(workmodel)) + + // Startgeräteverteilung + distributeToStartgeraete(programm, startgeraete, maxRiegenSize, rebuildWertungen(alignedriegen, riegenindex)) + } } private def distributeToStartgeraete(programm: String, startgeraete: List[Disziplin], maxRiegenSize: Int, alignedriegen: Seq[RiegeAthletWertungen]): Seq[(String, String, Disziplin, Seq[(AthletView, Seq[WertungView])])] = { - val missingStartOffset = math.min(startgeraete.size, alignedriegen.size) - val emptyGeraeteRiegen = Range(missingStartOffset, math.max(missingStartOffset, startgeraete.size)) - .map{startgeridx => - (s"$programm (1)", s"Leere Riege ${programm}/${startgeraete(startgeridx).easyprint}", startgeraete(startgeridx), Seq[(AthletView, Seq[WertungView])]()) - } + if (alignedriegen.isEmpty) { + Seq.empty + } else { + val missingStartOffset = math.min(startgeraete.size, alignedriegen.size) + val emptyGeraeteRiegen = Range(missingStartOffset, math.max(missingStartOffset, startgeraete.size)) + .map { startgeridx => + (s"$programm (1)", s"Leere Riege ${programm}/${startgeraete(startgeridx).easyprint}", startgeraete(startgeridx), Seq[(AthletView, Seq[WertungView])]()) + } - alignedriegen - .zipWithIndex.flatMap { r => - val (rr, index) = r - val startgeridx = (index + startgeraete.size) % startgeraete.size - rr.keys.map { riegenname => - logger.debug(s"Durchgang $programm (${index / startgeraete.size + 1}), Start ${startgeraete(startgeridx).easyprint}, ${rr(riegenname).size} Tu/Ti der Riege $riegenname") - (s"$programm (${if (maxRiegenSize > 0) index / startgeraete.size + 1 else 1})", riegenname, startgeraete(startgeridx), rr(riegenname)) - } - } ++ emptyGeraeteRiegen + alignedriegen + .zipWithIndex.flatMap { r => + val (rr, index) = r + val startgeridx = (index + startgeraete.size) % startgeraete.size + rr.keys.map { riegenname => + logger.debug(s"Durchgang $programm (${index / startgeraete.size + 1}), Start ${startgeraete(startgeridx).easyprint}, ${rr(riegenname).size} Tu/Ti der Riege $riegenname") + (s"$programm (${if (maxRiegenSize > 0) index / startgeraete.size + 1 else 1})", riegenname, startgeraete(startgeridx), rr(riegenname)) + } + } ++ emptyGeraeteRiegen + } } - + private def bringVereineTogether(startriegen: GeraeteRiegen, maxRiegenSize2: Int, splitSex: SexDivideRule): GeraeteRiegen = { @tailrec def _bringVereineTogether(startriegen: GeraeteRiegen, variantsCache: Set[GeraeteRiegen]): GeraeteRiegen = { val averageSize = startriegen.averageSize - val optimized = startriegen.flatMap{raw => - raw.turnerriegen.map{r => - (r.verein -> raw) + val optimized = startriegen.flatMap { raw => + raw.turnerriegen.map { r => + (r.verein -> raw) } - }.groupBy{vereinraw => + }.groupBy { vereinraw => vereinraw._1 - }.map{vereinraw => + }.map { vereinraw => vereinraw._1 -> vereinraw._2.map(_._2).toSet // (Option[Verein] -> GeraeteRiegen) - }.foldLeft(startriegen){(accStartriegen, item) => + }.foldLeft(startriegen) { (accStartriegen, item) => val (verein, riegen) = item - val ret = riegen.map(f => (f, f.withVerein(verein))).foldLeft(accStartriegen){(acccStartriegen, riegen2) => + val ret = riegen.map(f => (f, f.withVerein(verein))).foldLeft(accStartriegen) { (acccStartriegen, riegen2) => val (geraetRiege, toMove) = riegen2 -// val vereinTurnerRiege = Map(filteredRiege -> toMove) + // val vereinTurnerRiege = Map(filteredRiege -> toMove) val v1 = geraetRiege.countVereine(verein) val anzTurner = geraetRiege.size - acccStartriegen.find{p => + acccStartriegen.find { p => p != geraetRiege && - acccStartriegen.contains(geraetRiege) && - p.countVereine(verein) > v1 + acccStartriegen.contains(geraetRiege) && + p.countVereine(verein) > v1 } match { case Some(zielriege) if ((zielriege ++ toMove).size <= maxRiegenSize2) => @@ -120,7 +129,7 @@ trait StartGeraetGrouper extends RiegenSplitter with Stager { val ret = r3 + gt ret case Some(zielriege) => findSubstitutesFor(toMove, zielriege) match { - case Some(substitues) => + case Some(substitues) => val gt = geraetRiege -- toMove ++ substitues val sg = zielriege -- substitues ++ toMove if (gt.size > maxRiegenSize2 || sg.size > maxRiegenSize2) { @@ -147,14 +156,15 @@ trait StartGeraetGrouper extends RiegenSplitter with Stager { } } } + _bringVereineTogether(startriegen, Set(startriegen)) } - + private def findSubstitutesFor(riegeToReplace: squad.GeraeteRiege, zielriege: squad.GeraeteRiege): Option[squad.GeraeteRiege] = { val replaceCnt = riegeToReplace.size val reducedZielriege = zielriege -- riegeToReplace - val candidates = reducedZielriege.turnerriegen.toSeq.sortBy(_.size).reverse.foldLeft(squad.GeraeteRiege()){(acc, candidate) => + val candidates = reducedZielriege.turnerriegen.toSeq.sortBy(_.size).reverse.foldLeft(squad.GeraeteRiege()) { (acc, candidate) => val grouped = acc + candidate if (grouped.size <= replaceCnt) { grouped @@ -172,20 +182,21 @@ trait StartGeraetGrouper extends RiegenSplitter with Stager { @tailrec private def spreadEven(startriegen: GeraeteRiegen, splitSex: SexDivideRule, mustIncreaseQuality: Boolean = false): GeraeteRiegen = { /* - * 1. Durchschnittsgrösse ermitteln - * 2. Grösste Abweichungen ermitteln (kleinste, grösste) - * 3. davon (teilbare) Gruppen filtern - * 4. schieben. - */ - val stats = startriegen.map{raw => + * 1. Durchschnittsgrösse ermitteln + * 2. Grösste Abweichungen ermitteln (kleinste, grösste) + * 3. davon (teilbare) Gruppen filtern + * 4. schieben. + */ + val stats = startriegen.map { raw => // Riege, Anz. Gruppen, Anz. Turner, Std.Abweichung, (kleinste Gruppekey, kleinste Gruppe) val anzTurner = raw.size val abweichung = anzTurner - startriegen.averageSize - (raw, raw.size, anzTurner, abweichung, raw.smallestDividable ) - }.toSeq.sortBy(_._4).reverse // Abweichung - - val kleinsteGruppe @ (geraeteRiegeAusKleinsterGruppe, _, anzGruppenAusKleinsterGruppe, _, turnerRiegeAusKleinsterGruppe) = stats.last + (raw, raw.size, anzTurner, abweichung, raw.smallestDividable) + }.toSeq.sortBy(_._4).reverse // Abweichung + + val kleinsteGruppe@(geraeteRiegeAusKleinsterGruppe, _, anzGruppenAusKleinsterGruppe, _, turnerRiegeAusKleinsterGruppe) = stats.last type GrpStats = (squad.GeraeteRiege, Int, Int, Int, Option[TurnerRiege]) + def checkSC(p1: GrpStats, p2: GrpStats): Boolean = { splitSex match { case GemischterDurchgang => @@ -195,7 +206,8 @@ trait StartGeraetGrouper extends RiegenSplitter with Stager { true } } - stats.find{groessteGruppe => + + stats.find { groessteGruppe => val (geraeteRiege, _, anzGruppenAusGroessterGruppe, _, turnerRiege) = groessteGruppe val b11 = turnerRiege.isDefined && groessteGruppe != kleinsteGruppe val b12 = checkSC(groessteGruppe, kleinsteGruppe) @@ -210,7 +222,7 @@ trait StartGeraetGrouper extends RiegenSplitter with Stager { b11 && b12 && ((b2 && b3 && b4) || (b2 && b3 && b5 && b6 && b7)) } match { - case Some(groessteTeilbare @ (geraeteRiege, _, _, _, Some(turnerRiege))) => + case Some(groessteTeilbare@(geraeteRiege, _, _, _, Some(turnerRiege))) => val gt = geraeteRiege - turnerRiege val sg = geraeteRiegeAusKleinsterGruppe + turnerRiege val nextCombi = gt + startriegen.filter(sr => sr != geraeteRiege && sr != geraeteRiegeAusKleinsterGruppe) + sg @@ -220,19 +232,19 @@ trait StartGeraetGrouper extends RiegenSplitter with Stager { startriegen } case _ => stats.find { - case groessteGruppe @ (geraeteRiegeAusGroessterGruppe, _, anzGruppenAusGroessterGruppe, _, Some(turnerRiegeAusGroessterGruppe)) => - groessteGruppe != kleinsteGruppe && - checkSC(groessteGruppe, kleinsteGruppe) && - anzGruppenAusGroessterGruppe > startriegen.averageSize && - turnerRiegeAusGroessterGruppe.size + anzGruppenAusKleinsterGruppe <= startriegen.averageSize + case groessteGruppe@(geraeteRiegeAusGroessterGruppe, _, anzGruppenAusGroessterGruppe, _, Some(turnerRiegeAusGroessterGruppe)) => + groessteGruppe != kleinsteGruppe && + checkSC(groessteGruppe, kleinsteGruppe) && + anzGruppenAusGroessterGruppe > startriegen.averageSize && + turnerRiegeAusGroessterGruppe.size + anzGruppenAusKleinsterGruppe <= startriegen.averageSize case _ => false } match { - case Some(groessteGruppe @ (geraeteRiegeAusGroessterGruppe, _, _, _, Some(turnerRiegeAusGroessterGruppe))) => - val gt = geraeteRiegeAusGroessterGruppe - turnerRiegeAusGroessterGruppe - val sg = geraeteRiegeAusKleinsterGruppe + turnerRiegeAusGroessterGruppe - spreadEven(gt + startriegen.filter(sr => sr != geraeteRiegeAusGroessterGruppe && sr != geraeteRiegeAusKleinsterGruppe) + sg, splitSex, true) - case _ => startriegen - } // inner stats find match + case Some(groessteGruppe@(geraeteRiegeAusGroessterGruppe, _, _, _, Some(turnerRiegeAusGroessterGruppe))) => + val gt = geraeteRiegeAusGroessterGruppe - turnerRiegeAusGroessterGruppe + val sg = geraeteRiegeAusKleinsterGruppe + turnerRiegeAusGroessterGruppe + spreadEven(gt + startriegen.filter(sr => sr != geraeteRiegeAusGroessterGruppe && sr != geraeteRiegeAusKleinsterGruppe) + sg, splitSex, true) + case _ => startriegen + } // inner stats find match } // stats find match - } + } } \ No newline at end of file From 0674107f8402c548e2e61a3fb1dc00b301e18231 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Fri, 7 Apr 2023 02:38:42 +0200 Subject: [PATCH 26/99] #659 Add feature for editable age-classes per competition --- .../AddAltersklassenToWettkampf-pg.sql | 5 ++ .../AddAltersklassenToWettkampf-sqllite.sql | 5 ++ src/main/scala/ch/seidel/kutu/KuTuApp.scala | 44 ++++++++++-- .../seidel/kutu/data/ResourceExchanger.scala | 2 + .../ch/seidel/kutu/domain/DBService.scala | 2 + .../seidel/kutu/domain/WertungService.scala | 16 +++-- .../kutu/domain/WettkampfResultMapper.scala | 6 +- .../seidel/kutu/domain/WettkampfService.scala | 14 ++-- .../scala/ch/seidel/kutu/domain/package.scala | 72 +++++++++++++++---- .../ch/seidel/kutu/http/JsonSupport.scala | 2 +- .../ch/seidel/kutu/http/ScoreRoutes.scala | 18 +++-- .../WettkampfOverviewToHtmlRenderer.scala | 9 +++ .../ch/seidel/kutu/view/RanglisteTab.scala | 14 +++- .../ch/seidel/kutu/base/KuTuBaseSpec.scala | 4 +- .../ch/seidel/kutu/base/TestDBService.scala | 1 + .../ch/seidel/kutu/domain/WettkampfSpec.scala | 16 +++-- 16 files changed, 179 insertions(+), 51 deletions(-) create mode 100644 src/main/resources/dbscripts/AddAltersklassenToWettkampf-pg.sql create mode 100644 src/main/resources/dbscripts/AddAltersklassenToWettkampf-sqllite.sql diff --git a/src/main/resources/dbscripts/AddAltersklassenToWettkampf-pg.sql b/src/main/resources/dbscripts/AddAltersklassenToWettkampf-pg.sql new file mode 100644 index 000000000..4aac2e2b9 --- /dev/null +++ b/src/main/resources/dbscripts/AddAltersklassenToWettkampf-pg.sql @@ -0,0 +1,5 @@ +-- ----------------------------------------------------- +-- Table wettkampf +-- ----------------------------------------------------- +ALTER TABLE wettkampf ADD altersklassen varchar(254) DEFAULT ''; +ALTER TABLE wettkampf ADD jahrgangsklassen varchar(254) DEFAULT ''; diff --git a/src/main/resources/dbscripts/AddAltersklassenToWettkampf-sqllite.sql b/src/main/resources/dbscripts/AddAltersklassenToWettkampf-sqllite.sql new file mode 100644 index 000000000..4aac2e2b9 --- /dev/null +++ b/src/main/resources/dbscripts/AddAltersklassenToWettkampf-sqllite.sql @@ -0,0 +1,5 @@ +-- ----------------------------------------------------- +-- Table wettkampf +-- ----------------------------------------------------- +ALTER TABLE wettkampf ADD altersklassen varchar(254) DEFAULT ''; +ALTER TABLE wettkampf ADD jahrgangsklassen varchar(254) DEFAULT ''; diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index 013e8c9f9..f0ececb06 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -285,6 +285,16 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport promptText = "Auszeichnung bei Erreichung des Mindest-Endwerts" text = p.auszeichnungendnote.toString } + val txtAltersklassen = new TextField { + prefWidth = 500 + promptText = "Altersklassen (z.B. 6,18,22,25)" + text = p.altersklassen + } + val txtJGAltersklassen = new TextField { + prefWidth = 500 + promptText = "Jahrgang Altersklassen (z.B. 6,18,22,25)" + text = p.jahrgangsklassen + } PageDisplayer.showInDialog(caption, new DisplayablePage() { def getPage: Node = { new BorderPane { @@ -297,17 +307,22 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport new Label(cmbProgramm.promptText.value), cmbProgramm, new Label(txtNotificationEMail.promptText.value), txtNotificationEMail, new Label(txtAuszeichnung.promptText.value), txtAuszeichnung, - new Label(txtAuszeichnungEndnote.promptText.value), txtAuszeichnungEndnote) + new Label(txtAuszeichnungEndnote.promptText.value), txtAuszeichnungEndnote, + new Label(txtAltersklassen.promptText.value), txtAltersklassen, + new Label(txtJGAltersklassen.promptText.value), txtJGAltersklassen + ) } } } }, new Button("OK") { + cmbProgramm.selectionModel.value.select(p.programm) disable <== when(Bindings.createBooleanBinding(() => { - cmbProgramm.selectionModel.value.getSelectedIndex == -1 || + cmbProgramm.selectionModel.value.isEmpty || txtDatum.value.isNull.value || txtTitel.text.value.isEmpty }, cmbProgramm.selectionModel.value.selectedIndexProperty, + cmbProgramm.selectionModel, txtDatum.value, txtTitel.text )) choose true otherwise false @@ -332,7 +347,10 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport case e: Exception => 0 } }, - p.uuid) + p.uuid, + txtAltersklassen.text.value, + txtJGAltersklassen.text.value + ) val dir = new java.io.File(homedir + "/" + w.easyprint.replace(" ", "_")) if (!dir.exists()) { dir.mkdirs(); @@ -1081,6 +1099,16 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport promptText = "Auszeichnung bei Erreichung des Mindest-Gerätedurchschnittwerts" text = "" } + val txtAltersklassen = new TextField { + prefWidth = 500 + promptText = "Alersklassen (z.B. 6,18,22,25)" + text = "" + } + val txtJGAltersklassen = new TextField { + prefWidth = 500 + promptText = "Jahrgangs Alersklassen (z.B. 6,18,22,25)" + text = "" + } PageDisplayer.showInDialog(caption, new DisplayablePage() { def getPage: Node = { new BorderPane { @@ -1093,7 +1121,10 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport new Label(cmbProgramm.promptText.value), cmbProgramm, new Label(txtNotificationEMail.promptText.value), txtNotificationEMail, new Label(txtAuszeichnung.promptText.value), txtAuszeichnung, - new Label(txtAuszeichnungEndnote.promptText.value), txtAuszeichnungEndnote) + new Label(txtAuszeichnungEndnote.promptText.value), txtAuszeichnungEndnote, + new Label(txtAltersklassen.promptText.value), txtAltersklassen, + new Label(txtJGAltersklassen.promptText.value), txtJGAltersklassen + ) } } } @@ -1128,7 +1159,10 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport case e: Exception => 0 } }, - Some(UUID.randomUUID().toString())) + Some(UUID.randomUUID().toString()), + txtAltersklassen.text.value, + txtJGAltersklassen.text.value + ) val dir = new java.io.File(homedir + "/" + w.easyprint.replace(" ", "_")) if (!dir.exists()) { dir.mkdirs(); diff --git a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala index ab94a5a5a..86b1f6bc1 100644 --- a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala +++ b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala @@ -283,6 +283,8 @@ object ResourceExchanger extends KutuService with RiegenBuilder { programmId = Set(fields(wettkampfHeader("programmId"))), titel = fields(wettkampfHeader("titel")), notificationEMail = wettkampfHeader.get("notificationEMail").map(fields).getOrElse(""), + altersklassen = wettkampfHeader.get("altersklassen").map(fields).getOrElse(""), + jahrgangsklassen = wettkampfHeader.get("jahrgangsklassen").map(fields).getOrElse(""), uuidOption = uuid ) diff --git a/src/main/scala/ch/seidel/kutu/domain/DBService.scala b/src/main/scala/ch/seidel/kutu/domain/DBService.scala index 32c8777d6..bb3853e2b 100644 --- a/src/main/scala/ch/seidel/kutu/domain/DBService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/DBService.scala @@ -85,6 +85,7 @@ object DBService { , "AddNotificationMailToWettkampf-sqllite.sql" , "AddWKDisziplinMetafields-sqllite.sql" , "AddWKTestPgms-sqllite.sql" + , "AddAltersklassenToWettkampf-sqllite.sql" ) (!dbfile.exists() || dbfile.length() == 0, Config.importDataFrom) match { @@ -174,6 +175,7 @@ object DBService { , "AddNotificationMailToWettkampf-pg.sql" , "AddWKDisziplinMetafields-pg.sql" , "AddWKTestPgms-pg.sql" + , "AddAltersklassenToWettkampf-pg.sql" ) installDB(db, sqlScripts) /*Config.importDataFrom match { diff --git a/src/main/scala/ch/seidel/kutu/domain/WertungService.scala b/src/main/scala/ch/seidel/kutu/domain/WertungService.scala index fc12d689a..d717db5c0 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WertungService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WertungService.scala @@ -68,16 +68,18 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di case None => "1=1" case Some(uuid) => s"wk.uuid = '$uuid'" }) + val starting = if(athletId.isEmpty) "" else "inner join riege rg on (rg.wettkampf_id = w.wettkampf_id and rg.name in (w.riege, w.riege2) and rg.start > 0)" Await.result(database.run{( sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) left outer join verein v on (a.verein = v.id) inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) + inner join disziplin d on (d.id = wd.disziplin_id) inner join programm p on (p.id = wd.programm_id) inner join wettkampf wk on (wk.id = w.wettkampf_id) @@ -93,7 +95,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -115,7 +117,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -233,7 +235,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -269,7 +271,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -366,7 +368,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di (sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -388,7 +390,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di (sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala index 39e078a0e..27d211b86 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala @@ -15,7 +15,7 @@ abstract trait WettkampfResultMapper extends DisziplinResultMapper { def readProgramm(id: Long): ProgrammView implicit val getWettkampfResult = GetResult(r => - Wettkampf(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, r.<<, r.<<, r.<<[BigDecimal], r.<<)) + Wettkampf(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, r.<<, r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<)) implicit val getWettkampfDisziplinResult = GetResult(r => Wettkampfdisziplin(r.<<, r.<<, r.<<, r.<<, r.nextBytesOption(), r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<)) @@ -27,10 +27,10 @@ abstract trait WettkampfResultMapper extends DisziplinResultMapper { } implicit def getWettkampfViewResultCached(implicit cache: scala.collection.mutable.Map[Long, ProgrammView]) = GetResult(r => - WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<[String], readProgramm(r.<<, cache), r.<<, r.<<[BigDecimal], r.<<)) + WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<[String], readProgramm(r.<<, cache), r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<)) implicit def getWettkampfViewResult = GetResult(r => - WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, readProgramm(r.<<), r.<<, r.<<[BigDecimal], r.<<)) + WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, readProgramm(r.<<), r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<)) implicit val getProgrammRawResult = GetResult(r => // id: Long, name: String, aggregate: Int, parentId: Long, ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index de3bd963a..c9bdc6e73 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -89,7 +89,7 @@ trait WettkampfService extends DBService sql""" select wpt.id, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wd.id, wd.programm_id, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, wpt.wechsel, wpt.einturnen, wpt.uebung, wpt.wertung @@ -394,7 +394,7 @@ trait WettkampfService extends DBService seek(programmid, Seq.empty) } - def createWettkampf(datum: java.sql.Date, titel: String, programmId: Set[Long], notificationEMail: String, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuidOption: Option[String]): Wettkampf = { + def createWettkampf(datum: java.sql.Date, titel: String, programmId: Set[Long], notificationEMail: String, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuidOption: Option[String], altersklassen: String, jahrgangsklassen: String): Wettkampf = { val cache = scala.collection.mutable.Map[Long, ProgrammView]() val programs = programmId map (p => readProgramm(p, cache)) val heads = programs map (_.head) @@ -437,7 +437,8 @@ trait WettkampfService extends DBService update wettkampf set datum=$datum, titel=$titel, programm_Id=${heads.head.id}, notificationEMail=$notificationEMail, - auszeichnung=$auszeichnung, auszeichnungendnote=$auszeichnungendnote + auszeichnung=$auszeichnung, auszeichnungendnote=$auszeichnungendnote, + altersklassen=$altersklassen, jahrgangsklassen=$jahrgangsklassen where id=$cid and uuid=$uuid """ >> initPlanZeitenActions(UUID.fromString(uuid)) >> @@ -448,8 +449,8 @@ trait WettkampfService extends DBService case _ => sqlu""" insert into wettkampf - (datum, titel, programm_Id, notificationEMail, auszeichnung, auszeichnungendnote, uuid) - values (${datum}, ${titel}, ${heads.head.id}, $notificationEMail, $auszeichnung, $auszeichnungendnote, $uuid) + (datum, titel, programm_Id, notificationEMail, auszeichnung, auszeichnungendnote, altersklassen, jahrgangsklassen, uuid) + values (${datum}, ${titel}, ${heads.head.id}, $notificationEMail, $auszeichnung, $auszeichnungendnote, $altersklassen, $jahrgangsklassen, $uuid) """ >> initPlanZeitenActions(UUID.fromString(uuid)) >> sql""" @@ -474,7 +475,7 @@ trait WettkampfService extends DBService }, Duration.Inf) } - def saveWettkampf(id: Long, datum: java.sql.Date, titel: String, programmId: Set[Long], notificationEMail: String, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuidOption: Option[String]): Wettkampf = { + def saveWettkampf(id: Long, datum: java.sql.Date, titel: String, programmId: Set[Long], notificationEMail: String, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuidOption: Option[String], altersklassen: String, jahrgangsklassen: String): Wettkampf = { val uuid = uuidOption.getOrElse(UUID.randomUUID().toString()) val cache = scala.collection.mutable.Map[Long, ProgrammView]() val process = for { @@ -497,6 +498,7 @@ trait WettkampfService extends DBService notificationEMail=$notificationEMail, auszeichnung=$auszeichnung, auszeichnungendnote=$auszeichnungendnote, + altersklassen=$altersklassen, jahrgangsklassen=$jahrgangsklassen, uuid=$uuid where id=$id """ >> diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 1aefe8cab..6624e5210 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -88,6 +88,15 @@ package object domain { } } + def isNumeric(c: String): Boolean = { + try { + Integer.parseInt(c) + true + } catch { + case _ => false + } + } + val sdf = new SimpleDateFormat("dd.MM.yyyy") val sdfShort = new SimpleDateFormat("dd.MM.yy") val sdfExported = new SimpleDateFormat("yyyy-MM-dd") @@ -410,23 +419,59 @@ package object domain { override def easyprint = "Jahrgang " + jahrgang } + object Leistungsklasse { + // https://www.dtb.de/fileadmin/user_upload/dtb.de/Sportarten/Ger%C3%A4tturnen/PDFs/2022/01_DTB-Arbeitshilfe_Gtw_KuerMod_2022_V1.pdf + val dtb = Seq( + "Kür", "LK1", "LK2", "LK3", "LK4" + ) + } object Altersklasse { + // file:///C:/Users/Roland/Downloads/Turn10-2018_Allgemeine%20Bestimmungen.pdf val altersklassenTurn10 = Seq( 6,7,8,9,10,11,12,13,14,15,16,17,18,24,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 ) + // see https://www.dtb.de/fileadmin/user_upload/dtb.de/Passwesen/Wettkampfordnung_DTB_2021.pdf val altersklassenDTB = Seq( 6,18,22,25 ) + // see https://www.dtb.de/fileadmin/user_upload/dtb.de/TURNEN/Standards/PDFs/Rahmentrainingskonzeption-GTm_inklAnlagen_19.11.2020.pdf + val altersklassenDTBPflicht = Seq( + 7,8,9,11,13,15,17,19 + ) + val altersklassenDTBKuer = Seq( + 12,13,15,17,19 + ) - def apply(altersgrenzen: Seq[Int]): Seq[Altersklasse] = - altersgrenzen.foldLeft(Seq[Altersklasse]()) { (acc, ag) => - acc :+ Altersklasse(acc.lastOption.map(_.alterBis + 1).getOrElse(0), ag - 1) - } :+ Altersklasse(altersgrenzen.last, 0) + def apply(altersgrenzen: Seq[Int]): Seq[Altersklasse] = { + if (altersgrenzen.isEmpty) { + Seq.empty + } else { + altersgrenzen.foldLeft(Seq[Altersklasse]()) { (acc, ag) => + acc :+ Altersklasse(acc.lastOption.map(_.alterBis + 1).getOrElse(0), ag - 1) + } :+ Altersklasse(altersgrenzen.last, 0) + } + } def apply(klassen: Seq[Altersklasse], alter: Int): Altersklasse = { klassen.find(_.matchesAlter(alter)).getOrElse(Altersklasse(alter, alter)) } + + def parseGrenzen(klassenDef: String): Seq[Int] = { + val rangeStepPattern = "([0-9]+)-([0-9]+)\\*([0-9]+)".r + val rangepattern = "([0-9]+)-([0-9]+)".r + val intpattern = "([0-9]+)".r + klassenDef.split(",") + .flatMap{ + case rangeStepPattern(von, bis, stepsize) => Range.inclusive(von, bis, stepsize) + case rangepattern(von, bis) => (str2Int(von) to str2Int(bis)) + case intpattern(von) => Seq(str2Int(von)) + case _ => Seq.empty + }.toList.sorted + } + def apply(klassenDef: String): Seq[Altersklasse] = { + apply(parseGrenzen(klassenDef)) + } } case class Altersklasse(alterVon: Int, alterBis: Int) extends DataObject { @@ -485,17 +530,18 @@ package object domain { * Krits +-------------------------------------------+--------------------------------------------------------- * aggregate ->|0 |1 * +-------------------------------------------+--------------------------------------------------------- - * riegenmode->|1 |2 |1 |2 + * riegenmode->|1 |2 / 3(+verein) |1 |2 / 3(+verein) * Acts +===========================================+========================================================= - * Einteilung->| Pgm,Sex,Verein | Pgm,Sex,Jg,Verein | Pgm,Sex,Verein | Pgm,Sex,Jg,Verein + * Einteilung->| Sex,Pgm,Verein | Sex,Pgm,Jg(,Verein) | Sex,Pgm,Verein | Pgm,Sex,Jg(,Verein) * +--------------------+----------------------+----------------------+---------------------------------- * Teilnahme | 1/WK | 1/WK | <=PgmCnt(Jg)/WK | 1/Pgm * +-------------------------------------------+--------------------------------------------------------- - * Registration| 1/WK | 1/WK, Pgm/(Jg) | 1/WK aut. Tn 1/Pgm | 1/WK aut. Tn 1/Pgm + * Registration| 1/WK | 1/WK, Pgm/(Jg) | mind. 1, max 1/Pgm | 1/WK aut. Tn 1/Pgm * +-------------------------------------------+--------------------------------------------------------- * Beispiele | GeTu/KuTu/KuTuRi | Turn10 (BS/OS) | TG Allgäu (Pfl./Kür) | ATT (Kraft/Bewg) * +-------------------------------------------+--------------------------------------------------------- * Rangliste | Sex/Programm | Sex/Programm/Jg | Sex/Programm | Sex/Programm/Jg + * | | Sex/Programm/AK | Sex/Programm/AK | * +-------------------------------------------+--------------------------------------------------------- */ case class ProgrammRaw(id: Long, name: String, aggregate: Int, parentId: Long, ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode: Int) extends Programm @@ -555,7 +601,7 @@ package object domain { override def compare(o: DataObject): Int = toPath.compareTo(o.asInstanceOf[ProgrammView].toPath) - override def toString = s"$toPath (von=$alterVon, bis=$alterBis)" + override def toString = s"$toPath" } // object Wettkampf { @@ -565,15 +611,15 @@ package object domain { // if(uuid != null) Wettkampf(id, datum, titel, programmId, auszeichnung, auszeichnungendnote, Some(uuid)) // else apply(id, datum, titel, programmId, auszeichnung, auszeichnungendnote) // } - case class Wettkampf(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String) extends DataObject { + case class Wettkampf(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: String, jahrgangsklassen: String) extends DataObject { override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY" def toView(programm: ProgrammView): WettkampfView = { - WettkampfView(id, uuid, datum, titel, programm, auszeichnung, auszeichnungendnote, notificationEMail) + WettkampfView(id, uuid, datum, titel, programm, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen, jahrgangsklassen) } - def toPublic: Wettkampf = Wettkampf(id, uuid, datum, titel, programmId, auszeichnung, auszeichnung, "") + def toPublic: Wettkampf = Wettkampf(id, uuid, datum, titel, programmId, auszeichnung, auszeichnung, "", altersklassen, jahrgangsklassen) private def prepareFilePath(homedir: String) = { val filename: String = encodeFileName(easyprint) @@ -663,10 +709,10 @@ package object domain { // if(uuid != null) WettkampfView(id, datum, titel, programm, auszeichnung, auszeichnungendnote, Some(uuid)) // else apply(id, datum, titel, programm, auszeichnung, auszeichnungendnote) // } - case class WettkampfView(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String) extends DataObject { + case class WettkampfView(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: String, jahrgangsklassen: String) extends DataObject { override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY" - def toWettkampf = Wettkampf(id, uuid, datum, titel, programm.id, auszeichnung, auszeichnungendnote, notificationEMail) + def toWettkampf = Wettkampf(id, uuid, datum, titel, programm.id, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen, jahrgangsklassen) } case class PublishedScoreRaw(id: String, title: String, query: String, published: Boolean, publishedDate: java.sql.Date, wettkampfId: Long) extends DataObject { diff --git a/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala b/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala index 3634b27b0..6017e9867 100644 --- a/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala +++ b/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala @@ -11,7 +11,7 @@ trait JsonSupport extends SprayJsonSupport with EnrichedJson { import DefaultJsonProtocol._ - implicit val wkFormat = jsonFormat(Wettkampf, "id", "uuid", "datum", "titel", "programmId", "auszeichnung", "auszeichnungendnote", "notificationEMail") + implicit val wkFormat = jsonFormat(Wettkampf, "id", "uuid", "datum", "titel", "programmId", "auszeichnung", "auszeichnungendnote", "notificationEMail", "altersklassen", "jahrgangsklassen") implicit val pgmFormat = jsonFormat9(ProgrammRaw) implicit val pgmListFormat = listFormat(pgmFormat) implicit val disziplinFormat = jsonFormat2(Disziplin) diff --git a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala index 994b605dd..132c2907d 100644 --- a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala @@ -12,7 +12,7 @@ import ch.seidel.kutu.Config import ch.seidel.kutu.KuTuServer.handleCID import ch.seidel.kutu.akka.{CompetitionCoordinatorClientActor, MessageAck, ResponseMessage, StartedDurchgaenge} import ch.seidel.kutu.data._ -import ch.seidel.kutu.domain.{Altersklasse, Durchgang, Kandidat, KutuService, NullObject, PublishedScoreView, WertungView, encodeFileName, encodeURIParam} +import ch.seidel.kutu.domain.{Altersklasse, Durchgang, Kandidat, KutuService, NullObject, PublishedScoreView, WertungView, encodeFileName, encodeURIParam, isNumeric} import ch.seidel.kutu.renderer.{PrintUtil, ScoreToHtmlRenderer, ScoreToJsonRenderer} import ch.seidel.kutu.renderer.PrintUtil._ @@ -149,16 +149,24 @@ ScoreRoutes extends SprayJsonSupport with JsonSupport with AuthSupport with Rout val logodir = new java.io.File(Config.homedir + "/" + encodeFileName(wettkampf.easyprint)) val logofile = PrintUtil.locateLogoFile(logodir) val programmText = wettkampf.programmId match {case 20 => "Kategorie" case _ => "Programm"} + val altersklassen = Altersklasse.parseGrenzen(wettkampf.altersklassen) + val jgAltersklassen = Altersklasse.parseGrenzen(wettkampf.jahrgangsklassen) def riegenZuDurchgang: Map[String, Durchgang] = { val riegen = listRiegenZuWettkampf(wettkampf.id) riegen.map(riege => riege._1 -> riege._3.map(durchgangName => Durchgang(0, durchgangName)).getOrElse(Durchgang())).toMap } val byDurchgangMat = ByDurchgang(riegenZuDurchgang) val groupers: List[FilterBy] = { - List(ByWettkampfProgramm(programmText), ByProgramm(programmText), - ByJahrgang(), ByJahrgangsAltersklasse("Turn10 Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), - ByGeschlecht(), ByVerband(), ByVerein(), byDurchgangMat, - ByRiege(), ByDisziplin(), ByJahr()) + val standardGroupers = List(ByWettkampfProgramm(programmText), ByProgramm(programmText), + ByJahrgang(), ByJahrgangsAltersklasse("Turn10 Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), + ByGeschlecht(), ByVerband(), ByVerein(), byDurchgangMat, + ByRiege(), ByDisziplin(), ByJahr()) + (altersklassen.nonEmpty, jgAltersklassen.nonEmpty) match { + case (true,true) => standardGroupers ++ List(ByAltersklasse("Wettkampf Altersklassen", altersklassen), ByJahrgangsAltersklasse("Wettkampf JG-Altersklassen", jgAltersklassen)) + case (false,true) => standardGroupers :+ ByJahrgangsAltersklasse("Wettkampf JG-Altersklassen", jgAltersklassen) + case (true,false) => standardGroupers :+ ByAltersklasse("Wettkampf Altersklassen", altersklassen) + case _ => standardGroupers + } } val logoHtml = if (logofile.exists()) s"""""" else "" pathEnd { diff --git a/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala index 077442737..f7a765bf2 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala @@ -221,6 +221,8 @@ trait WettkampfOverviewToHtmlRenderer { val silverSum = medallienbedarf.map(p => p._3 + p._7).sum val bronzeSum = medallienbedarf.map(p => p._4 + p._8).sum val auszSum = medallienbedarf.map(p => p._5 + p._9).sum + val altersklassen = Altersklasse(wettkampf.altersklassen).map(ak => s"
  • $ak
  • ").mkString("\n") + val jgAltersklassen = Altersklasse(wettkampf.jahrgangsklassen).map(ak => s"
  • $ak
  • ").mkString("\n") val medalrows = s""" Goldmedallie${goldDetails}${goldSum} @@ -234,6 +236,13 @@ trait WettkampfOverviewToHtmlRenderer { $logoHtml

    Wettkampf-Übersicht

    ${escaped(wettkampf.easyprint)}

    + ${if (altersklassen.nonEmpty || jgAltersklassen.nonEmpty) + s"""

    Altersklassen

    + Alter am Wettkampf-Tag: ${wettkampf.altersklassen}
    +
      ${altersklassen}
    + Alter im Wettkampf-Jahr: ${wettkampf.jahrgangsklassen}
    +
      ${jgAltersklassen}
    """ + else ""}

    Anmeldungen

    ${ diff --git a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala index f98e5343e..0e6293aa4 100644 --- a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala @@ -6,7 +6,7 @@ import ch.seidel.kutu.Config._ import ch.seidel.kutu.ConnectionStates import ch.seidel.kutu.KuTuApp.handleAction import ch.seidel.kutu.data._ -import ch.seidel.kutu.domain.{Altersklasse, Durchgang, KutuService, WertungView, WettkampfView, encodeFileName} +import ch.seidel.kutu.domain.{Altersklasse, Durchgang, KutuService, WertungView, WettkampfView, encodeFileName, isNumeric} import ch.seidel.kutu.renderer.PrintUtil.FilenameDefault import scalafx.Includes.when import scalafx.beans.binding.Bindings @@ -25,17 +25,27 @@ class RanglisteTab(wettkampfmode: BooleanProperty, wettkampf: WettkampfView, ove case 20 => "Kategorie" case _ => "Programm" } + + val altersklassen = Altersklasse.parseGrenzen(wettkampf.altersklassen) + val jgAltersklassen = Altersklasse.parseGrenzen(wettkampf.jahrgangsklassen) + def riegenZuDurchgang: Map[String, Durchgang] = { val riegen = service.listRiegenZuWettkampf(wettkampf.id) riegen.map(riege => riege._1 -> riege._3.map(durchgangName => Durchgang(0, durchgangName)).getOrElse(Durchgang())).toMap } override def groupers: List[FilterBy] = { - List(ByNothing(), ByWettkampfProgramm(programmText), ByProgramm(programmText), + val standardGroupers = List(ByNothing(), ByWettkampfProgramm(programmText), ByProgramm(programmText), ByJahrgang(), ByJahrgangsAltersklasse("Turn10 Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), ByGeschlecht(), ByVerband(), ByVerein(), ByDurchgang(riegenZuDurchgang), ByRiege(), ByDisziplin()) + (altersklassen.nonEmpty, jgAltersklassen.nonEmpty) match { + case (true,true) => standardGroupers ++ List(ByAltersklasse("Wettkampf Altersklassen", altersklassen), ByJahrgangsAltersklasse("Wettkampf JG-Altersklassen", jgAltersklassen)) + case (false,true) => standardGroupers :+ ByJahrgangsAltersklasse("Wettkampf JG-Altersklassen", jgAltersklassen) + case (true,false) => standardGroupers :+ ByAltersklasse("Wettkampf Altersklassen", altersklassen) + case _ => standardGroupers + } } override def getData: Seq[WertungView] = service.selectWertungen(wettkampfId = Some(wettkampf.id)) diff --git a/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala b/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala index 404d06a91..9538a6622 100644 --- a/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala +++ b/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala @@ -18,7 +18,7 @@ trait KuTuBaseSpec extends AnyWordSpec with Matchers with DBService with KutuSer DBService.startDB(Some(TestDBService.db)) def insertGeTuWettkampf(name: String, anzvereine: Int) = { - val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(20L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString)) + val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(20L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString), "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19") val programme: Seq[ProgrammView] = readWettkampfLeafs(wettkampf.programmId) val pgIds = programme.map(_.id)// 20 * 9 * 2 = 360 val vereine = for (v <- (1 to anzvereine)) yield { @@ -35,7 +35,7 @@ trait KuTuBaseSpec extends AnyWordSpec with Matchers with DBService with KutuSer wettkampf } def insertTurn10Wettkampf(name: String, anzvereine: Int) = { - val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(211L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString)) + val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(211L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString), "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19") val programme: Seq[ProgrammView] = readWettkampfLeafs(wettkampf.programmId) val pgIds = programme.map(_.id) val vereine = for (v <- (1 to anzvereine)) yield { diff --git a/src/test/scala/ch/seidel/kutu/base/TestDBService.scala b/src/test/scala/ch/seidel/kutu/base/TestDBService.scala index 38ac1836e..b21336420 100644 --- a/src/test/scala/ch/seidel/kutu/base/TestDBService.scala +++ b/src/test/scala/ch/seidel/kutu/base/TestDBService.scala @@ -55,6 +55,7 @@ object TestDBService { , "AddNotificationMailToWettkampf-sqllite.sql" , "AddWKDisziplinMetafields-sqllite.sql" //, "AddWKTestPgms-sqllite.sql" + , "AddAltersklassenToWettkampf-sqllite.sql" ) installDBFunctions(tempDatabase) diff --git a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala index ab1078ab7..050ccca42 100644 --- a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala @@ -10,32 +10,34 @@ import scala.util.matching.Regex class WettkampfSpec extends KuTuBaseSpec { "wettkampf" should { "create with disziplin-plan-times" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel", Set(20), "testmail@test.com", 33, 0, None) + val wettkampf = createWettkampf(LocalDate.now(), "titel", Set(20), "testmail@test.com", 33, 0, None, "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19") assert(wettkampf.id > 0L) val views = initWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(views.nonEmpty) } "update" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None) - val wettkampfsaved = saveWettkampf(wettkampf.id, wettkampf.datum, "neuer titel", Set(wettkampf.programmId), "testmail@test.com", 10000, 7.5, wettkampf.uuid) + val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "") + val wettkampfsaved = saveWettkampf(wettkampf.id, wettkampf.datum, "neuer titel", Set(wettkampf.programmId), "testmail@test.com", 10000, 7.5, wettkampf.uuid, "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19") assert(wettkampfsaved.titel == "neuer titel") assert(wettkampfsaved.auszeichnung == 10000) + assert(wettkampfsaved.altersklassen == "7,8,9,11,13,15,17,19") + assert(wettkampfsaved.jahrgangsklassen == "7,8,9,11,13,15,17,19") } "recreate with disziplin-plan-times" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None) + val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "") assert(wettkampf.id > 0L) val views = initWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(views.nonEmpty) - val wettkampf2 = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, wettkampf.uuid) + val wettkampf2 = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, wettkampf.uuid, "", "") assert(wettkampf2.id == wettkampf.id) val views2 = initWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(views2.size == views.size) } "update disziplin-plan-time" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None) + val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "") assert(wettkampf.id > 0L) val views = initWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) @@ -45,7 +47,7 @@ class WettkampfSpec extends KuTuBaseSpec { } "delete all disziplin-plan-time entries when wk is deleted" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel3", Set(20), "testmail@test.com", 33, 0, None) + val wettkampf = createWettkampf(LocalDate.now(), "titel3", Set(20), "testmail@test.com", 33, 0, None, "", "") deleteWettkampf(wettkampf.id) val reloaded = loadWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(reloaded.isEmpty) From 9be3c5b56b38384399d506fb3f3fe3cbff49df2c Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Fri, 7 Apr 2023 14:23:46 +0200 Subject: [PATCH 27/99] #659 editable age-classes per competition: include in RiegenGrouper plus some convenience for name and range-definitions --- src/main/scala/ch/seidel/kutu/KuTuApp.scala | 18 +++---- .../scala/ch/seidel/kutu/data/GroupBy.scala | 4 +- .../scala/ch/seidel/kutu/domain/package.scala | 49 ++++++++++--------- .../ch/seidel/kutu/http/ScoreRoutes.scala | 4 +- .../WettkampfOverviewToHtmlRenderer.scala | 4 +- .../ch/seidel/kutu/squad/JGClubGrouper.scala | 19 +++++-- .../ch/seidel/kutu/view/RanglisteTab.scala | 4 +- .../seidel/kutu/squad/JGClubGrouperSpec.scala | 18 +++++++ 8 files changed, 72 insertions(+), 48 deletions(-) create mode 100644 src/test/scala/ch/seidel/kutu/squad/JGClubGrouperSpec.scala diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index f0ececb06..035f6e733 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -257,12 +257,12 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport promptText = "Wettkampf-Titel" text = p.titel } - val pgms = ObservableBuffer.from(listRootProgramme().sorted) - val cmbProgramm = new ComboBox(pgms) { + val cmbProgramm = new ComboBox[ProgrammView] { prefWidth = 500 buttonCell = new ProgrammListCell cellFactory.value = {_:Any => new ProgrammListCell} promptText = "Programm" + items = ObservableBuffer.from(listRootProgramme().sorted) selectionModel.value.select(p.programm) } val txtNotificationEMail = new TextField { @@ -287,12 +287,12 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport } val txtAltersklassen = new TextField { prefWidth = 500 - promptText = "Altersklassen (z.B. 6,18,22,25)" + promptText = "Altersklassen (z.B. AK6,AK7,AK9-10,AK11-20*2,AK25-100/10)" text = p.altersklassen } val txtJGAltersklassen = new TextField { prefWidth = 500 - promptText = "Jahrgang Altersklassen (z.B. 6,18,22,25)" + promptText = "Jahrgang Altersklassen (z.B. AK6,AK7,AK9-10,AK11-20*2,AK25-100/10)" text = p.jahrgangsklassen } PageDisplayer.showInDialog(caption, new DisplayablePage() { @@ -316,13 +316,9 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport } }, new Button("OK") { - cmbProgramm.selectionModel.value.select(p.programm) disable <== when(Bindings.createBooleanBinding(() => { - cmbProgramm.selectionModel.value.isEmpty || txtDatum.value.isNull.value || txtTitel.text.value.isEmpty }, - cmbProgramm.selectionModel.value.selectedIndexProperty, - cmbProgramm.selectionModel, txtDatum.value, txtTitel.text )) choose true otherwise false @@ -1101,12 +1097,12 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport } val txtAltersklassen = new TextField { prefWidth = 500 - promptText = "Alersklassen (z.B. 6,18,22,25)" + promptText = "Alersklassen (z.B. 6,7,9-10,AK11-20*2,25-100/10)" text = "" } val txtJGAltersklassen = new TextField { prefWidth = 500 - promptText = "Jahrgangs Alersklassen (z.B. 6,18,22,25)" + promptText = "Jahrgangs Alersklassen (z.B. AK6,AK7,AK9-10,AK11-20*2,AK25-100/10)" text = "" } PageDisplayer.showInDialog(caption, new DisplayablePage() { @@ -1146,7 +1142,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport txtTitel.text.value, Set(cmbProgramm.selectionModel.value.getSelectedItem.id), txtNotificationEMail.text.value, - txtAuszeichnung.text.value.filter(c => c.isDigit || c == '.' || c == ',').toString match { + txtAuszeichnung.text.value.filter(c => c.isDigit || c == '.' || c == ',') match { case "" => 0 case s: String if (s.indexOf(".") > -1 || s.indexOf(",") > -1) => math.round(str2dbl(s) * 100).toInt case s: String => str2Int(s) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala index e5098ab1a..23b55ef6d 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala @@ -321,7 +321,7 @@ case class ByJahrgang() extends GroupBy with FilterBy { }) } -case class ByAltersklasse(bezeichnung: String = "GebDat Altersklasse", grenzen: Seq[Int]) extends GroupBy with FilterBy { +case class ByAltersklasse(bezeichnung: String = "GebDat Altersklasse", grenzen: Seq[(String,Int)]) extends GroupBy with FilterBy { override val groupname = bezeichnung val klassen = Altersklasse(grenzen) @@ -337,7 +337,7 @@ case class ByAltersklasse(bezeichnung: String = "GebDat Altersklasse", grenzen: }) } -case class ByJahrgangsAltersklasse(bezeichnung: String = "JG Altersklasse", grenzen: Seq[Int]) extends GroupBy with FilterBy { +case class ByJahrgangsAltersklasse(bezeichnung: String = "JG Altersklasse", grenzen: Seq[(String,Int)]) extends GroupBy with FilterBy { override val groupname = bezeichnung val klassen = Altersklasse(grenzen) diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 6624e5210..e1367ef68 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -430,51 +430,52 @@ package object domain { // file:///C:/Users/Roland/Downloads/Turn10-2018_Allgemeine%20Bestimmungen.pdf val altersklassenTurn10 = Seq( 6,7,8,9,10,11,12,13,14,15,16,17,18,24,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 - ) + ).map(i => ("AK", i)) // see https://www.dtb.de/fileadmin/user_upload/dtb.de/Passwesen/Wettkampfordnung_DTB_2021.pdf val altersklassenDTB = Seq( 6,18,22,25 - ) + ).map(i => ("AK", i)) // see https://www.dtb.de/fileadmin/user_upload/dtb.de/TURNEN/Standards/PDFs/Rahmentrainingskonzeption-GTm_inklAnlagen_19.11.2020.pdf val altersklassenDTBPflicht = Seq( 7,8,9,11,13,15,17,19 - ) + ).map(i => ("AK", i)) val altersklassenDTBKuer = Seq( 12,13,15,17,19 - ) + ).map(i => ("AK", i)) - def apply(altersgrenzen: Seq[Int]): Seq[Altersklasse] = { + def apply(altersgrenzen: Seq[(String,Int)]): Seq[Altersklasse] = { if (altersgrenzen.isEmpty) { Seq.empty } else { - altersgrenzen.foldLeft(Seq[Altersklasse]()) { (acc, ag) => - acc :+ Altersklasse(acc.lastOption.map(_.alterBis + 1).getOrElse(0), ag - 1) - } :+ Altersklasse(altersgrenzen.last, 0) + altersgrenzen.sortBy(_._2).distinctBy(_._2).foldLeft(Seq[Altersklasse]()) { (acc, ag) => + acc :+ Altersklasse(ag._1, acc.lastOption.map(_.alterBis + 1).getOrElse(0), ag._2 - 1) + } :+ Altersklasse(altersgrenzen.last._1, altersgrenzen.last._2, 0) } } def apply(klassen: Seq[Altersklasse], alter: Int): Altersklasse = { - klassen.find(_.matchesAlter(alter)).getOrElse(Altersklasse(alter, alter)) + klassen.find(_.matchesAlter(alter)).getOrElse(Altersklasse(klassen.head.bezeichnung, alter, alter)) } - def parseGrenzen(klassenDef: String): Seq[Int] = { - val rangeStepPattern = "([0-9]+)-([0-9]+)\\*([0-9]+)".r - val rangepattern = "([0-9]+)-([0-9]+)".r - val intpattern = "([0-9]+)".r + def parseGrenzen(klassenDef: String, fallbackBezeichnung: String = "Altersklasse"): Seq[(String, Int)] = { + val rangeStepPattern = "([\\D\\s]*)([0-9]+)-([0-9]+)/([0-9]+)".r + val rangepattern = "([\\D\\s]*)([0-9]+)-([0-9]+)".r + val intpattern = "([\\D\\s]*)([0-9]+)".r + def bez(b: String): String = if(b.nonEmpty) b else fallbackBezeichnung klassenDef.split(",") .flatMap{ - case rangeStepPattern(von, bis, stepsize) => Range.inclusive(von, bis, stepsize) - case rangepattern(von, bis) => (str2Int(von) to str2Int(bis)) - case intpattern(von) => Seq(str2Int(von)) + case rangeStepPattern(bezeichnung, von, bis, stepsize) => Range.inclusive(von, bis, stepsize).map(i => (bez(bezeichnung), i)) + case rangepattern(bezeichnung, von, bis) => (str2Int(von) to str2Int(bis)).map(i => (bez(bezeichnung), i)) + case intpattern(bezeichnung, von) => Seq((bez(bezeichnung), str2Int(von))) case _ => Seq.empty - }.toList.sorted + }.toList.sortBy(_._2) } - def apply(klassenDef: String): Seq[Altersklasse] = { - apply(parseGrenzen(klassenDef)) + def apply(klassenDef: String, fallbackBezeichnung: String = "Altersklasse"): Seq[Altersklasse] = { + apply(parseGrenzen(klassenDef, fallbackBezeichnung)) } } - case class Altersklasse(alterVon: Int, alterBis: Int) extends DataObject { + case class Altersklasse(bezeichnung: String, alterVon: Int, alterBis: Int) extends DataObject { def matchesAlter(alter: Int): Boolean = ((alterVon == 0 || alter >= alterVon) && (alterBis == 0 || alter <= alterBis)) @@ -482,12 +483,12 @@ package object domain { override def easyprint: String = { if (alterVon > 0 && alterBis > 0) if (alterVon == alterBis) - s"Altersklasse $alterVon" - else s"Altersklasse $alterVon bis $alterBis" + s"$bezeichnung $alterVon" + else s"$bezeichnung $alterVon bis $alterBis" else if (alterVon > 0 && alterBis == 0) - s"Altersklasse ab $alterVon" + s"$bezeichnung ab $alterVon" else - s"Altersklasse bis $alterBis" + s"$bezeichnung bis $alterBis" } override def compare(x: DataObject): Int = x match { diff --git a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala index 132c2907d..5dd013963 100644 --- a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala @@ -149,8 +149,8 @@ ScoreRoutes extends SprayJsonSupport with JsonSupport with AuthSupport with Rout val logodir = new java.io.File(Config.homedir + "/" + encodeFileName(wettkampf.easyprint)) val logofile = PrintUtil.locateLogoFile(logodir) val programmText = wettkampf.programmId match {case 20 => "Kategorie" case _ => "Programm"} - val altersklassen = Altersklasse.parseGrenzen(wettkampf.altersklassen) - val jgAltersklassen = Altersklasse.parseGrenzen(wettkampf.jahrgangsklassen) + val altersklassen = Altersklasse.parseGrenzen(wettkampf.altersklassen, "Altersklasse") + val jgAltersklassen = Altersklasse.parseGrenzen(wettkampf.jahrgangsklassen, "Altersklasse") def riegenZuDurchgang: Map[String, Durchgang] = { val riegen = listRiegenZuWettkampf(wettkampf.id) riegen.map(riege => riege._1 -> riege._3.map(durchgangName => Durchgang(0, durchgangName)).getOrElse(Durchgang())).toMap diff --git a/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala index f7a765bf2..33e2c4183 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala @@ -221,8 +221,8 @@ trait WettkampfOverviewToHtmlRenderer { val silverSum = medallienbedarf.map(p => p._3 + p._7).sum val bronzeSum = medallienbedarf.map(p => p._4 + p._8).sum val auszSum = medallienbedarf.map(p => p._5 + p._9).sum - val altersklassen = Altersklasse(wettkampf.altersklassen).map(ak => s"
  • $ak
  • ").mkString("\n") - val jgAltersklassen = Altersklasse(wettkampf.jahrgangsklassen).map(ak => s"
  • $ak
  • ").mkString("\n") + val altersklassen = Altersklasse(wettkampf.altersklassen).map(ak => s"
  • ${ak.easyprint}
  • ").mkString("\n") + val jgAltersklassen = Altersklasse(wettkampf.jahrgangsklassen).map(ak => s"
  • ${ak.easyprint}
  • ").mkString("\n") val medalrows = s""" Goldmedallie${goldDetails}${goldSum} diff --git a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala index 013bf76b6..e2c0589ea 100644 --- a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala +++ b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala @@ -1,5 +1,6 @@ package ch.seidel.kutu.squad +import ch.seidel.kutu.data.{ByAltersklasse, ByJahrgangsAltersklasse} import ch.seidel.kutu.domain._ case object JGClubGrouper extends RiegenGrouper { @@ -10,10 +11,18 @@ case object JGClubGrouper extends RiegenGrouper { (jgclubGrouper, jgclubGrouper) } - val jgclubGrouper: List[WertungView => String] = List( - x => x.athlet.geschlecht, - x => (x.athlet.gebdat match {case Some(d) => f"$d%tY"; case _ => ""}), - x => x.athlet.verein match {case Some(v) => v.easyprint case None => ""} - ) + def extractJGGrouper(w: WertungView): String = if (w.wettkampf.altersklassen.nonEmpty) { + val value = ByAltersklasse("AK", Altersklasse.parseGrenzen(w.wettkampf.altersklassen, "AK")).analyze(Seq(w)) + value.head.easyprint + } else if (w.wettkampf.jahrgangsklassen.nonEmpty) { + ByAltersklasse("AK", Altersklasse.parseGrenzen(w.wettkampf.jahrgangsklassen, "AK")).analyze(Seq(w)).head.easyprint + } + else + (w.athlet.gebdat match {case Some(d) => f"$d%tY"; case _ => ""}) + val jgclubGrouper: List[WertungView => String] = List( + x => x.athlet.geschlecht, + x => extractJGGrouper(x), + x => x.athlet.verein match {case Some(v) => v.easyprint case None => ""} + ) } \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala index 0e6293aa4..4296349b8 100644 --- a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala @@ -26,8 +26,8 @@ class RanglisteTab(wettkampfmode: BooleanProperty, wettkampf: WettkampfView, ove case _ => "Programm" } - val altersklassen = Altersklasse.parseGrenzen(wettkampf.altersklassen) - val jgAltersklassen = Altersklasse.parseGrenzen(wettkampf.jahrgangsklassen) + val altersklassen = Altersklasse.parseGrenzen(wettkampf.altersklassen, "Altersklasse") + val jgAltersklassen = Altersklasse.parseGrenzen(wettkampf.jahrgangsklassen, "Altersklasse") def riegenZuDurchgang: Map[String, Durchgang] = { val riegen = service.listRiegenZuWettkampf(wettkampf.id) diff --git a/src/test/scala/ch/seidel/kutu/squad/JGClubGrouperSpec.scala b/src/test/scala/ch/seidel/kutu/squad/JGClubGrouperSpec.scala new file mode 100644 index 000000000..25a3431f0 --- /dev/null +++ b/src/test/scala/ch/seidel/kutu/squad/JGClubGrouperSpec.scala @@ -0,0 +1,18 @@ +package ch.seidel.kutu.squad + +import ch.seidel.kutu.data.ByAltersklasse +import ch.seidel.kutu.domain.Altersklasse +import org.scalatest.matchers.should.Matchers +import org.scalatest.wordspec.AnyWordSpec + +class JGClubGrouperSpec extends AnyWordSpec with Matchers { + + "extract Altersklasse" in { + val altersklasse = ByAltersklasse("AK", Altersklasse.parseGrenzen("AK6-10,AK11-20/2,AK25-100/10")) + println(altersklasse.grenzen) + assert(altersklasse.grenzen === List(("AK",6), ("AK",7), ("AK",8), ("AK",9), ("AK",10), + ("AK",11), ("AK",13), ("AK",15), ("AK",17), ("AK",19), + ("AK",25), ("AK",35), ("AK",45), ("AK",55), ("AK",65), ("AK",75), ("AK",85), ("AK",95))) + } + +} From 83aa2946110c87d8a20e180f3395d397d8ab3b6c Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Fri, 7 Apr 2023 16:35:11 +0200 Subject: [PATCH 28/99] fix comparable implementation for ProgrammView --- src/main/scala/ch/seidel/kutu/domain/package.scala | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index e1367ef68..7b9fb8fed 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -600,7 +600,10 @@ package object domain { case Some(p) => p.toPath + " / " + name } - override def compare(o: DataObject): Int = toPath.compareTo(o.asInstanceOf[ProgrammView].toPath) + override def compare(o: DataObject): Int = o match { + case p: ProgrammView => toPath.compareTo(p.toPath) + case _ => easyprint.compareTo(o.easyprint) + } override def toString = s"$toPath" } From e7facf5d4dea55baca0cedac65ad68a1cc085bb2 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Fri, 7 Apr 2023 16:42:22 +0200 Subject: [PATCH 29/99] #660 filter unscheduled gears in wertungen-tab --- .../ch/seidel/kutu/view/WettkampfPage.scala | 4 ++-- .../seidel/kutu/view/WettkampfWertungTab.scala | 17 +++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfPage.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfPage.scala index 98a7c2a1a..55fd3398d 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfPage.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfPage.scala @@ -4,10 +4,10 @@ import ch.seidel.commons.{DisplayablePage, LazyTabPane} import ch.seidel.kutu.KuTuApp import ch.seidel.kutu.domain._ import org.slf4j.LoggerFactory -import scalafx.beans.property.BooleanProperty -import scalafx.scene.control.Tab import scalafx.beans.binding.Bindings._ +import scalafx.beans.property.BooleanProperty import scalafx.event.subscriptions.Subscription +import scalafx.scene.control.Tab object WettkampfPage { val logger = LoggerFactory.getLogger(this.getClass) diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index 95de5834a..e0417430f 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -30,8 +30,6 @@ import scalafx.scene.control.TableView.sfxTableView2jfx import scalafx.scene.control._ import scalafx.scene.input.{Clipboard, KeyEvent} import scalafx.scene.layout._ -import scalafx.scene.paint.Color.Grey -import scalafx.scene.shape.Circle import scalafx.util.converter.{DefaultStringConverter, DoubleStringConverter} import java.util.UUID @@ -70,6 +68,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr case _ => } } + var scheduledGears: List[Disziplin] = List.empty var subscription: Option[Subscription] = None var websocketsubscription: Option[Subscription] = None @@ -98,6 +97,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr def reloadWertungen(extrafilter: (WertungView) => Boolean = defaultFilter) = { athleten. filter(wv => wv.wettkampf.id == wettkampf.id). + filter(w => scheduledGears.isEmpty || scheduledGears.contains(w.wettkampfdisziplin.disziplin )). filter(extrafilter). groupBy(wv => wv.athlet). map(wvg => wvg._2.map(WertungEditor)).toIndexedSeq @@ -117,6 +117,10 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr def rebuildDurchgangFilterList = { val kandidaten = service.getAllKandidatenWertungen(UUID.fromString(wettkampf.uuid.get)) val alleRiegen = RiegenBuilder.mapToGeraeteRiegen(kandidaten) + var newGearList = alleRiegen.flatMap(r => r.disziplin).distinct + newGearList = if(newGearList.isEmpty) disziplinlist else newGearList + scheduledGears = newGearList + val ret = alleRiegen .filter(r => riege.isEmpty || riege.get.sequenceId == r.sequenceId) .filter(r => wertungen.exists { p => r.kandidaten.exists { k => p.head.init.athlet.id == k.id } }) @@ -647,7 +651,6 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr def updateFilteredList(newVal: String, newDurchgang: GeraeteRiege): Unit = { val wkListHadFocus = wkview.focused.value val selected = wkview.selectionModel.value.selectedCells - val sortOrder = wkview.sortOrder.toList val searchQuery = newVal.toUpperCase().split(" ") lastFilter = newVal durchgangFilter = newDurchgang @@ -658,8 +661,9 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr col.sortable.value = true if (col.delegate.isInstanceOf[WKTCAccess]) { val tca = col.delegate.asInstanceOf[WKTCAccess] - if (tca.getIndex > -1 && !col.isVisible()) { - col.setVisible(true) + if (tca.getIndex > -1) { + val v = scheduledGears.contains(disziplinlist(tca.getIndex)) + col.setVisible(v) } } col.columns.foreach(restoreVisibility(_)) @@ -670,7 +674,8 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr if (col.delegate.isInstanceOf[WKTCAccess]) { val tca = col.delegate.asInstanceOf[WKTCAccess] if (tca.getIndex > -1) { - col.setVisible(durchgangFilter.disziplin.isDefined && tca.getIndex == disziplinlist.indexOf(durchgangFilter.disziplin.get)) + val v = scheduledGears.contains(disziplinlist(tca.getIndex)) && durchgangFilter.disziplin.isDefined && tca.getIndex == disziplinlist.indexOf(durchgangFilter.disziplin.get) + col.setVisible(v) } } col.columns.foreach(hideIfNotUsed(_)) From 3f5642e469430417735f9aefa69821b4a55cb662 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Fri, 7 Apr 2023 16:55:52 +0200 Subject: [PATCH 30/99] #87 Fix Turn10 Naming - add Registered Trademark sign --- src/main/resources/dbscripts/AddWKTestPgms-pg.sql | 8 ++++---- src/main/resources/dbscripts/AddWKTestPgms-sqllite.sql | 8 ++++---- src/main/scala/ch/seidel/kutu/domain/package.scala | 2 +- src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala | 4 ++-- src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala | 2 +- .../scala/ch/seidel/kutu/domain/WettkampfSpec.scala | 10 +++++----- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/main/resources/dbscripts/AddWKTestPgms-pg.sql b/src/main/resources/dbscripts/AddWKTestPgms-pg.sql index f1ca4c80f..951f2d610 100644 --- a/src/main/resources/dbscripts/AddWKTestPgms-pg.sql +++ b/src/main/resources/dbscripts/AddWKTestPgms-pg.sql @@ -130,7 +130,7 @@ insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, ,(241, 67, 27, '', '', 1.0, 0, 1, 33, 3, 1, 0, 30, 1) ,(242, 67, 28, '', '', 1.0, 0, 1, 34, 3, 1, 0, 30, 1) ,(243, 67, 1, '', '', 1.0, 0, 1, 35, 3, 1, 0, 30, 1) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; --- Turn10-Verein +-- Turn10®-Verein insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; @@ -141,7 +141,7 @@ insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothin insert into disziplin (id, name) values (2, 'Pferd Pauschen') on conflict (id) do nothing; insert into disziplin (id, name) values (31, 'Ringe') on conflict (id) do nothing; insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(68, 'Turn10-Verein', 0, null, 68, 0, 100, 'eac48376-aeac-4241-8db5-d910bbae82f0', 3) +(68, 'Turn10®-Verein', 0, null, 68, 0, 100, 'eac48376-aeac-4241-8db5-d910bbae82f0', 3) ,(69, 'BS', 0, 68, 69, 0, 100, '197e83c9-7ca7-4bac-96e8-ac8be828f1ab', 3) ,(70, 'OS', 0, 68, 70, 0, 100, 'fbf335c2-89b4-44de-91bf-79f616180fe6', 3) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values @@ -163,14 +163,14 @@ insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, ,(259, 70, 4, '', '', 1.0, 1, 1, 15, 3, 1, 0, 20, 1) ,(260, 70, 2, '', '', 1.0, 1, 0, 16, 3, 1, 0, 20, 1) ,(261, 70, 31, '', '', 1.0, 1, 0, 17, 3, 1, 0, 20, 1) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; --- Turn10-Schule +-- Turn10®-Schule insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(71, 'Turn10-Schule', 0, null, 71, 0, 100, 'f027daf4-c4a3-42e5-8338-16c5beafa479', 2) +(71, 'Turn10®-Schule', 0, null, 71, 0, 100, 'f027daf4-c4a3-42e5-8338-16c5beafa479', 2) ,(72, 'BS', 0, 71, 72, 0, 100, '43c48811-d02c-43fc-ac2c-fada22603543', 2) ,(73, 'OS', 0, 71, 73, 0, 100, '1c444a9a-ea7e-4e4d-9f5f-90d4b00966ff', 2) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values diff --git a/src/main/resources/dbscripts/AddWKTestPgms-sqllite.sql b/src/main/resources/dbscripts/AddWKTestPgms-sqllite.sql index f611c98f1..16d7e41d3 100644 --- a/src/main/resources/dbscripts/AddWKTestPgms-sqllite.sql +++ b/src/main/resources/dbscripts/AddWKTestPgms-sqllite.sql @@ -130,7 +130,7 @@ insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, ,(241, 67, 27, '', '', 1.0, 0, 1, 33, 3, 1, 0, 30, 1) ,(242, 67, 28, '', '', 1.0, 0, 1, 34, 3, 1, 0, 30, 1) ,(243, 67, 1, '', '', 1.0, 0, 1, 35, 3, 1, 0, 30, 1) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; --- Turn10-Verein +-- Turn10®-Verein insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; @@ -141,7 +141,7 @@ insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothin insert into disziplin (id, name) values (2, 'Pferd Pauschen') on conflict (id) do nothing; insert into disziplin (id, name) values (31, 'Ringe') on conflict (id) do nothing; insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(68, 'Turn10-Verein', 0, null, 68, 0, 100, 'eac48376-aeac-4241-8db5-d910bbae82f0', 3) +(68, 'Turn10®-Verein', 0, null, 68, 0, 100, 'eac48376-aeac-4241-8db5-d910bbae82f0', 3) ,(69, 'BS', 0, 68, 69, 0, 100, '197e83c9-7ca7-4bac-96e8-ac8be828f1ab', 3) ,(70, 'OS', 0, 68, 70, 0, 100, 'fbf335c2-89b4-44de-91bf-79f616180fe6', 3) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values @@ -163,14 +163,14 @@ insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, ,(259, 70, 4, '', '', 1.0, 1, 1, 15, 3, 1, 0, 20, 1) ,(260, 70, 2, '', '', 1.0, 1, 0, 16, 3, 1, 0, 20, 1) ,(261, 70, 31, '', '', 1.0, 1, 0, 17, 3, 1, 0, 20, 1) on conflict(id) do update set masculin=excluded.masculin, feminim=excluded.feminim, ord=excluded.ord, dnote=excluded.dnote, min=excluded.min, max=excluded.max, startgeraet=excluded.startgeraet; --- Turn10-Schule +-- Turn10®-Schule insert into disziplin (id, name) values (1, 'Boden') on conflict (id) do nothing; insert into disziplin (id, name) values (5, 'Barren') on conflict (id) do nothing; insert into disziplin (id, name) values (28, 'Balken') on conflict (id) do nothing; insert into disziplin (id, name) values (6, 'Reck') on conflict (id) do nothing; insert into disziplin (id, name) values (4, 'Sprung') on conflict (id) do nothing; insert into programm (id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode) values -(71, 'Turn10-Schule', 0, null, 71, 0, 100, 'f027daf4-c4a3-42e5-8338-16c5beafa479', 2) +(71, 'Turn10®-Schule', 0, null, 71, 0, 100, 'f027daf4-c4a3-42e5-8338-16c5beafa479', 2) ,(72, 'BS', 0, 71, 72, 0, 100, '43c48811-d02c-43fc-ac2c-fada22603543', 2) ,(73, 'OS', 0, 71, 73, 0, 100, '1c444a9a-ea7e-4e4d-9f5f-90d4b00966ff', 2) on conflict(id) do update set name=excluded.name, aggregate=excluded.aggregate, parent_id=excluded.parent_id, ord=excluded.ord, alter_von=excluded.alter_von, alter_bis=excluded.alter_bis, riegenmode=excluded.riegenmode; insert into wettkampfdisziplin (id, programm_id, disziplin_id, kurzbeschreibung, detailbeschreibung, notenfaktor, masculin, feminim, ord, scale, dnote, min, max, startgeraet) values diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 7b9fb8fed..740b4d2ec 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -539,7 +539,7 @@ package object domain { * +-------------------------------------------+--------------------------------------------------------- * Registration| 1/WK | 1/WK, Pgm/(Jg) | mind. 1, max 1/Pgm | 1/WK aut. Tn 1/Pgm * +-------------------------------------------+--------------------------------------------------------- - * Beispiele | GeTu/KuTu/KuTuRi | Turn10 (BS/OS) | TG Allgäu (Pfl./Kür) | ATT (Kraft/Bewg) + * Beispiele | GeTu/KuTu/KuTuRi | Turn10® (BS/OS) | TG Allgäu (Pfl./Kür) | ATT (Kraft/Bewg) * +-------------------------------------------+--------------------------------------------------------- * Rangliste | Sex/Programm | Sex/Programm/Jg | Sex/Programm | Sex/Programm/Jg * | | Sex/Programm/AK | Sex/Programm/AK | diff --git a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala index 5dd013963..c5a3b45ef 100644 --- a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala @@ -32,7 +32,7 @@ ScoreRoutes extends SprayJsonSupport with JsonSupport with AuthSupport with Rout val allGroupers = List( ByWettkampfProgramm(), ByProgramm(), ByWettkampf(), - ByJahrgang(), ByJahrgangsAltersklasse("Turn10 Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), + ByJahrgang(), ByJahrgangsAltersklasse("Turn10® Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), ByGeschlecht(), ByVerband(), ByVerein(), ByAthlet(), ByRiege(), ByDisziplin(), ByJahr() ) @@ -158,7 +158,7 @@ ScoreRoutes extends SprayJsonSupport with JsonSupport with AuthSupport with Rout val byDurchgangMat = ByDurchgang(riegenZuDurchgang) val groupers: List[FilterBy] = { val standardGroupers = List(ByWettkampfProgramm(programmText), ByProgramm(programmText), - ByJahrgang(), ByJahrgangsAltersklasse("Turn10 Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), + ByJahrgang(), ByJahrgangsAltersklasse("Turn10® Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), ByGeschlecht(), ByVerband(), ByVerein(), byDurchgangMat, ByRiege(), ByDisziplin(), ByJahr()) (altersklassen.nonEmpty, jgAltersklassen.nonEmpty) match { diff --git a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala index 4296349b8..8f861bdc7 100644 --- a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala @@ -36,7 +36,7 @@ class RanglisteTab(wettkampfmode: BooleanProperty, wettkampf: WettkampfView, ove override def groupers: List[FilterBy] = { val standardGroupers = List(ByNothing(), ByWettkampfProgramm(programmText), ByProgramm(programmText), - ByJahrgang(), ByJahrgangsAltersklasse("Turn10 Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), + ByJahrgang(), ByJahrgangsAltersklasse("Turn10® Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), ByGeschlecht(), ByVerband(), ByVerein(), ByDurchgang(riegenZuDurchgang), ByRiege(), ByDisziplin()) diff --git a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala index 050ccca42..b7169a14c 100644 --- a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala @@ -127,8 +127,8 @@ class WettkampfSpec extends KuTuBaseSpec { ) printNewWettkampfModeInsertStatements(tgaw) } - "create Turn10" in { - val turn10v = insertWettkampfProgram(s"Turn10-Verein-Test", 3, 20, 1, + "create Turn10®" in { + val Turn10v = insertWettkampfProgram(s"Turn10®-Verein-Test", 3, 20, 1, // Ti: Boden, Balken, Minitramp, Reck/Stufenbarren, Sprung. // Tu: Boden, Barren, Minitramp, Reck, Sprung, Pferd, Ringe List("Boden", "Barren(sex=m)", "Balken(sex=w)", "Minitramp", "Reck", "Stufenbarren(sex=w)", "Sprung", "Pferd Pauschen(sex=m)", "Ringe(sex=m)"), @@ -137,8 +137,8 @@ class WettkampfSpec extends KuTuBaseSpec { , "OS" ) ) - printNewWettkampfModeInsertStatements(turn10v) - val turn10s = insertWettkampfProgram(s"Turn10-Schule-Test", 2, 20, 1, + printNewWettkampfModeInsertStatements(Turn10v) + val Turn10s = insertWettkampfProgram(s"Turn10®-Schule-Test", 2, 20, 1, // Ti: Boden, Balken, Reck, Sprung. // Tu: Boden, Barren, Reck, Sprung. List("Boden", "Barren(sex=m)", "Balken(sex=w)", "Reck", "Sprung"), @@ -147,7 +147,7 @@ class WettkampfSpec extends KuTuBaseSpec { , "OS" ) ) - printNewWettkampfModeInsertStatements(turn10s) + printNewWettkampfModeInsertStatements(Turn10s) } "create GeTu BLTV" in { val btv = insertWettkampfProgram(s"GeTu BLTV-Test", 1, 10,0, From 259fbe5376b77e2efdb688eafc745253ffa38562 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Fri, 7 Apr 2023 16:56:52 +0200 Subject: [PATCH 31/99] #659 Add altersklassen-filter to TurnerScoreTab --- src/main/scala/ch/seidel/kutu/view/TurnerScoreTab.scala | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/view/TurnerScoreTab.scala b/src/main/scala/ch/seidel/kutu/view/TurnerScoreTab.scala index 8a01b8399..9d7b44fd2 100644 --- a/src/main/scala/ch/seidel/kutu/view/TurnerScoreTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/TurnerScoreTab.scala @@ -10,7 +10,13 @@ class TurnerScoreTab(wettkampfmode: BooleanProperty, val verein: Option[Verein], override val title = verein match {case Some(v) => v.easyprint case None => "Vereinsübergreifend"} override def groupers: List[FilterBy] = - List(ByNothing(), ByJahr(), ByWettkampf(), ByWettkampfArt(), ByWettkampfProgramm(), ByProgramm(), ByJahrgang(), ByGeschlecht(), ByVerein(), ByVerband(), ByDisziplin(), ByAthlet()) + List(ByNothing(), ByJahr(), ByWettkampf(), ByWettkampfArt(), ByWettkampfProgramm(), ByProgramm(), + ByJahrgang(), + ByAltersklasse("DTB Altersklasse", Altersklasse.altersklassenDTB), + ByAltersklasse("DTB Kür Altersklasse", Altersklasse.altersklassenDTBKuer), + ByAltersklasse("DTB Pflicht Altersklasse", Altersklasse.altersklassenDTBPflicht), + ByJahrgangsAltersklasse("Turn10® Altersklasse", Altersklasse.altersklassenTurn10), + ByGeschlecht(), ByVerein(), ByVerband(), ByDisziplin(), ByAthlet()) override def getData: Seq[WertungView] = verein match { case Some(v) => service.selectWertungen(vereinId = Some(v.id)) From 66902230d9b74d6f684b26edc162af2bdfb00c1b Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Fri, 7 Apr 2023 17:23:26 +0200 Subject: [PATCH 32/99] #659 Fix score-filter restore with Altersklassen --- src/main/scala/ch/seidel/kutu/data/GroupBy.scala | 6 +++--- .../scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala index 23b55ef6d..74176e7fc 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala @@ -413,14 +413,14 @@ object GroupBy { ByRiege(), ByDisziplin(), ByJahr() ) - def apply(query: String, data: Seq[WertungView]): GroupBy = { + def apply(query: String, data: Seq[WertungView], groupers: List[FilterBy] = allGroupers): GroupBy = { val arguments = query.split("&") val groupby = arguments.filter(x => x.length > 8 && x.startsWith("groupby=")).map(x => URLDecoder.decode(x.split("=")(1), "UTF-8")).headOption val filter = arguments.filter(x => x.length > 7 && x.startsWith("filter=")).map(x => URLDecoder.decode(x.split("=")(1), "UTF-8")) - apply(groupby, filter, data, query.contains("&alphanumeric")) + apply(groupby, filter, data, query.contains("&alphanumeric"), groupers) } - def apply(groupby: Option[String], filter: Iterable[String], data: Seq[WertungView], alphanumeric: Boolean, groupers: List[FilterBy] = allGroupers): GroupBy = { + def apply(groupby: Option[String], filter: Iterable[String], data: Seq[WertungView], alphanumeric: Boolean, groupers: List[FilterBy]): GroupBy = { val filterList = filter.map { flt => val keyvalues = flt.split(":") val key = keyvalues(0) diff --git a/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala index c71e4fc88..5c552a24c 100644 --- a/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala @@ -336,7 +336,7 @@ abstract class DefaultRanglisteTab(wettkampfmode: BooleanProperty, override val def loadFilter(selectedFile: File): Unit = { val ios = new ObjectInputStream(new FileInputStream(selectedFile)) - val grouper = GroupBy(ios.readObject().toString, getData) + val grouper = GroupBy(ios.readObject().toString, getData, groupers) restoreGrouper(grouper) } From 6414cbd56617e2f6ac86bba0ed6714e54b69bddb Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Fri, 7 Apr 2023 21:06:02 +0200 Subject: [PATCH 33/99] #660 fix index oob --- src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index e0417430f..fac38866a 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -279,7 +279,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr onEditCommit = (evt: CellEditEvent[IndexedSeq[WertungEditor], Double]) => { - if (evt.rowValue != null) { + if (evt.rowValue != null && evt.rowValue.size > index) { val disciplin = evt.rowValue(index) if (evt.newValue.toString == "NaN") { disciplin.noteD.value = evt.newValue @@ -322,7 +322,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr prefWidth = 60 editable = !wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin) onEditCommit = (evt: CellEditEvent[IndexedSeq[WertungEditor], Double]) => { - if (evt.rowValue != null) { + if (evt.rowValue != null && evt.rowValue.size > index) { val disciplin = evt.rowValue(index) if (evt.newValue.toString == "NaN") { disciplin.noteD.value = evt.newValue From a166b447465c401c623ba1b5c795eaf8b7013162 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sat, 8 Apr 2023 16:12:27 +0200 Subject: [PATCH 34/99] #659 fix computing altersklasse without birthdate. --- src/main/scala/ch/seidel/kutu/data/GroupBy.scala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala index 74176e7fc..739a279e4 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala @@ -3,6 +3,7 @@ package ch.seidel.kutu.data import ch.seidel.kutu.domain._ import java.net.URLDecoder +import java.sql.Date import java.text.SimpleDateFormat import java.time.{LocalDate, Period} import scala.collection.mutable @@ -327,7 +328,7 @@ case class ByAltersklasse(bezeichnung: String = "GebDat Altersklasse", grenzen: protected override val grouper = (v: WertungView) => { val wkd: LocalDate = v.wettkampf.datum - val gebd: LocalDate = v.athlet.gebdat.get + val gebd: LocalDate = sqlDate2ld(v.athlet.gebdat.getOrElse(Date.valueOf(LocalDate.now()))) val alter = Period.between(gebd, wkd.plusDays(1)).getYears Altersklasse(klassen, alter) } @@ -343,7 +344,7 @@ case class ByJahrgangsAltersklasse(bezeichnung: String = "JG Altersklasse", gren protected override val grouper = (v: WertungView) => { val wkd: LocalDate = v.wettkampf.datum - val gebd: LocalDate = v.athlet.gebdat.get + val gebd: LocalDate = sqlDate2ld(v.athlet.gebdat.getOrElse(Date.valueOf(LocalDate.now()))) val alter = wkd.getYear - gebd.getYear Altersklasse(klassen, alter) } From ad5ce6ec95cd765354da240ef28175a61e514eb7 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sat, 8 Apr 2023 17:32:23 +0200 Subject: [PATCH 35/99] #87 fix shorten-logic for longer program-names --- .../kutu/renderer/RiegenblattToHtmlRenderer.scala | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala index 8e3476b6b..7b1aeeed7 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala @@ -242,8 +242,15 @@ trait RiegenblattToHtmlRenderer { s } else { val words = s.split(" ") - val ll = words.length + l -1; - s.take(ll) + "." + if (words.length > 2) { + if(words(words.length - 1).length < l) { + s"${words(0)}..${words(words.length - 2)} ${words(words.length - 1)}" + } else { + s"${words(0)}..${words(words.length - 1)}" + } + } else { + words.map(_.take(l)).mkString("", " ", ".") + } } } From bf3590bb93f2bd939ae612307e93c8d0eb017c10 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sat, 8 Apr 2023 17:33:24 +0200 Subject: [PATCH 36/99] #660 fix navigation prev/next row - take new row columns editable-states --- .../seidel/commons/AutoCommitTextFieldTableCell.scala | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala b/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala index d28449eee..fd4326373 100644 --- a/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala +++ b/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala @@ -90,6 +90,7 @@ object AutoCommitTextFieldTableCell { val editableColumns = getEditableColums(tableView, selected.row) val remaining = editableColumns.dropWhile(_ != selected.tableColumn) val newSelectedRowIdx = if (selected.getRow == tableView.items.value.size() - 1) 0 else selected.getRow + 1 + val editableColumnsNewSeletedRow = getEditableColums(tableView, newSelectedRowIdx) val ret = () => { if (remaining.size > 1) { val nextEditable = remaining.drop(1).head @@ -109,9 +110,9 @@ object AutoCommitTextFieldTableCell { tableView.scrollToColumn(editableColumns.head) } else { - tableView.selectionModel.value.select(newSelectedRowIdx, editableColumns.head) + tableView.selectionModel.value.select(newSelectedRowIdx, editableColumnsNewSeletedRow.head) tableView.scrollTo(newSelectedRowIdx) - tableView.scrollToColumn(editableColumns.head) + tableView.scrollToColumn(editableColumnsNewSeletedRow.head) } } ret @@ -126,6 +127,7 @@ object AutoCommitTextFieldTableCell { val editableColumns = getEditableColums(tableView, selected.row) val remaining = editableColumns.reverse.dropWhile(_ != selected.tableColumn) val newSelectedRowIdx = if (selected.getRow == 0) tableView.items.value.size() - 1 else selected.getRow - 1 + val editableColumnsNewSeletedRow = getEditableColums(tableView, newSelectedRowIdx) val ret = () => { if (remaining.size > 1) { val nextEditable = remaining.drop(1).head @@ -145,9 +147,9 @@ object AutoCommitTextFieldTableCell { tableView.scrollToColumn(editableColumns.head) } else { - tableView.selectionModel.value.select(newSelectedRowIdx, editableColumns.last) + tableView.selectionModel.value.select(newSelectedRowIdx, editableColumnsNewSeletedRow.last) tableView.scrollTo(newSelectedRowIdx) - tableView.scrollToColumn(editableColumns.last) + tableView.scrollToColumn(editableColumnsNewSeletedRow.last) } } ret From d36ed0593d08ee7764d735eeb9d19c18976a9e5a Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sun, 9 Apr 2023 00:47:31 +0200 Subject: [PATCH 37/99] #660 fix visible gears in scores --- .../ch/seidel/kutu/data/GroupSection.scala | 1004 ++++++++--------- .../seidel/kutu/domain/WertungService.scala | 1001 ++++++++-------- .../scala/ch/seidel/kutu/domain/package.scala | 2 +- .../ch/seidel/kutu/http/ScoreRoutes.scala | 18 +- .../kutu/renderer/ScoreToHtmlRenderer.scala | 10 +- .../kutu/renderer/ScoreToJsonRenderer.scala | 18 +- .../kutu/view/DefaultRanglisteTab.scala | 8 +- .../ch/seidel/kutu/view/RanglisteTab.scala | 6 +- 8 files changed, 1027 insertions(+), 1040 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupSection.scala b/src/main/scala/ch/seidel/kutu/data/GroupSection.scala index d6819eb2b..55a7fc243 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupSection.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupSection.scala @@ -1,513 +1,491 @@ -package ch.seidel.kutu.data - -import java.time._ -import java.time.temporal._ - -import ch.seidel.kutu.domain._ - -import scala.collection.mutable -import scala.collection.mutable.StringBuilder -import scala.math.BigDecimal.{double2bigDecimal, int2bigDecimal} - -object GroupSection { - def programGrouper( w: WertungView): ProgrammView = w.wettkampfdisziplin.programm.aggregatorSubHead - def disziplinGrouper( w: WertungView): (Int, Disziplin) = (w.wettkampfdisziplin.ord, w.wettkampfdisziplin.disziplin) - def groupWertungList(list: Iterable[WertungView]) = { - val groups = list.filter(w => w.showInScoreList).groupBy(programGrouper).map { pw => - (pw._1 -> pw._2.map(disziplinGrouper).toSet[(Int, Disziplin)].toList.sortBy{ d => - d._1 }.map(_._2)) - } - groups - } - - def mapRang(list: Iterable[(DataObject, Resultat, Resultat)]) = { - val rangD = list.toList.map(_._2.noteD).filter(_ > 0).sorted.reverse :+ 0 - val rangE = list.toList.map(_._2.noteE).filter(_ > 0).sorted.reverse :+ 0 - val rangEnd = list.toList.map(_._2.endnote).filter(_ > 0).sorted.reverse :+ 0 - def rang(r: Resultat) = { - val rd = if (rangD.size > 1) rangD.indexOf(r.noteD) + 1 else 0 - val re = if (rangE.size > 1) rangE.indexOf(r.noteE) + 1 else 0 - val rf = if (rangEnd.size > 1) rangEnd.indexOf(r.endnote) + 1 else 0 - Resultat(rd, re, rf) - } - list.map(y => GroupSum(y._1, y._2, y._3, rang(y._2))) - } - def mapAvgRang(list: Iterable[(DataObject, Resultat, Resultat)]) = { - val rangD = list.toList.map(_._3.noteD).filter(_ > 0).sorted.reverse :+ 0 - val rangE = list.toList.map(_._3.noteE).filter(_ > 0).sorted.reverse :+ 0 - val rangEnd = list.toList.map(_._3.endnote).filter(_ > 0).sorted.reverse :+ 0 - def rang(r: Resultat) = { - val rd = if (rangD.nonEmpty) rangD.indexOf(r.noteD) + 1 else 0 - val re = if (rangE.nonEmpty) rangE.indexOf(r.noteE) + 1 else 0 - val rf = if (rangEnd.nonEmpty) rangEnd.indexOf(r.endnote) + 1 else 0 - Resultat(rd, re, rf) - } - list.map(y => GroupSum(y._1, y._2, y._3, rang(y._3))) - } -} - -sealed trait GroupSection { - val groupKey: DataObject - val sum: Resultat - val avg: Resultat - def easyprint: String -} - -case class GroupSum(override val groupKey: DataObject, wertung: Resultat, override val avg: Resultat, rang: Resultat) extends GroupSection { - override val sum: Resultat = wertung - override def easyprint = f"Rang ${rang.easyprint} ${groupKey.easyprint}%40s Punkte ${sum.easyprint}%18s øPunkte ${avg.easyprint}%18s" -} - -sealed trait WKCol { - val text: String - val prefWidth: Int - val styleClass: Seq[String] -} -case class WKLeafCol[T](override val text: String, override val prefWidth: Int, override val styleClass: Seq[String], valueMapper: T => String) extends WKCol -case class WKGroupCol(override val text: String, override val prefWidth: Int, override val styleClass: Seq[String], cols: Seq[WKCol]) extends WKCol - -case class GroupLeaf(override val groupKey: DataObject, list: Iterable[WertungView]) extends GroupSection { - override val sum: Resultat = list.map(_.resultat).reduce(_+_) - override val avg: Resultat = sum / list.size - override def easyprint = groupKey.easyprint + s" $sum, $avg" - val groups = GroupSection.groupWertungList(list).filter(_._2.nonEmpty) -// lazy val wkPerProgramm = list.filter(_.endnote > 0).groupBy { w => w.wettkampf.programmId } - lazy val anzahWettkaempfe = list.filter(_.endnote.nonEmpty).groupBy { w => w.wettkampf }.size // Anzahl Wettkämpfe - val withDNotes = list.filter(w => w.noteD.sum > 0).nonEmpty - val withENotes = list.filter(w => w.wettkampf.programmId != 1).nonEmpty - val isDivided = !(withDNotes || groups.isEmpty) - val divider = if(!isDivided) 1 else groups.head._2.size - - def buildColumns: List[WKCol] = { - val athletCols: List[WKCol] = List( - WKLeafCol[GroupRow](text = "Rang", prefWidth = 20, styleClass = Seq("data"), valueMapper = gr => { - if(gr.auszeichnung) gr.rang.endnote.intValue match { - case 1 => f"${gr.rang.endnote}%3.0f G" - case 2 => f"${gr.rang.endnote}%3.0f S" - case 3 => f"${gr.rang.endnote}%3.0f B" - case _ => f"${gr.rang.endnote}%3.0f *" - } - else f"${gr.rang.endnote}%3.0f" - }), - WKLeafCol[GroupRow](text = "Athlet", prefWidth = 90, styleClass = Seq("data"), valueMapper = gr => { - val a = gr.athlet - f"${a.vorname} ${a.name}" - }), - WKLeafCol[GroupRow](text = "Jahrgang", prefWidth = 90, styleClass = Seq("data"), valueMapper = gr => { - val a = gr.athlet - f"${AthletJahrgang(a.gebdat).jahrgang}" - }), - WKLeafCol[GroupRow](text = "Verein", prefWidth = 90, styleClass = Seq("data"), valueMapper = gr => { - val a = gr.athlet - s"${a.verein.map { _.name }.getOrElse("ohne Verein")}" - }) - ) - - val indexer = Iterator.from(0) - val disziplinCol: List[WKCol] = - if (groups.keySet.size > 1) { - // Mehrere "Programme" => pro Gruppenkey eine Summenspalte bilden - groups.toList.sortBy(gru => gru._1.ord).map { gr => - val (grKey, disziplin) = gr - - def colsum(gr: GroupRow) = - gr.resultate.find { x => - x.title.equals(grKey.easyprint) }.getOrElse( - LeafRow(grKey.easyprint, Resultat(0, 0, 0), Resultat(0, 0, 0), auszeichnung = false)) - - val clDnote = WKLeafCol[GroupRow](text = "D", prefWidth = 60, styleClass = Seq("hintdata"), valueMapper = gr => { - val cs = colsum(gr) - val best = if(cs.sum.noteD > 0 && cs.rang.noteD.toInt == 1) "*" else "" - best + cs.sum.formattedD - }) - val clEnote = WKLeafCol[GroupRow](text = if(withDNotes) "E" else "ø Gerät", prefWidth = 60, styleClass = Seq("hintdata"), valueMapper = gr => { - val cs = colsum(gr) - val best = if(cs.sum.noteE > 0 && cs.rang.noteE.toInt == 1) "*" else "" - val div = Math.max(gr.divider, divider) - if(div == 1) { - best + cs.sum.formattedE - } - else { - best + (cs.sum / div).formattedEnd - } - }) - val clEndnote = WKLeafCol[GroupRow](text = "Endnote", prefWidth = 60, styleClass = Seq("valuedata"), valueMapper = gr => { - val cs = colsum(gr) - val best = if(cs.sum.endnote > 0 && cs.sum.endnote.toInt == 1) "*" else "" - best + cs.sum.formattedEnd - }) - val clRang = WKLeafCol[GroupRow](text = "Rang", prefWidth = 60, styleClass = Seq("hintdata"), valueMapper = gr => { - val cs = colsum(gr) - cs.rang.formattedEnd - }) - val cl: WKCol = WKGroupCol( - text = if(anzahWettkaempfe > 1) { - s"ø aus " + grKey.easyprint - } - else { - grKey.easyprint - } - , prefWidth = 240, styleClass = Seq("hintdata"), cols = { - val withDNotes = list.exists(w => w.noteD.sum > 0) - if(withDNotes) { - Seq(clDnote, clEnote, clEndnote, clRang) - } - else if(withENotes) { - Seq(clEnote, clEndnote, clRang) - } - else { - Seq(clEndnote, clRang) - } - } - ) - cl - } - } - else { - groups.head._2.map { disziplin => - val index = indexer.next() - lazy val clDnote = WKLeafCol[GroupRow](text = "D", prefWidth = 60, styleClass = Seq("hintdata"), valueMapper = gr => { - if (gr.resultate.size > index) { - val best = if (gr.resultate(index).sum.noteD > 0 - && gr.resultate.size > index - && gr.resultate(index).rang.noteD.toInt == 1) - "*" - else - "" - best + gr.resultate(index).sum.formattedD - } else "" - }) - lazy val clEnote = WKLeafCol[GroupRow](text = "E", prefWidth = 60, styleClass = Seq("hintdata"), valueMapper = gr => { - if (gr.resultate.size > index) { - val best = if (gr.resultate(index).sum.noteE > 0 - && gr.resultate.size > index - && gr.resultate(index).rang.noteE.toInt == 1) - "*" - else - "" - best + gr.resultate(index).sum.formattedE - } else "" - }) - lazy val clEndnote = WKLeafCol[GroupRow](text = "Endnote", prefWidth = 60, styleClass = Seq("valuedata"), valueMapper = gr => { - if (gr.resultate.size > index) { - val best = if (gr.resultate(index).sum.endnote > 0 - && gr.resultate.size > index - && gr.resultate(index).rang.endnote.toInt == 1) - "*" - else - "" - best + gr.resultate(index).sum.formattedEnd - } else "" - }) - lazy val clRang = WKLeafCol[GroupRow](text = "Rang", prefWidth = 60, styleClass = Seq("hintdata"), valueMapper = gr => { - if (gr.resultate.size > index) f"${gr.resultate(index).rang.endnote}%3.0f" else "" - }) - val cl = WKGroupCol(text = if(anzahWettkaempfe > 1) { - s"ø aus " + disziplin.name - } - else { - disziplin.name - } - , prefWidth = 240, styleClass = Seq("valuedata"), cols= { - if(withDNotes) { - Seq(clDnote, clEnote, clEndnote, clRang) - } - else { - Seq(clEndnote, clRang) - } - }) - cl - }.toList - } - val sumColAll: List[WKCol] = List( - WKLeafCol[GroupRow]( - text = if(anzahWettkaempfe > 1) { - s"Total ø aus D" - } - else { - "Total D" - } - , prefWidth = 80, styleClass = Seq("hintdata"), valueMapper = gr => { - gr.sum.formattedD - } - ), - WKLeafCol[GroupRow]( - text = if(anzahWettkaempfe > 1) { - if(!isDivided && withDNotes) { - s"Total ø aus E" - } - else { - s"ø Gerät" - } - } - else if(!isDivided && withDNotes) { - "Total E" - } - else { - "ø Gerät" - } - , prefWidth = 80, styleClass = Seq("hintdata"), valueMapper = gr => { - val div = Math.max(gr.divider, divider) - if (div < 2) { - if(gr.sum.noteE > 0 - && gr.rang.noteE.toInt == 1) - "*" + gr.sum.formattedE - else - "" + gr.sum.formattedE - } - else { - (gr.sum / div).formattedEnd - } - } - ), - WKLeafCol[GroupRow]( - text = if(anzahWettkaempfe > 1) { - s"Total ø Punkte" - } - else { - "Total Punkte" - } - , prefWidth = 80, styleClass = Seq("valuedata"), valueMapper = gr => { - gr.sum.formattedEnd - } - ) - ) - - val sumCol: List[WKCol] = List(withDNotes, isDivided || withDNotes, true).zip(sumColAll).filter(v => v._1).map(_._2) - athletCols ++ disziplinCol ++ sumCol - } - - def getTableData(sortAlphabetically: Boolean = false, diszMap: Map[Long,Map[String,List[Disziplin]]]) = { - - val programDiszMap = groups.map(pg => (pg._1, diszMap.map(dmp => (dmp._1, dmp._2.map(dmpg => (dmpg._1, dmpg._2.filter(d => pg._2.contains{d}))))))) - -// def mapToRang(athlWertungen: Iterable[WertungView]) = { -// val grouped = athlWertungen.groupBy { _.athlet }.map { x => -// val r = x._2.map(y => y.resultat).reduce(_+_) -// (x._1, r, r / x._2.size) -// } -// GroupSection.mapRang(grouped).map(r => (r.groupKey.asInstanceOf[AthletView] -> r)).toMap -// } - def mapToAvgRang[A <: DataObject](grp: Iterable[(A, (Resultat, Resultat))]) = { - GroupSection.mapAvgRang(grp.map { d => (d._1, d._2._1, d._2._2) }).map(r => (r.groupKey.asInstanceOf[A] -> r)).toMap - } - def mapToAvgRowSummary(athlWertungen: Iterable[WertungView]): (Resultat, Resultat, Iterable[(Disziplin, Long, Resultat, Resultat, Option[Int], Option[BigDecimal])], Iterable[(ProgrammView, Resultat, Resultat, Option[Int], Option[BigDecimal])], Resultat) = { - val wks = athlWertungen.filter(_.endnote.nonEmpty).groupBy { w => w.wettkampf } - val wksums = wks.map {wk => wk._2.map(w => w.resultat).reduce(_+_)} - val rsum = if(wksums.nonEmpty) wksums.reduce(_+_) else Resultat(0,0,0) - lazy val wksENOrdered = wks.map(wk => wk._1 -> wk._2.toList.sortBy(w => w.resultat.endnote)) - lazy val getuDisziplinGOrder = Map(26L -> 1, 4L -> 2, 6L -> 3) - lazy val jet = LocalDate.now() - lazy val hundredyears = jet.minus(100, ChronoUnit.YEARS) - - def factorizeKuTu(w: WertungView): Long = { - val idx = wksENOrdered(w.wettkampf).indexOf(w) - if(idx < 4) { - 1 - } - else { - val gebdat = w.athlet.gebdat match {case Some(d) => d.toLocalDate case None => hundredyears} - val alterInTagen = jet.toEpochDay - gebdat.toEpochDay - val alterInJahren = alterInTagen / 365 - val altersfaktor = 100L - alterInJahren - val powered = Math.floor(Math.pow(1000, idx)).toLong - powered + altersfaktor - } - } - - def factorizeGeTu(w: WertungView): Long = { - val idx = 4 - getuDisziplinGOrder.getOrElse(w.wettkampfdisziplin.disziplin.id, 4) - val ret = if(idx == 0) { - 1L - } - else { - Math.floor(Math.pow(1000, idx)).toLong - } - ret - } - - val gwksums = wks.map {wk => wk._2.map{w => - val factor = w.wettkampf.programmId match { - case id if(id > 0 && id < 4) => // Athletiktest - 1L - case id if((id > 10 && id < 20) || id == 28) => // KuTu Programm - factorizeKuTu(w) - case id if(id > 19 && id < 27) => // GeTu Kategorie - factorizeGeTu(w) - case id if(id > 30 && id < 41) => // KuTuRi Programm - factorizeKuTu(w) - case _ => 1L - } - w.resultat * 1000000000000L + w.resultat * factor - }.reduce(_+_)} - val gsum = if(gwksums.nonEmpty) gwksums.reduce(_+_) else Resultat(0,0,0) - val avg = if(wksums.nonEmpty) rsum / wksums.size else Resultat(0,0,0) - val gavg = if(wksums.nonEmpty) gsum / wksums.size else Resultat(0,0,0) - val withAuszeichnung = anzahWettkaempfe == 1 && groups.size == 1 && wks.size == 1 - val auszeichnung = if(withAuszeichnung) Some(wks.head._1.auszeichnung) else None - val auszeichnungEndnote = if(withAuszeichnung && wks.head._1.auszeichnungendnote > 0) Some(wks.head._1.auszeichnungendnote) else None - val perDisziplinAvgs = (for { - wettkampf <- wks.keySet.toSeq - ((ord, disziplin), dwertungen) <- wks(wettkampf).groupBy { x => (x.wettkampfdisziplin.ord, x.wettkampfdisziplin.disziplin) } - } - yield { - val prog = dwertungen.head.wettkampf.programmId - val dsums = dwertungen.map {w => w.resultat} - val dsum = if(dsums.nonEmpty) dsums.reduce(_+_) else Resultat(0,0,0) - ((ord, disziplin, prog) -> dsum) - }).groupBy(_._1).map{x => - val xsum = x._2.map(_._2).reduce(_+_) - (x._1, xsum, xsum / x._2.size, auszeichnung, auszeichnungEndnote)} - .toList.sortBy(d => d._1._1) - .map(d => (d._1._2, d._1._3, d._2, d._3, d._4, d._5)) - - val perProgrammAvgs = (for { - wettkampf <- wks.keySet.toSeq - (programm, pwertungen) <- wks(wettkampf).groupBy { _.wettkampfdisziplin.programm.aggregatorSubHead } - psums = pwertungen.map {w => w.resultat} - psum = if(psums.nonEmpty) psums.reduce(_+_) else Resultat(0,0,0) - } - yield { - (programm, psum) - }).groupBy(_._1).map{x => - val xsum = x._2.map(_._2).reduce(_+_) - (x._1, xsum, xsum / x._2.size, auszeichnung, auszeichnungEndnote)} - .toList.sortBy(d => d._1.ord) - (rsum, avg, perDisziplinAvgs, perProgrammAvgs, gavg) - } - - val avgPerAthlet = list.groupBy { x => - x.athlet - }.map { x => - (x._1, mapToAvgRowSummary(x._2)) - }.filter(_._2._1.endnote > 0) - - // Beeinflusst die Total-Rangierung pro Gruppierung - val rangMap: Map[AthletView, GroupSum] = mapToAvgRang(avgPerAthlet.map(rm => rm._1 -> (rm._2._1, rm._2._5))) - lazy val avgDisziplinRangMap = avgPerAthlet.foldLeft(Map[Disziplin, Map[AthletView, (Resultat, Resultat)]]()){(acc, x) => - val (athlet, (sum, avg, disziplinwertungen, programmwertungen, gsum)) = x - disziplinwertungen.foldLeft(acc){(accc, disziplin) => - accc.updated(disziplin._1, accc.getOrElse( - disziplin._1, Map[AthletView, (Resultat, Resultat)]()).updated(athlet, (disziplin._3, disziplin._4))) - } - }.map { d => (d._1 -> mapToAvgRang(d._2)) } - lazy val avgProgrammRangMap = avgPerAthlet.foldLeft(Map[ProgrammView, Map[AthletView, (Resultat, Resultat)]]()){(acc, x) => - val (athlet, (sum, avg, disziplinwertungen, programmwertungen, gsum)) = x - programmwertungen.foldLeft(acc){(accc, programm) => - accc.updated(programm._1, accc.getOrElse( - programm._1, Map[AthletView, (Resultat, Resultat)]()).updated(athlet, (programm._2, programm._3))) - } - }.map { d => (d._1 -> mapToAvgRang(d._2)) } - - val teilnehmer = avgPerAthlet.size - - def mapToGroupSum( - athlet: AthletView, - disziplinResults: Iterable[(Disziplin, Long, Resultat, Resultat, Option[Int], Option[BigDecimal])], - programmResults: Iterable[(ProgrammView, Resultat, Resultat, Option[Int], Option[BigDecimal])]): IndexedSeq[LeafRow] = { - - if(groups.size == 1) { - val dr = disziplinResults.map{w => - val ww = avgDisziplinRangMap(w._1)(athlet) - val rang = ww.rang - //val posproz = 100d * ww.rang.endnote / avgDisziplinRangMap.size - if(anzahWettkaempfe > 1) { - LeafRow(w._1.name, - ww.avg, - rang, - rang.endnote == 1) - } - else { - LeafRow(w._1.name, - ww.sum, - rang, - rang.endnote == 1) - } - }.filter(_.sum.endnote >= 1).toIndexedSeq - athlet.geschlecht match { - case "M" => - programDiszMap(groups.head._1)(disziplinResults.head._2)("M").toIndexedSeq.map{d => - dr.find(lr => lr.title == d.name) match { - case Some(lr) => lr - case None => LeafRow(d.name, Resultat(0,0,0), Resultat(0,0,0), auszeichnung = false) - } - } - case "W" => - programDiszMap(groups.head._1)(disziplinResults.head._2)("W").toIndexedSeq.map{d => - dr.find(lr => lr.title == d.name) match { - case Some(lr) => lr - case None => LeafRow(d.name, Resultat(0,0,0), Resultat(0,0,0), auszeichnung = false) - } - } - case _ => dr; - } - } - else { - programmResults.map{w => - val ww = avgProgrammRangMap(w._1)(athlet) -// val posproz = 100d * ww.rang.endnote / avgProgrammRangMap.size - if(anzahWettkaempfe > 1) { - LeafRow(w._1.easyprint, - ww.avg, - ww.rang, - ww.rang.endnote < 4 && ww.rang.endnote >= 1) - } - else { - LeafRow(w._1.easyprint, - ww.sum, - ww.rang, - ww.rang.endnote < 4 && ww.rang.endnote >= 1) - } - }.filter(_.sum.endnote >= 1).toIndexedSeq - } - } - - val prepared = avgPerAthlet.map {x => - val (athlet, (sum, avg, wd, wp, gsum)) = x - val gsrang = rangMap(athlet) - val posproz = 100d * gsrang.rang.endnote / teilnehmer - val posprom = 10000d * gsrang.rang.endnote / teilnehmer - val gs = mapToGroupSum(athlet, wd, wp) - val divider = if(withDNotes || gs.isEmpty) 1 else gs.count{r => r.sum.endnote > 0} - - GroupRow(athlet, gs, avg, gsrang.rang, - gsrang.rang.endnote > 0 - && (gsrang.rang.endnote < 4 - || (wp.head._4 match { - case Some(auszeichnung) => - if(auszeichnung > 100) { - val ret = posprom <= auszeichnung - ret - } - else { - val ret = posproz <= auszeichnung - ret - } - case None => false}) - || (wp.head._5 match { - case Some(auszeichnung) => - gsrang.sum.endnote / divider >= auszeichnung - case None => false}))) - - }.toList - if(sortAlphabetically) { - prepared.sortBy(_.athlet.easyprint) - } - else{ - prepared/*.filter(_.sum.endnote > 0)*/.sortBy(_.rang.endnote) - } - } -} - -case class GroupNode(override val groupKey: DataObject, next: Iterable[GroupSection]) extends GroupSection { - override val sum: Resultat = next.map(_.sum).reduce(_ + _) - override val avg: Resultat = next.map(_.avg).reduce(_ + _) / next.size - override def easyprint = { - val buffer = new mutable.StringBuilder() - buffer.append(groupKey.easyprint).append("\n") - for (gi <- next) { - buffer.append(gi.easyprint).append("\n") - } - buffer.toString - } -} +package ch.seidel.kutu.data + +import java.time._ +import java.time.temporal._ + +import ch.seidel.kutu.domain._ + +import scala.collection.mutable +import scala.collection.mutable.StringBuilder +import scala.math.BigDecimal.{double2bigDecimal, int2bigDecimal} + +object GroupSection { + def programGrouper( w: WertungView): ProgrammView = w.wettkampfdisziplin.programm.aggregatorSubHead + def disziplinGrouper( w: WertungView): (Int, Disziplin) = (w.wettkampfdisziplin.ord, w.wettkampfdisziplin.disziplin) + def groupWertungList(list: Iterable[WertungView]) = { + val groups = list.filter(w => w.showInScoreList).groupBy(programGrouper).map { pw => + (pw._1 -> pw._2.map(disziplinGrouper).toSet[(Int, Disziplin)].toList.sortBy{ d => + d._1 }.map(_._2)) + } + groups + } + + def mapRang(list: Iterable[(DataObject, Resultat, Resultat)]) = { + val rangD = list.toList.map(_._2.noteD).filter(_ > 0).sorted.reverse :+ 0 + val rangE = list.toList.map(_._2.noteE).filter(_ > 0).sorted.reverse :+ 0 + val rangEnd = list.toList.map(_._2.endnote).filter(_ > 0).sorted.reverse :+ 0 + def rang(r: Resultat) = { + val rd = if (rangD.size > 1) rangD.indexOf(r.noteD) + 1 else 0 + val re = if (rangE.size > 1) rangE.indexOf(r.noteE) + 1 else 0 + val rf = if (rangEnd.size > 1) rangEnd.indexOf(r.endnote) + 1 else 0 + Resultat(rd, re, rf) + } + list.map(y => GroupSum(y._1, y._2, y._3, rang(y._2))) + } + def mapAvgRang(list: Iterable[(DataObject, Resultat, Resultat)]) = { + val rangD = list.toList.map(_._3.noteD).filter(_ > 0).sorted.reverse :+ 0 + val rangE = list.toList.map(_._3.noteE).filter(_ > 0).sorted.reverse :+ 0 + val rangEnd = list.toList.map(_._3.endnote).filter(_ > 0).sorted.reverse :+ 0 + def rang(r: Resultat) = { + val rd = if (rangD.nonEmpty) rangD.indexOf(r.noteD) + 1 else 0 + val re = if (rangE.nonEmpty) rangE.indexOf(r.noteE) + 1 else 0 + val rf = if (rangEnd.nonEmpty) rangEnd.indexOf(r.endnote) + 1 else 0 + Resultat(rd, re, rf) + } + list.map(y => GroupSum(y._1, y._2, y._3, rang(y._3))) + } +} + +sealed trait GroupSection { + val groupKey: DataObject + val sum: Resultat + val avg: Resultat + def easyprint: String +} + +case class GroupSum(override val groupKey: DataObject, wertung: Resultat, override val avg: Resultat, rang: Resultat) extends GroupSection { + override val sum: Resultat = wertung + override def easyprint = f"Rang ${rang.easyprint} ${groupKey.easyprint}%40s Punkte ${sum.easyprint}%18s øPunkte ${avg.easyprint}%18s" +} + +sealed trait WKCol { + val text: String + val prefWidth: Int + val styleClass: Seq[String] +} +case class WKLeafCol[T](override val text: String, override val prefWidth: Int, override val styleClass: Seq[String], valueMapper: T => String) extends WKCol +case class WKGroupCol(override val text: String, override val prefWidth: Int, override val styleClass: Seq[String], cols: Seq[WKCol]) extends WKCol + +case class GroupLeaf(override val groupKey: DataObject, list: Iterable[WertungView]) extends GroupSection { + override val sum: Resultat = list.map(_.resultat).reduce(_+_) + override val avg: Resultat = sum / list.size + override def easyprint = groupKey.easyprint + s" $sum, $avg" + val groups = GroupSection.groupWertungList(list).filter(_._2.nonEmpty) + lazy val anzahWettkaempfe = list.filter(_.endnote.nonEmpty).groupBy { w => w.wettkampf }.size // Anzahl Wettkämpfe + val withDNotes = list.filter(w => w.noteD.sum > 0).nonEmpty + val withENotes = list.filter(w => w.wettkampf.programmId != 1).nonEmpty + val isDivided = !(withDNotes || groups.isEmpty) + val divider = if(!isDivided) 1 else groups.head._2.size + + def buildColumns: List[WKCol] = { + val athletCols: List[WKCol] = List( + WKLeafCol[GroupRow](text = "Rang", prefWidth = 20, styleClass = Seq("data"), valueMapper = gr => { + if(gr.auszeichnung) gr.rang.endnote.intValue match { + case 1 => f"${gr.rang.endnote}%3.0f G" + case 2 => f"${gr.rang.endnote}%3.0f S" + case 3 => f"${gr.rang.endnote}%3.0f B" + case _ => f"${gr.rang.endnote}%3.0f *" + } + else f"${gr.rang.endnote}%3.0f" + }), + WKLeafCol[GroupRow](text = "Athlet", prefWidth = 90, styleClass = Seq("data"), valueMapper = gr => { + val a = gr.athlet + f"${a.vorname} ${a.name}" + }), + WKLeafCol[GroupRow](text = "Jahrgang", prefWidth = 90, styleClass = Seq("data"), valueMapper = gr => { + val a = gr.athlet + f"${AthletJahrgang(a.gebdat).jahrgang}" + }), + WKLeafCol[GroupRow](text = "Verein", prefWidth = 90, styleClass = Seq("data"), valueMapper = gr => { + val a = gr.athlet + s"${a.verein.map { _.name }.getOrElse("ohne Verein")}" + }) + ) + + val indexer = Iterator.from(0) + val disziplinCol: List[WKCol] = + if (groups.keySet.size > 1) { + // Mehrere "Programme" => pro Gruppenkey eine Summenspalte bilden + groups.toList.sortBy(gru => gru._1.ord).map { gr => + val (grKey, disziplin) = gr + + def colsum(gr: GroupRow) = + gr.resultate.find { x => + x.title.equals(grKey.easyprint) }.getOrElse( + LeafRow(grKey.easyprint, Resultat(0, 0, 0), Resultat(0, 0, 0), auszeichnung = false)) + + val clDnote = WKLeafCol[GroupRow](text = "D", prefWidth = 60, styleClass = Seq("hintdata"), valueMapper = gr => { + val cs = colsum(gr) + val best = if(cs.sum.noteD > 0 && cs.rang.noteD.toInt == 1) "*" else "" + best + cs.sum.formattedD + }) + val clEnote = WKLeafCol[GroupRow](text = if(withDNotes) "E" else "ø Gerät", prefWidth = 60, styleClass = Seq("hintdata"), valueMapper = gr => { + val cs = colsum(gr) + val best = if(cs.sum.noteE > 0 && cs.rang.noteE.toInt == 1) "*" else "" + val div = Math.max(gr.divider, divider) + if(div == 1) { + best + cs.sum.formattedE + } + else { + best + (cs.sum / div).formattedEnd + } + }) + val clEndnote = WKLeafCol[GroupRow](text = "Endnote", prefWidth = 60, styleClass = Seq("valuedata"), valueMapper = gr => { + val cs = colsum(gr) + val best = if(cs.sum.endnote > 0 && cs.sum.endnote.toInt == 1) "*" else "" + best + cs.sum.formattedEnd + }) + val clRang = WKLeafCol[GroupRow](text = "Rang", prefWidth = 60, styleClass = Seq("hintdata"), valueMapper = gr => { + val cs = colsum(gr) + cs.rang.formattedEnd + }) + val cl: WKCol = WKGroupCol( + text = if(anzahWettkaempfe > 1) { + s"ø aus " + grKey.easyprint + } + else { + grKey.easyprint + } + , prefWidth = 240, styleClass = Seq("hintdata"), cols = { + val withDNotes = list.exists(w => w.noteD.sum > 0) + if(withDNotes) { + Seq(clDnote, clEnote, clEndnote, clRang) + } + else if(withENotes) { + Seq(clEnote, clEndnote, clRang) + } + else { + Seq(clEndnote, clRang) + } + } + ) + cl + } + } + else { + groups.head._2.map { disziplin => + val index = indexer.next() + lazy val clDnote = WKLeafCol[GroupRow](text = "D", prefWidth = 60, styleClass = Seq("hintdata"), valueMapper = gr => { + if (gr.resultate.size > index) { + val best = if (gr.resultate(index).sum.noteD > 0 + && gr.resultate(index).rang.noteD.toInt == 1) + "*" + else + "" + best + gr.resultate(index).sum.formattedD + } else "" + }) + lazy val clEnote = WKLeafCol[GroupRow](text = "E", prefWidth = 60, styleClass = Seq("hintdata"), valueMapper = gr => { + if (gr.resultate.size > index) { + val best = if (gr.resultate(index).sum.noteE > 0 + && gr.resultate(index).rang.noteE.toInt == 1) + "*" + else + "" + best + gr.resultate(index).sum.formattedE + } else "" + }) + lazy val clEndnote = WKLeafCol[GroupRow](text = "Endnote", prefWidth = 60, styleClass = Seq("valuedata"), valueMapper = gr => { + if (gr.resultate.size > index) { + val best = if (gr.resultate(index).sum.endnote > 0 + && gr.resultate(index).rang.endnote.toInt == 1) + "*" + else + "" + best + gr.resultate(index).sum.formattedEnd + } else "" + }) + lazy val clRang = WKLeafCol[GroupRow](text = "Rang", prefWidth = 60, styleClass = Seq("hintdata"), valueMapper = gr => { + if (gr.resultate.size > index) f"${gr.resultate(index).rang.endnote}%3.0f" else "" + }) + val cl = WKGroupCol(text = if(anzahWettkaempfe > 1) { + s"ø aus " + disziplin.name + } + else { + disziplin.name + } + , prefWidth = 240, styleClass = Seq("valuedata"), cols= { + if(withDNotes) { + Seq(clDnote, clEnote, clEndnote, clRang) + } + else { + Seq(clEndnote, clRang) + } + }) + cl + }.toList + } + val sumColAll: List[WKCol] = List( + WKLeafCol[GroupRow]( + text = if(anzahWettkaempfe > 1) { + s"Total ø aus D" + } + else { + "Total D" + } + , prefWidth = 80, styleClass = Seq("hintdata"), valueMapper = gr => { + gr.sum.formattedD + } + ), + WKLeafCol[GroupRow]( + text = if(anzahWettkaempfe > 1) { + if(!isDivided && withDNotes) { + s"Total ø aus E" + } + else { + s"ø Gerät" + } + } + else if(!isDivided && withDNotes) { + "Total E" + } + else { + "ø Gerät" + } + , prefWidth = 80, styleClass = Seq("hintdata"), valueMapper = gr => { + val div = Math.max(gr.divider, divider) + if (div < 2) { + if(gr.sum.noteE > 0 + && gr.rang.noteE.toInt == 1) + "*" + gr.sum.formattedE + else + "" + gr.sum.formattedE + } + else { + (gr.sum / div).formattedEnd + } + } + ), + WKLeafCol[GroupRow]( + text = if(anzahWettkaempfe > 1) { + s"Total ø Punkte" + } + else { + "Total Punkte" + } + , prefWidth = 80, styleClass = Seq("valuedata"), valueMapper = gr => { + gr.sum.formattedEnd + } + ) + ) + + val sumCol: List[WKCol] = List(withDNotes, isDivided || withDNotes, true).zip(sumColAll).filter(v => v._1).map(_._2) + athletCols ++ disziplinCol ++ sumCol + } + + def getTableData(sortAlphabetically: Boolean = false) = { + + def mapToAvgRang[A <: DataObject](grp: Iterable[(A, (Resultat, Resultat))]) = { + GroupSection.mapAvgRang(grp.map { d => (d._1, d._2._1, d._2._2) }).map(r => (r.groupKey.asInstanceOf[A] -> r)).toMap + } + def mapToAvgRowSummary(athlWertungen: Iterable[WertungView]): (Resultat, Resultat, Iterable[(Disziplin, Long, Resultat, Resultat, Option[Int], Option[BigDecimal])], Iterable[(ProgrammView, Resultat, Resultat, Option[Int], Option[BigDecimal])], Resultat) = { + val wks = athlWertungen.filter(_.endnote.nonEmpty).groupBy { w => w.wettkampf } + val wksums = wks.map {wk => wk._2.map(w => w.resultat).reduce(_+_)} + val rsum = if(wksums.nonEmpty) wksums.reduce(_+_) else Resultat(0,0,0) + lazy val wksENOrdered = wks.map(wk => wk._1 -> wk._2.toList.sortBy(w => w.resultat.endnote)) + lazy val getuDisziplinGOrder = Map(26L -> 1, 4L -> 2, 6L -> 3) + lazy val jet = LocalDate.now() + lazy val hundredyears = jet.minus(100, ChronoUnit.YEARS) + + def factorizeKuTu(w: WertungView): Long = { + val idx = wksENOrdered(w.wettkampf).indexOf(w) + if(idx < 4) { + 1 + } + else { + val gebdat = w.athlet.gebdat match {case Some(d) => d.toLocalDate case None => hundredyears} + val alterInTagen = jet.toEpochDay - gebdat.toEpochDay + val alterInJahren = alterInTagen / 365 + val altersfaktor = 100L - alterInJahren + val powered = Math.floor(Math.pow(1000, idx)).toLong + powered + altersfaktor + } + } + + def factorizeGeTu(w: WertungView): Long = { + val idx = 4 - getuDisziplinGOrder.getOrElse(w.wettkampfdisziplin.disziplin.id, 4) + val ret = if(idx == 0) { + 1L + } + else { + Math.floor(Math.pow(1000, idx)).toLong + } + ret + } + + val gwksums = wks.map {wk => wk._2.map{w => + val factor = w.wettkampf.programmId match { + case id if(id > 0 && id < 4) => // Athletiktest + 1L + case id if((id > 10 && id < 20) || id == 28) => // KuTu Programm + factorizeKuTu(w) + case id if(id > 19 && id < 27) => // GeTu Kategorie + factorizeGeTu(w) + case id if(id > 30 && id < 41) => // KuTuRi Programm + factorizeKuTu(w) + case _ => 1L + } + w.resultat * 1000000000000L + w.resultat * factor + }.reduce(_+_)} + val gsum = if(gwksums.nonEmpty) gwksums.reduce(_+_) else Resultat(0,0,0) + val avg = if(wksums.nonEmpty) rsum / wksums.size else Resultat(0,0,0) + val gavg = if(wksums.nonEmpty) gsum / wksums.size else Resultat(0,0,0) + val withAuszeichnung = anzahWettkaempfe == 1 && groups.size == 1 && wks.size == 1 + val auszeichnung = if(withAuszeichnung) Some(wks.head._1.auszeichnung) else None + val auszeichnungEndnote = if(withAuszeichnung && wks.head._1.auszeichnungendnote > 0) Some(wks.head._1.auszeichnungendnote) else None + val perDisziplinAvgs = (for { + wettkampf <- wks.keySet.toSeq + ((ord, disziplin), dwertungen) <- wks(wettkampf).groupBy { x => (x.wettkampfdisziplin.ord, x.wettkampfdisziplin.disziplin) } + } + yield { + val prog = dwertungen.head.wettkampf.programmId + val dsums = dwertungen.map {w => w.resultat} + val dsum = if(dsums.nonEmpty) dsums.reduce(_+_) else Resultat(0,0,0) + ((ord, disziplin, prog) -> dsum) + }).groupBy(_._1).map{x => + val xsum = x._2.map(_._2).reduce(_+_) + (x._1, xsum, xsum / x._2.size, auszeichnung, auszeichnungEndnote)} + .toList.sortBy(d => d._1._1) + .map(d => (d._1._2, d._1._3, d._2, d._3, d._4, d._5)) + + val perProgrammAvgs = (for { + wettkampf <- wks.keySet.toSeq + (programm, pwertungen) <- wks(wettkampf).groupBy { _.wettkampfdisziplin.programm.aggregatorSubHead } + psums = pwertungen.map {w => w.resultat} + psum = if(psums.nonEmpty) psums.reduce(_+_) else Resultat(0,0,0) + } + yield { + (programm, psum) + }).groupBy(_._1).map{x => + val xsum = x._2.map(_._2).reduce(_+_) + (x._1, xsum, xsum / x._2.size, auszeichnung, auszeichnungEndnote)} + .toList.sortBy(d => d._1.ord) + (rsum, avg, perDisziplinAvgs, perProgrammAvgs, gavg) + } + + val avgPerAthlet = list.groupBy { x => + x.athlet + }.map { x => + (x._1, mapToAvgRowSummary(x._2)) + }.filter(_._2._1.endnote > 0) + + // Beeinflusst die Total-Rangierung pro Gruppierung + val rangMap: Map[AthletView, GroupSum] = mapToAvgRang(avgPerAthlet.map(rm => rm._1 -> (rm._2._1, rm._2._5))) + lazy val avgDisziplinRangMap = avgPerAthlet.foldLeft(Map[Disziplin, Map[AthletView, (Resultat, Resultat)]]()){(acc, x) => + val (athlet, (sum, avg, disziplinwertungen, programmwertungen, gsum)) = x + disziplinwertungen.foldLeft(acc){(accc, disziplin) => + accc.updated(disziplin._1, accc.getOrElse( + disziplin._1, Map[AthletView, (Resultat, Resultat)]()).updated(athlet, (disziplin._3, disziplin._4))) + } + }.map { d => (d._1 -> mapToAvgRang(d._2)) } + lazy val avgProgrammRangMap = avgPerAthlet.foldLeft(Map[ProgrammView, Map[AthletView, (Resultat, Resultat)]]()){(acc, x) => + val (athlet, (sum, avg, disziplinwertungen, programmwertungen, gsum)) = x + programmwertungen.foldLeft(acc){(accc, programm) => + accc.updated(programm._1, accc.getOrElse( + programm._1, Map[AthletView, (Resultat, Resultat)]()).updated(athlet, (programm._2, programm._3))) + } + }.map { d => (d._1 -> mapToAvgRang(d._2)) } + + val teilnehmer = avgPerAthlet.size + + def mapToGroupSum( + athlet: AthletView, + disziplinResults: Iterable[(Disziplin, Long, Resultat, Resultat, Option[Int], Option[BigDecimal])], + programmResults: Iterable[(ProgrammView, Resultat, Resultat, Option[Int], Option[BigDecimal])]): IndexedSeq[LeafRow] = { + + if(groups.size == 1) { + val dr = disziplinResults.map{w => + val ww = avgDisziplinRangMap(w._1)(athlet) + val rang = ww.rang + //val posproz = 100d * ww.rang.endnote / avgDisziplinRangMap.size + if(anzahWettkaempfe > 1) { + LeafRow(w._1.name, + ww.avg, + rang, + rang.endnote == 1) + } + else { + LeafRow(w._1.name, + ww.sum, + rang, + rang.endnote == 1) + } + } + .filter(_.sum.endnote > 0) + .toIndexedSeq + groups.head._2.toIndexedSeq.map{d => + dr.find(lr => lr.title == d.name) match { + case Some(lr) => lr + case None => LeafRow(d.name, Resultat(0,0,0), Resultat(0,0,0), auszeichnung = false) + } + }.distinct + } + else { + programmResults.map{w => + val ww = avgProgrammRangMap(w._1)(athlet) +// val posproz = 100d * ww.rang.endnote / avgProgrammRangMap.size + if(anzahWettkaempfe > 1) { + LeafRow(w._1.easyprint, + ww.avg, + ww.rang, + ww.rang.endnote < 4 && ww.rang.endnote >= 1) + } + else { + LeafRow(w._1.easyprint, + ww.sum, + ww.rang, + ww.rang.endnote < 4 && ww.rang.endnote >= 1) + } + }.filter(_.sum.endnote >= 1).toIndexedSeq + } + } + + val prepared = avgPerAthlet.map {x => + val (athlet, (sum, avg, wd, wp, gsum)) = x + val gsrang = rangMap(athlet) + val posproz = 100d * gsrang.rang.endnote / teilnehmer + val posprom = 10000d * gsrang.rang.endnote / teilnehmer + val gs = mapToGroupSum(athlet, wd, wp) + val divider = if(withDNotes || gs.isEmpty) 1 else gs.count{r => r.sum.endnote > 0} + + GroupRow(athlet, gs, avg, gsrang.rang, + gsrang.rang.endnote > 0 + && (gsrang.rang.endnote < 4 + || (wp.head._4 match { + case Some(auszeichnung) => + if(auszeichnung > 100) { + val ret = posprom <= auszeichnung + ret + } + else { + val ret = posproz <= auszeichnung + ret + } + case None => false}) + || (wp.head._5 match { + case Some(auszeichnung) => + gsrang.sum.endnote / divider >= auszeichnung + case None => false}))) + + }.toList + if(sortAlphabetically) { + prepared.sortBy(_.athlet.easyprint) + } + else{ + prepared/*.filter(_.sum.endnote > 0)*/.sortBy(_.rang.endnote) + } + } +} + +case class GroupNode(override val groupKey: DataObject, next: Iterable[GroupSection]) extends GroupSection { + override val sum: Resultat = next.map(_.sum).reduce(_ + _) + override val avg: Resultat = next.map(_.avg).reduce(_ + _) / next.size + override def easyprint = { + val buffer = new mutable.StringBuilder() + buffer.append(groupKey.easyprint).append("\n") + for (gi <- next) { + buffer.append(gi.easyprint).append("\n") + } + buffer.toString + } +} diff --git a/src/main/scala/ch/seidel/kutu/domain/WertungService.scala b/src/main/scala/ch/seidel/kutu/domain/WertungService.scala index d717db5c0..2475282db 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WertungService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WertungService.scala @@ -1,490 +1,513 @@ -package ch.seidel.kutu.domain - -import java.util.UUID -import java.util.concurrent.TimeUnit - -import ch.seidel.kutu.Config -import ch.seidel.kutu.akka.AthletWertungUpdated -import ch.seidel.kutu.http.WebSocketClient -import org.slf4j.LoggerFactory -import slick.jdbc.SQLiteProfile.api._ - -import scala.concurrent.ExecutionContext.Implicits.global -import scala.concurrent.{Await, Future} -import scala.concurrent.duration.Duration - -object WertungServiceBestenResult { - private val logger = LoggerFactory.getLogger(this.getClass) - - private var bestenResults = Map[String,WertungView]() - private var shouldResetBestenResults = false - - def putWertungToBestenResults(wertung: WertungView): Unit = { - bestenResults = bestenResults.updated(s"${wertung.athlet.id}:${wertung.wettkampfdisziplin.id}", wertung) - logger.info(s"actually best-scored: \n${bestenResults.mkString("\n")}") - } - - def getBestenResults = { - bestenResults -/* Athlet, Disziplin, Wertung (Endnote) - .map(w =>(w._2.athlet.easyprint, w._2.wettkampfdisziplin.disziplin.name, w._2.endnote)) - .sortBy(_._3) - */ - .map(_._2) - .toList - } - - def resetBestenResults: Unit = { - shouldResetBestenResults = true; - } - - def cleanBestenResults: Unit = { - if(shouldResetBestenResults) { - bestenResults = Map[String,WertungView]() - shouldResetBestenResults = false - } - } -} - -abstract trait WertungService extends DBService with WertungResultMapper with DisziplinService with RiegenService { - private val logger = LoggerFactory.getLogger(this.getClass) - import WertungServiceBestenResult._ - - def selectWertungen(vereinId: Option[Long] = None, athletId: Option[Long] = None, wettkampfId: Option[Long] = None, disziplinId: Option[Long] = None, wkuuid: Option[String] = None): Seq[WertungView] = { - implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() - val where = "where " + (athletId match { - case None => "1=1" - case Some(id) => s"a.id = $id" - }) + " and " + (vereinId match { - case None => "1=1" - case Some(id) => s"v.id = $id" - }) + " and " + (wettkampfId match { - case None => "1=1" - case Some(id) => s"wk.id = $id" - }) + " and " + (disziplinId match { - case None => "1=1" - case Some(id) => s"d.id = $id" - }) + " and " + (wkuuid match { - case None => "1=1" - case Some(uuid) => s"wk.uuid = '$uuid'" - }) - val starting = if(athletId.isEmpty) "" else "inner join riege rg on (rg.wettkampf_id = w.wettkampf_id and rg.name in (w.riege, w.riege2) and rg.start > 0)" - Await.result(database.run{( - sql""" - SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, - w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 - FROM wertung w - inner join athlet a on (a.id = w.athlet_id) - left outer join verein v on (a.verein = v.id) - inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) - - inner join disziplin d on (d.id = wd.disziplin_id) - inner join programm p on (p.id = wd.programm_id) - inner join wettkampf wk on (wk.id = w.wettkampf_id) - #$where - order by wd.programm_id, wd.ord - """.as[WertungView]).withPinnedSession - }, Duration.Inf) - } - - def getWertung(id: Long): WertungView = { - implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() - Await.result(database.run{( - sql""" - SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, - w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 - FROM wertung w - inner join athlet a on (a.id = w.athlet_id) - left outer join verein v on (a.verein = v.id) - inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) - inner join disziplin d on (d.id = wd.disziplin_id) - inner join programm p on (p.id = wd.programm_id) - inner join wettkampf wk on (wk.id = w.wettkampf_id) - where w.id = ${id} - order by wd.programm_id, wd.ord - """.as[WertungView]).withPinnedSession - }, Duration.Inf).head - } - - def getCurrentWertung(wertung: Wertung): Option[WertungView] = { - implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() - - Await.result(database.run{( - sql""" - SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, - w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 - FROM wertung w - inner join athlet a on (a.id = w.athlet_id) - left outer join verein v on (a.verein = v.id) - inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) - inner join disziplin d on (d.id = wd.disziplin_id) - inner join programm p on (p.id = wd.programm_id) - inner join wettkampf wk on (wk.id = w.wettkampf_id) - where a.id = ${wertung.athletId} - and wk.uuid = ${wertung.wettkampfUUID} - and wd.id = ${wertung.wettkampfdisziplinId} - """.as[WertungView]).withPinnedSession - }, Duration.Inf).headOption - } - - def updateOrinsertWertungenZuWettkampf(wettkampf: Wettkampf, wertungen: Iterable[Wertung]) = { - val insertWertungenAction = DBIO.sequence(for { - w <- wertungen - } yield { - sqlu""" - insert into wertung - (athlet_Id, wettkampfdisziplin_Id, wettkampf_Id, note_d, note_e, endnote, riege, riege2) - values (${w.athletId}, ${w.wettkampfdisziplinId}, ${w.wettkampfId}, ${w.noteD}, ${w.noteE}, ${w.endnote}, ${w.riege}, ${w.riege2}) - """ - }) - - val process = DBIO.seq( - sqlu""" - delete from wertung where wettkampf_id=${wettkampf.id} - """>> - sqlu""" delete from riege - WHERE wettkampf_id=${wettkampf.id} and not exists ( - SELECT 1 FROM wertung w - WHERE w.wettkampf_id=${wettkampf.id} - and (w.riege=riege.name or w.riege2=riege.name) - ) - """>> - insertWertungenAction - ) - - Await.result(database.run{process.transactionally}, Duration.Inf) - wertungen.size - } - - def updateOrinsertWertungen(wertungen: Iterable[Wertung]) = { - val process = DBIO.sequence(for { - w <- wertungen - } yield { - sqlu""" - delete from wertung where - athlet_Id=${w.athletId} and wettkampfdisziplin_Id=${w.wettkampfdisziplinId} and wettkampf_Id=${w.wettkampfId} - """>> - sqlu""" - insert into wertung - (athlet_Id, wettkampfdisziplin_Id, wettkampf_Id, note_d, note_e, endnote, riege, riege2) - values (${w.athletId}, ${w.wettkampfdisziplinId}, ${w.wettkampfId}, ${w.noteD}, ${w.noteE}, ${w.endnote}, ${w.riege}, ${w.riege2}) - """>> - sqlu""" delete from riege - WHERE wettkampf_id=${w.id} and not exists ( - SELECT 1 FROM wertung w - WHERE w.wettkampf_id=${w.id} - and (w.riege=riege.name or w.riege2=riege.name) - ) - """ - - }) - Await.result(database.run{process.transactionally}, Duration.Inf) - wertungen.size - } - - def updateOrinsertWertung(w: Wertung) = { - Await.result(database.run(DBIO.sequence(Seq( - sqlu""" - delete from wertung where - athlet_Id=${w.athletId} and wettkampfdisziplin_Id=${w.wettkampfdisziplinId} and wettkampf_Id=${w.wettkampfId} - """, - - sqlu""" - insert into wertung - (athlet_Id, wettkampfdisziplin_Id, wettkampf_Id, note_d, note_e, endnote, riege, riege2) - values (${w.athletId}, ${w.wettkampfdisziplinId}, ${w.wettkampfId}, ${w.noteD}, ${w.noteE}, ${w.endnote}, ${w.riege}, ${w.riege2}) - """, - - sqlu""" delete from riege - WHERE wettkampf_id=${w.id} and not exists ( - SELECT 1 FROM wertung w - WHERE w.wettkampf_id=${w.id} - and (w.riege=riege.name or w.riege2=riege.name) - ) - """ - )).transactionally), Duration.Inf) - } - - def updateWertung(w: Wertung): WertungView = { - Await.result(updateWertungAsync(w), Duration.Inf) - } - - def updateAllWertungenAsync(ws: Seq[Wertung]): Future[Seq[WertungView]] = { - implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() - implicit val mapper = getAthletViewResult - val ret = database.run(DBIO.sequence(for { - w <- ws - } yield { - sqlu""" UPDATE wertung - SET note_d=${w.noteD}, note_e=${w.noteE}, endnote=${w.endnote}, riege=${w.riege}, riege2=${w.riege2} - WHERE id=${w.id} - """>> - sqlu""" DELETE from riege - WHERE wettkampf_id=${w.id} and not exists ( - SELECT 1 FROM wertung w - WHERE w.wettkampf_id=${w.id} - and (w.riege=name or w.riege2=name) - ) - """>> - sql""" - SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, - w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 - FROM wertung w - inner join athlet a on (a.id = w.athlet_id) - left outer join verein v on (a.verein = v.id) - inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) - inner join disziplin d on (d.id = wd.disziplin_id) - inner join programm p on (p.id = wd.programm_id) - inner join wettkampf wk on (wk.id = w.wettkampf_id) - WHERE w.id=${w.id} - order by wd.programm_id, wd.ord - """.as[WertungView].head - }).transactionally) - - ret - } - - def updateWertungAsync(w: Wertung): Future[WertungView] = { - implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() - implicit val mapper = getAthletViewResult - val ret = database.run(( - sqlu""" UPDATE wertung - SET note_d=${w.noteD}, note_e=${w.noteE}, endnote=${w.endnote}, riege=${w.riege}, riege2=${w.riege2} - WHERE id=${w.id} - """>> - - sqlu""" DELETE from riege - WHERE wettkampf_id=${w.id} and not exists ( - SELECT 1 FROM wertung w - WHERE w.wettkampf_id=${w.id} - and (w.riege=name or w.riege2=name) - ) - """>> - sql""" - SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, - w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 - FROM wertung w - inner join athlet a on (a.id = w.athlet_id) - left outer join verein v on (a.verein = v.id) - inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) - inner join disziplin d on (d.id = wd.disziplin_id) - inner join programm p on (p.id = wd.programm_id) - inner join wettkampf wk on (wk.id = w.wettkampf_id) - WHERE w.id=${w.id} - order by wd.programm_id, wd.ord - """.as[WertungView].head).transactionally) - - ret.map{wv => - cleanBestenResults - if(wv.endnote.sum >= Config.bestenlisteSchwellwert) { - putWertungToBestenResults(wv) - } - val awu = AthletWertungUpdated(wv.athlet, wv.toWertung, wv.wettkampf.uuid.get, "", wv.wettkampfdisziplin.disziplin.id, wv.wettkampfdisziplin.programm.easyprint) - WebSocketClient.publish(awu) - wv - } - } - - @throws(classOf[Exception]) // called from mobile-client via coordinator-actor - def updateWertungSimple(w: Wertung): Wertung = { - val notenspez = readWettkampfDisziplinView(w.wettkampfdisziplinId) - val wv = notenspez.verifiedAndCalculatedWertung(w) - if (notenspez.isDNoteUsed && wv.noteD != w.noteD) { - throw new IllegalArgumentException(s"Erfasster D-Wert: ${w.noteDasText}, erlaubter D-Wert: ${wv.noteDasText}") - } - if (wv.noteE != w.noteE) { - throw new IllegalArgumentException(s"Erfasster E-Wert: ${w.noteEasText}, erlaubter E-Wert: ${wv.noteEasText}") - } - Await.result(database.run(DBIO.sequence(Seq(sqlu""" - UPDATE wertung - SET note_d=${wv.noteD}, note_e=${wv.noteE}, endnote=${wv.endnote}, riege=${wv.riege}, riege2=${wv.riege2} - WHERE - athlet_Id=${wv.athletId} and wettkampfdisziplin_Id=${wv.wettkampfdisziplinId} and wettkampf_Id=${wv.wettkampfId} - """//.transactionally - )) - ), Duration(5, TimeUnit.SECONDS)) - wv - } - - @throws(classOf[Exception]) // called from rich-client-app via ResourceExchanger - def updateWertungWithIDMapping(w: Wertung): Wertung = { - val wv = readWettkampfDisziplinView(w.wettkampfdisziplinId).verifiedAndCalculatedWertung(w) - val wvId = Await.result(database.run((for { - updated <- sqlu""" - UPDATE wertung - SET note_d=${wv.noteD}, note_e=${wv.noteE}, endnote=${wv.endnote}, riege=${wv.riege}, riege2=${wv.riege2} - WHERE - athlet_Id=${wv.athletId} and wettkampfdisziplin_Id=${wv.wettkampfdisziplinId} and wettkampf_Id=${wv.wettkampfId} - """ - wvId <- sql""" - SELECT id FROM wertung - WHERE - athlet_Id=${wv.athletId} and wettkampfdisziplin_Id=${wv.wettkampfdisziplinId} and wettkampf_Id=${wv.wettkampfId} - """.as[Long] - } yield { - wvId - }).transactionally - ), Duration.Inf).head - val result = wv.copy(id = wvId) - result - } - - @throws(classOf[Exception]) // called from rich-client-app via ResourceExchanger - def updateWertungWithIDMapping(ws: Seq[Wertung]): Seq[Wertung] = { - val wvs = ws.map(w => readWettkampfDisziplinView(w.wettkampfdisziplinId).verifiedAndCalculatedWertung(w)) - val wvId: Seq[Long] = Await.result(database.run(DBIO.sequence(for { - wv <- wvs - } yield { - sqlu""" - UPDATE wertung - SET note_d=${wv.noteD}, note_e=${wv.noteE}, endnote=${wv.endnote}, riege=${wv.riege}, riege2=${wv.riege2} - WHERE - athlet_Id=${wv.athletId} and wettkampfdisziplin_Id=${wv.wettkampfdisziplinId} and wettkampf_Id=${wv.wettkampfId} - """>> - sql""" - SELECT id FROM wertung - WHERE - athlet_Id=${wv.athletId} and wettkampfdisziplin_Id=${wv.wettkampfdisziplinId} and wettkampf_Id=${wv.wettkampfId} - """.as[Long].head - }).transactionally - ), Duration.Inf) - val result = wvs.zip(wvId).map{z => z._1.copy(id = z._2)} - result - } - - def listAthletenWertungenZuProgramm(progids: Seq[Long], wettkampf: Long, riege: String = "%") = { - Await.result(database.run{ - implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() - (sql""" - SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, - w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 - FROM wertung w - inner join athlet a on (a.id = w.athlet_id) - left outer join verein v on (a.verein = v.id) - inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) - inner join disziplin d on (d.id = wd.disziplin_id) - inner join programm p on (p.id = wd.programm_id) - inner join wettkampf wk on (wk.id = w.wettkampf_id) - where wd.programm_id in (#${progids.mkString(",")}) - and w.wettkampf_id = $wettkampf - and ($riege = '%' or w.riege = $riege or w.riege2 = $riege) - order by wd.programm_id, wd.ord - """.as[WertungView]).withPinnedSession}, Duration.Inf) - } - - def listAthletWertungenZuWettkampf(athletId: Long, wettkampf: Long) = { - Await.result(database.run{ - implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() - (sql""" - SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, - wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, - w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 - FROM wertung w - inner join athlet a on (a.id = w.athlet_id) - left outer join verein v on (a.verein = v.id) - inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) - inner join disziplin d on (d.id = wd.disziplin_id) - inner join programm p on (p.id = wd.programm_id) - inner join wettkampf wk on (wk.id = w.wettkampf_id) - where w.athlet_id = $athletId - and w.wettkampf_id = $wettkampf - order by wd.programm_id, wd.ord - """.as[WertungView]).withPinnedSession - }, Duration.Inf) - } - - def getAllKandidatenWertungen(competitionUUId: UUID) = { - val driver = selectWertungen(wkuuid = Some(competitionUUId.toString())).groupBy { x => x.athlet }.map(_._2).toList - val competitionId = if (driver.isEmpty || driver.head.isEmpty) { - 0 - } else { - driver.head.head.wettkampf.id - } - - val programme = driver.flatten.map(x => x.wettkampfdisziplin.programm).foldLeft(Seq[ProgrammView]()){(acc, pgm) => - if(!acc.exists { x => x.id == pgm.id }) { - acc :+ pgm - } - else { - acc - } - } - val riegendurchgaenge = selectRiegen(competitionId).map(r => r.r-> r).toMap - val rds = riegendurchgaenge.values.map(v => v.durchgang.getOrElse("")).toSet - val disziplinsZuDurchgangR1 = listDisziplinesZuDurchgang(rds, competitionId, true) - val disziplinsZuDurchgangR2 = listDisziplinesZuDurchgang(rds, competitionId, false) - - for { - programm <- programme - athletwertungen <- driver.map(we => we.filter { x => x.wettkampfdisziplin.programm.id == programm.id}) - if(athletwertungen.nonEmpty) - einsatz = athletwertungen.head - athlet = einsatz.athlet - } - yield { - val riegendurchgang1 = riegendurchgaenge.get(einsatz.riege.getOrElse("")) - val riegendurchgang2 = riegendurchgaenge.get(einsatz.riege2.getOrElse("")) - - Kandidat( - einsatz.wettkampf.easyprint - ,athlet.geschlecht match {case "M" => "Turner" case _ => "Turnerin"} - ,einsatz.wettkampfdisziplin.programm.easyprint - ,athlet.id - ,athlet.name - ,athlet.vorname - ,AthletJahrgang(athlet.gebdat).jahrgang - ,athlet.verein match {case Some(v) => v.easyprint case _ => ""} - ,riegendurchgang1 - ,riegendurchgang2 - ,athletwertungen.filter{wertung => - if(wertung.wettkampfdisziplin.feminim == 0 && !wertung.athlet.geschlecht.equalsIgnoreCase("M")) { - false - } - else if(wertung.wettkampfdisziplin.masculin == 0 && wertung.athlet.geschlecht.equalsIgnoreCase("M")) { - false - } - else { - riegendurchgang1.forall{x => - x.durchgang.nonEmpty && - x.durchgang.forall{d => - d.nonEmpty && - disziplinsZuDurchgangR1.get(d).map(dm => dm.contains(wertung.wettkampfdisziplin.disziplin)).getOrElse(false) - } - } - } - }.map(_.wettkampfdisziplin.disziplin) - ,athletwertungen.filter{wertung => - if(wertung.wettkampfdisziplin.feminim == 0 && !wertung.athlet.geschlecht.equalsIgnoreCase("M")) { - false - } - else if(wertung.wettkampfdisziplin.masculin == 0 && wertung.athlet.geschlecht.equalsIgnoreCase("M")) { - false - } - else { - riegendurchgang2.forall{x => - x.durchgang.nonEmpty && - x.durchgang.forall{d => - d.nonEmpty && - disziplinsZuDurchgangR2.get(d).map(dm => dm.contains(wertung.wettkampfdisziplin.disziplin)).getOrElse(false) - } - } - } - }.map(_.wettkampfdisziplin.disziplin), - athletwertungen - ) - } - } +package ch.seidel.kutu.domain + +import java.util.UUID +import java.util.concurrent.TimeUnit + +import ch.seidel.kutu.Config +import ch.seidel.kutu.akka.AthletWertungUpdated +import ch.seidel.kutu.http.WebSocketClient +import org.slf4j.LoggerFactory +import slick.jdbc.SQLiteProfile.api._ + +import scala.concurrent.ExecutionContext.Implicits.global +import scala.concurrent.{Await, Future} +import scala.concurrent.duration.Duration + +object WertungServiceBestenResult { + private val logger = LoggerFactory.getLogger(this.getClass) + + private var bestenResults = Map[String,WertungView]() + private var shouldResetBestenResults = false + + def putWertungToBestenResults(wertung: WertungView): Unit = { + bestenResults = bestenResults.updated(s"${wertung.athlet.id}:${wertung.wettkampfdisziplin.id}", wertung) + logger.info(s"actually best-scored: \n${bestenResults.mkString("\n")}") + } + + def getBestenResults = { + bestenResults +/* Athlet, Disziplin, Wertung (Endnote) + .map(w =>(w._2.athlet.easyprint, w._2.wettkampfdisziplin.disziplin.name, w._2.endnote)) + .sortBy(_._3) + */ + .map(_._2) + .toList + } + + def resetBestenResults: Unit = { + shouldResetBestenResults = true; + } + + def cleanBestenResults: Unit = { + if(shouldResetBestenResults) { + bestenResults = Map[String,WertungView]() + shouldResetBestenResults = false + } + } +} + +abstract trait WertungService extends DBService with WertungResultMapper with DisziplinService with RiegenService { + private val logger = LoggerFactory.getLogger(this.getClass) + import WertungServiceBestenResult._ + + def selectWertungen(vereinId: Option[Long] = None, athletId: Option[Long] = None, wettkampfId: Option[Long] = None, disziplinId: Option[Long] = None, wkuuid: Option[String] = None): Seq[WertungView] = { + implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() + val where = "where " + (athletId match { + case None => "1=1" + case Some(id) => s"a.id = $id" + }) + " and " + (vereinId match { + case None => "1=1" + case Some(id) => s"v.id = $id" + }) + " and " + (wettkampfId match { + case None => "1=1" + case Some(id) => s"wk.id = $id" + }) + " and " + (disziplinId match { + case None => "1=1" + case Some(id) => s"d.id = $id" + }) + " and " + (wkuuid match { + case None => "1=1" + case Some(uuid) => s"wk.uuid = '$uuid'" + }) + Await.result(database.run { + ( + sql""" + SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 + FROM wertung w + inner join athlet a on (a.id = w.athlet_id) + left outer join verein v on (a.verein = v.id) + inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) + + inner join disziplin d on (d.id = wd.disziplin_id) + inner join programm p on (p.id = wd.programm_id) + inner join wettkampf wk on (wk.id = w.wettkampf_id) + #$where + order by wd.programm_id, wd.ord + """.as[WertungView]).withPinnedSession + }, Duration.Inf) + } + + def getWertung(id: Long): WertungView = { + implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() + Await.result(database.run{( + sql""" + SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 + FROM wertung w + inner join athlet a on (a.id = w.athlet_id) + left outer join verein v on (a.verein = v.id) + inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) + inner join disziplin d on (d.id = wd.disziplin_id) + inner join programm p on (p.id = wd.programm_id) + inner join wettkampf wk on (wk.id = w.wettkampf_id) + where w.id = ${id} + order by wd.programm_id, wd.ord + """.as[WertungView]).withPinnedSession + }, Duration.Inf).head + } + + def getCurrentWertung(wertung: Wertung): Option[WertungView] = { + implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() + + Await.result(database.run{( + sql""" + SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 + FROM wertung w + inner join athlet a on (a.id = w.athlet_id) + left outer join verein v on (a.verein = v.id) + inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) + inner join disziplin d on (d.id = wd.disziplin_id) + inner join programm p on (p.id = wd.programm_id) + inner join wettkampf wk on (wk.id = w.wettkampf_id) + where a.id = ${wertung.athletId} + and wk.uuid = ${wertung.wettkampfUUID} + and wd.id = ${wertung.wettkampfdisziplinId} + """.as[WertungView]).withPinnedSession + }, Duration.Inf).headOption + } + + def listScheduledDisziplinIdsZuWettkampf(wettkampfId: Long): List[Long] = { + Await.result(database.run { + val wettkampf: Wettkampf = readWettkampf(wettkampfId) + val programme = readWettkampfLeafs(wettkampf.programmId).map(p => p.id).mkString("(", ",", ")") + val riegen = selectRiegenRaw(wettkampfId) + .map(r => r.start) + .filter(_.nonEmpty) + .map(_.get) + .filter(_ > 0).toSet + if (riegen.nonEmpty) { + sql""" select distinct disziplin_id from wettkampfdisziplin + where programm_Id in #$programme + and disziplin_id in #${riegen.mkString("(", ",", ")")} + """.as[Long].withPinnedSession + + } else { + sql""" select distinct disziplin_id from wettkampfdisziplin + where programm_Id in #$programme + """.as[Long].withPinnedSession + } + }, Duration.Inf).toList + } + + def updateOrinsertWertungenZuWettkampf(wettkampf: Wettkampf, wertungen: Iterable[Wertung]) = { + val insertWertungenAction = DBIO.sequence(for { + w <- wertungen + } yield { + sqlu""" + insert into wertung + (athlet_Id, wettkampfdisziplin_Id, wettkampf_Id, note_d, note_e, endnote, riege, riege2) + values (${w.athletId}, ${w.wettkampfdisziplinId}, ${w.wettkampfId}, ${w.noteD}, ${w.noteE}, ${w.endnote}, ${w.riege}, ${w.riege2}) + """ + }) + + val process = DBIO.seq( + sqlu""" + delete from wertung where wettkampf_id=${wettkampf.id} + """>> + sqlu""" delete from riege + WHERE wettkampf_id=${wettkampf.id} and not exists ( + SELECT 1 FROM wertung w + WHERE w.wettkampf_id=${wettkampf.id} + and (w.riege=riege.name or w.riege2=riege.name) + ) + """>> + insertWertungenAction + ) + + Await.result(database.run{process.transactionally}, Duration.Inf) + wertungen.size + } + + def updateOrinsertWertungen(wertungen: Iterable[Wertung]) = { + val process = DBIO.sequence(for { + w <- wertungen + } yield { + sqlu""" + delete from wertung where + athlet_Id=${w.athletId} and wettkampfdisziplin_Id=${w.wettkampfdisziplinId} and wettkampf_Id=${w.wettkampfId} + """>> + sqlu""" + insert into wertung + (athlet_Id, wettkampfdisziplin_Id, wettkampf_Id, note_d, note_e, endnote, riege, riege2) + values (${w.athletId}, ${w.wettkampfdisziplinId}, ${w.wettkampfId}, ${w.noteD}, ${w.noteE}, ${w.endnote}, ${w.riege}, ${w.riege2}) + """>> + sqlu""" delete from riege + WHERE wettkampf_id=${w.id} and not exists ( + SELECT 1 FROM wertung w + WHERE w.wettkampf_id=${w.id} + and (w.riege=riege.name or w.riege2=riege.name) + ) + """ + + }) + Await.result(database.run{process.transactionally}, Duration.Inf) + wertungen.size + } + + def updateOrinsertWertung(w: Wertung) = { + Await.result(database.run(DBIO.sequence(Seq( + sqlu""" + delete from wertung where + athlet_Id=${w.athletId} and wettkampfdisziplin_Id=${w.wettkampfdisziplinId} and wettkampf_Id=${w.wettkampfId} + """, + + sqlu""" + insert into wertung + (athlet_Id, wettkampfdisziplin_Id, wettkampf_Id, note_d, note_e, endnote, riege, riege2) + values (${w.athletId}, ${w.wettkampfdisziplinId}, ${w.wettkampfId}, ${w.noteD}, ${w.noteE}, ${w.endnote}, ${w.riege}, ${w.riege2}) + """, + + sqlu""" delete from riege + WHERE wettkampf_id=${w.id} and not exists ( + SELECT 1 FROM wertung w + WHERE w.wettkampf_id=${w.id} + and (w.riege=riege.name or w.riege2=riege.name) + ) + """ + )).transactionally), Duration.Inf) + } + + def updateWertung(w: Wertung): WertungView = { + Await.result(updateWertungAsync(w), Duration.Inf) + } + + def updateAllWertungenAsync(ws: Seq[Wertung]): Future[Seq[WertungView]] = { + implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() + implicit val mapper = getAthletViewResult + val ret = database.run(DBIO.sequence(for { + w <- ws + } yield { + sqlu""" UPDATE wertung + SET note_d=${w.noteD}, note_e=${w.noteE}, endnote=${w.endnote}, riege=${w.riege}, riege2=${w.riege2} + WHERE id=${w.id} + """>> + sqlu""" DELETE from riege + WHERE wettkampf_id=${w.id} and not exists ( + SELECT 1 FROM wertung w + WHERE w.wettkampf_id=${w.id} + and (w.riege=name or w.riege2=name) + ) + """>> + sql""" + SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 + FROM wertung w + inner join athlet a on (a.id = w.athlet_id) + left outer join verein v on (a.verein = v.id) + inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) + inner join disziplin d on (d.id = wd.disziplin_id) + inner join programm p on (p.id = wd.programm_id) + inner join wettkampf wk on (wk.id = w.wettkampf_id) + WHERE w.id=${w.id} + order by wd.programm_id, wd.ord + """.as[WertungView].head + }).transactionally) + + ret + } + + def updateWertungAsync(w: Wertung): Future[WertungView] = { + implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() + implicit val mapper = getAthletViewResult + val ret = database.run(( + sqlu""" UPDATE wertung + SET note_d=${w.noteD}, note_e=${w.noteE}, endnote=${w.endnote}, riege=${w.riege}, riege2=${w.riege2} + WHERE id=${w.id} + """>> + + sqlu""" DELETE from riege + WHERE wettkampf_id=${w.id} and not exists ( + SELECT 1 FROM wertung w + WHERE w.wettkampf_id=${w.id} + and (w.riege=name or w.riege2=name) + ) + """>> + sql""" + SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 + FROM wertung w + inner join athlet a on (a.id = w.athlet_id) + left outer join verein v on (a.verein = v.id) + inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) + inner join disziplin d on (d.id = wd.disziplin_id) + inner join programm p on (p.id = wd.programm_id) + inner join wettkampf wk on (wk.id = w.wettkampf_id) + WHERE w.id=${w.id} + order by wd.programm_id, wd.ord + """.as[WertungView].head).transactionally) + + ret.map{wv => + cleanBestenResults + if(wv.endnote.sum >= Config.bestenlisteSchwellwert) { + putWertungToBestenResults(wv) + } + val awu = AthletWertungUpdated(wv.athlet, wv.toWertung, wv.wettkampf.uuid.get, "", wv.wettkampfdisziplin.disziplin.id, wv.wettkampfdisziplin.programm.easyprint) + WebSocketClient.publish(awu) + wv + } + } + + @throws(classOf[Exception]) // called from mobile-client via coordinator-actor + def updateWertungSimple(w: Wertung): Wertung = { + val notenspez = readWettkampfDisziplinView(w.wettkampfdisziplinId) + val wv = notenspez.verifiedAndCalculatedWertung(w) + if (notenspez.isDNoteUsed && wv.noteD != w.noteD) { + throw new IllegalArgumentException(s"Erfasster D-Wert: ${w.noteDasText}, erlaubter D-Wert: ${wv.noteDasText}") + } + if (wv.noteE != w.noteE) { + throw new IllegalArgumentException(s"Erfasster E-Wert: ${w.noteEasText}, erlaubter E-Wert: ${wv.noteEasText}") + } + Await.result(database.run(DBIO.sequence(Seq(sqlu""" + UPDATE wertung + SET note_d=${wv.noteD}, note_e=${wv.noteE}, endnote=${wv.endnote}, riege=${wv.riege}, riege2=${wv.riege2} + WHERE + athlet_Id=${wv.athletId} and wettkampfdisziplin_Id=${wv.wettkampfdisziplinId} and wettkampf_Id=${wv.wettkampfId} + """//.transactionally + )) + ), Duration(5, TimeUnit.SECONDS)) + wv + } + + @throws(classOf[Exception]) // called from rich-client-app via ResourceExchanger + def updateWertungWithIDMapping(w: Wertung): Wertung = { + val wv = readWettkampfDisziplinView(w.wettkampfdisziplinId).verifiedAndCalculatedWertung(w) + val wvId = Await.result(database.run((for { + updated <- sqlu""" + UPDATE wertung + SET note_d=${wv.noteD}, note_e=${wv.noteE}, endnote=${wv.endnote}, riege=${wv.riege}, riege2=${wv.riege2} + WHERE + athlet_Id=${wv.athletId} and wettkampfdisziplin_Id=${wv.wettkampfdisziplinId} and wettkampf_Id=${wv.wettkampfId} + """ + wvId <- sql""" + SELECT id FROM wertung + WHERE + athlet_Id=${wv.athletId} and wettkampfdisziplin_Id=${wv.wettkampfdisziplinId} and wettkampf_Id=${wv.wettkampfId} + """.as[Long] + } yield { + wvId + }).transactionally + ), Duration.Inf).head + val result = wv.copy(id = wvId) + result + } + + @throws(classOf[Exception]) // called from rich-client-app via ResourceExchanger + def updateWertungWithIDMapping(ws: Seq[Wertung]): Seq[Wertung] = { + val wvs = ws.map(w => readWettkampfDisziplinView(w.wettkampfdisziplinId).verifiedAndCalculatedWertung(w)) + val wvId: Seq[Long] = Await.result(database.run(DBIO.sequence(for { + wv <- wvs + } yield { + sqlu""" + UPDATE wertung + SET note_d=${wv.noteD}, note_e=${wv.noteE}, endnote=${wv.endnote}, riege=${wv.riege}, riege2=${wv.riege2} + WHERE + athlet_Id=${wv.athletId} and wettkampfdisziplin_Id=${wv.wettkampfdisziplinId} and wettkampf_Id=${wv.wettkampfId} + """>> + sql""" + SELECT id FROM wertung + WHERE + athlet_Id=${wv.athletId} and wettkampfdisziplin_Id=${wv.wettkampfdisziplinId} and wettkampf_Id=${wv.wettkampfId} + """.as[Long].head + }).transactionally + ), Duration.Inf) + val result = wvs.zip(wvId).map{z => z._1.copy(id = z._2)} + result + } + + def listAthletenWertungenZuProgramm(progids: Seq[Long], wettkampf: Long, riege: String = "%") = { + Await.result(database.run{ + implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() + (sql""" + SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 + FROM wertung w + inner join athlet a on (a.id = w.athlet_id) + left outer join verein v on (a.verein = v.id) + inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) + inner join disziplin d on (d.id = wd.disziplin_id) + inner join programm p on (p.id = wd.programm_id) + inner join wettkampf wk on (wk.id = w.wettkampf_id) + where wd.programm_id in (#${progids.mkString(",")}) + and w.wettkampf_id = $wettkampf + and ($riege = '%' or w.riege = $riege or w.riege2 = $riege) + order by wd.programm_id, wd.ord + """.as[WertungView]).withPinnedSession}, Duration.Inf) + } + + def listAthletWertungenZuWettkampf(athletId: Long, wettkampf: Long) = { + Await.result(database.run{ + implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() + (sql""" + SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, + wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 + FROM wertung w + inner join athlet a on (a.id = w.athlet_id) + left outer join verein v on (a.verein = v.id) + inner join wettkampfdisziplin wd on (wd.id = w.wettkampfdisziplin_id) + inner join disziplin d on (d.id = wd.disziplin_id) + inner join programm p on (p.id = wd.programm_id) + inner join wettkampf wk on (wk.id = w.wettkampf_id) + where w.athlet_id = $athletId + and w.wettkampf_id = $wettkampf + order by wd.programm_id, wd.ord + """.as[WertungView]).withPinnedSession + }, Duration.Inf) + } + + def getAllKandidatenWertungen(competitionUUId: UUID) = { + val driver = selectWertungen(wkuuid = Some(competitionUUId.toString())).groupBy { x => x.athlet }.map(_._2).toList + val competitionId = if (driver.isEmpty || driver.head.isEmpty) { + 0 + } else { + driver.head.head.wettkampf.id + } + + val programme = driver.flatten.map(x => x.wettkampfdisziplin.programm).foldLeft(Seq[ProgrammView]()){(acc, pgm) => + if(!acc.exists { x => x.id == pgm.id }) { + acc :+ pgm + } + else { + acc + } + } + val riegendurchgaenge = selectRiegen(competitionId).map(r => r.r-> r).toMap + val rds = riegendurchgaenge.values.map(v => v.durchgang.getOrElse("")).toSet + val disziplinsZuDurchgangR1 = listDisziplinesZuDurchgang(rds, competitionId, true) + val disziplinsZuDurchgangR2 = listDisziplinesZuDurchgang(rds, competitionId, false) + + for { + programm <- programme + athletwertungen <- driver.map(we => we.filter { x => x.wettkampfdisziplin.programm.id == programm.id}) + if(athletwertungen.nonEmpty) + einsatz = athletwertungen.head + athlet = einsatz.athlet + } + yield { + val riegendurchgang1 = riegendurchgaenge.get(einsatz.riege.getOrElse("")) + val riegendurchgang2 = riegendurchgaenge.get(einsatz.riege2.getOrElse("")) + + Kandidat( + einsatz.wettkampf.easyprint + ,athlet.geschlecht match {case "M" => "Turner" case _ => "Turnerin"} + ,einsatz.wettkampfdisziplin.programm.easyprint + ,athlet.id + ,athlet.name + ,athlet.vorname + ,AthletJahrgang(athlet.gebdat).jahrgang + ,athlet.verein match {case Some(v) => v.easyprint case _ => ""} + ,riegendurchgang1 + ,riegendurchgang2 + ,athletwertungen.filter{wertung => + if(wertung.wettkampfdisziplin.feminim == 0 && !wertung.athlet.geschlecht.equalsIgnoreCase("M")) { + false + } + else if(wertung.wettkampfdisziplin.masculin == 0 && wertung.athlet.geschlecht.equalsIgnoreCase("M")) { + false + } + else { + riegendurchgang1.forall{x => + x.durchgang.nonEmpty && + x.durchgang.forall{d => + d.nonEmpty && + disziplinsZuDurchgangR1.get(d).map(dm => dm.contains(wertung.wettkampfdisziplin.disziplin)).getOrElse(false) + } + } + } + }.map(_.wettkampfdisziplin.disziplin) + ,athletwertungen.filter{wertung => + if(wertung.wettkampfdisziplin.feminim == 0 && !wertung.athlet.geschlecht.equalsIgnoreCase("M")) { + false + } + else if(wertung.wettkampfdisziplin.masculin == 0 && wertung.athlet.geschlecht.equalsIgnoreCase("M")) { + false + } + else { + riegendurchgang2.forall{x => + x.durchgang.nonEmpty && + x.durchgang.forall{d => + d.nonEmpty && + disziplinsZuDurchgangR2.get(d).map(dm => dm.contains(wertung.wettkampfdisziplin.disziplin)).getOrElse(false) + } + } + } + }.map(_.wettkampfdisziplin.disziplin), + athletwertungen + ) + } + } } \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 740b4d2ec..54abe273b 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -836,7 +836,7 @@ package object domain { lazy val divider = if (withDNotes || resultate.isEmpty) 1 else resultate.count { r => r.sum.endnote > 0 } } - sealed trait NotenModus /*with AutoFillTextBoxFactory.ItemComparator[String]*/ { + sealed trait NotenModus { def selectableItems: Option[List[String]] = None def validated(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): (Double, Double) diff --git a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala index c5a3b45ef..d12442b92 100644 --- a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala @@ -40,19 +40,14 @@ ScoreRoutes extends SprayJsonSupport with JsonSupport with AuthSupport with Rout def queryScoreResults(wettkampf: String, groupby: Option[String], filter: Iterable[String], html: Boolean, groupers: List[FilterBy], data: Seq[WertungView], alphanumeric: Boolean, logofile: File): HttpEntity.Strict = { - val diszMap = data.groupBy { x => x.wettkampf.programmId }.map{ x => - x._1 -> Map( - "W" -> listDisziplinesZuWettkampf(x._2.head.wettkampf.id, Some("W")) - , "M" -> listDisziplinesZuWettkampf(x._2.head.wettkampf.id, Some("M"))) - } val query = GroupBy(groupby, filter, data, alphanumeric, groupers); if (html) { HttpEntity(ContentTypes.`text/html(UTF-8)`, new ScoreToHtmlRenderer(){override val title: String = wettkampf} - .toHTML(query.select(data).toList, athletsPerPage = 0, sortAlphabetically = alphanumeric, diszMap, logofile)) + .toHTML(query.select(data).toList, athletsPerPage = 0, sortAlphabetically = alphanumeric, logofile)) } else { HttpEntity(ContentTypes.`application/json`, ScoreToJsonRenderer - .toJson(wettkampf, query.select(data).toList, sortAlphabetically = alphanumeric, diszMap, logofile)) + .toJson(wettkampf, query.select(data).toList, sortAlphabetically = alphanumeric, logofile)) } } @@ -256,20 +251,15 @@ ScoreRoutes extends SprayJsonSupport with JsonSupport with AuthSupport with Rout case Nil => (None,Seq[WertungView]()) case c::_ => (Some(c), data) } - val diszMap = publishedData.groupBy { x => x.wettkampf.programmId }.map { x => - x._1 -> Map( - "W" -> listDisziplinesZuWettkampf(x._2.head.wettkampf.id, Some("W")) - , "M" -> listDisziplinesZuWettkampf(x._2.head.wettkampf.id, Some("M"))) - } val query = GroupBy(score.map(_.query).getOrElse(""), publishedData) if (html.nonEmpty) { HttpEntity(ContentTypes.`text/html(UTF-8)`, new ScoreToHtmlRenderer() { override val title: String = wettkampf.easyprint // + " - " + score.map(_.title).getOrElse(wettkampf.easyprint) } - .toHTML(query.select(publishedData).toList, athletsPerPage = 0, sortAlphabetically = score.map(_.isAlphanumericOrdered).getOrElse(false), diszMap, logofile)) + .toHTML(query.select(publishedData).toList, athletsPerPage = 0, sortAlphabetically = score.map(_.isAlphanumericOrdered).getOrElse(false), logofile)) } else { HttpEntity(ContentTypes.`application/json`, ScoreToJsonRenderer - .toJson(wettkampf.easyprint, query.select(publishedData).toList, sortAlphabetically = score.map(_.isAlphanumericOrdered).getOrElse(false), diszMap, logofile)) + .toJson(wettkampf.easyprint, query.select(publishedData).toList, sortAlphabetically = score.map(_.isAlphanumericOrdered).getOrElse(false), logofile)) } } } diff --git a/src/main/scala/ch/seidel/kutu/renderer/ScoreToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/ScoreToHtmlRenderer.scala index 57bf1420a..3ff9884db 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/ScoreToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/ScoreToHtmlRenderer.scala @@ -13,8 +13,8 @@ trait ScoreToHtmlRenderer { protected val title: String - def toHTML(gs: List[GroupSection], athletsPerPage: Int = 0, sortAlphabetically: Boolean = false, diszMap: Map[Long,Map[String,List[Disziplin]]], logoFile: File): String = { - toHTML(gs, "", 0, athletsPerPage, sortAlphabetically, collectFilterTitles(gs, true), diszMap, logoFile) + def toHTML(gs: List[GroupSection], athletsPerPage: Int = 0, sortAlphabetically: Boolean = false, logoFile: File): String = { + toHTML(gs, "", 0, athletsPerPage, sortAlphabetically, collectFilterTitles(gs, true), logoFile) } val intro = s""" @@ -187,7 +187,7 @@ trait ScoreToHtmlRenderer { } } - private def toHTML(gs: List[GroupSection], openedTitle: String, level: Int, athletsPerPage: Int, sortAlphabetically: Boolean, falsePositives: Set[String], diszMap: Map[Long,Map[String,List[Disziplin]]], logoFile: File): String = { + private def toHTML(gs: List[GroupSection], openedTitle: String, level: Int, athletsPerPage: Int, sortAlphabetically: Boolean, falsePositives: Set[String], logoFile: File): String = { val gsBlock = new StringBuilder() if (level == 0) { @@ -306,7 +306,7 @@ trait ScoreToHtmlRenderer { } } - val alldata = gl.getTableData(sortAlphabetically, diszMap) + val alldata = gl.getTableData(sortAlphabetically) val pagedata = if(athletsPerPage == 0) alldata.sliding(alldata.size, alldata.size) else if(firstSiteRendered.get) { alldata.sliding(athletsPerPage, athletsPerPage) @@ -329,7 +329,7 @@ trait ScoreToHtmlRenderer { openedTitle + s"${if (levelText.isEmpty) "" else (levelText + ", ")}" else s"${if (levelText.isEmpty) "" else (levelText + ", ")}", - level + 1, athletsPerPage, sortAlphabetically, falsePositives, diszMap, logoFile)) + level + 1, athletsPerPage, sortAlphabetically, falsePositives, logoFile)) case s: GroupSum => gsBlock.append(s.easyprint) diff --git a/src/main/scala/ch/seidel/kutu/renderer/ScoreToJsonRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/ScoreToJsonRenderer.scala index 11f030cb9..12c780ff2 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/ScoreToJsonRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/ScoreToJsonRenderer.scala @@ -10,8 +10,8 @@ import org.slf4j.LoggerFactory object ScoreToJsonRenderer { val logger = LoggerFactory.getLogger(this.getClass) - def toJson(title: String, gs: List[GroupSection], sortAlphabetically: Boolean = false, diszMap: Map[Long,Map[String,List[Disziplin]]], logoFile: File): String = { - val jsonString = toJsonString(title, gs, "", 0, sortAlphabetically, diszMap, logoFile) + def toJson(title: String, gs: List[GroupSection], sortAlphabetically: Boolean = false, logoFile: File): String = { + val jsonString = toJsonString(title, gs, "", 0, sortAlphabetically, logoFile) jsonString } @@ -30,7 +30,7 @@ object ScoreToJsonRenderer { val nextSite = "},\n{" val outro = "]}" - private def toJsonString(title: String, gs: List[GroupSection], openedTitle: String, level: Int, sortAlphabetically: Boolean, diszMap: Map[Long,Map[String,List[Disziplin]]], logoFile: File): String = { + private def toJsonString(title: String, gs: List[GroupSection], openedTitle: String, level: Int, sortAlphabetically: Boolean, logoFile: File): String = { val gsBlock = new StringBuilder() if (level == 0) { gsBlock.append(firstSite(title, logoFile)) @@ -79,7 +79,7 @@ object ScoreToJsonRenderer { gsBlock.append("},") } - val alldata = gl.getTableData(sortAlphabetically, diszMap) + val alldata = gl.getTableData(sortAlphabetically) val pagedata = alldata.sliding(alldata.size, alldata.size) pagedata.foreach {section => renderListHead @@ -87,12 +87,10 @@ object ScoreToJsonRenderer { renderListEnd } case g: GroupNode => gsBlock.append( - toJsonString(title, g.next.toList, - if(openedTitle.length() > 0) - openedTitle + s"${escaped(g.groupKey.capsulatedprint)}, " - else - s""""title":{"level":"${level + 2}", "text":"${escaped(g.groupKey.capsulatedprint)}, """, - level + 1, sortAlphabetically, diszMap, logoFile)) + toJsonString(title, g.next.toList, if(openedTitle.length() > 0) + openedTitle + s"${escaped(g.groupKey.capsulatedprint)}, " + else + s""""title":{"level":"${level + 2}", "text":"${escaped(g.groupKey.capsulatedprint)}, """, level + 1, sortAlphabetically, logoFile)) case s: GroupSum => gsBlock.append(s.easyprint) diff --git a/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala index 5c552a24c..181597877 100644 --- a/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala @@ -244,14 +244,8 @@ abstract class DefaultRanglisteTab(wettkampfmode: BooleanProperty, override val val combination = query.select(data).toList lastScoreDef.setValue(Some(query.asInstanceOf[FilterBy])) - //Map[Long,Map[String,List[Disziplin]]] - val diszMap = data.groupBy { x => x.wettkampf.programmId }.map{ x => - x._1 -> Map( - "W" -> service.listDisziplinesZuWettkampf(x._2.head.wettkampf.id, Some("W")) - , "M" -> service.listDisziplinesZuWettkampf(x._2.head.wettkampf.id, Some("M"))) - } val logofile = PrintUtil.locateLogoFile(getSaveAsFilenameDefault.dir) - val ret = toHTML(combination, linesPerPage, query.isAlphanumericOrdered, diszMap, logofile) + val ret = toHTML(combination, linesPerPage, query.isAlphanumericOrdered, logofile) if(linesPerPage == 0){ webView.engine.loadContent(ret) } diff --git a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala index 8f861bdc7..6277a3c21 100644 --- a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala @@ -48,7 +48,11 @@ class RanglisteTab(wettkampfmode: BooleanProperty, wettkampf: WettkampfView, ove } } - override def getData: Seq[WertungView] = service.selectWertungen(wettkampfId = Some(wettkampf.id)) + override def getData: Seq[WertungView] = { + val scheduledDisziplines = service.listScheduledDisziplinIdsZuWettkampf(wettkampf.id) + service.selectWertungen(wettkampfId = Some(wettkampf.id)) + .filter(w => scheduledDisziplines.contains(w.wettkampfdisziplin.disziplin.id)) + } override def getSaveAsFilenameDefault: FilenameDefault = { val foldername = encodeFileName(wettkampf.easyprint) From 8e3fb2c01bec59463b09861d4956dd67ed846c82 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Tue, 11 Apr 2023 12:43:31 +0200 Subject: [PATCH 38/99] Fix Punktegleichstand-Regelung GeTu BLTV --- src/main/scala/ch/seidel/kutu/data/GroupSection.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupSection.scala b/src/main/scala/ch/seidel/kutu/data/GroupSection.scala index 55a7fc243..95a132f32 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupSection.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupSection.scala @@ -321,6 +321,8 @@ case class GroupLeaf(override val groupKey: DataObject, list: Iterable[WertungVi factorizeKuTu(w) case id if(id > 19 && id < 27) => // GeTu Kategorie factorizeGeTu(w) + case id if(id > 46 && id < 84) => // GeTu Kategorie + factorizeGeTu(w) case id if(id > 30 && id < 41) => // KuTuRi Programm factorizeKuTu(w) case _ => 1L From 61a5caa4ad9664673928683f006f1f19b5f6217d Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Tue, 11 Apr 2023 16:20:11 +0200 Subject: [PATCH 39/99] #659 integrate altersklassen in default riegenbuilder, explode for medal supplies --- .../scala/ch/seidel/kutu/data/GroupBy.scala | 18 ++++++++++--- .../seidel/kutu/domain/WettkampfService.scala | 16 ++++++++++++ .../ch/seidel/kutu/squad/ATTGrouper.scala | 4 +-- .../seidel/kutu/squad/DurchgangBuilder.scala | 24 ++++++++--------- .../ch/seidel/kutu/squad/JGClubGrouper.scala | 4 +-- .../seidel/kutu/squad/KuTuGeTuGrouper.scala | 4 +-- .../ch/seidel/kutu/squad/RiegenBuilder.scala | 26 ++++++++++++++++--- .../ch/seidel/kutu/squad/RiegenGrouper.scala | 4 +-- .../kutu/view/DefaultRanglisteTab.scala | 11 -------- .../kutu/view/WettkampfOverviewTab.scala | 20 +++++++++++++- 10 files changed, 90 insertions(+), 41 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala index 739a279e4..ed23b4131 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala @@ -326,11 +326,16 @@ case class ByAltersklasse(bezeichnung: String = "GebDat Altersklasse", grenzen: override val groupname = bezeichnung val klassen = Altersklasse(grenzen) + def makeGroupBy(w: Wettkampf)(gebdat: LocalDate): Altersklasse = { + val wkd: LocalDate = w.datum + val alter = Period.between(gebdat, wkd.plusDays(1)).getYears + Altersklasse(klassen, alter) + } + protected override val grouper = (v: WertungView) => { val wkd: LocalDate = v.wettkampf.datum val gebd: LocalDate = sqlDate2ld(v.athlet.gebdat.getOrElse(Date.valueOf(LocalDate.now()))) - val alter = Period.between(gebd, wkd.plusDays(1)).getYears - Altersklasse(klassen, alter) + makeGroupBy(v.wettkampf)(gebd) } protected override val sorter: Option[(GroupSection, GroupSection) => Boolean] = Some((gs1: GroupSection, gs2: GroupSection) => { @@ -342,11 +347,16 @@ case class ByJahrgangsAltersklasse(bezeichnung: String = "JG Altersklasse", gren override val groupname = bezeichnung val klassen = Altersklasse(grenzen) + def makeGroupBy(w: Wettkampf)(gebdat: LocalDate): Altersklasse = { + val wkd: LocalDate = w.datum + val alter = wkd.getYear - gebdat.getYear + Altersklasse(klassen, alter) + } + protected override val grouper = (v: WertungView) => { val wkd: LocalDate = v.wettkampf.datum val gebd: LocalDate = sqlDate2ld(v.athlet.gebdat.getOrElse(Date.valueOf(LocalDate.now()))) - val alter = wkd.getYear - gebd.getYear - Altersklasse(klassen, alter) + makeGroupBy(v.wettkampf)(gebd) } protected override val sorter: Option[(GroupSection, GroupSection) => Boolean] = Some((gs1: GroupSection, gs2: GroupSection) => { diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index c9bdc6e73..f9626b215 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -176,6 +176,22 @@ trait WettkampfService extends DBService """.as[OverviewStatTuple].withPinnedSession .map(_.toList) }, Duration.Inf) + def listAKOverviewFacts(wettkampfUUID: UUID): List[(String,String,Int,String,Date)] = { + Await.result( + database.run { + sql""" + select distinct v.name as verein, p.name as programm, p.ord as ord, a.geschlecht, a.gebdat + from verein v + inner join athlet a on a.verein = v.id + inner join wertung w on w.athlet_id = a.id + inner join wettkampf wk on wk.id = w.wettkampf_id + inner join wettkampfdisziplin wd on wd.id = w.wettkampfdisziplin_id + inner join programm p on wd.programm_id = p.id + where wk.uuid = ${wettkampfUUID.toString} and a.gebdat is not null + """.as[(String,String,Int,String,Date)].withPinnedSession + .map(_.toList) + }, Duration.Inf) + } def listPublishedScores(wettkampfUUID: UUID): Future[List[PublishedScoreView]] = { database.run(sql"""select sc.id, sc.title, sc.query, sc.published, sc.published_date, wk.* diff --git a/src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala index bd93c624d..5ca210c6e 100644 --- a/src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala +++ b/src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala @@ -6,9 +6,9 @@ case object ATTGrouper extends RiegenGrouper { override def generateRiegenName(w: WertungView) = groupKey(atGrouper)(w) - override protected def buildGrouper(riegencnt: Int): (List[WertungView => String], List[WertungView => String]) = { + override def buildGrouper(riegencnt: Int): (List[WertungView => String], List[WertungView => String], Boolean) = { val atGrp = atGrouper.drop(1)++atGrouper.take(1) - (atGrp, atGrp) + (atGrp, atGrp, true) } val atGrouper: List[WertungView => String] = List( diff --git a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala index ed956d7fa..09c5b00c0 100644 --- a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala @@ -8,7 +8,7 @@ import scala.collection.mutable case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSplitter with StartGeraetGrouper { private val logger = LoggerFactory.getLogger(classOf[DurchgangBuilder]) - def suggestDurchgaenge(wettkampfId: Long, maxRiegenSize: Int = 14, + def suggestDurchgaenge(wettkampfId: Long, maxRiegenSize: Int = 0, durchgangfilter: Set[String] = Set.empty, programmfilter: Set[Long] = Set.empty, splitSexOption: Option[SexDivideRule] = None, splitPgm: Boolean = true, onDisziplinList: Option[Set[Disziplin]] = None): Map[String, Map[Disziplin, Iterable[(String,Seq[Wertung])]]] = { @@ -50,19 +50,17 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli case None => if (dzlffm == dzlfff) GemischteRiegen else GetrennteDurchgaenge case Some(option) => option } - val (shortGrouper, fullGrouper, jgGroup) = wertungen.head._2.head.wettkampfdisziplin.programm.riegenmode match { - case RiegeRaw.RIEGENMODE_BY_JG => - val fullGrouper = ATTGrouper.atGrouper - val shortGrouper = fullGrouper.take(fullGrouper.size - 1) - (shortGrouper, fullGrouper, true) - case RiegeRaw.RIEGENMODE_BY_JG_VEREIN => - val fullGrouper = JGClubGrouper.jgclubGrouper - (fullGrouper, fullGrouper, true) - case _ => - val fullGrouper = KuTuGeTuGrouper.wkGrouper - val shortGrouper = fullGrouper.take(if (riegencnt == 0) fullGrouper.size - 1 else fullGrouper.size) - (shortGrouper, fullGrouper, false) + val wv = wertungen.head._2.head + val riegenmode = wv.wettkampfdisziplin.programm.riegenmode + val aks = wv.wettkampf.altersklassen match { + case s: String if s.nonEmpty => Some(s) + case _ => None } + val jaks = wv.wettkampf.jahrgangsklassen match { + case s: String if s.nonEmpty => Some(s) + case _ => None + } + val (shortGrouper, fullGrouper, jgGroup) = RiegenBuilder.selectRiegenGrouper(riegenmode, aks, jaks).buildGrouper(riegencnt) splitSex match { case GemischteRiegen => groupWertungen(programm, wertungen, shortGrouper, fullGrouper, dzlff, maxRiegenSize, GemischteRiegen, jgGroup) diff --git a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala index e2c0589ea..c1133e1de 100644 --- a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala +++ b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala @@ -7,8 +7,8 @@ case object JGClubGrouper extends RiegenGrouper { override def generateRiegenName(w: WertungView) = groupKey(jgclubGrouper)(w) - override protected def buildGrouper(riegencnt: Int): (List[WertungView => String], List[WertungView => String]) = { - (jgclubGrouper, jgclubGrouper) + override def buildGrouper(riegencnt: Int): (List[WertungView => String], List[WertungView => String], Boolean) = { + (jgclubGrouper, jgclubGrouper, true) } def extractJGGrouper(w: WertungView): String = if (w.wettkampf.altersklassen.nonEmpty) { diff --git a/src/main/scala/ch/seidel/kutu/squad/KuTuGeTuGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/KuTuGeTuGrouper.scala index ae844ddb6..49a86d640 100644 --- a/src/main/scala/ch/seidel/kutu/squad/KuTuGeTuGrouper.scala +++ b/src/main/scala/ch/seidel/kutu/squad/KuTuGeTuGrouper.scala @@ -6,9 +6,9 @@ case object KuTuGeTuGrouper extends RiegenGrouper { override def generateRiegenName(w: WertungView) = groupKey(wkGrouper.take(wkGrouper.size-1))(w) - override protected def buildGrouper(riegencnt: Int): (List[WertungView => String], List[WertungView => String]) = { + override def buildGrouper(riegencnt: Int): (List[WertungView => String], List[WertungView => String], Boolean) = { val wkFilteredGrouper = wkGrouper.take(if(riegencnt == 0) wkGrouper.size-1 else wkGrouper.size) - (wkFilteredGrouper, wkGrouper) + (wkFilteredGrouper, wkGrouper, false) } val wkGrouper: List[WertungView => String] = List( diff --git a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala index d2e553005..da3849403 100644 --- a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala @@ -42,12 +42,29 @@ trait RiegenBuilder { object RiegenBuilder { + def selectRiegenGrouper(riegenmode: Int, altersklassen: Option[String], jahrgangsklassen: Option[String]): RiegenGrouper = { + riegenmode match { + case RiegeRaw.RIEGENMODE_BY_JG => ATTGrouper + case RiegeRaw.RIEGENMODE_BY_JG_VEREIN => JGClubGrouper + case _ => + if (jahrgangsklassen.nonEmpty || altersklassen.nonEmpty) { + JGClubGrouper + } else { + KuTuGeTuGrouper + } + } + } def generateRiegenName(w: WertungView) = { - w.wettkampfdisziplin.programm.riegenmode match { - case RiegeRaw.RIEGENMODE_BY_JG => ATTGrouper.generateRiegenName(w) - case RiegeRaw.RIEGENMODE_BY_JG_VEREIN => JGClubGrouper.generateRiegenName(w) - case _ => KuTuGeTuGrouper.generateRiegenName(w) + val riegenmode = w.wettkampfdisziplin.programm.riegenmode + val aks = w.wettkampf.altersklassen match { + case s: String if s.nonEmpty => Some(s) + case _ => None } + val jaks = w.wettkampf.jahrgangsklassen match { + case s: String if s.nonEmpty => Some(s) + case _ => None + } + selectRiegenGrouper(riegenmode, aks, jaks).generateRiegenName(w) } def generateRiegen2Name(w: WertungView): Option[String] = { @@ -57,4 +74,5 @@ object RiegenBuilder { case _ => None } } + } \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/squad/RiegenGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/RiegenGrouper.scala index 9a6757177..8fe2b5537 100644 --- a/src/main/scala/ch/seidel/kutu/squad/RiegenGrouper.scala +++ b/src/main/scala/ch/seidel/kutu/squad/RiegenGrouper.scala @@ -16,7 +16,7 @@ trait RiegenGrouper extends RiegenSplitter { Seq[(String, Seq[Wertung])]() } else { - val (grouper, allGrouper) = buildGrouper(riegencnt) + val (grouper, allGrouper, _) = buildGrouper(riegencnt) val grouped = groupWertungen(riegencnt, athletGroupedWertungen, grouper, allGrouper) splitToRiegenCount(grouped, riegencnt, cache) map toRiege } @@ -33,7 +33,7 @@ trait RiegenGrouper extends RiegenSplitter { (riegenname, wertungen) } - protected def buildGrouper(riegencnt: Int): (List[WertungView => String], List[WertungView => String]) = ??? + def buildGrouper(riegencnt: Int): (List[WertungView => String], List[WertungView => String], Boolean) = ??? def generateRiegenName(w: WertungView): String = ??? diff --git a/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala index 181597877..d3237856d 100644 --- a/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala @@ -106,17 +106,6 @@ abstract class DefaultRanglisteTab(wettkampfmode: BooleanProperty, override val def toString(d: DataObject) = if (d != null) d.easyprint else "" } val converter = new DataObjectConverter() - - class DataObjectListCell extends ListCell[DataObject] { - override val delegate: jfxsc.ListCell[DataObject] = new jfxsc.ListCell[DataObject] { - override protected def updateItem(item: DataObject, empty: Boolean): Unit = { - super.updateItem(item, empty) - if (item != null) { - setText(item.easyprint); - } - } - } - } val cb1 = new ComboBox[FilterBy] { maxWidth = 250 diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfOverviewTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfOverviewTab.scala index 46ffe5389..c8c16c3bd 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfOverviewTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfOverviewTab.scala @@ -4,6 +4,7 @@ import java.util.UUID import ch.seidel.commons._ import ch.seidel.kutu.Config.{homedir, remoteBaseUrl, remoteHostOrigin} import ch.seidel.kutu.KuTuApp.{controlsView, getStage, handleAction, modelWettkampfModus, selectedWettkampf, selectedWettkampfSecret, stage} +import ch.seidel.kutu.data.{ByAltersklasse, ByJahrgangsAltersklasse} import ch.seidel.kutu.domain._ import ch.seidel.kutu.renderer.PrintUtil.FilenameDefault import ch.seidel.kutu.renderer.{CompetitionsJudgeToHtmlRenderer, PrintUtil, WettkampfOverviewToHtmlRenderer} @@ -59,7 +60,24 @@ class WettkampfOverviewTab(wettkampf: WettkampfView, override val service: KutuS private def createDocument = { val logofile = PrintUtil.locateLogoFile(new java.io.File(homedir + "/" + encodeFileName(wettkampf.easyprint))) - val document = toHTML(wettkampf, service.listOverviewStats(UUID.fromString(wettkampf.uuid.get)), logofile) + val data = if (wettkampf.altersklassen.nonEmpty) { + val aks = ByAltersklasse("AK", Altersklasse.parseGrenzen(wettkampf.altersklassen)) + val facts = service.listAKOverviewFacts(UUID.fromString(wettkampf.uuid.get)) + val grouper = aks.makeGroupBy(wettkampf.toWettkampf)_ + facts.groupBy(_._1).flatMap(gr => gr._2.groupBy(x => (x._2, grouper(x._5))).map(gr2 => + (gr._1, s"${gr2._1._1} ${gr2._1._2.easyprint}", gr2._1._2.alterVon, gr2._2.count(_._4.equals("M")), gr2._2.count(_._4.equals("W"))) + )).toList + } else if (wettkampf.jahrgangsklassen.nonEmpty) { + val aks = ByJahrgangsAltersklasse("AK", Altersklasse.parseGrenzen(wettkampf.jahrgangsklassen)) + val facts = service.listAKOverviewFacts(UUID.fromString(wettkampf.uuid.get)) + val grouper = aks.makeGroupBy(wettkampf.toWettkampf) _ + facts.groupBy(_._1).flatMap(gr => gr._2.groupBy(x => (x._2, grouper(x._5))).map(gr2 => + (gr._1, s"${gr2._1._1} ${gr2._1._2.easyprint}", gr2._1._2.alterVon, gr2._2.count(_._4.equals("M")), gr2._2.count(_._4.equals("W"))) + )).toList + } else { + service.listOverviewStats(UUID.fromString(wettkampf.uuid.get)) + } + val document = toHTML(wettkampf, data, logofile) document } From bdbfc06445bb6f77f94b8fb8ac3f88da6b08b1f8 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Tue, 11 Apr 2023 16:40:47 +0200 Subject: [PATCH 40/99] #87 fix export, eliminate redundant disciplines --- src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala b/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala index 0f75587f2..4e6d26e65 100644 --- a/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala @@ -125,7 +125,7 @@ abstract trait DisziplinService extends DBService with WettkampfResultMapper { order by wd.ord """.as[Disziplin].withPinnedSession - }, Duration.Inf).toList + }, Duration.Inf).toList.distinct } def listWettkampfDisziplines(wettkampfId: Long): List[Wettkampfdisziplin] = { From 6bcbe2701440fa9b26322556e0c8e2bb95321fe0 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Tue, 11 Apr 2023 23:22:23 +0200 Subject: [PATCH 41/99] =?UTF-8?q?#660=20fix=20jump=20to=20squad=20filterd?= =?UTF-8?q?=20view=20with=20Pflicht&K=C3=BCr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index fac38866a..81d0501be 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -674,7 +674,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr if (col.delegate.isInstanceOf[WKTCAccess]) { val tca = col.delegate.asInstanceOf[WKTCAccess] if (tca.getIndex > -1) { - val v = scheduledGears.contains(disziplinlist(tca.getIndex)) && durchgangFilter.disziplin.isDefined && tca.getIndex == disziplinlist.indexOf(durchgangFilter.disziplin.get) + val v = (tca.getIndex >= disziplinlist.size || scheduledGears.contains(disziplinlist(tca.getIndex))) && durchgangFilter.disziplin.isDefined && tca.getIndex == disziplinlist.indexOf(durchgangFilter.disziplin.get) col.setVisible(v) } } From 8e3e65cbd32069e632d09adf18089649bf799bb3 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Tue, 11 Apr 2023 23:53:42 +0200 Subject: [PATCH 42/99] #660 ensure alle gear-lists are served with distinct items --- .../scala/ch/seidel/kutu/domain/DisziplinService.scala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala b/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala index 4e6d26e65..f05fa3447 100644 --- a/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/DisziplinService.scala @@ -65,7 +65,7 @@ abstract trait DisziplinService extends DBService with WettkampfResultMapper { order by wd.ord """.as[(Long, String, String, Int)] - ret.withPinnedSession.map{_.map{tupel => (Disziplin(tupel._1, tupel._2), tupel._3)}.groupBy(_._2).map(x => x._1 -> x._2.map(_._1))} + ret.withPinnedSession.map{_.map{tupel => (Disziplin(tupel._1, tupel._2), tupel._3)}.distinct.groupBy(_._2).map(x => x._1 -> x._2.map(_._1))} }, Duration.Inf) } @@ -74,13 +74,13 @@ abstract trait DisziplinService extends DBService with WettkampfResultMapper { val wettkampf: Wettkampf = readWettkampf(wettkampfId) val programme = readWettkampfLeafs(wettkampf.programmId).map(p => p.id).mkString("(", ",", ")") sql""" select id from wettkampfdisziplin where programm_Id in #$programme""".as[Long].withPinnedSession - }, Duration.Inf).toList + }, Duration.Inf).toList.distinct } def listDisziplinZuWettkampf(wettkampf: Wettkampf): Future[Vector[Disziplin]] = { database.run{ val programme = readWettkampfLeafs(wettkampf.programmId).map(p => p.id).mkString("(", ",", ")") sql""" select distinct d.id, d.name, wd.ord from disziplin d inner join wettkampfdisziplin wd on d.id = wd.disziplin_id - where wd.programm_Id in #$programme order by wd.ord""".as[Disziplin].withPinnedSession + where wd.programm_Id in #$programme order by wd.ord""".as[Disziplin].withPinnedSession.map(_.distinct) } } @@ -102,7 +102,7 @@ abstract trait DisziplinService extends DBService with WettkampfResultMapper { order by wd.ord """.as[Disziplin].withPinnedSession - }, Duration.Inf).toList + }, Duration.Inf).toList.distinct } def listDisziplinesZuWettkampf(wettkampfId: Long, geschlecht: Option[String] = None): List[Disziplin] = { From 718fca2e9f58f1b80f9b873e99ca4739c0714082 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Wed, 12 Apr 2023 00:24:22 +0200 Subject: [PATCH 43/99] #659 Add default competition altersklassen-filter to Score-Filters --- .../scala/ch/seidel/kutu/data/GroupBy.scala | 18 +++++++++++++----- .../ch/seidel/kutu/http/ScoreRoutes.scala | 4 ++-- .../seidel/kutu/view/DefaultRanglisteTab.scala | 12 +++++++++--- .../ch/seidel/kutu/view/RanglisteTab.scala | 16 ++++++++++++++-- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala index ed23b4131..422c1c1d2 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala @@ -28,7 +28,7 @@ sealed trait GroupBy { def isAlphanumericOrdered = isANO def setAlphanumericOrdered(value: Boolean): Unit = { - traverse(value){ (gb, acc) => + traverse(value) { (gb, acc) => gb.isANO = acc acc } @@ -175,6 +175,7 @@ sealed trait FilterBy extends GroupBy { case NullObject(_) => true case _ => false } + def filterItems: List[DataObject] = if (skipGrouper) { filtItems ++ getFilter.filter(nullObjectFilter) @@ -322,7 +323,7 @@ case class ByJahrgang() extends GroupBy with FilterBy { }) } -case class ByAltersklasse(bezeichnung: String = "GebDat Altersklasse", grenzen: Seq[(String,Int)]) extends GroupBy with FilterBy { +case class ByAltersklasse(bezeichnung: String = "GebDat Altersklasse", grenzen: Seq[(String, Int)]) extends GroupBy with FilterBy { override val groupname = bezeichnung val klassen = Altersklasse(grenzen) @@ -343,7 +344,7 @@ case class ByAltersklasse(bezeichnung: String = "GebDat Altersklasse", grenzen: }) } -case class ByJahrgangsAltersklasse(bezeichnung: String = "JG Altersklasse", grenzen: Seq[(String,Int)]) extends GroupBy with FilterBy { +case class ByJahrgangsAltersklasse(bezeichnung: String = "JG Altersklasse", grenzen: Seq[(String, Int)]) extends GroupBy with FilterBy { override val groupname = bezeichnung val klassen = Altersklasse(grenzen) @@ -474,8 +475,15 @@ object GroupBy { } val query = if (cbflist.nonEmpty) { cbflist.foldLeft(cbflist.head.asInstanceOf[GroupBy])((acc, cb) => if (acc != cb) acc.groupBy(cb) else acc) - } else { - ByWettkampfProgramm().groupBy(ByGeschlecht()) + } else if (data.nonEmpty && data.head.wettkampf.altersklassen.nonEmpty) { + val byAK = groupers.find(p => p.isInstanceOf[ByAltersklasse] && p.groupname.startsWith("Wettkampf")).getOrElse(ByAltersklasse("AK", Altersklasse.parseGrenzen(data.head.wettkampf.altersklassen))) + ByProgramm().groupBy(byAK).groupBy(ByGeschlecht()) + } else if (data.nonEmpty && data.head.wettkampf.jahrgangsklassen.nonEmpty) { + val byAK = groupers.find(p => p.isInstanceOf[ByJahrgangsAltersklasse] && p.groupname.startsWith("Wettkampf")).getOrElse(ByJahrgangsAltersklasse("AK", Altersklasse.parseGrenzen(data.head.wettkampf.jahrgangsklassen))) + ByProgramm().groupBy(byAK).groupBy(ByGeschlecht()) + } + else { + ByProgramm().groupBy(ByGeschlecht()) } query.setAlphanumericOrdered(alphanumeric) query diff --git a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala index d12442b92..4e08424d5 100644 --- a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala @@ -256,10 +256,10 @@ ScoreRoutes extends SprayJsonSupport with JsonSupport with AuthSupport with Rout HttpEntity(ContentTypes.`text/html(UTF-8)`, new ScoreToHtmlRenderer() { override val title: String = wettkampf.easyprint // + " - " + score.map(_.title).getOrElse(wettkampf.easyprint) } - .toHTML(query.select(publishedData).toList, athletsPerPage = 0, sortAlphabetically = score.map(_.isAlphanumericOrdered).getOrElse(false), logofile)) + .toHTML(query.select(publishedData).toList, athletsPerPage = 0, sortAlphabetically = score.exists(_.isAlphanumericOrdered), logofile)) } else { HttpEntity(ContentTypes.`application/json`, ScoreToJsonRenderer - .toJson(wettkampf.easyprint, query.select(publishedData).toList, sortAlphabetically = score.map(_.isAlphanumericOrdered).getOrElse(false), logofile)) + .toJson(wettkampf.easyprint, query.select(publishedData).toList, sortAlphabetically = score.exists(_.isAlphanumericOrdered), logofile)) } } } diff --git a/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala index d3237856d..577ef1c89 100644 --- a/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/DefaultRanglisteTab.scala @@ -195,11 +195,17 @@ abstract class DefaultRanglisteTab(wettkampfmode: BooleanProperty, override val } grp } - val groupBy = if (cblist.isEmpty) { - ByWettkampfProgramm().groupBy(ByGeschlecht()) + val akg = groupers.find(p => p.isInstanceOf[ByAltersklasse] && p.groupname.startsWith("Wettkampf")) + val jakg = groupers.find(p => p.isInstanceOf[ByJahrgangsAltersklasse] && p.groupname.startsWith("Wettkampf")) + val groupBy = if (cblist.nonEmpty) { + cblist.foldLeft(cblist.head.asInstanceOf[GroupBy])((acc, cb) => if (acc != cb) acc.groupBy(cb) else acc) + } else if (akg.nonEmpty) { + ByProgramm().groupBy(akg.get).groupBy(ByGeschlecht()) + } else if (jakg.nonEmpty) { + ByProgramm().groupBy(jakg.get).groupBy(ByGeschlecht()) } else { - cblist.foldLeft(cblist.head.asInstanceOf[GroupBy])((acc, cb) => if (acc != cb) acc.groupBy(cb) else acc) + ByProgramm().groupBy(ByGeschlecht()) } groupBy.setAlphanumericOrdered(cbModus.selected.value) restoring = false diff --git a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala index 6277a3c21..229ea0eb3 100644 --- a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala @@ -213,9 +213,21 @@ class RanglisteTab(wettkampfmode: BooleanProperty, wettkampf: WettkampfView, ove override def isPopulated = { val combos = populate(groupers) + val akg = groupers.find(p => p.isInstanceOf[ByAltersklasse] && p.groupname.startsWith("Wettkampf")) + val jakg = groupers.find(p => p.isInstanceOf[ByJahrgangsAltersklasse] && p.groupname.startsWith("Wettkampf")) + if (akg.nonEmpty) { + combos(1).selectionModel.value.select(ByProgramm(programmText)) + combos(2).selectionModel.value.select(akg.get) + combos(3).selectionModel.value.select(ByGeschlecht()) + } else if (jakg.nonEmpty) { + combos(1).selectionModel.value.select(ByProgramm(programmText)) + combos(2).selectionModel.value.select(jakg.get) + combos(3).selectionModel.value.select(ByGeschlecht()) + } else { + combos(1).selectionModel.value.select(ByProgramm(programmText)) + combos(2).selectionModel.value.select(ByGeschlecht()) - combos(1).selectionModel.value.select(ByWettkampfProgramm(programmText)) - combos(2).selectionModel.value.select(ByGeschlecht()) + } true } From f7c648dac3133a2306378d1c8f6d987262f2eabc Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Wed, 12 Apr 2023 01:27:09 +0200 Subject: [PATCH 44/99] #659 Convenience in edit competition-dlg & comp-overview-panel --- src/main/scala/ch/seidel/kutu/KuTuApp.scala | 96 +++++++++++++++++-- .../scala/ch/seidel/kutu/domain/package.scala | 12 +++ .../WettkampfOverviewToHtmlRenderer.scala | 19 ++-- 3 files changed, 113 insertions(+), 14 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index 035f6e733..027bc0e46 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -285,15 +285,57 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport promptText = "Auszeichnung bei Erreichung des Mindest-Endwerts" text = p.auszeichnungendnote.toString } + val cmbAltersklassen = new ComboBox[String]() { + prefWidth = 500 + Altersklasse.predefinedAKs.foreach(definition => { + items.value.add(definition._1) + }) + promptText = "Altersklassen" + + } val txtAltersklassen = new TextField { prefWidth = 500 - promptText = "Altersklassen (z.B. AK6,AK7,AK9-10,AK11-20*2,AK25-100/10)" + promptText = "Alersklassen (z.B. 6,7,9-10,AK11-20*2,25-100/10)" text = p.altersklassen + editable <== Bindings.createBooleanBinding(() => { + "Individuell".equals(cmbAltersklassen.value.value) + }, + cmbAltersklassen.selectionModel, + cmbAltersklassen.value + ) + + cmbAltersklassen.value.onChange{ + text.value = Altersklasse.predefinedAKs(cmbAltersklassen.value.value) + if (text.value.isEmpty && !"Ohne".equals(cmbAltersklassen.value.value)) { + text.value = p.altersklassen + } + } + } + val cmbJGAltersklassen = new ComboBox[String]() { + prefWidth = 500 + Altersklasse.predefinedAKs.foreach(definition => { + items.value.add(definition._1) + }) + promptText = "Jahrgang Altersklassen" + } val txtJGAltersklassen = new TextField { prefWidth = 500 - promptText = "Jahrgang Altersklassen (z.B. AK6,AK7,AK9-10,AK11-20*2,AK25-100/10)" + promptText = "Jahrgangs Altersklassen (z.B. AK6,AK7,AK9-10,AK11-20*2,AK25-100/10)" text = p.jahrgangsklassen + editable <== Bindings.createBooleanBinding(() => { + "Individuell".equals(cmbJGAltersklassen.value.value) + }, + cmbJGAltersklassen.selectionModel, + cmbJGAltersklassen.value + ) + + cmbJGAltersklassen.value.onChange{ + text.value = Altersklasse.predefinedAKs(cmbJGAltersklassen.value.value) + if (text.value.isEmpty && !"Ohne".equals(cmbJGAltersklassen.value.value)) { + text.value = p.jahrgangsklassen + } + } } PageDisplayer.showInDialog(caption, new DisplayablePage() { def getPage: Node = { @@ -308,8 +350,8 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport new Label(txtNotificationEMail.promptText.value), txtNotificationEMail, new Label(txtAuszeichnung.promptText.value), txtAuszeichnung, new Label(txtAuszeichnungEndnote.promptText.value), txtAuszeichnungEndnote, - new Label(txtAltersklassen.promptText.value), txtAltersklassen, - new Label(txtJGAltersklassen.promptText.value), txtJGAltersklassen + cmbAltersklassen, txtAltersklassen, + cmbJGAltersklassen, txtJGAltersklassen ) } } @@ -1095,15 +1137,55 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport promptText = "Auszeichnung bei Erreichung des Mindest-Gerätedurchschnittwerts" text = "" } + val cmbAltersklassen = new ComboBox[String]() { + prefWidth = 500 + Altersklasse.predefinedAKs.foreach(definition => { + items.value.add(definition._1) + }) + promptText = "Altersklassen" + } val txtAltersklassen = new TextField { prefWidth = 500 promptText = "Alersklassen (z.B. 6,7,9-10,AK11-20*2,25-100/10)" text = "" + editable <== Bindings.createBooleanBinding(() => { + "Individuell".equals(cmbAltersklassen.value.value) + }, + cmbAltersklassen.selectionModel, + cmbAltersklassen.value + ) + + cmbAltersklassen.value.onChange{ + text.value = Altersklasse.predefinedAKs(cmbAltersklassen.value.value) + if (editable.value) { + text.value += " Editable" + } + } + } + val cmbJGAltersklassen = new ComboBox[String]() { + prefWidth = 500 + Altersklasse.predefinedAKs.foreach(definition => { + items.value.add(definition._1) + }) + promptText = "Jahrgang Altersklassen" } val txtJGAltersklassen = new TextField { prefWidth = 500 - promptText = "Jahrgangs Alersklassen (z.B. AK6,AK7,AK9-10,AK11-20*2,AK25-100/10)" + promptText = "Jahrgangs Altersklassen (z.B. AK6,AK7,AK9-10,AK11-20*2,AK25-100/10)" text = "" + editable <== Bindings.createBooleanBinding(() => { + "Individuell".equals(cmbJGAltersklassen.value.value) + }, + cmbJGAltersklassen.selectionModel, + cmbJGAltersklassen.value + ) + + cmbJGAltersklassen.value.onChange{ + text.value = Altersklasse.predefinedAKs(cmbJGAltersklassen.value.value) + if (editable.value) { + text.value += " Editable" + } + } } PageDisplayer.showInDialog(caption, new DisplayablePage() { def getPage: Node = { @@ -1118,8 +1200,8 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport new Label(txtNotificationEMail.promptText.value), txtNotificationEMail, new Label(txtAuszeichnung.promptText.value), txtAuszeichnung, new Label(txtAuszeichnungEndnote.promptText.value), txtAuszeichnungEndnote, - new Label(txtAltersklassen.promptText.value), txtAltersklassen, - new Label(txtJGAltersklassen.promptText.value), txtJGAltersklassen + cmbAltersklassen, txtAltersklassen, + cmbJGAltersklassen, txtJGAltersklassen ) } } diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 54abe273b..880d27449 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -428,21 +428,33 @@ package object domain { object Altersklasse { // file:///C:/Users/Roland/Downloads/Turn10-2018_Allgemeine%20Bestimmungen.pdf + val akExpressionTurn10 = "AK7-18,AK24,AK30-100/5" val altersklassenTurn10 = Seq( 6,7,8,9,10,11,12,13,14,15,16,17,18,24,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 ).map(i => ("AK", i)) // see https://www.dtb.de/fileadmin/user_upload/dtb.de/Passwesen/Wettkampfordnung_DTB_2021.pdf + val akDTBExpression = "AK6,AK18,AK22,AK25" val altersklassenDTB = Seq( 6,18,22,25 ).map(i => ("AK", i)) // see https://www.dtb.de/fileadmin/user_upload/dtb.de/TURNEN/Standards/PDFs/Rahmentrainingskonzeption-GTm_inklAnlagen_19.11.2020.pdf + val akDTBPflichtExpression = "AK8-9,AK11-AK19/2" val altersklassenDTBPflicht = Seq( 7,8,9,11,13,15,17,19 ).map(i => ("AK", i)) + val akDTBKuerExpression = "AK13,AK15-AK19/2" val altersklassenDTBKuer = Seq( 12,13,15,17,19 ).map(i => ("AK", i)) + val predefinedAKs = Map( + ("Ohne" -> "") + , ("Turn10®" -> akExpressionTurn10) + , ("DTB" -> akDTBExpression) + , ("DTB Pflicht" -> akDTBPflichtExpression) + , ("DTB Kür" -> akDTBKuerExpression) + , ("Individuell" -> "") + ) def apply(altersgrenzen: Seq[(String,Int)]): Seq[Altersklasse] = { if (altersgrenzen.isEmpty) { Seq.empty diff --git a/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala index 33e2c4183..798faa4a9 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala @@ -236,13 +236,6 @@ trait WettkampfOverviewToHtmlRenderer { $logoHtml

    Wettkampf-Übersicht

    ${escaped(wettkampf.easyprint)}

    - ${if (altersklassen.nonEmpty || jgAltersklassen.nonEmpty) - s"""

    Altersklassen

    - Alter am Wettkampf-Tag: ${wettkampf.altersklassen}
    -
      ${altersklassen}
    - Alter im Wettkampf-Jahr: ${wettkampf.jahrgangsklassen}
    -
      ${jgAltersklassen}
    """ - else ""}

    Anmeldungen

    ${ @@ -277,6 +270,18 @@ trait WettkampfOverviewToHtmlRenderer { } else "" }

    + ${if (altersklassen.nonEmpty) + s"""

    Altersklassen

    + Alter am Wettkampf - Tag: ${wettkampf.altersklassen}
    +
      ${altersklassen} +
    """ + else if (altersklassen.nonEmpty) + s"""

    Altersklassen

    + Alter im Wettkampf - Jahr: ${wettkampf.jahrgangsklassen}
    +
      ${jgAltersklassen} +
    """ + else "" + }

    Zusammenstellung der Anmeldungen

    From f1696c9522001dfc7cceac64a89de3add26fd41d Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Wed, 12 Apr 2023 02:27:26 +0200 Subject: [PATCH 45/99] #659 Fix testcase --- src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala b/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala index 9538a6622..ceb7666f9 100644 --- a/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala +++ b/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala @@ -18,7 +18,7 @@ trait KuTuBaseSpec extends AnyWordSpec with Matchers with DBService with KutuSer DBService.startDB(Some(TestDBService.db)) def insertGeTuWettkampf(name: String, anzvereine: Int) = { - val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(20L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString), "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19") + val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(20L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString), "", "") val programme: Seq[ProgrammView] = readWettkampfLeafs(wettkampf.programmId) val pgIds = programme.map(_.id)// 20 * 9 * 2 = 360 val vereine = for (v <- (1 to anzvereine)) yield { From 9c1a05e3821ffc2d41feb34c5af9c92b545dc17d Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 12 Apr 2023 09:48:17 +0200 Subject: [PATCH 46/99] mini clean-code --- src/main/scala/ch/seidel/kutu/domain/WertungService.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/WertungService.scala b/src/main/scala/ch/seidel/kutu/domain/WertungService.scala index 2475282db..ed8e18c91 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WertungService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WertungService.scala @@ -484,7 +484,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di x.durchgang.nonEmpty && x.durchgang.forall{d => d.nonEmpty && - disziplinsZuDurchgangR1.get(d).map(dm => dm.contains(wertung.wettkampfdisziplin.disziplin)).getOrElse(false) + disziplinsZuDurchgangR1.get(d).exists(dm => dm.contains(wertung.wettkampfdisziplin.disziplin)) } } } @@ -501,7 +501,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di x.durchgang.nonEmpty && x.durchgang.forall{d => d.nonEmpty && - disziplinsZuDurchgangR2.get(d).map(dm => dm.contains(wertung.wettkampfdisziplin.disziplin)).getOrElse(false) + disziplinsZuDurchgangR2.get(d).exists(dm => dm.contains(wertung.wettkampfdisziplin.disziplin)) } } } From 7a138472d4f466b00aca873a5cb8bf2d22886b80 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 12 Apr 2023 10:08:58 +0200 Subject: [PATCH 47/99] consolidate migration-script (pg vs sqllite) --- .../AddWKDisziplinMetafields-sqllite.sql | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql index 296c98aa7..382d0ee39 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql @@ -39,7 +39,16 @@ update wettkampfdisziplin -- Barren and disziplin_id = 5 ; - +-- KD official STV +UPDATE programm + set alter_von=22 + where id=42 +; +-- KH official STV +UPDATE programm + set alter_von=28 + where id=43 +; alter table programm rename to old_programm; @@ -109,12 +118,3 @@ update programm where id=1 or parent_id=1 ; --- fix age-limitations K1-K4 inofficial, for GeTu BLTV --- KD official STV -UPDATE programm - set alter_von=22 - where id=42; --- KH official STV -UPDATE programm - set alter_von=28 - where id=43; From 0ba8d3501817eb7cff1a6e4e10e1688f9131a83f Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 12 Apr 2023 10:59:26 +0200 Subject: [PATCH 48/99] Fix squad-name generator for jgclub grouper (add pgm as group) --- .../ch/seidel/kutu/squad/DurchgangBuilder.scala | 5 +---- .../ch/seidel/kutu/squad/JGClubGrouper.scala | 9 +++++---- .../ch/seidel/kutu/squad/RiegenBuilder.scala | 16 ++++++++++------ 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala index 09c5b00c0..f4527c44f 100644 --- a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala @@ -31,10 +31,7 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli val wkdisziplinlist = service.listWettkampfDisziplines(wettkampfId) val dzl = disziplinlist.filter(d => onDisziplinList.isEmpty || onDisziplinList.get.contains(d)) - if(progAthlWertungen.keys.size > 1) { - val toDebug = (progAthlWertungen.keys.size, progAthlWertungen.keys.map(k => (progAthlWertungen(k).size, progAthlWertungen(k).map(w => w._2.size).sum))).toString - logger.debug(toDebug) - } + val riegen = progAthlWertungen.flatMap{x => val (programm, wertungen) = x val pgmHead = wertungen.head._2.head.wettkampfdisziplin.programm diff --git a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala index c1133e1de..ca1cefd09 100644 --- a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala +++ b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala @@ -21,8 +21,9 @@ case object JGClubGrouper extends RiegenGrouper { (w.athlet.gebdat match {case Some(d) => f"$d%tY"; case _ => ""}) val jgclubGrouper: List[WertungView => String] = List( - x => x.athlet.geschlecht, - x => extractJGGrouper(x), - x => x.athlet.verein match {case Some(v) => v.easyprint case None => ""} - ) + x => x.athlet.geschlecht, + x => x.wettkampfdisziplin.programm.name, + x => extractJGGrouper(x), + x => x.athlet.verein match {case Some(v) => v.easyprint case None => ""} + ) } \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala index da3849403..e60366813 100644 --- a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala @@ -1,6 +1,7 @@ package ch.seidel.kutu.squad import ch.seidel.kutu.domain._ +import ch.seidel.kutu.squad.RiegenBuilder.selectRiegenGrouper /** Riegenbuilder: * 1. Anzahl Rotationen (min = 1, max = Anzahl Teilnehmer), @@ -30,13 +31,16 @@ trait RiegenBuilder { def suggestRiegen(rotationstation: Seq[Int], wertungen: Seq[WertungView]): Seq[(String, Seq[Wertung])] = { val riegencount = rotationstation.sum - if (wertungen.head.wettkampfdisziplin.programm.riegenmode == RiegeRaw.RIEGENMODE_BY_JG) { - ATTGrouper.suggestRiegen(riegencount, wertungen) - } else if (wertungen.head.wettkampfdisziplin.programm.riegenmode == RiegeRaw.RIEGENMODE_BY_JG_VEREIN) { - JGClubGrouper.suggestRiegen(riegencount, wertungen) - } else { - KuTuGeTuGrouper.suggestRiegen(riegencount, wertungen) + val riegenmode = wertungen.head.wettkampfdisziplin.programm.riegenmode + val aks = wertungen.head.wettkampf.altersklassen match { + case s: String if s.nonEmpty => Some(s) + case _ => None + } + val jaks = wertungen.head.wettkampf.jahrgangsklassen match { + case s: String if s.nonEmpty => Some(s) + case _ => None } + selectRiegenGrouper(riegenmode, aks, jaks).suggestRiegen(riegencount, wertungen) } } From 9f4b6efcf2bfd40c545828677f6e25f391aade4b Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 12 Apr 2023 12:38:26 +0200 Subject: [PATCH 49/99] Consolidate (merge) squad suggest dialogs - re-suggest durchgang merged with initial suggest all squad - support all distribution-rules also for initial squad-suggest --- .../seidel/kutu/squad/DurchgangBuilder.scala | 2 +- .../scala/ch/seidel/kutu/view/RiegenTab.scala | 179 +++++++----------- .../ch/seidel/kutu/view/WettkampfInfo.scala | 3 + 3 files changed, 68 insertions(+), 116 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala index f4527c44f..6486a7652 100644 --- a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala @@ -25,7 +25,7 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli } else { val programme = listProgramme(filteredWert) - val progAthlWertungen = buildProgrammAthletWertungen(filteredWert, programme, splitPgm || durchgangfilter.isEmpty) + val progAthlWertungen = buildProgrammAthletWertungen(filteredWert, programme, splitPgm) val riegencnt = 0 // riegencnt 0 is unlimited val disziplinlist = service.listDisziplinesZuWettkampf(wettkampfId) val wkdisziplinlist = service.listWettkampfDisziplines(wettkampfId) diff --git a/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala b/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala index eb50a18e3..73eb1375f 100644 --- a/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala @@ -475,20 +475,43 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: ) } + var warnIcon: Image = null + try { + warnIcon = new Image(getClass().getResourceAsStream("/images/OrangeWarning.png")) + } catch { + case e: Exception => e.printStackTrace() + } + def doRegenerateDurchgang(durchgang: Set[String])(implicit action: ActionEvent): Unit = { - val cbSplitSex = new ComboBox[SexDivideRule]() { - items.get.addAll(GemischteRiegen, GemischterDurchgang, GetrennteDurchgaenge) - selectionModel.value.selectFirst() + val allDurchgaenge = durchgangModel.flatMap(group => { + if (group.children.isEmpty) { + ObservableBuffer[jfxsc.TreeItem[DurchgangEditor]](group) + } else { + group.children } - val chkSplitPgm = new CheckBox() { + }) + val inistartriegen = allDurchgaenge.filter(dg => durchgang.contains(dg.getValue.durchgang.name)).map(_.getValue.initstartriegen) + val startgeraete = inistartriegen.flatMap(_.keySet).distinct + val cbSplitSex = new ComboBox[SexDivideRule]() { + items.get.addAll(null, GemischteRiegen, GemischterDurchgang, GetrennteDurchgaenge) + if(durchgang.nonEmpty) { + selectionModel.value.selectFirst() + } + promptText = "automatisch" + } + val chkSplitPgm = new CheckBox() { text = "Programme / Kategorien teilen" - selected = true + selected = durchgang.size != 1 } - val isGeTU = wettkampf.programm.aggregatorHead.id == 20 - val lvOnDisziplines = new ListView[CheckListBoxEditor[Disziplin]] { + val lvOnDisziplines = new ListView[CheckListBoxEditor[Disziplin]] { + prefHeight = 250 disziplinlist.foreach { d => val cde = CheckListBoxEditor[Disziplin](d) - cde.selected.value = d.id != 5 || !isGeTU + if (durchgang.isEmpty) { + cde.selected.value = wettkampfInfo.startDisziplinList.contains(d) + } else { + cde.selected.value = startgeraete.contains(d) + } items.get.add(cde) } cellFactory = CheckBoxListCell.forListView[CheckListBoxEditor[Disziplin]](_.selected) @@ -502,33 +525,49 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: Some(ret) } } - PageDisplayer.showInDialog("Durchgänge " + durchgang.mkString("[", ", ","]") + " neu zuteilen ...", new DisplayablePage() { + val titel = if (durchgang.nonEmpty) + "Durchgänge " + durchgang.mkString("[", ", ","]") + " neu zuteilen ..." + else + "Riegen frisch einteilen ..." + PageDisplayer.showInDialog(titel, new DisplayablePage() { def getPage: Node = { - new GridPane { - prefWidth = 400 - hgap = 10 - vgap = 10 - add(new Label("Maximale Gruppengrösse: "), 0, 0) - add(txtGruppengroesse, 0,1) - add(new Label("Geschlechter-Trennung: "), 1, 0) - add(cbSplitSex, 1, 1) - add(chkSplitPgm, 0, 2, 2, 1) - add(new Label("Verteilung auf folgende Diszipline: "), 0, 3, 2, 1) - add(lvOnDisziplines, 0, 4, 2, 2) - } + new GridPane { + prefWidth = 400 + hgap = 10 + vgap = 10 + add(new Label("Maximale Gruppengrösse: "), 0, 0) + add(txtGruppengroesse, 0, 1) + add(new Label("Geschlechter-Trennung: "), 1, 0) + add(cbSplitSex, 1, 1) + add(chkSplitPgm, 0, 2, 2, 1) + add(new Label("Verteilung auf folgende Diszipline: "), 0, 3, 2, 1) + add(lvOnDisziplines, 0, 4, 2, 2) + if (durchgang.isEmpty) { + add(new Label(s"Mit der Neueinteilung der Riegen und Druchgänge werden\ndie bisherigen Einteilungen zurückgesetzt.", new ImageView { + image = warnIcon + }), + 0, 6, 2, 1) + } + } } - }, new Button("OK") { + }, new Button(if (durchgang.isEmpty) "OK (bestehende Einteilung wird zurückgesetzt)" else "OK (selektierte Durchgänge werden frisch eingeteilt)", new ImageView { image = warnIcon }) { onAction = (event: ActionEvent) => { if (txtGruppengroesse.text.value.nonEmpty) { KuTuApp.invokeWithBusyIndicator { val riegenzuteilungen = DurchgangBuilder(service).suggestDurchgaenge( wettkampf.id, str2Int(txtGruppengroesse.text.value), durchgang, - splitSexOption = Some(cbSplitSex.getSelectionModel.getSelectedItem), + splitSexOption = cbSplitSex.getSelectionModel.getSelectedItem match { + case item: SexDivideRule => Some(item) + case _ => None + }, splitPgm = chkSplitPgm.selected.value, onDisziplinList = getSelectedDisziplines) - for{ + if (durchgang.isEmpty) { + service.cleanAllRiegenDurchgaenge(wettkampf.id) + } + for{ durchgang <- riegenzuteilungen.keys (start, riegen) <- riegenzuteilungen(durchgang) (riege, wertungen) <- riegen @@ -551,16 +590,6 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: }) } - val btnRegenerateDurchgang = new Button("Durchgang neu einteilen ...") { - onAction = (ae: ActionEvent) => { - val actSelection = durchgangView.selectionModel().getSelectedCells.map(d => d.getTreeItem.getValue.durchgang.name) - if(actSelection.nonEmpty) { - doRegenerateDurchgang(actSelection.toSet)(ae) - } - } - disable <== when(makeDurchgangActiveBinding) choose true otherwise false - } - def makeRegenereateDurchgangMenu(durchgang: Set[String]): MenuItem = { val m = KuTuApp.makeMenuAction("Durchgang neu einteilen ...") {(caption: String, action: ActionEvent) => doRegenerateDurchgang(durchgang)(action) @@ -1021,16 +1050,10 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: } } } - var warnIcon: Image = null - try { - warnIcon = new Image(getClass().getResourceAsStream("/images/OrangeWarning.png")) - } catch { - case e: Exception => e.printStackTrace() - } def makeRiegenSuggestMenu(): MenuItem = { val m = KuTuApp.makeMenuAction("Riegen & Durchgänge frisch einteilen ...") {(caption: String, action: ActionEvent) => - doRiegenSuggest(action) + doRegenerateDurchgang(Set.empty)(action) } m.graphic = new ImageView { image = warnIcon @@ -1048,54 +1071,6 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: m } - def computeRiegenSuggest(event: ActionEvent, gruppengroesse: Int): Unit = { - implicit val impevent = event - PageDisplayer.showInDialog("Riegen neu einteilen ...", new DisplayablePage() { - def getPage: Node = { - new HBox { - prefHeight = 50 - alignment = Pos.BottomRight - hgrow = Priority.Always - children = Seq( - new ImageView { - image = warnIcon - }, - new Label( - s"Mit der Neueinteilung der Riegen und Druchgänge werden die bisherigen Einteilungen zurückgesetzt.")) - } - } - }, new Button("OK") { - onAction = (event: ActionEvent) => { - implicit val impevent = event - KuTuApp.invokeWithBusyIndicator { - val riegenzuteilungen = DurchgangBuilder(service).suggestDurchgaenge( - wettkampf.id, - gruppengroesse) - - service.cleanAllRiegenDurchgaenge(wettkampf.id) - - for{ - durchgang <- riegenzuteilungen.keys - (start, riegen) <- riegenzuteilungen(durchgang) - (riege, wertungen) <- riegen - } { - service.insertRiegenWertungen(RiegeRaw( - wettkampfId = wettkampf.id, - r = riege, - durchgang = Some(durchgang), - start = Some(start.id), - kind = if (wertungen.nonEmpty) RiegeRaw.KIND_STANDARD else RiegeRaw.KIND_EMPTY_RIEGE - ), wertungen) - } - service.updateDurchgaenge(wettkampf.id) - reloadData() - riegenFilterView.sort() - durchgangView.sort() - } - } - }) - } - def doRiegenReset(event: ActionEvent): Unit = { implicit val impevent = event PageDisplayer.showInDialog("Riegen- und Durchgangseinteilung zurücksetzen ...", new DisplayablePage() { @@ -1125,32 +1100,6 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: }) } - def doRiegenSuggest(event: ActionEvent): Unit = { - implicit val impevent = event - val txtGruppengroesse2 = new TextField() { - text <==> txtGruppengroesse.text - tooltip = "Max. Gruppengrösse oder 0 für gleichmässige Verteilung mit einem Durchgang." - } - PageDisplayer.showInDialog("Riegen neu einteilen ...", new DisplayablePage() { - def getPage: Node = { - new HBox { - prefHeight = 50 - alignment = Pos.BottomRight - hgrow = Priority.Always - children = Seq(new Label("Maximale Gruppengrösse: "), txtGruppengroesse2) - } - } - }, new Button("OK (bestehende Einteilung wird zurückgesetzt)", new ImageView { image = warnIcon }) { - onAction = (event: ActionEvent) => { - if (!txtGruppengroesse2.text.value.isEmpty) { - Platform.runLater{ - computeRiegenSuggest(event, str2Int(txtGruppengroesse2.text.value)) - } - } - } - }) - } - def doRiegenEinheitenExport(event: ActionEvent): Unit = { implicit val impevent = event KuTuApp.invokeWithBusyIndicator { diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala index 3aa3e9e46..fa3ef1768 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfInfo.scala @@ -7,6 +7,9 @@ case class WettkampfInfo(wettkampf: WettkampfView, service: KutuService) { val disziplinList: List[Disziplin] = wettkampfdisziplinViews.foldLeft(List[Disziplin]()) { (acc, dv) => if (!acc.contains(dv.disziplin)) acc :+ dv.disziplin else acc } + val startDisziplinList: List[Disziplin] = wettkampfdisziplinViews.foldLeft(List[Disziplin]()) { (acc, dv) => + if (!acc.contains(dv.disziplin) && dv.startgeraet > 0) acc :+ dv.disziplin else acc + } //val pathPrograms = wettkampfdisziplinViews.flatMap(wd => wd.programm.programPath.reverse.tail).distinct.sortBy(_.ord).reverse val parentPrograms = wettkampfdisziplinViews.map(wd => wd.programm.parent).filter(_.nonEmpty).map(_.get).distinct.sortBy(_.ord) //val parentPrograms = wettkampfdisziplinViews.map(wd => wd.programm.aggregator).distinct.sortBy(_.ord) From ef40d5f5459178b0ba664b248f2efbddded679dc Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 12 Apr 2023 13:11:08 +0200 Subject: [PATCH 50/99] fix suggest-feature: StackoverflowError in case of zero gear distribution --- src/main/scala/ch/seidel/kutu/squad/Stager.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/squad/Stager.scala b/src/main/scala/ch/seidel/kutu/squad/Stager.scala index 8cfbee45f..ab59d7ecc 100644 --- a/src/main/scala/ch/seidel/kutu/squad/Stager.scala +++ b/src/main/scala/ch/seidel/kutu/squad/Stager.scala @@ -141,7 +141,7 @@ trait Stager extends Mapper { protected def computeDimensions(sumOfAll: Int, geraete: Int, maxGeraeteRiegenSize: Int, level: Int): (Int, Int) = { val eqsize = (1d * sumOfAll / (geraete * level) + 0.9d).intValue() - if (eqsize <= maxGeraeteRiegenSize) (eqsize, level) else computeDimensions(sumOfAll, geraete, maxGeraeteRiegenSize, level +1) + if (eqsize <= maxGeraeteRiegenSize || geraete == 0 || level > 100) (eqsize, level) else computeDimensions(sumOfAll, geraete, maxGeraeteRiegenSize, level +1) } } \ No newline at end of file From e945b21bc39efc71b914b947eaf7086fec34af94 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 12 Apr 2023 17:52:56 +0200 Subject: [PATCH 51/99] Add startup progressmonitor --- .../ch/seidel/commons/ProgressForm.scala | 29 ++++- .../scala/ch/seidel/commons/TaskSteps.scala | 31 ++++++ src/main/scala/ch/seidel/kutu/KuTuApp.scala | 102 +++++++++++------- 3 files changed, 118 insertions(+), 44 deletions(-) create mode 100644 src/main/scala/ch/seidel/commons/TaskSteps.scala diff --git a/src/main/scala/ch/seidel/commons/ProgressForm.scala b/src/main/scala/ch/seidel/commons/ProgressForm.scala index 1747b4228..a61eb690d 100644 --- a/src/main/scala/ch/seidel/commons/ProgressForm.scala +++ b/src/main/scala/ch/seidel/commons/ProgressForm.scala @@ -1,6 +1,9 @@ package ch.seidel.commons -import scalafx.concurrent.Task +import scalafx.Includes.double2DurationHelper +import scalafx.animation.FadeTransition +import scalafx.application.{JFXApp3, Platform} +import scalafx.concurrent.{Task, Worker} import scalafx.geometry.{Insets, Pos} import scalafx.scene.Scene import scalafx.scene.control.{Label, ProgressBar, ProgressIndicator} @@ -8,20 +11,23 @@ import scalafx.scene.layout.{BorderPane, HBox, Priority, VBox} import scalafx.stage.{Modality, Stage, StageStyle} -class ProgressForm { +class ProgressForm(stage: Option[Stage] = None) { private val pb = new ProgressBar { hgrow = Priority.Always prefWidth = 480 } private val pin = new ProgressIndicator - private val dialogStage = new Stage { + private lazy val _dialogStage = new Stage { initStyle(StageStyle.Utility) initModality(Modality.ApplicationModal) resizable = false minWidth = 480 } - + def dialogStage = stage match { + case Some(s) => s + case None => _dialogStage + } private val label = new Label pb.setProgress(-1F) @@ -39,17 +45,30 @@ class ProgressForm { private val scene = new Scene(pane) dialogStage.setScene(scene) - def activateProgressBar(title: String, task: Task[_]): Unit = { + def activateProgressBar(title: String, task: Task[_], onSucces: () => Unit = ()=>{}): Unit = { if (task != null) { dialogStage.title.value = title pb.progressProperty.bind(task.progressProperty) pin.progressProperty.bind(task.progressProperty) label.text <== task.message + task.state.onChange { (_, _, newState) => + newState match { + case Worker.State.Succeeded.delegate => + pb.progress.unbind() + pin.progress.unbind() + label.text.unbind() + onSucces() + + case _ => + // TODO: handle other states + } + } } else { dialogStage.title.value = "Verarbeitung ..." label.text.value = title } dialogStage.show() + dialogStage.toFront } def getDialogStage: Stage = dialogStage diff --git a/src/main/scala/ch/seidel/commons/TaskSteps.scala b/src/main/scala/ch/seidel/commons/TaskSteps.scala new file mode 100644 index 000000000..933e33559 --- /dev/null +++ b/src/main/scala/ch/seidel/commons/TaskSteps.scala @@ -0,0 +1,31 @@ +package ch.seidel.commons + +import javafx.concurrent.Task + +case class TaskSteps(title: String) extends Task[Void] { + updateMessage(title) + var steps: List[(String, () => Unit)] = List.empty + + @throws[InterruptedException] + override def call: Void = { + val allSteps = steps.size + for (((msg, stepFn), idx) <- steps.zipWithIndex) { + println(msg) + updateMessage(msg) + if (allSteps > 1) { + updateProgress((idx * 2) + 1, allSteps * 2) + } + stepFn() + if (allSteps > 1) { + updateProgress(idx * 2 + 2, allSteps * 2) + } + println(msg + "ready") + } + null + } + + def nextStep(msg: String, stepFn: () => Unit): TaskSteps = { + steps = steps :+ (msg, stepFn) + this + } +} \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index 027bc0e46..debaeaa9f 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -1,6 +1,6 @@ package ch.seidel.kutu -import ch.seidel.commons.{DisplayablePage, PageDisplayer, ProgressForm} +import ch.seidel.commons.{DisplayablePage, PageDisplayer, ProgressForm, TaskSteps} import ch.seidel.jwt import ch.seidel.kutu.Config._ import ch.seidel.kutu.akka.KutuAppEvent @@ -30,19 +30,20 @@ import scalafx.scene.control.Tab.sfxTab2jfx import scalafx.scene.control.TableColumn._ import scalafx.scene.control.TextField.sfxTextField2jfx import scalafx.scene.control.TreeItem.sfxTreeItemToJfx -import scalafx.scene.control._ +import scalafx.scene.control.{TreeView, _} import scalafx.scene.image.{Image, ImageView} import scalafx.scene.input.{Clipboard, ClipboardContent, DataFormat} import scalafx.scene.layout._ import scalafx.scene.web.WebView import scalafx.scene.{Cursor, Node, Scene} -import scalafx.stage.FileChooser +import scalafx.stage.{FileChooser, Screen} import scalafx.stage.FileChooser.ExtensionFilter import spray.json._ import java.io.{ByteArrayInputStream, FileInputStream} import java.util.concurrent.{Executors, ScheduledExecutorService} import java.util.{Base64, Date, UUID} +import scala.collection.mutable import scala.concurrent.duration.Duration import scala.concurrent.{Await, Future, Promise} import scala.util.{Failure, Success} @@ -1768,8 +1769,26 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport def getStage() = stage override def start(): Unit = { - markAthletesInactiveOlderThan(3) + val pForm = new ProgressForm(Some(new PrimaryStage)) + val startSteps = TaskSteps("") + pForm.activateProgressBar("Wettkampf App startet ...", startSteps, startUI) + startSteps.nextStep("Starte die Datenbank ...", startDB) + startSteps.nextStep("Bereinige veraltete Daten ...", cleanupDB) + new Thread(startSteps).start() + } + def startDB(): Unit = { + Await.ready(Future { + println(database.source.toString) + }, Duration.Inf) + } + def cleanupDB(): Unit = { + Await.ready(Future { + markAthletesInactiveOlderThan(3) + }, Duration.Inf) + } + + def startUI(): Unit = { rootTreeItem = new TreeItem[String]("Dashboard") { expanded = true children = tree.getTree @@ -1923,49 +1942,49 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport // items += makeWettkampfRemoteRemoveMenu(p) // } - controlsView.contextMenu = new ContextMenu() { - items += makeWettkampfDurchfuehrenMenu(p) - items += makeWettkampfBearbeitenMenu(p) - items += makeWettkampfExportierenMenu(p) - items += makeWettkampfDataDirectoryMenu(p) - items += makeWettkampfLoeschenMenu(p) - // items += networkMenu - } - case Some(KuTuAppThumbNail(v: Verein, _, newItem)) => - controlsView.contextMenu = new ContextMenu() { - items += makeVereinUmbenennenMenu(v) - items += makeVereinLoeschenMenu(v) + controlsView.contextMenu = new ContextMenu() { + items += makeWettkampfDurchfuehrenMenu(p) + items += makeWettkampfBearbeitenMenu(p) + items += makeWettkampfExportierenMenu(p) + items += makeWettkampfDataDirectoryMenu(p) + items += makeWettkampfLoeschenMenu(p) + // items += networkMenu + } + case Some(KuTuAppThumbNail(v: Verein, _, newItem)) => + controlsView.contextMenu = new ContextMenu() { + items += makeVereinUmbenennenMenu(v) + items += makeVereinLoeschenMenu(v) + } + case _ => controlsView.contextMenu = new ContextMenu() } + } case _ => controlsView.contextMenu = new ContextMenu() } - } - case _ => controlsView.contextMenu = new ContextMenu() - } - } - val centerPane = (newItem.isLeaf, Option(newItem.getParent)) match { - case (true, Some(parent)) => { - tree.getThumbs(parent.getValue).find(p => p.button.text.getValue.equals(newItem.getValue)) match { - case Some(KuTuAppThumbNail(p: WettkampfView, _, newItem)) => - PageDisplayer.choosePage(modelWettkampfModus, Some(p), "dashBoard - " + newItem.getValue, tree) - case Some(KuTuAppThumbNail(v: Verein, _, newItem)) => - PageDisplayer.choosePage(modelWettkampfModus, Some(v), "dashBoard - " + newItem.getValue, tree) - case _ => + } + val centerPane = (newItem.isLeaf, Option(newItem.getParent)) match { + case (true, Some(parent)) => { + tree.getThumbs(parent.getValue).find(p => p.button.text.getValue.equals(newItem.getValue)) match { + case Some(KuTuAppThumbNail(p: WettkampfView, _, newItem)) => + PageDisplayer.choosePage(modelWettkampfModus, Some(p), "dashBoard - " + newItem.getValue, tree) + case Some(KuTuAppThumbNail(v: Verein, _, newItem)) => + PageDisplayer.choosePage(modelWettkampfModus, Some(v), "dashBoard - " + newItem.getValue, tree) + case _ => + PageDisplayer.choosePage(modelWettkampfModus, None, "dashBoard - " + newItem.getValue, tree) + } + } + case (false, Some(_)) => PageDisplayer.choosePage(modelWettkampfModus, None, "dashBoard - " + newItem.getValue, tree) + case (_, _) => + PageDisplayer.choosePage(modelWettkampfModus, None, "dashBoard", tree) } + if (splitPane.items.size > 1) { + splitPane.items.remove(1) + } + splitPane.items.add(1, centerPane) } - case (false, Some(_)) => - PageDisplayer.choosePage(modelWettkampfModus, None, "dashBoard - " + newItem.getValue, tree) - case (_, _) => - PageDisplayer.choosePage(modelWettkampfModus, None, "dashBoard", tree) - } - if (splitPane.items.size > 1) { - splitPane.items.remove(1) } - splitPane.items.add(1, centerPane) } - } - } var divider: Option[Double] = None modelWettkampfModus.onChange { @@ -1991,7 +2010,9 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport //initStyle(StageStyle.TRANSPARENT); title = "KuTu Wettkampf-App" icons += new Image(this.getClass.getResourceAsStream("/images/app-logo.png")) - scene = new Scene(1200, 750) { + val sceneWidth = 1200 + val sceneHeigth = 750 + scene = new Scene(sceneWidth, sceneHeigth) { root = new BorderPane { top = headerContainer center = new BorderPane { @@ -2001,6 +2022,9 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport } } + val bounds = Screen.primary.bounds + x = bounds.minX + bounds.width / 2 - sceneWidth / 2 + y = bounds.minY + bounds.height / 2 - sceneHeigth / 2 val st = this.getClass.getResource("/css/Main.css") if (st == null) { logger.debug("Ressource /css/main.css not found. Class-Anchor: " + this.getClass) From 7f191660fc35d1936f182c6b4cef4610ffce5fb6 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 12 Apr 2023 18:11:06 +0200 Subject: [PATCH 52/99] Fix wettkampfprogramm logic for nested pgms --- src/main/scala/ch/seidel/kutu/domain/package.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 880d27449..42a23642f 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -577,7 +577,7 @@ package object domain { case Some(p) => p.programPath :+ this } - def wettkampfprogramm: ProgrammView = if (aggregator == this) this else head + def wettkampfprogramm: ProgrammView = if (aggregator == this) this else aggregatorSubHead def aggregatorHead: ProgrammView = parent match { case Some(p) if (p.aggregate != 0) => p.aggregatorHead From 5684d4a889e44623cbd1a70a4fac49540da5d70e Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 12 Apr 2023 18:11:36 +0200 Subject: [PATCH 53/99] Add all predefined altersklassen to score-tab filters --- src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala index 229ea0eb3..fc27ce94a 100644 --- a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala @@ -35,8 +35,13 @@ class RanglisteTab(wettkampfmode: BooleanProperty, wettkampf: WettkampfView, ove } override def groupers: List[FilterBy] = { - val standardGroupers = List(ByNothing(), ByWettkampfProgramm(programmText), ByProgramm(programmText), - ByJahrgang(), ByJahrgangsAltersklasse("Turn10® Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), + val standardGroupers = List(ByNothing(), + ByWettkampfProgramm(programmText), ByProgramm(programmText), + ByJahrgang(), + ByAltersklasse("DTB Altersklasse", Altersklasse.altersklassenDTB), + ByAltersklasse("DTB Kür Altersklasse", Altersklasse.altersklassenDTBKuer), + ByAltersklasse("DTB Pflicht Altersklasse", Altersklasse.altersklassenDTBPflicht), + ByJahrgangsAltersklasse("Turn10® Altersklasse", Altersklasse.altersklassenTurn10), ByGeschlecht(), ByVerband(), ByVerein(), ByDurchgang(riegenZuDurchgang), ByRiege(), ByDisziplin()) From c73ad1a87f7044987fcbb2c2f715a3f834fc7c5d Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Wed, 12 Apr 2023 19:00:15 +0200 Subject: [PATCH 54/99] =?UTF-8?q?Fix=20Altersklassen-Expression=20f=C3=BCr?= =?UTF-8?q?=20DTBPflicht,=20DTBKuer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/ch/seidel/kutu/domain/package.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 42a23642f..c8ac639a1 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -438,11 +438,11 @@ package object domain { 6,18,22,25 ).map(i => ("AK", i)) // see https://www.dtb.de/fileadmin/user_upload/dtb.de/TURNEN/Standards/PDFs/Rahmentrainingskonzeption-GTm_inklAnlagen_19.11.2020.pdf - val akDTBPflichtExpression = "AK8-9,AK11-AK19/2" + val akDTBPflichtExpression = "AK8-9,AK11-19/2" val altersklassenDTBPflicht = Seq( 7,8,9,11,13,15,17,19 ).map(i => ("AK", i)) - val akDTBKuerExpression = "AK13,AK15-AK19/2" + val akDTBKuerExpression = "AK13-19/2" val altersklassenDTBKuer = Seq( 12,13,15,17,19 ).map(i => ("AK", i)) From 531df4ebf09f5466b069462dd13a67164c559638 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Thu, 13 Apr 2023 12:37:42 +0200 Subject: [PATCH 55/99] #659 Respect allowed age-range and sex for athlet-assignments --- .../ch/seidel/kutu/domain/AthletService.scala | 10 - .../scala/ch/seidel/kutu/domain/package.scala | 8 + .../kutu/view/AthletSelectionDialog.scala | 18 +- .../kutu/view/WettkampfWertungTab.scala | 212 +++++++----------- 4 files changed, 103 insertions(+), 145 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/AthletService.scala b/src/main/scala/ch/seidel/kutu/domain/AthletService.scala index 9fc43dcaf..0175cdd98 100644 --- a/src/main/scala/ch/seidel/kutu/domain/AthletService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/AthletService.scala @@ -304,16 +304,6 @@ trait AthletService extends DBService with AthletResultMapper { } } - def altersfilter(pgm: ProgrammView, a: Athlet): Boolean = { - val alter = a.gebdat match { - case Some(d) => Period.between(d.toLocalDate, LocalDate.now).getYears - case None => 7 - } - pgm.alterVon <= alter && pgm.alterBis >= alter - } - - def altersfilter(pgm: ProgrammView, a: AthletView): Boolean = altersfilter(pgm, a.toAthlet) - def markAthletesInactiveOlderThan(nYears: Int): Unit = { Await.result(database.run { sqlu""" diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index c8ac639a1..de5e7dd62 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -272,6 +272,14 @@ package object domain { case _ => "" }) + def shortPrint: String = "" + (geschlecht match { + case "W" => s"Ti ${name + " " + vorname}" + case _ => s"Tu ${name + " " + vorname}" + }) + " " + (gebdat match { + case Some(d) => f"$d%tY " + case _ => "" + }) + def toPublicView: Athlet = { Athlet(id, 0, geschlecht, name, vorname, gebdat .map(d => sqlDate2ld(d)) diff --git a/src/main/scala/ch/seidel/kutu/view/AthletSelectionDialog.scala b/src/main/scala/ch/seidel/kutu/view/AthletSelectionDialog.scala index fff47ccd1..d4e02c112 100644 --- a/src/main/scala/ch/seidel/kutu/view/AthletSelectionDialog.scala +++ b/src/main/scala/ch/seidel/kutu/view/AthletSelectionDialog.scala @@ -16,11 +16,19 @@ import scalafx.scene.control._ import scalafx.scene.input.{KeyCode, KeyEvent, MouseEvent} import scalafx.scene.layout._ -class AthletSelectionDialog(actionTitle: String, progrm: ProgrammView, assignedAthleten: Seq[AthletView], service: KutuService, refreshPaneData: Set[Long]=>Unit) { +import java.time.{LocalDate, Period} +class AthletSelectionDialog(actionTitle: String, wettkampfDatum: LocalDate, alterVon: Int, alterBis: Int, sex: Set[String], assignedAthleten: Seq[AthletView], service: KutuService, refreshPaneData: Set[Long]=>Unit) { + + def alter(a: AthletView): Int = { + a.gebdat.map(d => Period.between(d.toLocalDate, wettkampfDatum).getYears).getOrElse(100) + } val athletModel = ObservableBuffer.from( - service.selectAthletesView.filter(service.altersfilter(progrm, _)). - filter { p => /*p.activ &&*/ assignedAthleten.forall { wp => wp.id != p.id } }. + service.selectAthletesView.filter(a => { + sex.contains(a.geschlecht) && + Range.inclusive(alterVon, alterBis).contains(alter(a)) + }). + filter { p => assignedAthleten.forall { wp => wp.id != p.id } }. sortBy { a => (a.activ match {case true => "A" case _ => "X"}) + ":" + a.name + ":" + a.vorname } ) @@ -29,10 +37,10 @@ class AthletSelectionDialog(actionTitle: String, progrm: ProgrammView, assignedA val athletTable = new TableView[AthletView](filteredModel) { columns ++= List( new TableColumn[AthletView, String] { - text = "Name Vorname" + text = "Name Vorname Jg" cellValueFactory = { x => new ReadOnlyStringWrapper(x.value, "athlet", { - s"${x.value.name} ${x.value.vorname}" + s"${x.value.toAthlet.shortPrint}" }) } //prefWidth = 150 diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index 81d0501be..236823085 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -32,6 +32,7 @@ import scalafx.scene.input.{Clipboard, KeyEvent} import scalafx.scene.layout._ import scalafx.util.converter.{DefaultStringConverter, DoubleStringConverter} +import java.time.Period import java.util.UUID import java.util.concurrent.{ScheduledFuture, TimeUnit} import scala.concurrent.ExecutionContext.Implicits.global @@ -958,7 +959,6 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr val vereine = ObservableBuffer.from(vereineList) val cbVereine = new ComboBox[Verein] { items = vereine - //selectionModel.value.selectFirst() } val programms = progrm.map(p => service.readWettkampfLeafs(p.head.id)).toSeq.flatten val clipboardlines = Source.fromString(Clipboard.systemClipboard.getString + "").getLines() @@ -995,7 +995,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr } catch { case d: Exception => - programms.filter(pgm => pgm.name.equalsIgnoreCase(fields(3))).headOption match { + programms.find(pgm => pgm.name.equalsIgnoreCase(fields(3))) match { case Some(p) => p.id case _ => progrm match { case Some(p) => p.id @@ -1030,25 +1030,16 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr val athletTable = new TableView[(Long, Athlet, AthletView)](filteredModel) { columns ++= List( new TableColumn[(Long, Athlet, AthletView), String] { - text = "Athlet" + text = "Athlet (Name, Vorname, JG)" cellValueFactory = { x => new ReadOnlyStringWrapper(x.value, "athlet", { - s"${x.value._2.name} ${x.value._2.vorname}, ${ - x.value._2.gebdat.map(d => f"$d%tY") match { - case None => "" - case Some(t) => t - } - }" + s"${x.value._2.shortPrint}" }) } minWidth = 250 }, new TableColumn[(Long, Athlet, AthletView), String] { - text = programm.map(p => p.head.id match { - case 20 => "Kategorie" - case 1 => "." - case _ => "Programm" - }).getOrElse(".") + text = programm.map(p => if (p.head.name.toUpperCase.contains("GETU")) "Kategorie" else "Programm").getOrElse(".") cellValueFactory = { x => new ReadOnlyStringWrapper(x.value, "programm", { programms.find { p => p.id == x.value._1 || p.aggregatorHead.id == x.value._1 } match { @@ -1131,120 +1122,14 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr if (!athletTable.selectionModel().isEmpty) { val selectedAthleten = athletTable.items.value.zipWithIndex.filter { x => athletTable.selectionModel.value.isSelected(x._2) - }.map { x => - val ((progrId, importathlet, candidateView), idx) = x - val id = if (candidateView.id > 0 && - (importathlet.gebdat match { - case Some(d) => - candidateView.gebdat match { - case Some(cd) => f"${cd}%tF".endsWith("-01-01") - case _ => true - } - case _ => false - })) { - val athlet = service.insertAthlete(Athlet( - id = candidateView.id, - js_id = candidateView.js_id, - geschlecht = candidateView.geschlecht, - name = candidateView.name, - vorname = candidateView.vorname, - gebdat = importathlet.gebdat, - strasse = candidateView.strasse, - plz = candidateView.plz, - ort = candidateView.ort, - verein = Some(cbVereine.selectionModel.value.selectedItem.value.id), - activ = true - )) - athlet.id - } - else if (candidateView.id > 0) { - candidateView.id - } - else { - val athlet = service.insertAthlete(Athlet( - id = 0, - js_id = candidateView.js_id, - geschlecht = candidateView.geschlecht, - name = candidateView.name, - vorname = candidateView.vorname, - gebdat = candidateView.gebdat, - strasse = candidateView.strasse, - plz = candidateView.plz, - ort = candidateView.ort, - verein = Some(cbVereine.selectionModel.value.selectedItem.value.id), - activ = true - )) - athlet.id - } - (progrId, id) - } - - for ((progId, athletes) <- selectedAthleten.groupBy(_._1).map(x => (x._1, x._2.map(_._2)))) { - service.assignAthletsToWettkampf(wettkampf.id, Set(progId), athletes.toSet) - } - - reloadData() + }.map(_._1) + insertClipboardAssignments(cbVereine.selectionModel.value.selectedItem.value.id, selectedAthleten) } } }, new Button("OK Alle") { disable <== when(cbVereine.selectionModel.value.selectedItemProperty.isNull()) choose true otherwise false onAction = (event: ActionEvent) => { - val clip = filteredModel.map { raw => - val (progId, importAthlet, candidateView) = raw - val athlet = if (candidateView.id > 0 && - (importAthlet.gebdat match { - case Some(d) => - candidateView.gebdat match { - case Some(cd) => f"${cd}%tF".endsWith("-01-01") - case _ => true - } - case _ => false - })) { - val athlet = service.insertAthlete(Athlet( - id = candidateView.id, - js_id = candidateView.js_id, - geschlecht = candidateView.geschlecht, - name = candidateView.name, - vorname = candidateView.vorname, - gebdat = importAthlet.gebdat, - strasse = candidateView.strasse, - plz = candidateView.plz, - ort = candidateView.ort, - verein = Some(cbVereine.selectionModel.value.selectedItem.value.id), - activ = true - )) - AthletView(athlet.id, athlet.js_id, athlet.geschlecht, athlet.name, athlet.vorname, athlet.gebdat, athlet.strasse, athlet.plz, athlet.ort, Some(cbVereine.selectionModel.value.selectedItem.value), true) - } - else if (candidateView.id > 0) { - candidateView - } - else { - val candidate = Athlet( - id = candidateView.id, - js_id = candidateView.js_id, - geschlecht = candidateView.geschlecht, - name = candidateView.name, - vorname = candidateView.vorname, - gebdat = candidateView.gebdat, - strasse = candidateView.strasse, - plz = candidateView.plz, - ort = candidateView.ort, - verein = Some(cbVereine.selectionModel.value.selectedItem.value.id), - activ = true - ) - val athlet = service.insertAthlete(candidate) - AthletView(athlet.id, athlet.js_id, athlet.geschlecht, athlet.name, athlet.vorname, athlet.gebdat, athlet.strasse, athlet.plz, athlet.ort, Some(cbVereine.selectionModel.value.selectedItem.value), true) - } - (progId, athlet) - }.toList - if (!athletModel.isEmpty) { - val pgathl = clip.groupBy(_._1).map(x => (x._1, x._2.map(_._2.id))) - logger.debug(pgathl.toString) - for ((progId, athletes) <- pgathl) { - service.assignAthletsToWettkampf(wettkampf.id, Set(progId), athletes.toSet) - } - reloadData() - } + insertClipboardAssignments(cbVereine.selectionModel.value.selectedItem.value.id, filteredModel) } }) } @@ -1252,6 +1137,63 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr } } + private def insertClipboardAssignments(vereinId: Long, selectedAthleten: ObservableBuffer[(Long, Athlet, AthletView)]): Unit = { + val clip = selectedAthleten.map { x => + val (progrId, importathlet, candidateView) = x + val id = if (candidateView.id > 0 && + (importathlet.gebdat match { + case Some(d) => + candidateView.gebdat match { + case Some(cd) => f"${cd}%tF".endsWith("-01-01") + case _ => true + } + case _ => false + })) { + val athlet = service.insertAthlete(Athlet( + id = candidateView.id, + js_id = candidateView.js_id, + geschlecht = candidateView.geschlecht, + name = candidateView.name, + vorname = candidateView.vorname, + gebdat = importathlet.gebdat, + strasse = candidateView.strasse, + plz = candidateView.plz, + ort = candidateView.ort, + verein = Some(vereinId), + activ = true + )) + athlet.id + } + else if (candidateView.id > 0) { + candidateView.id + } + else { + val athlet = service.insertAthlete(Athlet( + id = 0, + js_id = candidateView.js_id, + geschlecht = candidateView.geschlecht, + name = candidateView.name, + vorname = candidateView.vorname, + gebdat = candidateView.gebdat, + strasse = candidateView.strasse, + plz = candidateView.plz, + ort = candidateView.ort, + verein = Some(vereinId), + activ = true + )) + athlet.id + } + (progrId, id) + } + if (!clip.isEmpty) { + for ((progId, athletes) <- clip.groupBy(_._1).map(x => (x._1, x._2.map(_._2)))) { + service.assignAthletsToWettkampf(wettkampf.id, Set(progId), athletes.toSet) + } + + reloadData() + } + } + val generateTeilnehmerListe = new Button with KategorieTeilnehmerToHtmlRenderer { text = "Teilnehmerliste erstellen" minWidth = 75 @@ -1569,15 +1511,19 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr } } val moveToOtherProgramButton = new Button { - text = programm.map(p => p.head.id match { - case 20 => "Turner Kategorie wechseln ..." - case 1 => "." - case _ => "Turner Programm wechseln ..." + val pgmpattern = ".*GETU.*/i".r + text = programm.map(p => p.head.name match { + case pgmpattern() => "Tu/Ti Kategorie wechseln ..." + case _ => "Tu/Ti Programm wechseln ..." }).getOrElse(".") minWidth = 75 onAction = (event: ActionEvent) => { implicit val impevent = event - val programms = programm.map(p => service.readWettkampfLeafs(p.head.id)).get + val athlet = wkview.selectionModel().getSelectedItem.head.init.athlet + val alter = athlet.gebdat.map(d => Period.between(d.toLocalDate, wettkampf.datum).getYears).getOrElse(100) + val programms = programm.toList.flatMap(p => service.readWettkampfLeafs(p.head.id)).filter(p => { + Range.inclusive(p.alterVon, p.alterBis).contains(alter) + }) val prmodel = ObservableBuffer.from(programms) val cbProgramms = new ComboBox[ProgrammView] { items = prmodel @@ -1648,7 +1594,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr minWidth = 75 onAction = (event: ActionEvent) => { new AthletSelectionDialog( - text.value, wettkampf.programm, wertungen.map(w => w.head.init.athlet), service, + text.value, wettkampf.datum.toLocalDate, wettkampf.programm.alterVon, wettkampf.programm.alterBis, Set("W", "M"), wertungen.map(w => w.head.init.athlet), service, (selection: Set[Long]) => { service.assignAthletsToWettkampf(wettkampf.id, Set(2, 3), selection) reloadData() @@ -1672,8 +1618,14 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr text = "Athlet hinzufügen" minWidth = 75 onAction = (event: ActionEvent) => { + val wkdisziplinlist = service.listWettkampfDisziplines(wettkampf.id) + val sex = wkdisziplinlist.flatMap{wkd => (wkd.feminim, wkd.masculin) match { + case (1, 0) => Set("W") + case (0, 1) => Set("M") + case _ => Set("M", "W") + }}.toSet new AthletSelectionDialog( - text.value, progrm, wertungen.map(w => w.head.init.athlet), service, + text.value, wettkampf.datum.toLocalDate, progrm.alterVon, progrm.alterBis, sex, wertungen.map(w => w.head.init.athlet), service, (selection: Set[Long]) => { service.assignAthletsToWettkampf(wettkampf.id, Set(progrm.id), selection) reloadData() From c0b72b9b687657c7b462864ef54f06cd083c5e77 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Thu, 13 Apr 2023 14:51:13 +0200 Subject: [PATCH 56/99] #670 Fix navigate to squad results from network-tab - early filter values corresponding to the squad's results. --- .../scala/ch/seidel/kutu/view/NetworkTab.scala | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala b/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala index f8ced1d3c..8cf11960c 100644 --- a/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala @@ -479,15 +479,17 @@ class NetworkTab(wettkampfmode: BooleanProperty, override val wettkampfInfo: Wet val selection = durchgang.geraeteRiegen.filter { _.disziplin.contains(disziplin) } - items = selection.map { r => - val menu = KuTuApp.makeMenuAction(r.caption) { (caption, action) => + items = selection.map { geraeteRiege => + val menu = KuTuApp.makeMenuAction(geraeteRiege.caption) { (caption, action) => lazypane match { case Some(pane) => - val wertungTab: WettkampfWertungTab = new WettkampfWertungTab(wettkampfmode, None, Some(r), wettkampfInfo, service, { - val progs = service.readWettkampfLeafs(wettkampf.programm.id) - service.listAthletenWertungenZuProgramm(progs map (p => p.id), wettkampf.id) + val pgmFilter = geraeteRiege.kandidaten.flatMap(_.wertungen.map(w => w.wettkampfdisziplin.programm)).distinct + val progs = service.readWettkampfLeafs(wettkampf.programm.id) map (p => p.id) + val wertungTab: WettkampfWertungTab = new WettkampfWertungTab(wettkampfmode, None, Some(geraeteRiege), wettkampfInfo, service, { + service.listAthletenWertungenZuProgramm(progs, wettkampf.id) + .filter(wertung => pgmFilter.contains(wertung.wettkampfdisziplin.programm)) }) { - text = r.caption + text = geraeteRiege.caption closable = true } pane.tabs.add(pane.tabs.size() + (if (wettkampfmode.value) -2 else -1), wertungTab.asInstanceOf[Tab]) @@ -502,7 +504,7 @@ class NetworkTab(wettkampfmode: BooleanProperty, override val wettkampfInfo: Wet } } menu.graphic = new ImageView { - image = if (r.erfasst) okIcon else nokIcon + image = if (geraeteRiege.erfasst) okIcon else nokIcon } menu } From f750904abe72aa963fa2fc27ef34b950f23c8f58 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Thu, 13 Apr 2023 15:41:54 +0200 Subject: [PATCH 57/99] minor cleanups --- .../scala/ch/seidel/commons/TaskSteps.scala | 6 ++- src/main/scala/ch/seidel/kutu/KuTuApp.scala | 47 +++++++++---------- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/src/main/scala/ch/seidel/commons/TaskSteps.scala b/src/main/scala/ch/seidel/commons/TaskSteps.scala index 933e33559..405169364 100644 --- a/src/main/scala/ch/seidel/commons/TaskSteps.scala +++ b/src/main/scala/ch/seidel/commons/TaskSteps.scala @@ -1,8 +1,10 @@ package ch.seidel.commons import javafx.concurrent.Task +import org.slf4j.LoggerFactory case class TaskSteps(title: String) extends Task[Void] { + private val logger = LoggerFactory.getLogger(this.getClass) updateMessage(title) var steps: List[(String, () => Unit)] = List.empty @@ -10,7 +12,7 @@ case class TaskSteps(title: String) extends Task[Void] { override def call: Void = { val allSteps = steps.size for (((msg, stepFn), idx) <- steps.zipWithIndex) { - println(msg) + logger.info(msg) updateMessage(msg) if (allSteps > 1) { updateProgress((idx * 2) + 1, allSteps * 2) @@ -19,7 +21,7 @@ case class TaskSteps(title: String) extends Task[Void] { if (allSteps > 1) { updateProgress(idx * 2 + 2, allSteps * 2) } - println(msg + "ready") + logger.info(msg + "ready") } null } diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index debaeaa9f..f27dec1c3 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -88,22 +88,22 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport val oldselected = selectionPathToRoot(controlsView.selectionModel().getSelectedItem) - lastSelected.value = "Updating" - var lastNode = rootTreeItem - try { - tree = AppNavigationModel.create(KuTuApp.this) - rootTreeItem.children = tree.getTree - for {node <- oldselected} { - lastNode.setExpanded(true) - lastNode.children.find(n => n.value.value.equals(node.value.value)) match { - case Some(n) => lastNode = n - case _ => + lastSelected.value = "Updating" + var lastNode = rootTreeItem + try { + tree = AppNavigationModel.create(KuTuApp.this) + rootTreeItem.children = tree.getTree + for {node <- oldselected} { + lastNode.setExpanded(true) + lastNode.children.find(n => n.value.value.equals(node.value.value)) match { + case Some(n) => lastNode = n + case _ => + } } + } finally { + lastSelected.value = oldselected.lastOption.map(_.value.value).getOrElse("") } - } finally { - lastSelected.value = oldselected.lastOption.map(_.value.value).getOrElse("") - } - controlsView.selectionModel().select(lastNode) + controlsView.selectionModel().select(lastNode) } def handleAction[J <: javafx.event.ActionEvent, R](handler: scalafx.event.ActionEvent => R) = new javafx.event.EventHandler[J] { @@ -1156,11 +1156,8 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport cmbAltersklassen.value ) - cmbAltersklassen.value.onChange{ + cmbAltersklassen.value.onChange { text.value = Altersklasse.predefinedAKs(cmbAltersklassen.value.value) - if (editable.value) { - text.value += " Editable" - } } } val cmbJGAltersklassen = new ComboBox[String]() { @@ -1183,9 +1180,6 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport cmbJGAltersklassen.value.onChange{ text.value = Altersklasse.predefinedAKs(cmbJGAltersklassen.value.value) - if (editable.value) { - text.value += " Editable" - } } } PageDisplayer.showInDialog(caption, new DisplayablePage() { @@ -1778,17 +1772,17 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport } def startDB(): Unit = { - Await.ready(Future { - println(database.source.toString) - }, Duration.Inf) + logger.info(database.source.toString) } + def cleanupDB(): Unit = { - Await.ready(Future { + Future { markAthletesInactiveOlderThan(3) - }, Duration.Inf) + } } def startUI(): Unit = { + logger.info("starte das UI ...") rootTreeItem = new TreeItem[String]("Dashboard") { expanded = true children = tree.getTree @@ -2039,5 +2033,6 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport scene().stylesheets.add(st.toExternalForm) } } + logger.info("UI ready") } } \ No newline at end of file From 26cf45e73cc279eb778f202b7a2fc61c6da55fb3 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Thu, 13 Apr 2023 15:45:16 +0200 Subject: [PATCH 58/99] #659 Fix taking jahrgangs-altersklasse in wk-overview --- .../seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala index 798faa4a9..c08b18111 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala @@ -275,7 +275,7 @@ trait WettkampfOverviewToHtmlRenderer { Alter am Wettkampf - Tag: ${wettkampf.altersklassen}
      ${altersklassen}
    """ - else if (altersklassen.nonEmpty) + else if (jgAltersklassen.nonEmpty) s"""

    Altersklassen

    Alter im Wettkampf - Jahr: ${wettkampf.jahrgangsklassen}
      ${jgAltersklassen} From dbcbec6f2de97a06e8f6a52082e29bc2b3794c5f Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Thu, 13 Apr 2023 16:44:08 +0200 Subject: [PATCH 59/99] Fix navigation to non editable cell --- .../ch/seidel/commons/AutoCommitTextFieldTableCell.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala b/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala index fd4326373..10bf86c91 100644 --- a/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala +++ b/src/main/scala/ch/seidel/commons/AutoCommitTextFieldTableCell.scala @@ -176,7 +176,7 @@ object AutoCommitTextFieldTableCell { tableView.selectionModel.value.select(newSelectedRowIdx, nextEditable) tableView.scrollToColumn(nextEditable) } - else { + else if (editableColumns.nonEmpty) { tableView.selectionModel.value.select(newSelectedRowIdx, editableColumns.head) tableView.scrollToColumn(editableColumns.head) } @@ -206,7 +206,7 @@ object AutoCommitTextFieldTableCell { tableView.selectionModel.value.select(newSelectedRowIdx, nextEditable) tableView.scrollToColumn(nextEditable) } - else { + else if (editableColumns.nonEmpty) { tableView.selectionModel.value.select(newSelectedRowIdx, editableColumns.last) tableView.scrollToColumn(editableColumns.head) } From dd86667a94b73ac727bbf68e01562c5458964012 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Thu, 13 Apr 2023 16:44:17 +0200 Subject: [PATCH 60/99] Fix nested pgm's riege2 column showing its real content --- src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index 236823085..ef354ed39 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -563,7 +563,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr } cellValueFactory = { x => new ReadOnlyStringWrapper(x.value, "riege2", { - s"${x.value.find(we => we.init.wettkampfdisziplin.programm == p).flatMap(we => we.init.riege2).getOrElse("keine Einteilung")}" + s"${x.value.find(we => we.init.wettkampfdisziplin.programm.programPath.contains(p)).flatMap(we => we.init.riege2).getOrElse("keine Einteilung")}" }) } // delegate.impl_setReorderable(false) From fa3e12537107972061489d7c2e5a49def3715034 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Thu, 13 Apr 2023 17:16:25 +0200 Subject: [PATCH 61/99] Add GroupBy Riege2 Grouper/Filter --- src/main/scala/ch/seidel/kutu/data/GroupBy.scala | 13 +++++++++++-- .../scala/ch/seidel/kutu/http/ScoreRoutes.scala | 4 ++-- .../scala/ch/seidel/kutu/view/RanglisteTab.scala | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala index 422c1c1d2..54268a9ce 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala @@ -292,7 +292,16 @@ case class ByWettkampf() extends GroupBy with FilterBy { case class ByRiege() extends GroupBy with FilterBy { override val groupname = "Riege" protected override val grouper = (v: WertungView) => { - Riege(v.riege match { case Some(r) => r case None => "keine Einteilung" }, None, None, 0) + Riege(v.riege match { case Some(r) => r case None => "Ohne Einteilung" }, None, None, 0) + } + protected override val sorter: Option[(GroupSection, GroupSection) => Boolean] = Some((gs1: GroupSection, gs2: GroupSection) => { + gs1.groupKey.easyprint.compareTo(gs2.groupKey.easyprint) < 0 + }) +} +case class ByRiege2() extends GroupBy with FilterBy { + override val groupname = "Riege2" + protected override val grouper = (v: WertungView) => { + Riege(v.riege2 match { case Some(r) => r case None => "Ohne Spezial-Einteilung" }, None, None, 0) } protected override val sorter: Option[(GroupSection, GroupSection) => Boolean] = Some((gs1: GroupSection, gs2: GroupSection) => { gs1.groupKey.easyprint.compareTo(gs2.groupKey.easyprint) < 0 @@ -422,7 +431,7 @@ object GroupBy { ByWettkampfProgramm("Kategorie"), ByProgramm("Kategorie"), ByWettkampfProgramm("Programm"), ByProgramm("Programm"), ByWettkampf(), ByJahrgang(), ByGeschlecht(), ByVerband(), ByVerein(), ByAthlet(), - ByRiege(), ByDisziplin(), ByJahr() + ByRiege(), ByRiege2(), ByDisziplin(), ByJahr() ) def apply(query: String, data: Seq[WertungView], groupers: List[FilterBy] = allGroupers): GroupBy = { diff --git a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala index 4e08424d5..7f953a045 100644 --- a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala @@ -34,7 +34,7 @@ ScoreRoutes extends SprayJsonSupport with JsonSupport with AuthSupport with Rout ByWettkampfProgramm(), ByProgramm(), ByWettkampf(), ByJahrgang(), ByJahrgangsAltersklasse("Turn10® Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), ByGeschlecht(), ByVerband(), ByVerein(), ByAthlet(), - ByRiege(), ByDisziplin(), ByJahr() + ByRiege(), ByRiege2(), ByDisziplin(), ByJahr() ) def queryScoreResults(wettkampf: String, groupby: Option[String], filter: Iterable[String], html: Boolean, @@ -155,7 +155,7 @@ ScoreRoutes extends SprayJsonSupport with JsonSupport with AuthSupport with Rout val standardGroupers = List(ByWettkampfProgramm(programmText), ByProgramm(programmText), ByJahrgang(), ByJahrgangsAltersklasse("Turn10® Altersklassen", Altersklasse.altersklassenTurn10), ByAltersklasse("DTB Altersklassen", Altersklasse.altersklassenDTB), ByGeschlecht(), ByVerband(), ByVerein(), byDurchgangMat, - ByRiege(), ByDisziplin(), ByJahr()) + ByRiege(), ByRiege2(), ByDisziplin(), ByJahr()) (altersklassen.nonEmpty, jgAltersklassen.nonEmpty) match { case (true,true) => standardGroupers ++ List(ByAltersklasse("Wettkampf Altersklassen", altersklassen), ByJahrgangsAltersklasse("Wettkampf JG-Altersklassen", jgAltersklassen)) case (false,true) => standardGroupers :+ ByJahrgangsAltersklasse("Wettkampf JG-Altersklassen", jgAltersklassen) diff --git a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala index fc27ce94a..cc97cf7ef 100644 --- a/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RanglisteTab.scala @@ -44,7 +44,7 @@ class RanglisteTab(wettkampfmode: BooleanProperty, wettkampf: WettkampfView, ove ByJahrgangsAltersklasse("Turn10® Altersklasse", Altersklasse.altersklassenTurn10), ByGeschlecht(), ByVerband(), ByVerein(), - ByDurchgang(riegenZuDurchgang), ByRiege(), ByDisziplin()) + ByDurchgang(riegenZuDurchgang), ByRiege(), ByRiege2(), ByDisziplin()) (altersklassen.nonEmpty, jgAltersklassen.nonEmpty) match { case (true,true) => standardGroupers ++ List(ByAltersklasse("Wettkampf Altersklassen", altersklassen), ByJahrgangsAltersklasse("Wettkampf JG-Altersklassen", jgAltersklassen)) case (false,true) => standardGroupers :+ ByJahrgangsAltersklasse("Wettkampf JG-Altersklassen", jgAltersklassen) From 21b66b68b94dee643a5727bbd75207198683f25e Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Fri, 14 Apr 2023 00:19:45 +0200 Subject: [PATCH 62/99] Adjust group-parts for JGClubGrouper and ATTGrouper --- src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala | 2 +- src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala index 5ca210c6e..082c29e70 100644 --- a/src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala +++ b/src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala @@ -8,7 +8,7 @@ case object ATTGrouper extends RiegenGrouper { override def buildGrouper(riegencnt: Int): (List[WertungView => String], List[WertungView => String], Boolean) = { val atGrp = atGrouper.drop(1)++atGrouper.take(1) - (atGrp, atGrp, true) + (atGrouper.take(3), atGrouper, true) } val atGrouper: List[WertungView => String] = List( diff --git a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala index ca1cefd09..b39f06fa1 100644 --- a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala +++ b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala @@ -22,8 +22,8 @@ case object JGClubGrouper extends RiegenGrouper { val jgclubGrouper: List[WertungView => String] = List( x => x.athlet.geschlecht, - x => x.wettkampfdisziplin.programm.name, x => extractJGGrouper(x), + x => x.wettkampfdisziplin.programm.name, x => x.athlet.verein match {case Some(v) => v.easyprint case None => ""} ) } \ No newline at end of file From bb44d5dc14bedc67001f28e97284a4f757b5cff8 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Fri, 14 Apr 2023 08:57:49 +0200 Subject: [PATCH 63/99] bump v2r2 refs to v2r3 --- docs/HowToSetupTestInstallation.md | 22 +++++++++---------- .../seidel/kutu/renderer/MailTemplates.scala | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/HowToSetupTestInstallation.md b/docs/HowToSetupTestInstallation.md index c8d61be30..1ae1c9632 100644 --- a/docs/HowToSetupTestInstallation.md +++ b/docs/HowToSetupTestInstallation.md @@ -17,7 +17,7 @@ wieder eingestellt werden muss, oder bei der andere Server-Adressen hinterlegt s Entwicklungs-Server verbunden werden soll, kann mit folgender Anleitung eine Test-Instanz konfiguriert werden. Die Versionsbezeichnungen können im Laufe geändert haben und müssen ggf. in den Scripts angepasst werden. -Aktuell wird -v2r2 verwendet. +Aktuell wird -v2r3 verwendet. Mac OS (Terminal): ------------------ @@ -25,7 +25,7 @@ Copy & Paste folgendes Script im Terminal, ev. mit `sudo` notwendig: ``` rm -rf ~/Applications/Test-KutuApp.app -cp -r /Applications/TurnerWettkampf-App-v2r2.app/ ~/Applications/Test-KutuApp.app +cp -r /Applications/TurnerWettkampf-App-v2r3.app/ ~/Applications/Test-KutuApp.app echo 'app { majorversion = "latest-testversion" @@ -56,14 +56,14 @@ function set-shortcut { } -$rmjob = Start-Job -ScriptBlock { rm $Env:LOCALAPPDATA\Test-TurnerWettkampf-App-v2r2 -Recurse } +$rmjob = Start-Job -ScriptBlock { rm $Env:LOCALAPPDATA\Test-TurnerWettkampf-App-v2r3 -Recurse } Wait-Job $rmjob Receive-Job $rmjob -$cpjob = Start-Job -ScriptBlock { cp $Env:LOCALAPPDATA\TurnerWettkampf-App-v2r2 $Env:LOCALAPPDATA\Test-TurnerWettkampf-App-v2r2 -Recurse } +$cpjob = Start-Job -ScriptBlock { cp $Env:LOCALAPPDATA\TurnerWettkampf-App-v2r3 $Env:LOCALAPPDATA\Test-TurnerWettkampf-App-v2r3 -Recurse } Wait-Job $cpjob Receive-Job $cpjob -Set-Content $Env:LOCALAPPDATA\Test-TurnerWettkampf-App-v2r2\app\kutuapp.conf -Value 'app { +Set-Content $Env:LOCALAPPDATA\Test-TurnerWettkampf-App-v2r3\app\kutuapp.conf -Value 'app { majorversion = "latest-testversion" remote { schema = "https" @@ -72,20 +72,20 @@ Set-Content $Env:LOCALAPPDATA\Test-TurnerWettkampf-App-v2r2\app\kutuapp.conf -Va }' $DesktopPath = [Environment]::GetFolderPath("Desktop") -set-shortcut "$DesktopPath\Test-TurnerWettkampf-App-v2r2.lnk" "$Env:LOCALAPPDATA\Test-TurnerWettkampf-App-v2r2\TurnerWettkampf-App-v2r2.exe" +set-shortcut "$DesktopPath\Test-TurnerWettkampf-App-v2r3.lnk" "$Env:LOCALAPPDATA\Test-TurnerWettkampf-App-v2r3\TurnerWettkampf-App-v2r3.exe" ``` Dann starten via Desktop-Verknüpfung oder via PowerShell mit ``` -$Env:LOCALAPPDATA\Test-TurnerWettkampf-App-v2r2\TurnerWettkampf-App-v2r2.exe +$Env:LOCALAPPDATA\Test-TurnerWettkampf-App-v2r3\TurnerWettkampf-App-v2r3.exe ``` Linux (Terminal): ----------------- ``` -rm -rf ./TurnerWettkampf-App-v2r2 +rm -rf ./TurnerWettkampf-App-v2r3 -cp -r /opt/TurnerWettkampf-App-v2r2 ./ +cp -r /opt/TurnerWettkampf-App-v2r3 ./ echo 'app { majorversion = "latest-testversion" @@ -93,11 +93,11 @@ echo 'app { schema = "https" hostname = "test-kutuapp.sharevic.net" } -}' > TurnerWettkampf-App-v2r2/app/kutuapp.conf +}' > TurnerWettkampf-App-v2r3/app/kutuapp.conf ``` Dann starten mit: -```~/TurnerWettkampf-App-v2r2/TurnerWettkampf-App-v2r2``` +```~/TurnerWettkampf-App-v2r3/TurnerWettkampf-App-v2r3``` Verifikation, dass die Testversion korrekt funktioniert: diff --git a/src/main/scala/ch/seidel/kutu/renderer/MailTemplates.scala b/src/main/scala/ch/seidel/kutu/renderer/MailTemplates.scala index 6e51412f8..db9d7519b 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/MailTemplates.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/MailTemplates.scala @@ -134,7 +134,7 @@ object MailTemplates { }.mkString("\n")} | |Falls Du Hilfe benötigst, findest Du hier die Anleitung dazu: - | https://luechtdiode.gitbook.io/turner-wettkampf-app/v/v2r2/wettkampf-vorbereitung/wettkampf_uebersicht/turneranmeldungen_verarbeiten_online#sync-registrations-1 + | https://luechtdiode.gitbook.io/turner-wettkampf-app/v/v2r3/wettkampf-vorbereitung/wettkampf_uebersicht/turneranmeldungen_verarbeiten_online#sync-registrations-1 | |Dieses Mail wird erneut versendet, wenn sich weitere Änderungen ergeben. | @@ -173,7 +173,7 @@ object MailTemplates { }.mkString("\n")} |

    | Falls Du Hilfe benötigst, findest Du hier die Anleitung dazu: - | Online Bedienungsanleitung + | Online Bedienungsanleitung |

    | Dieses Mail wird erneut versendet, wenn sich weitere Änderungen ergeben. |

    From 5e331e9053e8c1147cfc50c2eb62b315483608ee Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Fri, 14 Apr 2023 09:28:58 +0200 Subject: [PATCH 64/99] escape html rendered vars in wk-overview --- .../renderer/WettkampfOverviewToHtmlRenderer.scala | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala index c08b18111..e76c64c74 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala @@ -265,20 +265,20 @@ trait WettkampfOverviewToHtmlRenderer { if (!isLocalServer) { s"""

    EMail des Wettkampf-Administrators

    An diese EMail Adresse werden Notifikations-Meldungen versendet, sobald sich an den Anmeldungen Mutationen ergeben.
    - ${if (wettkampf.notificationEMail.nonEmpty) s"""${wettkampf.notificationEMail}""" else "Keine EMail hinterlegt!"} + ${if (wettkampf.notificationEMail.nonEmpty) s"""${escaped(wettkampf.notificationEMail)}""" else "Keine EMail hinterlegt!"} """ } else "" }

    ${if (altersklassen.nonEmpty) s"""

    Altersklassen

    - Alter am Wettkampf - Tag: ${wettkampf.altersklassen}
    -
      ${altersklassen} + Alter am Wettkampf - Tag: ${escaped(wettkampf.altersklassen)}
      +
        ${escaped(altersklassen)}
      """ else if (jgAltersklassen.nonEmpty) s"""

      Altersklassen

      - Alter im Wettkampf - Jahr: ${wettkampf.jahrgangsklassen}
      -
        ${jgAltersklassen} + Alter im Wettkampf - Jahr: ${escaped(wettkampf.jahrgangsklassen)}
        +
          ${escaped(jgAltersklassen)}
        """ else "" } From 220ac68bec8dce5bf51087ddce50424e1ea15cb7 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Fri, 14 Apr 2023 10:25:23 +0200 Subject: [PATCH 65/99] fix sql-script, set startgeraet for att --- src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql | 2 +- .../resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql index f29a91935..a381dab00 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-pg.sql @@ -28,7 +28,7 @@ update wettkampfdisziplin set dnote = 0, max = 30 where programm_id in ( - select id from programm where parent_id = 20 + select id from programm where parent_id in(1, 20) or id in (1, 20) ) ; update wettkampfdisziplin diff --git a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql index 382d0ee39..992636bd2 100644 --- a/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql +++ b/src/main/resources/dbscripts/AddWKDisziplinMetafields-sqllite.sql @@ -28,7 +28,7 @@ update wettkampfdisziplin set dnote = 0, max = 30 where programm_id in ( - select id from programm where parent_id = 20 + select id from programm where parent_id in(1, 20) or id in (1, 20) ) ; update wettkampfdisziplin From 00f46ba97b8091daa7ec0eff0039e21801c36f10 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Fri, 14 Apr 2023 11:14:41 +0200 Subject: [PATCH 66/99] #660 Remove unused Disziplines from NetworkTab --- .../ch/seidel/kutu/view/NetworkTab.scala | 99 +++++++++++-------- 1 file changed, 56 insertions(+), 43 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala b/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala index 8cf11960c..19acedddb 100644 --- a/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala @@ -31,6 +31,7 @@ import scala.collection.immutable import scala.concurrent.Await import scala.concurrent.duration.Duration import scala.jdk.CollectionConverters +import scala.jdk.FunctionConverters.enrichAsJavaFunction trait DurchgangItem @@ -107,10 +108,63 @@ class DurchgangStationView(wettkampf: WettkampfView, service: KutuService, diszi //items = durchgangModel showRoot = false tableMenuButtonVisible = true + var lastDizs: Seq[Disziplin] = Seq() + def rebuildDiszColumns(disziplinlist: Seq[Disziplin]): Unit = { + if (lastDizs.nonEmpty) { + val diszCols = lastDizs.map(_.name) + columns.removeIf(c => diszCols.contains(c.getText)) + } + lastDizs = disziplinlist + columns.insertAll(6, lastDizs.map { disziplin => + val dc = new TreeTableColumn[DurchgangState, String] { + text = disziplin.name + prefWidth = 230 + columns ++= Seq( + new DurchgangStationTreeTableColumn[String](disziplin) { + text = "Stationen" + prefWidth = 120 + cellValueFactory = { x => + if (x.value.getValue == null) StringProperty("") else + x.value.getValue.percentPerRiegeComplete.get(Some(disziplin)) match { + case Some(re) => StringProperty(re._2) + case _ => StringProperty("") + } + } + } + , new TreeTableColumn[DurchgangState, String] { + text = "Fertig" + prefWidth = 80 + cellFactory.value = { _: Any => + new TreeTableCell[DurchgangState, String] { + val image = new ImageView() + graphic = image + item.onChange { (_, _, newValue) => + text = newValue + image.image = toIcon(newValue) + } + } + } + cellValueFactory = { x => + if (x.value.getValue == null) StringProperty("") else + x.value.getValue.percentPerRiegeComplete.get(Some(disziplin)) match { + case Some(re) => StringProperty(re._1) + case _ => StringProperty("0") + } + } + } + ) + } + TreeTableColumn.sfxTreeTableColumn2jfx(dc) + }) + } root = new TreeItem[DurchgangState]() { durchgangModel.onChange { - children = durchgangModel.toList + val dml = durchgangModel.toList + rebuildDiszColumns(disziplinlist().filter{d => + dml.exists(ti => ti.value.value.geraeteRiegen.exists(gr => gr.disziplin.contains(d))) + }) + children = dml } styleClass.add("parentrow") expanded = true @@ -183,48 +237,7 @@ class DurchgangStationView(wettkampf: WettkampfView, service: KutuService, diszi } ) - columns ++= disziplinlist().map { disziplin => - val dc = new TreeTableColumn[DurchgangState, String] { - text = disziplin.name - prefWidth = 230 - columns ++= Seq( - new DurchgangStationTreeTableColumn[String](disziplin) { - text = "Stationen" - prefWidth = 120 - cellValueFactory = { x => - if (x.value.getValue == null) StringProperty("") else - x.value.getValue.percentPerRiegeComplete.get(Some(disziplin)) match { - case Some(re) => StringProperty(re._2) - case _ => StringProperty("") - } - } - } - , new TreeTableColumn[DurchgangState, String] { - text = "Fertig" - prefWidth = 80 - cellFactory.value = { _: Any => - new TreeTableCell[DurchgangState, String] { - val image = new ImageView() - graphic = image - item.onChange { (_, _, newValue) => - text = newValue - image.image = toIcon(newValue) - } - } - } - cellValueFactory = { x => - if (x.value.getValue == null) StringProperty("") else - x.value.getValue.percentPerRiegeComplete.get(Some(disziplin)) match { - case Some(re) => StringProperty(re._1) - case _ => StringProperty("0") - } - } - } - ) - } - TreeTableColumn.sfxTreeTableColumn2jfx(dc) - } - + rebuildDiszColumns(disziplinlist()) private def toIcon(newValue: String) = { newValue match { case "100%" => okIcon From 6dbbe07aa5820dec3eec702490effa45918c6d0c Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Fri, 14 Apr 2023 11:51:38 +0200 Subject: [PATCH 67/99] Fix pgm-chooser for multi-level/nested-pgms --- .../registration/reg-athlet-editor/reg-athlet-editor.page.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts b/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts index 63aa237ce..7a9bfa7e2 100644 --- a/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts +++ b/newclient/resultcatcher/src/app/registration/reg-athlet-editor/reg-athlet-editor.page.ts @@ -98,7 +98,7 @@ export class RegAthletEditorPage implements OnInit { a.name === b.name && a.vorname === b.vorname && a.gebdat === b.gebdat && a.geschlecht === b.geschlecht; } alternatives(athlet:AthletRegistration): AthletRegistration[] { - return this.clubAthletListCurrent?.filter(cc => this.similarRegistration(cc, athlet) && (cc.id != athlet.id || cc.programId != athlet.programId)) || []; + return this.clubAthletListCurrent?.filter(cc => this.similarRegistration(cc, athlet) && (cc.id != athlet.id)) || []; } getAthletPgm(athlet: AthletRegistration) { return this.wkPgms.find(p => p.id === athlet.programId) || Object.assign({ @@ -126,7 +126,7 @@ export class RegAthletEditorPage implements OnInit { this.zone.run(() => { this.waiting = false; this.wettkampf = this.backendService.competitionName; - this.registration = Object.assign({}, registration) as AthletRegistration; + this.registration = Object.assign({}, registration); this.registration.gebdat = toDateString(this.registration.gebdat); }); } From ca03fae0dded68c95f69581037dc874e1d4b4b1b Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Fri, 14 Apr 2023 09:53:35 +0000 Subject: [PATCH 68/99] update with generated Client from Github Actions CI for build with [skip ci] --- src/main/resources/app/5231.6d41065e22e54a84.js | 1 + src/main/resources/app/5231.b4e1e45bfcb05fdb.js | 1 - src/main/resources/app/index.html | 2 +- ...{runtime.9d2b60a5286e0d40.js => runtime.cea9adeb419ceeb5.js} | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/app/5231.6d41065e22e54a84.js delete mode 100644 src/main/resources/app/5231.b4e1e45bfcb05fdb.js rename src/main/resources/app/{runtime.9d2b60a5286e0d40.js => runtime.cea9adeb419ceeb5.js} (57%) diff --git a/src/main/resources/app/5231.6d41065e22e54a84.js b/src/main/resources/app/5231.6d41065e22e54a84.js new file mode 100644 index 000000000..ab0b4ed10 --- /dev/null +++ b/src/main/resources/app/5231.6d41065e22e54a84.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[5231],{5231:(k,u,d)=>{d.r(u),d.d(u,{RegAthletEditorPageModule:()=>M});var h=d(6895),g=d(433),m=d(5472),a=d(502),_=d(7225),e=d(8274),p=d(600);function b(r,l){if(1&r&&(e.TgZ(0,"ion-select-option",15)(1,"ion-avatar",2),e._UZ(2,"img",8),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4),e._UZ(5,"br"),e.TgZ(6,"small"),e._uU(7),e.ALo(8,"date"),e.qZA()()()),2&r){const t=l.$implicit;e.Q6J("value",t.athletId),e.xp6(4),e.lnq("",t.name,", ",t.vorname," (",t.geschlecht,")"),e.xp6(3),e.hij("(",e.lcZ(8,5,t.gebdat),")")}}function A(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-select",19),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw(2);return e.KtG(o.selectedClubAthletId=n)}),e.YNc(1,b,9,7,"ion-select-option",20),e.qZA()}if(2&r){const t=e.oxw(2);e.Q6J("ngModel",t.selectedClubAthletId),e.xp6(1),e.Q6J("ngForOf",t.clubAthletList)}}function f(r,l){1&r&&(e.TgZ(0,"ion-item-divider")(1,"ion-avatar",0),e._UZ(2,"img",21),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4,"Einteilung"),e.qZA()())}function I(r,l){if(1&r&&(e.TgZ(0,"ion-select-option",15),e._uU(1),e.qZA()),2&r){const t=l.$implicit;e.Q6J("value",t.id),e.xp6(1),e.Oqu(t.name)}}function v(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-item")(1,"ion-avatar",0),e._uU(2," \xa0 "),e.qZA(),e.TgZ(3,"ion-label",12),e._uU(4,"Programm/Kategorie"),e.qZA(),e.TgZ(5,"ion-select",22),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw(2);return e.KtG(o.registration.programId=n)}),e.YNc(6,I,2,2,"ion-select-option",20),e.qZA()()}if(2&r){const t=e.oxw(2);e.xp6(5),e.Q6J("ngModel",t.registration.programId),e.xp6(1),e.Q6J("ngForOf",t.filterPGMsForAthlet(t.registration))}}function Z(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-content")(1,"form",6,7),e.NdJ("ngSubmit",function(){e.CHM(t);const n=e.MAs(2),o=e.oxw();return e.KtG(o.save(n))})("keyup.enter",function(){e.CHM(t);const n=e.MAs(2),o=e.oxw();return e.KtG(o.save(n))}),e.TgZ(3,"ion-list")(4,"ion-item-divider")(5,"ion-avatar",0),e._UZ(6,"img",8),e.qZA(),e.TgZ(7,"ion-label"),e._uU(8,"Athlet / Athletin"),e.qZA(),e.YNc(9,A,2,2,"ion-select",9),e.qZA(),e.TgZ(10,"ion-item")(11,"ion-avatar",0),e._uU(12," \xa0 "),e.qZA(),e.TgZ(13,"ion-input",10),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.name=n)}),e.qZA(),e.TgZ(14,"ion-input",11),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.vorname=n)}),e.qZA()(),e.TgZ(15,"ion-item")(16,"ion-avatar",0),e._uU(17," \xa0 "),e.qZA(),e.TgZ(18,"ion-label",12),e._uU(19,"Geburtsdatum"),e.qZA(),e.TgZ(20,"ion-input",13),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.gebdat=n)}),e.qZA()(),e.TgZ(21,"ion-item")(22,"ion-avatar",0),e._uU(23," \xa0 "),e.qZA(),e.TgZ(24,"ion-label",12),e._uU(25,"Geschlecht"),e.qZA(),e.TgZ(26,"ion-select",14),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.geschlecht=n)}),e.TgZ(27,"ion-select-option",15),e._uU(28,"weiblich"),e.qZA(),e.TgZ(29,"ion-select-option",15),e._uU(30,"m\xe4nnlich"),e.qZA()()(),e.YNc(31,f,5,0,"ion-item-divider",4),e.YNc(32,v,7,2,"ion-item",4),e.qZA(),e.TgZ(33,"ion-list")(34,"ion-button",16,17),e._UZ(36,"ion-icon",18),e._uU(37,"Speichern"),e.qZA()()()()}if(2&r){const t=e.MAs(2),i=e.oxw();e.xp6(9),e.Q6J("ngIf",0===i.registration.id&&i.clubAthletList.length>0),e.xp6(4),e.Q6J("disabled",!1)("ngModel",i.registration.name),e.xp6(1),e.Q6J("disabled",!1)("ngModel",i.registration.vorname),e.xp6(6),e.Q6J("disabled",!1)("ngModel",i.registration.gebdat),e.xp6(6),e.Q6J("ngModel",i.registration.geschlecht),e.xp6(1),e.Q6J("value","W"),e.xp6(2),e.Q6J("value","M"),e.xp6(2),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(1),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(2),e.Q6J("disabled",i.waiting||!i.isFormValid()||!t.valid||t.untouched)}}function x(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-button",23,24),e.NdJ("click",function(){e.CHM(t);const n=e.oxw();return e.KtG(n.delete())}),e._UZ(2,"ion-icon",25),e._uU(3,"Anmeldung l\xf6schen"),e.qZA()}if(2&r){const t=e.oxw();e.Q6J("disabled",t.waiting)}}const C=[{path:"",component:(()=>{class r{constructor(t,i,n,o,s){this.navCtrl=t,this.route=i,this.backendService=n,this.alertCtrl=o,this.zone=s,this.waiting=!1}ngOnInit(){this.waiting=!0,this.wkId=this.route.snapshot.paramMap.get("wkId"),this.regId=parseInt(this.route.snapshot.paramMap.get("regId")),this.athletId=parseInt(this.route.snapshot.paramMap.get("athletId")),this.backendService.getCompetitions().subscribe(t=>{const i=t.find(n=>n.uuid===this.wkId);this.wettkampfId=parseInt(i.id),this.backendService.loadProgramsForCompetition(i.uuid).subscribe(n=>{this.wkPgms=n,this.backendService.loadAthletListForClub(this.wkId,this.regId).subscribe(o=>{this.clubAthletList=o,this.backendService.loadAthletRegistrations(this.wkId,this.regId).subscribe(s=>{this.clubAthletListCurrent=s,this.updateUI(this.athletId?s.find(c=>c.id===this.athletId):{id:0,vereinregistrationId:this.regId,name:"",vorname:"",geschlecht:"W",gebdat:void 0,programId:void 0,registrationTime:0})})})})})}get selectedClubAthletId(){return this._selectedClubAthletId}set selectedClubAthletId(t){this._selectedClubAthletId=t,this.registration=this.clubAthletList.find(i=>i.athletId===t)}needsPGMChoice(){const t=[...this.wkPgms][0];return!(1==t.aggregate&&t.riegenmode>1)}alter(t){const i=new Date(t.gebdat).getFullYear();return new Date(Date.now()).getFullYear()-i}similarRegistration(t,i){return t.athletId===i.athletId||t.name===i.name&&t.vorname===i.vorname&&t.gebdat===i.gebdat&&t.geschlecht===i.geschlecht}alternatives(t){return this.clubAthletListCurrent?.filter(i=>this.similarRegistration(i,t)&&i.id!=t.id)||[]}getAthletPgm(t){return this.wkPgms.find(i=>i.id===t.programId)||Object.assign({parent:0})}filterPGMsForAthlet(t){const i=this.alter(t),n=this.alternatives(t);return this.wkPgms.filter(o=>(o.alterVon||0)<=i&&(o.alterBis||100)>=i&&0===n.filter(s=>s.programId===o.id||this.getAthletPgm(s).parentId===o.parentId).length)}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.wettkampf=this.backendService.competitionName,this.registration=Object.assign({},t),this.registration.gebdat=(0,_.tC)(this.registration.gebdat)})}isFormValid(){return!this.registration?.programId&&!this.needsPGMChoice()&&(this.registration.programId=this.filterPGMsForAthlet(this.registration)[0]?.id),!!this.registration.gebdat&&!!this.registration.geschlecht&&this.registration.geschlecht.length>0&&!!this.registration.name&&this.registration.name.length>0&&!!this.registration.vorname&&this.registration.vorname.length>0&&!!this.registration.programId&&this.registration.programId>0}checkPersonOverride(t){if(t.athletId){const i=[...this.clubAthletListCurrent,...this.clubAthletList].find(n=>n.athletId===t.athletId);if(i.geschlecht!==t.geschlecht||new Date((0,_.tC)(i.gebdat)).toJSON()!==new Date(t.gebdat).toJSON()||i.name!==t.name||i.vorname!==t.vorname)return!0}return!1}save(t){if(!t.valid)return;const i=Object.assign({},this.registration,{gebdat:new Date(t.value.gebdat).toJSON()});0===this.athletId||0===i.id?(this.needsPGMChoice()||this.filterPGMsForAthlet(this.registration).filter(n=>n.id!==i.programId).forEach(n=>{this.backendService.createAthletRegistration(this.wkId,this.regId,Object.assign({},i,{programId:n.id}))}),this.backendService.createAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})):this.checkPersonOverride(i)?this.alertCtrl.create({header:"Achtung",subHeader:"Person \xfcberschreiben vs korrigieren",message:"Es wurden \xc4nderungen an den Personen-Feldern vorgenommen. Diese sind ausschliesslich f\xfcr Korrekturen zul\xe4ssig. Die Identit\xe4t der Person darf dadurch nicht ge\xe4ndert werden!",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"Korektur durchf\xfchren",handler:()=>{this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.clubAthletListCurrent.filter(s=>this.similarRegistration(this.registration,s)).filter(s=>s.id!==this.registration.id).forEach(s=>{const c=Object.assign({},i,{id:s.id,registrationTime:s.registrationTime,programId:s.programId});this.backendService.saveAthletRegistration(this.wkId,this.regId,c)}),this.navCtrl.pop()})}}]}).then(s=>s.present()):this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})}delete(){this.alertCtrl.create({header:"Achtung",subHeader:"L\xf6schen der Athlet-Anmeldung am Wettkampf",message:"Hiermit wird die Anmeldung von "+this.registration.name+", "+this.registration.vorname+" am Wettkampf gel\xf6scht.",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"OKAY",handler:()=>{this.needsPGMChoice()||this.clubAthletListCurrent.filter(i=>this.similarRegistration(this.registration,i)).filter(i=>i.id!==this.registration.id).forEach(i=>{this.backendService.deleteAthletRegistration(this.wkId,this.regId,i)}),this.backendService.deleteAthletRegistration(this.wkId,this.regId,this.registration).subscribe(()=>{this.navCtrl.pop()})}}]}).then(i=>i.present())}}return r.\u0275fac=function(t){return new(t||r)(e.Y36(a.SH),e.Y36(m.gz),e.Y36(p.v),e.Y36(a.Br),e.Y36(e.R0b))},r.\u0275cmp=e.Xpm({type:r,selectors:[["app-reg-athlet-editor"]],decls:14,vars:3,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[4,"ngIf"],["size","large","expand","block","color","danger",3,"disabled","click",4,"ngIf"],[3,"ngSubmit","keyup.enter"],["athletRegistrationForm","ngForm"],["src","assets/imgs/athlete.png"],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange",4,"ngIf"],["required","","placeholder","Name","type","text","name","name","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Vorname","type","text","name","vorname","required","",3,"disabled","ngModel","ngModelChange"],["color","primary"],["required","","placeholder","Geburtsdatum","type","date","display-timezone","utc","name","gebdat","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Geschlecht","name","geschlecht","okText","Okay","cancelText","Abbrechen","required","",3,"ngModel","ngModelChange"],[3,"value"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name",""],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],["src","assets/imgs/wettkampf.png"],["required","","placeholder","Programm/Kategorie","name","programId","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],["size","large","expand","block","color","danger",3,"disabled","click"],["btnDelete",""],["slot","start","name","trash"]],template:function(t,i){1&t&&(e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5,"Anmeldung Athlet/Athletin"),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA()()()(),e.YNc(9,Z,38,13,"ion-content",4),e.TgZ(10,"ion-footer")(11,"ion-toolbar")(12,"ion-list"),e.YNc(13,x,4,1,"ion-button",5),e.qZA()()()),2&t&&(e.xp6(8),e.hij("f\xfcr ",i.wettkampf,""),e.xp6(1),e.Q6J("ngIf",i.registration),e.xp6(4),e.Q6J("ngIf",i.athletId>0))},dependencies:[h.sg,h.O5,g._Y,g.JJ,g.JL,g.Q7,g.On,g.F,a.BJ,a.oU,a.YG,a.Sm,a.W2,a.fr,a.Gu,a.gu,a.pK,a.Ie,a.rH,a.Q$,a.q_,a.uN,a.t9,a.n0,a.wd,a.sr,a.QI,a.j9,a.cs,h.uU]}),r})()}];let M=(()=>{class r{}return r.\u0275fac=function(t){return new(t||r)},r.\u0275mod=e.oAB({type:r}),r.\u0275inj=e.cJS({imports:[h.ez,g.u5,a.Pc,m.Bz.forChild(C)]}),r})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/5231.b4e1e45bfcb05fdb.js b/src/main/resources/app/5231.b4e1e45bfcb05fdb.js deleted file mode 100644 index 14e479ed3..000000000 --- a/src/main/resources/app/5231.b4e1e45bfcb05fdb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[5231],{5231:(k,u,d)=>{d.r(u),d.d(u,{RegAthletEditorPageModule:()=>M});var h=d(6895),g=d(433),m=d(5472),a=d(502),_=d(7225),e=d(8274),p=d(600);function b(r,l){if(1&r&&(e.TgZ(0,"ion-select-option",15)(1,"ion-avatar",2),e._UZ(2,"img",8),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4),e._UZ(5,"br"),e.TgZ(6,"small"),e._uU(7),e.ALo(8,"date"),e.qZA()()()),2&r){const t=l.$implicit;e.Q6J("value",t.athletId),e.xp6(4),e.lnq("",t.name,", ",t.vorname," (",t.geschlecht,")"),e.xp6(3),e.hij("(",e.lcZ(8,5,t.gebdat),")")}}function A(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-select",19),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw(2);return e.KtG(o.selectedClubAthletId=n)}),e.YNc(1,b,9,7,"ion-select-option",20),e.qZA()}if(2&r){const t=e.oxw(2);e.Q6J("ngModel",t.selectedClubAthletId),e.xp6(1),e.Q6J("ngForOf",t.clubAthletList)}}function f(r,l){1&r&&(e.TgZ(0,"ion-item-divider")(1,"ion-avatar",0),e._UZ(2,"img",21),e.qZA(),e.TgZ(3,"ion-label"),e._uU(4,"Einteilung"),e.qZA()())}function I(r,l){if(1&r&&(e.TgZ(0,"ion-select-option",15),e._uU(1),e.qZA()),2&r){const t=l.$implicit;e.Q6J("value",t.id),e.xp6(1),e.Oqu(t.name)}}function v(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-item")(1,"ion-avatar",0),e._uU(2," \xa0 "),e.qZA(),e.TgZ(3,"ion-label",12),e._uU(4,"Programm/Kategorie"),e.qZA(),e.TgZ(5,"ion-select",22),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw(2);return e.KtG(o.registration.programId=n)}),e.YNc(6,I,2,2,"ion-select-option",20),e.qZA()()}if(2&r){const t=e.oxw(2);e.xp6(5),e.Q6J("ngModel",t.registration.programId),e.xp6(1),e.Q6J("ngForOf",t.filterPGMsForAthlet(t.registration))}}function Z(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-content")(1,"form",6,7),e.NdJ("ngSubmit",function(){e.CHM(t);const n=e.MAs(2),o=e.oxw();return e.KtG(o.save(n))})("keyup.enter",function(){e.CHM(t);const n=e.MAs(2),o=e.oxw();return e.KtG(o.save(n))}),e.TgZ(3,"ion-list")(4,"ion-item-divider")(5,"ion-avatar",0),e._UZ(6,"img",8),e.qZA(),e.TgZ(7,"ion-label"),e._uU(8,"Athlet / Athletin"),e.qZA(),e.YNc(9,A,2,2,"ion-select",9),e.qZA(),e.TgZ(10,"ion-item")(11,"ion-avatar",0),e._uU(12," \xa0 "),e.qZA(),e.TgZ(13,"ion-input",10),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.name=n)}),e.qZA(),e.TgZ(14,"ion-input",11),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.vorname=n)}),e.qZA()(),e.TgZ(15,"ion-item")(16,"ion-avatar",0),e._uU(17," \xa0 "),e.qZA(),e.TgZ(18,"ion-label",12),e._uU(19,"Geburtsdatum"),e.qZA(),e.TgZ(20,"ion-input",13),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.gebdat=n)}),e.qZA()(),e.TgZ(21,"ion-item")(22,"ion-avatar",0),e._uU(23," \xa0 "),e.qZA(),e.TgZ(24,"ion-label",12),e._uU(25,"Geschlecht"),e.qZA(),e.TgZ(26,"ion-select",14),e.NdJ("ngModelChange",function(n){e.CHM(t);const o=e.oxw();return e.KtG(o.registration.geschlecht=n)}),e.TgZ(27,"ion-select-option",15),e._uU(28,"weiblich"),e.qZA(),e.TgZ(29,"ion-select-option",15),e._uU(30,"m\xe4nnlich"),e.qZA()()(),e.YNc(31,f,5,0,"ion-item-divider",4),e.YNc(32,v,7,2,"ion-item",4),e.qZA(),e.TgZ(33,"ion-list")(34,"ion-button",16,17),e._UZ(36,"ion-icon",18),e._uU(37,"Speichern"),e.qZA()()()()}if(2&r){const t=e.MAs(2),i=e.oxw();e.xp6(9),e.Q6J("ngIf",0===i.registration.id&&i.clubAthletList.length>0),e.xp6(4),e.Q6J("disabled",!1)("ngModel",i.registration.name),e.xp6(1),e.Q6J("disabled",!1)("ngModel",i.registration.vorname),e.xp6(6),e.Q6J("disabled",!1)("ngModel",i.registration.gebdat),e.xp6(6),e.Q6J("ngModel",i.registration.geschlecht),e.xp6(1),e.Q6J("value","W"),e.xp6(2),e.Q6J("value","M"),e.xp6(2),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(1),e.Q6J("ngIf",i.needsPGMChoice()),e.xp6(2),e.Q6J("disabled",i.waiting||!i.isFormValid()||!t.valid||t.untouched)}}function x(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"ion-button",23,24),e.NdJ("click",function(){e.CHM(t);const n=e.oxw();return e.KtG(n.delete())}),e._UZ(2,"ion-icon",25),e._uU(3,"Anmeldung l\xf6schen"),e.qZA()}if(2&r){const t=e.oxw();e.Q6J("disabled",t.waiting)}}const C=[{path:"",component:(()=>{class r{constructor(t,i,n,o,s){this.navCtrl=t,this.route=i,this.backendService=n,this.alertCtrl=o,this.zone=s,this.waiting=!1}ngOnInit(){this.waiting=!0,this.wkId=this.route.snapshot.paramMap.get("wkId"),this.regId=parseInt(this.route.snapshot.paramMap.get("regId")),this.athletId=parseInt(this.route.snapshot.paramMap.get("athletId")),this.backendService.getCompetitions().subscribe(t=>{const i=t.find(n=>n.uuid===this.wkId);this.wettkampfId=parseInt(i.id),this.backendService.loadProgramsForCompetition(i.uuid).subscribe(n=>{this.wkPgms=n,this.backendService.loadAthletListForClub(this.wkId,this.regId).subscribe(o=>{this.clubAthletList=o,this.backendService.loadAthletRegistrations(this.wkId,this.regId).subscribe(s=>{this.clubAthletListCurrent=s,this.updateUI(this.athletId?s.find(c=>c.id===this.athletId):{id:0,vereinregistrationId:this.regId,name:"",vorname:"",geschlecht:"W",gebdat:void 0,programId:void 0,registrationTime:0})})})})})}get selectedClubAthletId(){return this._selectedClubAthletId}set selectedClubAthletId(t){this._selectedClubAthletId=t,this.registration=this.clubAthletList.find(i=>i.athletId===t)}needsPGMChoice(){const t=[...this.wkPgms][0];return!(1==t.aggregate&&t.riegenmode>1)}alter(t){const i=new Date(t.gebdat).getFullYear();return new Date(Date.now()).getFullYear()-i}similarRegistration(t,i){return t.athletId===i.athletId||t.name===i.name&&t.vorname===i.vorname&&t.gebdat===i.gebdat&&t.geschlecht===i.geschlecht}alternatives(t){return this.clubAthletListCurrent?.filter(i=>this.similarRegistration(i,t)&&(i.id!=t.id||i.programId!=t.programId))||[]}getAthletPgm(t){return this.wkPgms.find(i=>i.id===t.programId)||Object.assign({parent:0})}filterPGMsForAthlet(t){const i=this.alter(t),n=this.alternatives(t);return this.wkPgms.filter(o=>(o.alterVon||0)<=i&&(o.alterBis||100)>=i&&0===n.filter(s=>s.programId===o.id||this.getAthletPgm(s).parentId===o.parentId).length)}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.wettkampf=this.backendService.competitionName,this.registration=Object.assign({},t),this.registration.gebdat=(0,_.tC)(this.registration.gebdat)})}isFormValid(){return!this.registration?.programId&&!this.needsPGMChoice()&&(this.registration.programId=this.filterPGMsForAthlet(this.registration)[0]?.id),!!this.registration.gebdat&&!!this.registration.geschlecht&&this.registration.geschlecht.length>0&&!!this.registration.name&&this.registration.name.length>0&&!!this.registration.vorname&&this.registration.vorname.length>0&&!!this.registration.programId&&this.registration.programId>0}checkPersonOverride(t){if(t.athletId){const i=[...this.clubAthletListCurrent,...this.clubAthletList].find(n=>n.athletId===t.athletId);if(i.geschlecht!==t.geschlecht||new Date((0,_.tC)(i.gebdat)).toJSON()!==new Date(t.gebdat).toJSON()||i.name!==t.name||i.vorname!==t.vorname)return!0}return!1}save(t){if(!t.valid)return;const i=Object.assign({},this.registration,{gebdat:new Date(t.value.gebdat).toJSON()});0===this.athletId||0===i.id?(this.needsPGMChoice()||this.filterPGMsForAthlet(this.registration).filter(n=>n.id!==i.programId).forEach(n=>{this.backendService.createAthletRegistration(this.wkId,this.regId,Object.assign({},i,{programId:n.id}))}),this.backendService.createAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})):this.checkPersonOverride(i)?this.alertCtrl.create({header:"Achtung",subHeader:"Person \xfcberschreiben vs korrigieren",message:"Es wurden \xc4nderungen an den Personen-Feldern vorgenommen. Diese sind ausschliesslich f\xfcr Korrekturen zul\xe4ssig. Die Identit\xe4t der Person darf dadurch nicht ge\xe4ndert werden!",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"Korektur durchf\xfchren",handler:()=>{this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.clubAthletListCurrent.filter(s=>this.similarRegistration(this.registration,s)).filter(s=>s.id!==this.registration.id).forEach(s=>{const c=Object.assign({},i,{id:s.id,registrationTime:s.registrationTime,programId:s.programId});this.backendService.saveAthletRegistration(this.wkId,this.regId,c)}),this.navCtrl.pop()})}}]}).then(s=>s.present()):this.backendService.saveAthletRegistration(this.wkId,this.regId,i).subscribe(()=>{this.navCtrl.pop()})}delete(){this.alertCtrl.create({header:"Achtung",subHeader:"L\xf6schen der Athlet-Anmeldung am Wettkampf",message:"Hiermit wird die Anmeldung von "+this.registration.name+", "+this.registration.vorname+" am Wettkampf gel\xf6scht.",buttons:[{text:"ABBRECHEN",role:"cancel",handler:()=>{}},{text:"OKAY",handler:()=>{this.needsPGMChoice()||this.clubAthletListCurrent.filter(i=>this.similarRegistration(this.registration,i)).filter(i=>i.id!==this.registration.id).forEach(i=>{this.backendService.deleteAthletRegistration(this.wkId,this.regId,i)}),this.backendService.deleteAthletRegistration(this.wkId,this.regId,this.registration).subscribe(()=>{this.navCtrl.pop()})}}]}).then(i=>i.present())}}return r.\u0275fac=function(t){return new(t||r)(e.Y36(a.SH),e.Y36(m.gz),e.Y36(p.v),e.Y36(a.Br),e.Y36(e.R0b))},r.\u0275cmp=e.Xpm({type:r,selectors:[["app-reg-athlet-editor"]],decls:14,vars:3,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[4,"ngIf"],["size","large","expand","block","color","danger",3,"disabled","click",4,"ngIf"],[3,"ngSubmit","keyup.enter"],["athletRegistrationForm","ngForm"],["src","assets/imgs/athlete.png"],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange",4,"ngIf"],["required","","placeholder","Name","type","text","name","name","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Vorname","type","text","name","vorname","required","",3,"disabled","ngModel","ngModelChange"],["color","primary"],["required","","placeholder","Geburtsdatum","type","date","display-timezone","utc","name","gebdat","required","",3,"disabled","ngModel","ngModelChange"],["required","","placeholder","Geschlecht","name","geschlecht","okText","Okay","cancelText","Abbrechen","required","",3,"ngModel","ngModelChange"],[3,"value"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name",""],["placeholder","Auswahl aus Liste","name","clubAthletid","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],["src","assets/imgs/wettkampf.png"],["required","","placeholder","Programm/Kategorie","name","programId","okText","Okay","cancelText","Abbrechen",3,"ngModel","ngModelChange"],["size","large","expand","block","color","danger",3,"disabled","click"],["btnDelete",""],["slot","start","name","trash"]],template:function(t,i){1&t&&(e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5,"Anmeldung Athlet/Athletin"),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA()()()(),e.YNc(9,Z,38,13,"ion-content",4),e.TgZ(10,"ion-footer")(11,"ion-toolbar")(12,"ion-list"),e.YNc(13,x,4,1,"ion-button",5),e.qZA()()()),2&t&&(e.xp6(8),e.hij("f\xfcr ",i.wettkampf,""),e.xp6(1),e.Q6J("ngIf",i.registration),e.xp6(4),e.Q6J("ngIf",i.athletId>0))},dependencies:[h.sg,h.O5,g._Y,g.JJ,g.JL,g.Q7,g.On,g.F,a.BJ,a.oU,a.YG,a.Sm,a.W2,a.fr,a.Gu,a.gu,a.pK,a.Ie,a.rH,a.Q$,a.q_,a.uN,a.t9,a.n0,a.wd,a.sr,a.QI,a.j9,a.cs,h.uU]}),r})()}];let M=(()=>{class r{}return r.\u0275fac=function(t){return new(t||r)},r.\u0275mod=e.oAB({type:r}),r.\u0275inj=e.cJS({imports:[h.ez,g.u5,a.Pc,m.Bz.forChild(C)]}),r})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/index.html b/src/main/resources/app/index.html index 6340d6658..8101e0e2d 100644 --- a/src/main/resources/app/index.html +++ b/src/main/resources/app/index.html @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/src/main/resources/app/runtime.9d2b60a5286e0d40.js b/src/main/resources/app/runtime.cea9adeb419ceeb5.js similarity index 57% rename from src/main/resources/app/runtime.9d2b60a5286e0d40.js rename to src/main/resources/app/runtime.cea9adeb419ceeb5.js index bad8b360c..84b985eaf 100644 --- a/src/main/resources/app/runtime.9d2b60a5286e0d40.js +++ b/src/main/resources/app/runtime.cea9adeb419ceeb5.js @@ -1 +1 @@ -(()=>{"use strict";var e,v={},g={};function f(e){var d=g[e];if(void 0!==d)return d.exports;var a=g[e]={exports:{}};return v[e].call(a.exports,a,a.exports,f),a.exports}f.m=v,e=[],f.O=(d,a,r,b)=>{if(!a){var t=1/0;for(c=0;c=b)&&Object.keys(f.O).every(p=>f.O[p](a[n]))?a.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[a,r,b]},f.n=e=>{var d=e&&e.__esModule?()=>e.default:()=>e;return f.d(d,{a:d}),d},(()=>{var d,e=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;f.t=function(a,r){if(1&r&&(a=this(a)),8&r||"object"==typeof a&&a&&(4&r&&a.__esModule||16&r&&"function"==typeof a.then))return a;var b=Object.create(null);f.r(b);var c={};d=d||[null,e({}),e([]),e(e)];for(var t=2&r&&a;"object"==typeof t&&!~d.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>a[l]);return c.default=()=>a,f.d(b,c),b}})(),f.d=(e,d)=>{for(var a in d)f.o(d,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:d[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((d,a)=>(f.f[a](e,d),d),[])),f.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"fc6a678bdb89d268",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"b4e1e45bfcb05fdb",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9151:"21577e63c2cd66c2",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),f.miniCssF=e=>{},f.o=(e,d)=>Object.prototype.hasOwnProperty.call(e,d),(()=>{var e={},d="app:";f.l=(a,r,b,c)=>{if(e[a])e[a].push(r);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[a];if(delete e[a],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),f.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;f.tt=()=>(void 0===e&&(e={createScriptURL:d=>d},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),f.tu=e=>f.tt().createScriptURL(e),f.p="",(()=>{var e={3666:0};f.f.j=(r,b)=>{var c=f.o(e,r)?e[r]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=r){var t=new Promise((o,s)=>c=e[r]=[o,s]);b.push(c[2]=t);var l=f.p+f.u(r),n=new Error;f.l(l,o=>{if(f.o(e,r)&&(0!==(c=e[r])&&(e[r]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+r+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+r,r)}else e[r]=0},f.O.j=r=>0===e[r];var d=(r,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)f.o(t,n)&&(f.m[n]=t[n]);if(l)var s=l(f)}for(r&&r(b);o{"use strict";var e,v={},g={};function f(e){var r=g[e];if(void 0!==r)return r.exports;var a=g[e]={exports:{}};return v[e].call(a.exports,a,a.exports,f),a.exports}f.m=v,e=[],f.O=(r,a,d,b)=>{if(!a){var t=1/0;for(c=0;c=b)&&Object.keys(f.O).every(p=>f.O[p](a[n]))?a.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[a,d,b]},f.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return f.d(r,{a:r}),r},(()=>{var r,e=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;f.t=function(a,d){if(1&d&&(a=this(a)),8&d||"object"==typeof a&&a&&(4&d&&a.__esModule||16&d&&"function"==typeof a.then))return a;var b=Object.create(null);f.r(b);var c={};r=r||[null,e({}),e([]),e(e)];for(var t=2&d&&a;"object"==typeof t&&!~r.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>a[l]);return c.default=()=>a,f.d(b,c),b}})(),f.d=(e,r)=>{for(var a in r)f.o(r,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:r[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((r,a)=>(f.f[a](e,r),r),[])),f.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"fc6a678bdb89d268",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"6d41065e22e54a84",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9151:"21577e63c2cd66c2",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),f.miniCssF=e=>{},f.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e={},r="app:";f.l=(a,d,b,c)=>{if(e[a])e[a].push(d);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[a];if(delete e[a],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),f.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;f.tt=()=>(void 0===e&&(e={createScriptURL:r=>r},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),f.tu=e=>f.tt().createScriptURL(e),f.p="",(()=>{var e={3666:0};f.f.j=(d,b)=>{var c=f.o(e,d)?e[d]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=d){var t=new Promise((o,s)=>c=e[d]=[o,s]);b.push(c[2]=t);var l=f.p+f.u(d),n=new Error;f.l(l,o=>{if(f.o(e,d)&&(0!==(c=e[d])&&(e[d]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+d+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+d,d)}else e[d]=0},f.O.j=d=>0===e[d];var r=(d,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)f.o(t,n)&&(f.m[n]=t[n]);if(l)var s=l(f)}for(d&&d(b);o Date: Fri, 14 Apr 2023 16:52:28 +0200 Subject: [PATCH 69/99] Use app-icon on Progressloader startup-dlg --- src/main/scala/ch/seidel/kutu/KuTuApp.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index f27dec1c3..1a066d06e 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -1763,7 +1763,9 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport def getStage() = stage override def start(): Unit = { - val pForm = new ProgressForm(Some(new PrimaryStage)) + val pForm = new ProgressForm(Some(new PrimaryStage { + icons += new Image(this.getClass.getResourceAsStream("/images/app-logo.png")) + })) val startSteps = TaskSteps("") pForm.activateProgressBar("Wettkampf App startet ...", startSteps, startUI) startSteps.nextStep("Starte die Datenbank ...", startDB) From 1b80df7b55375b33167d768789ca3c57a55d44a6 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Fri, 14 Apr 2023 17:29:03 +0200 Subject: [PATCH 70/99] Fix escape html rendered vars in wk-overview --- .../kutu/renderer/WettkampfOverviewToHtmlRenderer.scala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala index e76c64c74..bac63abde 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/WettkampfOverviewToHtmlRenderer.scala @@ -221,8 +221,8 @@ trait WettkampfOverviewToHtmlRenderer { val silverSum = medallienbedarf.map(p => p._3 + p._7).sum val bronzeSum = medallienbedarf.map(p => p._4 + p._8).sum val auszSum = medallienbedarf.map(p => p._5 + p._9).sum - val altersklassen = Altersklasse(wettkampf.altersklassen).map(ak => s"
      • ${ak.easyprint}
      • ").mkString("\n") - val jgAltersklassen = Altersklasse(wettkampf.jahrgangsklassen).map(ak => s"
      • ${ak.easyprint}
      • ").mkString("\n") + val altersklassen = Altersklasse(wettkampf.altersklassen).map(ak => s"
      • ${escaped(ak.easyprint)}
      • ").mkString("\n") + val jgAltersklassen = Altersklasse(wettkampf.jahrgangsklassen).map(ak => s"
      • ${escaped(ak.easyprint)}
      • ").mkString("\n") val medalrows = s""" Goldmedallie${goldDetails}${goldSum} @@ -273,12 +273,12 @@ trait WettkampfOverviewToHtmlRenderer { ${if (altersklassen.nonEmpty) s"""

        Altersklassen

        Alter am Wettkampf - Tag: ${escaped(wettkampf.altersklassen)}
        -
          ${escaped(altersklassen)} +
            ${altersklassen}
          """ else if (jgAltersklassen.nonEmpty) s"""

          Altersklassen

          Alter im Wettkampf - Jahr: ${escaped(wettkampf.jahrgangsklassen)}
          -
            ${escaped(jgAltersklassen)} +
              ${jgAltersklassen}
            """ else "" } From 329309e1e2c8d9861934e103cb67422b9f1c4049 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sat, 15 Apr 2023 00:41:16 +0200 Subject: [PATCH 71/99] #659 Enhance Altersklassen to qualify associated sex and programs --- .../scala/ch/seidel/kutu/data/GroupBy.scala | 16 ++-- .../seidel/kutu/domain/WettkampfService.scala | 14 +++- .../scala/ch/seidel/kutu/domain/package.scala | 78 ++++++++++++++----- .../kutu/view/WettkampfOverviewTab.scala | 14 ++-- .../seidel/kutu/squad/JGClubGrouperSpec.scala | 32 ++++++-- 5 files changed, 112 insertions(+), 42 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala index 54268a9ce..6f1fb7bb7 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala @@ -332,20 +332,20 @@ case class ByJahrgang() extends GroupBy with FilterBy { }) } -case class ByAltersklasse(bezeichnung: String = "GebDat Altersklasse", grenzen: Seq[(String, Int)]) extends GroupBy with FilterBy { +case class ByAltersklasse(bezeichnung: String = "GebDat Altersklasse", grenzen: Seq[(String, Seq[String], Int)]) extends GroupBy with FilterBy { override val groupname = bezeichnung val klassen = Altersklasse(grenzen) - def makeGroupBy(w: Wettkampf)(gebdat: LocalDate): Altersklasse = { + def makeGroupBy(w: Wettkampf)(gebdat: LocalDate, geschlecht: String, programm: ProgrammView): Altersklasse = { val wkd: LocalDate = w.datum val alter = Period.between(gebdat, wkd.plusDays(1)).getYears - Altersklasse(klassen, alter) + Altersklasse(klassen, alter, geschlecht, programm) } protected override val grouper = (v: WertungView) => { val wkd: LocalDate = v.wettkampf.datum val gebd: LocalDate = sqlDate2ld(v.athlet.gebdat.getOrElse(Date.valueOf(LocalDate.now()))) - makeGroupBy(v.wettkampf)(gebd) + makeGroupBy(v.wettkampf)(gebd, v.athlet.geschlecht, v.wettkampfdisziplin.programm) } protected override val sorter: Option[(GroupSection, GroupSection) => Boolean] = Some((gs1: GroupSection, gs2: GroupSection) => { @@ -353,20 +353,20 @@ case class ByAltersklasse(bezeichnung: String = "GebDat Altersklasse", grenzen: }) } -case class ByJahrgangsAltersklasse(bezeichnung: String = "JG Altersklasse", grenzen: Seq[(String, Int)]) extends GroupBy with FilterBy { +case class ByJahrgangsAltersklasse(bezeichnung: String = "JG Altersklasse", grenzen: Seq[(String, Seq[String], Int)]) extends GroupBy with FilterBy { override val groupname = bezeichnung val klassen = Altersklasse(grenzen) - def makeGroupBy(w: Wettkampf)(gebdat: LocalDate): Altersklasse = { + def makeGroupBy(w: Wettkampf)(gebdat: LocalDate, geschlecht: String, programm: ProgrammView): Altersklasse = { val wkd: LocalDate = w.datum val alter = wkd.getYear - gebdat.getYear - Altersklasse(klassen, alter) + Altersklasse(klassen, alter, geschlecht, programm) } protected override val grouper = (v: WertungView) => { val wkd: LocalDate = v.wettkampf.datum val gebd: LocalDate = sqlDate2ld(v.athlet.gebdat.getOrElse(Date.valueOf(LocalDate.now()))) - makeGroupBy(v.wettkampf)(gebd) + makeGroupBy(v.wettkampf)(gebd, v.athlet.geschlecht, v.wettkampfdisziplin.programm) } protected override val sorter: Option[(GroupSection, GroupSection) => Boolean] = Some((gs1: GroupSection, gs2: GroupSection) => { diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index f9626b215..c50603630 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -5,6 +5,7 @@ import ch.seidel.kutu.http.WebSocketClient import ch.seidel.kutu.squad.RiegenBuilder import ch.seidel.kutu.squad.RiegenBuilder.{generateRiegen2Name, generateRiegenName} import org.slf4j.LoggerFactory +import slick.jdbc.PositionedResult import java.sql.Date import java.util.UUID @@ -176,11 +177,18 @@ trait WettkampfService extends DBService """.as[OverviewStatTuple].withPinnedSession .map(_.toList) }, Duration.Inf) - def listAKOverviewFacts(wettkampfUUID: UUID): List[(String,String,Int,String,Date)] = { + def listAKOverviewFacts(wettkampfUUID: UUID): List[(String,ProgrammView,Int,String,Date)] = { + implicit val cache = scala.collection.mutable.Map[Long, ProgrammView]() + + def getResultMapper(r: PositionedResult)(implicit cache: scala.collection.mutable.Map[Long, ProgrammView]) = { + val verein = r.<<[String] + val pgm = readProgramm(r.<<[Long], cache) + (verein,pgm,r.<<[Int],r.<<[String],r.<<[Date]) + } Await.result( database.run { sql""" - select distinct v.name as verein, p.name as programm, p.ord as ord, a.geschlecht, a.gebdat + select distinct v.name as verein, p.id, p.ord as ord, a.geschlecht, a.gebdat from verein v inner join athlet a on a.verein = v.id inner join wertung w on w.athlet_id = a.id @@ -188,7 +196,7 @@ trait WettkampfService extends DBService inner join wettkampfdisziplin wd on wd.id = w.wettkampfdisziplin_id inner join programm p on wd.programm_id = p.id where wk.uuid = ${wettkampfUUID.toString} and a.gebdat is not null - """.as[(String,String,Int,String,Date)].withPinnedSession + """.as[(String,ProgrammView,Int,String,Date)](getResultMapper).withPinnedSession .map(_.toList) }, Duration.Inf) } diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index de5e7dd62..0a8528cf0 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -439,21 +439,21 @@ package object domain { val akExpressionTurn10 = "AK7-18,AK24,AK30-100/5" val altersklassenTurn10 = Seq( 6,7,8,9,10,11,12,13,14,15,16,17,18,24,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 - ).map(i => ("AK", i)) + ).map(i => ("AK", Seq(), i)) // see https://www.dtb.de/fileadmin/user_upload/dtb.de/Passwesen/Wettkampfordnung_DTB_2021.pdf val akDTBExpression = "AK6,AK18,AK22,AK25" val altersklassenDTB = Seq( 6,18,22,25 - ).map(i => ("AK", i)) + ).map(i => ("AK", Seq(), i)) // see https://www.dtb.de/fileadmin/user_upload/dtb.de/TURNEN/Standards/PDFs/Rahmentrainingskonzeption-GTm_inklAnlagen_19.11.2020.pdf val akDTBPflichtExpression = "AK8-9,AK11-19/2" val altersklassenDTBPflicht = Seq( 7,8,9,11,13,15,17,19 - ).map(i => ("AK", i)) + ).map(i => ("AK", Seq(), i)) val akDTBKuerExpression = "AK13-19/2" val altersklassenDTBKuer = Seq( 12,13,15,17,19 - ).map(i => ("AK", i)) + ).map(i => ("AK", Seq(), i)) val predefinedAKs = Map( ("Ohne" -> "") @@ -463,52 +463,92 @@ package object domain { , ("DTB Kür" -> akDTBKuerExpression) , ("Individuell" -> "") ) - def apply(altersgrenzen: Seq[(String,Int)]): Seq[Altersklasse] = { + def apply(altersgrenzen: Seq[(String, Seq[String], Int)]): Seq[Altersklasse] = { if (altersgrenzen.isEmpty) { Seq.empty } else { - altersgrenzen.sortBy(_._2).distinctBy(_._2).foldLeft(Seq[Altersklasse]()) { (acc, ag) => - acc :+ Altersklasse(ag._1, acc.lastOption.map(_.alterBis + 1).getOrElse(0), ag._2 - 1) - } :+ Altersklasse(altersgrenzen.last._1, altersgrenzen.last._2, 0) + altersgrenzen + .groupBy(ag => (ag._1, ag._2)) // ag-name + qualifiers + .map { aggr => + aggr._1 -> aggr._2 + .sortBy(ag => ag._3) + .distinctBy(_._3) + .foldLeft(Seq[Altersklasse]()) { (acc, ag) => + acc :+ Altersklasse(ag._1, acc.lastOption.map(_.alterBis + 1).getOrElse(0), ag._3 - 1, ag._2) + }.appended(Altersklasse(aggr._2.last._1, aggr._2.last._3, 0, aggr._2.last._2)) + } + .flatMap(_._2) + .toSeq } } - def apply(klassen: Seq[Altersklasse], alter: Int): Altersklasse = { - klassen.find(_.matchesAlter(alter)).getOrElse(Altersklasse(klassen.head.bezeichnung, alter, alter)) + def apply(klassen: Seq[Altersklasse], alter: Int, geschlecht: String, programm: ProgrammView): Altersklasse = { + klassen + .find(klasse => klasse.matchesAlter(alter) && klasse.matchesGeschlecht(geschlecht) && klasse.matchesProgramm(programm)) + .getOrElse(Altersklasse(klassen.head.bezeichnung, alter, alter, Seq(geschlecht, programm.name))) } - def parseGrenzen(klassenDef: String, fallbackBezeichnung: String = "Altersklasse"): Seq[(String, Int)] = { + def parseGrenzen(klassenDef: String, fallbackBezeichnung: String = "Altersklasse"): Seq[(String, Seq[String], Int)] = { + /* + AKWBS(W+BS)7,8,9,10,12,16,AKMBS(M+BS)8,10,15 + + */ val rangeStepPattern = "([\\D\\s]*)([0-9]+)-([0-9]+)/([0-9]+)".r val rangepattern = "([\\D\\s]*)([0-9]+)-([0-9]+)".r val intpattern = "([\\D\\s]*)([0-9]+)".r - def bez(b: String): String = if(b.nonEmpty) b else fallbackBezeichnung + val qualifierPattern = "(.*)\\(([\\D\\s]+)\\)".r + + def bez(b: String): (String,Seq[String]) = if(b.nonEmpty) { + b match { + case qualifierPattern(bezeichnung, qualifiers) => (bezeichnung, qualifiers.split("\\+").toSeq) + case bezeichnung: String => (bezeichnung, Seq()) + } + } else ("", Seq()) + klassenDef.split(",") .flatMap{ case rangeStepPattern(bezeichnung, von, bis, stepsize) => Range.inclusive(von, bis, stepsize).map(i => (bez(bezeichnung), i)) case rangepattern(bezeichnung, von, bis) => (str2Int(von) to str2Int(bis)).map(i => (bez(bezeichnung), i)) case intpattern(bezeichnung, von) => Seq((bez(bezeichnung), str2Int(von))) case _ => Seq.empty - }.toList.sortBy(_._2) + }.toList + .foldLeft(Seq[(String, Seq[String], Int)]()){(acc, item) => + if (item._1._1.nonEmpty) { + acc :+ (item._1._1, item._1._2, item._2) + } else if (acc.nonEmpty) { + acc :+ (acc.last._1, acc.last._2, item._2) + } else { + acc :+ (fallbackBezeichnung, Seq(), item._2) + } + } + .sortBy(item => (item._1, item._3)) } def apply(klassenDef: String, fallbackBezeichnung: String = "Altersklasse"): Seq[Altersklasse] = { apply(parseGrenzen(klassenDef, fallbackBezeichnung)) } } - case class Altersklasse(bezeichnung: String, alterVon: Int, alterBis: Int) extends DataObject { + case class Altersklasse(bezeichnung: String, alterVon: Int, alterBis: Int, qualifiers: Seq[String]) extends DataObject { + val geschlechtQualifier = qualifiers.filter(q => Seq("M", "W").contains(q)) + val programmQualifier = qualifiers.filter(q => !Seq("M", "W").contains(q)) def matchesAlter(alter: Int): Boolean = ((alterVon == 0 || alter >= alterVon) && (alterBis == 0 || alter <= alterBis)) - + def matchesGeschlecht(geschlecht: String): Boolean = { + geschlechtQualifier.isEmpty || geschlechtQualifier.contains(geschlecht) + } + def matchesProgramm(programm: ProgrammView): Boolean = { + programmQualifier.isEmpty || programm.programPath.exists(p => programmQualifier.contains(p.name)) + } override def easyprint: String = { if (alterVon > 0 && alterBis > 0) if (alterVon == alterBis) - s"$bezeichnung $alterVon" - else s"$bezeichnung $alterVon bis $alterBis" + s"""$bezeichnung ${qualifiers.mkString(",")} $alterVon""" + else s"""$bezeichnung ${qualifiers.mkString(",")} $alterVon bis $alterBis""" else if (alterVon > 0 && alterBis == 0) - s"$bezeichnung ab $alterVon" + s"""$bezeichnung ${qualifiers.mkString(",")} ab $alterVon""" else - s"$bezeichnung bis $alterBis" + s"""$bezeichnung ${qualifiers.mkString(",")} bis $alterBis""" } override def compare(x: DataObject): Int = x match { diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfOverviewTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfOverviewTab.scala index c8c16c3bd..391c37cf5 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfOverviewTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfOverviewTab.scala @@ -64,16 +64,18 @@ class WettkampfOverviewTab(wettkampf: WettkampfView, override val service: KutuS val aks = ByAltersklasse("AK", Altersklasse.parseGrenzen(wettkampf.altersklassen)) val facts = service.listAKOverviewFacts(UUID.fromString(wettkampf.uuid.get)) val grouper = aks.makeGroupBy(wettkampf.toWettkampf)_ - facts.groupBy(_._1).flatMap(gr => gr._2.groupBy(x => (x._2, grouper(x._5))).map(gr2 => - (gr._1, s"${gr2._1._1} ${gr2._1._2.easyprint}", gr2._1._2.alterVon, gr2._2.count(_._4.equals("M")), gr2._2.count(_._4.equals("W"))) - )).toList + facts.groupBy(_._1).flatMap(gr => gr._2.groupBy(x => (x._2, grouper(x._5, x._4, x._2))).map { gr2 => + val pgmname = if (gr2._1._2.easyprint.contains(gr2._1._1.name)) gr2._1._2.easyprint else s"${gr2._1._1.name} ${gr2._1._2.easyprint}" + (gr._1, pgmname, gr2._1._2.alterVon, gr2._2.count(_._4.equals("M")), gr2._2.count(_._4.equals("W"))) + }).toList } else if (wettkampf.jahrgangsklassen.nonEmpty) { val aks = ByJahrgangsAltersklasse("AK", Altersklasse.parseGrenzen(wettkampf.jahrgangsklassen)) val facts = service.listAKOverviewFacts(UUID.fromString(wettkampf.uuid.get)) val grouper = aks.makeGroupBy(wettkampf.toWettkampf) _ - facts.groupBy(_._1).flatMap(gr => gr._2.groupBy(x => (x._2, grouper(x._5))).map(gr2 => - (gr._1, s"${gr2._1._1} ${gr2._1._2.easyprint}", gr2._1._2.alterVon, gr2._2.count(_._4.equals("M")), gr2._2.count(_._4.equals("W"))) - )).toList + facts.groupBy(_._1).flatMap(gr => gr._2.groupBy(x => (x._2, grouper(x._5, x._4, x._2))).map { gr2 => + val pgmname = if (gr2._1._2.easyprint.contains(gr2._1._1.name)) gr2._1._2.easyprint else s"${gr2._1._1.name} ${gr2._1._2.easyprint}" + (gr._1, pgmname, gr2._1._2.alterVon, gr2._2.count(_._4.equals("M")), gr2._2.count(_._4.equals("W"))) + }).toList } else { service.listOverviewStats(UUID.fromString(wettkampf.uuid.get)) } diff --git a/src/test/scala/ch/seidel/kutu/squad/JGClubGrouperSpec.scala b/src/test/scala/ch/seidel/kutu/squad/JGClubGrouperSpec.scala index 25a3431f0..abb404a3c 100644 --- a/src/test/scala/ch/seidel/kutu/squad/JGClubGrouperSpec.scala +++ b/src/test/scala/ch/seidel/kutu/squad/JGClubGrouperSpec.scala @@ -7,12 +7,32 @@ import org.scalatest.wordspec.AnyWordSpec class JGClubGrouperSpec extends AnyWordSpec with Matchers { - "extract Altersklasse" in { - val altersklasse = ByAltersklasse("AK", Altersklasse.parseGrenzen("AK6-10,AK11-20/2,AK25-100/10")) - println(altersklasse.grenzen) - assert(altersklasse.grenzen === List(("AK",6), ("AK",7), ("AK",8), ("AK",9), ("AK",10), - ("AK",11), ("AK",13), ("AK",15), ("AK",17), ("AK",19), - ("AK",25), ("AK",35), ("AK",45), ("AK",55), ("AK",65), ("AK",75), ("AK",85), ("AK",95))) + "extract Altersklasse" in { + val altersklasse = ByAltersklasse("AK", Altersklasse.parseGrenzen("AK6-10,AK11-20/2,AK25-100/10")) + println(altersklasse.grenzen) + assert(altersklasse.grenzen === List(("AK", List(), 6), ("AK", List(), 7), ("AK", List(), 8), ("AK", List(), 9), ("AK", List(), 10), + ("AK", List(), 11), ("AK", List(), 13), ("AK", List(), 15), ("AK", List(), 17), ("AK", List(), 19), ("AK", List(), 25), + ("AK", List(), 35), ("AK", List(), 45), ("AK", List(), 55), ("AK", List(), 65), ("AK", List(), 75), ("AK", List(), 85), ("AK", List(), 95)) + ) + } + "extract complex Altersklasse" in { + val altersklasse = ByAltersklasse("AK", Altersklasse.parseGrenzen("AK(W+BS)8-17,AK(M+BS)8-18/2,AK(OS)14-18/2")) + println(altersklasse.grenzen) + assert(altersklasse.grenzen === List( + ("AK",List("W", "BS"),8), ("AK",List("M", "BS"),8), + ("AK",List("W", "BS"),9), + ("AK",List("W", "BS"),10), ("AK",List("M", "BS"),10), + ("AK",List("W", "BS"),11), ("AK",List("W", "BS"),12), + + ("AK",List("M", "BS"),12), + ("AK",List("W", "BS"),13), + ("AK",List("W", "BS"),14), ("AK",List("M", "BS"),14), ("AK",List("OS"),14), + + ("AK",List("W", "BS"),15), ("AK",List("W", "BS"),16), ("AK",List("M", "BS"),16), ("AK",List("OS"),16), + + ("AK",List("W", "BS"),17), + ("AK",List("M", "BS"),18), ("AK",List("OS"),18)) + ) } } From 4d2ce3d09017f6e4ac0a9bac25c1a30b05e254ae Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sat, 15 Apr 2023 09:37:35 +0200 Subject: [PATCH 72/99] #659 Refine squad-name generator in JGClubGrouper - prevent generating redundant information like M,AK M,OS,OS, better M,AK,OS --- .../scala/ch/seidel/kutu/domain/package.scala | 19 +++++++++++--- .../ch/seidel/kutu/squad/ATTGrouper.scala | 4 +-- .../ch/seidel/kutu/squad/JGClubGrouper.scala | 26 ++++++++++++------- .../ch/seidel/kutu/squad/RiegenSplitter.scala | 2 +- .../seidel/kutu/squad/JGClubGrouperSpec.scala | 1 - 5 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 0a8528cf0..85731df36 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -541,14 +541,25 @@ package object domain { programmQualifier.isEmpty || programm.programPath.exists(p => programmQualifier.contains(p.name)) } override def easyprint: String = { + val q = if (qualifiers.nonEmpty) qualifiers.mkString("(", ",", ")") else "" if (alterVon > 0 && alterBis > 0) if (alterVon == alterBis) - s"""$bezeichnung ${qualifiers.mkString(",")} $alterVon""" - else s"""$bezeichnung ${qualifiers.mkString(",")} $alterVon bis $alterBis""" + s"""$bezeichnung$q $alterVon""" + else s"""$bezeichnung$q $alterVon bis $alterBis""" else if (alterVon > 0 && alterBis == 0) - s"""$bezeichnung ${qualifiers.mkString(",")} ab $alterVon""" + s"""$bezeichnung$q ab $alterVon""" else - s"""$bezeichnung ${qualifiers.mkString(",")} bis $alterBis""" + s"""$bezeichnung$q bis $alterBis""" + } + def easyprintShort: String = { + if (alterVon > 0 && alterBis > 0) + if (alterVon == alterBis) + s"""$bezeichnung$alterVon""" + else s"""$bezeichnung$alterVon-$alterBis""" + else if (alterVon > 0 && alterBis == 0) + s"""$bezeichnung$alterVon-""" + else + s"""$bezeichnung-$alterBis""" } override def compare(x: DataObject): Int = x match { diff --git a/src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala index 082c29e70..da1f8c10d 100644 --- a/src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala +++ b/src/main/scala/ch/seidel/kutu/squad/ATTGrouper.scala @@ -7,8 +7,8 @@ case object ATTGrouper extends RiegenGrouper { override def generateRiegenName(w: WertungView) = groupKey(atGrouper)(w) override def buildGrouper(riegencnt: Int): (List[WertungView => String], List[WertungView => String], Boolean) = { - val atGrp = atGrouper.drop(1)++atGrouper.take(1) - (atGrouper.take(3), atGrouper, true) + val atGrp = atGrouper.take(3) + (atGrp, atGrouper, true) } val atGrouper: List[WertungView => String] = List( diff --git a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala index b39f06fa1..7e582795f 100644 --- a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala +++ b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala @@ -11,19 +11,27 @@ case object JGClubGrouper extends RiegenGrouper { (jgclubGrouper, jgclubGrouper, true) } + def extractSexGrouper(w: WertungView): String = if (extractJGGrouper(w).contains(w.athlet.geschlecht)) "" else w.athlet.geschlecht + + def extractProgrammGrouper(w: WertungView): String = if (extractJGGrouper(w).contains(w.wettkampfdisziplin.programm.name)) "" else w.wettkampfdisziplin.programm.name + def extractJGGrouper(w: WertungView): String = if (w.wettkampf.altersklassen.nonEmpty) { - val value = ByAltersklasse("AK", Altersklasse.parseGrenzen(w.wettkampf.altersklassen, "AK")).analyze(Seq(w)) - value.head.easyprint + ByAltersklasse("AK", Altersklasse.parseGrenzen(w.wettkampf.altersklassen, "AK")).analyze(Seq(w)).head.asInstanceOf[Altersklasse].easyprintShort } else if (w.wettkampf.jahrgangsklassen.nonEmpty) { - ByAltersklasse("AK", Altersklasse.parseGrenzen(w.wettkampf.jahrgangsklassen, "AK")).analyze(Seq(w)).head.easyprint - } - else - (w.athlet.gebdat match {case Some(d) => f"$d%tY"; case _ => ""}) + ByJahrgangsAltersklasse("AK", Altersklasse.parseGrenzen(w.wettkampf.jahrgangsklassen, "AK")).analyze(Seq(w)).head.asInstanceOf[Altersklasse].easyprintShort + } else + (w.athlet.gebdat match { + case Some(d) => f"$d%tY"; + case _ => "" + }) val jgclubGrouper: List[WertungView => String] = List( - x => x.athlet.geschlecht, + x => extractSexGrouper(x), + x => extractProgrammGrouper(x), x => extractJGGrouper(x), - x => x.wettkampfdisziplin.programm.name, - x => x.athlet.verein match {case Some(v) => v.easyprint case None => ""} + x => x.athlet.verein match { + case Some(v) => v.easyprint + case None => "" + } ) } \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/squad/RiegenSplitter.scala b/src/main/scala/ch/seidel/kutu/squad/RiegenSplitter.scala index 74d01d7a0..380babeb7 100644 --- a/src/main/scala/ch/seidel/kutu/squad/RiegenSplitter.scala +++ b/src/main/scala/ch/seidel/kutu/squad/RiegenSplitter.scala @@ -11,7 +11,7 @@ trait RiegenSplitter { def groupKey(grplst: List[WertungView => String])(wertung: WertungView): String = { grplst.foldLeft(""){(acc, f) => acc + "," + f(wertung) - }.drop(1)// remove leading "," + }.dropWhile(_ == ',')// remove leading "," } @tailrec diff --git a/src/test/scala/ch/seidel/kutu/squad/JGClubGrouperSpec.scala b/src/test/scala/ch/seidel/kutu/squad/JGClubGrouperSpec.scala index abb404a3c..b904bf89f 100644 --- a/src/test/scala/ch/seidel/kutu/squad/JGClubGrouperSpec.scala +++ b/src/test/scala/ch/seidel/kutu/squad/JGClubGrouperSpec.scala @@ -34,5 +34,4 @@ class JGClubGrouperSpec extends AnyWordSpec with Matchers { ("AK",List("M", "BS"),18), ("AK",List("OS"),18)) ) } - } From 2b53bfce2ea2123577934af01242c81634cedb39 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sat, 15 Apr 2023 10:24:28 +0200 Subject: [PATCH 73/99] #659 Provide full squad-name in Riegenblatt --- .../renderer/RiegenblattToHtmlRenderer.scala | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala index 7b1aeeed7..51c8985c6 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala @@ -237,12 +237,13 @@ trait RiegenblattToHtmlRenderer { """ - def shorten(s: String, l: Int = 3) = { + def shorten(s: String, l: Int = 10) = { if (s.length() <= l) { - s + s.trim } else { - val words = s.split(" ") - if (words.length > 2) { + val words = s.split("[ ,]") + words.map(_.take(l)).mkString(" ").trim + /*if (words.length > 2) { if(words(words.length - 1).length < l) { s"${words(0)}..${words(words.length - 2)} ${words(words.length - 1)}" } else { @@ -250,7 +251,7 @@ trait RiegenblattToHtmlRenderer { } } else { words.map(_.take(l)).mkString("", " ", ".") - } + }*/ } } @@ -258,7 +259,10 @@ trait RiegenblattToHtmlRenderer { val logoHtml = if (logo.exists()) s"""""" else "" val (riege, tutioffset) = riegepart val d = riege.kandidaten.zip(Range(1, riege.kandidaten.size+1)).map{kandidat => - val programm = if(kandidat._1.programm.isEmpty())"" else "(" + shorten(kandidat._1.programm) + ")" + val einteilung: String = kandidat._1.einteilung + .map(r => r.r.replaceAll( s",${kandidat._1.verein}", "")) + .getOrElse(kandidat._1.programm) + val programm = if(einteilung.isEmpty()) "" else "(" + shorten(einteilung) + ")" val verein = if(kandidat._1.verein.isEmpty())"" else shorten(kandidat._1.verein, 15) s"""${kandidat._2 + tutioffset}. ${escaped(kandidat._1.vorname)} ${escaped(kandidat._1.name)} ${escaped(programm)}${escaped(verein)}   """ }.mkString("", "\n", "\n") From b58c0356ab6ef65687d071608052498775776f5c Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sat, 15 Apr 2023 12:39:53 +0200 Subject: [PATCH 74/99] #671 Fix filter for displayed disciplines --- src/main/scala/ch/seidel/kutu/data/GroupBy.scala | 1 - src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala index 6f1fb7bb7..2a4d93ec4 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala @@ -364,7 +364,6 @@ case class ByJahrgangsAltersklasse(bezeichnung: String = "JG Altersklasse", gren } protected override val grouper = (v: WertungView) => { - val wkd: LocalDate = v.wettkampf.datum val gebd: LocalDate = sqlDate2ld(v.athlet.gebdat.getOrElse(Date.valueOf(LocalDate.now()))) makeGroupBy(v.wettkampf)(gebd, v.athlet.geschlecht, v.wettkampfdisziplin.programm) } diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index ef354ed39..95932cf56 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -98,7 +98,6 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr def reloadWertungen(extrafilter: (WertungView) => Boolean = defaultFilter) = { athleten. filter(wv => wv.wettkampf.id == wettkampf.id). - filter(w => scheduledGears.isEmpty || scheduledGears.contains(w.wettkampfdisziplin.disziplin )). filter(extrafilter). groupBy(wv => wv.athlet). map(wvg => wvg._2.map(WertungEditor)).toIndexedSeq From 9611048b32acce9e6e572a2a419ca91938afdd5d Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sat, 15 Apr 2023 16:47:49 +0200 Subject: [PATCH 75/99] Cleanup unused code, fix open generated documents in browser feature --- .../seidel/kutu/data/ResourceExchanger.scala | 51 ------------------- .../ch/seidel/kutu/renderer/PrintUtil.scala | 23 +++++++-- .../scala/ch/seidel/kutu/view/RiegenTab.scala | 31 +++-------- 3 files changed, 25 insertions(+), 80 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala index 86b1f6bc1..4b5994070 100644 --- a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala +++ b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala @@ -720,57 +720,6 @@ object ResourceExchanger extends KutuService with RiegenBuilder { values.map("\"" + _ + "\"").mkString(",") } - - def exportEinheiten(wettkampf: Wettkampf, filename: String): Unit = { - val fileOutputStream = new FileOutputStream(filename) - val riegenRaw = suggestRiegen(Seq(0), selectWertungen(wettkampfId = Some(wettkampf.id))) - val mapVereinVerband = selectVereine.map(v => v.name -> v.verband.getOrElse("")).toMap - val sep = ";" - - def butify(grpkey: String, anzahl: Int) = { - val parts = grpkey.split(",") - // Verband, Verein, Kategorie, Geschlecht, Anzahl, Bezeichnung - // 2 1 0 - mapVereinVerband(parts.drop(2).head) + sep + (parts.drop(2) :+ parts(1).split("//.")(0) :+ parts(0).replace("M", "Tu").replace("W", "Ti")).mkString(sep) + sep + anzahl + sep + - (parts.drop(2) :+ parts(1).split("//.")(0) :+ parts(0).replace("M", "(Tu)").replace("W", "(Ti)")).mkString(" ") + s" (${anzahl})" - } - - def butifyATT(grpkey: String, anzahl: Int) = { - val parts = grpkey.split(",") - val geschl = parts(0).replace("M", "Tu").replace("W", "Ti") - val jg = parts(1) - val verein = parts(2) - val kat = parts(3) - val rearranged = Seq(verein, jg, geschl) - // Verband, Verein, Jahrgang, Geschlecht, Anzahl, Bezeichnung - // 2 1 0 - mapVereinVerband(verein) + sep + rearranged.mkString(sep) + sep + anzahl + sep + - rearranged.mkString(" ") + s" (${anzahl})" - } - - val riegen = riegenRaw.map { r => - val anzahl = r._2.map(w => w.athletId).toSet.size - if (wettkampf.programmId == 1) { - butifyATT(r._1, anzahl) - } - else { - butify(r._1, anzahl) - } - } - if (wettkampf.programmId == 1) { - fileOutputStream.write(f"sep=${sep}\nVerband${sep}Verein${sep}Jahrgang${sep}Geschlecht${sep}Anzahl${sep}Einheitsbezeichnung\n".getBytes("ISO-8859-1")) - } - else { - fileOutputStream.write(f"sep=${sep}\nVerband${sep}Verein${sep}Kategorie${sep}Geschlecht${sep}Anzahl${sep}Einheitsbezeichnung\n".getBytes("ISO-8859-1")) - } - for (riege <- riegen) { - fileOutputStream.write((riege + "\n").getBytes("ISO-8859-1")) - } - - fileOutputStream.flush() - fileOutputStream.close() - } - def exportDurchgaenge(wettkampf: Wettkampf, filename: String): Unit = { val fileOutputStream = new FileOutputStream(filename) val diszipline = listDisziplinesZuWettkampf(wettkampf.id) diff --git a/src/main/scala/ch/seidel/kutu/renderer/PrintUtil.scala b/src/main/scala/ch/seidel/kutu/renderer/PrintUtil.scala index e08c35ff3..246bc5555 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/PrintUtil.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/PrintUtil.scala @@ -1,7 +1,7 @@ package ch.seidel.kutu.renderer import java.io._ -import java.util.Base64 +import java.util.{Base64, Locale} import java.util.concurrent.atomic.AtomicBoolean import ch.seidel.commons._ import ch.seidel.kutu.KuTuApp @@ -120,11 +120,24 @@ object PrintUtil { if(chkViaBrowser.selected.value) { onGenerateOutput(lpp).onComplete { case Success(toSave) => Platform.runLater { - val os = new BufferedOutputStream(new FileOutputStream(file)) - os.write(toSave.getBytes("UTF-8")) - os.flush() - os.close() + val bos = new BufferedOutputStream(new FileOutputStream(file)) + bos.write(toSave.getBytes("UTF-8")) + bos.flush() + bos.close() hostServices.showDocument(file.toURI.toASCIIString) + if (!file.toURI.toASCIIString.equals(file.toURI.toString)) { + hostServices.showDocument(file.toURI.toString) + } + /*val os = System.getProperty("os.name").toLowerCase(Locale.ROOT) + try { + val documentRef = if (os.contains("mac")) file.toURI.toASCIIString + else if (os.contains("win")) file.toURI.toString + else file.toURI.toASCIIString + hostServices.showDocument(documentRef) + } catch { + case e:Exception => + e.printStackTrace() + }*/ } case _ => } diff --git a/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala b/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala index 73eb1375f..7c504f6ab 100644 --- a/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala @@ -1100,28 +1100,6 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: }) } - def doRiegenEinheitenExport(event: ActionEvent): Unit = { - implicit val impevent = event - KuTuApp.invokeWithBusyIndicator { - val filename = "Einheiten.csv" - val dir = new java.io.File(homedir + "/" + encodeFileName(wettkampf.easyprint)) - if(!dir.exists()) { - dir.mkdirs(); - } - val file = new java.io.File(dir.getPath + "/" + filename) - - ResourceExchanger.exportEinheiten(wettkampf.toWettkampf, file.getPath) - hostServices.showDocument(file.toURI.toASCIIString) - } - } - - def makeRiegenEinheitenExport(): MenuItem = { - val m = KuTuApp.makeMenuAction("Riegen Einheiten export") {(caption: String, action: ActionEvent) => - doRiegenEinheitenExport(action) - } - m - } - def doDurchgangExport(event: ActionEvent): Unit = { implicit val impevent = event KuTuApp.invokeWithBusyIndicator { @@ -1134,7 +1112,10 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: ResourceExchanger.exportDurchgaenge(wettkampf.toWettkampf, file.getPath) hostServices.showDocument(file.toURI.toASCIIString) - } + if (!file.toURI.toASCIIString.equals(file.toURI.toString)) { + hostServices.showDocument(file.toURI.toString) + } + } } def makeDurchgangExport(): MenuItem = { @@ -1155,6 +1136,9 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: ResourceExchanger.exportSimpleDurchgaenge(wettkampf.toWettkampf, file.getPath) hostServices.showDocument(file.toURI.toASCIIString) + if (!file.toURI.toASCIIString.equals(file.toURI.toString)) { + hostServices.showDocument(file.toURI.toString) + } } } @@ -1311,7 +1295,6 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: } val btnExport = new MenuButton("Export") { - items += makeRiegenEinheitenExport() items += makeDurchgangExport() items += makeDurchgangExport2() items += makeRiegenBlaetterExport() From 0b469dc42929041dd8b19e9d132b108287cac909 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Mon, 17 Apr 2023 22:33:35 +0200 Subject: [PATCH 76/99] Fix generate csv with unscheduled riegen --- .../ch/seidel/commons/ProgressForm.scala | 2 +- .../seidel/kutu/data/ResourceExchanger.scala | 9 +- .../scala/ch/seidel/kutu/domain/package.scala | 2660 ++++++++--------- 3 files changed, 1337 insertions(+), 1334 deletions(-) diff --git a/src/main/scala/ch/seidel/commons/ProgressForm.scala b/src/main/scala/ch/seidel/commons/ProgressForm.scala index a61eb690d..8a437a3d5 100644 --- a/src/main/scala/ch/seidel/commons/ProgressForm.scala +++ b/src/main/scala/ch/seidel/commons/ProgressForm.scala @@ -68,7 +68,7 @@ class ProgressForm(stage: Option[Stage] = None) { label.text.value = title } dialogStage.show() - dialogStage.toFront + dialogStage.toFront() } def getDialogStage: Stage = dialogStage diff --git a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala index 4b5994070..e29680218 100644 --- a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala +++ b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala @@ -734,8 +734,9 @@ object ResourceExchanger extends KutuService with RiegenBuilder { fileOutputStream.write("\r\n".getBytes("ISO-8859-1")) listRiegenZuWettkampf(wettkampf.id) + .filter(_._3.nonEmpty) .sortBy(r => r._1) - .map(x => + .map{x => RiegeEditor( wettkampf.id, x._1, @@ -744,12 +745,13 @@ object ResourceExchanger extends KutuService with RiegenBuilder { enabled = true, x._3, x._4, - None)) + None) + } .groupBy(re => re.initdurchgang).toSeq .sortBy(re => re._1) .map { res => val (name, rel) = res - DurchgangEditor(wettkampf.id, durchgaenge(name.getOrElse("")), rel) + DurchgangEditor(wettkampf.id, durchgaenge(name.getOrElse(rel.head.initdurchgang.getOrElse(""))), rel) } .foreach { x => fileOutputStream.write(f"""${x.durchgang.name}${sep}${x.anz.value}${sep}${x.min.value}${sep}${x.max.value}${sep}${x.avg.value}${sep}${toShortDurationFormat(x.durchgang.planTotal)}${sep}${toShortDurationFormat(x.durchgang.planEinturnen)}${sep}${toShortDurationFormat(x.durchgang.planGeraet)}""".getBytes("ISO-8859-1")) @@ -779,6 +781,7 @@ object ResourceExchanger extends KutuService with RiegenBuilder { val riege2Map = listRiegen2ToRiegenMapZuWettkampf(wettkampf.id) val allRiegen = listRiegenZuWettkampf(wettkampf.id) + .filter(_._3.nonEmpty) .sortBy(r => r._1) .map(x => RiegeEditor( diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 85731df36..10f586bc7 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -1,1331 +1,1331 @@ -package ch.seidel.kutu - -import ch.seidel.kutu.data.{NameCodec, Surname} -import org.apache.commons.codec.language.ColognePhonetic -import org.apache.commons.codec.language.bm._ -import org.apache.commons.text.similarity.LevenshteinDistance - -import java.io.File -import java.net.URLEncoder -import java.nio.file.{Files, LinkOption, StandardOpenOption} -import java.sql.{Date, Timestamp} -import java.text.{ParseException, SimpleDateFormat} -import java.time.{LocalDate, LocalDateTime, Period, ZoneId} -import java.util.UUID -import java.util.concurrent.TimeUnit -import scala.concurrent.duration.Duration - -package object domain { - implicit def dbl2Str(d: Double) = f"${d}%2.3f" - - implicit def str2bd(value: String): BigDecimal = { - if (value != null) { - val trimmed = value.trim() - - if (trimmed.length() < 1) { - null - } else { - BigDecimal(trimmed) - } - } else { - null - } - } - - implicit def str2dbl(value: String): Double = { - if (value != null) { - val trimmed = value.trim() - - if (trimmed.length() < 1) { - 0d - } else { - val bigd: BigDecimal = trimmed - bigd.toDouble - } - } else { - 0d - } - } - - implicit def str2Int(value: String): Int = { - if (value != null) { - val trimmed = value.trim() - - if (trimmed.length() < 1) { - 0 - } else { - Integer.valueOf(trimmed) - } - } else { - 0 - } - } - - implicit def str2Long(value: String): Long = { - if (value != null) { - val trimmed = value.trim() - - if (trimmed.length() < 1) { - 0L - } else { - java.lang.Long.valueOf(trimmed) - } - } else { - 0L - } - } - - implicit def ld2SQLDate(ld: LocalDate): java.sql.Date = { - if (ld == null) null else { - val inst = ld.atStartOfDay(ZoneId.of("UTC")) - new java.sql.Date(java.util.Date.from(inst.toInstant).getTime) - } - } - - implicit def sqlDate2ld(sd: java.sql.Date): LocalDate = { - if (sd == null) null else { - sd.toLocalDate //.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() - } - } - - def isNumeric(c: String): Boolean = { - try { - Integer.parseInt(c) - true - } catch { - case _ => false - } - } - - val sdf = new SimpleDateFormat("dd.MM.yyyy") - val sdfShort = new SimpleDateFormat("dd.MM.yy") - val sdfExported = new SimpleDateFormat("yyyy-MM-dd") - val sdfYear = new SimpleDateFormat("yyyy") - - def dateToExportedStr(date: Date) = { - sdfExported.format(date) - } - - def str2SQLDate(date: String) = { - if (date == null) null else try { - new java.sql.Date(sdf.parse(date).getTime) - } - catch { - case _: ParseException => try { - new java.sql.Date(sdfExported.parse(date).getTime) - } - catch { - case _: ParseException => try { - new java.sql.Date(sdfShort.parse(date).getTime) - } catch { - case _: Exception => { - val time = try { - str2Long(date) - } catch { - case _: NumberFormatException => - sdf.parse(date.split("T")(0)).getTime() - } - new java.sql.Date(time) - } - } - } - } - } - - def toTimeFormat(millis: Long): String = if (millis <= 0) "" else f"${new java.util.Date(millis)}%tT" - - def toDurationFormat(from: Long, to: Long): String = { - val too = if (to <= 0 && from > 0) System.currentTimeMillis() else to - if (too - from <= 0) "" else { - toDurationFormat(too - from) - } - } - - def toDurationFormat(duration: Long): String = { - if (duration <= 0) "" else { - val d = Duration(duration, TimeUnit.MILLISECONDS) - List((d.toDays, "d"), (d.toHours - d.toDays * 24, "h"), (d.toMinutes - d.toHours * 60, "m"), (d.toSeconds - d.toMinutes * 60, "s")) - .filter(_._1 > 0) - .map(p => s"${p._1}${p._2}") - .mkString(", ") - } - } - - def toShortDurationFormat(duration: Long): String = { - val d = Duration(duration, TimeUnit.MILLISECONDS) - List(f"${d.toHours}%02d", f"${d.toMinutes - d.toHours * 60}%02d", f"${d.toSeconds - d.toMinutes * 60}%02d") - .mkString(":") - } - - // implicit def dateOption2AthletJahrgang(gebdat: Option[Date]) = gebdat match { - // case Some(d) => AthletJahrgang(extractYear.format(d)) - // case None => AthletJahrgang("unbekannt") - // } - - val encodeInvalidURIRegEx = "[,&.*+?/^${}()|\\[\\]\\\\]".r - - def encodeURIComponent(uri: String) = encodeInvalidURIRegEx.replaceAllIn(uri, "_") - - def encodeURIParam(uri: String) = URLEncoder.encode(uri, "UTF-8") - .replaceAll(" ", "%20") - .replaceAll("\\+", "%20") - .replaceAll("\\%21", "!") - .replaceAll("\\%27", "'") - .replaceAll("\\%28", "(") - .replaceAll("\\%29", ")") - .replaceAll("\\%7E", "~") - - def encodeFileName(name: String): String = { - val forbiddenChars = List( - '/', '<', '>', ':', '"', '|', '?', '*', ' ' - ) :+ (0 to 32) - val forbiddenNames = List( - "CON", "PRN", "AUX", "NUL", - "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", - "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9" - ) - if (forbiddenNames.contains(name.toUpperCase())) - "_" + name + "_" - else - name.map(c => if (forbiddenChars.contains(c)) '_' else c) - } - - trait DataObject extends Ordered[DataObject] { - def easyprint: String = toString - - def capsulatedprint: String = { - val ep = easyprint - if (ep.matches(".*\\s,\\.;.*")) s""""$ep"""" else ep - } - def compare(o: DataObject): Int = easyprint.compare(o.easyprint) - } - - case class NullObject(caption: String) extends DataObject { - override def easyprint = caption - } - - object RiegeRaw { - val KIND_STANDARD = 0; - val KIND_EMPTY_RIEGE = 1; - val RIEGENMODE_BY_Program = 1; - val RIEGENMODE_BY_JG = 2; - val RIEGENMODE_BY_JG_VEREIN = 3; - } - - case class RiegeRaw(wettkampfId: Long, r: String, durchgang: Option[String], start: Option[Long], kind: Int) extends DataObject { - override def easyprint = r - } - - case class Riege(r: String, durchgang: Option[String], start: Option[Disziplin], kind: Int) extends DataObject { - override def easyprint = r - - def toRaw(wettkampfId: Long) = RiegeRaw(wettkampfId, r, durchgang, start.map(_.id), kind) - } - - case class TurnerGeschlecht(geschlecht: String) extends DataObject { - override def easyprint = geschlecht.toLowerCase() match { - case "m" => "Turner" - case "w" => "Turnerinnen" - case "f" => "Turnerinnen" - case _ => "Turner" - } - } - - case class Verein(id: Long, name: String, verband: Option[String]) extends DataObject { - override def easyprint = name - - def extendedprint = s"$name ${verband.getOrElse("")}" - - override def toString = name - } - - case class Verband(name: String) extends DataObject { - override def easyprint = name - - override def toString = name - } - - object Athlet { - def apply(): Athlet = Athlet(0, 0, "", "", "", None, "", "", "", None, activ = true) - - def apply(verein: Verein): Athlet = Athlet(0, 0, "M", "", "", None, "", "", "", Some(verein.id), activ = true) - - def apply(verein: Long): Athlet = Athlet(0, 0, "M", "", "", None, "", "", "", Some(verein), activ = true) - - def mapSexPrediction(athlet: Athlet): String = Surname - .isSurname(athlet.vorname) - .map { sn => if (sn.isMasculin == sn.isFeminin) athlet.geschlecht else if (sn.isMasculin) "M" else "W" } - .getOrElse("X") - } - - case class Athlet(id: Long, js_id: Int, geschlecht: String, name: String, vorname: String, gebdat: Option[java.sql.Date], strasse: String, plz: String, ort: String, verein: Option[Long], activ: Boolean) extends DataObject { - override def easyprint: String = name + " " + vorname + " " + (gebdat match { - case Some(d) => f"$d%tY " - case _ => "" - }) - - def extendedprint: String = "" + (geschlecht match { - case "W" => s"Ti ${name + " " + vorname}" - case _ => s"Tu ${name + " " + vorname}" - }) + (gebdat match { - case Some(d) => f", $d%tF" - case _ => "" - }) - - def shortPrint: String = "" + (geschlecht match { - case "W" => s"Ti ${name + " " + vorname}" - case _ => s"Tu ${name + " " + vorname}" - }) + " " + (gebdat match { - case Some(d) => f"$d%tY " - case _ => "" - }) - - def toPublicView: Athlet = { - Athlet(id, 0, geschlecht, name, vorname, gebdat - .map(d => sqlDate2ld(d)) - .map(ld => LocalDate.of(ld.getYear, 1, 1)) - .map(ld => ld2SQLDate(ld)) - , "", "", "", verein, activ) - } - - def toAthletView(verein: Option[Verein]): AthletView = AthletView( - id, js_id, - geschlecht, name, vorname, gebdat, - strasse, plz, ort, - verein, activ) - } - - case class AthletView(id: Long, js_id: Int, geschlecht: String, name: String, vorname: String, gebdat: Option[java.sql.Date], strasse: String, plz: String, ort: String, verein: Option[Verein], activ: Boolean) extends DataObject { - override def easyprint = name + " " + vorname + " " + (gebdat match { - case Some(d) => f"$d%tY "; - case _ => " " - }) + (verein match { - case Some(v) => v.easyprint; - case _ => "" - }) - - def extendedprint: String = "" + (geschlecht match { - case "W" => s"Ti ${name + " " + vorname}" - case _ => s"Tu ${name + " " + vorname}" - }) + (gebdat match { - case Some(d) => f", $d%tF " - case _ => "" - }) + (verein match { - case Some(v) => v.easyprint; - case _ => "" - }) - - def toPublicView: AthletView = { - AthletView(id, 0, geschlecht, name, vorname, gebdat - .map(d => sqlDate2ld(d)) - .map(ld => LocalDate.of(ld.getYear, 1, 1)) - .map(ld => ld2SQLDate(ld)) - , "", "", "", verein, activ) - } - - def toAthlet = Athlet(id, js_id, geschlecht, name, vorname, gebdat, strasse, plz, ort, verein.map(_.id), activ) - - def withBestMatchingGebDat(importedGebDat: Option[Date]) = { - copy(gebdat = importedGebDat match { - case Some(d) => - gebdat match { - case Some(cd) if (cd.toLocalDate.getYear == d.toLocalDate.getYear) && f"${cd}%tF".endsWith("-01-01") => Some(d) - case _ => gebdat - } - case _ => gebdat - }) - } - - def updatedWith(athlet: Athlet) = AthletView(athlet.id, athlet.js_id, athlet.geschlecht, athlet.name, athlet.vorname, athlet.gebdat, athlet.strasse, athlet.plz, athlet.ort, verein.map(v => v.copy(id = athlet.verein.getOrElse(0L))), athlet.activ) - } - - object Wertungsrichter { - def apply(): Wertungsrichter = Wertungsrichter(0, 0, "", "", "", None, "", "", "", None, activ = true) - } - - case class Wertungsrichter(id: Long, js_id: Int, geschlecht: String, name: String, vorname: String, gebdat: Option[java.sql.Date], strasse: String, plz: String, ort: String, verein: Option[Long], activ: Boolean) extends DataObject { - override def easyprint = "Wertungsrichter " + name - } - - case class WertungsrichterView(id: Long, js_id: Int, geschlecht: String, name: String, vorname: String, gebdat: Option[java.sql.Date], strasse: String, plz: String, ort: String, verein: Option[Verein], activ: Boolean) extends DataObject { - override def easyprint = name + " " + vorname + " " + (gebdat match { - case Some(d) => f"$d%tY "; - case _ => " " - }) + (verein match { - case Some(v) => v.easyprint; - case _ => "" - }) - - def toWertungsrichter = Wertungsrichter(id, js_id, geschlecht, name, vorname, gebdat, strasse, plz, ort, verein.map(_.id), activ) - } - - object DurchgangType { - def apply(code: Int) = code match { - case 1 => Competition - case 2 => WarmUp - case 3 => AwardCeremony - case 4 => Pause - case _ => Competition // default-type - } - } - - abstract sealed trait DurchgangType { - val code: Int - - override def toString(): String = code.toString - } - - case object Competition extends DurchgangType { - override val code = 1 - } - - case object WarmUp extends DurchgangType { - override val code = 2 - } - - case object AwardCeremony extends DurchgangType { - override val code = 3 - } - - case object Pause extends DurchgangType { - override val code = 4 - } - - object Durchgang { - def apply(): Durchgang = Durchgang(0, "nicht zugewiesen") - - def apply(wettkampfId: Long, name: String): Durchgang = Durchgang(0, wettkampfId, name, name, Competition, 50, 0, None, None, 0, 0, 0) - - def apply(id: Long, wettkampfId: Long, title: String, name: String, durchgangtype: DurchgangType, ordinal: Int, planStartOffset: Long, effectiveStartTime: Option[java.sql.Timestamp], effectiveEndTime: Option[java.sql.Timestamp]): Durchgang = - Durchgang(id, wettkampfId, title, name, durchgangtype, ordinal, planStartOffset, effectiveStartTime, effectiveEndTime, 0, 0, 0) - } - - case class Durchgang(id: Long, wettkampfId: Long, title: String, name: String, durchgangtype: DurchgangType, ordinal: Int, planStartOffset: Long, effectiveStartTime: Option[java.sql.Timestamp], effectiveEndTime: Option[java.sql.Timestamp], planEinturnen: Long, planGeraet: Long, planTotal: Long) extends DataObject { - override def easyprint = name - - def toAggregator(other: Durchgang) = Durchgang(0, wettkampfId, title, title, durchgangtype, Math.min(ordinal, other.ordinal), Math.min(planStartOffset, planStartOffset), effectiveStartTime, effectiveEndTime, Math.max(planEinturnen, other.planEinturnen), Math.max(planGeraet, other.planGeraet), Math.max(planTotal, other.planTotal)) - } - - case class Durchgangstation(wettkampfId: Long, durchgang: String, d_Wertungsrichter1: Option[Long], e_Wertungsrichter1: Option[Long], d_Wertungsrichter2: Option[Long], e_Wertungsrichter2: Option[Long], geraet: Disziplin) extends DataObject { - override def easyprint = toString - } - - case class DurchgangstationView(wettkampfId: Long, durchgang: String, d_Wertungsrichter1: Option[WertungsrichterView], e_Wertungsrichter1: Option[WertungsrichterView], d_Wertungsrichter2: Option[WertungsrichterView], e_Wertungsrichter2: Option[WertungsrichterView], geraet: Disziplin) extends DataObject { - override def easyprint = toString - - def toDurchgangstation = Durchgangstation(wettkampfId, durchgang, d_Wertungsrichter1.map(_.id), e_Wertungsrichter1.map(_.id), d_Wertungsrichter2.map(_.id), e_Wertungsrichter2.map(_.id), geraet) - } - - object AthletJahrgang { - def apply(gebdat: Option[java.sql.Date]): AthletJahrgang = gebdat match { - case Some(d) => AthletJahrgang(f"$d%tY") - case None => AthletJahrgang("unbekannt") - } - } - - case class AthletJahrgang(jahrgang: String) extends DataObject { - override def easyprint = "Jahrgang " + jahrgang - } - - object Leistungsklasse { - // https://www.dtb.de/fileadmin/user_upload/dtb.de/Sportarten/Ger%C3%A4tturnen/PDFs/2022/01_DTB-Arbeitshilfe_Gtw_KuerMod_2022_V1.pdf - val dtb = Seq( - "Kür", "LK1", "LK2", "LK3", "LK4" - ) - } - object Altersklasse { - - // file:///C:/Users/Roland/Downloads/Turn10-2018_Allgemeine%20Bestimmungen.pdf - val akExpressionTurn10 = "AK7-18,AK24,AK30-100/5" - val altersklassenTurn10 = Seq( - 6,7,8,9,10,11,12,13,14,15,16,17,18,24,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 - ).map(i => ("AK", Seq(), i)) - // see https://www.dtb.de/fileadmin/user_upload/dtb.de/Passwesen/Wettkampfordnung_DTB_2021.pdf - val akDTBExpression = "AK6,AK18,AK22,AK25" - val altersklassenDTB = Seq( - 6,18,22,25 - ).map(i => ("AK", Seq(), i)) - // see https://www.dtb.de/fileadmin/user_upload/dtb.de/TURNEN/Standards/PDFs/Rahmentrainingskonzeption-GTm_inklAnlagen_19.11.2020.pdf - val akDTBPflichtExpression = "AK8-9,AK11-19/2" - val altersklassenDTBPflicht = Seq( - 7,8,9,11,13,15,17,19 - ).map(i => ("AK", Seq(), i)) - val akDTBKuerExpression = "AK13-19/2" - val altersklassenDTBKuer = Seq( - 12,13,15,17,19 - ).map(i => ("AK", Seq(), i)) - - val predefinedAKs = Map( - ("Ohne" -> "") - , ("Turn10®" -> akExpressionTurn10) - , ("DTB" -> akDTBExpression) - , ("DTB Pflicht" -> akDTBPflichtExpression) - , ("DTB Kür" -> akDTBKuerExpression) - , ("Individuell" -> "") - ) - def apply(altersgrenzen: Seq[(String, Seq[String], Int)]): Seq[Altersklasse] = { - if (altersgrenzen.isEmpty) { - Seq.empty - } else { - altersgrenzen - .groupBy(ag => (ag._1, ag._2)) // ag-name + qualifiers - .map { aggr => - aggr._1 -> aggr._2 - .sortBy(ag => ag._3) - .distinctBy(_._3) - .foldLeft(Seq[Altersklasse]()) { (acc, ag) => - acc :+ Altersklasse(ag._1, acc.lastOption.map(_.alterBis + 1).getOrElse(0), ag._3 - 1, ag._2) - }.appended(Altersklasse(aggr._2.last._1, aggr._2.last._3, 0, aggr._2.last._2)) - } - .flatMap(_._2) - .toSeq - } - } - - def apply(klassen: Seq[Altersklasse], alter: Int, geschlecht: String, programm: ProgrammView): Altersklasse = { - klassen - .find(klasse => klasse.matchesAlter(alter) && klasse.matchesGeschlecht(geschlecht) && klasse.matchesProgramm(programm)) - .getOrElse(Altersklasse(klassen.head.bezeichnung, alter, alter, Seq(geschlecht, programm.name))) - } - - def parseGrenzen(klassenDef: String, fallbackBezeichnung: String = "Altersklasse"): Seq[(String, Seq[String], Int)] = { - /* - AKWBS(W+BS)7,8,9,10,12,16,AKMBS(M+BS)8,10,15 - - */ - val rangeStepPattern = "([\\D\\s]*)([0-9]+)-([0-9]+)/([0-9]+)".r - val rangepattern = "([\\D\\s]*)([0-9]+)-([0-9]+)".r - val intpattern = "([\\D\\s]*)([0-9]+)".r - val qualifierPattern = "(.*)\\(([\\D\\s]+)\\)".r - - def bez(b: String): (String,Seq[String]) = if(b.nonEmpty) { - b match { - case qualifierPattern(bezeichnung, qualifiers) => (bezeichnung, qualifiers.split("\\+").toSeq) - case bezeichnung: String => (bezeichnung, Seq()) - } - } else ("", Seq()) - - klassenDef.split(",") - .flatMap{ - case rangeStepPattern(bezeichnung, von, bis, stepsize) => Range.inclusive(von, bis, stepsize).map(i => (bez(bezeichnung), i)) - case rangepattern(bezeichnung, von, bis) => (str2Int(von) to str2Int(bis)).map(i => (bez(bezeichnung), i)) - case intpattern(bezeichnung, von) => Seq((bez(bezeichnung), str2Int(von))) - case _ => Seq.empty - }.toList - .foldLeft(Seq[(String, Seq[String], Int)]()){(acc, item) => - if (item._1._1.nonEmpty) { - acc :+ (item._1._1, item._1._2, item._2) - } else if (acc.nonEmpty) { - acc :+ (acc.last._1, acc.last._2, item._2) - } else { - acc :+ (fallbackBezeichnung, Seq(), item._2) - } - } - .sortBy(item => (item._1, item._3)) - } - def apply(klassenDef: String, fallbackBezeichnung: String = "Altersklasse"): Seq[Altersklasse] = { - apply(parseGrenzen(klassenDef, fallbackBezeichnung)) - } - } - - case class Altersklasse(bezeichnung: String, alterVon: Int, alterBis: Int, qualifiers: Seq[String]) extends DataObject { - val geschlechtQualifier = qualifiers.filter(q => Seq("M", "W").contains(q)) - val programmQualifier = qualifiers.filter(q => !Seq("M", "W").contains(q)) - def matchesAlter(alter: Int): Boolean = - ((alterVon == 0 || alter >= alterVon) && - (alterBis == 0 || alter <= alterBis)) - def matchesGeschlecht(geschlecht: String): Boolean = { - geschlechtQualifier.isEmpty || geschlechtQualifier.contains(geschlecht) - } - def matchesProgramm(programm: ProgrammView): Boolean = { - programmQualifier.isEmpty || programm.programPath.exists(p => programmQualifier.contains(p.name)) - } - override def easyprint: String = { - val q = if (qualifiers.nonEmpty) qualifiers.mkString("(", ",", ")") else "" - if (alterVon > 0 && alterBis > 0) - if (alterVon == alterBis) - s"""$bezeichnung$q $alterVon""" - else s"""$bezeichnung$q $alterVon bis $alterBis""" - else if (alterVon > 0 && alterBis == 0) - s"""$bezeichnung$q ab $alterVon""" - else - s"""$bezeichnung$q bis $alterBis""" - } - def easyprintShort: String = { - if (alterVon > 0 && alterBis > 0) - if (alterVon == alterBis) - s"""$bezeichnung$alterVon""" - else s"""$bezeichnung$alterVon-$alterBis""" - else if (alterVon > 0 && alterBis == 0) - s"""$bezeichnung$alterVon-""" - else - s"""$bezeichnung-$alterBis""" - } - - override def compare(x: DataObject): Int = x match { - case ak: Altersklasse => alterVon.compareTo(ak.alterVon) - case _ => x.easyprint.compareTo(easyprint) - } - } - - case class WettkampfJahr(wettkampfjahr: String) extends DataObject { - override def easyprint = "Wettkampf-Jahr " + wettkampfjahr - } - - case class Disziplin(id: Long, name: String) extends DataObject { - override def easyprint = name - } - - trait Programm extends DataObject { - override def easyprint = name - - val id: Long - val name: String - val aggregate: Int - val ord: Int - val alterVon: Int - val alterBis: Int - val riegenmode: Int - val uuid: String - - def withParent(parent: ProgrammView) = { - ProgrammView(id, name, aggregate, Some(parent), ord, alterVon, alterBis, uuid, riegenmode) - } - - def toView = { - ProgrammView(id, name, aggregate, None, ord, alterVon, alterBis, uuid, riegenmode) - } - } - - /** - * - * Krits +-------------------------------------------+--------------------------------------------------------- - * aggregate ->|0 |1 - * +-------------------------------------------+--------------------------------------------------------- - * riegenmode->|1 |2 / 3(+verein) |1 |2 / 3(+verein) - * Acts +===========================================+========================================================= - * Einteilung->| Sex,Pgm,Verein | Sex,Pgm,Jg(,Verein) | Sex,Pgm,Verein | Pgm,Sex,Jg(,Verein) - * +--------------------+----------------------+----------------------+---------------------------------- - * Teilnahme | 1/WK | 1/WK | <=PgmCnt(Jg)/WK | 1/Pgm - * +-------------------------------------------+--------------------------------------------------------- - * Registration| 1/WK | 1/WK, Pgm/(Jg) | mind. 1, max 1/Pgm | 1/WK aut. Tn 1/Pgm - * +-------------------------------------------+--------------------------------------------------------- - * Beispiele | GeTu/KuTu/KuTuRi | Turn10® (BS/OS) | TG Allgäu (Pfl./Kür) | ATT (Kraft/Bewg) - * +-------------------------------------------+--------------------------------------------------------- - * Rangliste | Sex/Programm | Sex/Programm/Jg | Sex/Programm | Sex/Programm/Jg - * | | Sex/Programm/AK | Sex/Programm/AK | - * +-------------------------------------------+--------------------------------------------------------- - */ - case class ProgrammRaw(id: Long, name: String, aggregate: Int, parentId: Long, ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode: Int) extends Programm - - case class ProgrammView(id: Long, name: String, aggregate: Int, parent: Option[ProgrammView], ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode: Int) extends Programm { - //override def easyprint = toPath - - def head: ProgrammView = parent match { - case None => this - case Some(p) => p.head - } - - def subHead: Option[ProgrammView] = parent match { - case None => None - case Some(p) => if (p.parent.nonEmpty) p.subHead else parent - } - - def programPath: Seq[ProgrammView] = parent match { - case None => Seq(this) - case Some(p) => p.programPath :+ this - } - - def wettkampfprogramm: ProgrammView = if (aggregator == this) this else aggregatorSubHead - - def aggregatorHead: ProgrammView = parent match { - case Some(p) if (p.aggregate != 0) => p.aggregatorHead - case _ => this - } - - def groupedHead: ProgrammView = parent match { - case Some(p) if (p.parent.nonEmpty && aggregate != 0) => p - case _ => aggregatorHead - } - - def aggregatorParent: ProgrammView = parent match { - case Some(p) if (aggregate != 0) => p.parent.getOrElse(this) - case _ => this - } - - def aggregator: ProgrammView = parent match { - case Some(p) if (aggregate != 0) => p - case _ => this - } - - def aggregatorSubHead: ProgrammView = parent match { - case Some(p) if (aggregate != 0 && p.aggregate != 0) => p.aggregatorSubHead - case Some(p) if (aggregate != 0 && p.aggregate == 0) => this - case _ => this - } - - def sameOrigin(other: ProgrammView) = head.equals(other.head) - - def toPath: String = parent match { - case None => this.name - case Some(p) => p.toPath + " / " + name - } - - override def compare(o: DataObject): Int = o match { - case p: ProgrammView => toPath.compareTo(p.toPath) - case _ => easyprint.compareTo(o.easyprint) - } - - override def toString = s"$toPath" - } - - // object Wettkampf { - // def apply(id: Long, datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal): Wettkampf = - // Wettkampf(id, datum, titel, programmId, auszeichnung, auszeichnungendnote, if(id == 0) Some(UUID.randomUUID().toString()) else None) - // def apply(id: Long, datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuid: String): Wettkampf = - // if(uuid != null) Wettkampf(id, datum, titel, programmId, auszeichnung, auszeichnungendnote, Some(uuid)) - // else apply(id, datum, titel, programmId, auszeichnung, auszeichnungendnote) - // } - case class Wettkampf(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: String, jahrgangsklassen: String) extends DataObject { - - override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY" - - def toView(programm: ProgrammView): WettkampfView = { - WettkampfView(id, uuid, datum, titel, programm, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen, jahrgangsklassen) - } - - def toPublic: Wettkampf = Wettkampf(id, uuid, datum, titel, programmId, auszeichnung, auszeichnung, "", altersklassen, jahrgangsklassen) - - private def prepareFilePath(homedir: String) = { - val filename: String = encodeFileName(easyprint) - - val dir = new File(homedir + "/" + filename) - if (!dir.exists) { - dir.mkdirs - } - dir - } - - def filePath(homedir: String, origin: String) = new java.io.File(prepareFilePath(homedir), ".at." + origin).toPath - - def fromOriginFilePath(homedir: String, origin: String) = new java.io.File(prepareFilePath(homedir), ".from." + origin).toPath - - def saveRemoteOrigin(homedir: String, origin: String): Unit = { - val path = fromOriginFilePath(homedir, origin) - val fos = Files.newOutputStream(path, StandardOpenOption.CREATE_NEW) - try { - fos.write(uuid.toString.getBytes("utf-8")) - fos.flush - } finally { - fos.close - } - val os = System.getProperty("os.name").toLowerCase - if (os.indexOf("win") > -1) { - Files.setAttribute(path, "dos:hidden", true, LinkOption.NOFOLLOW_LINKS) - } - } - - def hasRemote(homedir: String, origin: String): Boolean = { - val path = fromOriginFilePath(homedir, origin) - path.toFile.exists - } - - def removeRemote(homedir: String, origin: String): Unit = { - val atFile = fromOriginFilePath(homedir, origin).toFile - if (atFile.exists) { - atFile.delete() - } - } - - def saveSecret(homedir: String, origin: String, secret: String): Unit = { - val path = filePath(homedir, origin) - val fos = Files.newOutputStream(path, StandardOpenOption.CREATE) - try { - fos.write(secret.getBytes("utf-8")) - fos.flush() - } finally { - fos.close() - } - val os = System.getProperty("os.name").toLowerCase - if (os.indexOf("win") > -1) { - Files.setAttribute(path, "dos:hidden", true, LinkOption.NOFOLLOW_LINKS) - } - } - - def readSecret(homedir: String, origin: String): Option[String] = { - val path = filePath(homedir, origin) - if (path.toFile.exists) { - Some(new String(Files.readAllBytes(path), "utf-8")) - } - else { - None - } - } - - def removeSecret(homedir: String, origin: String): Unit = { - val atFile = filePath(homedir, origin).toFile - if (atFile.exists) { - atFile.delete() - } - } - - def hasSecred(homedir: String, origin: String): Boolean = readSecret(homedir, origin) match { - case Some(_) => true - case None => false - } - - def isReadonly(homedir: String, origin: String): Boolean = !hasSecred(homedir, origin) && hasRemote(homedir, origin) - } - - // object WettkampfView { - // def apply(id: Long, datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal): WettkampfView = - // WettkampfView(id, datum, titel, programm, auszeichnung, auszeichnungendnote, if(id == 0) Some(UUID.randomUUID().toString()) else None) - // def apply(id: Long, datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuid: String): WettkampfView = - // if(uuid != null) WettkampfView(id, datum, titel, programm, auszeichnung, auszeichnungendnote, Some(uuid)) - // else apply(id, datum, titel, programm, auszeichnung, auszeichnungendnote) - // } - case class WettkampfView(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: String, jahrgangsklassen: String) extends DataObject { - override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY" - - def toWettkampf = Wettkampf(id, uuid, datum, titel, programm.id, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen, jahrgangsklassen) - } - - case class PublishedScoreRaw(id: String, title: String, query: String, published: Boolean, publishedDate: java.sql.Date, wettkampfId: Long) extends DataObject { - override def easyprint = f"PublishedScore($title)" - } - - object PublishedScoreRaw { - def apply(title: String, query: String, published: Boolean, publishedDate: java.sql.Date, wettkampfId: Long): PublishedScoreRaw = - PublishedScoreRaw(UUID.randomUUID().toString, title, query, published, publishedDate, wettkampfId) - } - - case class PublishedScoreView(id: String, title: String, query: String, published: Boolean, publishedDate: java.sql.Date, wettkampf: Wettkampf) extends DataObject { - override def easyprint = f"PublishedScore($title - ${wettkampf.easyprint})" - - def isAlphanumericOrdered = query.contains("&alphanumeric") - - def toRaw = PublishedScoreRaw(id, title, query, published, publishedDate, wettkampf.id) - } - - case class Wettkampfdisziplin(id: Long, programmId: Long, disziplinId: Long, kurzbeschreibung: String, detailbeschreibung: Option[Array[Byte]], notenfaktor: scala.math.BigDecimal, masculin: Int, feminim: Int, ord: Int, scale: Int, dnote: Int, min: Int, max: Int, startgeraet: Int) extends DataObject { - override def easyprint = f"$disziplinId%02d: $kurzbeschreibung" - } - - case class WettkampfdisziplinView(id: Long, programm: ProgrammView, disziplin: Disziplin, kurzbeschreibung: String, detailbeschreibung: Option[Array[Byte]], notenSpez: NotenModus, masculin: Int, feminim: Int, ord: Int, scale: Int, dnote: Int, min: Int, max: Int, startgeraet: Int) extends DataObject { - override def easyprint = disziplin.name - - val isDNoteUsed = dnote != 0 - - def verifiedAndCalculatedWertung(wertung: Wertung): Wertung = { - if (wertung.noteE.isEmpty) { - wertung.copy(noteD = None, noteE = None, endnote = None) - } else { - val (d, e) = notenSpez.validated(wertung.noteD.getOrElse(BigDecimal(0)).doubleValue, wertung.noteE.getOrElse(BigDecimal(0)).doubleValue, this) - wertung.copy(noteD = Some(d), noteE = Some(e), endnote = Some(notenSpez.calcEndnote(d, e, this))) - } - } - - def toWettkampdisziplin = Wettkampfdisziplin(id, programm.id, disziplin.id, kurzbeschreibung, None, notenSpez.calcEndnote(0, 1, this), masculin, feminim, ord, scale, dnote, min, max, startgeraet) - } - - case class WettkampfPlanTimeRaw(id: Long, wettkampfId: Long, wettkampfDisziplinId: Long, wechsel: Long, einturnen: Long, uebung: Long, wertung: Long) extends DataObject { - override def easyprint = f"WettkampfPlanTime(disz=$wettkampfDisziplinId, w=$wechsel, e=$einturnen, u=$uebung, w=$wertung)" - } - - case class WettkampfPlanTimeView(id: Long, wettkampf: Wettkampf, wettkampfdisziplin: WettkampfdisziplinView, wechsel: Long, einturnen: Long, uebung: Long, wertung: Long) extends DataObject { - override def easyprint = f"WettkampfPlanTime(wk=$wettkampf, disz=$wettkampfdisziplin, w=$wechsel, e=$einturnen, u=$uebung, w=$wertung)" - - def toWettkampfPlanTimeRaw = WettkampfPlanTimeRaw(id, wettkampf.id, wettkampfdisziplin.id, wechsel, einturnen, uebung, wertung) - } - - case class Resultat(noteD: scala.math.BigDecimal, noteE: scala.math.BigDecimal, endnote: scala.math.BigDecimal) extends DataObject { - def +(r: Resultat) = Resultat(noteD + r.noteD, noteE + r.noteE, endnote + r.endnote) - - def /(cnt: Int) = Resultat(noteD / cnt, noteE / cnt, endnote / cnt) - - def *(cnt: Long) = Resultat(noteD * cnt, noteE * cnt, endnote * cnt) - - lazy val formattedD = if (noteD > 0) f"${noteD}%4.2f" else "" - lazy val formattedE = if (noteE > 0) f"${noteE}%4.2f" else "" - lazy val formattedEnd = if (endnote > 0) f"${endnote}%6.2f" else "" - - override def easyprint = f"${formattedD}%6s${formattedE}%6s${formattedEnd}%6s" - } - - case class Wertung(id: Long, athletId: Long, wettkampfdisziplinId: Long, wettkampfId: Long, wettkampfUUID: String, noteD: Option[scala.math.BigDecimal], noteE: Option[scala.math.BigDecimal], endnote: Option[scala.math.BigDecimal], riege: Option[String], riege2: Option[String]) extends DataObject { - lazy val resultat = Resultat(noteD.getOrElse(0), noteE.getOrElse(0), endnote.getOrElse(0)) - - def updatedWertung(valuesFrom: Wertung) = copy(noteD = valuesFrom.noteD, noteE = valuesFrom.noteE, endnote = valuesFrom.endnote) - - def valueAsText(valueOption: Option[BigDecimal]) = valueOption match { - case None => "" - case Some(value) => value.toString() - } - - def noteDasText = valueAsText(noteD) - - def noteEasText = valueAsText(noteE) - - def endnoteeAsText = valueAsText(endnote) - } - - case class WertungView(id: Long, athlet: AthletView, wettkampfdisziplin: WettkampfdisziplinView, wettkampf: Wettkampf, noteD: Option[scala.math.BigDecimal], noteE: Option[scala.math.BigDecimal], endnote: Option[scala.math.BigDecimal], riege: Option[String], riege2: Option[String]) extends DataObject { - lazy val resultat = Resultat(noteD.getOrElse(0), noteE.getOrElse(0), endnote.getOrElse(0)) - - def +(r: Resultat) = resultat + r - - def toWertung = Wertung(id, athlet.id, wettkampfdisziplin.id, wettkampf.id, wettkampf.uuid.getOrElse(""), noteD, noteE, endnote, riege, riege2) - - def toWertung(riege: String, riege2: Option[String]) = Wertung(id, athlet.id, wettkampfdisziplin.id, wettkampf.id, wettkampf.uuid.getOrElse(""), noteD, noteE, endnote, Some(riege), riege2) - - def updatedWertung(valuesFrom: Wertung) = copy(noteD = valuesFrom.noteD, noteE = valuesFrom.noteE, endnote = valuesFrom.endnote) - - def validatedResult(dv: Double, ev: Double) = { - val (d, e) = wettkampfdisziplin.notenSpez.validated(dv, ev, wettkampfdisziplin) - Resultat(d, e, wettkampfdisziplin.notenSpez.calcEndnote(d, e, wettkampfdisziplin)) - } - - def showInScoreList = { - (endnote.sum > 0) || (athlet.geschlecht match { - case "M" => wettkampfdisziplin.masculin > 0 - case "W" => wettkampfdisziplin.feminim > 0 - case _ => endnote.sum > 0 - }) - } - - override def easyprint = { - resultat.easyprint - } - } - - sealed trait DataRow {} - - case class LeafRow(title: String, sum: Resultat, rang: Resultat, auszeichnung: Boolean) extends DataRow - - case class GroupRow(athlet: AthletView, resultate: IndexedSeq[LeafRow], sum: Resultat, rang: Resultat, auszeichnung: Boolean) extends DataRow { - lazy val withDNotes = resultate.exists(w => w.sum.noteD > 0) - lazy val divider = if (withDNotes || resultate.isEmpty) 1 else resultate.count { r => r.sum.endnote > 0 } - } - - sealed trait NotenModus { - def selectableItems: Option[List[String]] = None - - def validated(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): (Double, Double) - - def calcEndnote(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): Double - - def toString(value: Double): String = if (value.toString == Double.NaN.toString) "" - else value - - /*override*/ def shouldSuggest(item: String, query: String): Boolean = false - } - - case class StandardWettkampf(punktgewicht: Double) extends NotenModus { - override def validated(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): (Double, Double) = { - val dnoteValidated = if (wettkampfDisziplin.isDNoteUsed) BigDecimal(dnote).setScale(wettkampfDisziplin.scale, BigDecimal.RoundingMode.FLOOR).max(wettkampfDisziplin.min).min(wettkampfDisziplin.max).toDouble else 0d - val enoteValidated = BigDecimal(enote).setScale(wettkampfDisziplin.scale, BigDecimal.RoundingMode.FLOOR).max(wettkampfDisziplin.min).min(wettkampfDisziplin.max).toDouble - (dnoteValidated, enoteValidated) - } - - override def calcEndnote(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView) = { - val dnoteValidated = if (wettkampfDisziplin.isDNoteUsed) dnote else 0d - BigDecimal(dnoteValidated + enote).setScale(wettkampfDisziplin.scale, BigDecimal.RoundingMode.FLOOR).*(punktgewicht).max(wettkampfDisziplin.min).min(wettkampfDisziplin.max).toDouble - } - } - - case class Athletiktest(punktemapping: Map[String, Double], punktgewicht: Double) extends NotenModus { - - override def validated(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): (Double, Double) = (0, enote) - - override def calcEndnote(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView) = enote * punktgewicht - - override def selectableItems: Option[List[String]] = Some(punktemapping.keys.toList.sortBy(punktemapping)) - } - - object MatchCode { - val bmenc = new BeiderMorseEncoder() - bmenc.setRuleType(RuleType.EXACT) - bmenc.setMaxPhonemes(5) - val bmenc2 = new BeiderMorseEncoder() - bmenc2.setRuleType(RuleType.EXACT) - bmenc2.setMaxPhonemes(5) - bmenc2.setNameType(NameType.SEPHARDIC) - val bmenc3 = new BeiderMorseEncoder() - bmenc3.setRuleType(RuleType.EXACT) - bmenc3.setMaxPhonemes(5) - bmenc3.setNameType(NameType.ASHKENAZI) - val colenc = new ColognePhonetic() - - def encArrToList(enc: String) = enc.split("-").flatMap(_.split("\\|")).toList - - def encode(name: String): Seq[String] = - encArrToList(bmenc.encode(name)) ++ - encArrToList(bmenc2.encode(name)) ++ - encArrToList(bmenc3.encode(name)) ++ - Seq(NameCodec.encode(name), colenc.encode(name).mkString("")) - - def similarFactor(name1: String, name2: String, threshold: Int = 80) = { - val diff = LevenshteinDistance.getDefaultInstance.apply(name1, name2) - val diffproz = 100 * diff / name1.length() - val similar = 100 - diffproz - if (similar >= threshold) { - similar - } - else { - 0 - } - } - } - - case class MatchCode(id: Long, name: String, vorname: String, gebdat: Option[java.sql.Date], verein: Long) { - - import MatchCode._ - - val jahrgang = AthletJahrgang(gebdat).jahrgang - val encodedNamen = encode(name) - val encodedVorNamen = encode(vorname) - - def swappednames = MatchCode(id, vorname, name, gebdat, verein) - } - - case class Kandidat(wettkampfTitel: String, geschlecht: String, programm: String, id: Long, - name: String, vorname: String, jahrgang: String, verein: String, einteilung: Option[Riege], einteilung2: Option[Riege], diszipline: Seq[Disziplin], diszipline2: Seq[Disziplin], wertungen: Seq[WertungView]) { - def matches(w1: Wertung, w2: WertungView): Boolean = { - w2.wettkampfdisziplin.id == w1.wettkampfdisziplinId && w2.athlet.id == w1.athletId - } - - def indexOf(wertung: Wertung): Int = wertungen.indexWhere(w => matches(wertung, w)) - - def updated(idx: Int, wertung: Wertung): Kandidat = { - if (idx > -1 && matches(wertung, wertungen(idx))) - copy(wertungen = wertungen.updated(idx, wertungen(idx).updatedWertung(wertung))) - else this - } - } - - case class GeraeteRiege(wettkampfTitel: String, wettkampfUUID: String, durchgang: Option[String], halt: Int, disziplin: Option[Disziplin], kandidaten: Seq[Kandidat], erfasst: Boolean, sequenceId: String) { - private val hash: Long = { - Seq(wettkampfUUID, - durchgang, - halt, disziplin).hashCode() - } - - def updated(wertung: Wertung): GeraeteRiege = { - kandidaten.foldLeft((false, Seq[Kandidat]()))((acc, kandidat) => { - if (acc._1) (acc._1, acc._2 :+ kandidat) else { - val idx = kandidat.indexOf(wertung) - if (idx > -1) - (true, acc._2 :+ kandidat.updated(idx, wertung)) - else (acc._1, acc._2 :+ kandidat) - } - }) match { - case (found, kandidaten) if found => copy(kandidaten = kandidaten) - case _ => this - } - } - - def caption: String = { - s"(${sequenceId}) ${durchgang.getOrElse("")}: ${disziplin.map(_.name).getOrElse("")}, ${halt + 1}. Gerät" - } - - def softEquals(other: GeraeteRiege): Boolean = { - hash == other.hash - } - } - - sealed trait SexDivideRule { - val name: String - - override def toString: String = name - } - - case object GemischteRiegen extends SexDivideRule { - override val name = "gemischte Geräteriegen" - } - - case object GemischterDurchgang extends SexDivideRule { - override val name = "gemischter Durchgang" - } - - case object GetrennteDurchgaenge extends SexDivideRule { - override val name = "getrennte Durchgänge" - } - - type OverviewStatTuple = (String, String, Int, Int, Int) - - sealed trait SyncAction { - val caption: String - val verein: Registration - } - - object PublicSyncAction { - /** - * Hides some attributes to protect privacy. - * The product is only and only used by the web-client showing sync-states with some summary-infos - * - * @param syncation - * @return transformed SyncAction toPublicView applied - */ - def apply(syncation: SyncAction): SyncAction = syncation match { - case AddVereinAction(verein) => AddVereinAction(verein.toPublicView) - case ApproveVereinAction(verein) => ApproveVereinAction(verein.toPublicView) - case RenameVereinAction(verein, oldVerein) => RenameVereinAction(verein.toPublicView, oldVerein) - case RenameAthletAction(verein, athlet, existing, expected) => RenameAthletAction(verein.toPublicView, athlet.toPublicView, existing.toPublicView, expected.toPublicView) - case AddRegistration(verein, programId, athlet, suggestion) => AddRegistration(verein.toPublicView, programId, athlet.toPublicView, suggestion.toPublicView) - case MoveRegistration(verein, fromProgramId, toProgramid, athlet, suggestion) => MoveRegistration(verein.toPublicView, fromProgramId, toProgramid, athlet.toPublicView, suggestion.toPublicView) - case RemoveRegistration(verein, programId, athlet, suggestion) => RemoveRegistration(verein.toPublicView, programId, athlet.toPublicView, suggestion.toPublicView) - } - } - - case class AddVereinAction(override val verein: Registration) extends SyncAction { - override val caption = s"Verein hinzufügen: ${verein.vereinname}" - } - - case class RenameVereinAction(override val verein: Registration, oldVerein: Verein) extends SyncAction { - override val caption = s"Verein korrigieren: ${oldVerein.easyprint} zu ${verein.toVerein.easyprint}" - - def prepareLocalUpdate: Verein = verein.toVerein.copy(id = oldVerein.id) - - def prepareRemoteUpdate: Option[Verein] = verein.selectedInitialClub.map(club => verein.toVerein.copy(id = club.id)) - } - - case class ApproveVereinAction(override val verein: Registration) extends SyncAction { - override val caption = s"Verein bestätigen: ${verein.vereinname}" - } - - case class AddRegistration(override val verein: Registration, programId: Long, athlet: Athlet, suggestion: AthletView) extends SyncAction { - override val caption = s"Neue Anmeldung verarbeiten: ${suggestion.easyprint}" - } - - case class MoveRegistration(override val verein: Registration, fromProgramId: Long, toProgramid: Long, athlet: Athlet, suggestion: AthletView) extends SyncAction { - override val caption = s"Umteilung verarbeiten: ${suggestion.easyprint}" - } - - case class RemoveRegistration(override val verein: Registration, programId: Long, athlet: Athlet, suggestion: AthletView) extends SyncAction { - override val caption = s"Abmeldung verarbeiten: ${suggestion.easyprint}" - } - - case class NewRegistration(wettkampfId: Long, vereinname: String, verband: String, respName: String, respVorname: String, mobilephone: String, mail: String, secret: String) { - def toRegistration: Registration = Registration(0, wettkampfId, None, vereinname, verband, respName, respVorname, mobilephone, mail, Timestamp.valueOf(LocalDateTime.now()).getTime) - } - - case class Registration(id: Long, wettkampfId: Long, vereinId: Option[Long], vereinname: String, verband: String, respName: String, respVorname: String, mobilephone: String, mail: String, registrationTime: Long, selectedInitialClub: Option[Verein] = None) extends DataObject { - def toVerein: Verein = Verein(0L, vereinname, Some(verband)) - - def toPublicView: Registration = Registration(id, wettkampfId, vereinId, vereinname, verband, respName, respVorname, "***", "***", registrationTime) - - def matchesVerein(v: Verein): Boolean = { - (v.name.equals(vereinname) && (v.verband.isEmpty || v.verband.get.equals(verband))) || selectedInitialClub.map(_.extendedprint).contains(v.extendedprint) - } - - def matchesClubRelation(): Boolean = { - selectedInitialClub.nonEmpty && selectedInitialClub.exists(v => (v.name.equals(vereinname) && (v.verband.isEmpty || v.verband.get.equals(verband)))) - } - } - - case class RenameAthletAction(override val verein: Registration, athletReg: AthletRegistration, existing: Athlet, expected: Athlet) extends SyncAction { - override val caption = s"Athlet/-In korrigieren: Von ${existing.extendedprint} zu ${expected.extendedprint}" - - def isSexChange: Boolean = existing.geschlecht != expected.geschlecht - - def applyLocalChange: Athlet = existing.copy( - geschlecht = expected.geschlecht, - name = expected.name, - vorname = expected.vorname, - gebdat = expected.gebdat - ) - - def applyRemoteChange: AthletView = athletReg - .toAthlet - .toAthletView(Some(verein - .toVerein - .copy(id = verein.vereinId.get))) - .copy( - id = athletReg.athletId.get, - geschlecht = expected.geschlecht, - name = expected.name, - vorname = expected.vorname, - gebdat = expected.gebdat - ) - } - - case class RegistrationResetPW(id: Long, wettkampfId: Long, secret: String) extends DataObject - - case class AthletRegistration(id: Long, vereinregistrationId: Long, - athletId: Option[Long], geschlecht: String, name: String, vorname: String, gebdat: String, - programId: Long, registrationTime: Long, athlet: Option[AthletView]) extends DataObject { - def toPublicView = AthletRegistration(id, vereinregistrationId, athletId, geschlecht, name, vorname, gebdat.substring(0, 4) + "-01-01", programId, registrationTime, athlet.map(_.toPublicView)) - - def capitalizeIfBlockCase(s: String): String = { - if (s.length > 2 && (s.toUpperCase.equals(s) || s.toLowerCase.equals(s))) { - s.substring(0, 1).toUpperCase + s.substring(1).toLowerCase - } else { - s - } - } - - def toAthlet: Athlet = { - if (id == 0 && athletId == None) { - val nameNorm = capitalizeIfBlockCase(name.trim) - val vornameNorm = capitalizeIfBlockCase(vorname.trim) - val nameMasculinTest = Surname.isMasculin(nameNorm) - val nameFeminimTest = Surname.isFeminim(nameNorm) - val vornameMasculinTest = Surname.isMasculin(vornameNorm) - val vornameFeminimTest = Surname.isFeminim(vornameNorm) - val nameVornameSwitched = (nameMasculinTest || nameFeminimTest) && !(vornameMasculinTest || vornameFeminimTest) - val defName = if (nameVornameSwitched) vornameNorm else nameNorm - val defVorName = if (nameVornameSwitched) nameNorm else vornameNorm - val feminim = nameFeminimTest || vornameFeminimTest - val masculin = nameMasculinTest || vornameMasculinTest - val defGeschlecht = geschlecht match { - case "M" => - if (feminim && !masculin) "W" else "M" - case "W" => - if (masculin && !feminim) "M" else "W" - case s: String => "M" - } - val currentDate = LocalDate.now() - val gebDatRaw = str2SQLDate(gebdat) - val gebDatLocal = gebDatRaw.toLocalDate - val age = Period.between(gebDatLocal, currentDate).getYears - if (age > 0 && age < 120) { - Athlet( - id = athletId match { - case Some(id) => id - case None => 0 - }, - js_id = "", - geschlecht = defGeschlecht, - name = defName, - vorname = defVorName, - gebdat = Some(gebDatRaw), - strasse = "", - plz = "", - ort = "", - verein = None, - activ = true - ) - } else { - throw new IllegalArgumentException(s"Geburtsdatum ergibt ein unrealistisches Alter von ${age}.") - } - } - else { - val currentDate = LocalDate.now() - val gebDatRaw = str2SQLDate(gebdat) - val gebDatLocal = gebDatRaw.toLocalDate - val age = Period.between(gebDatLocal, currentDate).getYears - if (age > 0 && age < 120) { - Athlet( - id = athletId match { - case Some(id) => id - case None => 0 - }, - js_id = "", - geschlecht = geschlecht, - name = name.trim, - vorname = vorname.trim, - gebdat = Some(gebDatRaw), - strasse = "", - plz = "", - ort = "", - verein = None, - activ = true - ) - } else { - throw new IllegalArgumentException(s"Geburtsdatum ergibt ein unrealistisches Alter von ${age}.") - } - } - } - - def isEmptyRegistration: Boolean = geschlecht.isEmpty - - def isLocalIdentified: Boolean = { - athletId match { - case Some(id) if id > 0L => true - case _ => false - } - } - - def matchesAthlet(v: Athlet): Boolean = { - val bool = toAthlet.extendedprint.equals(v.extendedprint) - /*if(!bool) { - println(s"nonmatch athlet: ${v.extendedprint}, ${toAthlet.extendedprint}") - }*/ - bool - } - - def matchesAthlet(): Boolean = { - val bool = athlet.nonEmpty && athlet.map(_.toAthlet).exists(matchesAthlet) - /*if(!bool) { - println(s"nonmatch athlet: ${athlet.nonEmpty}, ${athlet.map(_.toAthlet)}, '${athlet.map(_.toAthlet.extendedprint)}' <> '${toAthlet.extendedprint}'") - }*/ - bool - } - } - - object EmptyAthletRegistration { - def apply(vereinregistrationId: Long): AthletRegistration = AthletRegistration(0L, vereinregistrationId, None, "", "", "", "", 0L, 0L, None) - } - - case class JudgeRegistration(id: Long, vereinregistrationId: Long, - geschlecht: String, name: String, vorname: String, - mobilephone: String, mail: String, comment: String, - registrationTime: Long) extends DataObject { - def validate(): Unit = { - if (name == null || name.trim.isEmpty) throw new IllegalArgumentException("JudgeRegistration with empty name") - if (vorname == null || vorname.trim.isEmpty) throw new IllegalArgumentException("JudgeRegistration with empty vorname") - if (mobilephone == null || mobilephone.trim.isEmpty) throw new IllegalArgumentException("JudgeRegistration with empty mobilephone") - if (mail == null || mail.trim.isEmpty) throw new IllegalArgumentException("JudgeRegistration with empty mail") - } - - def normalized: JudgeRegistration = { - validate() - val nameNorm = name.trim - val vornameNorm = vorname.trim - val nameMasculinTest = Surname.isMasculin(nameNorm) - val nameFeminimTest = Surname.isFeminim(nameNorm) - val vornameMasculinTest = Surname.isMasculin(vornameNorm) - val vornameFeminimTest = Surname.isFeminim(vornameNorm) - val nameVornameSwitched = (nameMasculinTest || nameFeminimTest) && !(vornameMasculinTest || vornameFeminimTest) - val defName = if (nameVornameSwitched) vornameNorm else nameNorm - val defVorName = if (nameVornameSwitched) nameNorm else vornameNorm - val feminim = nameFeminimTest || vornameFeminimTest - val masculin = nameMasculinTest || vornameMasculinTest - val defGeschlecht = geschlecht match { - case "M" => - if (feminim && !masculin) "W" else "M" - case "W" => - if (masculin && !feminim) "M" else "W" - case s: String => "M" - } - JudgeRegistration(id, vereinregistrationId, defGeschlecht, defName, defVorName, mobilephone, mail, comment, registrationTime) - } - - def toWertungsrichter: Wertungsrichter = { - val nj = normalized - Wertungsrichter( - id = 0L, - js_id = "", - geschlecht = nj.geschlecht, - name = nj.name, - vorname = nj.vorname, - gebdat = None, - strasse = "", - plz = "", - ort = "", - verein = None, - activ = true - ) - } - - def isEmptyRegistration = geschlecht.isEmpty - } - - object EmptyJudgeRegistration { - def apply(vereinregistrationId: Long) = JudgeRegistration(0L, vereinregistrationId, "", "", "", "", "", "", 0L) - } - - case class JudgeRegistrationProgram(id: Long, judgeregistrationId: Long, vereinregistrationId: Long, program: Long, comment: String) - - case class JudgeRegistrationProgramItem(program: String, disziplin: String, disziplinId: Long) +package ch.seidel.kutu + +import ch.seidel.kutu.data.{NameCodec, Surname} +import org.apache.commons.codec.language.ColognePhonetic +import org.apache.commons.codec.language.bm._ +import org.apache.commons.text.similarity.LevenshteinDistance + +import java.io.File +import java.net.URLEncoder +import java.nio.file.{Files, LinkOption, StandardOpenOption} +import java.sql.{Date, Timestamp} +import java.text.{ParseException, SimpleDateFormat} +import java.time.{LocalDate, LocalDateTime, Period, ZoneId} +import java.util.UUID +import java.util.concurrent.TimeUnit +import scala.concurrent.duration.Duration + +package object domain { + implicit def dbl2Str(d: Double) = f"${d}%2.3f" + + implicit def str2bd(value: String): BigDecimal = { + if (value != null) { + val trimmed = value.trim() + + if (trimmed.length() < 1) { + null + } else { + BigDecimal(trimmed) + } + } else { + null + } + } + + implicit def str2dbl(value: String): Double = { + if (value != null) { + val trimmed = value.trim() + + if (trimmed.length() < 1) { + 0d + } else { + val bigd: BigDecimal = trimmed + bigd.toDouble + } + } else { + 0d + } + } + + implicit def str2Int(value: String): Int = { + if (value != null) { + val trimmed = value.trim() + + if (trimmed.length() < 1) { + 0 + } else { + Integer.valueOf(trimmed) + } + } else { + 0 + } + } + + implicit def str2Long(value: String): Long = { + if (value != null) { + val trimmed = value.trim() + + if (trimmed.length() < 1) { + 0L + } else { + java.lang.Long.valueOf(trimmed) + } + } else { + 0L + } + } + + implicit def ld2SQLDate(ld: LocalDate): java.sql.Date = { + if (ld == null) null else { + val inst = ld.atStartOfDay(ZoneId.of("UTC")) + new java.sql.Date(java.util.Date.from(inst.toInstant).getTime) + } + } + + implicit def sqlDate2ld(sd: java.sql.Date): LocalDate = { + if (sd == null) null else { + sd.toLocalDate //.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() + } + } + + def isNumeric(c: String): Boolean = { + try { + Integer.parseInt(c) + true + } catch { + case _:NumberFormatException => false + } + } + + val sdf = new SimpleDateFormat("dd.MM.yyyy") + val sdfShort = new SimpleDateFormat("dd.MM.yy") + val sdfExported = new SimpleDateFormat("yyyy-MM-dd") + val sdfYear = new SimpleDateFormat("yyyy") + + def dateToExportedStr(date: Date) = { + sdfExported.format(date) + } + + def str2SQLDate(date: String) = { + if (date == null) null else try { + new java.sql.Date(sdf.parse(date).getTime) + } + catch { + case _: ParseException => try { + new java.sql.Date(sdfExported.parse(date).getTime) + } + catch { + case _: ParseException => try { + new java.sql.Date(sdfShort.parse(date).getTime) + } catch { + case _: Exception => { + val time = try { + str2Long(date) + } catch { + case _: NumberFormatException => + sdf.parse(date.split("T")(0)).getTime() + } + new java.sql.Date(time) + } + } + } + } + } + + def toTimeFormat(millis: Long): String = if (millis <= 0) "" else f"${new java.util.Date(millis)}%tT" + + def toDurationFormat(from: Long, to: Long): String = { + val too = if (to <= 0 && from > 0) System.currentTimeMillis() else to + if (too - from <= 0) "" else { + toDurationFormat(too - from) + } + } + + def toDurationFormat(duration: Long): String = { + if (duration <= 0) "" else { + val d = Duration(duration, TimeUnit.MILLISECONDS) + List((d.toDays, "d"), (d.toHours - d.toDays * 24, "h"), (d.toMinutes - d.toHours * 60, "m"), (d.toSeconds - d.toMinutes * 60, "s")) + .filter(_._1 > 0) + .map(p => s"${p._1}${p._2}") + .mkString(", ") + } + } + + def toShortDurationFormat(duration: Long): String = { + val d = Duration(duration, TimeUnit.MILLISECONDS) + List(f"${d.toHours}%02d", f"${d.toMinutes - d.toHours * 60}%02d", f"${d.toSeconds - d.toMinutes * 60}%02d") + .mkString(":") + } + + // implicit def dateOption2AthletJahrgang(gebdat: Option[Date]) = gebdat match { + // case Some(d) => AthletJahrgang(extractYear.format(d)) + // case None => AthletJahrgang("unbekannt") + // } + + val encodeInvalidURIRegEx = "[,&.*+?/^${}()|\\[\\]\\\\]".r + + def encodeURIComponent(uri: String) = encodeInvalidURIRegEx.replaceAllIn(uri, "_") + + def encodeURIParam(uri: String) = URLEncoder.encode(uri, "UTF-8") + .replaceAll(" ", "%20") + .replaceAll("\\+", "%20") + .replaceAll("\\%21", "!") + .replaceAll("\\%27", "'") + .replaceAll("\\%28", "(") + .replaceAll("\\%29", ")") + .replaceAll("\\%7E", "~") + + def encodeFileName(name: String): String = { + val forbiddenChars = List( + '/', '<', '>', ':', '"', '|', '?', '*', ' ' + ) :+ (0 to 32) + val forbiddenNames = List( + "CON", "PRN", "AUX", "NUL", + "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", + "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9" + ) + if (forbiddenNames.contains(name.toUpperCase())) + "_" + name + "_" + else + name.map(c => if (forbiddenChars.contains(c)) '_' else c) + } + + trait DataObject extends Ordered[DataObject] { + def easyprint: String = toString + + def capsulatedprint: String = { + val ep = easyprint + if (ep.matches(".*\\s,\\.;.*")) s""""$ep"""" else ep + } + def compare(o: DataObject): Int = easyprint.compare(o.easyprint) + } + + case class NullObject(caption: String) extends DataObject { + override def easyprint = caption + } + + object RiegeRaw { + val KIND_STANDARD = 0; + val KIND_EMPTY_RIEGE = 1; + val RIEGENMODE_BY_Program = 1; + val RIEGENMODE_BY_JG = 2; + val RIEGENMODE_BY_JG_VEREIN = 3; + } + + case class RiegeRaw(wettkampfId: Long, r: String, durchgang: Option[String], start: Option[Long], kind: Int) extends DataObject { + override def easyprint = r + } + + case class Riege(r: String, durchgang: Option[String], start: Option[Disziplin], kind: Int) extends DataObject { + override def easyprint = r + + def toRaw(wettkampfId: Long) = RiegeRaw(wettkampfId, r, durchgang, start.map(_.id), kind) + } + + case class TurnerGeschlecht(geschlecht: String) extends DataObject { + override def easyprint = geschlecht.toLowerCase() match { + case "m" => "Turner" + case "w" => "Turnerinnen" + case "f" => "Turnerinnen" + case _ => "Turner" + } + } + + case class Verein(id: Long, name: String, verband: Option[String]) extends DataObject { + override def easyprint = name + + def extendedprint = s"$name ${verband.getOrElse("")}" + + override def toString = name + } + + case class Verband(name: String) extends DataObject { + override def easyprint = name + + override def toString = name + } + + object Athlet { + def apply(): Athlet = Athlet(0, 0, "", "", "", None, "", "", "", None, activ = true) + + def apply(verein: Verein): Athlet = Athlet(0, 0, "M", "", "", None, "", "", "", Some(verein.id), activ = true) + + def apply(verein: Long): Athlet = Athlet(0, 0, "M", "", "", None, "", "", "", Some(verein), activ = true) + + def mapSexPrediction(athlet: Athlet): String = Surname + .isSurname(athlet.vorname) + .map { sn => if (sn.isMasculin == sn.isFeminin) athlet.geschlecht else if (sn.isMasculin) "M" else "W" } + .getOrElse("X") + } + + case class Athlet(id: Long, js_id: Int, geschlecht: String, name: String, vorname: String, gebdat: Option[java.sql.Date], strasse: String, plz: String, ort: String, verein: Option[Long], activ: Boolean) extends DataObject { + override def easyprint: String = name + " " + vorname + " " + (gebdat match { + case Some(d) => f"$d%tY " + case _ => "" + }) + + def extendedprint: String = "" + (geschlecht match { + case "W" => s"Ti ${name + " " + vorname}" + case _ => s"Tu ${name + " " + vorname}" + }) + (gebdat match { + case Some(d) => f", $d%tF" + case _ => "" + }) + + def shortPrint: String = "" + (geschlecht match { + case "W" => s"Ti ${name + " " + vorname}" + case _ => s"Tu ${name + " " + vorname}" + }) + " " + (gebdat match { + case Some(d) => f"$d%tY " + case _ => "" + }) + + def toPublicView: Athlet = { + Athlet(id, 0, geschlecht, name, vorname, gebdat + .map(d => sqlDate2ld(d)) + .map(ld => LocalDate.of(ld.getYear, 1, 1)) + .map(ld => ld2SQLDate(ld)) + , "", "", "", verein, activ) + } + + def toAthletView(verein: Option[Verein]): AthletView = AthletView( + id, js_id, + geschlecht, name, vorname, gebdat, + strasse, plz, ort, + verein, activ) + } + + case class AthletView(id: Long, js_id: Int, geschlecht: String, name: String, vorname: String, gebdat: Option[java.sql.Date], strasse: String, plz: String, ort: String, verein: Option[Verein], activ: Boolean) extends DataObject { + override def easyprint = name + " " + vorname + " " + (gebdat match { + case Some(d) => f"$d%tY "; + case _ => " " + }) + (verein match { + case Some(v) => v.easyprint; + case _ => "" + }) + + def extendedprint: String = "" + (geschlecht match { + case "W" => s"Ti ${name + " " + vorname}" + case _ => s"Tu ${name + " " + vorname}" + }) + (gebdat match { + case Some(d) => f", $d%tF " + case _ => "" + }) + (verein match { + case Some(v) => v.easyprint; + case _ => "" + }) + + def toPublicView: AthletView = { + AthletView(id, 0, geschlecht, name, vorname, gebdat + .map(d => sqlDate2ld(d)) + .map(ld => LocalDate.of(ld.getYear, 1, 1)) + .map(ld => ld2SQLDate(ld)) + , "", "", "", verein, activ) + } + + def toAthlet = Athlet(id, js_id, geschlecht, name, vorname, gebdat, strasse, plz, ort, verein.map(_.id), activ) + + def withBestMatchingGebDat(importedGebDat: Option[Date]) = { + copy(gebdat = importedGebDat match { + case Some(d) => + gebdat match { + case Some(cd) if (cd.toLocalDate.getYear == d.toLocalDate.getYear) && f"${cd}%tF".endsWith("-01-01") => Some(d) + case _ => gebdat + } + case _ => gebdat + }) + } + + def updatedWith(athlet: Athlet) = AthletView(athlet.id, athlet.js_id, athlet.geschlecht, athlet.name, athlet.vorname, athlet.gebdat, athlet.strasse, athlet.plz, athlet.ort, verein.map(v => v.copy(id = athlet.verein.getOrElse(0L))), athlet.activ) + } + + object Wertungsrichter { + def apply(): Wertungsrichter = Wertungsrichter(0, 0, "", "", "", None, "", "", "", None, activ = true) + } + + case class Wertungsrichter(id: Long, js_id: Int, geschlecht: String, name: String, vorname: String, gebdat: Option[java.sql.Date], strasse: String, plz: String, ort: String, verein: Option[Long], activ: Boolean) extends DataObject { + override def easyprint = "Wertungsrichter " + name + } + + case class WertungsrichterView(id: Long, js_id: Int, geschlecht: String, name: String, vorname: String, gebdat: Option[java.sql.Date], strasse: String, plz: String, ort: String, verein: Option[Verein], activ: Boolean) extends DataObject { + override def easyprint = name + " " + vorname + " " + (gebdat match { + case Some(d) => f"$d%tY "; + case _ => " " + }) + (verein match { + case Some(v) => v.easyprint; + case _ => "" + }) + + def toWertungsrichter = Wertungsrichter(id, js_id, geschlecht, name, vorname, gebdat, strasse, plz, ort, verein.map(_.id), activ) + } + + object DurchgangType { + def apply(code: Int) = code match { + case 1 => Competition + case 2 => WarmUp + case 3 => AwardCeremony + case 4 => Pause + case _ => Competition // default-type + } + } + + abstract sealed trait DurchgangType { + val code: Int + + override def toString(): String = code.toString + } + + case object Competition extends DurchgangType { + override val code = 1 + } + + case object WarmUp extends DurchgangType { + override val code = 2 + } + + case object AwardCeremony extends DurchgangType { + override val code = 3 + } + + case object Pause extends DurchgangType { + override val code = 4 + } + + object Durchgang { + def apply(): Durchgang = Durchgang(0, "nicht zugewiesen") + + def apply(wettkampfId: Long, name: String): Durchgang = Durchgang(0, wettkampfId, name, name, Competition, 50, 0, None, None, 0, 0, 0) + + def apply(id: Long, wettkampfId: Long, title: String, name: String, durchgangtype: DurchgangType, ordinal: Int, planStartOffset: Long, effectiveStartTime: Option[java.sql.Timestamp], effectiveEndTime: Option[java.sql.Timestamp]): Durchgang = + Durchgang(id, wettkampfId, title, name, durchgangtype, ordinal, planStartOffset, effectiveStartTime, effectiveEndTime, 0, 0, 0) + } + + case class Durchgang(id: Long, wettkampfId: Long, title: String, name: String, durchgangtype: DurchgangType, ordinal: Int, planStartOffset: Long, effectiveStartTime: Option[java.sql.Timestamp], effectiveEndTime: Option[java.sql.Timestamp], planEinturnen: Long, planGeraet: Long, planTotal: Long) extends DataObject { + override def easyprint = name + + def toAggregator(other: Durchgang) = Durchgang(0, wettkampfId, title, title, durchgangtype, Math.min(ordinal, other.ordinal), Math.min(planStartOffset, planStartOffset), effectiveStartTime, effectiveEndTime, Math.max(planEinturnen, other.planEinturnen), Math.max(planGeraet, other.planGeraet), Math.max(planTotal, other.planTotal)) + } + + case class Durchgangstation(wettkampfId: Long, durchgang: String, d_Wertungsrichter1: Option[Long], e_Wertungsrichter1: Option[Long], d_Wertungsrichter2: Option[Long], e_Wertungsrichter2: Option[Long], geraet: Disziplin) extends DataObject { + override def easyprint = toString + } + + case class DurchgangstationView(wettkampfId: Long, durchgang: String, d_Wertungsrichter1: Option[WertungsrichterView], e_Wertungsrichter1: Option[WertungsrichterView], d_Wertungsrichter2: Option[WertungsrichterView], e_Wertungsrichter2: Option[WertungsrichterView], geraet: Disziplin) extends DataObject { + override def easyprint = toString + + def toDurchgangstation = Durchgangstation(wettkampfId, durchgang, d_Wertungsrichter1.map(_.id), e_Wertungsrichter1.map(_.id), d_Wertungsrichter2.map(_.id), e_Wertungsrichter2.map(_.id), geraet) + } + + object AthletJahrgang { + def apply(gebdat: Option[java.sql.Date]): AthletJahrgang = gebdat match { + case Some(d) => AthletJahrgang(f"$d%tY") + case None => AthletJahrgang("unbekannt") + } + } + + case class AthletJahrgang(jahrgang: String) extends DataObject { + override def easyprint = "Jahrgang " + jahrgang + } + + object Leistungsklasse { + // https://www.dtb.de/fileadmin/user_upload/dtb.de/Sportarten/Ger%C3%A4tturnen/PDFs/2022/01_DTB-Arbeitshilfe_Gtw_KuerMod_2022_V1.pdf + val dtb = Seq( + "Kür", "LK1", "LK2", "LK3", "LK4" + ) + } + object Altersklasse { + + // file:///C:/Users/Roland/Downloads/Turn10-2018_Allgemeine%20Bestimmungen.pdf + val akExpressionTurn10 = "AK7-18,AK24,AK30-100/5" + val altersklassenTurn10 = Seq( + 6,7,8,9,10,11,12,13,14,15,16,17,18,24,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 + ).map(i => ("AK", Seq(), i)) + // see https://www.dtb.de/fileadmin/user_upload/dtb.de/Passwesen/Wettkampfordnung_DTB_2021.pdf + val akDTBExpression = "AK6,AK18,AK22,AK25" + val altersklassenDTB = Seq( + 6,18,22,25 + ).map(i => ("AK", Seq(), i)) + // see https://www.dtb.de/fileadmin/user_upload/dtb.de/TURNEN/Standards/PDFs/Rahmentrainingskonzeption-GTm_inklAnlagen_19.11.2020.pdf + val akDTBPflichtExpression = "AK8-9,AK11-19/2" + val altersklassenDTBPflicht = Seq( + 7,8,9,11,13,15,17,19 + ).map(i => ("AK", Seq(), i)) + val akDTBKuerExpression = "AK13-19/2" + val altersklassenDTBKuer = Seq( + 12,13,15,17,19 + ).map(i => ("AK", Seq(), i)) + + val predefinedAKs = Map( + ("Ohne" -> "") + , ("Turn10®" -> akExpressionTurn10) + , ("DTB" -> akDTBExpression) + , ("DTB Pflicht" -> akDTBPflichtExpression) + , ("DTB Kür" -> akDTBKuerExpression) + , ("Individuell" -> "") + ) + def apply(altersgrenzen: Seq[(String, Seq[String], Int)]): Seq[Altersklasse] = { + if (altersgrenzen.isEmpty) { + Seq.empty + } else { + altersgrenzen + .groupBy(ag => (ag._1, ag._2)) // ag-name + qualifiers + .map { aggr => + aggr._1 -> aggr._2 + .sortBy(ag => ag._3) + .distinctBy(_._3) + .foldLeft(Seq[Altersklasse]()) { (acc, ag) => + acc :+ Altersklasse(ag._1, acc.lastOption.map(_.alterBis + 1).getOrElse(0), ag._3 - 1, ag._2) + }.appended(Altersklasse(aggr._2.last._1, aggr._2.last._3, 0, aggr._2.last._2)) + } + .flatMap(_._2) + .toSeq + } + } + + def apply(klassen: Seq[Altersklasse], alter: Int, geschlecht: String, programm: ProgrammView): Altersklasse = { + klassen + .find(klasse => klasse.matchesAlter(alter) && klasse.matchesGeschlecht(geschlecht) && klasse.matchesProgramm(programm)) + .getOrElse(Altersklasse(klassen.head.bezeichnung, alter, alter, Seq(geschlecht, programm.name))) + } + + def parseGrenzen(klassenDef: String, fallbackBezeichnung: String = "Altersklasse"): Seq[(String, Seq[String], Int)] = { + /* + AKWBS(W+BS)7,8,9,10,12,16,AKMBS(M+BS)8,10,15 + + */ + val rangeStepPattern = "([\\D\\s]*)([0-9]+)-([0-9]+)/([0-9]+)".r + val rangepattern = "([\\D\\s]*)([0-9]+)-([0-9]+)".r + val intpattern = "([\\D\\s]*)([0-9]+)".r + val qualifierPattern = "(.*)\\(([\\D\\s]+)\\)".r + + def bez(b: String): (String,Seq[String]) = if(b.nonEmpty) { + b match { + case qualifierPattern(bezeichnung, qualifiers) => (bezeichnung, qualifiers.split("\\+").toSeq) + case bezeichnung: String => (bezeichnung, Seq()) + } + } else ("", Seq()) + + klassenDef.split(",") + .flatMap{ + case rangeStepPattern(bezeichnung, von, bis, stepsize) => Range.inclusive(von, bis, stepsize).map(i => (bez(bezeichnung), i)) + case rangepattern(bezeichnung, von, bis) => (str2Int(von) to str2Int(bis)).map(i => (bez(bezeichnung), i)) + case intpattern(bezeichnung, von) => Seq((bez(bezeichnung), str2Int(von))) + case _ => Seq.empty + }.toList + .foldLeft(Seq[(String, Seq[String], Int)]()){(acc, item) => + if (item._1._1.nonEmpty) { + acc :+ (item._1._1, item._1._2, item._2) + } else if (acc.nonEmpty) { + acc :+ (acc.last._1, acc.last._2, item._2) + } else { + acc :+ (fallbackBezeichnung, Seq(), item._2) + } + } + .sortBy(item => (item._1, item._3)) + } + def apply(klassenDef: String, fallbackBezeichnung: String = "Altersklasse"): Seq[Altersklasse] = { + apply(parseGrenzen(klassenDef, fallbackBezeichnung)) + } + } + + case class Altersklasse(bezeichnung: String, alterVon: Int, alterBis: Int, qualifiers: Seq[String]) extends DataObject { + val geschlechtQualifier = qualifiers.filter(q => Seq("M", "W").contains(q)) + val programmQualifier = qualifiers.filter(q => !Seq("M", "W").contains(q)) + def matchesAlter(alter: Int): Boolean = + ((alterVon == 0 || alter >= alterVon) && + (alterBis == 0 || alter <= alterBis)) + def matchesGeschlecht(geschlecht: String): Boolean = { + geschlechtQualifier.isEmpty || geschlechtQualifier.contains(geschlecht) + } + def matchesProgramm(programm: ProgrammView): Boolean = { + programmQualifier.isEmpty || programm.programPath.exists(p => programmQualifier.contains(p.name)) + } + override def easyprint: String = { + val q = if (qualifiers.nonEmpty) qualifiers.mkString("(", ",", ")") else "" + if (alterVon > 0 && alterBis > 0) + if (alterVon == alterBis) + s"""$bezeichnung$q $alterVon""" + else s"""$bezeichnung$q $alterVon bis $alterBis""" + else if (alterVon > 0 && alterBis == 0) + s"""$bezeichnung$q ab $alterVon""" + else + s"""$bezeichnung$q bis $alterBis""" + } + def easyprintShort: String = { + if (alterVon > 0 && alterBis > 0) + if (alterVon == alterBis) + s"""$bezeichnung$alterVon""" + else s"""$bezeichnung$alterVon-$alterBis""" + else if (alterVon > 0 && alterBis == 0) + s"""$bezeichnung$alterVon-""" + else + s"""$bezeichnung-$alterBis""" + } + + override def compare(x: DataObject): Int = x match { + case ak: Altersklasse => alterVon.compareTo(ak.alterVon) + case _ => x.easyprint.compareTo(easyprint) + } + } + + case class WettkampfJahr(wettkampfjahr: String) extends DataObject { + override def easyprint = "Wettkampf-Jahr " + wettkampfjahr + } + + case class Disziplin(id: Long, name: String) extends DataObject { + override def easyprint = name + } + + trait Programm extends DataObject { + override def easyprint = name + + val id: Long + val name: String + val aggregate: Int + val ord: Int + val alterVon: Int + val alterBis: Int + val riegenmode: Int + val uuid: String + + def withParent(parent: ProgrammView) = { + ProgrammView(id, name, aggregate, Some(parent), ord, alterVon, alterBis, uuid, riegenmode) + } + + def toView = { + ProgrammView(id, name, aggregate, None, ord, alterVon, alterBis, uuid, riegenmode) + } + } + + /** + * + * Krits +-------------------------------------------+--------------------------------------------------------- + * aggregate ->|0 |1 + * +-------------------------------------------+--------------------------------------------------------- + * riegenmode->|1 |2 / 3(+verein) |1 |2 / 3(+verein) + * Acts +===========================================+========================================================= + * Einteilung->| Sex,Pgm,Verein | Sex,Pgm,Jg(,Verein) | Sex,Pgm,Verein | Pgm,Sex,Jg(,Verein) + * +--------------------+----------------------+----------------------+---------------------------------- + * Teilnahme | 1/WK | 1/WK | <=PgmCnt(Jg)/WK | 1/Pgm + * +-------------------------------------------+--------------------------------------------------------- + * Registration| 1/WK | 1/WK, Pgm/(Jg) | mind. 1, max 1/Pgm | 1/WK aut. Tn 1/Pgm + * +-------------------------------------------+--------------------------------------------------------- + * Beispiele | GeTu/KuTu/KuTuRi | Turn10® (BS/OS) | TG Allgäu (Pfl./Kür) | ATT (Kraft/Bewg) + * +-------------------------------------------+--------------------------------------------------------- + * Rangliste | Sex/Programm | Sex/Programm/Jg | Sex/Programm | Sex/Programm/Jg + * | | Sex/Programm/AK | Sex/Programm/AK | + * +-------------------------------------------+--------------------------------------------------------- + */ + case class ProgrammRaw(id: Long, name: String, aggregate: Int, parentId: Long, ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode: Int) extends Programm + + case class ProgrammView(id: Long, name: String, aggregate: Int, parent: Option[ProgrammView], ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode: Int) extends Programm { + //override def easyprint = toPath + + def head: ProgrammView = parent match { + case None => this + case Some(p) => p.head + } + + def subHead: Option[ProgrammView] = parent match { + case None => None + case Some(p) => if (p.parent.nonEmpty) p.subHead else parent + } + + def programPath: Seq[ProgrammView] = parent match { + case None => Seq(this) + case Some(p) => p.programPath :+ this + } + + def wettkampfprogramm: ProgrammView = if (aggregator == this) this else aggregatorSubHead + + def aggregatorHead: ProgrammView = parent match { + case Some(p) if (p.aggregate != 0) => p.aggregatorHead + case _ => this + } + + def groupedHead: ProgrammView = parent match { + case Some(p) if (p.parent.nonEmpty && aggregate != 0) => p + case _ => aggregatorHead + } + + def aggregatorParent: ProgrammView = parent match { + case Some(p) if (aggregate != 0) => p.parent.getOrElse(this) + case _ => this + } + + def aggregator: ProgrammView = parent match { + case Some(p) if (aggregate != 0) => p + case _ => this + } + + def aggregatorSubHead: ProgrammView = parent match { + case Some(p) if (aggregate != 0 && p.aggregate != 0) => p.aggregatorSubHead + case Some(p) if (aggregate != 0 && p.aggregate == 0) => this + case _ => this + } + + def sameOrigin(other: ProgrammView) = head.equals(other.head) + + def toPath: String = parent match { + case None => this.name + case Some(p) => p.toPath + " / " + name + } + + override def compare(o: DataObject): Int = o match { + case p: ProgrammView => toPath.compareTo(p.toPath) + case _ => easyprint.compareTo(o.easyprint) + } + + override def toString = s"$toPath" + } + + // object Wettkampf { + // def apply(id: Long, datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal): Wettkampf = + // Wettkampf(id, datum, titel, programmId, auszeichnung, auszeichnungendnote, if(id == 0) Some(UUID.randomUUID().toString()) else None) + // def apply(id: Long, datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuid: String): Wettkampf = + // if(uuid != null) Wettkampf(id, datum, titel, programmId, auszeichnung, auszeichnungendnote, Some(uuid)) + // else apply(id, datum, titel, programmId, auszeichnung, auszeichnungendnote) + // } + case class Wettkampf(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: String, jahrgangsklassen: String) extends DataObject { + + override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY" + + def toView(programm: ProgrammView): WettkampfView = { + WettkampfView(id, uuid, datum, titel, programm, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen, jahrgangsklassen) + } + + def toPublic: Wettkampf = Wettkampf(id, uuid, datum, titel, programmId, auszeichnung, auszeichnung, "", altersklassen, jahrgangsklassen) + + private def prepareFilePath(homedir: String) = { + val filename: String = encodeFileName(easyprint) + + val dir = new File(homedir + "/" + filename) + if (!dir.exists) { + dir.mkdirs + } + dir + } + + def filePath(homedir: String, origin: String) = new java.io.File(prepareFilePath(homedir), ".at." + origin).toPath + + def fromOriginFilePath(homedir: String, origin: String) = new java.io.File(prepareFilePath(homedir), ".from." + origin).toPath + + def saveRemoteOrigin(homedir: String, origin: String): Unit = { + val path = fromOriginFilePath(homedir, origin) + val fos = Files.newOutputStream(path, StandardOpenOption.CREATE_NEW) + try { + fos.write(uuid.toString.getBytes("utf-8")) + fos.flush + } finally { + fos.close + } + val os = System.getProperty("os.name").toLowerCase + if (os.indexOf("win") > -1) { + Files.setAttribute(path, "dos:hidden", true, LinkOption.NOFOLLOW_LINKS) + } + } + + def hasRemote(homedir: String, origin: String): Boolean = { + val path = fromOriginFilePath(homedir, origin) + path.toFile.exists + } + + def removeRemote(homedir: String, origin: String): Unit = { + val atFile = fromOriginFilePath(homedir, origin).toFile + if (atFile.exists) { + atFile.delete() + } + } + + def saveSecret(homedir: String, origin: String, secret: String): Unit = { + val path = filePath(homedir, origin) + val fos = Files.newOutputStream(path, StandardOpenOption.CREATE) + try { + fos.write(secret.getBytes("utf-8")) + fos.flush() + } finally { + fos.close() + } + val os = System.getProperty("os.name").toLowerCase + if (os.indexOf("win") > -1) { + Files.setAttribute(path, "dos:hidden", true, LinkOption.NOFOLLOW_LINKS) + } + } + + def readSecret(homedir: String, origin: String): Option[String] = { + val path = filePath(homedir, origin) + if (path.toFile.exists) { + Some(new String(Files.readAllBytes(path), "utf-8")) + } + else { + None + } + } + + def removeSecret(homedir: String, origin: String): Unit = { + val atFile = filePath(homedir, origin).toFile + if (atFile.exists) { + atFile.delete() + } + } + + def hasSecred(homedir: String, origin: String): Boolean = readSecret(homedir, origin) match { + case Some(_) => true + case None => false + } + + def isReadonly(homedir: String, origin: String): Boolean = !hasSecred(homedir, origin) && hasRemote(homedir, origin) + } + + // object WettkampfView { + // def apply(id: Long, datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal): WettkampfView = + // WettkampfView(id, datum, titel, programm, auszeichnung, auszeichnungendnote, if(id == 0) Some(UUID.randomUUID().toString()) else None) + // def apply(id: Long, datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuid: String): WettkampfView = + // if(uuid != null) WettkampfView(id, datum, titel, programm, auszeichnung, auszeichnungendnote, Some(uuid)) + // else apply(id, datum, titel, programm, auszeichnung, auszeichnungendnote) + // } + case class WettkampfView(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: String, jahrgangsklassen: String) extends DataObject { + override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY" + + def toWettkampf = Wettkampf(id, uuid, datum, titel, programm.id, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen, jahrgangsklassen) + } + + case class PublishedScoreRaw(id: String, title: String, query: String, published: Boolean, publishedDate: java.sql.Date, wettkampfId: Long) extends DataObject { + override def easyprint = f"PublishedScore($title)" + } + + object PublishedScoreRaw { + def apply(title: String, query: String, published: Boolean, publishedDate: java.sql.Date, wettkampfId: Long): PublishedScoreRaw = + PublishedScoreRaw(UUID.randomUUID().toString, title, query, published, publishedDate, wettkampfId) + } + + case class PublishedScoreView(id: String, title: String, query: String, published: Boolean, publishedDate: java.sql.Date, wettkampf: Wettkampf) extends DataObject { + override def easyprint = f"PublishedScore($title - ${wettkampf.easyprint})" + + def isAlphanumericOrdered = query.contains("&alphanumeric") + + def toRaw = PublishedScoreRaw(id, title, query, published, publishedDate, wettkampf.id) + } + + case class Wettkampfdisziplin(id: Long, programmId: Long, disziplinId: Long, kurzbeschreibung: String, detailbeschreibung: Option[Array[Byte]], notenfaktor: scala.math.BigDecimal, masculin: Int, feminim: Int, ord: Int, scale: Int, dnote: Int, min: Int, max: Int, startgeraet: Int) extends DataObject { + override def easyprint = f"$disziplinId%02d: $kurzbeschreibung" + } + + case class WettkampfdisziplinView(id: Long, programm: ProgrammView, disziplin: Disziplin, kurzbeschreibung: String, detailbeschreibung: Option[Array[Byte]], notenSpez: NotenModus, masculin: Int, feminim: Int, ord: Int, scale: Int, dnote: Int, min: Int, max: Int, startgeraet: Int) extends DataObject { + override def easyprint = disziplin.name + + val isDNoteUsed = dnote != 0 + + def verifiedAndCalculatedWertung(wertung: Wertung): Wertung = { + if (wertung.noteE.isEmpty) { + wertung.copy(noteD = None, noteE = None, endnote = None) + } else { + val (d, e) = notenSpez.validated(wertung.noteD.getOrElse(BigDecimal(0)).doubleValue, wertung.noteE.getOrElse(BigDecimal(0)).doubleValue, this) + wertung.copy(noteD = Some(d), noteE = Some(e), endnote = Some(notenSpez.calcEndnote(d, e, this))) + } + } + + def toWettkampdisziplin = Wettkampfdisziplin(id, programm.id, disziplin.id, kurzbeschreibung, None, notenSpez.calcEndnote(0, 1, this), masculin, feminim, ord, scale, dnote, min, max, startgeraet) + } + + case class WettkampfPlanTimeRaw(id: Long, wettkampfId: Long, wettkampfDisziplinId: Long, wechsel: Long, einturnen: Long, uebung: Long, wertung: Long) extends DataObject { + override def easyprint = f"WettkampfPlanTime(disz=$wettkampfDisziplinId, w=$wechsel, e=$einturnen, u=$uebung, w=$wertung)" + } + + case class WettkampfPlanTimeView(id: Long, wettkampf: Wettkampf, wettkampfdisziplin: WettkampfdisziplinView, wechsel: Long, einturnen: Long, uebung: Long, wertung: Long) extends DataObject { + override def easyprint = f"WettkampfPlanTime(wk=$wettkampf, disz=$wettkampfdisziplin, w=$wechsel, e=$einturnen, u=$uebung, w=$wertung)" + + def toWettkampfPlanTimeRaw = WettkampfPlanTimeRaw(id, wettkampf.id, wettkampfdisziplin.id, wechsel, einturnen, uebung, wertung) + } + + case class Resultat(noteD: scala.math.BigDecimal, noteE: scala.math.BigDecimal, endnote: scala.math.BigDecimal) extends DataObject { + def +(r: Resultat) = Resultat(noteD + r.noteD, noteE + r.noteE, endnote + r.endnote) + + def /(cnt: Int) = Resultat(noteD / cnt, noteE / cnt, endnote / cnt) + + def *(cnt: Long) = Resultat(noteD * cnt, noteE * cnt, endnote * cnt) + + lazy val formattedD = if (noteD > 0) f"${noteD}%4.2f" else "" + lazy val formattedE = if (noteE > 0) f"${noteE}%4.2f" else "" + lazy val formattedEnd = if (endnote > 0) f"${endnote}%6.2f" else "" + + override def easyprint = f"${formattedD}%6s${formattedE}%6s${formattedEnd}%6s" + } + + case class Wertung(id: Long, athletId: Long, wettkampfdisziplinId: Long, wettkampfId: Long, wettkampfUUID: String, noteD: Option[scala.math.BigDecimal], noteE: Option[scala.math.BigDecimal], endnote: Option[scala.math.BigDecimal], riege: Option[String], riege2: Option[String]) extends DataObject { + lazy val resultat = Resultat(noteD.getOrElse(0), noteE.getOrElse(0), endnote.getOrElse(0)) + + def updatedWertung(valuesFrom: Wertung) = copy(noteD = valuesFrom.noteD, noteE = valuesFrom.noteE, endnote = valuesFrom.endnote) + + def valueAsText(valueOption: Option[BigDecimal]) = valueOption match { + case None => "" + case Some(value) => value.toString() + } + + def noteDasText = valueAsText(noteD) + + def noteEasText = valueAsText(noteE) + + def endnoteeAsText = valueAsText(endnote) + } + + case class WertungView(id: Long, athlet: AthletView, wettkampfdisziplin: WettkampfdisziplinView, wettkampf: Wettkampf, noteD: Option[scala.math.BigDecimal], noteE: Option[scala.math.BigDecimal], endnote: Option[scala.math.BigDecimal], riege: Option[String], riege2: Option[String]) extends DataObject { + lazy val resultat = Resultat(noteD.getOrElse(0), noteE.getOrElse(0), endnote.getOrElse(0)) + + def +(r: Resultat) = resultat + r + + def toWertung = Wertung(id, athlet.id, wettkampfdisziplin.id, wettkampf.id, wettkampf.uuid.getOrElse(""), noteD, noteE, endnote, riege, riege2) + + def toWertung(riege: String, riege2: Option[String]) = Wertung(id, athlet.id, wettkampfdisziplin.id, wettkampf.id, wettkampf.uuid.getOrElse(""), noteD, noteE, endnote, Some(riege), riege2) + + def updatedWertung(valuesFrom: Wertung) = copy(noteD = valuesFrom.noteD, noteE = valuesFrom.noteE, endnote = valuesFrom.endnote) + + def validatedResult(dv: Double, ev: Double) = { + val (d, e) = wettkampfdisziplin.notenSpez.validated(dv, ev, wettkampfdisziplin) + Resultat(d, e, wettkampfdisziplin.notenSpez.calcEndnote(d, e, wettkampfdisziplin)) + } + + def showInScoreList = { + (endnote.sum > 0) || (athlet.geschlecht match { + case "M" => wettkampfdisziplin.masculin > 0 + case "W" => wettkampfdisziplin.feminim > 0 + case _ => endnote.sum > 0 + }) + } + + override def easyprint = { + resultat.easyprint + } + } + + sealed trait DataRow {} + + case class LeafRow(title: String, sum: Resultat, rang: Resultat, auszeichnung: Boolean) extends DataRow + + case class GroupRow(athlet: AthletView, resultate: IndexedSeq[LeafRow], sum: Resultat, rang: Resultat, auszeichnung: Boolean) extends DataRow { + lazy val withDNotes = resultate.exists(w => w.sum.noteD > 0) + lazy val divider = if (withDNotes || resultate.isEmpty) 1 else resultate.count { r => r.sum.endnote > 0 } + } + + sealed trait NotenModus { + def selectableItems: Option[List[String]] = None + + def validated(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): (Double, Double) + + def calcEndnote(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): Double + + def toString(value: Double): String = if (value.toString == Double.NaN.toString) "" + else value + + /*override*/ def shouldSuggest(item: String, query: String): Boolean = false + } + + case class StandardWettkampf(punktgewicht: Double) extends NotenModus { + override def validated(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): (Double, Double) = { + val dnoteValidated = if (wettkampfDisziplin.isDNoteUsed) BigDecimal(dnote).setScale(wettkampfDisziplin.scale, BigDecimal.RoundingMode.FLOOR).max(wettkampfDisziplin.min).min(wettkampfDisziplin.max).toDouble else 0d + val enoteValidated = BigDecimal(enote).setScale(wettkampfDisziplin.scale, BigDecimal.RoundingMode.FLOOR).max(wettkampfDisziplin.min).min(wettkampfDisziplin.max).toDouble + (dnoteValidated, enoteValidated) + } + + override def calcEndnote(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView) = { + val dnoteValidated = if (wettkampfDisziplin.isDNoteUsed) dnote else 0d + BigDecimal(dnoteValidated + enote).setScale(wettkampfDisziplin.scale, BigDecimal.RoundingMode.FLOOR).*(punktgewicht).max(wettkampfDisziplin.min).min(wettkampfDisziplin.max).toDouble + } + } + + case class Athletiktest(punktemapping: Map[String, Double], punktgewicht: Double) extends NotenModus { + + override def validated(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView): (Double, Double) = (0, enote) + + override def calcEndnote(dnote: Double, enote: Double, wettkampfDisziplin: WettkampfdisziplinView) = enote * punktgewicht + + override def selectableItems: Option[List[String]] = Some(punktemapping.keys.toList.sortBy(punktemapping)) + } + + object MatchCode { + val bmenc = new BeiderMorseEncoder() + bmenc.setRuleType(RuleType.EXACT) + bmenc.setMaxPhonemes(5) + val bmenc2 = new BeiderMorseEncoder() + bmenc2.setRuleType(RuleType.EXACT) + bmenc2.setMaxPhonemes(5) + bmenc2.setNameType(NameType.SEPHARDIC) + val bmenc3 = new BeiderMorseEncoder() + bmenc3.setRuleType(RuleType.EXACT) + bmenc3.setMaxPhonemes(5) + bmenc3.setNameType(NameType.ASHKENAZI) + val colenc = new ColognePhonetic() + + def encArrToList(enc: String) = enc.split("-").flatMap(_.split("\\|")).toList + + def encode(name: String): Seq[String] = + encArrToList(bmenc.encode(name)) ++ + encArrToList(bmenc2.encode(name)) ++ + encArrToList(bmenc3.encode(name)) ++ + Seq(NameCodec.encode(name), colenc.encode(name).mkString("")) + + def similarFactor(name1: String, name2: String, threshold: Int = 80) = { + val diff = LevenshteinDistance.getDefaultInstance.apply(name1, name2) + val diffproz = 100 * diff / name1.length() + val similar = 100 - diffproz + if (similar >= threshold) { + similar + } + else { + 0 + } + } + } + + case class MatchCode(id: Long, name: String, vorname: String, gebdat: Option[java.sql.Date], verein: Long) { + + import MatchCode._ + + val jahrgang = AthletJahrgang(gebdat).jahrgang + val encodedNamen = encode(name) + val encodedVorNamen = encode(vorname) + + def swappednames = MatchCode(id, vorname, name, gebdat, verein) + } + + case class Kandidat(wettkampfTitel: String, geschlecht: String, programm: String, id: Long, + name: String, vorname: String, jahrgang: String, verein: String, einteilung: Option[Riege], einteilung2: Option[Riege], diszipline: Seq[Disziplin], diszipline2: Seq[Disziplin], wertungen: Seq[WertungView]) { + def matches(w1: Wertung, w2: WertungView): Boolean = { + w2.wettkampfdisziplin.id == w1.wettkampfdisziplinId && w2.athlet.id == w1.athletId + } + + def indexOf(wertung: Wertung): Int = wertungen.indexWhere(w => matches(wertung, w)) + + def updated(idx: Int, wertung: Wertung): Kandidat = { + if (idx > -1 && matches(wertung, wertungen(idx))) + copy(wertungen = wertungen.updated(idx, wertungen(idx).updatedWertung(wertung))) + else this + } + } + + case class GeraeteRiege(wettkampfTitel: String, wettkampfUUID: String, durchgang: Option[String], halt: Int, disziplin: Option[Disziplin], kandidaten: Seq[Kandidat], erfasst: Boolean, sequenceId: String) { + private val hash: Long = { + Seq(wettkampfUUID, + durchgang, + halt, disziplin).hashCode() + } + + def updated(wertung: Wertung): GeraeteRiege = { + kandidaten.foldLeft((false, Seq[Kandidat]()))((acc, kandidat) => { + if (acc._1) (acc._1, acc._2 :+ kandidat) else { + val idx = kandidat.indexOf(wertung) + if (idx > -1) + (true, acc._2 :+ kandidat.updated(idx, wertung)) + else (acc._1, acc._2 :+ kandidat) + } + }) match { + case (found, kandidaten) if found => copy(kandidaten = kandidaten) + case _ => this + } + } + + def caption: String = { + s"(${sequenceId}) ${durchgang.getOrElse("")}: ${disziplin.map(_.name).getOrElse("")}, ${halt + 1}. Gerät" + } + + def softEquals(other: GeraeteRiege): Boolean = { + hash == other.hash + } + } + + sealed trait SexDivideRule { + val name: String + + override def toString: String = name + } + + case object GemischteRiegen extends SexDivideRule { + override val name = "gemischte Geräteriegen" + } + + case object GemischterDurchgang extends SexDivideRule { + override val name = "gemischter Durchgang" + } + + case object GetrennteDurchgaenge extends SexDivideRule { + override val name = "getrennte Durchgänge" + } + + type OverviewStatTuple = (String, String, Int, Int, Int) + + sealed trait SyncAction { + val caption: String + val verein: Registration + } + + object PublicSyncAction { + /** + * Hides some attributes to protect privacy. + * The product is only and only used by the web-client showing sync-states with some summary-infos + * + * @param syncation + * @return transformed SyncAction toPublicView applied + */ + def apply(syncation: SyncAction): SyncAction = syncation match { + case AddVereinAction(verein) => AddVereinAction(verein.toPublicView) + case ApproveVereinAction(verein) => ApproveVereinAction(verein.toPublicView) + case RenameVereinAction(verein, oldVerein) => RenameVereinAction(verein.toPublicView, oldVerein) + case RenameAthletAction(verein, athlet, existing, expected) => RenameAthletAction(verein.toPublicView, athlet.toPublicView, existing.toPublicView, expected.toPublicView) + case AddRegistration(verein, programId, athlet, suggestion) => AddRegistration(verein.toPublicView, programId, athlet.toPublicView, suggestion.toPublicView) + case MoveRegistration(verein, fromProgramId, toProgramid, athlet, suggestion) => MoveRegistration(verein.toPublicView, fromProgramId, toProgramid, athlet.toPublicView, suggestion.toPublicView) + case RemoveRegistration(verein, programId, athlet, suggestion) => RemoveRegistration(verein.toPublicView, programId, athlet.toPublicView, suggestion.toPublicView) + } + } + + case class AddVereinAction(override val verein: Registration) extends SyncAction { + override val caption = s"Verein hinzufügen: ${verein.vereinname}" + } + + case class RenameVereinAction(override val verein: Registration, oldVerein: Verein) extends SyncAction { + override val caption = s"Verein korrigieren: ${oldVerein.easyprint} zu ${verein.toVerein.easyprint}" + + def prepareLocalUpdate: Verein = verein.toVerein.copy(id = oldVerein.id) + + def prepareRemoteUpdate: Option[Verein] = verein.selectedInitialClub.map(club => verein.toVerein.copy(id = club.id)) + } + + case class ApproveVereinAction(override val verein: Registration) extends SyncAction { + override val caption = s"Verein bestätigen: ${verein.vereinname}" + } + + case class AddRegistration(override val verein: Registration, programId: Long, athlet: Athlet, suggestion: AthletView) extends SyncAction { + override val caption = s"Neue Anmeldung verarbeiten: ${suggestion.easyprint}" + } + + case class MoveRegistration(override val verein: Registration, fromProgramId: Long, toProgramid: Long, athlet: Athlet, suggestion: AthletView) extends SyncAction { + override val caption = s"Umteilung verarbeiten: ${suggestion.easyprint}" + } + + case class RemoveRegistration(override val verein: Registration, programId: Long, athlet: Athlet, suggestion: AthletView) extends SyncAction { + override val caption = s"Abmeldung verarbeiten: ${suggestion.easyprint}" + } + + case class NewRegistration(wettkampfId: Long, vereinname: String, verband: String, respName: String, respVorname: String, mobilephone: String, mail: String, secret: String) { + def toRegistration: Registration = Registration(0, wettkampfId, None, vereinname, verband, respName, respVorname, mobilephone, mail, Timestamp.valueOf(LocalDateTime.now()).getTime) + } + + case class Registration(id: Long, wettkampfId: Long, vereinId: Option[Long], vereinname: String, verband: String, respName: String, respVorname: String, mobilephone: String, mail: String, registrationTime: Long, selectedInitialClub: Option[Verein] = None) extends DataObject { + def toVerein: Verein = Verein(0L, vereinname, Some(verband)) + + def toPublicView: Registration = Registration(id, wettkampfId, vereinId, vereinname, verband, respName, respVorname, "***", "***", registrationTime) + + def matchesVerein(v: Verein): Boolean = { + (v.name.equals(vereinname) && (v.verband.isEmpty || v.verband.get.equals(verband))) || selectedInitialClub.map(_.extendedprint).contains(v.extendedprint) + } + + def matchesClubRelation(): Boolean = { + selectedInitialClub.nonEmpty && selectedInitialClub.exists(v => (v.name.equals(vereinname) && (v.verband.isEmpty || v.verband.get.equals(verband)))) + } + } + + case class RenameAthletAction(override val verein: Registration, athletReg: AthletRegistration, existing: Athlet, expected: Athlet) extends SyncAction { + override val caption = s"Athlet/-In korrigieren: Von ${existing.extendedprint} zu ${expected.extendedprint}" + + def isSexChange: Boolean = existing.geschlecht != expected.geschlecht + + def applyLocalChange: Athlet = existing.copy( + geschlecht = expected.geschlecht, + name = expected.name, + vorname = expected.vorname, + gebdat = expected.gebdat + ) + + def applyRemoteChange: AthletView = athletReg + .toAthlet + .toAthletView(Some(verein + .toVerein + .copy(id = verein.vereinId.get))) + .copy( + id = athletReg.athletId.get, + geschlecht = expected.geschlecht, + name = expected.name, + vorname = expected.vorname, + gebdat = expected.gebdat + ) + } + + case class RegistrationResetPW(id: Long, wettkampfId: Long, secret: String) extends DataObject + + case class AthletRegistration(id: Long, vereinregistrationId: Long, + athletId: Option[Long], geschlecht: String, name: String, vorname: String, gebdat: String, + programId: Long, registrationTime: Long, athlet: Option[AthletView]) extends DataObject { + def toPublicView = AthletRegistration(id, vereinregistrationId, athletId, geschlecht, name, vorname, gebdat.substring(0, 4) + "-01-01", programId, registrationTime, athlet.map(_.toPublicView)) + + def capitalizeIfBlockCase(s: String): String = { + if (s.length > 2 && (s.toUpperCase.equals(s) || s.toLowerCase.equals(s))) { + s.substring(0, 1).toUpperCase + s.substring(1).toLowerCase + } else { + s + } + } + + def toAthlet: Athlet = { + if (id == 0 && athletId == None) { + val nameNorm = capitalizeIfBlockCase(name.trim) + val vornameNorm = capitalizeIfBlockCase(vorname.trim) + val nameMasculinTest = Surname.isMasculin(nameNorm) + val nameFeminimTest = Surname.isFeminim(nameNorm) + val vornameMasculinTest = Surname.isMasculin(vornameNorm) + val vornameFeminimTest = Surname.isFeminim(vornameNorm) + val nameVornameSwitched = (nameMasculinTest || nameFeminimTest) && !(vornameMasculinTest || vornameFeminimTest) + val defName = if (nameVornameSwitched) vornameNorm else nameNorm + val defVorName = if (nameVornameSwitched) nameNorm else vornameNorm + val feminim = nameFeminimTest || vornameFeminimTest + val masculin = nameMasculinTest || vornameMasculinTest + val defGeschlecht = geschlecht match { + case "M" => + if (feminim && !masculin) "W" else "M" + case "W" => + if (masculin && !feminim) "M" else "W" + case s: String => "M" + } + val currentDate = LocalDate.now() + val gebDatRaw = str2SQLDate(gebdat) + val gebDatLocal = gebDatRaw.toLocalDate + val age = Period.between(gebDatLocal, currentDate).getYears + if (age > 0 && age < 120) { + Athlet( + id = athletId match { + case Some(id) => id + case None => 0 + }, + js_id = "", + geschlecht = defGeschlecht, + name = defName, + vorname = defVorName, + gebdat = Some(gebDatRaw), + strasse = "", + plz = "", + ort = "", + verein = None, + activ = true + ) + } else { + throw new IllegalArgumentException(s"Geburtsdatum ergibt ein unrealistisches Alter von ${age}.") + } + } + else { + val currentDate = LocalDate.now() + val gebDatRaw = str2SQLDate(gebdat) + val gebDatLocal = gebDatRaw.toLocalDate + val age = Period.between(gebDatLocal, currentDate).getYears + if (age > 0 && age < 120) { + Athlet( + id = athletId match { + case Some(id) => id + case None => 0 + }, + js_id = "", + geschlecht = geschlecht, + name = name.trim, + vorname = vorname.trim, + gebdat = Some(gebDatRaw), + strasse = "", + plz = "", + ort = "", + verein = None, + activ = true + ) + } else { + throw new IllegalArgumentException(s"Geburtsdatum ergibt ein unrealistisches Alter von ${age}.") + } + } + } + + def isEmptyRegistration: Boolean = geschlecht.isEmpty + + def isLocalIdentified: Boolean = { + athletId match { + case Some(id) if id > 0L => true + case _ => false + } + } + + def matchesAthlet(v: Athlet): Boolean = { + val bool = toAthlet.extendedprint.equals(v.extendedprint) + /*if(!bool) { + println(s"nonmatch athlet: ${v.extendedprint}, ${toAthlet.extendedprint}") + }*/ + bool + } + + def matchesAthlet(): Boolean = { + val bool = athlet.nonEmpty && athlet.map(_.toAthlet).exists(matchesAthlet) + /*if(!bool) { + println(s"nonmatch athlet: ${athlet.nonEmpty}, ${athlet.map(_.toAthlet)}, '${athlet.map(_.toAthlet.extendedprint)}' <> '${toAthlet.extendedprint}'") + }*/ + bool + } + } + + object EmptyAthletRegistration { + def apply(vereinregistrationId: Long): AthletRegistration = AthletRegistration(0L, vereinregistrationId, None, "", "", "", "", 0L, 0L, None) + } + + case class JudgeRegistration(id: Long, vereinregistrationId: Long, + geschlecht: String, name: String, vorname: String, + mobilephone: String, mail: String, comment: String, + registrationTime: Long) extends DataObject { + def validate(): Unit = { + if (name == null || name.trim.isEmpty) throw new IllegalArgumentException("JudgeRegistration with empty name") + if (vorname == null || vorname.trim.isEmpty) throw new IllegalArgumentException("JudgeRegistration with empty vorname") + if (mobilephone == null || mobilephone.trim.isEmpty) throw new IllegalArgumentException("JudgeRegistration with empty mobilephone") + if (mail == null || mail.trim.isEmpty) throw new IllegalArgumentException("JudgeRegistration with empty mail") + } + + def normalized: JudgeRegistration = { + validate() + val nameNorm = name.trim + val vornameNorm = vorname.trim + val nameMasculinTest = Surname.isMasculin(nameNorm) + val nameFeminimTest = Surname.isFeminim(nameNorm) + val vornameMasculinTest = Surname.isMasculin(vornameNorm) + val vornameFeminimTest = Surname.isFeminim(vornameNorm) + val nameVornameSwitched = (nameMasculinTest || nameFeminimTest) && !(vornameMasculinTest || vornameFeminimTest) + val defName = if (nameVornameSwitched) vornameNorm else nameNorm + val defVorName = if (nameVornameSwitched) nameNorm else vornameNorm + val feminim = nameFeminimTest || vornameFeminimTest + val masculin = nameMasculinTest || vornameMasculinTest + val defGeschlecht = geschlecht match { + case "M" => + if (feminim && !masculin) "W" else "M" + case "W" => + if (masculin && !feminim) "M" else "W" + case s: String => "M" + } + JudgeRegistration(id, vereinregistrationId, defGeschlecht, defName, defVorName, mobilephone, mail, comment, registrationTime) + } + + def toWertungsrichter: Wertungsrichter = { + val nj = normalized + Wertungsrichter( + id = 0L, + js_id = "", + geschlecht = nj.geschlecht, + name = nj.name, + vorname = nj.vorname, + gebdat = None, + strasse = "", + plz = "", + ort = "", + verein = None, + activ = true + ) + } + + def isEmptyRegistration = geschlecht.isEmpty + } + + object EmptyJudgeRegistration { + def apply(vereinregistrationId: Long) = JudgeRegistration(0L, vereinregistrationId, "", "", "", "", "", "", 0L) + } + + case class JudgeRegistrationProgram(id: Long, judgeregistrationId: Long, vereinregistrationId: Long, program: Long, comment: String) + + case class JudgeRegistrationProgramItem(program: String, disziplin: String, disziplinId: Long) } \ No newline at end of file From 549f6fe8e94440827ee4aca9e73a0f3632ce0f1c Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Mon, 17 Apr 2023 22:38:59 +0200 Subject: [PATCH 77/99] Make altersklassen optional to be compatible with v2r2 --- .../scala/ch/seidel/kutu/data/GroupBy.scala | 8 ++--- .../seidel/kutu/data/ResourceExchanger.scala | 34 ++++++++++++------- .../scala/ch/seidel/kutu/domain/package.scala | 6 ++-- .../ch/seidel/kutu/http/ScoreRoutes.scala | 4 +-- .../seidel/kutu/squad/DurchgangBuilder.scala | 4 +-- .../ch/seidel/kutu/squad/JGClubGrouper.scala | 6 ++-- .../ch/seidel/kutu/squad/RiegenBuilder.scala | 13 +++---- .../ch/seidel/kutu/domain/WettkampfSpec.scala | 4 +-- 8 files changed, 44 insertions(+), 35 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala index 2a4d93ec4..3c617160d 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupBy.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupBy.scala @@ -483,11 +483,11 @@ object GroupBy { } val query = if (cbflist.nonEmpty) { cbflist.foldLeft(cbflist.head.asInstanceOf[GroupBy])((acc, cb) => if (acc != cb) acc.groupBy(cb) else acc) - } else if (data.nonEmpty && data.head.wettkampf.altersklassen.nonEmpty) { - val byAK = groupers.find(p => p.isInstanceOf[ByAltersklasse] && p.groupname.startsWith("Wettkampf")).getOrElse(ByAltersklasse("AK", Altersklasse.parseGrenzen(data.head.wettkampf.altersklassen))) + } else if (data.nonEmpty && data.head.wettkampf.altersklassen.get.nonEmpty) { + val byAK = groupers.find(p => p.isInstanceOf[ByAltersklasse] && p.groupname.startsWith("Wettkampf")).getOrElse(ByAltersklasse("AK", Altersklasse.parseGrenzen(data.head.wettkampf.altersklassen.get))) ByProgramm().groupBy(byAK).groupBy(ByGeschlecht()) - } else if (data.nonEmpty && data.head.wettkampf.jahrgangsklassen.nonEmpty) { - val byAK = groupers.find(p => p.isInstanceOf[ByJahrgangsAltersklasse] && p.groupname.startsWith("Wettkampf")).getOrElse(ByJahrgangsAltersklasse("AK", Altersklasse.parseGrenzen(data.head.wettkampf.jahrgangsklassen))) + } else if (data.nonEmpty && data.head.wettkampf.jahrgangsklassen.get.nonEmpty) { + val byAK = groupers.find(p => p.isInstanceOf[ByJahrgangsAltersklasse] && p.groupname.startsWith("Wettkampf")).getOrElse(ByJahrgangsAltersklasse("AK", Altersklasse.parseGrenzen(data.head.wettkampf.jahrgangsklassen.get))) ByProgramm().groupBy(byAK).groupBy(ByGeschlecht()) } else { diff --git a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala index e29680218..41c502b39 100644 --- a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala +++ b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala @@ -11,6 +11,7 @@ import org.slf4j.LoggerFactory import slick.jdbc import java.io._ +import java.nio.charset.Charset import java.sql.Timestamp import java.time.Instant import java.util.UUID @@ -720,18 +721,25 @@ object ResourceExchanger extends KutuService with RiegenBuilder { values.map("\"" + _ + "\"").mkString(",") } + private val charset = "ISO-8859-1" + private val charset2 = "UTF-8" + def exportDurchgaenge(wettkampf: Wettkampf, filename: String): Unit = { val fileOutputStream = new FileOutputStream(filename) + //fileOutputStream.write('\ufeff') + //fileOutputStream.flush() + fileOutputStream.write(0xef); // emits 0xef + fileOutputStream.write(0xbb); // emits 0xbb + fileOutputStream.write(0xbf); // emits 0xbf val diszipline = listDisziplinesZuWettkampf(wettkampf.id) val durchgaenge = selectDurchgaenge(UUID.fromString(wettkampf.uuid.get)).map(d => d.name -> d).toMap - val sep = ";" - fileOutputStream.write(f"""sep=${sep}\nDurchgang${sep}Summe${sep}Min${sep}Max${sep}Durchschn.${sep}Total-Zeit${sep}Einturn-Zeit${sep}Gerät-Zeit""".getBytes("ISO-8859-1")) + fileOutputStream.write(f"""sep=${sep}\nDurchgang${sep}Summe${sep}Min${sep}Max${sep}Durchschn.${sep}Total-Zeit${sep}Einturn-Zeit${sep}Gerät-Zeit""".getBytes(charset)) diszipline.foreach { x => - fileOutputStream.write(f"${sep}${x.name}${sep}Anz".getBytes("ISO-8859-1")) + fileOutputStream.write(f"${sep}${x.name}${sep}Anz".getBytes(charset)) } - fileOutputStream.write("\r\n".getBytes("ISO-8859-1")) + fileOutputStream.write("\r\n".getBytes(charset)) listRiegenZuWettkampf(wettkampf.id) .filter(_._3.nonEmpty) @@ -754,11 +762,11 @@ object ResourceExchanger extends KutuService with RiegenBuilder { DurchgangEditor(wettkampf.id, durchgaenge(name.getOrElse(rel.head.initdurchgang.getOrElse(""))), rel) } .foreach { x => - fileOutputStream.write(f"""${x.durchgang.name}${sep}${x.anz.value}${sep}${x.min.value}${sep}${x.max.value}${sep}${x.avg.value}${sep}${toShortDurationFormat(x.durchgang.planTotal)}${sep}${toShortDurationFormat(x.durchgang.planEinturnen)}${sep}${toShortDurationFormat(x.durchgang.planGeraet)}""".getBytes("ISO-8859-1")) + fileOutputStream.write(f"""${x.durchgang.name}${sep}${x.anz.value}${sep}${x.min.value}${sep}${x.max.value}${sep}${x.avg.value}${sep}${toShortDurationFormat(x.durchgang.planTotal)}${sep}${toShortDurationFormat(x.durchgang.planEinturnen)}${sep}${toShortDurationFormat(x.durchgang.planGeraet)}""".getBytes(charset)) diszipline.foreach { d => - fileOutputStream.write(f"${sep}${x.initstartriegen.getOrElse(d, Seq[RiegeEditor]()).map(r => f"${r.name.value.replace("M,", "Tu,").replace("W,", "Ti,")} (${r.anz.value})").mkString("\"", "\n", "\"")}${sep}${x.initstartriegen.getOrElse(d, Seq[RiegeEditor]()).map(r => r.anz.value).sum}".getBytes("ISO-8859-1")) + fileOutputStream.write(f"${sep}${x.initstartriegen.getOrElse(d, Seq[RiegeEditor]()).map(r => f"${r.name.value.replace("M,", "Tu,").replace("W,", "Ti,")} (${r.anz.value})").mkString("\"", "\n", "\"")}${sep}${x.initstartriegen.getOrElse(d, Seq[RiegeEditor]()).map(r => r.anz.value).sum}".getBytes(charset)) } - fileOutputStream.write("\r\n".getBytes("ISO-8859-1")) + fileOutputStream.write("\r\n".getBytes(charset)) } fileOutputStream.flush() @@ -771,12 +779,12 @@ object ResourceExchanger extends KutuService with RiegenBuilder { val durchgaenge = selectDurchgaenge(UUID.fromString(wettkampf.uuid.get)).map(d => d.name -> d).toMap val sep = ";" - fileOutputStream.write(f"""sep=${sep}\nDurchgang${sep}Summe${sep}Min${sep}Max${sep}Total-Zeit${sep}Einturn-Zeit${sep}Gerät-Zeit""".getBytes("ISO-8859-1")) + fileOutputStream.write(f"""sep=${sep}\nDurchgang${sep}Summe${sep}Min${sep}Max${sep}Total-Zeit${sep}Einturn-Zeit${sep}Gerät-Zeit""".getBytes(charset)) diszipline.foreach { x => - fileOutputStream.write(f"${sep}${x.name}${sep}Ti${sep}Tu".getBytes("ISO-8859-1")) + fileOutputStream.write(f"${sep}${x.name}${sep}Ti${sep}Tu".getBytes(charset)) } - fileOutputStream.write("\r\n".getBytes("ISO-8859-1")) + fileOutputStream.write("\r\n".getBytes(charset)) val riege2Map = listRiegen2ToRiegenMapZuWettkampf(wettkampf.id) @@ -810,7 +818,7 @@ object ResourceExchanger extends KutuService with RiegenBuilder { DurchgangEditor(wettkampf.id, durchgaenge(name.getOrElse("")), rel) } .foreach { x => - fileOutputStream.write(f"""${x.durchgang.name}${sep}${x.anz.value}${sep}${x.min.value}${sep}${x.max.value}${sep}${toShortDurationFormat(x.durchgang.planTotal)}${sep}${toShortDurationFormat(x.durchgang.planEinturnen)}${sep}${toShortDurationFormat(x.durchgang.planGeraet)}""".getBytes("ISO-8859-1")) + fileOutputStream.write(f"""${x.durchgang.name}${sep}${x.anz.value}${sep}${x.min.value}${sep}${x.max.value}${sep}${toShortDurationFormat(x.durchgang.planTotal)}${sep}${toShortDurationFormat(x.durchgang.planEinturnen)}${sep}${toShortDurationFormat(x.durchgang.planGeraet)}""".getBytes(charset)) val riegen = x.riegenWithMergedClubs() val rows = riegen.values.map(_.size).max val riegenFields = for { @@ -834,9 +842,9 @@ object ResourceExchanger extends KutuService with RiegenBuilder { }) :+ "\r\n" rs.foreach(row => { - fileOutputStream.write(row.getBytes("ISO-8859-1")) + fileOutputStream.write(row.getBytes(charset)) }) - fileOutputStream.write("\r\n".getBytes("ISO-8859-1")) + fileOutputStream.write("\r\n".getBytes(charset)) } fileOutputStream.flush() diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 10f586bc7..297d7742b 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -686,12 +686,12 @@ package object domain { // if(uuid != null) Wettkampf(id, datum, titel, programmId, auszeichnung, auszeichnungendnote, Some(uuid)) // else apply(id, datum, titel, programmId, auszeichnung, auszeichnungendnote) // } - case class Wettkampf(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: String, jahrgangsklassen: String) extends DataObject { + case class Wettkampf(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: Option[String], jahrgangsklassen: Option[String]) extends DataObject { override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY" def toView(programm: ProgrammView): WettkampfView = { - WettkampfView(id, uuid, datum, titel, programm, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen, jahrgangsklassen) + WettkampfView(id, uuid, datum, titel, programm, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen.getOrElse(""), jahrgangsklassen.getOrElse("")) } def toPublic: Wettkampf = Wettkampf(id, uuid, datum, titel, programmId, auszeichnung, auszeichnung, "", altersklassen, jahrgangsklassen) @@ -787,7 +787,7 @@ package object domain { case class WettkampfView(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: String, jahrgangsklassen: String) extends DataObject { override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY" - def toWettkampf = Wettkampf(id, uuid, datum, titel, programm.id, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen, jahrgangsklassen) + def toWettkampf = Wettkampf(id, uuid, datum, titel, programm.id, auszeichnung, auszeichnungendnote, notificationEMail, Option(altersklassen), Option(jahrgangsklassen)) } case class PublishedScoreRaw(id: String, title: String, query: String, published: Boolean, publishedDate: java.sql.Date, wettkampfId: Long) extends DataObject { diff --git a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala index 7f953a045..c1dad1d99 100644 --- a/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/ScoreRoutes.scala @@ -144,8 +144,8 @@ ScoreRoutes extends SprayJsonSupport with JsonSupport with AuthSupport with Rout val logodir = new java.io.File(Config.homedir + "/" + encodeFileName(wettkampf.easyprint)) val logofile = PrintUtil.locateLogoFile(logodir) val programmText = wettkampf.programmId match {case 20 => "Kategorie" case _ => "Programm"} - val altersklassen = Altersklasse.parseGrenzen(wettkampf.altersklassen, "Altersklasse") - val jgAltersklassen = Altersklasse.parseGrenzen(wettkampf.jahrgangsklassen, "Altersklasse") + val altersklassen = Altersklasse.parseGrenzen(wettkampf.altersklassen.get, "Altersklasse") + val jgAltersklassen = Altersklasse.parseGrenzen(wettkampf.jahrgangsklassen.get, "Altersklasse") def riegenZuDurchgang: Map[String, Durchgang] = { val riegen = listRiegenZuWettkampf(wettkampf.id) riegen.map(riege => riege._1 -> riege._3.map(durchgangName => Durchgang(0, durchgangName)).getOrElse(Durchgang())).toMap diff --git a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala index 6486a7652..79fa4f63d 100644 --- a/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/DurchgangBuilder.scala @@ -50,11 +50,11 @@ case class DurchgangBuilder(service: KutuService) extends Mapper with RiegenSpli val wv = wertungen.head._2.head val riegenmode = wv.wettkampfdisziplin.programm.riegenmode val aks = wv.wettkampf.altersklassen match { - case s: String if s.nonEmpty => Some(s) + case Some(s: String) if s.nonEmpty => Some(s) case _ => None } val jaks = wv.wettkampf.jahrgangsklassen match { - case s: String if s.nonEmpty => Some(s) + case Some(s: String) if s.nonEmpty => Some(s) case _ => None } val (shortGrouper, fullGrouper, jgGroup) = RiegenBuilder.selectRiegenGrouper(riegenmode, aks, jaks).buildGrouper(riegencnt) diff --git a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala index 7e582795f..0d04ac9c9 100644 --- a/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala +++ b/src/main/scala/ch/seidel/kutu/squad/JGClubGrouper.scala @@ -15,10 +15,10 @@ case object JGClubGrouper extends RiegenGrouper { def extractProgrammGrouper(w: WertungView): String = if (extractJGGrouper(w).contains(w.wettkampfdisziplin.programm.name)) "" else w.wettkampfdisziplin.programm.name - def extractJGGrouper(w: WertungView): String = if (w.wettkampf.altersklassen.nonEmpty) { - ByAltersklasse("AK", Altersklasse.parseGrenzen(w.wettkampf.altersklassen, "AK")).analyze(Seq(w)).head.asInstanceOf[Altersklasse].easyprintShort + def extractJGGrouper(w: WertungView): String = if (w.wettkampf.altersklassen.get.nonEmpty) { + ByAltersklasse("AK", Altersklasse.parseGrenzen(w.wettkampf.altersklassen.get, "AK")).analyze(Seq(w)).head.asInstanceOf[Altersklasse].easyprintShort } else if (w.wettkampf.jahrgangsklassen.nonEmpty) { - ByJahrgangsAltersklasse("AK", Altersklasse.parseGrenzen(w.wettkampf.jahrgangsklassen, "AK")).analyze(Seq(w)).head.asInstanceOf[Altersklasse].easyprintShort + ByJahrgangsAltersklasse("AK", Altersklasse.parseGrenzen(w.wettkampf.jahrgangsklassen.get, "AK")).analyze(Seq(w)).head.asInstanceOf[Altersklasse].easyprintShort } else (w.athlet.gebdat match { case Some(d) => f"$d%tY"; diff --git a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala index e60366813..097df7dc9 100644 --- a/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala +++ b/src/main/scala/ch/seidel/kutu/squad/RiegenBuilder.scala @@ -33,11 +33,11 @@ trait RiegenBuilder { val riegencount = rotationstation.sum val riegenmode = wertungen.head.wettkampfdisziplin.programm.riegenmode val aks = wertungen.head.wettkampf.altersklassen match { - case s: String if s.nonEmpty => Some(s) + case Some(s: String) if s.nonEmpty => Some(s) case _ => None } val jaks = wertungen.head.wettkampf.jahrgangsklassen match { - case s: String if s.nonEmpty => Some(s) + case Some(s: String) if s.nonEmpty => Some(s) case _ => None } selectRiegenGrouper(riegenmode, aks, jaks).suggestRiegen(riegencount, wertungen) @@ -61,19 +61,20 @@ object RiegenBuilder { def generateRiegenName(w: WertungView) = { val riegenmode = w.wettkampfdisziplin.programm.riegenmode val aks = w.wettkampf.altersklassen match { - case s: String if s.nonEmpty => Some(s) + case Some(s: String) if s.nonEmpty => Some(s) case _ => None } val jaks = w.wettkampf.jahrgangsklassen match { - case s: String if s.nonEmpty => Some(s) + case Some(s: String) if s.nonEmpty => Some(s) case _ => None } selectRiegenGrouper(riegenmode, aks, jaks).generateRiegenName(w) } def generateRiegen2Name(w: WertungView): Option[String] = { - w.wettkampf.programmId match { - case 20 if (w.athlet.geschlecht.equalsIgnoreCase("M")) => + val getuMatcher = ".*GETU.*/i".r + w.wettkampfdisziplin.programm.head.name match { + case getuMatcher() if (w.athlet.geschlecht.equalsIgnoreCase("M")) => Some(s"Barren ${w.wettkampfdisziplin.programm.name}") case _ => None } diff --git a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala index b7169a14c..2daf4dfc5 100644 --- a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala @@ -21,8 +21,8 @@ class WettkampfSpec extends KuTuBaseSpec { val wettkampfsaved = saveWettkampf(wettkampf.id, wettkampf.datum, "neuer titel", Set(wettkampf.programmId), "testmail@test.com", 10000, 7.5, wettkampf.uuid, "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19") assert(wettkampfsaved.titel == "neuer titel") assert(wettkampfsaved.auszeichnung == 10000) - assert(wettkampfsaved.altersklassen == "7,8,9,11,13,15,17,19") - assert(wettkampfsaved.jahrgangsklassen == "7,8,9,11,13,15,17,19") + assert(wettkampfsaved.altersklassen.get == "7,8,9,11,13,15,17,19") + assert(wettkampfsaved.jahrgangsklassen.get == "7,8,9,11,13,15,17,19") } "recreate with disziplin-plan-times" in { From 1be434f2b2ef3c599129a58c053b7fd8e92f02a5 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Mon, 17 Apr 2023 23:10:33 +0200 Subject: [PATCH 78/99] Optimization of Print via browser --- src/main/scala/ch/seidel/kutu/KuTuApp.scala | 5 +---- .../ch/seidel/kutu/data/ResourceExchanger.scala | 6 ++---- .../scala/ch/seidel/kutu/renderer/PrintUtil.scala | 15 +-------------- .../scala/ch/seidel/kutu/view/RiegenTab.scala | 11 ++++------- 4 files changed, 8 insertions(+), 29 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index 1a066d06e..cb61d3536 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -1682,10 +1682,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport dir.mkdirs() } - hostServices.showDocument(dir.toURI.toASCIIString) - if (dir.toURI.toASCIIString != dir.toURI.toString) { - hostServices.showDocument(dir.toURI.toString) - } + hostServices.showDocument(dir.toURI.toString) } def makeVereinLoeschenMenu(v: Verein) = makeMenuAction("Verein löschen") { (caption, action) => diff --git a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala index 41c502b39..a15a86f59 100644 --- a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala +++ b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala @@ -725,9 +725,7 @@ object ResourceExchanger extends KutuService with RiegenBuilder { private val charset2 = "UTF-8" def exportDurchgaenge(wettkampf: Wettkampf, filename: String): Unit = { - val fileOutputStream = new FileOutputStream(filename) - //fileOutputStream.write('\ufeff') - //fileOutputStream.flush() + val fileOutputStream = new BufferedOutputStream(new FileOutputStream(filename)) fileOutputStream.write(0xef); // emits 0xef fileOutputStream.write(0xbb); // emits 0xbb fileOutputStream.write(0xbf); // emits 0xbf @@ -774,7 +772,7 @@ object ResourceExchanger extends KutuService with RiegenBuilder { } def exportSimpleDurchgaenge(wettkampf: Wettkampf, filename: String): Unit = { - val fileOutputStream = new FileOutputStream(filename) + val fileOutputStream = new BufferedOutputStream(new FileOutputStream(filename)) val diszipline = listDisziplinesZuWettkampf(wettkampf.id) val durchgaenge = selectDurchgaenge(UUID.fromString(wettkampf.uuid.get)).map(d => d.name -> d).toMap diff --git a/src/main/scala/ch/seidel/kutu/renderer/PrintUtil.scala b/src/main/scala/ch/seidel/kutu/renderer/PrintUtil.scala index 246bc5555..438ae78b9 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/PrintUtil.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/PrintUtil.scala @@ -124,20 +124,7 @@ object PrintUtil { bos.write(toSave.getBytes("UTF-8")) bos.flush() bos.close() - hostServices.showDocument(file.toURI.toASCIIString) - if (!file.toURI.toASCIIString.equals(file.toURI.toString)) { - hostServices.showDocument(file.toURI.toString) - } - /*val os = System.getProperty("os.name").toLowerCase(Locale.ROOT) - try { - val documentRef = if (os.contains("mac")) file.toURI.toASCIIString - else if (os.contains("win")) file.toURI.toString - else file.toURI.toASCIIString - hostServices.showDocument(documentRef) - } catch { - case e:Exception => - e.printStackTrace() - }*/ + hostServices.showDocument(file.toURI.toString) } case _ => } diff --git a/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala b/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala index 7c504f6ab..63049c4a0 100644 --- a/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala @@ -1111,10 +1111,10 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: val file = new java.io.File(dir.getPath + "/" + filename) ResourceExchanger.exportDurchgaenge(wettkampf.toWettkampf, file.getPath) - hostServices.showDocument(file.toURI.toASCIIString) - if (!file.toURI.toASCIIString.equals(file.toURI.toString)) { + //hostServices.showDocument(file.toURI.toASCIIString) + //if (!file.toURI.toASCIIString.equals(file.toURI.toString)) { hostServices.showDocument(file.toURI.toString) - } + //} } } @@ -1135,10 +1135,7 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: val file = new java.io.File(dir.getPath + "/" + filename) ResourceExchanger.exportSimpleDurchgaenge(wettkampf.toWettkampf, file.getPath) - hostServices.showDocument(file.toURI.toASCIIString) - if (!file.toURI.toASCIIString.equals(file.toURI.toString)) { - hostServices.showDocument(file.toURI.toString) - } + hostServices.showDocument(file.toURI.toString) } } From 7ae5fd2e3aebeb7e1df756619faee1524ba4d2e7 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sun, 23 Apr 2023 16:44:02 +0200 Subject: [PATCH 79/99] #677 Fix WK-Overview Stats with Altersklassen --- .../scala/ch/seidel/kutu/domain/WettkampfService.scala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index c50603630..497b3d728 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -183,12 +183,12 @@ trait WettkampfService extends DBService def getResultMapper(r: PositionedResult)(implicit cache: scala.collection.mutable.Map[Long, ProgrammView]) = { val verein = r.<<[String] val pgm = readProgramm(r.<<[Long], cache) - (verein,pgm,r.<<[Int],r.<<[String],r.<<[Date]) + (verein,pgm,r.<<[Int],r.<<[String],r.<<[Date],r.<<[Long]) } Await.result( database.run { sql""" - select distinct v.name as verein, p.id, p.ord as ord, a.geschlecht, a.gebdat + select distinct v.name as verein, p.id, p.ord as ord, a.geschlecht, a.gebdat, a.id from verein v inner join athlet a on a.verein = v.id inner join wertung w on w.athlet_id = a.id @@ -196,8 +196,8 @@ trait WettkampfService extends DBService inner join wettkampfdisziplin wd on wd.id = w.wettkampfdisziplin_id inner join programm p on wd.programm_id = p.id where wk.uuid = ${wettkampfUUID.toString} and a.gebdat is not null - """.as[(String,ProgrammView,Int,String,Date)](getResultMapper).withPinnedSession - .map(_.toList) + """.as[(String,ProgrammView,Int,String,Date,Long)](getResultMapper).withPinnedSession + .map(_.toList.map(x => (x._1,x._2,x._3,x._4,x._5))) }, Duration.Inf) } From 0ffbf536e57d01efb778aab7be66236089defa36 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sat, 29 Apr 2023 23:36:06 +0200 Subject: [PATCH 80/99] #79 Fix unsorted scorelist for KuTu competition-mode --- .../ch/seidel/kutu/data/GroupSection.scala | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupSection.scala b/src/main/scala/ch/seidel/kutu/data/GroupSection.scala index 95a132f32..1029ababe 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupSection.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupSection.scala @@ -25,9 +25,9 @@ object GroupSection { val rangE = list.toList.map(_._2.noteE).filter(_ > 0).sorted.reverse :+ 0 val rangEnd = list.toList.map(_._2.endnote).filter(_ > 0).sorted.reverse :+ 0 def rang(r: Resultat) = { - val rd = if (rangD.size > 1) rangD.indexOf(r.noteD) + 1 else 0 - val re = if (rangE.size > 1) rangE.indexOf(r.noteE) + 1 else 0 - val rf = if (rangEnd.size > 1) rangEnd.indexOf(r.endnote) + 1 else 0 + val rd = if (rangD.nonEmpty) rangD.indexOf(r.noteD) + 1 else 0 + val re = if (rangE.nonEmpty) rangE.indexOf(r.noteE) + 1 else 0 + val rf = if (rangEnd.nonEmpty) rangEnd.indexOf(r.endnote) + 1 else 0 Resultat(rd, re, rf) } list.map(y => GroupSum(y._1, y._2, y._3, rang(y._2))) @@ -281,25 +281,21 @@ case class GroupLeaf(override val groupKey: DataObject, list: Iterable[WertungVi def mapToAvgRowSummary(athlWertungen: Iterable[WertungView]): (Resultat, Resultat, Iterable[(Disziplin, Long, Resultat, Resultat, Option[Int], Option[BigDecimal])], Iterable[(ProgrammView, Resultat, Resultat, Option[Int], Option[BigDecimal])], Resultat) = { val wks = athlWertungen.filter(_.endnote.nonEmpty).groupBy { w => w.wettkampf } val wksums = wks.map {wk => wk._2.map(w => w.resultat).reduce(_+_)} + val wkesums = wks.map {wk => wk._2.map(w => w.resultat.noteE).sum} sum + val wkdsums = wks.map {wk => wk._2.map(w => w.resultat.noteD).sum} sum val rsum = if(wksums.nonEmpty) wksums.reduce(_+_) else Resultat(0,0,0) - lazy val wksENOrdered = wks.map(wk => wk._1 -> wk._2.toList.sortBy(w => w.resultat.endnote)) lazy val getuDisziplinGOrder = Map(26L -> 1, 4L -> 2, 6L -> 3) lazy val jet = LocalDate.now() lazy val hundredyears = jet.minus(100, ChronoUnit.YEARS) def factorizeKuTu(w: WertungView): Long = { - val idx = wksENOrdered(w.wettkampf).indexOf(w) - if(idx < 4) { - 1 - } - else { - val gebdat = w.athlet.gebdat match {case Some(d) => d.toLocalDate case None => hundredyears} - val alterInTagen = jet.toEpochDay - gebdat.toEpochDay - val alterInJahren = alterInTagen / 365 - val altersfaktor = 100L - alterInJahren - val powered = Math.floor(Math.pow(1000, idx)).toLong - powered + altersfaktor - } + // höchste E-Summe, höschste D-Summe, Jugend vor Alter + val gebdat = w.athlet.gebdat match {case Some(d) => d.toLocalDate case None => hundredyears} + val alterInTagen = jet.toEpochDay - gebdat.toEpochDay + val alterInJahren = alterInTagen / 365 + val altersfaktor = 100L - alterInJahren + val powered = wkesums * 10000L + wkdsums * 100L + (powered + altersfaktor).toLong } def factorizeGeTu(w: WertungView): Long = { @@ -327,7 +323,7 @@ case class GroupLeaf(override val groupKey: DataObject, list: Iterable[WertungVi factorizeKuTu(w) case _ => 1L } - w.resultat * 1000000000000L + w.resultat * factor + (w.resultat * 1000000000000L) + (w.resultat * factor) }.reduce(_+_)} val gsum = if(gwksums.nonEmpty) gwksums.reduce(_+_) else Resultat(0,0,0) val avg = if(wksums.nonEmpty) rsum / wksums.size else Resultat(0,0,0) From b2370a6959b34d7caa205d89b2ec566b2652e812 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sun, 7 May 2023 00:04:20 +0200 Subject: [PATCH 81/99] #684 Add Gleichstandsregel --- .../kutu/domain/Gleichstellungsregel.scala | 105 ++++++++++++++++++ .../kutu/domain/GleichstandsregelTest.scala | 96 ++++++++++++++++ 2 files changed, 201 insertions(+) create mode 100644 src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala create mode 100644 src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala diff --git a/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala b/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala new file mode 100644 index 000000000..2ce00477d --- /dev/null +++ b/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala @@ -0,0 +1,105 @@ +package ch.seidel.kutu.domain + +import java.time.LocalDate +import java.time.temporal.ChronoUnit + + +object Gleichstandsregel { + private val getu = "Disziplin(Schaukelringe,Sprung,Reck)" + private val kutu = "E-Note-Summe/D-Note-Summe/JugendVorAlter" + val predefined = Map( + ("Ohne - Punktgleichstand => gleicher Rang" -> "") + , ("GeTu" -> getu) + , ("KuTu" -> kutu) + , ("Individuell" -> "") + ) + val disziplinPattern = "^Disciplin\\((.+)\\)$".r + + def apply(formel: String): Gleichstandsregel = { + val regeln = formel.split("/").toList + val mappedFactorizers: List[Gleichstandsregel] = regeln.flatMap { + case disziplinPattern(dl) => Some(GleichstandsregelDisziplin(dl.split(",").toList).asInstanceOf[Gleichstandsregel]) + case "E-Note-Summe" => Some(GleichstandsregelENoteSumme.asInstanceOf[Gleichstandsregel]) + case "E-Note-Best" => Some(GleichstandsregelENoteBest.asInstanceOf[Gleichstandsregel]) + case "D-Note-Summe" => Some(GleichstandsregelDNoteSumme.asInstanceOf[Gleichstandsregel]) + case "D-Note-Best" => Some(GleichstandsregelDNoteBest.asInstanceOf[Gleichstandsregel]) + case "JugendVorAlter" => Some(GleichstandsregelJugendVorAlter.asInstanceOf[Gleichstandsregel]) + case "Ohne" => Some(GleichstandsregelDefault.asInstanceOf[Gleichstandsregel]) + case _ => None + } + if (mappedFactorizers.isEmpty) { + GleichstandsregelList(List(GleichstandsregelDefault)) + } else { + GleichstandsregelList(mappedFactorizers) + } + } +} + +sealed trait Gleichstandsregel { + def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long +} + +case object GleichstandsregelDefault extends Gleichstandsregel { + override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = 1 +} + +case class GleichstandsregelList(regeln: List[Gleichstandsregel]) extends Gleichstandsregel { + override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { + regeln + .zipWithIndex + .map(regel => (regel._1.factorize(currentWertung, athlWertungen), regel._2)) + .map(t => Math.floor(Math.pow(10, 10 - t._2)).toLong * t._1) + .sum + } +} + +case class GleichstandsregelDisziplin(disziplinOrder: List[String]) extends Gleichstandsregel { + val reversedOrder = disziplinOrder.reverse + override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { + val idx = 1 + reversedOrder.indexOf(currentWertung.wettkampfdisziplin.disziplin.name) + val ret = if (idx <= 0) { + 1L + } + else { + Math.floor(Math.pow(100, idx)).toLong// idx.toLong + } + ret + } +} + +case object GleichstandsregelJugendVorAlter extends Gleichstandsregel { + override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { + val jet = currentWertung.wettkampf.datum.toLocalDate + val gebdat = currentWertung.athlet.gebdat match { + case Some(d) => d.toLocalDate + case None => jet.minus(100, ChronoUnit.YEARS) + } + val alterInTagen = jet.toEpochDay - gebdat.toEpochDay + val alterInJahren = alterInTagen / 365 + 100L - alterInJahren + } +} + +case object GleichstandsregelENoteBest extends Gleichstandsregel { + override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { + athlWertungen.map(_.resultat.noteE).max * 1000L toLong + } +} + +case object GleichstandsregelENoteSumme extends Gleichstandsregel { + override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { + athlWertungen.map(_.resultat.noteE).sum * 1000L toLong + } +} + +case object GleichstandsregelDNoteBest extends Gleichstandsregel { + override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { + athlWertungen.map(_.resultat.noteD).max * 1000L toLong + } +} + +case object GleichstandsregelDNoteSumme extends Gleichstandsregel { + override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { + athlWertungen.map(_.resultat.noteD).sum * 1000L toLong + } +} diff --git a/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala b/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala new file mode 100644 index 000000000..98405ed5a --- /dev/null +++ b/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala @@ -0,0 +1,96 @@ +package ch.seidel.kutu.domain + +import org.scalatest.matchers.should.Matchers +import org.scalatest.wordspec.AnyWordSpec +import org.scalatest.Assertions._ + +import java.time.LocalDate +import java.util.UUID + +class GleichstandsregelTest extends AnyWordSpec with Matchers { + + val testWertungen = { + // class Wettkampf(id: Long, uuid: Option[String], datum: Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: BigDecimal, notificationEMail: String, altersklassen: Option[String], jahrgangsklassen: Option[String], punktgleichstandregel: Option[String]) + val wk = Wettkampf(1L, None, LocalDate.of(2023, 3, 3), "Testwettkampf", 44L, 0, BigDecimal(0d), "", None, None, None) + val a = Athlet(1L).copy(name = s"Testathlet", gebdat = Some(LocalDate.of(2004, 3, 2))).toAthletView(Some(Verein(1L, "Testverein", Some("Testverband")))) + val d = for ( + geraet <- List("Boden", "Pauschen", "Ring", "Sprung", "Barren", "Reck").zipWithIndex + ) + yield { + WettkampfdisziplinView(100 + geraet._2, ProgrammView(44L, "Testprogramm", 0, None, 1, 0, 100, UUID.randomUUID().toString, 1), Disziplin(geraet._2, geraet._1), "", None, StandardWettkampf(1.0), 1, 1, 0, 3, 1, 0, 30, 1) + } + for (wd <- d) yield { + // id: Long, athlet: AthletView, wettkampfdisziplin: WettkampfdisziplinView, wettkampf: Wettkampf, noteD: Option[scala.math.BigDecimal], noteE: Option[scala.math.BigDecimal], endnote: Option[scala.math.BigDecimal], riege: Option[String], riege2: Option[String]) extends DataObject { + val enote = 7.5 - wd.disziplin.id + val dnote = 3.2 + wd.disziplin.id + val endnote = enote + dnote + WertungView(wd.id, a, wd, wk, Some(BigDecimal(dnote)), Some(BigDecimal(enote)), Some(BigDecimal(endnote)), None, None) + } + } + + "Ohne - Default" in { + // 100 - (2023 - 2004) = 81 + assert(Gleichstandsregel("Ohne").factorize(testWertungen.head, testWertungen) == 10000000000L) + assert(Gleichstandsregel("").factorize(testWertungen.head, testWertungen) == 10000000000L) + } + + "Jugend vor Alter" in { + // 100 - (2023 - 2004) = 81 + assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testWertungen) == 810000000000L) + } + + "factorize E-Note-Best" in { + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testWertungen) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(1).head, testWertungen) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(2).head, testWertungen) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(3).head, testWertungen) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(4).head, testWertungen) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(5).head, testWertungen) == 75000000000000L) + } + + "factorize E-Note-Summe" in { + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testWertungen) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(1).head, testWertungen) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(2).head, testWertungen) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(3).head, testWertungen) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(4).head, testWertungen) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(5).head, testWertungen) == 300000000000000L) + } + + "factorize D-Note-Best" in { + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.head, testWertungen) == 82000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(1).head, testWertungen) == 82000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(2).head, testWertungen) == 82000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(3).head, testWertungen) == 82000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(4).head, testWertungen) == 82000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(5).head, testWertungen) == 82000000000000L) + } + + "factorize D-Note-Summe" in { + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.head, testWertungen) == 342000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(1).head, testWertungen) == 342000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(2).head, testWertungen) == 342000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(3).head, testWertungen) == 342000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(4).head, testWertungen) == 342000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(5).head, testWertungen) == 342000000000000L) + } + + "factorize Disciplin" in { + assert(Gleichstandsregel("Disciplin(Reck,Sprung,Pauschen)").factorize(testWertungen.head, testWertungen) == 10000000000L) + assert(Gleichstandsregel("Disciplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(1).head, testWertungen) == 1000000000000L) + assert(Gleichstandsregel("Disciplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(2).head, testWertungen) == 10000000000L) + assert(Gleichstandsregel("Disciplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(3).head, testWertungen) == 100000000000000L) + assert(Gleichstandsregel("Disciplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(4).head, testWertungen) == 10000000000L) + assert(Gleichstandsregel("Disciplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(5).head, testWertungen) == 10000000000000000L) + } + + "construct combined rules" in { + assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testWertungen) == 810000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testWertungen) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testWertungen) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe/E-Note-Best").factorize(testWertungen.head, testWertungen) == 307500000000000L) + assert(Gleichstandsregel("E-Note-Summe/E-Note-Best/JugendVorAlter").factorize(testWertungen.head, testWertungen) == 307508100000000L) + assert(Gleichstandsregel("E-Note-Best/E-Note-Summe/JugendVorAlter").factorize(testWertungen.head, testWertungen) == 105008100000000L) + assert(Gleichstandsregel("JugendVorAlter/E-Note-Best/E-Note-Summe").factorize(testWertungen.head, testWertungen) == 11310000000000L) + } +} From 40ef31dd448e2cad5ff1445f2ac33aa1ccdd5fdc Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sun, 7 May 2023 00:33:27 +0200 Subject: [PATCH 82/99] #684 Add Gleichstandsregel - constructor by wettkampf --- .../kutu/domain/Gleichstellungsregel.scala | 65 +++++++++---- .../kutu/domain/GleichstandsregelTest.scala | 94 ++++++++++--------- 2 files changed, 98 insertions(+), 61 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala b/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala index 2ce00477d..786ec323b 100644 --- a/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala +++ b/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala @@ -1,6 +1,5 @@ package ch.seidel.kutu.domain -import java.time.LocalDate import java.time.temporal.ChronoUnit @@ -8,12 +7,12 @@ object Gleichstandsregel { private val getu = "Disziplin(Schaukelringe,Sprung,Reck)" private val kutu = "E-Note-Summe/D-Note-Summe/JugendVorAlter" val predefined = Map( - ("Ohne - Punktgleichstand => gleicher Rang" -> "") - , ("GeTu" -> getu) - , ("KuTu" -> kutu) + ("Ohne - Punktgleichstand => gleicher Rang" -> "Ohne") + , ("GeTu Punktgleichstandsregel" -> getu) + , ("KuTu Punktgleichstandsregel" -> kutu) , ("Individuell" -> "") ) - val disziplinPattern = "^Disciplin\\((.+)\\)$".r + val disziplinPattern = "^Disziplin\\((.+)\\)$".r def apply(formel: String): Gleichstandsregel = { val regeln = formel.split("/").toList @@ -33,29 +32,49 @@ object Gleichstandsregel { GleichstandsregelList(mappedFactorizers) } } + + def apply(programmId: Long): Gleichstandsregel = { + programmId match { + case id if (id > 0 && id < 4) => // Athletiktest + GleichstandsregelDefault + case id if ((id > 10 && id < 20) || id == 28) => // KuTu Programm + Gleichstandsregel(kutu) + case id if (id > 19 && id < 27) || (id > 73 && id < 84) => // GeTu Kategorie + Gleichstandsregel(getu) + case id if (id > 30 && id < 41) => // KuTuRi Programm + Gleichstandsregel(kutu) + case _ => GleichstandsregelDefault + } + } + def apply(wettkampf: Wettkampf): Gleichstandsregel = this(wettkampf.programmId) } sealed trait Gleichstandsregel { - def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long + def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long + def toFormel: String } case object GleichstandsregelDefault extends Gleichstandsregel { - override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = 1 + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = 1 + override def toFormel: String = "Ohne" } case class GleichstandsregelList(regeln: List[Gleichstandsregel]) extends Gleichstandsregel { - override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { regeln .zipWithIndex .map(regel => (regel._1.factorize(currentWertung, athlWertungen), regel._2)) .map(t => Math.floor(Math.pow(10, 10 - t._2)).toLong * t._1) .sum } + override def toFormel: String = regeln.map(_.toFormel).mkString("/") } case class GleichstandsregelDisziplin(disziplinOrder: List[String]) extends Gleichstandsregel { + override def toFormel: String = s"Disziplin${disziplinOrder.mkString("(", ",", ")")}" + val reversedOrder = disziplinOrder.reverse - override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { val idx = 1 + reversedOrder.indexOf(currentWertung.wettkampfdisziplin.disziplin.name) val ret = if (idx <= 0) { 1L @@ -68,7 +87,9 @@ case class GleichstandsregelDisziplin(disziplinOrder: List[String]) extends Glei } case object GleichstandsregelJugendVorAlter extends Gleichstandsregel { - override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { + override def toFormel: String = "JugendVorAlter" + + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { val jet = currentWertung.wettkampf.datum.toLocalDate val gebdat = currentWertung.athlet.gebdat match { case Some(d) => d.toLocalDate @@ -81,25 +102,33 @@ case object GleichstandsregelJugendVorAlter extends Gleichstandsregel { } case object GleichstandsregelENoteBest extends Gleichstandsregel { - override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { - athlWertungen.map(_.resultat.noteE).max * 1000L toLong + override def toFormel: String = "E-Note-Best" + + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { + athlWertungen.map(_.noteE).max * 1000L toLong } } case object GleichstandsregelENoteSumme extends Gleichstandsregel { - override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { - athlWertungen.map(_.resultat.noteE).sum * 1000L toLong + override def toFormel: String = "E-Note-Summe" + + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { + athlWertungen.map(_.noteE).sum * 1000L toLong } } case object GleichstandsregelDNoteBest extends Gleichstandsregel { - override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { - athlWertungen.map(_.resultat.noteD).max * 1000L toLong + override def toFormel: String = "D-Note-Best" + + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { + athlWertungen.map(_.noteD).max * 1000L toLong } } case object GleichstandsregelDNoteSumme extends Gleichstandsregel { - override def factorize(currentWertung: WertungView, athlWertungen: List[WertungView]): Long = { - athlWertungen.map(_.resultat.noteD).sum * 1000L toLong + override def toFormel: String = "D-Note-Summe" + + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { + athlWertungen.map(_.noteD).sum * 1000L toLong } } diff --git a/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala b/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala index 98405ed5a..f02584623 100644 --- a/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala +++ b/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala @@ -10,7 +10,6 @@ import java.util.UUID class GleichstandsregelTest extends AnyWordSpec with Matchers { val testWertungen = { - // class Wettkampf(id: Long, uuid: Option[String], datum: Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: BigDecimal, notificationEMail: String, altersklassen: Option[String], jahrgangsklassen: Option[String], punktgleichstandregel: Option[String]) val wk = Wettkampf(1L, None, LocalDate.of(2023, 3, 3), "Testwettkampf", 44L, 0, BigDecimal(0d), "", None, None, None) val a = Athlet(1L).copy(name = s"Testathlet", gebdat = Some(LocalDate.of(2004, 3, 2))).toAthletView(Some(Verein(1L, "Testverein", Some("Testverband")))) val d = for ( @@ -20,77 +19,86 @@ class GleichstandsregelTest extends AnyWordSpec with Matchers { WettkampfdisziplinView(100 + geraet._2, ProgrammView(44L, "Testprogramm", 0, None, 1, 0, 100, UUID.randomUUID().toString, 1), Disziplin(geraet._2, geraet._1), "", None, StandardWettkampf(1.0), 1, 1, 0, 3, 1, 0, 30, 1) } for (wd <- d) yield { - // id: Long, athlet: AthletView, wettkampfdisziplin: WettkampfdisziplinView, wettkampf: Wettkampf, noteD: Option[scala.math.BigDecimal], noteE: Option[scala.math.BigDecimal], endnote: Option[scala.math.BigDecimal], riege: Option[String], riege2: Option[String]) extends DataObject { val enote = 7.5 - wd.disziplin.id val dnote = 3.2 + wd.disziplin.id val endnote = enote + dnote WertungView(wd.id, a, wd, wk, Some(BigDecimal(dnote)), Some(BigDecimal(enote)), Some(BigDecimal(endnote)), None, None) } } + val testResultate = testWertungen.map(_.resultat) "Ohne - Default" in { // 100 - (2023 - 2004) = 81 - assert(Gleichstandsregel("Ohne").factorize(testWertungen.head, testWertungen) == 10000000000L) - assert(Gleichstandsregel("").factorize(testWertungen.head, testWertungen) == 10000000000L) + assert(Gleichstandsregel("Ohne").factorize(testWertungen.head, testResultate) == 10000000000L) + assert(Gleichstandsregel("").factorize(testWertungen.head, testResultate) == 10000000000L) + } + + "wettkampf-constructor" in { + assert(Gleichstandsregel(20L).toFormel == "Disziplin(Schaukelringe,Sprung,Reck)") + assert(Gleichstandsregel(testWertungen.head.wettkampf).toFormel == "Ohne") } "Jugend vor Alter" in { // 100 - (2023 - 2004) = 81 - assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testWertungen) == 810000000000L) + assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testResultate) == 810000000000L) } "factorize E-Note-Best" in { - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testWertungen) == 75000000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(1).head, testWertungen) == 75000000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(2).head, testWertungen) == 75000000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(3).head, testWertungen) == 75000000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(4).head, testWertungen) == 75000000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(5).head, testWertungen) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testResultate) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(1).head, testResultate) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(2).head, testResultate) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(3).head, testResultate) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(4).head, testResultate) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(5).head, testResultate) == 75000000000000L) } "factorize E-Note-Summe" in { - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testWertungen) == 300000000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(1).head, testWertungen) == 300000000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(2).head, testWertungen) == 300000000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(3).head, testWertungen) == 300000000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(4).head, testWertungen) == 300000000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(5).head, testWertungen) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testResultate) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(1).head, testResultate) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(2).head, testResultate) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(3).head, testResultate) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(4).head, testResultate) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(5).head, testResultate) == 300000000000000L) } "factorize D-Note-Best" in { - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.head, testWertungen) == 82000000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(1).head, testWertungen) == 82000000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(2).head, testWertungen) == 82000000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(3).head, testWertungen) == 82000000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(4).head, testWertungen) == 82000000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(5).head, testWertungen) == 82000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.head, testResultate) == 82000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(1).head, testResultate) == 82000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(2).head, testResultate) == 82000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(3).head, testResultate) == 82000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(4).head, testResultate) == 82000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(5).head, testResultate) == 82000000000000L) } "factorize D-Note-Summe" in { - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.head, testWertungen) == 342000000000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(1).head, testWertungen) == 342000000000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(2).head, testWertungen) == 342000000000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(3).head, testWertungen) == 342000000000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(4).head, testWertungen) == 342000000000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(5).head, testWertungen) == 342000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.head, testResultate) == 342000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(1).head, testResultate) == 342000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(2).head, testResultate) == 342000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(3).head, testResultate) == 342000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(4).head, testResultate) == 342000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(5).head, testResultate) == 342000000000000L) } - "factorize Disciplin" in { - assert(Gleichstandsregel("Disciplin(Reck,Sprung,Pauschen)").factorize(testWertungen.head, testWertungen) == 10000000000L) - assert(Gleichstandsregel("Disciplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(1).head, testWertungen) == 1000000000000L) - assert(Gleichstandsregel("Disciplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(2).head, testWertungen) == 10000000000L) - assert(Gleichstandsregel("Disciplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(3).head, testWertungen) == 100000000000000L) - assert(Gleichstandsregel("Disciplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(4).head, testWertungen) == 10000000000L) - assert(Gleichstandsregel("Disciplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(5).head, testWertungen) == 10000000000000000L) + "factorize Disziplin" in { + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.head, testResultate) == 10000000000L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(1).head, testResultate) == 1000000000000L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(2).head, testResultate) == 10000000000L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(3).head, testResultate) == 100000000000000L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(4).head, testResultate) == 10000000000L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(5).head, testResultate) == 10000000000000000L) } "construct combined rules" in { - assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testWertungen) == 810000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testWertungen) == 75000000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testWertungen) == 300000000000000L) - assert(Gleichstandsregel("E-Note-Summe/E-Note-Best").factorize(testWertungen.head, testWertungen) == 307500000000000L) - assert(Gleichstandsregel("E-Note-Summe/E-Note-Best/JugendVorAlter").factorize(testWertungen.head, testWertungen) == 307508100000000L) - assert(Gleichstandsregel("E-Note-Best/E-Note-Summe/JugendVorAlter").factorize(testWertungen.head, testWertungen) == 105008100000000L) - assert(Gleichstandsregel("JugendVorAlter/E-Note-Best/E-Note-Summe").factorize(testWertungen.head, testWertungen) == 11310000000000L) + assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testResultate) == 810000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testResultate) == 75000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testResultate) == 300000000000000L) + assert(Gleichstandsregel("E-Note-Summe/E-Note-Best").factorize(testWertungen.head, testResultate) == 307500000000000L) + assert(Gleichstandsregel("E-Note-Summe/E-Note-Best/JugendVorAlter").factorize(testWertungen.head, testResultate) == 307508100000000L) + assert(Gleichstandsregel("E-Note-Best/E-Note-Summe/JugendVorAlter").factorize(testWertungen.head, testResultate) == 105008100000000L) + assert(Gleichstandsregel("JugendVorAlter/E-Note-Best/E-Note-Summe").factorize(testWertungen.head, testResultate) == 11310000000000L) + } + + "toFormel" in { + assert(Gleichstandsregel("JugendVorAlter/E-Note-Best/E-Note-Summe/Disziplin(Reck,Sprung,Pauschen)").toFormel == "JugendVorAlter/E-Note-Best/E-Note-Summe/Disziplin(Reck,Sprung,Pauschen)") } } From 461e8f59232ef8955491ce9f5d9bef7b5bd04a1e Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sun, 7 May 2023 01:30:00 +0200 Subject: [PATCH 83/99] #684 Add Gleichstandsregel - Integrate in App --- .client/kutuapp.conf | 4 +- ...dPunktegleichstandsregelToWettkampf-pg.sql | 4 + ...tegleichstandsregelToWettkampf-sqllite.sql | 9 ++ src/main/scala/ch/seidel/kutu/KuTuApp.scala | 67 ++++++++++++- .../ch/seidel/kutu/data/GroupSection.scala | 49 ++-------- .../seidel/kutu/data/ResourceExchanger.scala | 1 + .../ch/seidel/kutu/domain/DBService.scala | 2 + .../kutu/domain/Gleichstellungsregel.scala | 60 ++++++++++-- .../seidel/kutu/domain/WertungService.scala | 14 +-- .../kutu/domain/WettkampfResultMapper.scala | 6 +- .../seidel/kutu/domain/WettkampfService.scala | 14 +-- .../scala/ch/seidel/kutu/domain/package.scala | 10 +- .../ch/seidel/kutu/http/JsonSupport.scala | 2 +- .../renderer/RiegenblattToHtmlRenderer.scala | 2 +- .../ch/seidel/kutu/base/KuTuBaseSpec.scala | 4 +- .../ch/seidel/kutu/base/TestDBService.scala | 1 + .../kutu/domain/GleichstandsregelTest.scala | 97 +++++++++++-------- .../ch/seidel/kutu/domain/WettkampfSpec.scala | 14 +-- 18 files changed, 231 insertions(+), 129 deletions(-) create mode 100644 src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql create mode 100644 src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql diff --git a/.client/kutuapp.conf b/.client/kutuapp.conf index 8ca49f713..2ba41a5a7 100644 --- a/.client/kutuapp.conf +++ b/.client/kutuapp.conf @@ -1,6 +1,6 @@ app { - fullversion = dev2.client.test - majorversion = dev2.client + fullversion = dev3.client.test + majorversion = dev3.client builddate = today remote { schema = "http" diff --git a/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql b/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql new file mode 100644 index 000000000..1b9d4f50a --- /dev/null +++ b/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql @@ -0,0 +1,4 @@ +-- ----------------------------------------------------- +-- Table wettkampf +-- ----------------------------------------------------- +ALTER TABLE wettkampf ADD punktegleichstandsregel varchar(254) DEFAULT ''; \ No newline at end of file diff --git a/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql b/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql new file mode 100644 index 000000000..f63c8c95a --- /dev/null +++ b/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql @@ -0,0 +1,9 @@ +-- ----------------------------------------------------- +-- Table wettkampf +-- ----------------------------------------------------- +--ALTER TABLE wettkampf ADD organisator varchar(255) DEFAULT ''; +--ALTER TABLE wettkampf ADD link_homepage varchar(255) DEFAULT ''; +--ALTER TABLE wettkampf ADD link_ausschreibung varchar(255) DEFAULT ''; +--ALTER TABLE wettkampf ADD ort varchar(255) DEFAULT ''; +--ALTER TABLE wettkampf ADD adresse varchar(255) DEFAULT ''; +ALTER TABLE wettkampf ADD punktegleichstandsregel varchar(254) DEFAULT ''; diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index cb61d3536..b843fe5a6 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -1,5 +1,6 @@ package ch.seidel.kutu +import ch.seidel.commons.PageDisplayer.showErrorDialog import ch.seidel.commons.{DisplayablePage, PageDisplayer, ProgressForm, TaskSteps} import ch.seidel.jwt import ch.seidel.kutu.Config._ @@ -12,6 +13,7 @@ import javafx.concurrent.Task import javafx.scene.control.DatePicker import net.glxn.qrgen.QRCode import net.glxn.qrgen.image.ImageType +import org.controlsfx.validation.{Severity, ValidationResult, ValidationSupport, Validator} import org.slf4j.LoggerFactory import scalafx.Includes._ import scalafx.application.JFXApp3.PrimaryStage @@ -286,6 +288,37 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport promptText = "Auszeichnung bei Erreichung des Mindest-Endwerts" text = p.auszeichnungendnote.toString } + val cmbPunktgleichstandsregel = new ComboBox[String]() { + prefWidth = 500 + Gleichstandsregel.predefined.foreach(definition => { + items.value.add(definition._1) + }) + promptText = "Rangierungsregel bei Punktegleichstand" + } + val txtPunktgleichstandsregel = new TextField { + prefWidth = 500 + promptText = "z.B. E-Note-Summe/E-NoteBest/Disziplin(Boden,Sprung)/JugendVorAlter" + text = p.punktegleichstandsregel + editable <== Bindings.createBooleanBinding(() => { + "Individuell".equals(cmbPunktgleichstandsregel.value.value) + }, + cmbPunktgleichstandsregel.selectionModel, + cmbPunktgleichstandsregel.value + ) + + cmbPunktgleichstandsregel.value.onChange { + text.value = Gleichstandsregel.predefined(cmbPunktgleichstandsregel.value.value) + if (text.value.isEmpty && !"Ohne".equals(cmbPunktgleichstandsregel.value.value)) { + text.value = p.punktegleichstandsregel + } + } + cmbProgramm.value.onChange { + text.value = Gleichstandsregel(p.toWettkampf.copy(programmId = cmbProgramm.selectionModel.value.getSelectedItem.id)).toFormel + } + + } + val validationSupport = new ValidationSupport + validationSupport.registerValidator(txtPunktgleichstandsregel, false, Gleichstandsregel.createValidator) val cmbAltersklassen = new ComboBox[String]() { prefWidth = 500 Altersklasse.predefinedAKs.foreach(definition => { @@ -351,6 +384,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport new Label(txtNotificationEMail.promptText.value), txtNotificationEMail, new Label(txtAuszeichnung.promptText.value), txtAuszeichnung, new Label(txtAuszeichnungEndnote.promptText.value), txtAuszeichnungEndnote, + cmbPunktgleichstandsregel, txtPunktgleichstandsregel, cmbAltersklassen, txtAltersklassen, cmbJGAltersklassen, txtJGAltersklassen ) @@ -388,7 +422,8 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport }, p.uuid, txtAltersklassen.text.value, - txtJGAltersklassen.text.value + txtJGAltersklassen.text.value, + txtPunktgleichstandsregel.text.value ) val dir = new java.io.File(homedir + "/" + w.easyprint.replace(" ", "_")) if (!dir.exists()) { @@ -1138,6 +1173,32 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport promptText = "Auszeichnung bei Erreichung des Mindest-Gerätedurchschnittwerts" text = "" } + val cmbPunktgleichstandsregel = new ComboBox[String]() { + prefWidth = 500 + Gleichstandsregel.predefined.foreach(definition => { + items.value.add(definition._1) + }) + promptText = "Rangierungsregel bei Punktegleichstand" + } + val txtPunktgleichstandsregel = new TextField { + prefWidth = 500 + promptText = "z.B. E-Note-Summe/E-NoteBest/Disziplin(Boden,Sprung)/JugendVorAlter" + editable <== Bindings.createBooleanBinding(() => { + "Individuell".equals(cmbPunktgleichstandsregel.value.value) + }, + cmbPunktgleichstandsregel.selectionModel, + cmbPunktgleichstandsregel.value + ) + + cmbPunktgleichstandsregel.value.onChange { + text.value = Gleichstandsregel.predefined(cmbPunktgleichstandsregel.value.value) + } + cmbProgramm.value.onChange { + text.value = Gleichstandsregel(cmbProgramm.selectionModel.value.getSelectedItem.id).toFormel + } + } + val validationSupport = new ValidationSupport + validationSupport.registerValidator(txtPunktgleichstandsregel, false, Gleichstandsregel.createValidator) val cmbAltersklassen = new ComboBox[String]() { prefWidth = 500 Altersklasse.predefinedAKs.foreach(definition => { @@ -1195,6 +1256,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport new Label(txtNotificationEMail.promptText.value), txtNotificationEMail, new Label(txtAuszeichnung.promptText.value), txtAuszeichnung, new Label(txtAuszeichnungEndnote.promptText.value), txtAuszeichnungEndnote, + cmbPunktgleichstandsregel, txtPunktgleichstandsregel, cmbAltersklassen, txtAltersklassen, cmbJGAltersklassen, txtJGAltersklassen ) @@ -1234,7 +1296,8 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport }, Some(UUID.randomUUID().toString()), txtAltersklassen.text.value, - txtJGAltersklassen.text.value + txtJGAltersklassen.text.value, + txtPunktgleichstandsregel.text.value ) val dir = new java.io.File(homedir + "/" + w.easyprint.replace(" ", "_")) if (!dir.exists()) { diff --git a/src/main/scala/ch/seidel/kutu/data/GroupSection.scala b/src/main/scala/ch/seidel/kutu/data/GroupSection.scala index 1029ababe..90d6b2d61 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupSection.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupSection.scala @@ -1,8 +1,9 @@ package ch.seidel.kutu.data +import ch.seidel.kutu.data.GroupSection.STANDARD_SCORE_FACTOR + import java.time._ import java.time.temporal._ - import ch.seidel.kutu.domain._ import scala.collection.mutable @@ -10,6 +11,8 @@ import scala.collection.mutable.StringBuilder import scala.math.BigDecimal.{double2bigDecimal, int2bigDecimal} object GroupSection { + val STANDARD_SCORE_FACTOR = 1000000000000000L + def programGrouper( w: WertungView): ProgrammView = w.wettkampfdisziplin.programm.aggregatorSubHead def disziplinGrouper( w: WertungView): (Int, Disziplin) = (w.wettkampfdisziplin.ord, w.wettkampfdisziplin.disziplin) def groupWertungList(list: Iterable[WertungView]) = { @@ -77,6 +80,7 @@ case class GroupLeaf(override val groupKey: DataObject, list: Iterable[WertungVi val isDivided = !(withDNotes || groups.isEmpty) val divider = if(!isDivided) 1 else groups.head._2.size + val gleichstandsregel = Gleichstandsregel(list.head.wettkampf) def buildColumns: List[WKCol] = { val athletCols: List[WKCol] = List( WKLeafCol[GroupRow](text = "Rang", prefWidth = 20, styleClass = Seq("data"), valueMapper = gr => { @@ -280,50 +284,11 @@ case class GroupLeaf(override val groupKey: DataObject, list: Iterable[WertungVi } def mapToAvgRowSummary(athlWertungen: Iterable[WertungView]): (Resultat, Resultat, Iterable[(Disziplin, Long, Resultat, Resultat, Option[Int], Option[BigDecimal])], Iterable[(ProgrammView, Resultat, Resultat, Option[Int], Option[BigDecimal])], Resultat) = { val wks = athlWertungen.filter(_.endnote.nonEmpty).groupBy { w => w.wettkampf } - val wksums = wks.map {wk => wk._2.map(w => w.resultat).reduce(_+_)} - val wkesums = wks.map {wk => wk._2.map(w => w.resultat.noteE).sum} sum - val wkdsums = wks.map {wk => wk._2.map(w => w.resultat.noteD).sum} sum + val wksums = wks.map {wk => wk._2.map(w => w.resultat).reduce(_+_)}.toList val rsum = if(wksums.nonEmpty) wksums.reduce(_+_) else Resultat(0,0,0) - lazy val getuDisziplinGOrder = Map(26L -> 1, 4L -> 2, 6L -> 3) - lazy val jet = LocalDate.now() - lazy val hundredyears = jet.minus(100, ChronoUnit.YEARS) - - def factorizeKuTu(w: WertungView): Long = { - // höchste E-Summe, höschste D-Summe, Jugend vor Alter - val gebdat = w.athlet.gebdat match {case Some(d) => d.toLocalDate case None => hundredyears} - val alterInTagen = jet.toEpochDay - gebdat.toEpochDay - val alterInJahren = alterInTagen / 365 - val altersfaktor = 100L - alterInJahren - val powered = wkesums * 10000L + wkdsums * 100L - (powered + altersfaktor).toLong - } - - def factorizeGeTu(w: WertungView): Long = { - val idx = 4 - getuDisziplinGOrder.getOrElse(w.wettkampfdisziplin.disziplin.id, 4) - val ret = if(idx == 0) { - 1L - } - else { - Math.floor(Math.pow(1000, idx)).toLong - } - ret - } val gwksums = wks.map {wk => wk._2.map{w => - val factor = w.wettkampf.programmId match { - case id if(id > 0 && id < 4) => // Athletiktest - 1L - case id if((id > 10 && id < 20) || id == 28) => // KuTu Programm - factorizeKuTu(w) - case id if(id > 19 && id < 27) => // GeTu Kategorie - factorizeGeTu(w) - case id if(id > 46 && id < 84) => // GeTu Kategorie - factorizeGeTu(w) - case id if(id > 30 && id < 41) => // KuTuRi Programm - factorizeKuTu(w) - case _ => 1L - } - (w.resultat * 1000000000000L) + (w.resultat * factor) + if (anzahWettkaempfe > 1) w.resultat else (w.resultat * STANDARD_SCORE_FACTOR) + (w.resultat * gleichstandsregel.factorize(w, wksums)) }.reduce(_+_)} val gsum = if(gwksums.nonEmpty) gwksums.reduce(_+_) else Resultat(0,0,0) val avg = if(wksums.nonEmpty) rsum / wksums.size else Resultat(0,0,0) diff --git a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala index a15a86f59..b16a53734 100644 --- a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala +++ b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala @@ -286,6 +286,7 @@ object ResourceExchanger extends KutuService with RiegenBuilder { notificationEMail = wettkampfHeader.get("notificationEMail").map(fields).getOrElse(""), altersklassen = wettkampfHeader.get("altersklassen").map(fields).getOrElse(""), jahrgangsklassen = wettkampfHeader.get("jahrgangsklassen").map(fields).getOrElse(""), + punktegleichstandsregel = wettkampfHeader.get("punktegleichstandsregel").map(fields).getOrElse(""), uuidOption = uuid ) diff --git a/src/main/scala/ch/seidel/kutu/domain/DBService.scala b/src/main/scala/ch/seidel/kutu/domain/DBService.scala index bb3853e2b..fec288248 100644 --- a/src/main/scala/ch/seidel/kutu/domain/DBService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/DBService.scala @@ -86,6 +86,7 @@ object DBService { , "AddWKDisziplinMetafields-sqllite.sql" , "AddWKTestPgms-sqllite.sql" , "AddAltersklassenToWettkampf-sqllite.sql" + , "AddPunktegleichstandsregelToWettkampf-sqllite.sql" ) (!dbfile.exists() || dbfile.length() == 0, Config.importDataFrom) match { @@ -176,6 +177,7 @@ object DBService { , "AddWKDisziplinMetafields-pg.sql" , "AddWKTestPgms-pg.sql" , "AddAltersklassenToWettkampf-pg.sql" + , "AddPunktegleichstandsregelToWettkampf-pg.sql" ) installDB(db, sqlScripts) /*Config.importDataFrom match { diff --git a/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala b/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala index 786ec323b..e81dc1885 100644 --- a/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala +++ b/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala @@ -1,5 +1,8 @@ package ch.seidel.kutu.domain +import ch.seidel.kutu.data.GroupSection.STANDARD_SCORE_FACTOR +import org.controlsfx.validation.{Severity, ValidationResult, Validator} + import java.time.temporal.ChronoUnit @@ -15,7 +18,20 @@ object Gleichstandsregel { val disziplinPattern = "^Disziplin\\((.+)\\)$".r def apply(formel: String): Gleichstandsregel = { + val gleichstandsregelList = parseFormel(formel) + validated(gleichstandsregelList) + } + + def validated(regel: Gleichstandsregel): Gleichstandsregel = { + if (STANDARD_SCORE_FACTOR / 100 < regel.powerRange) { + println(s"Max scorefactor ${STANDARD_SCORE_FACTOR / 100}, powerRange ${regel.powerRange}, zu gross: ${regel.powerRange - STANDARD_SCORE_FACTOR / 100}") + throw new RuntimeException("Bitte reduzieren, es sind zu viele Regeln definiert") + } + regel + } + private def parseFormel(formel: String) = { val regeln = formel.split("/").toList + val mappedFactorizers: List[Gleichstandsregel] = regeln.flatMap { case disziplinPattern(dl) => Some(GleichstandsregelDisziplin(dl.split(",").toList).asInstanceOf[Gleichstandsregel]) case "E-Note-Summe" => Some(GleichstandsregelENoteSumme.asInstanceOf[Gleichstandsregel]) @@ -24,7 +40,7 @@ object Gleichstandsregel { case "D-Note-Best" => Some(GleichstandsregelDNoteBest.asInstanceOf[Gleichstandsregel]) case "JugendVorAlter" => Some(GleichstandsregelJugendVorAlter.asInstanceOf[Gleichstandsregel]) case "Ohne" => Some(GleichstandsregelDefault.asInstanceOf[Gleichstandsregel]) - case _ => None + case s: String => throw new RuntimeException(s"Unbekannte Regel '$s'") } if (mappedFactorizers.isEmpty) { GleichstandsregelList(List(GleichstandsregelDefault)) @@ -32,8 +48,18 @@ object Gleichstandsregel { GleichstandsregelList(mappedFactorizers) } } +def createValidator: Validator[String] = (control, formeltext) => { + try { + val gleichstandsregelList = parseFormel(formeltext) + validated(gleichstandsregelList) + ValidationResult.fromMessageIf(control, "Formel valid", Severity.ERROR, false) + } catch { + case e: Exception => + ValidationResult.fromMessageIf(control, e.getMessage, Severity.ERROR, true) + } +} - def apply(programmId: Long): Gleichstandsregel = { +def apply(programmId: Long): Gleichstandsregel = { programmId match { case id if (id > 0 && id < 4) => // Athletiktest GleichstandsregelDefault @@ -46,12 +72,16 @@ object Gleichstandsregel { case _ => GleichstandsregelDefault } } - def apply(wettkampf: Wettkampf): Gleichstandsregel = this(wettkampf.programmId) + def apply(wettkampf: Wettkampf): Gleichstandsregel = wettkampf.punktegleichstandsregel match { + case Some(regel) if (regel.trim.nonEmpty) => this (regel) + case _ => this (wettkampf.programmId) + } } sealed trait Gleichstandsregel { def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long def toFormel: String + def powerRange: Long = 1L } case object GleichstandsregelDefault extends Gleichstandsregel { @@ -62,16 +92,22 @@ case object GleichstandsregelDefault extends Gleichstandsregel { case class GleichstandsregelList(regeln: List[Gleichstandsregel]) extends Gleichstandsregel { override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { regeln - .zipWithIndex - .map(regel => (regel._1.factorize(currentWertung, athlWertungen), regel._2)) - .map(t => Math.floor(Math.pow(10, 10 - t._2)).toLong * t._1) - .sum + .foldLeft((0L, STANDARD_SCORE_FACTOR / 10000L)){(acc, regel) => + val factor = regel.factorize(currentWertung, athlWertungen) + (acc._1 + factor * acc._2 / regel.powerRange, acc._2 / regel.powerRange) + } + ._1 } override def toFormel: String = regeln.map(_.toFormel).mkString("/") + override def powerRange: Long = regeln + .foldLeft(0L) { (acc, regel) => + acc + acc * regel.powerRange + } } case class GleichstandsregelDisziplin(disziplinOrder: List[String]) extends Gleichstandsregel { override def toFormel: String = s"Disziplin${disziplinOrder.mkString("(", ",", ")")}" + override def powerRange: Long = Math.pow(10000, disziplinOrder.size).toLong val reversedOrder = disziplinOrder.reverse override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { @@ -80,7 +116,7 @@ case class GleichstandsregelDisziplin(disziplinOrder: List[String]) extends Glei 1L } else { - Math.floor(Math.pow(100, idx)).toLong// idx.toLong + Math.pow(currentWertung.wettkampfdisziplin.max*100, idx).toLong } ret } @@ -89,6 +125,8 @@ case class GleichstandsregelDisziplin(disziplinOrder: List[String]) extends Glei case object GleichstandsregelJugendVorAlter extends Gleichstandsregel { override def toFormel: String = "JugendVorAlter" + override def powerRange: Long = 100L + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { val jet = currentWertung.wettkampf.datum.toLocalDate val gebdat = currentWertung.athlet.gebdat match { @@ -103,15 +141,17 @@ case object GleichstandsregelJugendVorAlter extends Gleichstandsregel { case object GleichstandsregelENoteBest extends Gleichstandsregel { override def toFormel: String = "E-Note-Best" + override def powerRange = 10000L override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { athlWertungen.map(_.noteE).max * 1000L toLong } + } case object GleichstandsregelENoteSumme extends Gleichstandsregel { override def toFormel: String = "E-Note-Summe" - + override def powerRange = 100000L override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { athlWertungen.map(_.noteE).sum * 1000L toLong } @@ -119,6 +159,7 @@ case object GleichstandsregelENoteSumme extends Gleichstandsregel { case object GleichstandsregelDNoteBest extends Gleichstandsregel { override def toFormel: String = "D-Note-Best" + override def powerRange = 10000L override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { athlWertungen.map(_.noteD).max * 1000L toLong @@ -127,6 +168,7 @@ case object GleichstandsregelDNoteBest extends Gleichstandsregel { case object GleichstandsregelDNoteSumme extends Gleichstandsregel { override def toFormel: String = "D-Note-Summe" + override def powerRange = 100000L override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { athlWertungen.map(_.noteD).sum * 1000L toLong diff --git a/src/main/scala/ch/seidel/kutu/domain/WertungService.scala b/src/main/scala/ch/seidel/kutu/domain/WertungService.scala index ed8e18c91..c6555d28f 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WertungService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WertungService.scala @@ -73,7 +73,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -95,7 +95,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -117,7 +117,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -258,7 +258,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -294,7 +294,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -391,7 +391,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di (sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -413,7 +413,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di (sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala index 27d211b86..b05f30132 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala @@ -15,7 +15,7 @@ abstract trait WettkampfResultMapper extends DisziplinResultMapper { def readProgramm(id: Long): ProgrammView implicit val getWettkampfResult = GetResult(r => - Wettkampf(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, r.<<, r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<)) + Wettkampf(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, r.<<, r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<, r.<<)) implicit val getWettkampfDisziplinResult = GetResult(r => Wettkampfdisziplin(r.<<, r.<<, r.<<, r.<<, r.nextBytesOption(), r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<)) @@ -27,10 +27,10 @@ abstract trait WettkampfResultMapper extends DisziplinResultMapper { } implicit def getWettkampfViewResultCached(implicit cache: scala.collection.mutable.Map[Long, ProgrammView]) = GetResult(r => - WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<[String], readProgramm(r.<<, cache), r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<)) + WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<[String], readProgramm(r.<<, cache), r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<, r.<<)) implicit def getWettkampfViewResult = GetResult(r => - WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, readProgramm(r.<<), r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<)) + WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, readProgramm(r.<<), r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<, r.<<)) implicit val getProgrammRawResult = GetResult(r => // id: Long, name: String, aggregate: Int, parentId: Long, ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index 497b3d728..8b0d254f8 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -90,7 +90,7 @@ trait WettkampfService extends DBService sql""" select wpt.id, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wd.id, wd.programm_id, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, wpt.wechsel, wpt.einturnen, wpt.uebung, wpt.wertung @@ -418,7 +418,7 @@ trait WettkampfService extends DBService seek(programmid, Seq.empty) } - def createWettkampf(datum: java.sql.Date, titel: String, programmId: Set[Long], notificationEMail: String, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuidOption: Option[String], altersklassen: String, jahrgangsklassen: String): Wettkampf = { + def createWettkampf(datum: java.sql.Date, titel: String, programmId: Set[Long], notificationEMail: String, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuidOption: Option[String], altersklassen: String, jahrgangsklassen: String, punktegleichstandsregel: String): Wettkampf = { val cache = scala.collection.mutable.Map[Long, ProgrammView]() val programs = programmId map (p => readProgramm(p, cache)) val heads = programs map (_.head) @@ -462,7 +462,8 @@ trait WettkampfService extends DBService set datum=$datum, titel=$titel, programm_Id=${heads.head.id}, notificationEMail=$notificationEMail, auszeichnung=$auszeichnung, auszeichnungendnote=$auszeichnungendnote, - altersklassen=$altersklassen, jahrgangsklassen=$jahrgangsklassen + altersklassen=$altersklassen, jahrgangsklassen=$jahrgangsklassen, + punktegleichstandsregel=$punktegleichstandsregel where id=$cid and uuid=$uuid """ >> initPlanZeitenActions(UUID.fromString(uuid)) >> @@ -473,8 +474,8 @@ trait WettkampfService extends DBService case _ => sqlu""" insert into wettkampf - (datum, titel, programm_Id, notificationEMail, auszeichnung, auszeichnungendnote, altersklassen, jahrgangsklassen, uuid) - values (${datum}, ${titel}, ${heads.head.id}, $notificationEMail, $auszeichnung, $auszeichnungendnote, $altersklassen, $jahrgangsklassen, $uuid) + (datum, titel, programm_Id, notificationEMail, auszeichnung, auszeichnungendnote, punktegleichstandsregel, altersklassen, jahrgangsklassen, uuid) + values (${datum}, ${titel}, ${heads.head.id}, $notificationEMail, $auszeichnung, $auszeichnungendnote, $punktegleichstandsregel, $altersklassen, $jahrgangsklassen, $uuid) """ >> initPlanZeitenActions(UUID.fromString(uuid)) >> sql""" @@ -499,7 +500,7 @@ trait WettkampfService extends DBService }, Duration.Inf) } - def saveWettkampf(id: Long, datum: java.sql.Date, titel: String, programmId: Set[Long], notificationEMail: String, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuidOption: Option[String], altersklassen: String, jahrgangsklassen: String): Wettkampf = { + def saveWettkampf(id: Long, datum: java.sql.Date, titel: String, programmId: Set[Long], notificationEMail: String, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuidOption: Option[String], altersklassen: String, jahrgangsklassen: String, punktegleichstandsregel: String): Wettkampf = { val uuid = uuidOption.getOrElse(UUID.randomUUID().toString()) val cache = scala.collection.mutable.Map[Long, ProgrammView]() val process = for { @@ -523,6 +524,7 @@ trait WettkampfService extends DBService auszeichnung=$auszeichnung, auszeichnungendnote=$auszeichnungendnote, altersklassen=$altersklassen, jahrgangsklassen=$jahrgangsklassen, + punktegleichstandsregel=$punktegleichstandsregel, uuid=$uuid where id=$id """ >> diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 297d7742b..5846cdd35 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -686,15 +686,15 @@ package object domain { // if(uuid != null) Wettkampf(id, datum, titel, programmId, auszeichnung, auszeichnungendnote, Some(uuid)) // else apply(id, datum, titel, programmId, auszeichnung, auszeichnungendnote) // } - case class Wettkampf(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: Option[String], jahrgangsklassen: Option[String]) extends DataObject { + case class Wettkampf(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: Option[String], jahrgangsklassen: Option[String], punktegleichstandsregel: Option[String]) extends DataObject { override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY" def toView(programm: ProgrammView): WettkampfView = { - WettkampfView(id, uuid, datum, titel, programm, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen.getOrElse(""), jahrgangsklassen.getOrElse("")) + WettkampfView(id, uuid, datum, titel, programm, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen.getOrElse(""), jahrgangsklassen.getOrElse(""), punktegleichstandsregel.getOrElse("")) } - def toPublic: Wettkampf = Wettkampf(id, uuid, datum, titel, programmId, auszeichnung, auszeichnung, "", altersklassen, jahrgangsklassen) + def toPublic: Wettkampf = Wettkampf(id, uuid, datum, titel, programmId, auszeichnung, auszeichnung, "", altersklassen, jahrgangsklassen, punktegleichstandsregel) private def prepareFilePath(homedir: String) = { val filename: String = encodeFileName(easyprint) @@ -784,10 +784,10 @@ package object domain { // if(uuid != null) WettkampfView(id, datum, titel, programm, auszeichnung, auszeichnungendnote, Some(uuid)) // else apply(id, datum, titel, programm, auszeichnung, auszeichnungendnote) // } - case class WettkampfView(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: String, jahrgangsklassen: String) extends DataObject { + case class WettkampfView(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: String, jahrgangsklassen: String, punktegleichstandsregel: String) extends DataObject { override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY" - def toWettkampf = Wettkampf(id, uuid, datum, titel, programm.id, auszeichnung, auszeichnungendnote, notificationEMail, Option(altersklassen), Option(jahrgangsklassen)) + def toWettkampf = Wettkampf(id, uuid, datum, titel, programm.id, auszeichnung, auszeichnungendnote, notificationEMail, Option(altersklassen), Option(jahrgangsklassen), Option(punktegleichstandsregel)) } case class PublishedScoreRaw(id: String, title: String, query: String, published: Boolean, publishedDate: java.sql.Date, wettkampfId: Long) extends DataObject { diff --git a/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala b/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala index 6017e9867..20ebb9d88 100644 --- a/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala +++ b/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala @@ -11,7 +11,7 @@ trait JsonSupport extends SprayJsonSupport with EnrichedJson { import DefaultJsonProtocol._ - implicit val wkFormat = jsonFormat(Wettkampf, "id", "uuid", "datum", "titel", "programmId", "auszeichnung", "auszeichnungendnote", "notificationEMail", "altersklassen", "jahrgangsklassen") + implicit val wkFormat = jsonFormat(Wettkampf, "id", "uuid", "datum", "titel", "programmId", "auszeichnung", "auszeichnungendnote", "notificationEMail", "altersklassen", "jahrgangsklassen", "punktegleichstandsregel") implicit val pgmFormat = jsonFormat9(ProgrammRaw) implicit val pgmListFormat = listFormat(pgmFormat) implicit val disziplinFormat = jsonFormat2(Disziplin) diff --git a/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala index 51c8985c6..aed130d3a 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala @@ -61,7 +61,7 @@ object RiegenBuilder { case Some(_) => acc case _ => acc :+ (Some(item) -> List[Riege]()) } - }.sortBy(geraet => dzl.indexOf(geraet._1.get)) + }.sortBy(geraet => geraet._1.map(g => dzl.indexOf(g))) val startformationen = pickStartformationen(geraete, durchgang, k => (k.einteilung, k.diszipline)) .zipWithIndex .map(x => { diff --git a/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala b/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala index ceb7666f9..93d4db021 100644 --- a/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala +++ b/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala @@ -18,7 +18,7 @@ trait KuTuBaseSpec extends AnyWordSpec with Matchers with DBService with KutuSer DBService.startDB(Some(TestDBService.db)) def insertGeTuWettkampf(name: String, anzvereine: Int) = { - val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(20L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString), "", "") + val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(20L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString), "", "", "") val programme: Seq[ProgrammView] = readWettkampfLeafs(wettkampf.programmId) val pgIds = programme.map(_.id)// 20 * 9 * 2 = 360 val vereine = for (v <- (1 to anzvereine)) yield { @@ -35,7 +35,7 @@ trait KuTuBaseSpec extends AnyWordSpec with Matchers with DBService with KutuSer wettkampf } def insertTurn10Wettkampf(name: String, anzvereine: Int) = { - val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(211L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString), "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19") + val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(211L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString), "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19", "") val programme: Seq[ProgrammView] = readWettkampfLeafs(wettkampf.programmId) val pgIds = programme.map(_.id) val vereine = for (v <- (1 to anzvereine)) yield { diff --git a/src/test/scala/ch/seidel/kutu/base/TestDBService.scala b/src/test/scala/ch/seidel/kutu/base/TestDBService.scala index b21336420..7f840e93b 100644 --- a/src/test/scala/ch/seidel/kutu/base/TestDBService.scala +++ b/src/test/scala/ch/seidel/kutu/base/TestDBService.scala @@ -56,6 +56,7 @@ object TestDBService { , "AddWKDisziplinMetafields-sqllite.sql" //, "AddWKTestPgms-sqllite.sql" , "AddAltersklassenToWettkampf-sqllite.sql" + , "AddPunktegleichstandsregelToWettkampf-sqllite.sql" ) installDBFunctions(tempDatabase) diff --git a/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala b/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala index f02584623..3ee89d93e 100644 --- a/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala +++ b/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala @@ -1,8 +1,8 @@ package ch.seidel.kutu.domain +import ch.seidel.kutu.data.GroupSection.STANDARD_SCORE_FACTOR import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec -import org.scalatest.Assertions._ import java.time.LocalDate import java.util.UUID @@ -27,10 +27,19 @@ class GleichstandsregelTest extends AnyWordSpec with Matchers { } val testResultate = testWertungen.map(_.resultat) + "check long-range" in { + val maxfactor = STANDARD_SCORE_FACTOR / 100 + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen,Boden,Ring)").factorize(testWertungen.head, testResultate) < maxfactor) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen,Boden)/E-Note-Summe/E-Note-Best/D-Note-Summe/D-Note-Best/JugendVorAlter").factorize(testWertungen.head, testResultate) < maxfactor) + assert(Gleichstandsregel("E-Note-Summe/E-Note-Best/JugendVorAlter").factorize(testWertungen.head, testResultate) < maxfactor) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen,Boden,Ring,Barren)/E-Note-Summe/E-Note-Best/D-Note-Summe/D-Note-Best/JugendVorAlter").factorize(testWertungen.head, testResultate) < maxfactor) + //assertThrows[RuntimeException](Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen,Boden,Ring,Barren)")) + //assertThrows[RuntimeException](Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen,Boden,Ring,Barren)/E-Note-Summe/E-Note-Best/D-Note-Summe/D-Note-Best/JugendVorAlter")) + } + "Ohne - Default" in { - // 100 - (2023 - 2004) = 81 - assert(Gleichstandsregel("Ohne").factorize(testWertungen.head, testResultate) == 10000000000L) - assert(Gleichstandsregel("").factorize(testWertungen.head, testResultate) == 10000000000L) + assert(Gleichstandsregel("Ohne").factorize(testWertungen.head, testResultate) == 100000000000L) + assertThrows[RuntimeException](Gleichstandsregel("").factorize(testWertungen.head, testResultate)) } "wettkampf-constructor" in { @@ -40,62 +49,66 @@ class GleichstandsregelTest extends AnyWordSpec with Matchers { "Jugend vor Alter" in { // 100 - (2023 - 2004) = 81 - assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testResultate) == 810000000000L) + assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testResultate) == 81000000000L) } "factorize E-Note-Best" in { - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testResultate) == 75000000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(1).head, testResultate) == 75000000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(2).head, testResultate) == 75000000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(3).head, testResultate) == 75000000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(4).head, testResultate) == 75000000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(5).head, testResultate) == 75000000000000L) + println(testResultate.map(_.noteE).max) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testResultate) == 75000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(1).head, testResultate) == 75000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(2).head, testResultate) == 75000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(3).head, testResultate) == 75000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(4).head, testResultate) == 75000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(5).head, testResultate) == 75000000000L) } "factorize E-Note-Summe" in { - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testResultate) == 300000000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(1).head, testResultate) == 300000000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(2).head, testResultate) == 300000000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(3).head, testResultate) == 300000000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(4).head, testResultate) == 300000000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(5).head, testResultate) == 300000000000000L) + println(testResultate.reduce(_+_).noteE) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testResultate) == 30000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(1).head, testResultate) == 30000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(2).head, testResultate) == 30000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(3).head, testResultate) == 30000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(4).head, testResultate) == 30000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(5).head, testResultate) == 30000000000L) } "factorize D-Note-Best" in { - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.head, testResultate) == 82000000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(1).head, testResultate) == 82000000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(2).head, testResultate) == 82000000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(3).head, testResultate) == 82000000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(4).head, testResultate) == 82000000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(5).head, testResultate) == 82000000000000L) + println(testResultate.map(_.noteE).max) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.head, testResultate) == 82000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(1).head, testResultate) == 82000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(2).head, testResultate) == 82000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(3).head, testResultate) == 82000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(4).head, testResultate) == 82000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(5).head, testResultate) == 82000000000L) } "factorize D-Note-Summe" in { - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.head, testResultate) == 342000000000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(1).head, testResultate) == 342000000000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(2).head, testResultate) == 342000000000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(3).head, testResultate) == 342000000000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(4).head, testResultate) == 342000000000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(5).head, testResultate) == 342000000000000L) + println(testResultate.reduce(_+_).noteD) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.head, testResultate) == 34200000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(1).head, testResultate) == 34200000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(2).head, testResultate) == 34200000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(3).head, testResultate) == 34200000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(4).head, testResultate) == 34200000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(5).head, testResultate) == 34200000000L) } "factorize Disziplin" in { - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.head, testResultate) == 10000000000L) - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(1).head, testResultate) == 1000000000000L) - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(2).head, testResultate) == 10000000000L) - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(3).head, testResultate) == 100000000000000L) - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(4).head, testResultate) == 10000000000L) - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(5).head, testResultate) == 10000000000000000L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.head, testResultate) == 0L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(1).head, testResultate) == 300L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(2).head, testResultate) == 0L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(3).head, testResultate) == 900000L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(4).head, testResultate) == 0L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(5).head, testResultate) == 6775365L) } "construct combined rules" in { - assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testResultate) == 810000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testResultate) == 75000000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testResultate) == 300000000000000L) - assert(Gleichstandsregel("E-Note-Summe/E-Note-Best").factorize(testWertungen.head, testResultate) == 307500000000000L) - assert(Gleichstandsregel("E-Note-Summe/E-Note-Best/JugendVorAlter").factorize(testWertungen.head, testResultate) == 307508100000000L) - assert(Gleichstandsregel("E-Note-Best/E-Note-Summe/JugendVorAlter").factorize(testWertungen.head, testResultate) == 105008100000000L) - assert(Gleichstandsregel("JugendVorAlter/E-Note-Best/E-Note-Summe").factorize(testWertungen.head, testResultate) == 11310000000000L) + assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testResultate) == 81000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testResultate) == 75000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testResultate) == 30000000000L) + assert(Gleichstandsregel("E-Note-Summe/E-Note-Best").factorize(testWertungen.head, testResultate) == 30000750000L) + assert(Gleichstandsregel("E-Note-Summe/E-Note-Best/JugendVorAlter").factorize(testWertungen.head, testResultate) == 30000750081L) + assert(Gleichstandsregel("E-Note-Best/E-Note-Summe/JugendVorAlter").factorize(testWertungen.head, testResultate) == 75003000081L) + assert(Gleichstandsregel("JugendVorAlter/E-Note-Best/E-Note-Summe").factorize(testWertungen.head, testResultate) == 81750030000L) } "toFormel" in { diff --git a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala index 2daf4dfc5..a46878ef6 100644 --- a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala @@ -10,15 +10,15 @@ import scala.util.matching.Regex class WettkampfSpec extends KuTuBaseSpec { "wettkampf" should { "create with disziplin-plan-times" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel", Set(20), "testmail@test.com", 33, 0, None, "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19") + val wettkampf = createWettkampf(LocalDate.now(), "titel", Set(20), "testmail@test.com", 33, 0, None, "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19", "") assert(wettkampf.id > 0L) val views = initWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(views.nonEmpty) } "update" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "") - val wettkampfsaved = saveWettkampf(wettkampf.id, wettkampf.datum, "neuer titel", Set(wettkampf.programmId), "testmail@test.com", 10000, 7.5, wettkampf.uuid, "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19") + val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "", "") + val wettkampfsaved = saveWettkampf(wettkampf.id, wettkampf.datum, "neuer titel", Set(wettkampf.programmId), "testmail@test.com", 10000, 7.5, wettkampf.uuid, "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19", "") assert(wettkampfsaved.titel == "neuer titel") assert(wettkampfsaved.auszeichnung == 10000) assert(wettkampfsaved.altersklassen.get == "7,8,9,11,13,15,17,19") @@ -26,18 +26,18 @@ class WettkampfSpec extends KuTuBaseSpec { } "recreate with disziplin-plan-times" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "") + val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "", "") assert(wettkampf.id > 0L) val views = initWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(views.nonEmpty) - val wettkampf2 = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, wettkampf.uuid, "", "") + val wettkampf2 = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, wettkampf.uuid, "", "", "") assert(wettkampf2.id == wettkampf.id) val views2 = initWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(views2.size == views.size) } "update disziplin-plan-time" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "") + val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "", "") assert(wettkampf.id > 0L) val views = initWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) @@ -47,7 +47,7 @@ class WettkampfSpec extends KuTuBaseSpec { } "delete all disziplin-plan-time entries when wk is deleted" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel3", Set(20), "testmail@test.com", 33, 0, None, "", "") + val wettkampf = createWettkampf(LocalDate.now(), "titel3", Set(20), "testmail@test.com", 33, 0, None, "", "", "") deleteWettkampf(wettkampf.id) val reloaded = loadWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(reloaded.isEmpty) From 05daee0c76b8948ddf9c9240cf4e0e0b47426d7b Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Tue, 9 May 2023 01:11:22 +0200 Subject: [PATCH 84/99] #684 Adjust Gleichstandsregel - Integrate in App --- .../ch/seidel/kutu/data/GroupSection.scala | 9 +- .../kutu/domain/Gleichstellungsregel.scala | 52 +++++----- .../scala/ch/seidel/kutu/domain/package.scala | 2 + .../kutu/domain/GleichstandsregelTest.scala | 96 ++++++++++--------- 4 files changed, 86 insertions(+), 73 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/data/GroupSection.scala b/src/main/scala/ch/seidel/kutu/data/GroupSection.scala index 90d6b2d61..283e17fb9 100644 --- a/src/main/scala/ch/seidel/kutu/data/GroupSection.scala +++ b/src/main/scala/ch/seidel/kutu/data/GroupSection.scala @@ -1,6 +1,6 @@ package ch.seidel.kutu.data -import ch.seidel.kutu.data.GroupSection.STANDARD_SCORE_FACTOR +import ch.seidel.kutu.data.GroupSection.{STANDARD_SCORE_FACTOR} import java.time._ import java.time.temporal._ @@ -11,7 +11,7 @@ import scala.collection.mutable.StringBuilder import scala.math.BigDecimal.{double2bigDecimal, int2bigDecimal} object GroupSection { - val STANDARD_SCORE_FACTOR = 1000000000000000L + val STANDARD_SCORE_FACTOR = BigDecimal("1000000000000000000000") def programGrouper( w: WertungView): ProgrammView = w.wettkampfdisziplin.programm.aggregatorSubHead def disziplinGrouper( w: WertungView): (Int, Disziplin) = (w.wettkampfdisziplin.ord, w.wettkampfdisziplin.disziplin) @@ -288,7 +288,10 @@ case class GroupLeaf(override val groupKey: DataObject, list: Iterable[WertungVi val rsum = if(wksums.nonEmpty) wksums.reduce(_+_) else Resultat(0,0,0) val gwksums = wks.map {wk => wk._2.map{w => - if (anzahWettkaempfe > 1) w.resultat else (w.resultat * STANDARD_SCORE_FACTOR) + (w.resultat * gleichstandsregel.factorize(w, wksums)) + if (anzahWettkaempfe > 1) + w.resultat + else + (w.resultat * STANDARD_SCORE_FACTOR) + (w.resultat * gleichstandsregel.factorize(w, wksums)) }.reduce(_+_)} val gsum = if(gwksums.nonEmpty) gwksums.reduce(_+_) else Resultat(0,0,0) val avg = if(wksums.nonEmpty) rsum / wksums.size else Resultat(0,0,0) diff --git a/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala b/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala index e81dc1885..2cb078bab 100644 --- a/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala +++ b/src/main/scala/ch/seidel/kutu/domain/Gleichstellungsregel.scala @@ -4,6 +4,7 @@ import ch.seidel.kutu.data.GroupSection.STANDARD_SCORE_FACTOR import org.controlsfx.validation.{Severity, ValidationResult, Validator} import java.time.temporal.ChronoUnit +import scala.math.BigDecimal.{RoundingMode, long2bigDecimal} object Gleichstandsregel { @@ -23,9 +24,14 @@ object Gleichstandsregel { } def validated(regel: Gleichstandsregel): Gleichstandsregel = { - if (STANDARD_SCORE_FACTOR / 100 < regel.powerRange) { - println(s"Max scorefactor ${STANDARD_SCORE_FACTOR / 100}, powerRange ${regel.powerRange}, zu gross: ${regel.powerRange - STANDARD_SCORE_FACTOR / 100}") - throw new RuntimeException("Bitte reduzieren, es sind zu viele Regeln definiert") + try { + if (STANDARD_SCORE_FACTOR / 1000L < regel.powerRange) { + println(s"Max scorefactor ${STANDARD_SCORE_FACTOR / 1000L}, powerRange ${regel.powerRange}, zu gross: ${regel.powerRange - STANDARD_SCORE_FACTOR / 1000L}") + throw new RuntimeException("Bitte reduzieren, es sind zu viele Regeln definiert") + } + } catch { + case _: ArithmeticException => throw new RuntimeException("Bitte reduzieren, es sind zu viele Regeln definiert") + case y: Exception => throw y } regel } @@ -79,30 +85,30 @@ def apply(programmId: Long): Gleichstandsregel = { } sealed trait Gleichstandsregel { - def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long + def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): BigDecimal def toFormel: String def powerRange: Long = 1L } case object GleichstandsregelDefault extends Gleichstandsregel { - override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = 1 + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): BigDecimal = 1 override def toFormel: String = "Ohne" } case class GleichstandsregelList(regeln: List[Gleichstandsregel]) extends Gleichstandsregel { - override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): BigDecimal = { regeln - .foldLeft((0L, STANDARD_SCORE_FACTOR / 10000L)){(acc, regel) => + .foldLeft((BigDecimal(0), STANDARD_SCORE_FACTOR / 1000L)){(acc, regel) => val factor = regel.factorize(currentWertung, athlWertungen) (acc._1 + factor * acc._2 / regel.powerRange, acc._2 / regel.powerRange) } - ._1 + ._1.setScale(0, RoundingMode.HALF_UP) } override def toFormel: String = regeln.map(_.toFormel).mkString("/") override def powerRange: Long = regeln - .foldLeft(0L) { (acc, regel) => + .foldRight(BigDecimal(1L)) { (regel, acc) => acc + acc * regel.powerRange - } + }.toLongExact } case class GleichstandsregelDisziplin(disziplinOrder: List[String]) extends Gleichstandsregel { @@ -110,15 +116,15 @@ case class GleichstandsregelDisziplin(disziplinOrder: List[String]) extends Glei override def powerRange: Long = Math.pow(10000, disziplinOrder.size).toLong val reversedOrder = disziplinOrder.reverse - override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): BigDecimal = { val idx = 1 + reversedOrder.indexOf(currentWertung.wettkampfdisziplin.disziplin.name) val ret = if (idx <= 0) { - 1L + BigDecimal(1L) } else { - Math.pow(currentWertung.wettkampfdisziplin.max*100, idx).toLong + BigDecimal(Math.pow(currentWertung.wettkampfdisziplin.max*100, idx)) } - ret + ret.setScale(0, RoundingMode.HALF_UP) } } @@ -127,7 +133,7 @@ case object GleichstandsregelJugendVorAlter extends Gleichstandsregel { override def powerRange: Long = 100L - override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): BigDecimal = { val jet = currentWertung.wettkampf.datum.toLocalDate val gebdat = currentWertung.athlet.gebdat match { case Some(d) => d.toLocalDate @@ -143,8 +149,8 @@ case object GleichstandsregelENoteBest extends Gleichstandsregel { override def toFormel: String = "E-Note-Best" override def powerRange = 10000L - override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { - athlWertungen.map(_.noteE).max * 1000L toLong + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): BigDecimal = { + athlWertungen.map(_.noteE).max * 1000L setScale(0, RoundingMode.HALF_UP) } } @@ -152,8 +158,8 @@ case object GleichstandsregelENoteBest extends Gleichstandsregel { case object GleichstandsregelENoteSumme extends Gleichstandsregel { override def toFormel: String = "E-Note-Summe" override def powerRange = 100000L - override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { - athlWertungen.map(_.noteE).sum * 1000L toLong + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): BigDecimal = { + athlWertungen.map(_.noteE).sum * 1000L setScale(0, RoundingMode.HALF_UP) } } @@ -161,8 +167,8 @@ case object GleichstandsregelDNoteBest extends Gleichstandsregel { override def toFormel: String = "D-Note-Best" override def powerRange = 10000L - override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { - athlWertungen.map(_.noteD).max * 1000L toLong + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): BigDecimal = { + athlWertungen.map(_.noteD).max * 1000L setScale(0, RoundingMode.HALF_UP) } } @@ -170,7 +176,7 @@ case object GleichstandsregelDNoteSumme extends Gleichstandsregel { override def toFormel: String = "D-Note-Summe" override def powerRange = 100000L - override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): Long = { - athlWertungen.map(_.noteD).sum * 1000L toLong + override def factorize(currentWertung: WertungView, athlWertungen: List[Resultat]): BigDecimal = { + athlWertungen.map(_.noteD).sum * 1000L setScale(0, RoundingMode.HALF_UP) } } diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index 5846cdd35..fbf98e283 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -840,10 +840,12 @@ package object domain { case class Resultat(noteD: scala.math.BigDecimal, noteE: scala.math.BigDecimal, endnote: scala.math.BigDecimal) extends DataObject { def +(r: Resultat) = Resultat(noteD + r.noteD, noteE + r.noteE, endnote + r.endnote) + def +(r: BigDecimal) = Resultat(noteD + r, noteE + r, endnote + r) def /(cnt: Int) = Resultat(noteD / cnt, noteE / cnt, endnote / cnt) def *(cnt: Long) = Resultat(noteD * cnt, noteE * cnt, endnote * cnt) + def *(cnt: BigDecimal) = Resultat(noteD * cnt, noteE * cnt, endnote * cnt) lazy val formattedD = if (noteD > 0) f"${noteD}%4.2f" else "" lazy val formattedE = if (noteE > 0) f"${noteE}%4.2f" else "" diff --git a/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala b/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala index 3ee89d93e..ba3a9bc6e 100644 --- a/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala +++ b/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala @@ -28,17 +28,17 @@ class GleichstandsregelTest extends AnyWordSpec with Matchers { val testResultate = testWertungen.map(_.resultat) "check long-range" in { - val maxfactor = STANDARD_SCORE_FACTOR / 100 - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen,Boden,Ring)").factorize(testWertungen.head, testResultate) < maxfactor) - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen,Boden)/E-Note-Summe/E-Note-Best/D-Note-Summe/D-Note-Best/JugendVorAlter").factorize(testWertungen.head, testResultate) < maxfactor) - assert(Gleichstandsregel("E-Note-Summe/E-Note-Best/JugendVorAlter").factorize(testWertungen.head, testResultate) < maxfactor) - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen,Boden,Ring,Barren)/E-Note-Summe/E-Note-Best/D-Note-Summe/D-Note-Best/JugendVorAlter").factorize(testWertungen.head, testResultate) < maxfactor) - //assertThrows[RuntimeException](Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen,Boden,Ring,Barren)")) - //assertThrows[RuntimeException](Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen,Boden,Ring,Barren)/E-Note-Summe/E-Note-Best/D-Note-Summe/D-Note-Best/JugendVorAlter")) + val maxfactor = STANDARD_SCORE_FACTOR / 1000L + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(5).head, testResultate) < maxfactor) + assert(Gleichstandsregel("E-Note-Summe/E-Note-Best/D-Note-Summe").factorize(testWertungen.drop(5).head, testResultate) < maxfactor) + assert(Gleichstandsregel("E-Note-Summe/E-Note-Best/D-Note-Summe/JugendVorAlter").factorize(testWertungen.drop(5).head, testResultate) < maxfactor) + assert(Gleichstandsregel("E-Note-Summe/E-Note-Best/D-Note-Best").factorize(testWertungen.drop(5).head, testResultate) < maxfactor) + assertThrows[RuntimeException](Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen,Boden,Ring,Barren)")) + assertThrows[RuntimeException](Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen,Boden,Ring,Barren)/E-Note-Summe/E-Note-Best/D-Note-Summe/D-Note-Best/JugendVorAlter")) } "Ohne - Default" in { - assert(Gleichstandsregel("Ohne").factorize(testWertungen.head, testResultate) == 100000000000L) + assert(Gleichstandsregel("Ohne").factorize(testWertungen.head, testResultate) == 1000000000000000000L) assertThrows[RuntimeException](Gleichstandsregel("").factorize(testWertungen.head, testResultate)) } @@ -49,69 +49,71 @@ class GleichstandsregelTest extends AnyWordSpec with Matchers { "Jugend vor Alter" in { // 100 - (2023 - 2004) = 81 - assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testResultate) == 81000000000L) + assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testResultate) == 810000000000000000L) } "factorize E-Note-Best" in { println(testResultate.map(_.noteE).max) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testResultate) == 75000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(1).head, testResultate) == 75000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(2).head, testResultate) == 75000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(3).head, testResultate) == 75000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(4).head, testResultate) == 75000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(5).head, testResultate) == 75000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testResultate) == 750000000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(1).head, testResultate) == 750000000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(2).head, testResultate) == 750000000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(3).head, testResultate) == 750000000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(4).head, testResultate) == 750000000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.drop(5).head, testResultate) == 750000000000000000L) } "factorize E-Note-Summe" in { println(testResultate.reduce(_+_).noteE) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testResultate) == 30000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(1).head, testResultate) == 30000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(2).head, testResultate) == 30000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(3).head, testResultate) == 30000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(4).head, testResultate) == 30000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(5).head, testResultate) == 30000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testResultate) == 300000000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(1).head, testResultate) == 300000000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(2).head, testResultate) == 300000000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(3).head, testResultate) == 300000000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(4).head, testResultate) == 300000000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.drop(5).head, testResultate) == 300000000000000000L) } "factorize D-Note-Best" in { println(testResultate.map(_.noteE).max) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.head, testResultate) == 82000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(1).head, testResultate) == 82000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(2).head, testResultate) == 82000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(3).head, testResultate) == 82000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(4).head, testResultate) == 82000000000L) - assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(5).head, testResultate) == 82000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.head, testResultate) == 820000000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(1).head, testResultate) == 820000000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(2).head, testResultate) == 820000000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(3).head, testResultate) == 820000000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(4).head, testResultate) == 820000000000000000L) + assert(Gleichstandsregel("D-Note-Best").factorize(testWertungen.drop(5).head, testResultate) == 820000000000000000L) } "factorize D-Note-Summe" in { println(testResultate.reduce(_+_).noteD) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.head, testResultate) == 34200000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(1).head, testResultate) == 34200000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(2).head, testResultate) == 34200000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(3).head, testResultate) == 34200000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(4).head, testResultate) == 34200000000L) - assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(5).head, testResultate) == 34200000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.head, testResultate) == 342000000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(1).head, testResultate) == 342000000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(2).head, testResultate) == 342000000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(3).head, testResultate) == 342000000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(4).head, testResultate) == 342000000000000000L) + assert(Gleichstandsregel("D-Note-Summe").factorize(testWertungen.drop(5).head, testResultate) == 342000000000000000L) } "factorize Disziplin" in { - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.head, testResultate) == 0L) - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(1).head, testResultate) == 300L) - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(2).head, testResultate) == 0L) - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(3).head, testResultate) == 900000L) - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(4).head, testResultate) == 0L) - assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(5).head, testResultate) == 6775365L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.head, testResultate) == 1000000L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(1).head, testResultate) == 3000000000L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(2).head, testResultate) == 1000000L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(3).head, testResultate) == 9000000000000L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(4).head, testResultate) == 1000000L) + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").factorize(testWertungen.drop(5).head, testResultate) == 27000000000000000L) } "construct combined rules" in { - assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testResultate) == 81000000000L) - assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testResultate) == 75000000000L) - assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testResultate) == 30000000000L) - assert(Gleichstandsregel("E-Note-Summe/E-Note-Best").factorize(testWertungen.head, testResultate) == 30000750000L) - assert(Gleichstandsregel("E-Note-Summe/E-Note-Best/JugendVorAlter").factorize(testWertungen.head, testResultate) == 30000750081L) - assert(Gleichstandsregel("E-Note-Best/E-Note-Summe/JugendVorAlter").factorize(testWertungen.head, testResultate) == 75003000081L) - assert(Gleichstandsregel("JugendVorAlter/E-Note-Best/E-Note-Summe").factorize(testWertungen.head, testResultate) == 81750030000L) + assert(Gleichstandsregel("JugendVorAlter").factorize(testWertungen.head, testResultate) == 810000000000000000L) + assert(Gleichstandsregel("E-Note-Best").factorize(testWertungen.head, testResultate) == 750000000000000000L) + assert(Gleichstandsregel("E-Note-Summe").factorize(testWertungen.head, testResultate) == 300000000000000000L) + assert(Gleichstandsregel("E-Note-Summe/E-Note-Best").factorize(testWertungen.head, testResultate) == 300007500000000000L) + assert(Gleichstandsregel("E-Note-Summe/E-Note-Best/JugendVorAlter").factorize(testWertungen.head, testResultate) == 300007500810000000L) + assert(Gleichstandsregel("E-Note-Best/E-Note-Summe/JugendVorAlter").factorize(testWertungen.head, testResultate) == 750030000810000000L) + assert(Gleichstandsregel("JugendVorAlter/E-Note-Best/E-Note-Summe").factorize(testWertungen.head, testResultate) == 817500300000000000L) } "toFormel" in { - assert(Gleichstandsregel("JugendVorAlter/E-Note-Best/E-Note-Summe/Disziplin(Reck,Sprung,Pauschen)").toFormel == "JugendVorAlter/E-Note-Best/E-Note-Summe/Disziplin(Reck,Sprung,Pauschen)") + assert(Gleichstandsregel("JugendVorAlter/E-Note-Best/E-Note-Summe").toFormel == "JugendVorAlter/E-Note-Best/E-Note-Summe") + assert(Gleichstandsregel("Disziplin(Reck,Sprung,Pauschen)").toFormel == "Disziplin(Reck,Sprung,Pauschen)") + assert(Gleichstandsregel("D-Note-Best/D-Note-Summe").toFormel == "D-Note-Best/D-Note-Summe") } } From d2b0da7e809fae7c3b9d596cd35ea384dc5d28dc Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sun, 21 May 2023 14:58:26 +0200 Subject: [PATCH 85/99] #684 Add Gleichstandsregel - map existing gleichstandsregel in edit competition-dlg --- src/main/scala/ch/seidel/kutu/KuTuApp.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index b843fe5a6..001aa837a 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -298,7 +298,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport val txtPunktgleichstandsregel = new TextField { prefWidth = 500 promptText = "z.B. E-Note-Summe/E-NoteBest/Disziplin(Boden,Sprung)/JugendVorAlter" - text = p.punktegleichstandsregel + text = Gleichstandsregel(p.toWettkampf).toFormel editable <== Bindings.createBooleanBinding(() => { "Individuell".equals(cmbPunktgleichstandsregel.value.value) }, @@ -377,6 +377,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport hgrow = Priority.Always vgrow = Priority.Always center = new VBox { + spacing = 5.0 children.addAll( new Label(txtDatum.promptText.value), txtDatum, new Label(txtTitel.promptText.value), txtTitel, @@ -1249,6 +1250,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport hgrow = Priority.Always vgrow = Priority.Always center = new VBox { + spacing = 5.0 children.addAll( new Label(txtDatum.promptText.value), txtDatum, new Label(txtTitel.promptText.value), txtTitel, From 29ca46ae7fbbac793ed88212084f5194e451a8a3 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sun, 21 May 2023 17:37:15 +0200 Subject: [PATCH 86/99] #685 Add logic that ensures rotation of starting order over multiple competitions --- .../renderer/RiegenblattToHtmlRenderer.scala | 54 ++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala index aed130d3a..5ae7cdacd 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala @@ -26,7 +26,7 @@ object RiegenBuilder { diszipline.map(_.id).contains(disziplin.map(_.id).getOrElse(0)) case None => false } - }.sortBy { x => (if (groupByProgramm) x.programm else "") + x.verein + x.jahrgang + x.geschlecht + x.name + x.vorname} + }.sortBy { riegenSorter(groupByProgramm)} val completed = tuti. flatMap(k => k.wertungen). @@ -130,6 +130,58 @@ object RiegenBuilder { riegen } + + def rotate(text: String, offset: Int): String = { + text.trim.toUpperCase().map(rotate(_, offset)) + } + def rotate(text: Char, offset: Int): Char = { + val r1 = text + offset + val r2 = if (r1 > 'Z') { + r1 - 26 + } else if (r1 < 'A') { + r1 + 26 + } else { + r1 + } + r2.toChar + } + private def riegenSorter(groupByProgramm: Boolean): Kandidat=>String = kandidat => { + val programm = if (groupByProgramm) kandidat.programm else "" + if (kandidat.wertungen.nonEmpty) { + val date = kandidat.wertungen.head.wettkampf.datum.toLocalDate + val alter = try { + val bdate: Int =str2Int(kandidat.jahrgang) + date.getYear - bdate + } catch { + case _:NumberFormatException => 100 + } + val jahrgang = if (alter > 15) "0000" else kandidat.jahrgang + val day = date.getDayOfYear + val reversed = day % 2 == 0 + val alphaOffset = day % 26 + val vereinL0 = kandidat.verein + .replaceAll("BTV", "") + .replaceAll("DTV", "") + .replaceAll("STV", "") + .replaceAll("GETU", "") + .replaceAll("TSV", "") + .replaceAll("TV", "") + .replaceAll("TZ", "") + .replaceAll(" ", "") + val vereinL1 = if (reversed) vereinL0.reverse else vereinL0 + val vereinL2 = rotate(vereinL1, alphaOffset) + val geschlecht = if (reversed) kandidat.geschlecht.reverse else kandidat.geschlecht + val nameL1 = if (reversed) kandidat.name.reverse else kandidat.name + val nameL2 = rotate(nameL1, alphaOffset) + val vornameL1 = if (reversed) kandidat.vorname.reverse else kandidat.vorname + val vornameL2 = rotate(vornameL1, alphaOffset) + val value = f"<$programm%20s $vereinL2%-30s $jahrgang%4s $geschlecht%-10s $nameL2%-20s $vornameL2%-20s>" + value + } else { + s"$programm ${kandidat.verein} ${kandidat.jahrgang} ${kandidat.geschlecht} ${kandidat.name} ${kandidat.vorname}" + } + } + } trait RiegenblattToHtmlRenderer { From 8582968796d08f956e9f9e972601a1fa258bb54e Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Sun, 21 May 2023 23:10:10 +0200 Subject: [PATCH 87/99] #688 Add List memberlist grouped by "durchgang" - RiegenTab for selected and for all - NetworkTab for selected and for all --- .../KategorieTeilnehmerToHtmlRenderer.scala | 74 ++++++++++++++----- .../ch/seidel/kutu/view/ExportFunctions.scala | 40 +++++++++- .../ch/seidel/kutu/view/NetworkTab.scala | 43 ++++++++++- .../scala/ch/seidel/kutu/view/RiegenTab.scala | 60 ++++++++++++--- .../kutu/view/WettkampfWertungTab.scala | 6 +- 5 files changed, 190 insertions(+), 33 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/renderer/KategorieTeilnehmerToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/KategorieTeilnehmerToHtmlRenderer.scala index 71bad945e..9a590ffc4 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/KategorieTeilnehmerToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/KategorieTeilnehmerToHtmlRenderer.scala @@ -6,11 +6,12 @@ import ch.seidel.kutu.domain.GeraeteRiege import ch.seidel.kutu.renderer.PrintUtil._ import org.slf4j.LoggerFactory +case class Kandidat(wettkampfTitel: String, geschlecht: String, programm: String, + name: String, vorname: String, jahrgang: String, verein: String, + riege: String, durchgang: String, start: String, diszipline: Seq[String]) + trait KategorieTeilnehmerToHtmlRenderer { val logger = LoggerFactory.getLogger(classOf[KategorieTeilnehmerToHtmlRenderer]) - case class Kandidat(wettkampfTitel: String, geschlecht: String, programm: String, - name: String, vorname: String, jahrgang: String, verein: String, - riege: String, durchgang: String, start: String, diszipline: Seq[String]) val intro = """ @@ -154,24 +155,43 @@ trait KategorieTeilnehmerToHtmlRenderer { """ } - def riegenToKategorienListeAsHTML(riegen: Seq[GeraeteRiege], logo: File): String = { - val kandidaten = riegen - // filter startgeraet - .filter(riege => riege.halt == 0) - // filter hauptdurchgang-startgeraet - .filter(riege => !riege.kandidaten.exists(k => k.einteilung2.exists(d => d.start == riege.disziplin))) - .flatMap(riege => { - riege.kandidaten - .map(kandidat => { - Kandidat(riege.wettkampfTitel, kandidat.geschlecht, kandidat.programm, kandidat.name, kandidat.vorname, kandidat.jahrgang, kandidat.verein, "", riege.durchgang.get, riege.disziplin.get.easyprint, Seq.empty) - }) - }) + private def anmeldeListeProDurchgangVerein(durchgang: String, kandidaten: Seq[Kandidat], logo: File) = { + val logoHtml = if (logo.exists()) s"""""" else "" - toHTMLasKategorienListe(kandidaten, logo, 0) + val d = kandidaten.map{kandidat => + s"""${escaped(kandidat.verein)}${escaped(kandidat.name)} ${escaped(kandidat.vorname)} (${escaped(kandidat.jahrgang)})${escaped(kandidat.programm)}${escaped(kandidat.start)} """ + } + val dt = d.mkString("", "\n", "\n") + s"""
            +
            + $logoHtml +

            ${escaped(kandidaten.head.wettkampfTitel)}

            +
            ${escaped(durchgang)}
            + +
            +
            + + + ${dt} +
            NameEinteilungStartBemerkung
            +
            +
            + """ + } + + def riegenToKategorienListeAsHTML(riegen: Seq[GeraeteRiege], logo: File): String = { + toHTMLasKategorienListe(collectCandidates(riegen), logo, 0) + } + def riegenToDurchgangListeAsHTML(riegen: Seq[GeraeteRiege], logo: File): String = { + toHTMLasDurchgangListe(collectCandidates(riegen), logo, 0) } def riegenToVereinListeAsHTML(riegen: Seq[GeraeteRiege], logo: File): String = { - val kandidaten = riegen + toHTMLasVereinsListe(collectCandidates(riegen), logo, 0) + } + + private def collectCandidates(riegen: Seq[GeraeteRiege]) = { + riegen // filter startgeraet .filter(riege => riege.halt == 0) // filter hauptdurchgang-startgeraet @@ -182,8 +202,6 @@ trait KategorieTeilnehmerToHtmlRenderer { Kandidat(riege.wettkampfTitel, kandidat.geschlecht, kandidat.programm, kandidat.name, kandidat.vorname, kandidat.jahrgang, kandidat.verein, "", riege.durchgang.get, riege.disziplin.get.easyprint, Seq.empty) }) }) - - toHTMLasVereinsListe(kandidaten, logo, 0) } def toHTMLasKategorienListe(kandidaten: Seq[Kandidat], logo: File, rowsPerPage: Int = 28): String = { @@ -204,6 +222,24 @@ trait KategorieTeilnehmerToHtmlRenderer { intro + pages + outro } + def toHTMLasDurchgangListe(kandidaten: Seq[Kandidat], logo: File, rowsPerPage: Int = 28): String = { + val kandidatenPerDurchgang = kandidaten.sortBy { k => + val krit = f"${k.verein}%-40s ${k.name}%-40s ${k.vorname}%-40s" + //logger.debug(krit) + krit + }.groupBy(k => k.durchgang) + val rawpages = for { + durchgang <- kandidatenPerDurchgang.keys.toList.sorted + a4seitenmenge <- if(rowsPerPage == 0) kandidatenPerDurchgang(durchgang).sliding(kandidatenPerDurchgang(durchgang).size, kandidatenPerDurchgang(durchgang).size) else kandidatenPerDurchgang(durchgang).sliding(rowsPerPage, rowsPerPage) + } + yield { + anmeldeListeProDurchgangVerein(durchgang, a4seitenmenge, logo) + } + + val pages = rawpages.mkString("
          • ") + intro + pages + outro + } + def toHTMLasVereinsListe(kandidaten: Seq[Kandidat], logo: File, rowsPerPage: Int = 28): String = { val kandidatenPerKategorie = kandidaten.sortBy { k => val krit = f"${escaped(k.programm)}%-40s ${escaped(k.name)}%-40s ${escaped(k.vorname)}%-40s" diff --git a/src/main/scala/ch/seidel/kutu/view/ExportFunctions.scala b/src/main/scala/ch/seidel/kutu/view/ExportFunctions.scala index 4c6b4979e..94ec6243d 100644 --- a/src/main/scala/ch/seidel/kutu/view/ExportFunctions.scala +++ b/src/main/scala/ch/seidel/kutu/view/ExportFunctions.scala @@ -3,11 +3,13 @@ package ch.seidel.kutu.view import java.util.UUID import ch.seidel.kutu.Config.{homedir, remoteBaseUrl} import ch.seidel.kutu.KuTuApp +import ch.seidel.kutu.KuTuServer.renderer import ch.seidel.kutu.akka.DurchgangChanged import ch.seidel.kutu.domain.{KutuService, encodeFileName} import ch.seidel.kutu.http.WebSocketClient -import ch.seidel.kutu.renderer.PrintUtil +import ch.seidel.kutu.renderer.{KategorieTeilnehmerToHtmlRenderer, PrintUtil} import ch.seidel.kutu.renderer.PrintUtil.FilenameDefault +import ch.seidel.kutu.renderer.RiegenBuilder.mapToGeraeteRiegen import javafx.beans.property.SimpleObjectProperty import scalafx.Includes.jfxObjectProperty2sfx import scalafx.application.Platform @@ -52,5 +54,41 @@ trait ExportFunctions { PrintUtil.printDialogFuture(dialogText, FilenameDefault(filename, dir), false, generate, orientation = PageOrientation.Portrait)(event) } } + def doSelectedTeilnehmerExport(dialogText: String, durchgang: Set[String])(implicit event: ActionEvent): Unit = { + import scala.concurrent.ExecutionContext.Implicits.global + val seriendaten = mapToGeraeteRiegen(kandidaten=service.getAllKandidatenWertungen(wettkampf.uuid.map(UUID.fromString).get), durchgangFilter=durchgang) + .filter(gr => gr.halt == 0) + .flatMap {gr => gr.kandidaten.map {k => ch.seidel.kutu.renderer.Kandidat( + wettkampfTitel=gr.wettkampfTitel, + geschlecht=k.geschlecht, + programm=k.programm, + name=k.name, + vorname=k.vorname, + jahrgang=k.jahrgang, + verein=k.verein, + riege=k.einteilung.map(_.r).getOrElse(""), + durchgang=gr.durchgang.getOrElse(""), + start=gr.disziplin.map(_.name).getOrElse(""), + k.diszipline.map(_.name) + )} + } + val durchgangFileQualifier = durchgang.zipWithIndex.map(d => s"${d._2}").mkString("_dg(","-",")") + + val filename = "DurchgangTeilnehmer_" + encodeFileName(wettkampf.easyprint) + durchgangFileQualifier + ".html" + val dir = new java.io.File(homedir + "/" + encodeFileName(wettkampf.easyprint)) + if(!dir.exists()) { + dir.mkdirs(); + } + val logofile = PrintUtil.locateLogoFile(dir) + def generate = (lpp: Int) => KuTuApp.invokeAsyncWithBusyIndicator("Durchgang Teilnehmerliste aufbereiten ...") { Future { + Platform.runLater { + reprintItems.set(reprintItems.get().filter(p => !durchgang.contains(p.durchgang))) + } + (new Object with KategorieTeilnehmerToHtmlRenderer).toHTMLasDurchgangListe(seriendaten, logofile) + }} + Platform.runLater { + PrintUtil.printDialogFuture(dialogText, FilenameDefault(filename, dir), false, generate, orientation = PageOrientation.Portrait)(event) + } + } } diff --git a/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala b/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala index 19acedddb..775868b66 100644 --- a/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/NetworkTab.scala @@ -7,7 +7,7 @@ import ch.seidel.kutu.akka._ import ch.seidel.kutu.domain._ import ch.seidel.kutu.http.WebSocketClient import ch.seidel.kutu.renderer.PrintUtil.FilenameDefault -import ch.seidel.kutu.renderer.{BestenListeToHtmlRenderer, PrintUtil, RiegenBuilder} +import ch.seidel.kutu.renderer.{BestenListeToHtmlRenderer, KategorieTeilnehmerToHtmlRenderer, PrintUtil, RiegenBuilder} import ch.seidel.kutu._ import javafx.event.EventHandler import javafx.scene.{control => jfxsc} @@ -441,6 +441,44 @@ class NetworkTab(wettkampfmode: BooleanProperty, override val wettkampfInfo: Wet case e: Exception => e.printStackTrace() } + def makeSelectedDurchgangTeilnehmerExport(): Menu = { + val option = getSelectedDruchgangStates + val selectedDurchgaenge = option.toSet.map((_: DurchgangState).name) + new Menu { + text = "Durchgang-Teilnehmerliste erstellen" + updateItems + reprintItems.onChange { + updateItems + } + + private def updateItems: Unit = { + items.clear() + val affectedDurchgaenge: Set[String] = reprintItems.get.map(_.durchgang) + if (selectedDurchgaenge.nonEmpty) { + items += KuTuApp.makeMenuAction(s"Aus Durchgang ${selectedDurchgaenge.mkString(", ")}") { (caption: String, action: ActionEvent) => + doSelectedTeilnehmerExport(text.value, selectedDurchgaenge)(action) + } + } + if (affectedDurchgaenge.nonEmpty && selectedDurchgaenge.nonEmpty) { + items += new SeparatorMenuItem() + } + if (affectedDurchgaenge.nonEmpty) { + val allItem = KuTuApp.makeMenuAction(s"Alle betroffenen (${affectedDurchgaenge.size})") { (caption: String, action: ActionEvent) => + doSelectedTeilnehmerExport(text.value, affectedDurchgaenge)(action) + } + items += allItem + items += new SeparatorMenuItem() + affectedDurchgaenge.toList.sorted.foreach { durchgang => + items += KuTuApp.makeMenuAction(s"${durchgang}") { (caption: String, action: ActionEvent) => + doSelectedTeilnehmerExport(text.value, Set(durchgang))(action) + } + } + } + disable.value = items.isEmpty + } + } + } + def makeSelectedRiegenBlaetterExport(): Menu = { val option = getSelectedDruchgangStates val selectedDurchgaenge = option.toSet.map((_: DurchgangState).name) @@ -625,6 +663,7 @@ class NetworkTab(wettkampfmode: BooleanProperty, override val wettkampfInfo: Wet if (!wettkampf.toWettkampf.isReadonly(homedir, remoteHostOrigin)) { btnDurchgang.items.clear() btnDurchgang.items += makeDurchgangStartenMenu(wettkampf) + btnDurchgang.items += makeSelectedDurchgangTeilnehmerExport() btnDurchgang.items += new SeparatorMenuItem() btnDurchgang.items += makeSelectedRiegenBlaetterExport() btnDurchgang.items += makeMenuAction("Bestenliste erstellen") { (_, action) => @@ -636,6 +675,8 @@ class NetworkTab(wettkampfmode: BooleanProperty, override val wettkampfInfo: Wet view.contextMenu = new ContextMenu() { items += makeDurchgangStartenMenu(wettkampf) items += new SeparatorMenuItem() + items += makeSelectedDurchgangTeilnehmerExport() + items += new SeparatorMenuItem() items += makeSelectedRiegenBlaetterExport() items += navigate items += makeMenuAction("Bestenliste erstellen") { (_, action) => diff --git a/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala b/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala index 63049c4a0..af88ef540 100644 --- a/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/RiegenTab.scala @@ -630,6 +630,45 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: ret } + def makeAllDurchgangTeilnehmerExport() = { + val allAction = KuTuApp.makeMenuAction("Durchgang-Teilnehmerliste aus allen Durchgängen drucken") { (caption, action) => + val allDurchgaenge = durchgangModel.flatMap(group => { + if (group.children.isEmpty) { + ObservableBuffer[jfxsc.TreeItem[DurchgangEditor]](group) + } else { + group.children + } + }) + val selectedDurchgaenge = allDurchgaenge.map(_.getValue.durchgang) + .map(_.name).toSet + doSelectedTeilnehmerExport(text.value, selectedDurchgaenge)(action) + } + allAction + } + def makeSelectedDurchgangTeilnehmerExport(durchgang: Set[String]): Menu = { + val ret = new Menu() { + text = "Durchgang-Teilnehmerliste drucken" + val selectedAction = KuTuApp.makeMenuAction("Durchgang-Teilnehmerliste aus selektion drucken") { (caption, action) => + val allDurchgaenge = durchgangModel.flatMap(group => { + if (group.children.isEmpty) { + ObservableBuffer[jfxsc.TreeItem[DurchgangEditor]](group) + } else { + group.children + } + }) + val selectedDurchgaenge = allDurchgaenge.map(_.getValue.durchgang) + .filter { d: Durchgang => durchgang.contains(d.name) } + .map(_.name).toSet + doSelectedTeilnehmerExport(text.value, selectedDurchgaenge)(action) + } + selectedAction.setDisable(durchgang.size < 1) + items += selectedAction + val allAction: MenuItem = makeAllDurchgangTeilnehmerExport() + items += allAction + } + ret + } + def makeAggregateDurchganMenu(durchgang: Set[String]): MenuItem = { val ret = KuTuApp.makeMenuAction("Durchgänge in Gruppe zusammenfassen ...") {(caption, action) => implicit val e = action @@ -990,7 +1029,7 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: event.consume() }) - durchgangView.getSelectionModel().getSelectedCells().onChange { (_, newItem) => + durchgangView.getSelectionModel().getSelectedCells().onChange { (_, _) => Platform.runLater { val focusedCells: List[jfxsc.TreeTablePosition[DurchgangEditor, _]] = durchgangView.selectionModel.value.getSelectedCells.toList val selectedDurchgaenge = focusedCells.flatMap(c => c.getTreeItem.getValue.isHeader match { @@ -1007,11 +1046,11 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: val actDurchgangSelection = selectedDurchgaenge.filter(_ != null).map(d => d.durchgang.name) val selectedEditor = if (focusedCells.nonEmpty) focusedCells.head.getTreeItem.getValue else null durchgangView.contextMenu = new ContextMenu() { - items += makeRegenereateDurchgangMenu(actDurchgangSelection.toSet) - items += makeMergeDurchganMenu(actDurchgangSelection.toSet) + items += makeRegenereateDurchgangMenu(actDurchgangSelection) + items += makeMergeDurchganMenu(actDurchgangSelection) items += makeRenameDurchgangMenu if (selectedDurchgangHeader.isEmpty) { - items += makeAggregateDurchganMenu(actDurchgangSelection.toSet) + items += makeAggregateDurchganMenu(actDurchgangSelection) } if (focusedCells.size == 1 && selectedEditor != null && selectedDurchgangHeader.isEmpty) { items += new SeparatorMenuItem() @@ -1024,16 +1063,17 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: items += makeMoveStartgeraetMenu(selectedEditor, focusedCells) } items += new SeparatorMenuItem() - items += makeSelectedRiegenBlaetterExport(actDurchgangSelection.toSet) + items += makeSelectedDurchgangTeilnehmerExport(actDurchgangSelection) + items += makeSelectedRiegenBlaetterExport(actDurchgangSelection) } btnEditDurchgang.text.value = "Durchgang " + actDurchgangSelection.mkString("[", ", ", "]") + " bearbeiten" btnEditDurchgang.items.clear - btnEditDurchgang.items += makeRegenereateDurchgangMenu(actDurchgangSelection.toSet) - btnEditDurchgang.items += makeMergeDurchganMenu(actDurchgangSelection.toSet) + btnEditDurchgang.items += makeRegenereateDurchgangMenu(actDurchgangSelection) + btnEditDurchgang.items += makeMergeDurchganMenu(actDurchgangSelection) btnEditDurchgang.items += makeRenameDurchgangMenu if (selectedDurchgangHeader.isEmpty) { - btnEditDurchgang.items += makeAggregateDurchganMenu(actDurchgangSelection.toSet) + btnEditDurchgang.items += makeAggregateDurchganMenu(actDurchgangSelection) } if (focusedCells.size == 1 && selectedEditor != null && selectedDurchgangHeader.isEmpty) { btnEditDurchgang.items += new SeparatorMenuItem() @@ -1046,7 +1086,8 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: btnEditDurchgang.items += makeMoveStartgeraetMenu(selectedEditor, focusedCells) } btnEditDurchgang.items += new SeparatorMenuItem() - btnEditDurchgang.items += makeSelectedRiegenBlaetterExport(actDurchgangSelection.toSet) + btnEditDurchgang.items += makeSelectedDurchgangTeilnehmerExport(actDurchgangSelection) + btnEditDurchgang.items += makeSelectedRiegenBlaetterExport(actDurchgangSelection) } } } @@ -1294,6 +1335,7 @@ class RiegenTab(override val wettkampfInfo: WettkampfInfo, override val service: val btnExport = new MenuButton("Export") { items += makeDurchgangExport() items += makeDurchgangExport2() + items += makeAllDurchgangTeilnehmerExport() items += makeRiegenBlaetterExport() items += makeSelectedRiegenBlaetterExport(Set.empty) items += makeRiegenQRCodesExport() diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index 95932cf56..2e3fabd99 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -1218,7 +1218,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr yield { val einsatz = athletwertungen.head.init val athlet = einsatz.athlet - Kandidat( + ch.seidel.kutu.renderer.Kandidat( einsatz.wettkampf.easyprint , athlet.geschlecht match { case "M" => "Turner" case _ => "Turnerin" } , einsatz.wettkampfdisziplin.programm.easyprint @@ -1283,7 +1283,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr yield { val einsatz = athletwertungen.head.init val athlet = einsatz.athlet - Kandidat( + ch.seidel.kutu.renderer.Kandidat( einsatz.wettkampf.easyprint , athlet.geschlecht match { case "M" => "Turner" case _ => "Turnerin" } , einsatz.wettkampfdisziplin.programm.easyprint @@ -1348,7 +1348,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr yield { val einsatz = athletwertungen.head.init val athlet = einsatz.athlet - Kandidat( + ch.seidel.kutu.domain.Kandidat( einsatz.wettkampf.easyprint , athlet.geschlecht match { case "M" => "Turner" case _ => "Turnerin" } , einsatz.wettkampfdisziplin.programm.easyprint From 393d053b5b90d9c31200021eed8c1020681c8b0e Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Thu, 25 May 2023 18:45:05 +0200 Subject: [PATCH 88/99] #688 cleanup List memberlist grouped by "durchgang" --- .../ch/seidel/kutu/renderer/Kandidat.scala | 22 ++++++++++++++++ .../KategorieTeilnehmerToHtmlRenderer.scala | 26 +++---------------- .../KategorieTeilnehmerToJSONRenderer.scala | 23 +++------------- .../ch/seidel/kutu/view/ExportFunctions.scala | 1 + .../kutu/view/WettkampfWertungTab.scala | 2 ++ 5 files changed, 32 insertions(+), 42 deletions(-) create mode 100644 src/main/scala/ch/seidel/kutu/renderer/Kandidat.scala diff --git a/src/main/scala/ch/seidel/kutu/renderer/Kandidat.scala b/src/main/scala/ch/seidel/kutu/renderer/Kandidat.scala new file mode 100644 index 000000000..99ebdf226 --- /dev/null +++ b/src/main/scala/ch/seidel/kutu/renderer/Kandidat.scala @@ -0,0 +1,22 @@ +package ch.seidel.kutu.renderer + +import ch.seidel.kutu.domain.{AthletJahrgang, AthletView, GeraeteRiege, WertungView} + +object Kandidaten { + def apply(riegen: Seq[GeraeteRiege]) = { + riegen + // filter startgeraet + .filter(riege => riege.halt == 0) + // filter hauptdurchgang-startgeraet + .filter(riege => !riege.kandidaten.exists(k => k.einteilung2.exists(d => d.start == riege.disziplin))) + .flatMap(riege => { + riege.kandidaten + .map(kandidat => { + Kandidat(riege.wettkampfTitel, kandidat.geschlecht, kandidat.programm, kandidat.id, kandidat.name, kandidat.vorname, kandidat.jahrgang, kandidat.verein, "", riege.durchgang.get, riege.disziplin.get.easyprint, Seq.empty) + }) + }) + } +} +case class Kandidat(wettkampfTitel: String, geschlecht: String, programm: String, id: Long, + name: String, vorname: String, jahrgang: String, verein: String, + riege: String, durchgang: String, start: String, diszipline: Seq[String]) diff --git a/src/main/scala/ch/seidel/kutu/renderer/KategorieTeilnehmerToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/KategorieTeilnehmerToHtmlRenderer.scala index 9a590ffc4..226faebd8 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/KategorieTeilnehmerToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/KategorieTeilnehmerToHtmlRenderer.scala @@ -6,10 +6,6 @@ import ch.seidel.kutu.domain.GeraeteRiege import ch.seidel.kutu.renderer.PrintUtil._ import org.slf4j.LoggerFactory -case class Kandidat(wettkampfTitel: String, geschlecht: String, programm: String, - name: String, vorname: String, jahrgang: String, verein: String, - riege: String, durchgang: String, start: String, diszipline: Seq[String]) - trait KategorieTeilnehmerToHtmlRenderer { val logger = LoggerFactory.getLogger(classOf[KategorieTeilnehmerToHtmlRenderer]) val intro = """ @@ -109,7 +105,7 @@ trait KategorieTeilnehmerToHtmlRenderer { private def anmeldeListeProKategorie(kategorie: String, kandidaten: Seq[Kandidat], logo: File) = { val logoHtml = if (logo.exists()) s"""""" else "" - + val d = kandidaten.map{kandidat => s"""${escaped(kandidat.verein)}${escaped(kandidat.name)} ${escaped(kandidat.vorname)} (${escaped(kandidat.jahrgang)})${escaped(kandidat.durchgang)}${escaped(kandidat.start)} """ } @@ -180,28 +176,14 @@ trait KategorieTeilnehmerToHtmlRenderer { } def riegenToKategorienListeAsHTML(riegen: Seq[GeraeteRiege], logo: File): String = { - toHTMLasKategorienListe(collectCandidates(riegen), logo, 0) + toHTMLasKategorienListe(Kandidaten(riegen), logo, 0) } def riegenToDurchgangListeAsHTML(riegen: Seq[GeraeteRiege], logo: File): String = { - toHTMLasDurchgangListe(collectCandidates(riegen), logo, 0) + toHTMLasDurchgangListe(Kandidaten(riegen), logo, 0) } def riegenToVereinListeAsHTML(riegen: Seq[GeraeteRiege], logo: File): String = { - toHTMLasVereinsListe(collectCandidates(riegen), logo, 0) - } - - private def collectCandidates(riegen: Seq[GeraeteRiege]) = { - riegen - // filter startgeraet - .filter(riege => riege.halt == 0) - // filter hauptdurchgang-startgeraet - .filter(riege => !riege.kandidaten.exists(k => k.einteilung2.exists(d => d.start == riege.disziplin))) - .flatMap(riege => { - riege.kandidaten - .map(kandidat => { - Kandidat(riege.wettkampfTitel, kandidat.geschlecht, kandidat.programm, kandidat.name, kandidat.vorname, kandidat.jahrgang, kandidat.verein, "", riege.durchgang.get, riege.disziplin.get.easyprint, Seq.empty) - }) - }) + toHTMLasVereinsListe(Kandidaten(riegen), logo, 0) } def toHTMLasKategorienListe(kandidaten: Seq[Kandidat], logo: File, rowsPerPage: Int = 28): String = { diff --git a/src/main/scala/ch/seidel/kutu/renderer/KategorieTeilnehmerToJSONRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/KategorieTeilnehmerToJSONRenderer.scala index 54c719340..55cd3f980 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/KategorieTeilnehmerToJSONRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/KategorieTeilnehmerToJSONRenderer.scala @@ -1,18 +1,13 @@ package ch.seidel.kutu.renderer import java.io.File - -import ch.seidel.kutu.domain.{GeraeteRiege} +import ch.seidel.kutu.domain.GeraeteRiege import ch.seidel.kutu.renderer.PrintUtil._ import org.slf4j.LoggerFactory trait KategorieTeilnehmerToJSONRenderer { val logger = LoggerFactory.getLogger(classOf[KategorieTeilnehmerToJSONRenderer]) - case class Kandidat(wettkampfTitel: String, geschlecht: String, programm: String, - id: Long, name: String, vorname: String, jahrgang: String, verein: String, - riege: String, durchgang: String, start: String, diszipline: Seq[String]) - val intro = "{\n" val outro = "}" @@ -34,21 +29,9 @@ trait KategorieTeilnehmerToJSONRenderer { | }""".stripMargin } - def riegenToKategorienListeAsJSON(riegen: Seq[GeraeteRiege], logo: File): String = { - val kandidaten = riegen - .filter(riege => riege.halt == 0) - // filter hauptdurchgang-startgeraet - .filter(riege => !riege.kandidaten.exists(k => k.einteilung2.exists(d => d.start == riege.disziplin))) - .flatMap(riege => { - riege.kandidaten - .map(kandidat => { - Kandidat(riege.wettkampfTitel, kandidat.geschlecht, kandidat.programm, kandidat.id, - kandidat.name, kandidat.vorname, kandidat.jahrgang, kandidat.verein, "", - riege.durchgang.get, riege.disziplin.get.easyprint, Seq.empty) - }) - }) - toJSONasKategorienListe(kandidaten, logo) + def riegenToKategorienListeAsJSON(riegen: Seq[GeraeteRiege], logo: File): String = { + toJSONasKategorienListe(Kandidaten(riegen), logo) } def toJSONasKategorienListe(kandidaten: Seq[Kandidat], logo: File): String = { diff --git a/src/main/scala/ch/seidel/kutu/view/ExportFunctions.scala b/src/main/scala/ch/seidel/kutu/view/ExportFunctions.scala index 94ec6243d..d97d31e86 100644 --- a/src/main/scala/ch/seidel/kutu/view/ExportFunctions.scala +++ b/src/main/scala/ch/seidel/kutu/view/ExportFunctions.scala @@ -62,6 +62,7 @@ trait ExportFunctions { wettkampfTitel=gr.wettkampfTitel, geschlecht=k.geschlecht, programm=k.programm, + id=k.id, name=k.name, vorname=k.vorname, jahrgang=k.jahrgang, diff --git a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala index 2e3fabd99..b2332f975 100644 --- a/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala +++ b/src/main/scala/ch/seidel/kutu/view/WettkampfWertungTab.scala @@ -1222,6 +1222,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr einsatz.wettkampf.easyprint , athlet.geschlecht match { case "M" => "Turner" case _ => "Turnerin" } , einsatz.wettkampfdisziplin.programm.easyprint + , athlet.id , athlet.name , athlet.vorname , AthletJahrgang(athlet.gebdat).jahrgang @@ -1287,6 +1288,7 @@ class WettkampfWertungTab(wettkampfmode: BooleanProperty, programm: Option[Progr einsatz.wettkampf.easyprint , athlet.geschlecht match { case "M" => "Turner" case _ => "Turnerin" } , einsatz.wettkampfdisziplin.programm.easyprint + , athlet.id , athlet.name , athlet.vorname , AthletJahrgang(athlet.gebdat).jahrgang From a6937231ad868f3abe4cf2714b79c3566cb606a9 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sat, 27 May 2023 00:19:15 +0200 Subject: [PATCH 89/99] #685 Add parameter to competition to specify the rotation of starting order over multiple competitions --- ...dPunktegleichstandsregelToWettkampf-pg.sql | 3 +- ...tegleichstandsregelToWettkampf-sqllite.sql | 1 + src/main/scala/ch/seidel/kutu/KuTuApp.scala | 55 +++++- .../seidel/kutu/data/ResourceExchanger.scala | 1 + .../kutu/domain/RiegenRotationsregel.scala | 167 ++++++++++++++++++ .../seidel/kutu/domain/WertungService.scala | 14 +- .../kutu/domain/WettkampfResultMapper.scala | 6 +- .../seidel/kutu/domain/WettkampfService.scala | 14 +- .../scala/ch/seidel/kutu/domain/package.scala | 10 +- .../ch/seidel/kutu/http/JsonSupport.scala | 2 +- .../renderer/RiegenblattToHtmlRenderer.scala | 59 +------ .../ch/seidel/kutu/base/KuTuBaseSpec.scala | 4 +- .../kutu/domain/GleichstandsregelTest.scala | 2 +- .../ch/seidel/kutu/domain/WettkampfSpec.scala | 14 +- 14 files changed, 263 insertions(+), 89 deletions(-) create mode 100644 src/main/scala/ch/seidel/kutu/domain/RiegenRotationsregel.scala diff --git a/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql b/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql index 1b9d4f50a..6bf6fc86e 100644 --- a/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql +++ b/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql @@ -1,4 +1,5 @@ -- ----------------------------------------------------- -- Table wettkampf -- ----------------------------------------------------- -ALTER TABLE wettkampf ADD punktegleichstandsregel varchar(254) DEFAULT ''; \ No newline at end of file +ALTER TABLE wettkampf ADD punktegleichstandsregel varchar(254) DEFAULT ''; +ALTER TABLE wettkampf ADD rotation varchar(254) DEFAULT ""; diff --git a/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql b/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql index f63c8c95a..02bd5ed9c 100644 --- a/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql +++ b/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql @@ -7,3 +7,4 @@ --ALTER TABLE wettkampf ADD ort varchar(255) DEFAULT ''; --ALTER TABLE wettkampf ADD adresse varchar(255) DEFAULT ''; ALTER TABLE wettkampf ADD punktegleichstandsregel varchar(254) DEFAULT ''; +ALTER TABLE wettkampf ADD rotation varchar(254) DEFAULT ""; \ No newline at end of file diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index 001aa837a..d835df697 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -288,6 +288,31 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport promptText = "Auszeichnung bei Erreichung des Mindest-Endwerts" text = p.auszeichnungendnote.toString } + val cmbRiegenRotationsregel = new ComboBox[String]() { + prefWidth = 500 + RiegenRotationsregel.predefined.foreach(definition => { + items.value.add(definition._1) + }) + promptText = "Riegenrotationsregel" + } + val txtRiegenRotationsregel = new TextField { + prefWidth = 500 + promptText = "z.B. Kategorie/Verein/Geschlecht/Alter/Name/Vorname/Rotierend/AltInv" + text = RiegenRotationsregel(p.toWettkampf).toFormel + editable <== Bindings.createBooleanBinding(() => { + "Individuell".equals(cmbRiegenRotationsregel.value.value) + }, + cmbRiegenRotationsregel.selectionModel, + cmbRiegenRotationsregel.value + ) + + cmbRiegenRotationsregel.value.onChange { + text.value = RiegenRotationsregel.predefined(cmbRiegenRotationsregel.value.value) + if (text.value.isEmpty && !"Einfach".equals(cmbRiegenRotationsregel.value.value)) { + text.value = p.rotation + } + } + } val cmbPunktgleichstandsregel = new ComboBox[String]() { prefWidth = 500 Gleichstandsregel.predefined.foreach(definition => { @@ -385,6 +410,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport new Label(txtNotificationEMail.promptText.value), txtNotificationEMail, new Label(txtAuszeichnung.promptText.value), txtAuszeichnung, new Label(txtAuszeichnungEndnote.promptText.value), txtAuszeichnungEndnote, + cmbRiegenRotationsregel, txtRiegenRotationsregel, cmbPunktgleichstandsregel, txtPunktgleichstandsregel, cmbAltersklassen, txtAltersklassen, cmbJGAltersklassen, txtJGAltersklassen @@ -424,7 +450,8 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport p.uuid, txtAltersklassen.text.value, txtJGAltersklassen.text.value, - txtPunktgleichstandsregel.text.value + txtPunktgleichstandsregel.text.value, + txtRiegenRotationsregel.text.value ) val dir = new java.io.File(homedir + "/" + w.easyprint.replace(" ", "_")) if (!dir.exists()) { @@ -1174,6 +1201,28 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport promptText = "Auszeichnung bei Erreichung des Mindest-Gerätedurchschnittwerts" text = "" } + val cmbRiegenRotationsregel = new ComboBox[String]() { + prefWidth = 500 + RiegenRotationsregel.predefined.foreach(definition => { + items.value.add(definition._1) + }) + promptText = "Riegenrotationsregel" + } + val txtRiegenRotationsregel = new TextField { + prefWidth = 500 + promptText = "z.B. Kategorie/Verein/Alter/Name/Vorname/Rotierend/AltInv" + + editable <== Bindings.createBooleanBinding(() => { + "Individuell".equals(cmbRiegenRotationsregel.value.value) + }, + cmbRiegenRotationsregel.selectionModel, + cmbRiegenRotationsregel.value + ) + + cmbRiegenRotationsregel.value.onChange { + text.value = RiegenRotationsregel.predefined(cmbRiegenRotationsregel.value.value) + } + } val cmbPunktgleichstandsregel = new ComboBox[String]() { prefWidth = 500 Gleichstandsregel.predefined.foreach(definition => { @@ -1258,6 +1307,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport new Label(txtNotificationEMail.promptText.value), txtNotificationEMail, new Label(txtAuszeichnung.promptText.value), txtAuszeichnung, new Label(txtAuszeichnungEndnote.promptText.value), txtAuszeichnungEndnote, + cmbRiegenRotationsregel, txtRiegenRotationsregel, cmbPunktgleichstandsregel, txtPunktgleichstandsregel, cmbAltersklassen, txtAltersklassen, cmbJGAltersklassen, txtJGAltersklassen @@ -1299,7 +1349,8 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport Some(UUID.randomUUID().toString()), txtAltersklassen.text.value, txtJGAltersklassen.text.value, - txtPunktgleichstandsregel.text.value + txtPunktgleichstandsregel.text.value, + txtRiegenRotationsregel.text.value ) val dir = new java.io.File(homedir + "/" + w.easyprint.replace(" ", "_")) if (!dir.exists()) { diff --git a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala index b16a53734..c71c97aad 100644 --- a/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala +++ b/src/main/scala/ch/seidel/kutu/data/ResourceExchanger.scala @@ -287,6 +287,7 @@ object ResourceExchanger extends KutuService with RiegenBuilder { altersklassen = wettkampfHeader.get("altersklassen").map(fields).getOrElse(""), jahrgangsklassen = wettkampfHeader.get("jahrgangsklassen").map(fields).getOrElse(""), punktegleichstandsregel = wettkampfHeader.get("punktegleichstandsregel").map(fields).getOrElse(""), + rotation = wettkampfHeader.get("rotation").map(fields).getOrElse(""), uuidOption = uuid ) diff --git a/src/main/scala/ch/seidel/kutu/domain/RiegenRotationsregel.scala b/src/main/scala/ch/seidel/kutu/domain/RiegenRotationsregel.scala new file mode 100644 index 000000000..67f5e4fc3 --- /dev/null +++ b/src/main/scala/ch/seidel/kutu/domain/RiegenRotationsregel.scala @@ -0,0 +1,167 @@ +package ch.seidel.kutu.domain + +import ch.seidel.kutu.data.GroupSection.STANDARD_SCORE_FACTOR +import org.controlsfx.validation.{Severity, ValidationResult, Validator} + +import java.time.temporal.ChronoUnit +import scala.math.BigDecimal.{RoundingMode, long2bigDecimal} + + +object RiegenRotationsregel { + val defaultRegel = RiegenRotationsregelList(List( + RiegenRotationsregelKategorie, + RiegenRotationsregelVerein, + RiegenRotationsregelAlter(false), + RiegenRotationsregelGeschlecht, + RiegenRotationsregelName, + RiegenRotationsregelVorname + ), Some("Einfach")) + + val predefined = Map( + ("Einfache Rotation" -> "Einfach") + , ("Verschiebende Rotation" -> "Einfach/Rotierend") + , ("Verschiebende Rotation alternierend invers" -> "Einfach/Rotierend/AltInvers") + , ("Individuell" -> "") + ) + + def apply(formel: String): RiegenRotationsregel = { + val regeln = formel.split("/").map(_.trim).filter(_.nonEmpty).toList + val mappedRules: List[RiegenRotationsregel] = regeln.flatMap { + case "Name" => Some(RiegenRotationsregelName.asInstanceOf[RiegenRotationsregel]) + case "Vorname" => Some(RiegenRotationsregelVorname.asInstanceOf[RiegenRotationsregel]) + case "Verein" => Some(RiegenRotationsregelVerein.asInstanceOf[RiegenRotationsregel]) + case "Geschlecht" => Some(RiegenRotationsregelGeschlecht.asInstanceOf[RiegenRotationsregel]) + case "Kategorie" => Some(RiegenRotationsregelKategorie.asInstanceOf[RiegenRotationsregel]) + case "AlterAbsteigend" => Some(RiegenRotationsregelAlter(false).asInstanceOf[RiegenRotationsregel]) + case "AlterAufsteigend" => Some(RiegenRotationsregelAlter(true).asInstanceOf[RiegenRotationsregel]) + case "AltInvers" => Some(RiegenRotationsregelAlternierendInvers.asInstanceOf[RiegenRotationsregel]) + case "Rotierend" => Some(RiegenRotationsregelRotierend.asInstanceOf[RiegenRotationsregel]) + case "Einfach" => Some(defaultRegel.asInstanceOf[RiegenRotationsregel]) + case s: String => None + } + if (!mappedRules.exists { + case RiegenRotationsregelAlternierendInvers => false + case RiegenRotationsregelRotierend => false + case _ => true + }) defaultRegel else { + RiegenRotationsregelList(mappedRules) + } + } + + def apply(wettkampf: Wettkampf): RiegenRotationsregel = wettkampf.rotation match { + case Some(regel) => this(regel) + case _ => defaultRegel + } +} + +sealed trait RiegenRotationsregel { + def sort(kandidat: Kandidat): String = sorter(List(), kandidat).map(align).mkString("-") + def sorter(acc: List[String], kandidat: Kandidat): List[String] + def toFormel: String + + private def align(s: String): String = { + if (s.matches("^[0-9]+$")) s else f"$s%-30s" + } +} +case class RiegenRotationsregelList(regeln: List[RiegenRotationsregel], name: Option[String] = None) extends RiegenRotationsregel { + override def sorter(acc: List[String], kandidat: Kandidat): List[String] = { + regeln.foldLeft(List[String]()){(acc, regel) => + regel.sorter(acc, kandidat) + } + } + + override def toFormel: String = name.getOrElse(regeln.map(_.toFormel).mkString("/")) +} + +case object RiegenRotationsregelAlternierendInvers extends RiegenRotationsregel { + override def sorter(acc: List[String], kandidat: Kandidat): List[String] = { + val date = kandidat.wertungen.head.wettkampf.datum.toLocalDate + val day = date.getDayOfYear + val reversed = day % 2 == 0 + if (reversed) acc.map(inverseIfAlphaNumeric) else acc + } + private def inverseIfAlphaNumeric(s: String): String = { + if (s.matches("^[0-9]+$")) s else s.reverse + } + override def toFormel: String = "AltInvers" +} + +case object RiegenRotationsregelRotierend extends RiegenRotationsregel { + def rotateIfAlphaNumeric(text: String, offset: Int): String = { + if (text.matches("^[0-9]+$")) text else text.trim.toUpperCase().map(rotate(_, offset)) + } + + def rotate(text: Char, offset: Int): Char = { + val r1 = text + offset + val r2 = if (r1 > 'Z') { + r1 - 26 + } else if (r1 < 'A') { + r1 + 26 + } else { + r1 + } + r2.toChar + } + override def sorter(acc: List[String], kandidat: Kandidat): List[String] = { + val date = kandidat.wertungen.head.wettkampf.datum.toLocalDate + val day = date.getDayOfYear + val alphaOffset = day % 26 + acc.map(rotateIfAlphaNumeric(_, alphaOffset)) + } + override def toFormel: String = "Rotierend" +} + +case object RiegenRotationsregelName extends RiegenRotationsregel { + override def sorter(acc: List[String], kandidat: Kandidat): List[String] = + acc :+ kandidat.name + override def toFormel: String = "Name" +} + +case object RiegenRotationsregelVorname extends RiegenRotationsregel { + override def sorter(acc: List[String], kandidat: Kandidat): List[String] = + acc :+ kandidat.vorname + + override def toFormel: String = "Vorname" +} + +case object RiegenRotationsregelKategorie extends RiegenRotationsregel { + override def sorter(acc: List[String], kandidat: Kandidat): List[String] = + acc :+ kandidat.programm + + override def toFormel: String = "Vorname" +} + +case object RiegenRotationsregelVerein extends RiegenRotationsregel { + override def sorter(acc: List[String], kandidat: Kandidat): List[String] = + acc :+ kandidat.verein + .replaceAll("BTV", "") + .replaceAll("DTV", "") + .replaceAll("STV", "") + .replaceAll("GETU", "") + .replaceAll("TSV", "") + .replaceAll("TV", "") + .replaceAll("TZ", "") + .replaceAll(" ", "") + + override def toFormel: String = "Verein" +} +case object RiegenRotationsregelGeschlecht extends RiegenRotationsregel { + override def sorter(acc: List[String], kandidat: Kandidat): List[String] = + acc :+ kandidat.geschlecht + + override def toFormel: String = "Geschlecht" +} +case class RiegenRotationsregelAlter(aufsteigend: Boolean) extends RiegenRotationsregel { + override def sorter(acc: List[String], kandidat: Kandidat): List[String] = { + val date = kandidat.wertungen.head.wettkampf.datum.toLocalDate + val alter = try { + val bdate: Int = str2Int(kandidat.jahrgang) + date.getYear - bdate + } catch { + case _: NumberFormatException => 100 + } + val jg = (if (alter > 15) "0000" else kandidat.jahrgang) + acc :+ (if (aufsteigend) kandidat.jahrgang.reverse else kandidat.jahrgang) + } + override def toFormel: String = if (aufsteigend) "AlterAufsteigend" else "AlterAbsteigend" +} diff --git a/src/main/scala/ch/seidel/kutu/domain/WertungService.scala b/src/main/scala/ch/seidel/kutu/domain/WertungService.scala index c6555d28f..a1cb1ef2b 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WertungService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WertungService.scala @@ -73,7 +73,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, wk.rotation, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -95,7 +95,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, wk.rotation, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -117,7 +117,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, wk.rotation, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -258,7 +258,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, wk.rotation, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -294,7 +294,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, wk.rotation, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -391,7 +391,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di (sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, wk.rotation, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) @@ -413,7 +413,7 @@ abstract trait WertungService extends DBService with WertungResultMapper with Di (sql""" SELECT w.id, a.id, a.js_id, a.geschlecht, a.name, a.vorname, a.gebdat, a.strasse, a.plz, a.ort, a.activ, a.verein, v.*, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, wk.rotation, w.note_d as difficulty, w.note_e as execution, w.endnote, w.riege, w.riege2 FROM wertung w inner join athlet a on (a.id = w.athlet_id) diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala index b05f30132..9f87f2205 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfResultMapper.scala @@ -15,7 +15,7 @@ abstract trait WettkampfResultMapper extends DisziplinResultMapper { def readProgramm(id: Long): ProgrammView implicit val getWettkampfResult = GetResult(r => - Wettkampf(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, r.<<, r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<, r.<<)) + Wettkampf(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, r.<<, r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<, r.<<, r.<<)) implicit val getWettkampfDisziplinResult = GetResult(r => Wettkampfdisziplin(r.<<, r.<<, r.<<, r.<<, r.nextBytesOption(), r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<)) @@ -27,10 +27,10 @@ abstract trait WettkampfResultMapper extends DisziplinResultMapper { } implicit def getWettkampfViewResultCached(implicit cache: scala.collection.mutable.Map[Long, ProgrammView]) = GetResult(r => - WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<[String], readProgramm(r.<<, cache), r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<, r.<<)) + WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<[String], readProgramm(r.<<, cache), r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<, r.<<, r.<<)) implicit def getWettkampfViewResult = GetResult(r => - WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, readProgramm(r.<<), r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<, r.<<)) + WettkampfView(r.<<, r.nextStringOption(), r.<<[java.sql.Date], r.<<, readProgramm(r.<<), r.<<, r.<<[BigDecimal], r.<<, r.<<, r.<<, r.<<, r.<<)) implicit val getProgrammRawResult = GetResult(r => // id: Long, name: String, aggregate: Int, parentId: Long, ord: Int, alterVon: Int, alterBis: Int, uuid: String, riegenmode diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index 8b0d254f8..d1216698f 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -90,7 +90,7 @@ trait WettkampfService extends DBService sql""" select wpt.id, - wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, wd.id, wd.programm_id, + wk.id, wk.uuid, wk.datum, wk.titel, wk.programm_id, wk.auszeichnung, wk.auszeichnungendnote, wk.notificationEMail, wk.altersklassen, wk.jahrgangsklassen, wk.punktegleichstandsregel, wk.rotation, wd.id, wd.programm_id, d.*, wd.kurzbeschreibung, wd.detailbeschreibung, wd.notenfaktor, wd.masculin, wd.feminim, wd.ord, wd.scale, wd.dnote, wd.min, wd.max, wd.startgeraet, wpt.wechsel, wpt.einturnen, wpt.uebung, wpt.wertung @@ -418,7 +418,7 @@ trait WettkampfService extends DBService seek(programmid, Seq.empty) } - def createWettkampf(datum: java.sql.Date, titel: String, programmId: Set[Long], notificationEMail: String, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuidOption: Option[String], altersklassen: String, jahrgangsklassen: String, punktegleichstandsregel: String): Wettkampf = { + def createWettkampf(datum: java.sql.Date, titel: String, programmId: Set[Long], notificationEMail: String, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuidOption: Option[String], altersklassen: String, jahrgangsklassen: String, punktegleichstandsregel: String, rotation: String): Wettkampf = { val cache = scala.collection.mutable.Map[Long, ProgrammView]() val programs = programmId map (p => readProgramm(p, cache)) val heads = programs map (_.head) @@ -463,7 +463,8 @@ trait WettkampfService extends DBService notificationEMail=$notificationEMail, auszeichnung=$auszeichnung, auszeichnungendnote=$auszeichnungendnote, altersklassen=$altersklassen, jahrgangsklassen=$jahrgangsklassen, - punktegleichstandsregel=$punktegleichstandsregel + punktegleichstandsregel=$punktegleichstandsregel, + rotation=$rotation where id=$cid and uuid=$uuid """ >> initPlanZeitenActions(UUID.fromString(uuid)) >> @@ -474,8 +475,8 @@ trait WettkampfService extends DBService case _ => sqlu""" insert into wettkampf - (datum, titel, programm_Id, notificationEMail, auszeichnung, auszeichnungendnote, punktegleichstandsregel, altersklassen, jahrgangsklassen, uuid) - values (${datum}, ${titel}, ${heads.head.id}, $notificationEMail, $auszeichnung, $auszeichnungendnote, $punktegleichstandsregel, $altersklassen, $jahrgangsklassen, $uuid) + (datum, titel, programm_Id, notificationEMail, auszeichnung, auszeichnungendnote, punktegleichstandsregel, altersklassen, jahrgangsklassen, rotation, uuid) + values (${datum}, ${titel}, ${heads.head.id}, $notificationEMail, $auszeichnung, $auszeichnungendnote, $punktegleichstandsregel, $altersklassen, $jahrgangsklassen, $rotation, $uuid) """ >> initPlanZeitenActions(UUID.fromString(uuid)) >> sql""" @@ -500,7 +501,7 @@ trait WettkampfService extends DBService }, Duration.Inf) } - def saveWettkampf(id: Long, datum: java.sql.Date, titel: String, programmId: Set[Long], notificationEMail: String, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuidOption: Option[String], altersklassen: String, jahrgangsklassen: String, punktegleichstandsregel: String): Wettkampf = { + def saveWettkampf(id: Long, datum: java.sql.Date, titel: String, programmId: Set[Long], notificationEMail: String, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, uuidOption: Option[String], altersklassen: String, jahrgangsklassen: String, punktegleichstandsregel: String, rotation: String): Wettkampf = { val uuid = uuidOption.getOrElse(UUID.randomUUID().toString()) val cache = scala.collection.mutable.Map[Long, ProgrammView]() val process = for { @@ -525,6 +526,7 @@ trait WettkampfService extends DBService auszeichnungendnote=$auszeichnungendnote, altersklassen=$altersklassen, jahrgangsklassen=$jahrgangsklassen, punktegleichstandsregel=$punktegleichstandsregel, + rotation=$rotation, uuid=$uuid where id=$id """ >> diff --git a/src/main/scala/ch/seidel/kutu/domain/package.scala b/src/main/scala/ch/seidel/kutu/domain/package.scala index fbf98e283..d764cd3bd 100644 --- a/src/main/scala/ch/seidel/kutu/domain/package.scala +++ b/src/main/scala/ch/seidel/kutu/domain/package.scala @@ -686,15 +686,15 @@ package object domain { // if(uuid != null) Wettkampf(id, datum, titel, programmId, auszeichnung, auszeichnungendnote, Some(uuid)) // else apply(id, datum, titel, programmId, auszeichnung, auszeichnungendnote) // } - case class Wettkampf(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: Option[String], jahrgangsklassen: Option[String], punktegleichstandsregel: Option[String]) extends DataObject { + case class Wettkampf(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programmId: Long, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: Option[String], jahrgangsklassen: Option[String], punktegleichstandsregel: Option[String], rotation: Option[String]) extends DataObject { override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY" def toView(programm: ProgrammView): WettkampfView = { - WettkampfView(id, uuid, datum, titel, programm, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen.getOrElse(""), jahrgangsklassen.getOrElse(""), punktegleichstandsregel.getOrElse("")) + WettkampfView(id, uuid, datum, titel, programm, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen.getOrElse(""), jahrgangsklassen.getOrElse(""), punktegleichstandsregel.getOrElse(""), rotation.getOrElse("")) } - def toPublic: Wettkampf = Wettkampf(id, uuid, datum, titel, programmId, auszeichnung, auszeichnung, "", altersklassen, jahrgangsklassen, punktegleichstandsregel) + def toPublic: Wettkampf = Wettkampf(id, uuid, datum, titel, programmId, auszeichnung, auszeichnung, "", altersklassen, jahrgangsklassen, punktegleichstandsregel, rotation) private def prepareFilePath(homedir: String) = { val filename: String = encodeFileName(easyprint) @@ -784,10 +784,10 @@ package object domain { // if(uuid != null) WettkampfView(id, datum, titel, programm, auszeichnung, auszeichnungendnote, Some(uuid)) // else apply(id, datum, titel, programm, auszeichnung, auszeichnungendnote) // } - case class WettkampfView(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: String, jahrgangsklassen: String, punktegleichstandsregel: String) extends DataObject { + case class WettkampfView(id: Long, uuid: Option[String], datum: java.sql.Date, titel: String, programm: ProgrammView, auszeichnung: Int, auszeichnungendnote: scala.math.BigDecimal, notificationEMail: String, altersklassen: String, jahrgangsklassen: String, punktegleichstandsregel: String, rotation: String) extends DataObject { override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY" - def toWettkampf = Wettkampf(id, uuid, datum, titel, programm.id, auszeichnung, auszeichnungendnote, notificationEMail, Option(altersklassen), Option(jahrgangsklassen), Option(punktegleichstandsregel)) + def toWettkampf = Wettkampf(id, uuid, datum, titel, programm.id, auszeichnung, auszeichnungendnote, notificationEMail, Option(altersklassen), Option(jahrgangsklassen), Option(punktegleichstandsregel), Option(rotation)) } case class PublishedScoreRaw(id: String, title: String, query: String, published: Boolean, publishedDate: java.sql.Date, wettkampfId: Long) extends DataObject { diff --git a/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala b/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala index 20ebb9d88..949fcf516 100644 --- a/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala +++ b/src/main/scala/ch/seidel/kutu/http/JsonSupport.scala @@ -11,7 +11,7 @@ trait JsonSupport extends SprayJsonSupport with EnrichedJson { import DefaultJsonProtocol._ - implicit val wkFormat = jsonFormat(Wettkampf, "id", "uuid", "datum", "titel", "programmId", "auszeichnung", "auszeichnungendnote", "notificationEMail", "altersklassen", "jahrgangsklassen", "punktegleichstandsregel") + implicit val wkFormat = jsonFormat(Wettkampf, "id", "uuid", "datum", "titel", "programmId", "auszeichnung", "auszeichnungendnote", "notificationEMail", "altersklassen", "jahrgangsklassen", "punktegleichstandsregel", "rotation") implicit val pgmFormat = jsonFormat9(ProgrammRaw) implicit val pgmListFormat = listFormat(pgmFormat) implicit val disziplinFormat = jsonFormat2(Disziplin) diff --git a/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala b/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala index 5ae7cdacd..94b21ad78 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/RiegenblattToHtmlRenderer.scala @@ -8,7 +8,10 @@ import org.slf4j.LoggerFactory object RiegenBuilder { val logger = LoggerFactory.getLogger(this.getClass) - def mapToGeraeteRiegen(kandidaten: Seq[Kandidat], printorder: Boolean = false, groupByProgramm: Boolean = true, durchgangFilter: Set[String] = Set.empty, haltsFilter: Set[Int] = Set.empty): List[GeraeteRiege] = { + def mapToGeraeteRiegen(kandidaten: Seq[Kandidat], printorder: Boolean = false, durchgangFilter: Set[String] = Set.empty, haltsFilter: Set[Int] = Set.empty): List[GeraeteRiege] = { + val sorter: RiegenRotationsregel = if (kandidaten.nonEmpty && kandidaten.head.wertungen.nonEmpty) + RiegenRotationsregel(kandidaten.head.wertungen.head.wettkampf) + else RiegenRotationsregel("") def pickStartformationen(geraete: Seq[(Option[Disziplin], Seq[Riege])], durchgang: Option[String], extractKandidatEinteilung: Kandidat => (Option[Riege], Seq[Disziplin])) = { geraete.flatMap{s => @@ -26,7 +29,7 @@ object RiegenBuilder { diszipline.map(_.id).contains(disziplin.map(_.id).getOrElse(0)) case None => false } - }.sortBy { riegenSorter(groupByProgramm)} + }.sortBy(sorter.sort) val completed = tuti. flatMap(k => k.wertungen). @@ -130,58 +133,6 @@ object RiegenBuilder { riegen } - - def rotate(text: String, offset: Int): String = { - text.trim.toUpperCase().map(rotate(_, offset)) - } - def rotate(text: Char, offset: Int): Char = { - val r1 = text + offset - val r2 = if (r1 > 'Z') { - r1 - 26 - } else if (r1 < 'A') { - r1 + 26 - } else { - r1 - } - r2.toChar - } - private def riegenSorter(groupByProgramm: Boolean): Kandidat=>String = kandidat => { - val programm = if (groupByProgramm) kandidat.programm else "" - if (kandidat.wertungen.nonEmpty) { - val date = kandidat.wertungen.head.wettkampf.datum.toLocalDate - val alter = try { - val bdate: Int =str2Int(kandidat.jahrgang) - date.getYear - bdate - } catch { - case _:NumberFormatException => 100 - } - val jahrgang = if (alter > 15) "0000" else kandidat.jahrgang - val day = date.getDayOfYear - val reversed = day % 2 == 0 - val alphaOffset = day % 26 - val vereinL0 = kandidat.verein - .replaceAll("BTV", "") - .replaceAll("DTV", "") - .replaceAll("STV", "") - .replaceAll("GETU", "") - .replaceAll("TSV", "") - .replaceAll("TV", "") - .replaceAll("TZ", "") - .replaceAll(" ", "") - val vereinL1 = if (reversed) vereinL0.reverse else vereinL0 - val vereinL2 = rotate(vereinL1, alphaOffset) - val geschlecht = if (reversed) kandidat.geschlecht.reverse else kandidat.geschlecht - val nameL1 = if (reversed) kandidat.name.reverse else kandidat.name - val nameL2 = rotate(nameL1, alphaOffset) - val vornameL1 = if (reversed) kandidat.vorname.reverse else kandidat.vorname - val vornameL2 = rotate(vornameL1, alphaOffset) - val value = f"<$programm%20s $vereinL2%-30s $jahrgang%4s $geschlecht%-10s $nameL2%-20s $vornameL2%-20s>" - value - } else { - s"$programm ${kandidat.verein} ${kandidat.jahrgang} ${kandidat.geschlecht} ${kandidat.name} ${kandidat.vorname}" - } - } - } trait RiegenblattToHtmlRenderer { diff --git a/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala b/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala index 93d4db021..8b945a332 100644 --- a/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala +++ b/src/test/scala/ch/seidel/kutu/base/KuTuBaseSpec.scala @@ -18,7 +18,7 @@ trait KuTuBaseSpec extends AnyWordSpec with Matchers with DBService with KutuSer DBService.startDB(Some(TestDBService.db)) def insertGeTuWettkampf(name: String, anzvereine: Int) = { - val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(20L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString), "", "", "") + val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(20L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString), "", "", "", "Kategorie/AlterAufsteigend/Verein/Vorname/Name/Rotierend/AltInvers") val programme: Seq[ProgrammView] = readWettkampfLeafs(wettkampf.programmId) val pgIds = programme.map(_.id)// 20 * 9 * 2 = 360 val vereine = for (v <- (1 to anzvereine)) yield { @@ -35,7 +35,7 @@ trait KuTuBaseSpec extends AnyWordSpec with Matchers with DBService with KutuSer wettkampf } def insertTurn10Wettkampf(name: String, anzvereine: Int) = { - val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(211L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString), "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19", "") + val wettkampf = createWettkampf(new Date(System.currentTimeMillis()), name, Set(211L), "testmail@test.com", 3333, 7.5d, Some(UUID.randomUUID().toString), "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19", "", "") val programme: Seq[ProgrammView] = readWettkampfLeafs(wettkampf.programmId) val pgIds = programme.map(_.id) val vereine = for (v <- (1 to anzvereine)) yield { diff --git a/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala b/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala index ba3a9bc6e..9162843eb 100644 --- a/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala +++ b/src/test/scala/ch/seidel/kutu/domain/GleichstandsregelTest.scala @@ -10,7 +10,7 @@ import java.util.UUID class GleichstandsregelTest extends AnyWordSpec with Matchers { val testWertungen = { - val wk = Wettkampf(1L, None, LocalDate.of(2023, 3, 3), "Testwettkampf", 44L, 0, BigDecimal(0d), "", None, None, None) + val wk = Wettkampf(1L, None, LocalDate.of(2023, 3, 3), "Testwettkampf", 44L, 0, BigDecimal(0d), "", None, None, None, None) val a = Athlet(1L).copy(name = s"Testathlet", gebdat = Some(LocalDate.of(2004, 3, 2))).toAthletView(Some(Verein(1L, "Testverein", Some("Testverband")))) val d = for ( geraet <- List("Boden", "Pauschen", "Ring", "Sprung", "Barren", "Reck").zipWithIndex diff --git a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala index a46878ef6..85dcd0dde 100644 --- a/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala +++ b/src/test/scala/ch/seidel/kutu/domain/WettkampfSpec.scala @@ -10,15 +10,15 @@ import scala.util.matching.Regex class WettkampfSpec extends KuTuBaseSpec { "wettkampf" should { "create with disziplin-plan-times" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel", Set(20), "testmail@test.com", 33, 0, None, "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19", "") + val wettkampf = createWettkampf(LocalDate.now(), "titel", Set(20), "testmail@test.com", 33, 0, None, "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19", "", "") assert(wettkampf.id > 0L) val views = initWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(views.nonEmpty) } "update" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "", "") - val wettkampfsaved = saveWettkampf(wettkampf.id, wettkampf.datum, "neuer titel", Set(wettkampf.programmId), "testmail@test.com", 10000, 7.5, wettkampf.uuid, "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19", "") + val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "", "", "") + val wettkampfsaved = saveWettkampf(wettkampf.id, wettkampf.datum, "neuer titel", Set(wettkampf.programmId), "testmail@test.com", 10000, 7.5, wettkampf.uuid, "7,8,9,11,13,15,17,19", "7,8,9,11,13,15,17,19", "", "") assert(wettkampfsaved.titel == "neuer titel") assert(wettkampfsaved.auszeichnung == 10000) assert(wettkampfsaved.altersklassen.get == "7,8,9,11,13,15,17,19") @@ -26,18 +26,18 @@ class WettkampfSpec extends KuTuBaseSpec { } "recreate with disziplin-plan-times" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "", "") + val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "", "", "") assert(wettkampf.id > 0L) val views = initWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(views.nonEmpty) - val wettkampf2 = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, wettkampf.uuid, "", "", "") + val wettkampf2 = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, wettkampf.uuid, "", "", "", "") assert(wettkampf2.id == wettkampf.id) val views2 = initWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(views2.size == views.size) } "update disziplin-plan-time" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "", "") + val wettkampf = createWettkampf(LocalDate.now(), "titel2", Set(20), "testmail@test.com", 33, 0, None, "", "", "", "") assert(wettkampf.id > 0L) val views = initWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) @@ -47,7 +47,7 @@ class WettkampfSpec extends KuTuBaseSpec { } "delete all disziplin-plan-time entries when wk is deleted" in { - val wettkampf = createWettkampf(LocalDate.now(), "titel3", Set(20), "testmail@test.com", 33, 0, None, "", "", "") + val wettkampf = createWettkampf(LocalDate.now(), "titel3", Set(20), "testmail@test.com", 33, 0, None, "", "", "", "") deleteWettkampf(wettkampf.id) val reloaded = loadWettkampfDisziplinTimes(UUID.fromString(wettkampf.uuid.get)) assert(reloaded.isEmpty) From c9e84c8a502fba8bc8887a00f4c564be9a2aa793 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sat, 27 May 2023 12:31:54 +0200 Subject: [PATCH 90/99] #685 Test and Fix RiegenRotationsregel --- .../kutu/domain/RiegenRotationsregel.scala | 28 ++++---- .../ch/seidel/kutu/renderer/Kandidat.scala | 4 +- .../domain/RiegenRotationsregelTest.scala | 69 +++++++++++++++++++ 3 files changed, 83 insertions(+), 18 deletions(-) create mode 100644 src/test/scala/ch/seidel/kutu/domain/RiegenRotationsregelTest.scala diff --git a/src/main/scala/ch/seidel/kutu/domain/RiegenRotationsregel.scala b/src/main/scala/ch/seidel/kutu/domain/RiegenRotationsregel.scala index 67f5e4fc3..074ebe9ba 100644 --- a/src/main/scala/ch/seidel/kutu/domain/RiegenRotationsregel.scala +++ b/src/main/scala/ch/seidel/kutu/domain/RiegenRotationsregel.scala @@ -1,11 +1,5 @@ package ch.seidel.kutu.domain -import ch.seidel.kutu.data.GroupSection.STANDARD_SCORE_FACTOR -import org.controlsfx.validation.{Severity, ValidationResult, Validator} - -import java.time.temporal.ChronoUnit -import scala.math.BigDecimal.{RoundingMode, long2bigDecimal} - object RiegenRotationsregel { val defaultRegel = RiegenRotationsregelList(List( @@ -92,20 +86,22 @@ case object RiegenRotationsregelRotierend extends RiegenRotationsregel { } def rotate(text: Char, offset: Int): Char = { - val r1 = text + offset - val r2 = if (r1 > 'Z') { - r1 - 26 - } else if (r1 < 'A') { - r1 + 26 - } else { - r1 + if (text <='9' && text >= '0') text else { + val r1 = text + offset + val r2 = if (r1 > 'Z') { + r1 - 26 + } else if (r1 < 'A') { + r1 + 26 + } else { + r1 + } + r2.toChar } - r2.toChar } override def sorter(acc: List[String], kandidat: Kandidat): List[String] = { val date = kandidat.wertungen.head.wettkampf.datum.toLocalDate val day = date.getDayOfYear - val alphaOffset = day % 26 + val alphaOffset = (date.getYear + day) % 26 acc.map(rotateIfAlphaNumeric(_, alphaOffset)) } override def toFormel: String = "Rotierend" @@ -161,7 +157,7 @@ case class RiegenRotationsregelAlter(aufsteigend: Boolean) extends RiegenRotatio case _: NumberFormatException => 100 } val jg = (if (alter > 15) "0000" else kandidat.jahrgang) - acc :+ (if (aufsteigend) kandidat.jahrgang.reverse else kandidat.jahrgang) + acc :+ (if (aufsteigend) jg.reverse else jg) } override def toFormel: String = if (aufsteigend) "AlterAufsteigend" else "AlterAbsteigend" } diff --git a/src/main/scala/ch/seidel/kutu/renderer/Kandidat.scala b/src/main/scala/ch/seidel/kutu/renderer/Kandidat.scala index 99ebdf226..b2e0041d4 100644 --- a/src/main/scala/ch/seidel/kutu/renderer/Kandidat.scala +++ b/src/main/scala/ch/seidel/kutu/renderer/Kandidat.scala @@ -1,9 +1,9 @@ package ch.seidel.kutu.renderer -import ch.seidel.kutu.domain.{AthletJahrgang, AthletView, GeraeteRiege, WertungView} +import ch.seidel.kutu.domain.GeraeteRiege object Kandidaten { - def apply(riegen: Seq[GeraeteRiege]) = { + def apply(riegen: Seq[GeraeteRiege]): Seq[Kandidat] = { riegen // filter startgeraet .filter(riege => riege.halt == 0) diff --git a/src/test/scala/ch/seidel/kutu/domain/RiegenRotationsregelTest.scala b/src/test/scala/ch/seidel/kutu/domain/RiegenRotationsregelTest.scala new file mode 100644 index 000000000..56f693c77 --- /dev/null +++ b/src/test/scala/ch/seidel/kutu/domain/RiegenRotationsregelTest.scala @@ -0,0 +1,69 @@ +package ch.seidel.kutu.domain + +import org.scalatest.matchers.should.Matchers +import org.scalatest.wordspec.AnyWordSpec + +import java.time.LocalDate +import java.util.UUID + +class RiegenRotationsregelTest extends AnyWordSpec with Matchers { + + "Einfach 16+ / Default" in { + val turnerinA: Kandidat = mockKandidat("Einfach", 2007, 2023, 11, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin") + assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) == + "K1 -Aarau -0000-Turnerin -Almirez -Almaz ") + } + "Einfach 15 / Default" in { + val turnerinA: Kandidat = mockKandidat("Einfach", 2008, 2023, 11, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin") + assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) == + "K1 -Aarau -2008-Turnerin -Almirez -Almaz ") + } + "Einfach 16+ / AltInvers odd" in { + val turnerinA: Kandidat = mockKandidat("Einfach/AltInvers", 2008, 2023, 11, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin") + assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) == + "1K -uaraA -2008-nirenruT -zerimlA -zamlA ") + } + "Einfach 16+ / AltInvers even" in { + val turnerinA: Kandidat = mockKandidat("Einfach/AltInvers", 2004, 2023, 10, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin") + assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) == + "K1 -Aarau -0000-Turnerin -Almirez -Almaz ") + } + "Rotierend only leads to defautl (Einfach)" in { + val turnerinA: Kandidat = mockKandidat("Rotierend", 2007, 2023, 11, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin") + assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) == + "K1 -Aarau -0000-Turnerin -Almirez -Almaz ") + } + "AltInvers only leads to defautl (Einfach)" in { + val turnerinA: Kandidat = mockKandidat("AltInvers", 2007, 2023, 11, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin") + assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) == + "K1 -Aarau -0000-Turnerin -Almirez -Almaz ") + } + "Einfach/Rotierend offset 0" in { + val turnerinA: Kandidat = mockKandidat("Einfach/Rotierend", 2007, 2023, 4, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin") + assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) == + "K1 -AARAU -0000-TURNERIN -ALMIREZ -ALMAZ ") + } + "Einfach/Rotierend offset 1" in { + val turnerinA: Kandidat = mockKandidat("Einfach/Rotierend", 2007, 2023, 5, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin") + assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) == + "L1 -BBSBV -0000-UVSOFSJO -BMNJSFA -BMNBA ") + } + "Einfach 15/Rotierend/AltInvers offset 1" in { + val turnerinA: Kandidat = mockKandidat("Einfach/Rotierend/AltInvers", 2008, 2023, 5, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin") + assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) == + "1L -VBSBB -2008-OJSFOSVU -AFSJNMB -ABNMB ") + } + "Kategorie/Verein/AlterAufsteigend/Geschlecht/Name/Vorname/Rotierend/AltInvers offset 1" in { + val turnerinA: Kandidat = mockKandidat("Kategorie/Verein/AlterAufsteigend/Geschlecht/Name/Vorname/Rotierend/AltInvers", 2008, 2023, 5, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin") + assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) == + "1L -VBSBB -8002-OJSFOSVU -AFSJNMB -ABNMB ") + } + + private def mockKandidat(rotation: String, jahrgang: Int, wettkampfjahr: Int, wettkampfTag: Int, verein: String, name: String, vorname: String, kategorie: String, geschlecht: String) = { + val wk = Wettkampf(1L, None, LocalDate.of(wettkampfjahr, 1, 1).plusDays(wettkampfTag) , "Testwettkampf", 44L, 0, BigDecimal(0d), "", None, None, None, Some(rotation)) + val a = Athlet(1L).copy(name = name, vorname = vorname, gebdat = Some(LocalDate.of(jahrgang, 3, 2))).toAthletView(Some(Verein(1L, verein, Some("Testverband")))) + val wd = WettkampfdisziplinView(1, ProgrammView(44L, kategorie, 0, None, 1, 0, 100, UUID.randomUUID().toString, 1), Disziplin(1, "Boden"), "", None, StandardWettkampf(1.0), 1, 1, 0, 3, 1, 0, 30, 1) + val wv = WertungView(wd.id, a, wd, wk, None, None, None, None, None) + Kandidat("Testwettkampf", geschlecht, kategorie, 1, name, vorname, s"$jahrgang", verein, None, None, Seq(wd.disziplin), Seq.empty, Seq(wv)) + } +} From d9fcdc2e10fe4164b44128531d6b2afce7cbbf29 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sun, 28 May 2023 00:22:16 +0200 Subject: [PATCH 91/99] #698 add avg score-editor --- .../resultcatcher/src/app/backend-types.ts | 4 + .../src/app/component/component.module.ts | 5 +- .../wertung-avg-calc.component copy.html | 28 +++++++ .../wertung-avg-calc.component.html | 34 ++++++++ .../wertung-avg-calc.component.scss | 77 +++++++++++++++++++ .../wertung-avg-calc.component.spec.ts | 24 ++++++ .../wertung-avg-calc.component.ts | 71 +++++++++++++++++ .../wertung-editor/wertung-editor.module.ts | 4 +- .../wertung-editor/wertung-editor.page.html | 16 +--- .../resources/app/2539.044258b00f51d3ab.js | 1 + .../resources/app/9151.21577e63c2cd66c2.js | 1 - src/main/resources/app/index.html | 2 +- .../resources/app/main.170bd5e529b54339.js | 1 + .../resources/app/main.f2513059db4c78f6.js | 1 - .../resources/app/runtime.bf11d3681906b638.js | 1 + .../resources/app/runtime.cea9adeb419ceeb5.js | 1 - 16 files changed, 252 insertions(+), 19 deletions(-) create mode 100644 newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component copy.html create mode 100644 newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.html create mode 100644 newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.scss create mode 100644 newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.spec.ts create mode 100644 newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.ts create mode 100644 src/main/resources/app/2539.044258b00f51d3ab.js delete mode 100644 src/main/resources/app/9151.21577e63c2cd66c2.js create mode 100644 src/main/resources/app/main.170bd5e529b54339.js delete mode 100644 src/main/resources/app/main.f2513059db4c78f6.js create mode 100644 src/main/resources/app/runtime.bf11d3681906b638.js delete mode 100644 src/main/resources/app/runtime.cea9adeb419ceeb5.js diff --git a/newclient/resultcatcher/src/app/backend-types.ts b/newclient/resultcatcher/src/app/backend-types.ts index eb8794d36..dbd2f00aa 100644 --- a/newclient/resultcatcher/src/app/backend-types.ts +++ b/newclient/resultcatcher/src/app/backend-types.ts @@ -144,6 +144,10 @@ export interface Wettkampf { auszeichnungendnote: number; uuid: string; notificationEMail?: string; + altersklassen?: string; + jahrgangsklassen?: string; + punktegleichstandsregel?: string; + rotation?: string; } export interface ScoreRow { diff --git a/newclient/resultcatcher/src/app/component/component.module.ts b/newclient/resultcatcher/src/app/component/component.module.ts index ac7f9bded..4ee9bd79b 100644 --- a/newclient/resultcatcher/src/app/component/component.module.ts +++ b/newclient/resultcatcher/src/app/component/component.module.ts @@ -4,12 +4,13 @@ import { ResultDisplayComponent } from './result-display/result-display.componen import { RiegeListComponent } from './riege-list/riege-list.component'; import { StartlistItemComponent } from './startlist-item/startlist-item.component'; import { ScorelistItemComponent } from './scorelist-item/scorelist-item.component'; +import { WertungAvgCalcComponent } from './wertung-avg-calc/wertung-avg-calc.component'; import { FormsModule } from '@angular/forms'; import { IonicModule } from '@ionic/angular'; @NgModule({ - declarations: [ResultDisplayComponent, RiegeListComponent, StartlistItemComponent, ScorelistItemComponent], - exports: [ResultDisplayComponent, RiegeListComponent, StartlistItemComponent, ScorelistItemComponent], + declarations: [ResultDisplayComponent, RiegeListComponent, StartlistItemComponent, ScorelistItemComponent, WertungAvgCalcComponent], + exports: [ResultDisplayComponent, RiegeListComponent, StartlistItemComponent, ScorelistItemComponent, WertungAvgCalcComponent], imports: [ CommonModule, FormsModule, diff --git a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component copy.html b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component copy.html new file mode 100644 index 000000000..0f9a1f6db --- /dev/null +++ b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component copy.html @@ -0,0 +1,28 @@ + + {{valueTitle}} - {{avg()}} + + + Wertung # + {{valueTitle}} + Action + + + {{ i }}. + +
            + +
            + + - +
            + + + + + +
            +
            diff --git a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.html b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.html new file mode 100644 index 000000000..6b2b4c268 --- /dev/null +++ b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.html @@ -0,0 +1,34 @@ + + {{title}} + + + + + + {{title}} - ø {{calcAvg()}} + + + {{i+1}}. Wertung + +
            + + +
            + + +
            + + + + +
            +
            diff --git a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.scss b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.scss new file mode 100644 index 000000000..6536568b9 --- /dev/null +++ b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.scss @@ -0,0 +1,77 @@ +.table { + background-color: var(--ion-background-color); + //font-size: 0.8rem; + height: 100%; + overflow: hidden; + overflow-y: auto; + .table-header, + .table-subject { + color: var(--ion-color-primary); + font-weight: bold; + } + ion-row { + //margin: 5px; + display: flex; + justify-content: center; + align-items: center; + flex-wrap: nowrap; + ion-col { + //flex-basis: 20%; + &.table-subject { + flex: 0 0 1.5em; + } + &.number { + flex: 0 0 6em; + letter-spacing: 0.5px; + } + } + } +} + +@media all and (min-height: 720px) { + .table { + ion-row { + margin: 10px; + } + } +} + + +#input-group { + height: 70%; + overflow: hidden; + #validity { + width: 0; + height: 0; + position: absolute; + top: 0%; + right: 0%; + border-left: 15px solid transparent; + border-top: 15px solid transparent; + } + ion-input { + height: 100%; + width: 100%; + outline: none; + text-align: right; + border: 1px solid #a9a9a9; + } + &.valid { + #validity { + border-left: 15px solid transparent; + border-top: 15px solid var(--ion-color-success); + } + ion-input { + border: 1px solid var(--ion-color-success); + } + } + &.invalid { + #validity { + border-left: 15px solid transparent; + border-top: 15px solid var(--ion-color-danger) + } + ion-input { + border: 1px solid var(--ion-color-danger); + } + } +} \ No newline at end of file diff --git a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.spec.ts b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.spec.ts new file mode 100644 index 000000000..be8abe842 --- /dev/null +++ b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { WertungAvgCalcComponent } from './wertung-avg-calc.component'; + +describe('WertungAvgCalcComponent', () => { + let component: WertungAvgCalcComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ WertungAvgCalcComponent ], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(WertungAvgCalcComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.ts b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.ts new file mode 100644 index 000000000..d2cd115a6 --- /dev/null +++ b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.ts @@ -0,0 +1,71 @@ +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; + +@Component({ + selector: 'app-wertung-avg-calc', + templateUrl: './wertung-avg-calc.component.html', + styleUrls: ['./wertung-avg-calc.component.scss'], +}) +export class WertungAvgCalcComponent implements OnInit { + + @Input() + hidden: boolean; + + @Input() + readonly: boolean; + + @Input() + waiting: boolean; + + @Input() + valueTitle: string; + + @Input() + valueDescription: string; + + @Input() + singleValue: number; + + @Output() + avgValue: EventEmitter = new EventEmitter(); + + singleValues: {value:number}[] = []; + + ngOnInit() { + this.singleValues = [{value: this.singleValue}]; + } + + get title(): string { + return this.valueTitle; + } + + get singleValueContainer() { + return this.singleValues[0]; + } + + add() { + this.singleValues = [...this.singleValues, {value: 0.000}]; + } + + remove(index) { + if (index > -1) { + this.singleValues.splice(index, 1); + } + } + + onChange(event, item) { + item.value = event.target.value; + } + onBlur(event, item) { + item.value = Number(event.target.value).toFixed(3); + } + + calcAvg(): number { + const avg1 = this.singleValues + .filter(item => !!item.value) + .map(item => Number(item.value)) + .filter(item => item > 0) + const avg2 = Number((avg1.reduce((sum, current) => sum + current, 0) / avg1.length).toFixed(3)); + this.avgValue.emit(avg2); + return avg2; + } +} diff --git a/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.module.ts b/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.module.ts index 0da129b92..10d4a4d46 100644 --- a/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.module.ts +++ b/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.module.ts @@ -6,6 +6,7 @@ import { Routes, RouterModule } from '@angular/router'; import { IonicModule } from '@ionic/angular'; import { WertungEditorPage } from './wertung-editor.page'; +import { ComponentsModule } from '../component/component.module'; const routes: Routes = [ { @@ -19,7 +20,8 @@ const routes: Routes = [ CommonModule, FormsModule, IonicModule, - RouterModule.forChild(routes) + RouterModule.forChild(routes), + ComponentsModule ], providers: [], declarations: [WertungEditorPage] diff --git a/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.page.html b/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.page.html index 5248c32db..a3ec40182 100644 --- a/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.page.html +++ b/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.page.html @@ -12,18 +12,10 @@
            - - D-Note - - - - E-Note - - + + + + Endnote diff --git a/src/main/resources/app/2539.044258b00f51d3ab.js b/src/main/resources/app/2539.044258b00f51d3ab.js new file mode 100644 index 000000000..baf48e4a1 --- /dev/null +++ b/src/main/resources/app/2539.044258b00f51d3ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[2539],{58:(J,p,u)=>{u.r(p),u.d(p,{WertungEditorPageModule:()=>E});var d=u(6895),g=u(433),h=u(5472),r=u(502),m=u(5861);const _=(0,u(7423).fo)("Keyboard");var e=u(8274),v=u(600);function f(o,l){if(1&o&&(e.TgZ(0,"ion-label"),e._uU(1),e.qZA()),2&o){const t=e.oxw();e.xp6(1),e.Oqu(t.title)}}function w(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-input",5,6),e.NdJ("ngModelChange",function(i){e.CHM(t);const s=e.oxw();return e.KtG(s.singleValueContainer.value=i)}),e.qZA()}if(2&o){const t=e.oxw();e.MGl("name","",t.valueTitle,"0"),e.Q6J("disabled",t.waiting)("ngModel",t.singleValueContainer.value)}}function C(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-button",7),e.NdJ("click",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.add())}),e._UZ(1,"ion-icon",8),e.qZA()}}function x(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-row")(1,"ion-col",13),e._uU(2),e.qZA(),e.TgZ(3,"ion-col",14),e._UZ(4,"div",15),e.TgZ(5,"ion-input",16),e.NdJ("ionChange",function(i){const a=e.CHM(t).$implicit,c=e.oxw(2);return e.KtG(c.onChange(i,a))})("ionBlur",function(i){const a=e.CHM(t).$implicit,c=e.oxw(2);return e.KtG(c.onBlur(i,a))}),e.qZA()(),e.TgZ(6,"ion-col",17)(7,"ion-button",18),e.NdJ("click",function(){const s=e.CHM(t).index,a=e.oxw(2);return e.KtG(a.remove(s))}),e._UZ(8,"ion-icon",19),e.qZA()()()}if(2&o){const t=l.$implicit,n=l.index,i=e.oxw(2);e.xp6(2),e.hij("",n+1,". Wertung"),e.xp6(3),e.hYB("name","",i.valueTitle,"",n,""),e.Q6J("disabled",i.waiting)("ngModel",t.value)}}function M(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-grid",9)(1,"ion-row",10)(2,"ion-col"),e._uU(3),e.qZA()(),e.YNc(4,x,9,5,"ion-row",11),e.TgZ(5,"ion-row",10)(6,"ion-col")(7,"ion-button",12),e.NdJ("click",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.add())}),e._UZ(8,"ion-icon",8),e.qZA()()()()}if(2&o){const t=e.oxw();e.xp6(3),e.AsE("",t.title," - \xf8 ",t.calcAvg(),""),e.xp6(1),e.Q6J("ngForOf",t.singleValues)}}let k=(()=>{class o{constructor(){this.avgValue=new e.vpe,this.singleValues=[]}ngOnInit(){this.singleValues=[{value:this.singleValue}]}get title(){return this.valueTitle}get singleValueContainer(){return this.singleValues[0]}add(){this.singleValues=[...this.singleValues,{value:0}]}remove(t){t>-1&&this.singleValues.splice(t,1)}onChange(t,n){n.value=t.target.value}onBlur(t,n){n.value=Number(t.target.value).toFixed(3)}calcAvg(){const t=this.singleValues.filter(i=>!!i.value).map(i=>Number(i.value)).filter(i=>i>0),n=Number((t.reduce((i,s)=>i+s,0)/t.length).toFixed(3));return this.avgValue.emit(n),n}}return o.\u0275fac=function(t){return new(t||o)},o.\u0275cmp=e.Xpm({type:o,selectors:[["app-wertung-avg-calc"]],inputs:{hidden:"hidden",readonly:"readonly",waiting:"waiting",valueTitle:"valueTitle",valueDescription:"valueDescription",singleValue:"singleValue"},outputs:{avgValue:"avgValue"},decls:5,vars:5,consts:[[3,"hidden"],[4,"ngIf"],["autofocus","","placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","step","0.050","min","0.000","max","100.000","required","",3,"disabled","ngModel","name","ngModelChange",4,"ngIf"],["slot","end","expand","block","color","secondary",3,"click",4,"ngIf"],["class","table","no-padding","",4,"ngIf"],["autofocus","","placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","step","0.050","min","0.000","max","100.000","required","",3,"disabled","ngModel","name","ngModelChange"],["enote",""],["slot","end","expand","block","color","secondary",3,"click"],["name","add-circle-outline"],["no-padding","",1,"table"],[1,"table-header"],[4,"ngFor","ngForOf"],["expand","block","color","secondary",3,"click"],[1,"number"],["id","input-group","no-padding",""],["id","validity"],["placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","step","0.050","min","0.000","max","100.000","required","",3,"name","disabled","ngModel","ionChange","ionBlur"],[1,"table-subject"],["color","danger",3,"click"],["name","trash-outline"]],template:function(t,n){1&t&&(e.TgZ(0,"ion-item",0),e.YNc(1,f,2,1,"ion-label",1),e.YNc(2,w,2,3,"ion-input",2),e.YNc(3,C,2,0,"ion-button",3),e.YNc(4,M,9,3,"ion-grid",4),e.qZA()),2&t&&(e.Q6J("hidden",n.hidden),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length>1))},dependencies:[d.sg,d.O5,g.JJ,g.Q7,g.On,r.YG,r.wI,r.jY,r.gu,r.pK,r.Ie,r.Q$,r.Nd,r.as],styles:[".table[_ngcontent-%COMP%]{background-color:var(--ion-background-color);height:100%;overflow:hidden;overflow-y:auto}.table[_ngcontent-%COMP%] .table-header[_ngcontent-%COMP%], .table[_ngcontent-%COMP%] .table-subject[_ngcontent-%COMP%]{color:var(--ion-color-primary);font-weight:700}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;flex-wrap:nowrap}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.table-subject[_ngcontent-%COMP%]{flex:0 0 1.5em}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.number[_ngcontent-%COMP%]{flex:0 0 6em;letter-spacing:.5px}@media all and (min-height: 720px){.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%]{margin:10px}}#input-group[_ngcontent-%COMP%]{height:70%;overflow:hidden}#input-group[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{width:0;height:0;position:absolute;top:0%;right:0%;border-left:15px solid transparent;border-top:15px solid transparent}#input-group[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{height:100%;width:100%;outline:none;text-align:right;border:1px solid #a9a9a9}#input-group.valid[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{border-left:15px solid transparent;border-top:15px solid var(--ion-color-success)}#input-group.valid[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{border:1px solid var(--ion-color-success)}#input-group.invalid[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{border-left:15px solid transparent;border-top:15px solid var(--ion-color-danger)}#input-group.invalid[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{border:1px solid var(--ion-color-danger)}"]}),o})();const O=["wertungsform"],I=["enote"],Z=["dnote"];function T(o,l){1&o&&(e.TgZ(0,"ion-item"),e._uU(1," Ung\xfcltige Eingabe. Die Werte m\xfcssen im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt) eingegeben werden. "),e.qZA())}function P(o,l){if(1&o&&(e.TgZ(0,"ion-button",13,14),e._UZ(2,"ion-icon",15),e._uU(3,"Speichern & Weiter"),e.qZA()),2&o){const t=e.oxw(),n=e.MAs(13);e.Q6J("disabled",t.waiting||!n.valid)}}function A(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-button",16),e.NdJ("click",function(){e.CHM(t);const i=e.oxw(),s=e.MAs(13);return e.KtG(i.saveClose(s))}),e._UZ(1,"ion-icon",17),e._uU(2,"Speichern"),e.qZA()}if(2&o){const t=e.oxw(),n=e.MAs(13);e.Q6J("disabled",t.waiting||!n.valid)}}let y=(()=>{class o{constructor(t,n,i,s,a,c,U){this.navCtrl=t,this.route=n,this.alertCtrl=i,this.toastController=s,this.backendService=a,this.platform=c,this.zone=U,this.waiting=!1,this.isDNoteUsed=!0,this.durchgang=a.durchgang,this.step=a.step,this.geraetId=a.geraet;const V=parseInt(this.route.snapshot.paramMap.get("itemId"));this.updateUI(a.wertungen.find(F=>F.id===V)),this.isDNoteUsed=this.item.isDNoteUsed}ionViewWillLeave(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}ionViewWillEnter(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0),this.subscription=this.backendService.wertungUpdated.subscribe(t=>{console.log("incoming wertung from service",t),t.wertung.athletId===this.wertung.athletId&&t.wertung.wettkampfdisziplinId===this.wertung.wettkampfdisziplinId&&t.wertung.endnote!==this.wertung.endnote&&(console.log("updateing wertung from service"),this.item.wertung=Object.assign({},t.wertung),this.itemOriginal.wertung=Object.assign({},t.wertung),this.wertung=Object.assign({noteD:0,noteE:0,endnote:0},this.item.wertung))}),this.platform.ready().then(()=>{setTimeout(()=>{_.show&&(_.show(),console.log("keyboard called")),this.isDNoteUsed&&this.dnote?(this.dnote.setFocus(),console.log("dnote focused")):this.enote&&(this.enote.setFocus(),console.log("enote focused"))},400)})}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.item=Object.assign({},t),this.itemOriginal=Object.assign({},t),this.wertung=Object.assign({noteD:0,noteE:0,endnote:0},this.itemOriginal.wertung),this.ionViewWillEnter()})}ensureInitialValues(t){return Object.assign(this.wertung,t)}saveClose(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.updateUI(n),this.navCtrl.pop()},error:n=>{this.updateUI(this.itemOriginal),console.log(n)}}))}save(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.updateUI(n)},error:n=>{this.updateUI(this.itemOriginal),console.log(n)}}))}saveNext(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.waiting=!1;const i=this.backendService.wertungen.findIndex(a=>a.wertung.id===n.wertung.id);i<0&&console.log("unexpected wertung - id matches not with current wertung: "+n.wertung.id);let s=i+1;if(i<0)s=0;else if(i>=this.backendService.wertungen.length-1){if(0===this.backendService.wertungen.filter(a=>void 0===a.wertung.endnote).length)return this.navCtrl.pop(),void this.toastSuggestCompletnessCheck();s=this.backendService.wertungen.findIndex(a=>void 0===a.wertung.endnote),this.toastMissingResult(t,this.backendService.wertungen[s].vorname+" "+this.backendService.wertungen[s].name)}t.resetForm(),this.updateUI(this.backendService.wertungen[s])},error:n=>{this.updateUI(this.itemOriginal),console.log(n)}}))}nextEmptyOrFinish(t){const n=this.backendService.wertungen.findIndex(i=>i.wertung.id===this.wertung.id);if(0===this.backendService.wertungen.filter((i,s)=>s>n&&void 0===i.wertung.endnote).length)return this.navCtrl.pop(),void this.toastSuggestCompletnessCheck();{const i=this.backendService.wertungen.findIndex((s,a)=>a>n&&void 0===s.wertung.endnote);this.toastMissingResult(t,this.backendService.wertungen[i].vorname+" "+this.backendService.wertungen[i].name),t.resetForm(),this.updateUI(this.backendService.wertungen[i])}}geraetName(){return this.backendService.geraete?this.backendService.geraete.find(t=>t.id===this.geraetId).name:""}toastSuggestCompletnessCheck(){var t=this;return(0,m.Z)(function*(){(yield t.toastController.create({header:"Qualit\xe4tskontrolle",message:"Es sind jetzt alle Resultate erfasst. Bitte ZU ZWEIT die Resultate pr\xfcfen und abschliessen!",animated:!0,position:"middle",buttons:[{text:"OK, gelesen.",icon:"checkmark-circle",role:"cancel",handler:()=>{console.log("OK, gelesen. clicked")}}]})).present()})()}toastMissingResult(t,n){var i=this;return(0,m.Z)(function*(){(yield i.alertCtrl.create({header:"Achtung",subHeader:"Fehlendes Resultat!",message:"Nach der Erfassung der letzten Wertung in dieser Riege scheint es noch leere Wertungen zu geben. Bitte pr\xfcfen, ob "+n.toUpperCase()+" geturnt hat.",buttons:[{text:"Nicht geturnt",role:"edit",handler:()=>{i.nextEmptyOrFinish(t)}},{text:"Korrigieren",role:"cancel",handler:()=>{console.log("Korrigieren clicked")}}]})).present()})()}}return o.\u0275fac=function(t){return new(t||o)(e.Y36(r.SH),e.Y36(h.gz),e.Y36(r.Br),e.Y36(r.yF),e.Y36(v.v),e.Y36(r.t4),e.Y36(e.R0b))},o.\u0275cmp=e.Xpm({type:o,selectors:[["app-wertung-editor"]],viewQuery:function(t,n){if(1&t&&(e.Gf(O,5),e.Gf(I,5),e.Gf(Z,5)),2&t){let i;e.iGM(i=e.CRH())&&(n.form=i.first),e.iGM(i=e.CRH())&&(n.enote=i.first),e.iGM(i=e.CRH())&&(n.dnote=i.first)}},decls:26,vars:15,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[1,"riege"],[3,"ngSubmit","keyup.enter"],["wertungsform","ngForm"],[3,"hidden","waiting","valueTitle","singleValue","avgValue"],["type","number","readonly","","name","endnote",3,"ngModel"],["endnote",""],[4,"ngIf"],["size","large","expand","block","type","submit","color","success",3,"disabled",4,"ngIf"],["size","large","expand","block","color","secondary",3,"disabled","click",4,"ngIf"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name","arrow-forward-circle-outline"],["size","large","expand","block","color","secondary",3,"disabled","click"],["slot","start","name","checkmark-circle"]],template:function(t,n){if(1&t){const i=e.EpF();e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA(),e.TgZ(9,"div",4),e._uU(10),e.qZA()()()(),e.TgZ(11,"ion-content")(12,"form",5,6),e.NdJ("ngSubmit",function(){e.CHM(i);const a=e.MAs(13);return e.KtG(n.saveNext(a))})("keyup.enter",function(){e.CHM(i);const a=e.MAs(13);return e.KtG(n.saveNext(a))}),e.TgZ(14,"ion-list")(15,"app-wertung-avg-calc",7),e.NdJ("avgValue",function(){return n.wertung.noteD}),e.qZA(),e.TgZ(16,"app-wertung-avg-calc",7),e.NdJ("avgValue",function(){return n.wertung.noteE}),e.qZA(),e.TgZ(17,"ion-item")(18,"ion-label"),e._uU(19,"Endnote"),e.qZA(),e._UZ(20,"ion-input",8,9),e.qZA()(),e.TgZ(22,"ion-list"),e.YNc(23,T,2,0,"ion-item",10),e.YNc(24,P,4,1,"ion-button",11),e.YNc(25,A,3,1,"ion-button",12),e.qZA()()()}if(2&t){const i=e.MAs(13);e.xp6(5),e.Oqu(n.geraetName()),e.xp6(3),e.Oqu(n.item.vorname+" "+n.item.name),e.xp6(2),e.Oqu(n.wertung.riege),e.xp6(5),e.Q6J("hidden",!n.isDNoteUsed)("waiting",n.waiting)("valueTitle","D-Note")("singleValue",n.wertung.noteD),e.xp6(1),e.Q6J("hidden",!1)("waiting",n.waiting)("valueTitle","E-Note")("singleValue",n.wertung.noteE),e.xp6(4),e.Q6J("ngModel",n.wertung.endnote),e.xp6(3),e.Q6J("ngIf",!i.valid),e.xp6(1),e.Q6J("ngIf",n.editable()),e.xp6(1),e.Q6J("ngIf",n.editable())}},dependencies:[d.O5,g._Y,g.JJ,g.JL,g.On,g.F,r.oU,r.YG,r.Sm,r.W2,r.Gu,r.gu,r.pK,r.Ie,r.Q$,r.q_,r.uN,r.wd,r.sr,r.as,r.cs,k],styles:[".riege[_ngcontent-%COMP%]{font-size:small;padding-right:16px;color:var(--ion-color-medium)}.athlet[_ngcontent-%COMP%]{font-size:larger;padding-right:16px;font-weight:bolder;color:var(--ion-color-primary)}"]}),o})();var W=u(5051);const N=[{path:"",component:y}];let E=(()=>{class o{}return o.\u0275fac=function(t){return new(t||o)},o.\u0275mod=e.oAB({type:o}),o.\u0275inj=e.cJS({imports:[d.ez,g.u5,r.Pc,h.Bz.forChild(N),W.K]}),o})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/9151.21577e63c2cd66c2.js b/src/main/resources/app/9151.21577e63c2cd66c2.js deleted file mode 100644 index 16b3bb9bb..000000000 --- a/src/main/resources/app/9151.21577e63c2cd66c2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[9151],{9151:(M,g,u)=>{u.r(g),u.d(g,{WertungEditorPageModule:()=>x});var c=u(6895),l=u(433),h=u(5472),s=u(502),m=u(5861);const p=(0,u(7423).fo)("Keyboard");var e=u(8274),f=u(600);const w=["wertungsform"],v=["enote"],I=["dnote"];function k(r,d){1&r&&(e.TgZ(0,"ion-item"),e._uU(1," Ung\xfcltige Eingabe. Die Werte m\xfcssen im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt) eingegeben werden. "),e.qZA())}function Z(r,d){if(1&r&&(e.TgZ(0,"ion-button",17,18),e._UZ(2,"ion-icon",19),e._uU(3,"Speichern & Weiter"),e.qZA()),2&r){const t=e.oxw(),n=e.MAs(13);e.Q6J("disabled",t.waiting||!n.valid)}}function U(r,d){if(1&r){const t=e.EpF();e.TgZ(0,"ion-button",20),e.NdJ("click",function(){e.CHM(t);const i=e.oxw(),a=e.MAs(13);return e.KtG(i.saveClose(a))}),e._UZ(1,"ion-icon",21),e._uU(2,"Speichern"),e.qZA()}if(2&r){const t=e.oxw(),n=e.MAs(13);e.Q6J("disabled",t.waiting||!n.valid)}}const y=[{path:"",component:(()=>{class r{constructor(t,n,i,a,o,E,C){this.navCtrl=t,this.route=n,this.alertCtrl=i,this.toastController=a,this.backendService=o,this.platform=E,this.zone=C,this.waiting=!1,this.isDNoteUsed=!0,this.durchgang=o.durchgang,this.step=o.step,this.geraetId=o.geraet;const S=parseInt(this.route.snapshot.paramMap.get("itemId"));this.updateUI(o.wertungen.find(_=>_.id===S)),this.isDNoteUsed=this.item.isDNoteUsed}ionViewWillLeave(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}ionViewWillEnter(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0),this.subscription=this.backendService.wertungUpdated.subscribe(t=>{console.log("incoming wertung from service",t),t.wertung.athletId===this.wertung.athletId&&t.wertung.wettkampfdisziplinId===this.wertung.wettkampfdisziplinId&&t.wertung.endnote!==this.wertung.endnote&&(console.log("updateing wertung from service"),this.item.wertung=Object.assign({},t.wertung),this.itemOriginal.wertung=Object.assign({},t.wertung),this.wertung=Object.assign({noteD:0,noteE:0,endnote:0},this.item.wertung))}),this.platform.ready().then(()=>{setTimeout(()=>{p.show&&(p.show(),console.log("keyboard called")),this.isDNoteUsed&&this.dnote?(this.dnote.setFocus(),console.log("dnote focused")):this.enote&&(this.enote.setFocus(),console.log("enote focused"))},400)})}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.item=Object.assign({},t),this.itemOriginal=Object.assign({},t),this.wertung=Object.assign({noteD:0,noteE:0,endnote:0},this.itemOriginal.wertung),this.ionViewWillEnter()})}ensureInitialValues(t){return Object.assign(this.wertung,t)}saveClose(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.updateUI(n),this.navCtrl.pop()},error:n=>{this.updateUI(this.itemOriginal),console.log(n)}}))}save(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.updateUI(n)},error:n=>{this.updateUI(this.itemOriginal),console.log(n)}}))}saveNext(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.waiting=!1;const i=this.backendService.wertungen.findIndex(o=>o.wertung.id===n.wertung.id);i<0&&console.log("unexpected wertung - id matches not with current wertung: "+n.wertung.id);let a=i+1;if(i<0)a=0;else if(i>=this.backendService.wertungen.length-1){if(0===this.backendService.wertungen.filter(o=>void 0===o.wertung.endnote).length)return this.navCtrl.pop(),void this.toastSuggestCompletnessCheck();a=this.backendService.wertungen.findIndex(o=>void 0===o.wertung.endnote),this.toastMissingResult(t,this.backendService.wertungen[a].vorname+" "+this.backendService.wertungen[a].name)}t.resetForm(),this.updateUI(this.backendService.wertungen[a])},error:n=>{this.updateUI(this.itemOriginal),console.log(n)}}))}nextEmptyOrFinish(t){const n=this.backendService.wertungen.findIndex(i=>i.wertung.id===this.wertung.id);if(0===this.backendService.wertungen.filter((i,a)=>a>n&&void 0===i.wertung.endnote).length)return this.navCtrl.pop(),void this.toastSuggestCompletnessCheck();{const i=this.backendService.wertungen.findIndex((a,o)=>o>n&&void 0===a.wertung.endnote);this.toastMissingResult(t,this.backendService.wertungen[i].vorname+" "+this.backendService.wertungen[i].name),t.resetForm(),this.updateUI(this.backendService.wertungen[i])}}geraetName(){return this.backendService.geraete?this.backendService.geraete.find(t=>t.id===this.geraetId).name:""}toastSuggestCompletnessCheck(){var t=this;return(0,m.Z)(function*(){(yield t.toastController.create({header:"Qualit\xe4tskontrolle",message:"Es sind jetzt alle Resultate erfasst. Bitte ZU ZWEIT die Resultate pr\xfcfen und abschliessen!",animated:!0,position:"middle",buttons:[{text:"OK, gelesen.",icon:"checkmark-circle",role:"cancel",handler:()=>{console.log("OK, gelesen. clicked")}}]})).present()})()}toastMissingResult(t,n){var i=this;return(0,m.Z)(function*(){(yield i.alertCtrl.create({header:"Achtung",subHeader:"Fehlendes Resultat!",message:"Nach der Erfassung der letzten Wertung in dieser Riege scheint es noch leere Wertungen zu geben. Bitte pr\xfcfen, ob "+n.toUpperCase()+" geturnt hat.",buttons:[{text:"Nicht geturnt",role:"edit",handler:()=>{i.nextEmptyOrFinish(t)}},{text:"Korrigieren",role:"cancel",handler:()=>{console.log("Korrigieren clicked")}}]})).present()})()}}return r.\u0275fac=function(t){return new(t||r)(e.Y36(s.SH),e.Y36(h.gz),e.Y36(s.Br),e.Y36(s.yF),e.Y36(f.v),e.Y36(s.t4),e.Y36(e.R0b))},r.\u0275cmp=e.Xpm({type:r,selectors:[["app-wertung-editor"]],viewQuery:function(t,n){if(1&t&&(e.Gf(w,5),e.Gf(v,5),e.Gf(I,5)),2&t){let i;e.iGM(i=e.CRH())&&(n.form=i.first),e.iGM(i=e.CRH())&&(n.enote=i.first),e.iGM(i=e.CRH())&&(n.dnote=i.first)}},decls:34,vars:14,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[1,"riege"],[3,"ngSubmit","keyup.enter"],["wertungsform","ngForm"],[3,"hidden"],["autofocus","","placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","name","noteD","step","0.01","min","0","max","100",3,"readonly","disabled","ngModel"],["dnote",""],["autofocus","","placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","name","noteE","step","0.01","min","0","max","100","required","",3,"readonly","disabled","ngModel"],["enote",""],["type","number","readonly","","name","endnote",3,"ngModel"],["endnote",""],[4,"ngIf"],["size","large","expand","block","type","submit","color","success",3,"disabled",4,"ngIf"],["size","large","expand","block","color","secondary",3,"disabled","click",4,"ngIf"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name","arrow-forward-circle-outline"],["size","large","expand","block","color","secondary",3,"disabled","click"],["slot","start","name","checkmark-circle"]],template:function(t,n){if(1&t){const i=e.EpF();e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA(),e.TgZ(9,"div",4),e._uU(10),e.qZA()()()(),e.TgZ(11,"ion-content")(12,"form",5,6),e.NdJ("ngSubmit",function(){e.CHM(i);const o=e.MAs(13);return e.KtG(n.saveNext(o))})("keyup.enter",function(){e.CHM(i);const o=e.MAs(13);return e.KtG(n.saveNext(o))}),e.TgZ(14,"ion-list")(15,"ion-item",7)(16,"ion-label"),e._uU(17,"D-Note"),e.qZA(),e._UZ(18,"ion-input",8,9),e.qZA(),e.TgZ(20,"ion-item")(21,"ion-label"),e._uU(22,"E-Note"),e.qZA(),e._UZ(23,"ion-input",10,11),e.qZA(),e.TgZ(25,"ion-item")(26,"ion-label"),e._uU(27,"Endnote"),e.qZA(),e._UZ(28,"ion-input",12,13),e.qZA()(),e.TgZ(30,"ion-list"),e.YNc(31,k,2,0,"ion-item",14),e.YNc(32,Z,4,1,"ion-button",15),e.YNc(33,U,3,1,"ion-button",16),e.qZA()()()}if(2&t){const i=e.MAs(13);e.xp6(5),e.Oqu(n.geraetName()),e.xp6(3),e.Oqu(n.item.vorname+" "+n.item.name),e.xp6(2),e.Oqu(n.wertung.riege),e.xp6(5),e.Q6J("hidden",!n.isDNoteUsed),e.xp6(3),e.Q6J("readonly",!n.editable())("disabled",n.waiting)("ngModel",n.wertung.noteD),e.xp6(5),e.Q6J("readonly",!n.editable())("disabled",n.waiting)("ngModel",n.wertung.noteE),e.xp6(5),e.Q6J("ngModel",n.wertung.endnote),e.xp6(3),e.Q6J("ngIf",!i.valid),e.xp6(1),e.Q6J("ngIf",n.editable()),e.xp6(1),e.Q6J("ngIf",n.editable())}},dependencies:[c.O5,l._Y,l.JJ,l.JL,l.Q7,l.On,l.F,s.oU,s.YG,s.Sm,s.W2,s.Gu,s.gu,s.pK,s.Ie,s.Q$,s.q_,s.uN,s.wd,s.sr,s.as,s.cs],styles:[".riege[_ngcontent-%COMP%]{font-size:small;padding-right:16px;color:var(--ion-color-medium)}.athlet[_ngcontent-%COMP%]{font-size:larger;padding-right:16px;font-weight:bolder;color:var(--ion-color-primary)}"]}),r})()}];let x=(()=>{class r{}return r.\u0275fac=function(t){return new(t||r)},r.\u0275mod=e.oAB({type:r}),r.\u0275inj=e.cJS({imports:[c.ez,l.u5,s.Pc,h.Bz.forChild(y)]}),r})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/index.html b/src/main/resources/app/index.html index 8101e0e2d..e0cddfe64 100644 --- a/src/main/resources/app/index.html +++ b/src/main/resources/app/index.html @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/src/main/resources/app/main.170bd5e529b54339.js b/src/main/resources/app/main.170bd5e529b54339.js new file mode 100644 index 000000000..653cbb013 --- /dev/null +++ b/src/main/resources/app/main.170bd5e529b54339.js @@ -0,0 +1 @@ +(self.webpackChunkapp=self.webpackChunkapp||[]).push([[179],{7423:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Uw:()=>P,fo:()=>B});var o=w(5861);typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"&&global;var U=(()=>{return(T=U||(U={})).Unimplemented="UNIMPLEMENTED",T.Unavailable="UNAVAILABLE",U;var T})();class _ extends Error{constructor(k,O,te){super(k),this.message=k,this.code=O,this.data=te}}const G=T=>{var k,O,te,ce,Ae;const De=T.CapacitorCustomPlatform||null,ue=T.Capacitor||{},de=ue.Plugins=ue.Plugins||{},ne=T.CapacitorPlatforms,Ce=(null===(k=ne?.currentPlatform)||void 0===k?void 0:k.getPlatform)||(()=>null!==De?De.name:(T=>{var k,O;return T?.androidBridge?"android":null!==(O=null===(k=T?.webkit)||void 0===k?void 0:k.messageHandlers)&&void 0!==O&&O.bridge?"ios":"web"})(T)),dt=(null===(O=ne?.currentPlatform)||void 0===O?void 0:O.isNativePlatform)||(()=>"web"!==Ce()),Ue=(null===(te=ne?.currentPlatform)||void 0===te?void 0:te.isPluginAvailable)||(Pt=>!(!Rt.get(Pt)?.platforms.has(Ce())&&!Ke(Pt))),Ke=(null===(ce=ne?.currentPlatform)||void 0===ce?void 0:ce.getPluginHeader)||(Pt=>{var Ut;return null===(Ut=ue.PluginHeaders)||void 0===Ut?void 0:Ut.find(it=>it.name===Pt)}),Rt=new Map,pn=(null===(Ae=ne?.currentPlatform)||void 0===Ae?void 0:Ae.registerPlugin)||((Pt,Ut={})=>{const it=Rt.get(Pt);if(it)return console.warn(`Capacitor plugin "${Pt}" already registered. Cannot register plugins twice.`),it.proxy;const Xt=Ce(),kt=Ke(Pt);let Vt;const rn=function(){var Et=(0,o.Z)(function*(){return!Vt&&Xt in Ut?Vt=Vt="function"==typeof Ut[Xt]?yield Ut[Xt]():Ut[Xt]:null!==De&&!Vt&&"web"in Ut&&(Vt=Vt="function"==typeof Ut.web?yield Ut.web():Ut.web),Vt});return function(){return Et.apply(this,arguments)}}(),en=Et=>{let ut;const Ct=(...qe)=>{const on=rn().then(gn=>{const Nt=((Et,ut)=>{var Ct,qe;if(!kt){if(Et)return null===(qe=Et[ut])||void 0===qe?void 0:qe.bind(Et);throw new _(`"${Pt}" plugin is not implemented on ${Xt}`,U.Unimplemented)}{const on=kt?.methods.find(gn=>ut===gn.name);if(on)return"promise"===on.rtype?gn=>ue.nativePromise(Pt,ut.toString(),gn):(gn,Nt)=>ue.nativeCallback(Pt,ut.toString(),gn,Nt);if(Et)return null===(Ct=Et[ut])||void 0===Ct?void 0:Ct.bind(Et)}})(gn,Et);if(Nt){const Hn=Nt(...qe);return ut=Hn?.remove,Hn}throw new _(`"${Pt}.${Et}()" is not implemented on ${Xt}`,U.Unimplemented)});return"addListener"===Et&&(on.remove=(0,o.Z)(function*(){return ut()})),on};return Ct.toString=()=>`${Et.toString()}() { [capacitor code] }`,Object.defineProperty(Ct,"name",{value:Et,writable:!1,configurable:!1}),Ct},gt=en("addListener"),Yt=en("removeListener"),ht=(Et,ut)=>{const Ct=gt({eventName:Et},ut),qe=function(){var gn=(0,o.Z)(function*(){const Nt=yield Ct;Yt({eventName:Et,callbackId:Nt},ut)});return function(){return gn.apply(this,arguments)}}(),on=new Promise(gn=>Ct.then(()=>gn({remove:qe})));return on.remove=(0,o.Z)(function*(){console.warn("Using addListener() without 'await' is deprecated."),yield qe()}),on},nt=new Proxy({},{get(Et,ut){switch(ut){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return kt?ht:gt;case"removeListener":return Yt;default:return en(ut)}}});return de[Pt]=nt,Rt.set(Pt,{name:Pt,proxy:nt,platforms:new Set([...Object.keys(Ut),...kt?[Xt]:[]])}),nt});return ue.convertFileSrc||(ue.convertFileSrc=Pt=>Pt),ue.getPlatform=Ce,ue.handleError=Pt=>T.console.error(Pt),ue.isNativePlatform=dt,ue.isPluginAvailable=Ue,ue.pluginMethodNoop=(Pt,Ut,it)=>Promise.reject(`${it} does not have an implementation of "${Ut}".`),ue.registerPlugin=pn,ue.Exception=_,ue.DEBUG=!!ue.DEBUG,ue.isLoggingEnabled=!!ue.isLoggingEnabled,ue.platform=ue.getPlatform(),ue.isNative=ue.isNativePlatform(),ue},S=(T=>T.Capacitor=G(T))(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),B=S.registerPlugin;class P{constructor(k){this.listeners={},this.windowListeners={},k&&(console.warn(`Capacitor WebPlugin "${k.name}" config object was deprecated in v3 and will be removed in v4.`),this.config=k)}addListener(k,O){var te=this;this.listeners[k]||(this.listeners[k]=[]),this.listeners[k].push(O);const Ae=this.windowListeners[k];Ae&&!Ae.registered&&this.addWindowListener(Ae);const De=function(){var de=(0,o.Z)(function*(){return te.removeListener(k,O)});return function(){return de.apply(this,arguments)}}(),ue=Promise.resolve({remove:De});return Object.defineProperty(ue,"remove",{value:(de=(0,o.Z)(function*(){console.warn("Using addListener() without 'await' is deprecated."),yield De()}),function(){return de.apply(this,arguments)})}),ue;var de}removeAllListeners(){var k=this;return(0,o.Z)(function*(){k.listeners={};for(const O in k.windowListeners)k.removeWindowListener(k.windowListeners[O]);k.windowListeners={}})()}notifyListeners(k,O){const te=this.listeners[k];te&&te.forEach(ce=>ce(O))}hasListeners(k){return!!this.listeners[k].length}registerWindowListener(k,O){this.windowListeners[O]={registered:!1,windowEventName:k,pluginEventName:O,handler:te=>{this.notifyListeners(O,te)}}}unimplemented(k="not implemented"){return new S.Exception(k,U.Unimplemented)}unavailable(k="not available"){return new S.Exception(k,U.Unavailable)}removeListener(k,O){var te=this;return(0,o.Z)(function*(){const ce=te.listeners[k];if(!ce)return;const Ae=ce.indexOf(O);te.listeners[k].splice(Ae,1),te.listeners[k].length||te.removeWindowListener(te.windowListeners[k])})()}addWindowListener(k){window.addEventListener(k.windowEventName,k.handler),k.registered=!0}removeWindowListener(k){!k||(window.removeEventListener(k.windowEventName,k.handler),k.registered=!1)}}const pe=T=>encodeURIComponent(T).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),ke=T=>T.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class Te extends P{getCookies(){return(0,o.Z)(function*(){const k=document.cookie,O={};return k.split(";").forEach(te=>{if(te.length<=0)return;let[ce,Ae]=te.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");ce=ke(ce).trim(),Ae=ke(Ae).trim(),O[ce]=Ae}),O})()}setCookie(k){return(0,o.Z)(function*(){try{const O=pe(k.key),te=pe(k.value),ce=`; expires=${(k.expires||"").replace("expires=","")}`,Ae=(k.path||"/").replace("path=","");document.cookie=`${O}=${te||""}${ce}; path=${Ae}`}catch(O){return Promise.reject(O)}})()}deleteCookie(k){return(0,o.Z)(function*(){try{document.cookie=`${k.key}=; Max-Age=0`}catch(O){return Promise.reject(O)}})()}clearCookies(){return(0,o.Z)(function*(){try{const k=document.cookie.split(";")||[];for(const O of k)document.cookie=O.replace(/^ +/,"").replace(/=.*/,`=;expires=${(new Date).toUTCString()};path=/`)}catch(k){return Promise.reject(k)}})()}clearAllCookies(){var k=this;return(0,o.Z)(function*(){try{yield k.clearCookies()}catch(O){return Promise.reject(O)}})()}}B("CapacitorCookies",{web:()=>new Te});const Be=function(){var T=(0,o.Z)(function*(k){return new Promise((O,te)=>{const ce=new FileReader;ce.onload=()=>{const Ae=ce.result;O(Ae.indexOf(",")>=0?Ae.split(",")[1]:Ae)},ce.onerror=Ae=>te(Ae),ce.readAsDataURL(k)})});return function(O){return T.apply(this,arguments)}}();class Ne extends P{request(k){return(0,o.Z)(function*(){const O=((T,k={})=>{const O=Object.assign({method:T.method||"GET",headers:T.headers},k),ce=((T={})=>{const k=Object.keys(T);return Object.keys(T).map(ce=>ce.toLocaleLowerCase()).reduce((ce,Ae,De)=>(ce[Ae]=T[k[De]],ce),{})})(T.headers)["content-type"]||"";if("string"==typeof T.data)O.body=T.data;else if(ce.includes("application/x-www-form-urlencoded")){const Ae=new URLSearchParams;for(const[De,ue]of Object.entries(T.data||{}))Ae.set(De,ue);O.body=Ae.toString()}else if(ce.includes("multipart/form-data")){const Ae=new FormData;if(T.data instanceof FormData)T.data.forEach((ue,de)=>{Ae.append(de,ue)});else for(const ue of Object.keys(T.data))Ae.append(ue,T.data[ue]);O.body=Ae;const De=new Headers(O.headers);De.delete("content-type"),O.headers=De}else(ce.includes("application/json")||"object"==typeof T.data)&&(O.body=JSON.stringify(T.data));return O})(k,k.webFetchExtra),te=((T,k=!0)=>T?Object.entries(T).reduce((te,ce)=>{const[Ae,De]=ce;let ue,de;return Array.isArray(De)?(de="",De.forEach(ne=>{ue=k?encodeURIComponent(ne):ne,de+=`${Ae}=${ue}&`}),de.slice(0,-1)):(ue=k?encodeURIComponent(De):De,de=`${Ae}=${ue}`),`${te}&${de}`},"").substr(1):null)(k.params,k.shouldEncodeUrlParams),ce=te?`${k.url}?${te}`:k.url,Ae=yield fetch(ce,O),De=Ae.headers.get("content-type")||"";let de,ne,{responseType:ue="text"}=Ae.ok?k:{};switch(De.includes("application/json")&&(ue="json"),ue){case"arraybuffer":case"blob":ne=yield Ae.blob(),de=yield Be(ne);break;case"json":de=yield Ae.json();break;default:de=yield Ae.text()}const Ee={};return Ae.headers.forEach((Ce,ze)=>{Ee[ze]=Ce}),{data:de,headers:Ee,status:Ae.status,url:Ae.url}})()}get(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"GET"}))})()}post(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"POST"}))})()}put(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"PUT"}))})()}patch(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"PATCH"}))})()}delete(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"DELETE"}))})()}}B("CapacitorHttp",{web:()=>new Ne})},502:(Qe,Fe,w)=>{"use strict";w.d(Fe,{BX:()=>Nr,Br:()=>Zn,dr:()=>Nt,BJ:()=>Hn,oU:()=>zt,cs:()=>nr,yp:()=>jn,YG:()=>xe,Sm:()=>se,PM:()=>ye,hM:()=>_t,wI:()=>tn,W2:()=>Ln,fr:()=>ee,jY:()=>Se,Gu:()=>Le,gu:()=>yt,pK:()=>sn,Ie:()=>dn,rH:()=>er,u8:()=>$n,IK:()=>Tn,td:()=>xn,Q$:()=>vn,q_:()=>tr,z0:()=>cr,zc:()=>$t,uN:()=>Un,jP:()=>fr,Nd:()=>le,VI:()=>Ie,t9:()=>ot,n0:()=>st,PQ:()=>An,jI:()=>Rn,g2:()=>an,wd:()=>ho,sr:()=>jr,Pc:()=>C,r4:()=>rr,HT:()=>Lr,SH:()=>zr,as:()=>en,t4:()=>si,QI:()=>Yt,j9:()=>ht,yF:()=>ko});var o=w(8274),x=w(433),N=w(655),ge=w(8421),R=w(9751),W=w(5577),M=w(1144),U=w(576),_=w(3268);const Y=["addListener","removeListener"],G=["addEventListener","removeEventListener"],Z=["on","off"];function S(s,c,a,g){if((0,U.m)(a)&&(g=a,a=void 0),g)return S(s,c,a).pipe((0,_.Z)(g));const[L,Me]=function P(s){return(0,U.m)(s.addEventListener)&&(0,U.m)(s.removeEventListener)}(s)?G.map(Je=>at=>s[Je](c,at,a)):function E(s){return(0,U.m)(s.addListener)&&(0,U.m)(s.removeListener)}(s)?Y.map(B(s,c)):function j(s){return(0,U.m)(s.on)&&(0,U.m)(s.off)}(s)?Z.map(B(s,c)):[];if(!L&&(0,M.z)(s))return(0,W.z)(Je=>S(Je,c,a))((0,ge.Xf)(s));if(!L)throw new TypeError("Invalid event target");return new R.y(Je=>{const at=(...Dt)=>Je.next(1Me(at)})}function B(s,c){return a=>g=>s[a](c,g)}var K=w(7579),pe=w(1135),ke=w(5472),oe=(w(8834),w(3953),w(3880),w(1911),w(9658)),be=w(5730),Ne=w(697),T=(w(4292),w(4414)),te=(w(3457),w(4349),w(1308)),ne=w(9300),Ee=w(3900),Ce=w(1884),ze=w(6895);const et=oe.i,Ke=["*"],Pt=s=>"function"==typeof __zone_symbol__requestAnimationFrame?__zone_symbol__requestAnimationFrame(s):"function"==typeof requestAnimationFrame?requestAnimationFrame(s):setTimeout(s),Ut=s=>!!s.resolveComponentFactory;let it=(()=>{class s{constructor(a,g){this.injector=a,this.el=g,this.onChange=()=>{},this.onTouched=()=>{}}writeValue(a){this.el.nativeElement.value=this.lastValue=a??"",Xt(this.el)}handleChangeEvent(a,g){a===this.el.nativeElement&&(g!==this.lastValue&&(this.lastValue=g,this.onChange(g)),Xt(this.el))}_handleBlurEvent(a){a===this.el.nativeElement&&(this.onTouched(),Xt(this.el))}registerOnChange(a){this.onChange=a}registerOnTouched(a){this.onTouched=a}setDisabledState(a){this.el.nativeElement.disabled=a}ngOnDestroy(){this.statusChanges&&this.statusChanges.unsubscribe()}ngAfterViewInit(){let a;try{a=this.injector.get(x.a5)}catch{}if(!a)return;a.statusChanges&&(this.statusChanges=a.statusChanges.subscribe(()=>Xt(this.el)));const g=a.control;g&&["markAsTouched","markAllAsTouched","markAsUntouched","markAsDirty","markAsPristine"].forEach(Me=>{if(typeof g[Me]<"u"){const Je=g[Me].bind(g);g[Me]=(...at)=>{Je(...at),Xt(this.el)}}})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,hostBindings:function(a,g){1&a&&o.NdJ("ionBlur",function(Me){return g._handleBlurEvent(Me.target)})}}),s})();const Xt=s=>{Pt(()=>{const c=s.nativeElement,a=null!=c.value&&c.value.toString().length>0,g=kt(c);Vt(c,g);const L=c.closest("ion-item");L&&Vt(L,a?[...g,"item-has-value"]:g)})},kt=s=>{const c=s.classList,a=[];for(let g=0;g{const a=s.classList;a.remove("ion-valid","ion-invalid","ion-touched","ion-untouched","ion-dirty","ion-pristine"),a.add(...c)},rn=(s,c)=>s.substring(0,c.length)===c;let en=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleIonChange(a){this.handleChangeEvent(a,a.value)}registerOnChange(a){super.registerOnChange(g=>{a(""===g?null:parseFloat(g))})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-input","type","number"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleIonChange(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})(),Yt=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleChangeEvent(a){this.handleChangeEvent(a,a.value)}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-range"],["ion-select"],["ion-radio-group"],["ion-segment"],["ion-datetime"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleChangeEvent(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})(),ht=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleInputEvent(a){this.handleChangeEvent(a,a.value)}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-input",3,"type","number"],["ion-textarea"],["ion-searchbar"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleInputEvent(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})();const nt=(s,c)=>{const a=s.prototype;c.forEach(g=>{Object.defineProperty(a,g,{get(){return this.el[g]},set(L){this.z.runOutsideAngular(()=>this.el[g]=L)}})})},Et=(s,c)=>{const a=s.prototype;c.forEach(g=>{a[g]=function(){const L=arguments;return this.z.runOutsideAngular(()=>this.el[g].apply(this.el,L))}})},ut=(s,c,a)=>{a.forEach(g=>s[g]=S(c,g))};function qe(s){return function(a){const{defineCustomElementFn:g,inputs:L,methods:Me}=s;return void 0!==g&&g(),L&&nt(a,L),Me&&Et(a,Me),a}}let Nt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-app"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),Hn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-avatar"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),zt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-back-button"]],inputs:{color:"color",defaultHref:"defaultHref",disabled:"disabled",icon:"icon",mode:"mode",routerAnimation:"routerAnimation",text:"text",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","defaultHref","disabled","icon","mode","routerAnimation","text","type"]})],s),s})(),jn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-badge"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})(),xe=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionFocus","ionBlur"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-button"]],inputs:{buttonType:"buttonType",color:"color",disabled:"disabled",download:"download",expand:"expand",fill:"fill",form:"form",href:"href",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",shape:"shape",size:"size",strong:"strong",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]})],s),s})(),se=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-buttons"]],inputs:{collapse:"collapse"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse"]})],s),s})(),ye=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-card"]],inputs:{button:"button",color:"color",disabled:"disabled",download:"download",href:"href",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]})],s),s})(),_t=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-chip"]],inputs:{color:"color",disabled:"disabled",mode:"mode",outline:"outline"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","disabled","mode","outline"]})],s),s})(),tn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-col"]],inputs:{offset:"offset",offsetLg:"offsetLg",offsetMd:"offsetMd",offsetSm:"offsetSm",offsetXl:"offsetXl",offsetXs:"offsetXs",pull:"pull",pullLg:"pullLg",pullMd:"pullMd",pullSm:"pullSm",pullXl:"pullXl",pullXs:"pullXs",push:"push",pushLg:"pushLg",pushMd:"pushMd",pushSm:"pushSm",pushXl:"pushXl",pushXs:"pushXs",size:"size",sizeLg:"sizeLg",sizeMd:"sizeMd",sizeSm:"sizeSm",sizeXl:"sizeXl",sizeXs:"sizeXs"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["offset","offsetLg","offsetMd","offsetSm","offsetXl","offsetXs","pull","pullLg","pullMd","pullSm","pullXl","pullXs","push","pushLg","pushMd","pushSm","pushXl","pushXs","size","sizeLg","sizeMd","sizeSm","sizeXl","sizeXs"]})],s),s})(),Ln=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionScrollStart","ionScroll","ionScrollEnd"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-content"]],inputs:{color:"color",forceOverscroll:"forceOverscroll",fullscreen:"fullscreen",scrollEvents:"scrollEvents",scrollX:"scrollX",scrollY:"scrollY"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"],methods:["getScrollElement","scrollToTop","scrollToBottom","scrollByPoint","scrollToPoint"]})],s),s})(),ee=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-footer"]],inputs:{collapse:"collapse",mode:"mode",translucent:"translucent"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse","mode","translucent"]})],s),s})(),Se=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-grid"]],inputs:{fixed:"fixed"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["fixed"]})],s),s})(),Le=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-header"]],inputs:{collapse:"collapse",mode:"mode",translucent:"translucent"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse","mode","translucent"]})],s),s})(),yt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-icon"]],inputs:{color:"color",flipRtl:"flipRtl",icon:"icon",ios:"ios",lazy:"lazy",md:"md",mode:"mode",name:"name",sanitize:"sanitize",size:"size",src:"src"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]})],s),s})(),sn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionInput","ionChange","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-input"]],inputs:{accept:"accept",autocapitalize:"autocapitalize",autocomplete:"autocomplete",autocorrect:"autocorrect",autofocus:"autofocus",clearInput:"clearInput",clearOnEdit:"clearOnEdit",color:"color",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",max:"max",maxlength:"maxlength",min:"min",minlength:"minlength",mode:"mode",multiple:"multiple",name:"name",pattern:"pattern",placeholder:"placeholder",readonly:"readonly",required:"required",size:"size",spellcheck:"spellcheck",step:"step",type:"type",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["accept","autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearOnEdit","color","debounce","disabled","enterkeyhint","inputmode","max","maxlength","min","minlength","mode","multiple","name","pattern","placeholder","readonly","required","size","spellcheck","step","type","value"],methods:["setFocus","getInputElement"]})],s),s})(),dn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item"]],inputs:{button:"button",color:"color",counter:"counter",counterFormatter:"counterFormatter",detail:"detail",detailIcon:"detailIcon",disabled:"disabled",download:"download",fill:"fill",href:"href",lines:"lines",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",shape:"shape",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["button","color","counter","counterFormatter","detail","detailIcon","disabled","download","fill","href","lines","mode","rel","routerAnimation","routerDirection","shape","target","type"]})],s),s})(),er=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-divider"]],inputs:{color:"color",mode:"mode",sticky:"sticky"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode","sticky"]})],s),s})(),$n=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-option"]],inputs:{color:"color",disabled:"disabled",download:"download",expandable:"expandable",href:"href",mode:"mode",rel:"rel",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","disabled","download","expandable","href","mode","rel","target","type"]})],s),s})(),Tn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionSwipe"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-options"]],inputs:{side:"side"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["side"]})],s),s})(),xn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionDrag"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-sliding"]],inputs:{disabled:"disabled"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["disabled"],methods:["getOpenAmount","getSlidingRatio","open","close","closeOpened"]})],s),s})(),vn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-label"]],inputs:{color:"color",mode:"mode",position:"position"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode","position"]})],s),s})(),tr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-list"]],inputs:{inset:"inset",lines:"lines",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["inset","lines","mode"],methods:["closeSlidingItems"]})],s),s})(),cr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionWillOpen","ionWillClose","ionDidOpen","ionDidClose"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-menu"]],inputs:{contentId:"contentId",disabled:"disabled",maxEdgeStart:"maxEdgeStart",menuId:"menuId",side:"side",swipeGesture:"swipeGesture",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["contentId","disabled","maxEdgeStart","menuId","side","swipeGesture","type"],methods:["isOpen","isActive","open","close","toggle","setOpen"]})],s),s})(),$t=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-menu-toggle"]],inputs:{autoHide:"autoHide",menu:"menu"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["autoHide","menu"]})],s),s})(),Un=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-note"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})(),le=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-row"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),Ie=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionInput","ionChange","ionCancel","ionClear","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-searchbar"]],inputs:{animated:"animated",autocomplete:"autocomplete",autocorrect:"autocorrect",cancelButtonIcon:"cancelButtonIcon",cancelButtonText:"cancelButtonText",clearIcon:"clearIcon",color:"color",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",mode:"mode",placeholder:"placeholder",searchIcon:"searchIcon",showCancelButton:"showCancelButton",showClearButton:"showClearButton",spellcheck:"spellcheck",type:"type",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["animated","autocomplete","autocorrect","cancelButtonIcon","cancelButtonText","clearIcon","color","debounce","disabled","enterkeyhint","inputmode","mode","placeholder","searchIcon","showCancelButton","showClearButton","spellcheck","type","value"],methods:["setFocus","getInputElement"]})],s),s})(),ot=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionChange","ionCancel","ionDismiss","ionFocus","ionBlur"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-select"]],inputs:{cancelText:"cancelText",compareWith:"compareWith",disabled:"disabled",interface:"interface",interfaceOptions:"interfaceOptions",mode:"mode",multiple:"multiple",name:"name",okText:"okText",placeholder:"placeholder",selectedText:"selectedText",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["cancelText","compareWith","disabled","interface","interfaceOptions","mode","multiple","name","okText","placeholder","selectedText","value"],methods:["open"]})],s),s})(),st=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-select-option"]],inputs:{disabled:"disabled",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["disabled","value"]})],s),s})(),An=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-spinner"]],inputs:{color:"color",duration:"duration",name:"name",paused:"paused"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","duration","name","paused"]})],s),s})(),Rn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionSplitPaneVisible"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-split-pane"]],inputs:{contentId:"contentId",disabled:"disabled",when:"when"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["contentId","disabled","when"]})],s),s})(),an=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionChange","ionInput","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-textarea"]],inputs:{autoGrow:"autoGrow",autocapitalize:"autocapitalize",autofocus:"autofocus",clearOnEdit:"clearOnEdit",color:"color",cols:"cols",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",maxlength:"maxlength",minlength:"minlength",mode:"mode",name:"name",placeholder:"placeholder",readonly:"readonly",required:"required",rows:"rows",spellcheck:"spellcheck",value:"value",wrap:"wrap"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["autoGrow","autocapitalize","autofocus","clearOnEdit","color","cols","debounce","disabled","enterkeyhint","inputmode","maxlength","minlength","mode","name","placeholder","readonly","required","rows","spellcheck","value","wrap"],methods:["setFocus","getInputElement"]})],s),s})(),ho=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-title"]],inputs:{color:"color",size:"size"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","size"]})],s),s})(),jr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-toolbar"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})();class xr{constructor(c={}){this.data=c}get(c){return this.data[c]}}let Or=(()=>{class s{constructor(a,g){this.zone=a,this.appRef=g}create(a,g,L){return new ar(a,g,L,this.appRef,this.zone)}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(o.R0b),o.LFG(o.z2F))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})();class ar{constructor(c,a,g,L,Me){this.resolverOrInjector=c,this.injector=a,this.location=g,this.appRef=L,this.zone=Me,this.elRefMap=new WeakMap,this.elEventsMap=new WeakMap}attachViewToDom(c,a,g,L){return this.zone.run(()=>new Promise(Me=>{Me(Bn(this.zone,this.resolverOrInjector,this.injector,this.location,this.appRef,this.elRefMap,this.elEventsMap,c,a,g,L))}))}removeViewFromDom(c,a){return this.zone.run(()=>new Promise(g=>{const L=this.elRefMap.get(a);if(L){L.destroy(),this.elRefMap.delete(a);const Me=this.elEventsMap.get(a);Me&&(Me(),this.elEventsMap.delete(a))}g()}))}}const Bn=(s,c,a,g,L,Me,Je,at,Dt,Zt,bn)=>{let Ve;const At=o.zs3.create({providers:qn(Zt),parent:a});if(c&&Ut(c)){const $r=c.resolveComponentFactory(Dt);Ve=g?g.createComponent($r,g.length,At):$r.create(At)}else{if(!g)return null;Ve=g.createComponent(Dt,{index:g.indexOf,injector:At,environmentInjector:c})}const yr=Ve.instance,Dr=Ve.location.nativeElement;if(Zt&&Object.assign(yr,Zt),bn)for(const $r of bn)Dr.classList.add($r);const Mn=Fn(s,yr,Dr);return at.appendChild(Dr),g||L.attachView(Ve.hostView),Ve.changeDetectorRef.reattach(),Me.set(Dr,Ve),Je.set(Dr,Mn),Dr},po=[Ne.L,Ne.a,Ne.b,Ne.c,Ne.d],Fn=(s,c,a)=>s.run(()=>{const g=po.filter(L=>"function"==typeof c[L]).map(L=>{const Me=Je=>c[L](Je.detail);return a.addEventListener(L,Me),()=>a.removeEventListener(L,Me)});return()=>g.forEach(L=>L())}),zn=new o.OlP("NavParamsToken"),qn=s=>[{provide:zn,useValue:s},{provide:xr,useFactory:dr,deps:[zn]}],dr=s=>new xr(s),Gn=(s,c)=>((s=s.filter(a=>a.stackId!==c.stackId)).push(c),s),vr=(s,c)=>{const a=s.createUrlTree(["."],{relativeTo:c});return s.serializeUrl(a)},Pr=(s,c)=>{if(!s)return;const a=xo(c);for(let g=0;g=s.length)return a[g];if(a[g]!==s[g])return}},xo=s=>s.split("/").map(c=>c.trim()).filter(c=>""!==c),vo=s=>{s&&(s.ref.destroy(),s.unlistenEvents())};class yo{constructor(c,a,g,L,Me,Je){this.containerEl=a,this.router=g,this.navCtrl=L,this.zone=Me,this.location=Je,this.views=[],this.skipTransition=!1,this.nextId=0,this.tabsPrefix=void 0!==c?xo(c):void 0}createView(c,a){var g;const L=vr(this.router,a),Me=null===(g=c?.location)||void 0===g?void 0:g.nativeElement,Je=Fn(this.zone,c.instance,Me);return{id:this.nextId++,stackId:Pr(this.tabsPrefix,L),unlistenEvents:Je,element:Me,ref:c,url:L}}getExistingView(c){const a=vr(this.router,c),g=this.views.find(L=>L.url===a);return g&&g.ref.changeDetectorRef.reattach(),g}setActive(c){var a,g;const L=this.navCtrl.consumeTransition();let{direction:Me,animation:Je,animationBuilder:at}=L;const Dt=this.activeView,Zt=((s,c)=>!c||s.stackId!==c.stackId)(c,Dt);Zt&&(Me="back",Je=void 0);const bn=this.views.slice();let Ve;const At=this.router;At.getCurrentNavigation?Ve=At.getCurrentNavigation():!(null===(a=At.navigations)||void 0===a)&&a.value&&(Ve=At.navigations.value),null!==(g=Ve?.extras)&&void 0!==g&&g.replaceUrl&&this.views.length>0&&this.views.splice(-1,1);const yr=this.views.includes(c),Dr=this.insertView(c,Me);yr||c.ref.changeDetectorRef.detectChanges();const Mn=c.animationBuilder;return void 0===at&&"back"===Me&&!Zt&&void 0!==Mn&&(at=Mn),Dt&&(Dt.animationBuilder=at),this.zone.runOutsideAngular(()=>this.wait(()=>(Dt&&Dt.ref.changeDetectorRef.detach(),c.ref.changeDetectorRef.reattach(),this.transition(c,Dt,Je,this.canGoBack(1),!1,at).then(()=>Oo(c,Dr,bn,this.location,this.zone)).then(()=>({enteringView:c,direction:Me,animation:Je,tabSwitch:Zt})))))}canGoBack(c,a=this.getActiveStackId()){return this.getStack(a).length>c}pop(c,a=this.getActiveStackId()){return this.zone.run(()=>{var g,L;const Me=this.getStack(a);if(Me.length<=c)return Promise.resolve(!1);const Je=Me[Me.length-c-1];let at=Je.url;const Dt=Je.savedData;if(Dt){const bn=Dt.get("primary");null!==(L=null===(g=bn?.route)||void 0===g?void 0:g._routerState)&&void 0!==L&&L.snapshot.url&&(at=bn.route._routerState.snapshot.url)}const{animationBuilder:Zt}=this.navCtrl.consumeTransition();return this.navCtrl.navigateBack(at,Object.assign(Object.assign({},Je.savedExtras),{animation:Zt})).then(()=>!0)})}startBackTransition(){const c=this.activeView;if(c){const a=this.getStack(c.stackId),g=a[a.length-2],L=g.animationBuilder;return this.wait(()=>this.transition(g,c,"back",this.canGoBack(2),!0,L))}return Promise.resolve()}endBackTransition(c){c?(this.skipTransition=!0,this.pop(1)):this.activeView&&Jr(this.activeView,this.views,this.views,this.location,this.zone)}getLastUrl(c){const a=this.getStack(c);return a.length>0?a[a.length-1]:void 0}getRootUrl(c){const a=this.getStack(c);return a.length>0?a[0]:void 0}getActiveStackId(){return this.activeView?this.activeView.stackId:void 0}hasRunningTask(){return void 0!==this.runningTask}destroy(){this.containerEl=void 0,this.views.forEach(vo),this.activeView=void 0,this.views=[]}getStack(c){return this.views.filter(a=>a.stackId===c)}insertView(c,a){return this.activeView=c,this.views=((s,c,a)=>"root"===a?Gn(s,c):"forward"===a?((s,c)=>(s.indexOf(c)>=0?s=s.filter(g=>g.stackId!==c.stackId||g.id<=c.id):s.push(c),s))(s,c):((s,c)=>s.indexOf(c)>=0?s.filter(g=>g.stackId!==c.stackId||g.id<=c.id):Gn(s,c))(s,c))(this.views,c,a),this.views.slice()}transition(c,a,g,L,Me,Je){if(this.skipTransition)return this.skipTransition=!1,Promise.resolve(!1);if(a===c)return Promise.resolve(!1);const at=c?c.element:void 0,Dt=a?a.element:void 0,Zt=this.containerEl;return at&&at!==Dt&&(at.classList.add("ion-page"),at.classList.add("ion-page-invisible"),at.parentElement!==Zt&&Zt.appendChild(at),Zt.commit)?Zt.commit(at,Dt,{deepWait:!0,duration:void 0===g?0:void 0,direction:g,showGoBack:L,progressAnimation:Me,animationBuilder:Je}):Promise.resolve(!1)}wait(c){return(0,N.mG)(this,void 0,void 0,function*(){void 0!==this.runningTask&&(yield this.runningTask,this.runningTask=void 0);const a=this.runningTask=c();return a.finally(()=>this.runningTask=void 0),a})}}const Oo=(s,c,a,g,L)=>"function"==typeof requestAnimationFrame?new Promise(Me=>{requestAnimationFrame(()=>{Jr(s,c,a,g,L),Me()})}):Promise.resolve(),Jr=(s,c,a,g,L)=>{L.run(()=>a.filter(Me=>!c.includes(Me)).forEach(vo)),c.forEach(Me=>{const at=g.path().split("?")[0].split("#")[0];if(Me!==s&&Me.url!==at){const Dt=Me.element;Dt.setAttribute("aria-hidden","true"),Dt.classList.add("ion-page-hidden"),Me.ref.changeDetectorRef.detach()}})};let Go=(()=>{class s{get(a,g){const L=Yo();return L?L.get(a,g):null}getBoolean(a,g){const L=Yo();return!!L&&L.getBoolean(a,g)}getNumber(a,g){const L=Yo();return L?L.getNumber(a,g):0}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Fr=new o.OlP("USERCONFIG"),Yo=()=>{if(typeof window<"u"){const s=window.Ionic;if(s?.config)return s.config}return null};let si=(()=>{class s{constructor(a,g){this.doc=a,this.backButton=new K.x,this.keyboardDidShow=new K.x,this.keyboardDidHide=new K.x,this.pause=new K.x,this.resume=new K.x,this.resize=new K.x,g.run(()=>{var L;let Me;this.win=a.defaultView,this.backButton.subscribeWithPriority=function(Je,at){return this.subscribe(Dt=>Dt.register(Je,Zt=>g.run(()=>at(Zt))))},Ur(this.pause,a,"pause"),Ur(this.resume,a,"resume"),Ur(this.backButton,a,"ionBackButton"),Ur(this.resize,this.win,"resize"),Ur(this.keyboardDidShow,this.win,"ionKeyboardDidShow"),Ur(this.keyboardDidHide,this.win,"ionKeyboardDidHide"),this._readyPromise=new Promise(Je=>{Me=Je}),null!==(L=this.win)&&void 0!==L&&L.cordova?a.addEventListener("deviceready",()=>{Me("cordova")},{once:!0}):Me("dom")})}is(a){return(0,oe.a)(this.win,a)}platforms(){return(0,oe.g)(this.win)}ready(){return this._readyPromise}get isRTL(){return"rtl"===this.doc.dir}getQueryParam(a){return Ro(this.win.location.href,a)}isLandscape(){return!this.isPortrait()}isPortrait(){var a,g;return null===(g=(a=this.win).matchMedia)||void 0===g?void 0:g.call(a,"(orientation: portrait)").matches}testUserAgent(a){const g=this.win.navigator;return!!(g?.userAgent&&g.userAgent.indexOf(a)>=0)}url(){return this.win.location.href}width(){return this.win.innerWidth}height(){return this.win.innerHeight}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(ze.K0),o.LFG(o.R0b))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Ro=(s,c)=>{c=c.replace(/[[\]\\]/g,"\\$&");const g=new RegExp("[\\?&]"+c+"=([^&#]*)").exec(s);return g?decodeURIComponent(g[1].replace(/\+/g," ")):null},Ur=(s,c,a)=>{c&&c.addEventListener(a,g=>{s.next(g?.detail)})};let zr=(()=>{class s{constructor(a,g,L,Me){this.location=g,this.serializer=L,this.router=Me,this.direction=Gr,this.animated=Yr,this.guessDirection="forward",this.lastNavId=-1,Me&&Me.events.subscribe(Je=>{if(Je instanceof ke.OD){const at=Je.restoredState?Je.restoredState.navigationId:Je.id;this.guessDirection=at{this.pop(),Je()})}navigateForward(a,g={}){return this.setDirection("forward",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}navigateBack(a,g={}){return this.setDirection("back",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}navigateRoot(a,g={}){return this.setDirection("root",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}back(a={animated:!0,animationDirection:"back"}){return this.setDirection("back",a.animated,a.animationDirection,a.animation),this.location.back()}pop(){return(0,N.mG)(this,void 0,void 0,function*(){let a=this.topOutlet;for(;a&&!(yield a.pop());)a=a.parentOutlet})}setDirection(a,g,L,Me){this.direction=a,this.animated=Do(a,g,L),this.animationBuilder=Me}setTopOutlet(a){this.topOutlet=a}consumeTransition(){let g,a="root";const L=this.animationBuilder;return"auto"===this.direction?(a=this.guessDirection,g=this.guessAnimation):(g=this.animated,a=this.direction),this.direction=Gr,this.animated=Yr,this.animationBuilder=void 0,{direction:a,animation:g,animationBuilder:L}}navigate(a,g){if(Array.isArray(a))return this.router.navigate(a,g);{const L=this.serializer.parse(a.toString());return void 0!==g.queryParams&&(L.queryParams=Object.assign({},g.queryParams)),void 0!==g.fragment&&(L.fragment=g.fragment),this.router.navigateByUrl(L,g)}}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(si),o.LFG(ze.Ye),o.LFG(ke.Hx),o.LFG(ke.F0,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Do=(s,c,a)=>{if(!1!==c){if(void 0!==a)return a;if("forward"===s||"back"===s)return s;if("root"===s&&!0===c)return"forward"}},Gr="auto",Yr=void 0;let fr=(()=>{class s{constructor(a,g,L,Me,Je,at,Dt,Zt,bn,Ve,At,yr,Dr){this.parentContexts=a,this.location=g,this.config=Je,this.navCtrl=at,this.componentFactoryResolver=Dt,this.parentOutlet=Dr,this.activated=null,this.activatedView=null,this._activatedRoute=null,this.proxyMap=new WeakMap,this.currentActivatedRoute$=new pe.X(null),this.stackEvents=new o.vpe,this.activateEvents=new o.vpe,this.deactivateEvents=new o.vpe,this.nativeEl=bn.nativeElement,this.name=L||ke.eC,this.tabsPrefix="true"===Me?vr(Ve,yr):void 0,this.stackCtrl=new yo(this.tabsPrefix,this.nativeEl,Ve,at,At,Zt),a.onChildOutletCreated(this.name,this)}set animation(a){this.nativeEl.animation=a}set animated(a){this.nativeEl.animated=a}set swipeGesture(a){this._swipeGesture=a,this.nativeEl.swipeHandler=a?{canStart:()=>this.stackCtrl.canGoBack(1)&&!this.stackCtrl.hasRunningTask(),onStart:()=>this.stackCtrl.startBackTransition(),onEnd:g=>this.stackCtrl.endBackTransition(g)}:void 0}ngOnDestroy(){this.stackCtrl.destroy()}getContext(){return this.parentContexts.getContext(this.name)}ngOnInit(){if(!this.activated){const a=this.getContext();a?.route&&this.activateWith(a.route,a.resolver||null)}new Promise(a=>(0,be.c)(this.nativeEl,a)).then(()=>{void 0===this._swipeGesture&&(this.swipeGesture=this.config.getBoolean("swipeBackEnabled","ios"===this.nativeEl.mode))})}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new Error("Outlet is not activated");return this.activated.instance}get activatedRoute(){if(!this.activated)throw new Error("Outlet is not activated");return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){throw new Error("incompatible reuse strategy")}attach(a,g){throw new Error("incompatible reuse strategy")}deactivate(){if(this.activated){if(this.activatedView){const g=this.getContext();this.activatedView.savedData=new Map(g.children.contexts);const L=this.activatedView.savedData.get("primary");if(L&&g.route&&(L.route=Object.assign({},g.route)),this.activatedView.savedExtras={},g.route){const Me=g.route.snapshot;this.activatedView.savedExtras.queryParams=Me.queryParams,this.activatedView.savedExtras.fragment=Me.fragment}}const a=this.component;this.activatedView=null,this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(a)}}activateWith(a,g){var L;if(this.isActivated)throw new Error("Cannot activate an already activated outlet");this._activatedRoute=a;let Me,Je=this.stackCtrl.getExistingView(a);if(Je){Me=this.activated=Je.ref;const at=Je.savedData;at&&(this.getContext().children.contexts=at),this.updateActivatedRouteProxy(Me.instance,a)}else{const at=a._futureSnapshot;if(null==at.routeConfig.component&&null==this.environmentInjector)return void console.warn('[Ionic Warning]: You must supply an environmentInjector to use standalone components with routing:\n\nIn your component class, add:\n\n import { EnvironmentInjector } from \'@angular/core\';\n constructor(public environmentInjector: EnvironmentInjector) {}\n\nIn your router outlet template, add:\n\n \n\nAlternatively, if you are routing within ion-tabs:\n\n ');const Dt=this.parentContexts.getOrCreateContext(this.name).children,Zt=new pe.X(null),bn=this.createActivatedRouteProxy(Zt,a),Ve=new hr(bn,Dt,this.location.injector),At=null!==(L=at.routeConfig.component)&&void 0!==L?L:at.component;if((g=g||this.componentFactoryResolver)&&Ut(g)){const yr=g.resolveComponentFactory(At);Me=this.activated=this.location.createComponent(yr,this.location.length,Ve)}else Me=this.activated=this.location.createComponent(At,{index:this.location.length,injector:Ve,environmentInjector:g??this.environmentInjector});Zt.next(Me.instance),Je=this.stackCtrl.createView(this.activated,a),this.proxyMap.set(Me.instance,bn),this.currentActivatedRoute$.next({component:Me.instance,activatedRoute:a})}this.activatedView=Je,this.navCtrl.setTopOutlet(this),this.stackCtrl.setActive(Je).then(at=>{this.activateEvents.emit(Me.instance),this.stackEvents.emit(at)})}canGoBack(a=1,g){return this.stackCtrl.canGoBack(a,g)}pop(a=1,g){return this.stackCtrl.pop(a,g)}getLastUrl(a){const g=this.stackCtrl.getLastUrl(a);return g?g.url:void 0}getLastRouteView(a){return this.stackCtrl.getLastUrl(a)}getRootView(a){return this.stackCtrl.getRootUrl(a)}getActiveStackId(){return this.stackCtrl.getActiveStackId()}createActivatedRouteProxy(a,g){const L=new ke.gz;return L._futureSnapshot=g._futureSnapshot,L._routerState=g._routerState,L.snapshot=g.snapshot,L.outlet=g.outlet,L.component=g.component,L._paramMap=this.proxyObservable(a,"paramMap"),L._queryParamMap=this.proxyObservable(a,"queryParamMap"),L.url=this.proxyObservable(a,"url"),L.params=this.proxyObservable(a,"params"),L.queryParams=this.proxyObservable(a,"queryParams"),L.fragment=this.proxyObservable(a,"fragment"),L.data=this.proxyObservable(a,"data"),L}proxyObservable(a,g){return a.pipe((0,ne.h)(L=>!!L),(0,Ee.w)(L=>this.currentActivatedRoute$.pipe((0,ne.h)(Me=>null!==Me&&Me.component===L),(0,Ee.w)(Me=>Me&&Me.activatedRoute[g]),(0,Ce.x)())))}updateActivatedRouteProxy(a,g){const L=this.proxyMap.get(a);if(!L)throw new Error("Could not find activated route proxy for view");L._futureSnapshot=g._futureSnapshot,L._routerState=g._routerState,L.snapshot=g.snapshot,L.outlet=g.outlet,L.component=g.component,this.currentActivatedRoute$.next({component:a,activatedRoute:g})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(ke.y6),o.Y36(o.s_b),o.$8M("name"),o.$8M("tabs"),o.Y36(Go),o.Y36(zr),o.Y36(o._Vd,8),o.Y36(ze.Ye),o.Y36(o.SBq),o.Y36(ke.F0),o.Y36(o.R0b),o.Y36(ke.gz),o.Y36(s,12))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-router-outlet"]],inputs:{animated:"animated",animation:"animation",mode:"mode",swipeGesture:"swipeGesture",environmentInjector:"environmentInjector"},outputs:{stackEvents:"stackEvents",activateEvents:"activate",deactivateEvents:"deactivate"},exportAs:["outlet"]}),s})();class hr{constructor(c,a,g){this.route=c,this.childContexts=a,this.parent=g}get(c,a){return c===ke.gz?this.route:c===ke.y6?this.childContexts:this.parent.get(c,a)}}let nr=(()=>{class s{constructor(a,g,L){this.routerOutlet=a,this.navCtrl=g,this.config=L}onClick(a){var g;const L=this.defaultHref||this.config.get("backButtonDefaultHref");null!==(g=this.routerOutlet)&&void 0!==g&&g.canGoBack()?(this.navCtrl.setDirection("back",void 0,void 0,this.routerAnimation),this.routerOutlet.pop(),a.preventDefault()):null!=L&&(this.navCtrl.navigateBack(L,{animation:this.routerAnimation}),a.preventDefault())}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(fr,8),o.Y36(zr),o.Y36(Go))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-back-button"]],hostBindings:function(a,g){1&a&&o.NdJ("click",function(Me){return g.onClick(Me)})},inputs:{defaultHref:"defaultHref",routerAnimation:"routerAnimation"}}),s})();class kn{constructor(c){this.ctrl=c}create(c){return this.ctrl.create(c||{})}dismiss(c,a,g){return this.ctrl.dismiss(c,a,g)}getTop(){return this.ctrl.getTop()}}let Nr=(()=>{class s extends kn{constructor(){super(T.b)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})(),Zn=(()=>{class s extends kn{constructor(){super(T.a)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})(),Lr=(()=>{class s extends kn{constructor(){super(T.l)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();class Sn{}let Fo=(()=>{class s extends kn{constructor(a,g,L,Me){super(T.m),this.angularDelegate=a,this.resolver=g,this.injector=L,this.environmentInjector=Me}create(a){var g;return super.create(Object.assign(Object.assign({},a),{delegate:this.angularDelegate.create(null!==(g=this.resolver)&&void 0!==g?g:this.environmentInjector,this.injector)}))}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(Or),o.LFG(o._Vd),o.LFG(o.zs3),o.LFG(Sn,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})(),wo=(()=>{class s extends kn{constructor(a,g,L,Me){super(T.c),this.angularDelegate=a,this.resolver=g,this.injector=L,this.environmentInjector=Me}create(a){var g;return super.create(Object.assign(Object.assign({},a),{delegate:this.angularDelegate.create(null!==(g=this.resolver)&&void 0!==g?g:this.environmentInjector,this.injector)}))}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(Or),o.LFG(o._Vd),o.LFG(o.zs3),o.LFG(Sn,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})(),ko=(()=>{class s extends kn{constructor(){super(T.t)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();class rr{shouldDetach(c){return!1}shouldAttach(c){return!1}store(c,a){}retrieve(c){return null}shouldReuseRoute(c,a){if(c.routeConfig!==a.routeConfig)return!1;const g=c.params,L=a.params,Me=Object.keys(g),Je=Object.keys(L);if(Me.length!==Je.length)return!1;for(const at of Me)if(L[at]!==g[at])return!1;return!0}}const ro=(s,c,a)=>()=>{if(c.defaultView&&typeof window<"u"){(s=>{const c=window,a=c.Ionic;a&&a.config&&"Object"!==a.config.constructor.name||(c.Ionic=c.Ionic||{},c.Ionic.config=Object.assign(Object.assign({},c.Ionic.config),s))})(Object.assign(Object.assign({},s),{_zoneGate:Me=>a.run(Me)}));const L="__zone_symbol__addEventListener"in c.body?"__zone_symbol__addEventListener":"addEventListener";return function dt(){var s=[];if(typeof window<"u"){var c=window;(!c.customElements||c.Element&&(!c.Element.prototype.closest||!c.Element.prototype.matches||!c.Element.prototype.remove||!c.Element.prototype.getRootNode))&&s.push(w.e(6748).then(w.t.bind(w,723,23))),("function"!=typeof Object.assign||!Object.entries||!Array.prototype.find||!Array.prototype.includes||!String.prototype.startsWith||!String.prototype.endsWith||c.NodeList&&!c.NodeList.prototype.forEach||!c.fetch||!function(){try{var g=new URL("b","http://a");return g.pathname="c%20d","http://a/c%20d"===g.href&&g.searchParams}catch{return!1}}()||typeof WeakMap>"u")&&s.push(w.e(2214).then(w.t.bind(w,4144,23)))}return Promise.all(s)}().then(()=>((s,c)=>typeof window>"u"?Promise.resolve():(0,te.p)().then(()=>(et(),(0,te.b)(JSON.parse('[["ion-menu_3",[[33,"ion-menu-button",{"color":[513],"disabled":[4],"menu":[1],"autoHide":[4,"auto-hide"],"type":[1],"visible":[32]},[[16,"ionMenuChange","visibilityChanged"],[16,"ionSplitPaneVisible","visibilityChanged"]]],[33,"ion-menu",{"contentId":[513,"content-id"],"menuId":[513,"menu-id"],"type":[1025],"disabled":[1028],"side":[513],"swipeGesture":[4,"swipe-gesture"],"maxEdgeStart":[2,"max-edge-start"],"isPaneVisible":[32],"isEndSide":[32],"isOpen":[64],"isActive":[64],"open":[64],"close":[64],"toggle":[64],"setOpen":[64]},[[16,"ionSplitPaneVisible","onSplitPaneChanged"],[2,"click","onBackdropClick"],[0,"keydown","onKeydown"]]],[1,"ion-menu-toggle",{"menu":[1],"autoHide":[4,"auto-hide"],"visible":[32]},[[16,"ionMenuChange","visibilityChanged"],[16,"ionSplitPaneVisible","visibilityChanged"]]]]],["ion-fab_3",[[33,"ion-fab-button",{"color":[513],"activated":[4],"disabled":[4],"download":[1],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1],"show":[4],"translucent":[4],"type":[1],"size":[1],"closeIcon":[1,"close-icon"]}],[1,"ion-fab",{"horizontal":[1],"vertical":[1],"edge":[4],"activated":[1028],"close":[64],"toggle":[64]}],[1,"ion-fab-list",{"activated":[4],"side":[1]}]]],["ion-refresher_2",[[0,"ion-refresher-content",{"pullingIcon":[1025,"pulling-icon"],"pullingText":[1,"pulling-text"],"refreshingSpinner":[1025,"refreshing-spinner"],"refreshingText":[1,"refreshing-text"]}],[32,"ion-refresher",{"pullMin":[2,"pull-min"],"pullMax":[2,"pull-max"],"closeDuration":[1,"close-duration"],"snapbackDuration":[1,"snapback-duration"],"pullFactor":[2,"pull-factor"],"disabled":[4],"nativeRefresher":[32],"state":[32],"complete":[64],"cancel":[64],"getProgress":[64]}]]],["ion-back-button",[[33,"ion-back-button",{"color":[513],"defaultHref":[1025,"default-href"],"disabled":[516],"icon":[1],"text":[1],"type":[1],"routerAnimation":[16]}]]],["ion-toast",[[33,"ion-toast",{"overlayIndex":[2,"overlay-index"],"color":[513],"enterAnimation":[16],"leaveAnimation":[16],"cssClass":[1,"css-class"],"duration":[2],"header":[1],"message":[1],"keyboardClose":[4,"keyboard-close"],"position":[1],"buttons":[16],"translucent":[4],"animated":[4],"icon":[1],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-card_5",[[33,"ion-card",{"color":[513],"button":[4],"type":[1],"disabled":[4],"download":[1],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1]}],[32,"ion-card-content"],[33,"ion-card-header",{"color":[513],"translucent":[4]}],[33,"ion-card-subtitle",{"color":[513]}],[33,"ion-card-title",{"color":[513]}]]],["ion-item-option_3",[[33,"ion-item-option",{"color":[513],"disabled":[4],"download":[1],"expandable":[4],"href":[1],"rel":[1],"target":[1],"type":[1]}],[32,"ion-item-options",{"side":[1],"fireSwipeEvent":[64]}],[0,"ion-item-sliding",{"disabled":[4],"state":[32],"getOpenAmount":[64],"getSlidingRatio":[64],"open":[64],"close":[64],"closeOpened":[64]}]]],["ion-accordion_2",[[49,"ion-accordion",{"value":[1],"disabled":[4],"readonly":[4],"toggleIcon":[1,"toggle-icon"],"toggleIconSlot":[1,"toggle-icon-slot"],"state":[32],"isNext":[32],"isPrevious":[32]}],[33,"ion-accordion-group",{"animated":[4],"multiple":[4],"value":[1025],"disabled":[4],"readonly":[4],"expand":[1],"requestAccordionToggle":[64],"getAccordions":[64]},[[0,"keydown","onKeydown"]]]]],["ion-breadcrumb_2",[[33,"ion-breadcrumb",{"collapsed":[4],"last":[4],"showCollapsedIndicator":[4,"show-collapsed-indicator"],"color":[1],"active":[4],"disabled":[4],"download":[1],"href":[1],"rel":[1],"separator":[4],"target":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16]}],[33,"ion-breadcrumbs",{"color":[1],"maxItems":[2,"max-items"],"itemsBeforeCollapse":[2,"items-before-collapse"],"itemsAfterCollapse":[2,"items-after-collapse"],"collapsed":[32],"activeChanged":[32]},[[0,"collapsedClick","onCollapsedClick"]]]]],["ion-infinite-scroll_2",[[32,"ion-infinite-scroll-content",{"loadingSpinner":[1025,"loading-spinner"],"loadingText":[1,"loading-text"]}],[0,"ion-infinite-scroll",{"threshold":[1],"disabled":[4],"position":[1],"isLoading":[32],"complete":[64]}]]],["ion-reorder_2",[[33,"ion-reorder",null,[[2,"click","onClick"]]],[0,"ion-reorder-group",{"disabled":[4],"state":[32],"complete":[64]}]]],["ion-segment_2",[[33,"ion-segment-button",{"disabled":[4],"layout":[1],"type":[1],"value":[1],"checked":[32]}],[33,"ion-segment",{"color":[513],"disabled":[4],"scrollable":[4],"swipeGesture":[4,"swipe-gesture"],"value":[1025],"selectOnFocus":[4,"select-on-focus"],"activated":[32]},[[0,"keydown","onKeyDown"]]]]],["ion-tab-bar_2",[[33,"ion-tab-button",{"disabled":[4],"download":[1],"href":[1],"rel":[1],"layout":[1025],"selected":[1028],"tab":[1],"target":[1]},[[8,"ionTabBarChanged","onTabBarChanged"]]],[33,"ion-tab-bar",{"color":[513],"selectedTab":[1,"selected-tab"],"translucent":[4],"keyboardVisible":[32]}]]],["ion-chip",[[1,"ion-chip",{"color":[513],"outline":[4],"disabled":[4]}]]],["ion-datetime-button",[[33,"ion-datetime-button",{"color":[513],"disabled":[516],"datetime":[1],"datetimePresentation":[32],"dateText":[32],"timeText":[32],"datetimeActive":[32],"selectedButton":[32]}]]],["ion-searchbar",[[34,"ion-searchbar",{"color":[513],"animated":[4],"autocomplete":[1],"autocorrect":[1],"cancelButtonIcon":[1,"cancel-button-icon"],"cancelButtonText":[1,"cancel-button-text"],"clearIcon":[1,"clear-icon"],"debounce":[2],"disabled":[4],"inputmode":[1],"enterkeyhint":[1],"placeholder":[1],"searchIcon":[1,"search-icon"],"showCancelButton":[1,"show-cancel-button"],"showClearButton":[1,"show-clear-button"],"spellcheck":[4],"type":[1],"value":[1025],"focused":[32],"noAnimate":[32],"setFocus":[64],"getInputElement":[64]}]]],["ion-toggle",[[33,"ion-toggle",{"color":[513],"name":[1],"checked":[1028],"disabled":[4],"value":[1],"enableOnOffLabels":[4,"enable-on-off-labels"],"activated":[32]}]]],["ion-nav_2",[[1,"ion-nav",{"delegate":[16],"swipeGesture":[1028,"swipe-gesture"],"animated":[4],"animation":[16],"rootParams":[16],"root":[1],"push":[64],"insert":[64],"insertPages":[64],"pop":[64],"popTo":[64],"popToRoot":[64],"removeIndex":[64],"setRoot":[64],"setPages":[64],"setRouteId":[64],"getRouteId":[64],"getActive":[64],"getByIndex":[64],"canGoBack":[64],"getPrevious":[64]}],[0,"ion-nav-link",{"component":[1],"componentProps":[16],"routerDirection":[1,"router-direction"],"routerAnimation":[16]}]]],["ion-input",[[34,"ion-input",{"fireFocusEvents":[4,"fire-focus-events"],"color":[513],"accept":[1],"autocapitalize":[1],"autocomplete":[1],"autocorrect":[1],"autofocus":[4],"clearInput":[4,"clear-input"],"clearOnEdit":[4,"clear-on-edit"],"debounce":[2],"disabled":[4],"enterkeyhint":[1],"inputmode":[1],"max":[8],"maxlength":[2],"min":[8],"minlength":[2],"multiple":[4],"name":[1],"pattern":[1],"placeholder":[1],"readonly":[4],"required":[4],"spellcheck":[4],"step":[1],"size":[2],"type":[1],"value":[1032],"hasFocus":[32],"setFocus":[64],"setBlur":[64],"getInputElement":[64]}]]],["ion-textarea",[[34,"ion-textarea",{"fireFocusEvents":[4,"fire-focus-events"],"color":[513],"autocapitalize":[1],"autofocus":[4],"clearOnEdit":[1028,"clear-on-edit"],"debounce":[2],"disabled":[4],"inputmode":[1],"enterkeyhint":[1],"maxlength":[2],"minlength":[2],"name":[1],"placeholder":[1],"readonly":[4],"required":[4],"spellcheck":[4],"cols":[2],"rows":[2],"wrap":[1],"autoGrow":[516,"auto-grow"],"value":[1025],"hasFocus":[32],"setFocus":[64],"setBlur":[64],"getInputElement":[64]}]]],["ion-backdrop",[[33,"ion-backdrop",{"visible":[4],"tappable":[4],"stopPropagation":[4,"stop-propagation"]},[[2,"click","onMouseDown"]]]]],["ion-loading",[[34,"ion-loading",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"message":[1],"cssClass":[1,"css-class"],"duration":[2],"backdropDismiss":[4,"backdrop-dismiss"],"showBackdrop":[4,"show-backdrop"],"spinner":[1025],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-modal",[[33,"ion-modal",{"hasController":[4,"has-controller"],"overlayIndex":[2,"overlay-index"],"delegate":[16],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"breakpoints":[16],"initialBreakpoint":[2,"initial-breakpoint"],"backdropBreakpoint":[2,"backdrop-breakpoint"],"handle":[4],"handleBehavior":[1,"handle-behavior"],"component":[1],"componentProps":[16],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"showBackdrop":[4,"show-backdrop"],"animated":[4],"swipeToClose":[4,"swipe-to-close"],"presentingElement":[16],"htmlAttributes":[16],"isOpen":[4,"is-open"],"trigger":[1],"keepContentsMounted":[4,"keep-contents-mounted"],"canDismiss":[4,"can-dismiss"],"presented":[32],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64],"setCurrentBreakpoint":[64],"getCurrentBreakpoint":[64]}]]],["ion-route_4",[[0,"ion-route",{"url":[1],"component":[1],"componentProps":[16],"beforeLeave":[16],"beforeEnter":[16]}],[0,"ion-route-redirect",{"from":[1],"to":[1]}],[0,"ion-router",{"root":[1],"useHash":[4,"use-hash"],"canTransition":[64],"push":[64],"back":[64],"printDebug":[64],"navChanged":[64]},[[8,"popstate","onPopState"],[4,"ionBackButton","onBackButton"]]],[1,"ion-router-link",{"color":[513],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1]}]]],["ion-avatar_3",[[33,"ion-avatar"],[33,"ion-badge",{"color":[513]}],[1,"ion-thumbnail"]]],["ion-col_3",[[1,"ion-col",{"offset":[1],"offsetXs":[1,"offset-xs"],"offsetSm":[1,"offset-sm"],"offsetMd":[1,"offset-md"],"offsetLg":[1,"offset-lg"],"offsetXl":[1,"offset-xl"],"pull":[1],"pullXs":[1,"pull-xs"],"pullSm":[1,"pull-sm"],"pullMd":[1,"pull-md"],"pullLg":[1,"pull-lg"],"pullXl":[1,"pull-xl"],"push":[1],"pushXs":[1,"push-xs"],"pushSm":[1,"push-sm"],"pushMd":[1,"push-md"],"pushLg":[1,"push-lg"],"pushXl":[1,"push-xl"],"size":[1],"sizeXs":[1,"size-xs"],"sizeSm":[1,"size-sm"],"sizeMd":[1,"size-md"],"sizeLg":[1,"size-lg"],"sizeXl":[1,"size-xl"]},[[9,"resize","onResize"]]],[1,"ion-grid",{"fixed":[4]}],[1,"ion-row"]]],["ion-slide_2",[[0,"ion-slide"],[36,"ion-slides",{"options":[8],"pager":[4],"scrollbar":[4],"update":[64],"updateAutoHeight":[64],"slideTo":[64],"slideNext":[64],"slidePrev":[64],"getActiveIndex":[64],"getPreviousIndex":[64],"length":[64],"isEnd":[64],"isBeginning":[64],"startAutoplay":[64],"stopAutoplay":[64],"lockSwipeToNext":[64],"lockSwipeToPrev":[64],"lockSwipes":[64],"getSwiper":[64]}]]],["ion-tab_2",[[1,"ion-tab",{"active":[1028],"delegate":[16],"tab":[1],"component":[1],"setActive":[64]}],[1,"ion-tabs",{"useRouter":[1028,"use-router"],"selectedTab":[32],"select":[64],"getTab":[64],"getSelected":[64],"setRouteId":[64],"getRouteId":[64]}]]],["ion-img",[[1,"ion-img",{"alt":[1],"src":[1],"loadSrc":[32],"loadError":[32]}]]],["ion-progress-bar",[[33,"ion-progress-bar",{"type":[1],"reversed":[4],"value":[2],"buffer":[2],"color":[513]}]]],["ion-range",[[33,"ion-range",{"color":[513],"debounce":[2],"name":[1],"dualKnobs":[4,"dual-knobs"],"min":[2],"max":[2],"pin":[4],"pinFormatter":[16],"snaps":[4],"step":[2],"ticks":[4],"activeBarStart":[1026,"active-bar-start"],"disabled":[4],"value":[1026],"ratioA":[32],"ratioB":[32],"pressedKnob":[32]}]]],["ion-split-pane",[[33,"ion-split-pane",{"contentId":[513,"content-id"],"disabled":[4],"when":[8],"visible":[32]}]]],["ion-text",[[1,"ion-text",{"color":[513]}]]],["ion-virtual-scroll",[[0,"ion-virtual-scroll",{"approxItemHeight":[2,"approx-item-height"],"approxHeaderHeight":[2,"approx-header-height"],"approxFooterHeight":[2,"approx-footer-height"],"headerFn":[16],"footerFn":[16],"items":[16],"itemHeight":[16],"headerHeight":[16],"footerHeight":[16],"renderItem":[16],"renderHeader":[16],"renderFooter":[16],"nodeRender":[16],"domRender":[16],"totalHeight":[32],"positionForItem":[64],"checkRange":[64],"checkEnd":[64]},[[9,"resize","onResize"]]]]],["ion-picker-column-internal",[[33,"ion-picker-column-internal",{"items":[16],"value":[1032],"color":[513],"numericInput":[4,"numeric-input"],"isActive":[32],"scrollActiveItemIntoView":[64],"setValue":[64]}]]],["ion-picker-internal",[[33,"ion-picker-internal",null,[[1,"touchstart","preventTouchStartPropagation"]]]]],["ion-radio_2",[[33,"ion-radio",{"color":[513],"name":[1],"disabled":[4],"value":[8],"checked":[32],"buttonTabindex":[32],"setFocus":[64],"setButtonTabindex":[64]}],[0,"ion-radio-group",{"allowEmptySelection":[4,"allow-empty-selection"],"name":[1],"value":[1032]},[[4,"keydown","onKeydown"]]]]],["ion-ripple-effect",[[1,"ion-ripple-effect",{"type":[1],"addRipple":[64]}]]],["ion-button_2",[[33,"ion-button",{"color":[513],"buttonType":[1025,"button-type"],"disabled":[516],"expand":[513],"fill":[1537],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"download":[1],"href":[1],"rel":[1],"shape":[513],"size":[513],"strong":[4],"target":[1],"type":[1],"form":[1]}],[1,"ion-icon",{"mode":[1025],"color":[1],"ios":[1],"md":[1],"flipRtl":[4,"flip-rtl"],"name":[513],"src":[1],"icon":[8],"size":[1],"lazy":[4],"sanitize":[4],"svgContent":[32],"isVisible":[32],"ariaLabel":[32]}]]],["ion-datetime_3",[[33,"ion-datetime",{"color":[1],"name":[1],"disabled":[4],"readonly":[4],"isDateEnabled":[16],"min":[1025],"max":[1025],"presentation":[1],"cancelText":[1,"cancel-text"],"doneText":[1,"done-text"],"clearText":[1,"clear-text"],"yearValues":[8,"year-values"],"monthValues":[8,"month-values"],"dayValues":[8,"day-values"],"hourValues":[8,"hour-values"],"minuteValues":[8,"minute-values"],"locale":[1],"firstDayOfWeek":[2,"first-day-of-week"],"titleSelectedDatesFormatter":[16],"multiple":[4],"value":[1025],"showDefaultTitle":[4,"show-default-title"],"showDefaultButtons":[4,"show-default-buttons"],"showClearButton":[4,"show-clear-button"],"showDefaultTimeLabel":[4,"show-default-time-label"],"hourCycle":[1,"hour-cycle"],"size":[1],"preferWheel":[4,"prefer-wheel"],"showMonthAndYear":[32],"activeParts":[32],"workingParts":[32],"isPresented":[32],"isTimePopoverOpen":[32],"confirm":[64],"reset":[64],"cancel":[64]}],[34,"ion-picker",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"buttons":[16],"columns":[16],"cssClass":[1,"css-class"],"duration":[2],"showBackdrop":[4,"show-backdrop"],"backdropDismiss":[4,"backdrop-dismiss"],"animated":[4],"htmlAttributes":[16],"presented":[32],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64],"getColumn":[64]}],[32,"ion-picker-column",{"col":[16]}]]],["ion-action-sheet",[[34,"ion-action-sheet",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"buttons":[16],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"header":[1],"subHeader":[1,"sub-header"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-alert",[[34,"ion-alert",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"cssClass":[1,"css-class"],"header":[1],"subHeader":[1,"sub-header"],"message":[1],"buttons":[16],"inputs":[1040],"backdropDismiss":[4,"backdrop-dismiss"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]},[[4,"keydown","onKeydown"]]]]],["ion-popover",[[33,"ion-popover",{"hasController":[4,"has-controller"],"delegate":[16],"overlayIndex":[2,"overlay-index"],"enterAnimation":[16],"leaveAnimation":[16],"component":[1],"componentProps":[16],"keyboardClose":[4,"keyboard-close"],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"event":[8],"showBackdrop":[4,"show-backdrop"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"triggerAction":[1,"trigger-action"],"trigger":[1],"size":[1],"dismissOnSelect":[4,"dismiss-on-select"],"reference":[1],"side":[1],"alignment":[1025],"arrow":[4],"isOpen":[4,"is-open"],"keyboardEvents":[4,"keyboard-events"],"keepContentsMounted":[4,"keep-contents-mounted"],"presented":[32],"presentFromTrigger":[64],"present":[64],"dismiss":[64],"getParentPopover":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-checkbox",[[33,"ion-checkbox",{"color":[513],"name":[1],"checked":[1028],"indeterminate":[1028],"disabled":[4],"value":[8]}]]],["ion-select_3",[[33,"ion-select",{"disabled":[4],"cancelText":[1,"cancel-text"],"okText":[1,"ok-text"],"placeholder":[1],"name":[1],"selectedText":[1,"selected-text"],"multiple":[4],"interface":[1],"interfaceOptions":[8,"interface-options"],"compareWith":[1,"compare-with"],"value":[1032],"isExpanded":[32],"open":[64]}],[1,"ion-select-option",{"disabled":[4],"value":[8]}],[34,"ion-select-popover",{"header":[1],"subHeader":[1,"sub-header"],"message":[1],"multiple":[4],"options":[16]},[[0,"ionChange","onSelect"]]]]],["ion-app_8",[[0,"ion-app",{"setFocus":[64]}],[1,"ion-content",{"color":[513],"fullscreen":[4],"forceOverscroll":[1028,"force-overscroll"],"scrollX":[4,"scroll-x"],"scrollY":[4,"scroll-y"],"scrollEvents":[4,"scroll-events"],"getScrollElement":[64],"getBackgroundElement":[64],"scrollToTop":[64],"scrollToBottom":[64],"scrollByPoint":[64],"scrollToPoint":[64]},[[8,"appload","onAppLoad"]]],[36,"ion-footer",{"collapse":[1],"translucent":[4],"keyboardVisible":[32]}],[36,"ion-header",{"collapse":[1],"translucent":[4]}],[1,"ion-router-outlet",{"mode":[1025],"delegate":[16],"animated":[4],"animation":[16],"swipeHandler":[16],"commit":[64],"setRouteId":[64],"getRouteId":[64]}],[33,"ion-title",{"color":[513],"size":[1]}],[33,"ion-toolbar",{"color":[513]},[[0,"ionStyle","childrenStyle"]]],[34,"ion-buttons",{"collapse":[4]}]]],["ion-spinner",[[1,"ion-spinner",{"color":[513],"duration":[2],"name":[1],"paused":[4]}]]],["ion-item_8",[[33,"ion-item-divider",{"color":[513],"sticky":[4]}],[32,"ion-item-group"],[1,"ion-skeleton-text",{"animated":[4]}],[32,"ion-list",{"lines":[1],"inset":[4],"closeSlidingItems":[64]}],[33,"ion-list-header",{"color":[513],"lines":[1]}],[49,"ion-item",{"color":[513],"button":[4],"detail":[4],"detailIcon":[1,"detail-icon"],"disabled":[4],"download":[1],"fill":[1],"shape":[1],"href":[1],"rel":[1],"lines":[1],"counter":[4],"routerAnimation":[16],"routerDirection":[1,"router-direction"],"target":[1],"type":[1],"counterFormatter":[16],"multipleInputs":[32],"focusable":[32],"counterString":[32]},[[0,"ionChange","handleIonChange"],[0,"ionColor","labelColorChanged"],[0,"ionStyle","itemStyle"]]],[34,"ion-label",{"color":[513],"position":[1],"noAnimate":[32]}],[33,"ion-note",{"color":[513]}]]]]'),c))))(0,{exclude:["ion-tabs","ion-tab"],syncQueue:!0,raf:Pt,jmp:Me=>a.runOutsideAngular(Me),ael(Me,Je,at,Dt){Me[L](Je,at,Dt)},rel(Me,Je,at,Dt){Me.removeEventListener(Je,at,Dt)}}))}};let C=(()=>{class s{static forRoot(a){return{ngModule:s,providers:[{provide:Fr,useValue:a},{provide:o.ip1,useFactory:ro,multi:!0,deps:[Fr,ze.K0,o.R0b]}]}}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275mod=o.oAB({type:s}),s.\u0275inj=o.cJS({providers:[Or,Fo,wo],imports:[[ze.ez]]}),s})()},8834:(Qe,Fe,w)=>{"use strict";w.d(Fe,{c:()=>j});var o=w(5730),x=w(3457);let N;const R=P=>P.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),W=P=>{if(void 0===N){const pe=void 0!==P.style.webkitAnimationName;N=void 0===P.style.animationName&&pe?"-webkit-":""}return N},M=(P,K,pe)=>{const ke=K.startsWith("animation")?W(P):"";P.style.setProperty(ke+K,pe)},U=(P,K)=>{const pe=K.startsWith("animation")?W(P):"";P.style.removeProperty(pe+K)},G=[],E=(P=[],K)=>{if(void 0!==K){const pe=Array.isArray(K)?K:[K];return[...P,...pe]}return P},j=P=>{let K,pe,ke,Te,ie,Be,Q,ue,de,ne,Ee,et,Ue,re=[],oe=[],be=[],Ne=!1,T={},k=[],O=[],te={},ce=0,Ae=!1,De=!1,Ce=!0,ze=!1,dt=!0,St=!1;const Ke=P,nn=[],wt=[],Rt=[],Kt=[],pn=[],Pt=[],Ut=[],it=[],Xt=[],kt=[],Vt="function"==typeof AnimationEffect||void 0!==x.w&&"function"==typeof x.w.AnimationEffect,rn="function"==typeof Element&&"function"==typeof Element.prototype.animate&&Vt,en=()=>kt,Et=(X,le)=>((le?.oneTimeCallback?wt:nn).push({c:X,o:le}),Ue),Ct=()=>{if(rn)kt.forEach(X=>{X.cancel()}),kt.length=0;else{const X=Rt.slice();(0,o.r)(()=>{X.forEach(le=>{U(le,"animation-name"),U(le,"animation-duration"),U(le,"animation-timing-function"),U(le,"animation-iteration-count"),U(le,"animation-delay"),U(le,"animation-play-state"),U(le,"animation-fill-mode"),U(le,"animation-direction")})})}},qe=()=>{pn.forEach(X=>{X?.parentNode&&X.parentNode.removeChild(X)}),pn.length=0},He=()=>void 0!==ie?ie:Q?Q.getFill():"both",Ye=()=>void 0!==de?de:void 0!==Be?Be:Q?Q.getDirection():"normal",pt=()=>Ae?"linear":void 0!==ke?ke:Q?Q.getEasing():"linear",vt=()=>De?0:void 0!==ne?ne:void 0!==pe?pe:Q?Q.getDuration():0,Ht=()=>void 0!==Te?Te:Q?Q.getIterations():1,_t=()=>void 0!==Ee?Ee:void 0!==K?K:Q?Q.getDelay():0,sn=()=>{0!==ce&&(ce--,0===ce&&((()=>{Qt(),it.forEach(Re=>Re()),Xt.forEach(Re=>Re());const X=Ce?1:0,le=k,Ie=O,je=te;Rt.forEach(Re=>{const ot=Re.classList;le.forEach(st=>ot.add(st)),Ie.forEach(st=>ot.remove(st));for(const st in je)je.hasOwnProperty(st)&&M(Re,st,je[st])}),nn.forEach(Re=>Re.c(X,Ue)),wt.forEach(Re=>Re.c(X,Ue)),wt.length=0,dt=!0,Ce&&(ze=!0),Ce=!0})(),Q&&Q.animationFinish()))},dn=(X=!0)=>{qe();const le=(P=>(P.forEach(K=>{for(const pe in K)if(K.hasOwnProperty(pe)){const ke=K[pe];if("easing"===pe)K["animation-timing-function"]=ke,delete K[pe];else{const Te=R(pe);Te!==pe&&(K[Te]=ke,delete K[pe])}}}),P))(re);Rt.forEach(Ie=>{if(le.length>0){const je=((P=[])=>P.map(K=>{const pe=K.offset,ke=[];for(const Te in K)K.hasOwnProperty(Te)&&"offset"!==Te&&ke.push(`${Te}: ${K[Te]};`);return`${100*pe}% { ${ke.join(" ")} }`}).join(" "))(le);et=void 0!==P?P:(P=>{let K=G.indexOf(P);return K<0&&(K=G.push(P)-1),`ion-animation-${K}`})(je);const Re=((P,K,pe)=>{var ke;const Te=(P=>{const K=void 0!==P.getRootNode?P.getRootNode():P;return K.head||K})(pe),ie=W(pe),Be=Te.querySelector("#"+P);if(Be)return Be;const re=(null!==(ke=pe.ownerDocument)&&void 0!==ke?ke:document).createElement("style");return re.id=P,re.textContent=`@${ie}keyframes ${P} { ${K} } @${ie}keyframes ${P}-alt { ${K} }`,Te.appendChild(re),re})(et,je,Ie);pn.push(Re),M(Ie,"animation-duration",`${vt()}ms`),M(Ie,"animation-timing-function",pt()),M(Ie,"animation-delay",`${_t()}ms`),M(Ie,"animation-fill-mode",He()),M(Ie,"animation-direction",Ye());const ot=Ht()===1/0?"infinite":Ht().toString();M(Ie,"animation-iteration-count",ot),M(Ie,"animation-play-state","paused"),X&&M(Ie,"animation-name",`${Re.id}-alt`),(0,o.r)(()=>{M(Ie,"animation-name",Re.id||null)})}})},sr=(X=!0)=>{(()=>{Pt.forEach(je=>je()),Ut.forEach(je=>je());const X=oe,le=be,Ie=T;Rt.forEach(je=>{const Re=je.classList;X.forEach(ot=>Re.add(ot)),le.forEach(ot=>Re.remove(ot));for(const ot in Ie)Ie.hasOwnProperty(ot)&&M(je,ot,Ie[ot])})})(),re.length>0&&(rn?(Rt.forEach(X=>{const le=X.animate(re,{id:Ke,delay:_t(),duration:vt(),easing:pt(),iterations:Ht(),fill:He(),direction:Ye()});le.pause(),kt.push(le)}),kt.length>0&&(kt[0].onfinish=()=>{sn()})):dn(X)),Ne=!0},$n=X=>{if(X=Math.min(Math.max(X,0),.9999),rn)kt.forEach(le=>{le.currentTime=le.effect.getComputedTiming().delay+vt()*X,le.pause()});else{const le=`-${vt()*X}ms`;Rt.forEach(Ie=>{re.length>0&&(M(Ie,"animation-delay",le),M(Ie,"animation-play-state","paused"))})}},Tn=X=>{kt.forEach(le=>{le.effect.updateTiming({delay:_t(),duration:vt(),easing:pt(),iterations:Ht(),fill:He(),direction:Ye()})}),void 0!==X&&$n(X)},xn=(X=!0,le)=>{(0,o.r)(()=>{Rt.forEach(Ie=>{M(Ie,"animation-name",et||null),M(Ie,"animation-duration",`${vt()}ms`),M(Ie,"animation-timing-function",pt()),M(Ie,"animation-delay",void 0!==le?`-${le*vt()}ms`:`${_t()}ms`),M(Ie,"animation-fill-mode",He()||null),M(Ie,"animation-direction",Ye()||null);const je=Ht()===1/0?"infinite":Ht().toString();M(Ie,"animation-iteration-count",je),X&&M(Ie,"animation-name",`${et}-alt`),(0,o.r)(()=>{M(Ie,"animation-name",et||null)})})})},vn=(X=!1,le=!0,Ie)=>(X&&Kt.forEach(je=>{je.update(X,le,Ie)}),rn?Tn(Ie):xn(le,Ie),Ue),gr=()=>{Ne&&(rn?kt.forEach(X=>{X.pause()}):Rt.forEach(X=>{M(X,"animation-play-state","paused")}),St=!0)},fn=()=>{ue=void 0,sn()},Qt=()=>{ue&&clearTimeout(ue)},F=X=>new Promise(le=>{X?.sync&&(De=!0,Et(()=>De=!1,{oneTimeCallback:!0})),Ne||sr(),ze&&(rn?($n(0),Tn()):xn(),ze=!1),dt&&(ce=Kt.length+1,dt=!1),Et(()=>le(),{oneTimeCallback:!0}),Kt.forEach(Ie=>{Ie.play()}),rn?(kt.forEach(X=>{X.play()}),(0===re.length||0===Rt.length)&&sn()):(()=>{if(Qt(),(0,o.r)(()=>{Rt.forEach(X=>{re.length>0&&M(X,"animation-play-state","running")})}),0===re.length||0===Rt.length)sn();else{const X=_t()||0,le=vt()||0,Ie=Ht()||1;isFinite(Ie)&&(ue=setTimeout(fn,X+le*Ie+100)),((P,K)=>{let pe;const ke={passive:!0},ie=Be=>{P===Be.target&&(pe&&pe(),Qt(),(0,o.r)(()=>{Rt.forEach(X=>{U(X,"animation-duration"),U(X,"animation-delay"),U(X,"animation-play-state")}),(0,o.r)(sn)}))};P&&(P.addEventListener("webkitAnimationEnd",ie,ke),P.addEventListener("animationend",ie,ke),pe=()=>{P.removeEventListener("webkitAnimationEnd",ie,ke),P.removeEventListener("animationend",ie,ke)})})(Rt[0])}})(),St=!1}),he=(X,le)=>{const Ie=re[0];return void 0===Ie||void 0!==Ie.offset&&0!==Ie.offset?re=[{offset:0,[X]:le},...re]:Ie[X]=le,Ue};return Ue={parentAnimation:Q,elements:Rt,childAnimations:Kt,id:Ke,animationFinish:sn,from:he,to:(X,le)=>{const Ie=re[re.length-1];return void 0===Ie||void 0!==Ie.offset&&1!==Ie.offset?re=[...re,{offset:1,[X]:le}]:Ie[X]=le,Ue},fromTo:(X,le,Ie)=>he(X,le).to(X,Ie),parent:X=>(Q=X,Ue),play:F,pause:()=>(Kt.forEach(X=>{X.pause()}),gr(),Ue),stop:()=>{Kt.forEach(X=>{X.stop()}),Ne&&(Ct(),Ne=!1),Ae=!1,De=!1,dt=!0,de=void 0,ne=void 0,Ee=void 0,ce=0,ze=!1,Ce=!0,St=!1},destroy:X=>(Kt.forEach(le=>{le.destroy(X)}),(X=>{Ct(),X&&qe()})(X),Rt.length=0,Kt.length=0,re.length=0,nn.length=0,wt.length=0,Ne=!1,dt=!0,Ue),keyframes:X=>{const le=re!==X;return re=X,le&&(X=>{rn?en().forEach(le=>{if(le.effect.setKeyframes)le.effect.setKeyframes(X);else{const Ie=new KeyframeEffect(le.effect.target,X,le.effect.getTiming());le.effect=Ie}}):dn()})(re),Ue},addAnimation:X=>{if(null!=X)if(Array.isArray(X))for(const le of X)le.parent(Ue),Kt.push(le);else X.parent(Ue),Kt.push(X);return Ue},addElement:X=>{if(null!=X)if(1===X.nodeType)Rt.push(X);else if(X.length>=0)for(let le=0;le(ie=X,vn(!0),Ue),direction:X=>(Be=X,vn(!0),Ue),iterations:X=>(Te=X,vn(!0),Ue),duration:X=>(!rn&&0===X&&(X=1),pe=X,vn(!0),Ue),easing:X=>(ke=X,vn(!0),Ue),delay:X=>(K=X,vn(!0),Ue),getWebAnimations:en,getKeyframes:()=>re,getFill:He,getDirection:Ye,getDelay:_t,getIterations:Ht,getEasing:pt,getDuration:vt,afterAddRead:X=>(it.push(X),Ue),afterAddWrite:X=>(Xt.push(X),Ue),afterClearStyles:(X=[])=>{for(const le of X)te[le]="";return Ue},afterStyles:(X={})=>(te=X,Ue),afterRemoveClass:X=>(O=E(O,X),Ue),afterAddClass:X=>(k=E(k,X),Ue),beforeAddRead:X=>(Pt.push(X),Ue),beforeAddWrite:X=>(Ut.push(X),Ue),beforeClearStyles:(X=[])=>{for(const le of X)T[le]="";return Ue},beforeStyles:(X={})=>(T=X,Ue),beforeRemoveClass:X=>(be=E(be,X),Ue),beforeAddClass:X=>(oe=E(oe,X),Ue),onFinish:Et,isRunning:()=>0!==ce&&!St,progressStart:(X=!1,le)=>(Kt.forEach(Ie=>{Ie.progressStart(X,le)}),gr(),Ae=X,Ne||sr(),vn(!1,!0,le),Ue),progressStep:X=>(Kt.forEach(le=>{le.progressStep(X)}),$n(X),Ue),progressEnd:(X,le,Ie)=>(Ae=!1,Kt.forEach(je=>{je.progressEnd(X,le,Ie)}),void 0!==Ie&&(ne=Ie),ze=!1,Ce=!0,0===X?(de="reverse"===Ye()?"normal":"reverse","reverse"===de&&(Ce=!1),rn?(vn(),$n(1-le)):(Ee=(1-le)*vt()*-1,vn(!1,!1))):1===X&&(rn?(vn(),$n(le)):(Ee=le*vt()*-1,vn(!1,!1))),void 0!==X&&(Et(()=>{ne=void 0,de=void 0,Ee=void 0},{oneTimeCallback:!0}),Q||F()),Ue)}}},4349:(Qe,Fe,w)=>{"use strict";w.d(Fe,{G:()=>R});class x{constructor(M,U,_,Y,G){this.id=U,this.name=_,this.disableScroll=G,this.priority=1e6*Y+U,this.ctrl=M}canStart(){return!!this.ctrl&&this.ctrl.canStart(this.name)}start(){return!!this.ctrl&&this.ctrl.start(this.name,this.id,this.priority)}capture(){if(!this.ctrl)return!1;const M=this.ctrl.capture(this.name,this.id,this.priority);return M&&this.disableScroll&&this.ctrl.disableScroll(this.id),M}release(){this.ctrl&&(this.ctrl.release(this.id),this.disableScroll&&this.ctrl.enableScroll(this.id))}destroy(){this.release(),this.ctrl=void 0}}class N{constructor(M,U,_,Y){this.id=U,this.disable=_,this.disableScroll=Y,this.ctrl=M}block(){if(this.ctrl){if(this.disable)for(const M of this.disable)this.ctrl.disableGesture(M,this.id);this.disableScroll&&this.ctrl.disableScroll(this.id)}}unblock(){if(this.ctrl){if(this.disable)for(const M of this.disable)this.ctrl.enableGesture(M,this.id);this.disableScroll&&this.ctrl.enableScroll(this.id)}}destroy(){this.unblock(),this.ctrl=void 0}}const ge="backdrop-no-scroll",R=new class o{constructor(){this.gestureId=0,this.requestedStart=new Map,this.disabledGestures=new Map,this.disabledScroll=new Set}createGesture(M){var U;return new x(this,this.newID(),M.name,null!==(U=M.priority)&&void 0!==U?U:0,!!M.disableScroll)}createBlocker(M={}){return new N(this,this.newID(),M.disable,!!M.disableScroll)}start(M,U,_){return this.canStart(M)?(this.requestedStart.set(U,_),!0):(this.requestedStart.delete(U),!1)}capture(M,U,_){if(!this.start(M,U,_))return!1;const Y=this.requestedStart;let G=-1e4;if(Y.forEach(Z=>{G=Math.max(G,Z)}),G===_){this.capturedId=U,Y.clear();const Z=new CustomEvent("ionGestureCaptured",{detail:{gestureName:M}});return document.dispatchEvent(Z),!0}return Y.delete(U),!1}release(M){this.requestedStart.delete(M),this.capturedId===M&&(this.capturedId=void 0)}disableGesture(M,U){let _=this.disabledGestures.get(M);void 0===_&&(_=new Set,this.disabledGestures.set(M,_)),_.add(U)}enableGesture(M,U){const _=this.disabledGestures.get(M);void 0!==_&&_.delete(U)}disableScroll(M){this.disabledScroll.add(M),1===this.disabledScroll.size&&document.body.classList.add(ge)}enableScroll(M){this.disabledScroll.delete(M),0===this.disabledScroll.size&&document.body.classList.remove(ge)}canStart(M){return!(void 0!==this.capturedId||this.isDisabled(M))}isCaptured(){return void 0!==this.capturedId}isScrollDisabled(){return this.disabledScroll.size>0}isDisabled(M){const U=this.disabledGestures.get(M);return!!(U&&U.size>0)}newID(){return this.gestureId++,this.gestureId}}},7593:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{MENU_BACK_BUTTON_PRIORITY:()=>R,OVERLAY_BACK_BUTTON_PRIORITY:()=>ge,blockHardwareBackButton:()=>x,startHardwareBackButton:()=>N});var o=w(5861);const x=()=>{document.addEventListener("backbutton",()=>{})},N=()=>{const W=document;let M=!1;W.addEventListener("backbutton",()=>{if(M)return;let U=0,_=[];const Y=new CustomEvent("ionBackButton",{bubbles:!1,detail:{register(S,B){_.push({priority:S,handler:B,id:U++})}}});W.dispatchEvent(Y);const G=function(){var S=(0,o.Z)(function*(B){try{if(B?.handler){const E=B.handler(Z);null!=E&&(yield E)}}catch(E){console.error(E)}});return function(E){return S.apply(this,arguments)}}(),Z=()=>{if(_.length>0){let S={priority:Number.MIN_SAFE_INTEGER,handler:()=>{},id:-1};_.forEach(B=>{B.priority>=S.priority&&(S=B)}),M=!0,_=_.filter(B=>B.id!==S.id),G(S).then(()=>M=!1)}};Z()})},ge=100,R=99},5730:(Qe,Fe,w)=>{"use strict";w.d(Fe,{a:()=>M,b:()=>U,c:()=>N,d:()=>B,e:()=>E,f:()=>S,g:()=>_,h:()=>Te,i:()=>W,j:()=>ge,k:()=>Z,l:()=>j,m:()=>G,n:()=>P,o:()=>ke,p:()=>pe,q:()=>ie,r:()=>Y,s:()=>Be,t:()=>o,u:()=>K});const o=(re,oe=0)=>new Promise(be=>{x(re,oe,be)}),x=(re,oe=0,be)=>{let Ne,Q;const T={passive:!0},O=()=>{Ne&&Ne()},te=ce=>{(void 0===ce||re===ce.target)&&(O(),be(ce))};return re&&(re.addEventListener("webkitTransitionEnd",te,T),re.addEventListener("transitionend",te,T),Q=setTimeout(te,oe+500),Ne=()=>{Q&&(clearTimeout(Q),Q=void 0),re.removeEventListener("webkitTransitionEnd",te,T),re.removeEventListener("transitionend",te,T)}),O},N=(re,oe)=>{re.componentOnReady?re.componentOnReady().then(be=>oe(be)):Y(()=>oe(re))},ge=(re,oe=[])=>{const be={};return oe.forEach(Ne=>{re.hasAttribute(Ne)&&(null!==re.getAttribute(Ne)&&(be[Ne]=re.getAttribute(Ne)),re.removeAttribute(Ne))}),be},R=["role","aria-activedescendant","aria-atomic","aria-autocomplete","aria-braillelabel","aria-brailleroledescription","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colindextext","aria-colspan","aria-controls","aria-current","aria-describedby","aria-description","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowindextext","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"],W=(re,oe)=>{let be=R;return oe&&oe.length>0&&(be=be.filter(Ne=>!oe.includes(Ne))),ge(re,be)},M=(re,oe,be,Ne)=>{var Q;if(typeof window<"u"){const k=null===(Q=window?.Ionic)||void 0===Q?void 0:Q.config;if(k){const O=k.get("_ael");if(O)return O(re,oe,be,Ne);if(k._ael)return k._ael(re,oe,be,Ne)}}return re.addEventListener(oe,be,Ne)},U=(re,oe,be,Ne)=>{var Q;if(typeof window<"u"){const k=null===(Q=window?.Ionic)||void 0===Q?void 0:Q.config;if(k){const O=k.get("_rel");if(O)return O(re,oe,be,Ne);if(k._rel)return k._rel(re,oe,be,Ne)}}return re.removeEventListener(oe,be,Ne)},_=(re,oe=re)=>re.shadowRoot||oe,Y=re=>"function"==typeof __zone_symbol__requestAnimationFrame?__zone_symbol__requestAnimationFrame(re):"function"==typeof requestAnimationFrame?requestAnimationFrame(re):setTimeout(re),G=re=>!!re.shadowRoot&&!!re.attachShadow,Z=re=>{const oe=re.closest("ion-item");return oe?oe.querySelector("ion-label"):null},S=re=>{if(re.focus(),re.classList.contains("ion-focusable")){const oe=re.closest("ion-app");oe&&oe.setFocus([re])}},B=(re,oe)=>{let be;const Ne=re.getAttribute("aria-labelledby"),Q=re.id;let T=null!==Ne&&""!==Ne.trim()?Ne:oe+"-lbl",k=null!==Ne&&""!==Ne.trim()?document.getElementById(Ne):Z(re);return k?(null===Ne&&(k.id=T),be=k.textContent,k.setAttribute("aria-hidden","true")):""!==Q.trim()&&(k=document.querySelector(`label[for="${Q}"]`),k&&(""!==k.id?T=k.id:k.id=T=`${Q}-lbl`,be=k.textContent)),{label:k,labelId:T,labelText:be}},E=(re,oe,be,Ne,Q)=>{if(re||G(oe)){let T=oe.querySelector("input.aux-input");T||(T=oe.ownerDocument.createElement("input"),T.type="hidden",T.classList.add("aux-input"),oe.appendChild(T)),T.disabled=Q,T.name=be,T.value=Ne||""}},j=(re,oe,be)=>Math.max(re,Math.min(oe,be)),P=(re,oe)=>{if(!re){const be="ASSERT: "+oe;throw console.error(be),new Error(be)}},K=re=>re.timeStamp||Date.now(),pe=re=>{if(re){const oe=re.changedTouches;if(oe&&oe.length>0){const be=oe[0];return{x:be.clientX,y:be.clientY}}if(void 0!==re.pageX)return{x:re.pageX,y:re.pageY}}return{x:0,y:0}},ke=re=>{const oe="rtl"===document.dir;switch(re){case"start":return oe;case"end":return!oe;default:throw new Error(`"${re}" is not a valid value for [side]. Use "start" or "end" instead.`)}},Te=(re,oe)=>{const be=re._original||re;return{_original:re,emit:ie(be.emit.bind(be),oe)}},ie=(re,oe=0)=>{let be;return(...Ne)=>{clearTimeout(be),be=setTimeout(re,oe,...Ne)}},Be=(re,oe)=>{if(re??(re={}),oe??(oe={}),re===oe)return!0;const be=Object.keys(re);if(be.length!==Object.keys(oe).length)return!1;for(const Ne of be)if(!(Ne in oe)||re[Ne]!==oe[Ne])return!1;return!0}},4292:(Qe,Fe,w)=>{"use strict";w.d(Fe,{m:()=>G});var o=w(5861),x=w(7593),N=w(5730),ge=w(9658),R=w(8834);const W=Z=>(0,R.c)().duration(Z?400:300),M=Z=>{let S,B;const E=Z.width+8,j=(0,R.c)(),P=(0,R.c)();Z.isEndSide?(S=E+"px",B="0px"):(S=-E+"px",B="0px"),j.addElement(Z.menuInnerEl).fromTo("transform",`translateX(${S})`,`translateX(${B})`);const pe="ios"===(0,ge.b)(Z),ke=pe?.2:.25;return P.addElement(Z.backdropEl).fromTo("opacity",.01,ke),W(pe).addAnimation([j,P])},U=Z=>{let S,B;const E=(0,ge.b)(Z),j=Z.width;Z.isEndSide?(S=-j+"px",B=j+"px"):(S=j+"px",B=-j+"px");const P=(0,R.c)().addElement(Z.menuInnerEl).fromTo("transform",`translateX(${B})`,"translateX(0px)"),K=(0,R.c)().addElement(Z.contentEl).fromTo("transform","translateX(0px)",`translateX(${S})`),pe=(0,R.c)().addElement(Z.backdropEl).fromTo("opacity",.01,.32);return W("ios"===E).addAnimation([P,K,pe])},_=Z=>{const S=(0,ge.b)(Z),B=Z.width*(Z.isEndSide?-1:1)+"px",E=(0,R.c)().addElement(Z.contentEl).fromTo("transform","translateX(0px)",`translateX(${B})`);return W("ios"===S).addAnimation(E)},G=(()=>{const Z=new Map,S=[],B=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&ne.open()});return function(ne){return ue.apply(this,arguments)}}(),E=function(){var ue=(0,o.Z)(function*(de){const ne=yield void 0!==de?Te(de):ie();return void 0!==ne&&ne.close()});return function(ne){return ue.apply(this,arguments)}}(),j=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&ne.toggle()});return function(ne){return ue.apply(this,arguments)}}(),P=function(){var ue=(0,o.Z)(function*(de,ne){const Ee=yield Te(ne);return Ee&&(Ee.disabled=!de),Ee});return function(ne,Ee){return ue.apply(this,arguments)}}(),K=function(){var ue=(0,o.Z)(function*(de,ne){const Ee=yield Te(ne);return Ee&&(Ee.swipeGesture=de),Ee});return function(ne,Ee){return ue.apply(this,arguments)}}(),pe=function(){var ue=(0,o.Z)(function*(de){if(null!=de){const ne=yield Te(de);return void 0!==ne&&ne.isOpen()}return void 0!==(yield ie())});return function(ne){return ue.apply(this,arguments)}}(),ke=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&!ne.disabled});return function(ne){return ue.apply(this,arguments)}}(),Te=function(){var ue=(0,o.Z)(function*(de){return yield De(),"start"===de||"end"===de?Ae(Ce=>Ce.side===de&&!Ce.disabled)||Ae(Ce=>Ce.side===de):null!=de?Ae(Ee=>Ee.menuId===de):Ae(Ee=>!Ee.disabled)||(S.length>0?S[0].el:void 0)});return function(ne){return ue.apply(this,arguments)}}(),ie=function(){var ue=(0,o.Z)(function*(){return yield De(),O()});return function(){return ue.apply(this,arguments)}}(),Be=function(){var ue=(0,o.Z)(function*(){return yield De(),te()});return function(){return ue.apply(this,arguments)}}(),re=function(){var ue=(0,o.Z)(function*(){return yield De(),ce()});return function(){return ue.apply(this,arguments)}}(),oe=(ue,de)=>{Z.set(ue,de)},Q=ue=>{const de=ue.side;S.filter(ne=>ne.side===de&&ne!==ue).forEach(ne=>ne.disabled=!0)},T=function(){var ue=(0,o.Z)(function*(de,ne,Ee){if(ce())return!1;if(ne){const Ce=yield ie();Ce&&de.el!==Ce&&(yield Ce.setOpen(!1,!1))}return de._setOpen(ne,Ee)});return function(ne,Ee,Ce){return ue.apply(this,arguments)}}(),O=()=>Ae(ue=>ue._isOpen),te=()=>S.map(ue=>ue.el),ce=()=>S.some(ue=>ue.isAnimating),Ae=ue=>{const de=S.find(ue);if(void 0!==de)return de.el},De=()=>Promise.all(Array.from(document.querySelectorAll("ion-menu")).map(ue=>new Promise(de=>(0,N.c)(ue,de))));return oe("reveal",_),oe("push",U),oe("overlay",M),typeof document<"u"&&document.addEventListener("ionBackButton",ue=>{const de=O();de&&ue.detail.register(x.MENU_BACK_BUTTON_PRIORITY,()=>de.close())}),{registerAnimation:oe,get:Te,getMenus:Be,getOpen:ie,isEnabled:ke,swipeGesture:K,isAnimating:re,isOpen:pe,enable:P,toggle:j,close:E,open:B,_getOpenSync:O,_createAnimation:(ue,de)=>{const ne=Z.get(ue);if(!ne)throw new Error("animation not registered");return ne(de)},_register:ue=>{S.indexOf(ue)<0&&(ue.disabled||Q(ue),S.push(ue))},_unregister:ue=>{const de=S.indexOf(ue);de>-1&&S.splice(de,1)},_setOpen:T,_setActiveMenu:Q}})()},3457:(Qe,Fe,w)=>{"use strict";w.d(Fe,{w:()=>o});const o=typeof window<"u"?window:void 0},1308:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>rt,H:()=>Rt,a:()=>Ce,b:()=>cn,c:()=>Cn,e:()=>Er,f:()=>On,g:()=>ze,h:()=>nn,i:()=>zt,j:()=>Ye,k:()=>Dn,p:()=>j,r:()=>er,s:()=>B});var o=w(5861);let N,ge,R,W=!1,M=!1,U=!1,_=!1,Y=!1;const G=typeof window<"u"?window:{},Z=G.document||{head:{}},S={$flags$:0,$resourcesUrl$:"",jmp:F=>F(),raf:F=>requestAnimationFrame(F),ael:(F,q,he,we)=>F.addEventListener(q,he,we),rel:(F,q,he,we)=>F.removeEventListener(q,he,we),ce:(F,q)=>new CustomEvent(F,q)},B=F=>{Object.assign(S,F)},j=F=>Promise.resolve(F),P=(()=>{try{return new CSSStyleSheet,"function"==typeof(new CSSStyleSheet).replaceSync}catch{}return!1})(),K=(F,q,he,we)=>{he&&he.map(([Pe,X,le])=>{const Ie=ke(F,Pe),je=pe(q,le),Re=Te(Pe);S.ael(Ie,X,je,Re),(q.$rmListeners$=q.$rmListeners$||[]).push(()=>S.rel(Ie,X,je,Re))})},pe=(F,q)=>he=>{try{256&F.$flags$?F.$lazyInstance$[q](he):(F.$queuedListeners$=F.$queuedListeners$||[]).push([q,he])}catch(we){Tn(we)}},ke=(F,q)=>4&q?Z:8&q?G:16&q?Z.body:F,Te=F=>0!=(2&F),be="s-id",Ne="sty-id",Q="c-id",k="http://www.w3.org/1999/xlink",ce=new WeakMap,Ae=(F,q,he)=>{let we=tr.get(F);P&&he?(we=we||new CSSStyleSheet,"string"==typeof we?we=q:we.replaceSync(q)):we=q,tr.set(F,we)},De=(F,q,he,we)=>{let Pe=de(q,he);const X=tr.get(Pe);if(F=11===F.nodeType?F:Z,X)if("string"==typeof X){let Ie,le=ce.get(F=F.head||F);le||ce.set(F,le=new Set),le.has(Pe)||(F.host&&(Ie=F.querySelector(`[${Ne}="${Pe}"]`))?Ie.innerHTML=X:(Ie=Z.createElement("style"),Ie.innerHTML=X,F.insertBefore(Ie,F.querySelector("link"))),le&&le.add(Pe))}else F.adoptedStyleSheets.includes(X)||(F.adoptedStyleSheets=[...F.adoptedStyleSheets,X]);return Pe},de=(F,q)=>"sc-"+(q&&32&F.$flags$?F.$tagName$+"-"+q:F.$tagName$),ne=F=>F.replace(/\/\*!@([^\/]+)\*\/[^\{]+\{/g,"$1{"),Ce=F=>Ir.push(F),ze=F=>dn(F).$modeName$,dt={},Ke=F=>"object"==(F=typeof F)||"function"===F,nn=(F,q,...he)=>{let we=null,Pe=null,X=null,le=!1,Ie=!1;const je=[],Re=st=>{for(let Mt=0;Mtst[Mt]).join(" "))}}if("function"==typeof F)return F(null===q?{}:q,je,pn);const ot=wt(F,null);return ot.$attrs$=q,je.length>0&&(ot.$children$=je),ot.$key$=Pe,ot.$name$=X,ot},wt=(F,q)=>({$flags$:0,$tag$:F,$text$:q,$elm$:null,$children$:null,$attrs$:null,$key$:null,$name$:null}),Rt={},pn={forEach:(F,q)=>F.map(Pt).forEach(q),map:(F,q)=>F.map(Pt).map(q).map(Ut)},Pt=F=>({vattrs:F.$attrs$,vchildren:F.$children$,vkey:F.$key$,vname:F.$name$,vtag:F.$tag$,vtext:F.$text$}),Ut=F=>{if("function"==typeof F.vtag){const he=Object.assign({},F.vattrs);return F.vkey&&(he.key=F.vkey),F.vname&&(he.name=F.vname),nn(F.vtag,he,...F.vchildren||[])}const q=wt(F.vtag,F.vtext);return q.$attrs$=F.vattrs,q.$children$=F.vchildren,q.$key$=F.vkey,q.$name$=F.vname,q},it=(F,q,he,we,Pe,X)=>{if(he!==we){let le=$n(F,q),Ie=q.toLowerCase();if("class"===q){const je=F.classList,Re=kt(he),ot=kt(we);je.remove(...Re.filter(st=>st&&!ot.includes(st))),je.add(...ot.filter(st=>st&&!Re.includes(st)))}else if("style"===q){for(const je in he)(!we||null==we[je])&&(je.includes("-")?F.style.removeProperty(je):F.style[je]="");for(const je in we)(!he||we[je]!==he[je])&&(je.includes("-")?F.style.setProperty(je,we[je]):F.style[je]=we[je])}else if("key"!==q)if("ref"===q)we&&we(F);else if(le||"o"!==q[0]||"n"!==q[1]){const je=Ke(we);if((le||je&&null!==we)&&!Pe)try{if(F.tagName.includes("-"))F[q]=we;else{const ot=we??"";"list"===q?le=!1:(null==he||F[q]!=ot)&&(F[q]=ot)}}catch{}let Re=!1;Ie!==(Ie=Ie.replace(/^xlink\:?/,""))&&(q=Ie,Re=!0),null==we||!1===we?(!1!==we||""===F.getAttribute(q))&&(Re?F.removeAttributeNS(k,q):F.removeAttribute(q)):(!le||4&X||Pe)&&!je&&(we=!0===we?"":we,Re?F.setAttributeNS(k,q,we):F.setAttribute(q,we))}else q="-"===q[2]?q.slice(3):$n(G,Ie)?Ie.slice(2):Ie[2]+q.slice(3),he&&S.rel(F,q,he,!1),we&&S.ael(F,q,we,!1)}},Xt=/\s/,kt=F=>F?F.split(Xt):[],Vt=(F,q,he,we)=>{const Pe=11===q.$elm$.nodeType&&q.$elm$.host?q.$elm$.host:q.$elm$,X=F&&F.$attrs$||dt,le=q.$attrs$||dt;for(we in X)we in le||it(Pe,we,X[we],void 0,he,q.$flags$);for(we in le)it(Pe,we,X[we],le[we],he,q.$flags$)},rn=(F,q,he,we)=>{const Pe=q.$children$[he];let le,Ie,je,X=0;if(W||(U=!0,"slot"===Pe.$tag$&&(N&&we.classList.add(N+"-s"),Pe.$flags$|=Pe.$children$?2:1)),null!==Pe.$text$)le=Pe.$elm$=Z.createTextNode(Pe.$text$);else if(1&Pe.$flags$)le=Pe.$elm$=Z.createTextNode("");else{if(_||(_="svg"===Pe.$tag$),le=Pe.$elm$=Z.createElementNS(_?"http://www.w3.org/2000/svg":"http://www.w3.org/1999/xhtml",2&Pe.$flags$?"slot-fb":Pe.$tag$),_&&"foreignObject"===Pe.$tag$&&(_=!1),Vt(null,Pe,_),(F=>null!=F)(N)&&le["s-si"]!==N&&le.classList.add(le["s-si"]=N),Pe.$children$)for(X=0;X{S.$flags$|=1;const he=F.childNodes;for(let we=he.length-1;we>=0;we--){const Pe=he[we];Pe["s-hn"]!==R&&Pe["s-ol"]&&(Et(Pe).insertBefore(Pe,nt(Pe)),Pe["s-ol"].remove(),Pe["s-ol"]=void 0,U=!0),q&&Vn(Pe,q)}S.$flags$&=-2},en=(F,q,he,we,Pe,X)=>{let Ie,le=F["s-cr"]&&F["s-cr"].parentNode||F;for(le.shadowRoot&&le.tagName===R&&(le=le.shadowRoot);Pe<=X;++Pe)we[Pe]&&(Ie=rn(null,he,Pe,F),Ie&&(we[Pe].$elm$=Ie,le.insertBefore(Ie,nt(q))))},gt=(F,q,he,we,Pe)=>{for(;q<=he;++q)(we=F[q])&&(Pe=we.$elm$,Nt(we),M=!0,Pe["s-ol"]?Pe["s-ol"].remove():Vn(Pe,!0),Pe.remove())},ht=(F,q)=>F.$tag$===q.$tag$&&("slot"===F.$tag$?F.$name$===q.$name$:F.$key$===q.$key$),nt=F=>F&&F["s-ol"]||F,Et=F=>(F["s-ol"]?F["s-ol"]:F).parentNode,ut=(F,q)=>{const he=q.$elm$=F.$elm$,we=F.$children$,Pe=q.$children$,X=q.$tag$,le=q.$text$;let Ie;null===le?(_="svg"===X||"foreignObject"!==X&&_,"slot"===X||Vt(F,q,_),null!==we&&null!==Pe?((F,q,he,we)=>{let Bt,An,Pe=0,X=0,le=0,Ie=0,je=q.length-1,Re=q[0],ot=q[je],st=we.length-1,Mt=we[0],Wt=we[st];for(;Pe<=je&&X<=st;)if(null==Re)Re=q[++Pe];else if(null==ot)ot=q[--je];else if(null==Mt)Mt=we[++X];else if(null==Wt)Wt=we[--st];else if(ht(Re,Mt))ut(Re,Mt),Re=q[++Pe],Mt=we[++X];else if(ht(ot,Wt))ut(ot,Wt),ot=q[--je],Wt=we[--st];else if(ht(Re,Wt))("slot"===Re.$tag$||"slot"===Wt.$tag$)&&Vn(Re.$elm$.parentNode,!1),ut(Re,Wt),F.insertBefore(Re.$elm$,ot.$elm$.nextSibling),Re=q[++Pe],Wt=we[--st];else if(ht(ot,Mt))("slot"===Re.$tag$||"slot"===Wt.$tag$)&&Vn(ot.$elm$.parentNode,!1),ut(ot,Mt),F.insertBefore(ot.$elm$,Re.$elm$),ot=q[--je],Mt=we[++X];else{for(le=-1,Ie=Pe;Ie<=je;++Ie)if(q[Ie]&&null!==q[Ie].$key$&&q[Ie].$key$===Mt.$key$){le=Ie;break}le>=0?(An=q[le],An.$tag$!==Mt.$tag$?Bt=rn(q&&q[X],he,le,F):(ut(An,Mt),q[le]=void 0,Bt=An.$elm$),Mt=we[++X]):(Bt=rn(q&&q[X],he,X,F),Mt=we[++X]),Bt&&Et(Re.$elm$).insertBefore(Bt,nt(Re.$elm$))}Pe>je?en(F,null==we[st+1]?null:we[st+1].$elm$,he,we,X,st):X>st&>(q,Pe,je)})(he,we,q,Pe):null!==Pe?(null!==F.$text$&&(he.textContent=""),en(he,null,q,Pe,0,Pe.length-1)):null!==we&>(we,0,we.length-1),_&&"svg"===X&&(_=!1)):(Ie=he["s-cr"])?Ie.parentNode.textContent=le:F.$text$!==le&&(he.data=le)},Ct=F=>{const q=F.childNodes;let he,we,Pe,X,le,Ie;for(we=0,Pe=q.length;we{let q,he,we,Pe,X,le,Ie=0;const je=F.childNodes,Re=je.length;for(;Ie=0;le--)he=we[le],!he["s-cn"]&&!he["s-nr"]&&he["s-hn"]!==q["s-hn"]&&(gn(he,Pe)?(X=qe.find(ot=>ot.$nodeToRelocate$===he),M=!0,he["s-sn"]=he["s-sn"]||Pe,X?X.$slotRefNode$=q:qe.push({$slotRefNode$:q,$nodeToRelocate$:he}),he["s-sr"]&&qe.map(ot=>{gn(ot.$nodeToRelocate$,he["s-sn"])&&(X=qe.find(st=>st.$nodeToRelocate$===he),X&&!ot.$slotRefNode$&&(ot.$slotRefNode$=X.$slotRefNode$))})):qe.some(ot=>ot.$nodeToRelocate$===he)||qe.push({$nodeToRelocate$:he}));1===q.nodeType&&on(q)}},gn=(F,q)=>1===F.nodeType?null===F.getAttribute("slot")&&""===q||F.getAttribute("slot")===q:F["s-sn"]===q||""===q,Nt=F=>{F.$attrs$&&F.$attrs$.ref&&F.$attrs$.ref(null),F.$children$&&F.$children$.map(Nt)},zt=F=>dn(F).$hostElement$,Er=(F,q,he)=>{const we=zt(F);return{emit:Pe=>jn(we,q,{bubbles:!!(4&he),composed:!!(2&he),cancelable:!!(1&he),detail:Pe})}},jn=(F,q,he)=>{const we=S.ce(q,he);return F.dispatchEvent(we),we},Xn=(F,q)=>{q&&!F.$onRenderResolve$&&q["s-p"]&&q["s-p"].push(new Promise(he=>F.$onRenderResolve$=he))},En=(F,q)=>{if(F.$flags$|=16,!(4&F.$flags$))return Xn(F,F.$ancestorComponent$),Cn(()=>xe(F,q));F.$flags$|=512},xe=(F,q)=>{const we=F.$lazyInstance$;let Pe;return q&&(F.$flags$|=256,F.$queuedListeners$&&(F.$queuedListeners$.map(([X,le])=>vt(we,X,le)),F.$queuedListeners$=null),Pe=vt(we,"componentWillLoad")),Pe=Ht(Pe,()=>vt(we,"componentWillRender")),Ht(Pe,()=>se(F,we,q))},se=function(){var F=(0,o.Z)(function*(q,he,we){const Pe=q.$hostElement$,le=Pe["s-rc"];we&&(F=>{const q=F.$cmpMeta$,he=F.$hostElement$,we=q.$flags$,X=De(he.shadowRoot?he.shadowRoot:he.getRootNode(),q,F.$modeName$);10&we&&(he["s-sc"]=X,he.classList.add(X+"-h"),2&we&&he.classList.add(X+"-s"))})(q);ye(q,he),le&&(le.map(je=>je()),Pe["s-rc"]=void 0);{const je=Pe["s-p"],Re=()=>He(q);0===je.length?Re():(Promise.all(je).then(Re),q.$flags$|=4,je.length=0)}});return function(he,we,Pe){return F.apply(this,arguments)}}(),ye=(F,q,he)=>{try{q=q.render&&q.render(),F.$flags$&=-17,F.$flags$|=2,((F,q)=>{const he=F.$hostElement$,we=F.$cmpMeta$,Pe=F.$vnode$||wt(null,null),X=(F=>F&&F.$tag$===Rt)(q)?q:nn(null,null,q);if(R=he.tagName,we.$attrsToReflect$&&(X.$attrs$=X.$attrs$||{},we.$attrsToReflect$.map(([le,Ie])=>X.$attrs$[Ie]=he[le])),X.$tag$=null,X.$flags$|=4,F.$vnode$=X,X.$elm$=Pe.$elm$=he.shadowRoot||he,N=he["s-sc"],ge=he["s-cr"],W=0!=(1&we.$flags$),M=!1,ut(Pe,X),S.$flags$|=1,U){on(X.$elm$);let le,Ie,je,Re,ot,st,Mt=0;for(;Mt{const he=F.$hostElement$,Pe=F.$lazyInstance$,X=F.$ancestorComponent$;vt(Pe,"componentDidRender"),64&F.$flags$?vt(Pe,"componentDidUpdate"):(F.$flags$|=64,_t(he),vt(Pe,"componentDidLoad"),F.$onReadyResolve$(he),X||pt()),F.$onInstanceResolve$(he),F.$onRenderResolve$&&(F.$onRenderResolve$(),F.$onRenderResolve$=void 0),512&F.$flags$&&Un(()=>En(F,!1)),F.$flags$&=-517},Ye=F=>{{const q=dn(F),he=q.$hostElement$.isConnected;return he&&2==(18&q.$flags$)&&En(q,!1),he}},pt=F=>{_t(Z.documentElement),Un(()=>jn(G,"appload",{detail:{namespace:"ionic"}}))},vt=(F,q,he)=>{if(F&&F[q])try{return F[q](he)}catch(we){Tn(we)}},Ht=(F,q)=>F&&F.then?F.then(q):q(),_t=F=>F.classList.add("hydrated"),Ln=(F,q,he,we,Pe,X,le)=>{let Ie,je,Re,ot;if(1===X.nodeType){for(Ie=X.getAttribute(Q),Ie&&(je=Ie.split("."),(je[0]===le||"0"===je[0])&&(Re={$flags$:0,$hostId$:je[0],$nodeId$:je[1],$depth$:je[2],$index$:je[3],$tag$:X.tagName.toLowerCase(),$elm$:X,$attrs$:null,$children$:null,$key$:null,$name$:null,$text$:null},q.push(Re),X.removeAttribute(Q),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re,F=Re,we&&"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$))),ot=X.childNodes.length-1;ot>=0;ot--)Ln(F,q,he,we,Pe,X.childNodes[ot],le);if(X.shadowRoot)for(ot=X.shadowRoot.childNodes.length-1;ot>=0;ot--)Ln(F,q,he,we,Pe,X.shadowRoot.childNodes[ot],le)}else if(8===X.nodeType)je=X.nodeValue.split("."),(je[1]===le||"0"===je[1])&&(Ie=je[0],Re={$flags$:0,$hostId$:je[1],$nodeId$:je[2],$depth$:je[3],$index$:je[4],$elm$:X,$attrs$:null,$children$:null,$key$:null,$name$:null,$tag$:null,$text$:null},"t"===Ie?(Re.$elm$=X.nextSibling,Re.$elm$&&3===Re.$elm$.nodeType&&(Re.$text$=Re.$elm$.textContent,q.push(Re),X.remove(),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re,we&&"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$))):Re.$hostId$===le&&("s"===Ie?(Re.$tag$="slot",X["s-sn"]=je[5]?Re.$name$=je[5]:"",X["s-sr"]=!0,we&&(Re.$elm$=Z.createElement(Re.$tag$),Re.$name$&&Re.$elm$.setAttribute("name",Re.$name$),X.parentNode.insertBefore(Re.$elm$,X),X.remove(),"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$)),he.push(Re),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re):"r"===Ie&&(we?X.remove():(Pe["s-cr"]=X,X["s-cn"]=!0))));else if(F&&"style"===F.$tag$){const st=wt(null,X.textContent);st.$elm$=X,st.$index$="0",F.$children$=[st]}},mn=(F,q)=>{if(1===F.nodeType){let he=0;for(;he{if(q.$members$){F.watchers&&(q.$watchers$=F.watchers);const we=Object.entries(q.$members$),Pe=F.prototype;if(we.map(([X,[le]])=>{31&le||2&he&&32&le?Object.defineProperty(Pe,X,{get(){return((F,q)=>dn(this).$instanceValues$.get(q))(0,X)},set(Ie){((F,q,he,we)=>{const Pe=dn(F),X=Pe.$hostElement$,le=Pe.$instanceValues$.get(q),Ie=Pe.$flags$,je=Pe.$lazyInstance$;he=((F,q)=>null==F||Ke(F)?F:4&q?"false"!==F&&(""===F||!!F):2&q?parseFloat(F):1&q?String(F):F)(he,we.$members$[q][0]);const Re=Number.isNaN(le)&&Number.isNaN(he);if((!(8&Ie)||void 0===le)&&he!==le&&!Re&&(Pe.$instanceValues$.set(q,he),je)){if(we.$watchers$&&128&Ie){const st=we.$watchers$[q];st&&st.map(Mt=>{try{je[Mt](he,le,q)}catch(Wt){Tn(Wt,X)}})}2==(18&Ie)&&En(Pe,!1)}})(this,X,Ie,q)},configurable:!0,enumerable:!0}):1&he&&64&le&&Object.defineProperty(Pe,X,{value(...Ie){const je=dn(this);return je.$onInstancePromise$.then(()=>je.$lazyInstance$[X](...Ie))}})}),1&he){const X=new Map;Pe.attributeChangedCallback=function(le,Ie,je){S.jmp(()=>{const Re=X.get(le);if(this.hasOwnProperty(Re))je=this[Re],delete this[Re];else if(Pe.hasOwnProperty(Re)&&"number"==typeof this[Re]&&this[Re]==je)return;this[Re]=(null!==je||"boolean"!=typeof this[Re])&&je})},F.observedAttributes=we.filter(([le,Ie])=>15&Ie[0]).map(([le,Ie])=>{const je=Ie[1]||le;return X.set(je,le),512&Ie[0]&&q.$attrsToReflect$.push([le,je]),je})}}return F},ee=function(){var F=(0,o.Z)(function*(q,he,we,Pe,X){if(0==(32&he.$flags$)){{if(he.$flags$|=32,(X=vn(we)).then){const Re=()=>{};X=yield X,Re()}X.isProxied||(we.$watchers$=X.watchers,fe(X,we,2),X.isProxied=!0);const je=()=>{};he.$flags$|=8;try{new X(he)}catch(Re){Tn(Re)}he.$flags$&=-9,he.$flags$|=128,je(),Se(he.$lazyInstance$)}if(X.style){let je=X.style;"string"!=typeof je&&(je=je[he.$modeName$=(F=>Ir.map(q=>q(F)).find(q=>!!q))(q)]);const Re=de(we,he.$modeName$);if(!tr.has(Re)){const ot=()=>{};Ae(Re,je,!!(1&we.$flags$)),ot()}}}const le=he.$ancestorComponent$,Ie=()=>En(he,!0);le&&le["s-rc"]?le["s-rc"].push(Ie):Ie()});return function(he,we,Pe,X,le){return F.apply(this,arguments)}}(),Se=F=>{vt(F,"connectedCallback")},yt=F=>{const q=F["s-cr"]=Z.createComment("");q["s-cn"]=!0,F.insertBefore(q,F.firstChild)},cn=(F,q={})=>{const we=[],Pe=q.exclude||[],X=G.customElements,le=Z.head,Ie=le.querySelector("meta[charset]"),je=Z.createElement("style"),Re=[],ot=Z.querySelectorAll(`[${Ne}]`);let st,Mt=!0,Wt=0;for(Object.assign(S,q),S.$resourcesUrl$=new URL(q.resourcesUrl||"./",Z.baseURI).href,S.$flags$|=2;Wt{Bt[1].map(An=>{const Rn={$flags$:An[0],$tagName$:An[1],$members$:An[2],$listeners$:An[3]};Rn.$members$=An[2],Rn.$listeners$=An[3],Rn.$attrsToReflect$=[],Rn.$watchers$={};const Pn=Rn.$tagName$,ur=class extends HTMLElement{constructor(mr){super(mr),sr(mr=this,Rn),1&Rn.$flags$&&mr.attachShadow({mode:"open",delegatesFocus:!!(16&Rn.$flags$)})}connectedCallback(){st&&(clearTimeout(st),st=null),Mt?Re.push(this):S.jmp(()=>(F=>{if(0==(1&S.$flags$)){const q=dn(F),he=q.$cmpMeta$,we=()=>{};if(1&q.$flags$)K(F,q,he.$listeners$),Se(q.$lazyInstance$);else{let Pe;if(q.$flags$|=1,Pe=F.getAttribute(be),Pe){if(1&he.$flags$){const X=De(F.shadowRoot,he,F.getAttribute("s-mode"));F.classList.remove(X+"-h",X+"-s")}((F,q,he,we)=>{const X=F.shadowRoot,le=[],je=X?[]:null,Re=we.$vnode$=wt(q,null);S.$orgLocNodes$||mn(Z.body,S.$orgLocNodes$=new Map),F[be]=he,F.removeAttribute(be),Ln(Re,le,[],je,F,F,he),le.map(ot=>{const st=ot.$hostId$+"."+ot.$nodeId$,Mt=S.$orgLocNodes$.get(st),Wt=ot.$elm$;Mt&&""===Mt["s-en"]&&Mt.parentNode.insertBefore(Wt,Mt.nextSibling),X||(Wt["s-hn"]=q,Mt&&(Wt["s-ol"]=Mt,Wt["s-ol"]["s-nr"]=Wt)),S.$orgLocNodes$.delete(st)}),X&&je.map(ot=>{ot&&X.appendChild(ot)})})(F,he.$tagName$,Pe,q)}Pe||12&he.$flags$&&yt(F);{let X=F;for(;X=X.parentNode||X.host;)if(1===X.nodeType&&X.hasAttribute("s-id")&&X["s-p"]||X["s-p"]){Xn(q,q.$ancestorComponent$=X);break}}he.$members$&&Object.entries(he.$members$).map(([X,[le]])=>{if(31&le&&F.hasOwnProperty(X)){const Ie=F[X];delete F[X],F[X]=Ie}}),Un(()=>ee(F,q,he))}we()}})(this))}disconnectedCallback(){S.jmp(()=>(F=>{if(0==(1&S.$flags$)){const q=dn(this),he=q.$lazyInstance$;q.$rmListeners$&&(q.$rmListeners$.map(we=>we()),q.$rmListeners$=void 0),vt(he,"disconnectedCallback")}})())}componentOnReady(){return dn(this).$onReadyPromise$}};Rn.$lazyBundleId$=Bt[0],!Pe.includes(Pn)&&!X.get(Pn)&&(we.push(Pn),X.define(Pn,fe(ur,Rn,1)))})}),je.innerHTML=we+"{visibility:hidden}.hydrated{visibility:inherit}",je.setAttribute("data-styles",""),le.insertBefore(je,Ie?Ie.nextSibling:le.firstChild),Mt=!1,Re.length?Re.map(Bt=>Bt.connectedCallback()):S.jmp(()=>st=setTimeout(pt,30))},Dn=F=>{const q=new URL(F,S.$resourcesUrl$);return q.origin!==G.location.origin?q.href:q.pathname},sn=new WeakMap,dn=F=>sn.get(F),er=(F,q)=>sn.set(q.$lazyInstance$=F,q),sr=(F,q)=>{const he={$flags$:0,$hostElement$:F,$cmpMeta$:q,$instanceValues$:new Map};return he.$onInstancePromise$=new Promise(we=>he.$onInstanceResolve$=we),he.$onReadyPromise$=new Promise(we=>he.$onReadyResolve$=we),F["s-p"]=[],F["s-rc"]=[],K(F,he,q.$listeners$),sn.set(F,he)},$n=(F,q)=>q in F,Tn=(F,q)=>(0,console.error)(F,q),xn=new Map,vn=(F,q,he)=>{const we=F.$tagName$.replace(/-/g,"_"),Pe=F.$lazyBundleId$,X=xn.get(Pe);return X?X[we]:w(863)(`./${Pe}.entry.js`).then(le=>(xn.set(Pe,le),le[we]),Tn)},tr=new Map,Ir=[],cr=[],gr=[],$t=(F,q)=>he=>{F.push(he),Y||(Y=!0,q&&4&S.$flags$?Un(Qt):S.raf(Qt))},fn=F=>{for(let q=0;q{fn(cr),fn(gr),(Y=cr.length>0)&&S.raf(Qt)},Un=F=>j().then(F),On=$t(cr,!1),Cn=$t(gr,!0),rt={isDev:!1,isBrowser:!0,isServer:!1,isTesting:!1}},697:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>ge,a:()=>R,b:()=>W,c:()=>M,d:()=>U,e:()=>oe,g:()=>Q,l:()=>Be,s:()=>be,t:()=>G});var o=w(5861),x=w(1308),N=w(5730);const ge="ionViewWillEnter",R="ionViewDidEnter",W="ionViewWillLeave",M="ionViewDidLeave",U="ionViewWillUnload",G=T=>new Promise((k,O)=>{(0,x.c)(()=>{Z(T),S(T).then(te=>{te.animation&&te.animation.destroy(),B(T),k(te)},te=>{B(T),O(te)})})}),Z=T=>{const k=T.enteringEl,O=T.leavingEl;Ne(k,O,T.direction),T.showGoBack?k.classList.add("can-go-back"):k.classList.remove("can-go-back"),be(k,!1),k.style.setProperty("pointer-events","none"),O&&(be(O,!1),O.style.setProperty("pointer-events","none"))},S=function(){var T=(0,o.Z)(function*(k){const O=yield E(k);return O&&x.B.isBrowser?j(O,k):P(k)});return function(O){return T.apply(this,arguments)}}(),B=T=>{const k=T.enteringEl,O=T.leavingEl;k.classList.remove("ion-page-invisible"),k.style.removeProperty("pointer-events"),void 0!==O&&(O.classList.remove("ion-page-invisible"),O.style.removeProperty("pointer-events"))},E=function(){var T=(0,o.Z)(function*(k){return k.leavingEl&&k.animated&&0!==k.duration?k.animationBuilder?k.animationBuilder:"ios"===k.mode?(yield Promise.resolve().then(w.bind(w,3953))).iosTransitionAnimation:(yield Promise.resolve().then(w.bind(w,3880))).mdTransitionAnimation:void 0});return function(O){return T.apply(this,arguments)}}(),j=function(){var T=(0,o.Z)(function*(k,O){yield K(O,!0);const te=k(O.baseEl,O);Te(O.enteringEl,O.leavingEl);const ce=yield ke(te,O);return O.progressCallback&&O.progressCallback(void 0),ce&&ie(O.enteringEl,O.leavingEl),{hasCompleted:ce,animation:te}});return function(O,te){return T.apply(this,arguments)}}(),P=function(){var T=(0,o.Z)(function*(k){const O=k.enteringEl,te=k.leavingEl;return yield K(k,!1),Te(O,te),ie(O,te),{hasCompleted:!0}});return function(O){return T.apply(this,arguments)}}(),K=function(){var T=(0,o.Z)(function*(k,O){const ce=(void 0!==k.deepWait?k.deepWait:O)?[oe(k.enteringEl),oe(k.leavingEl)]:[re(k.enteringEl),re(k.leavingEl)];yield Promise.all(ce),yield pe(k.viewIsReady,k.enteringEl)});return function(O,te){return T.apply(this,arguments)}}(),pe=function(){var T=(0,o.Z)(function*(k,O){k&&(yield k(O))});return function(O,te){return T.apply(this,arguments)}}(),ke=(T,k)=>{const O=k.progressCallback,te=new Promise(ce=>{T.onFinish(Ae=>ce(1===Ae))});return O?(T.progressStart(!0),O(T)):T.play(),te},Te=(T,k)=>{Be(k,W),Be(T,ge)},ie=(T,k)=>{Be(T,R),Be(k,M)},Be=(T,k)=>{if(T){const O=new CustomEvent(k,{bubbles:!1,cancelable:!1});T.dispatchEvent(O)}},re=T=>T?new Promise(k=>(0,N.c)(T,k)):Promise.resolve(),oe=function(){var T=(0,o.Z)(function*(k){const O=k;if(O){if(null!=O.componentOnReady){if(null!=(yield O.componentOnReady()))return}else if(null!=O.__registerHost)return void(yield new Promise(ce=>(0,N.r)(ce)));yield Promise.all(Array.from(O.children).map(oe))}});return function(O){return T.apply(this,arguments)}}(),be=(T,k)=>{k?(T.setAttribute("aria-hidden","true"),T.classList.add("ion-page-hidden")):(T.hidden=!1,T.removeAttribute("aria-hidden"),T.classList.remove("ion-page-hidden"))},Ne=(T,k,O)=>{void 0!==T&&(T.style.zIndex="back"===O?"99":"101"),void 0!==k&&(k.style.zIndex="100")},Q=T=>T.classList.contains("ion-page")?T:T.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")||T},1911:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{GESTURE_CONTROLLER:()=>o.G,createGesture:()=>_});var o=w(4349);const x=(S,B,E,j)=>{const P=N(S)?{capture:!!j.capture,passive:!!j.passive}:!!j.capture;let K,pe;return S.__zone_symbol__addEventListener?(K="__zone_symbol__addEventListener",pe="__zone_symbol__removeEventListener"):(K="addEventListener",pe="removeEventListener"),S[K](B,E,P),()=>{S[pe](B,E,P)}},N=S=>{if(void 0===ge)try{const B=Object.defineProperty({},"passive",{get:()=>{ge=!0}});S.addEventListener("optsTest",()=>{},B)}catch{ge=!1}return!!ge};let ge;const M=S=>S instanceof Document?S:S.ownerDocument,_=S=>{let B=!1,E=!1,j=!0,P=!1;const K=Object.assign({disableScroll:!1,direction:"x",gesturePriority:0,passive:!0,maxAngle:40,threshold:10},S),pe=K.canStart,ke=K.onWillStart,Te=K.onStart,ie=K.onEnd,Be=K.notCaptured,re=K.onMove,oe=K.threshold,be=K.passive,Ne=K.blurOnStart,Q={type:"pan",startX:0,startY:0,startTime:0,currentX:0,currentY:0,velocityX:0,velocityY:0,deltaX:0,deltaY:0,currentTime:0,event:void 0,data:void 0},T=((S,B,E)=>{const j=E*(Math.PI/180),P="x"===S,K=Math.cos(j),pe=B*B;let ke=0,Te=0,ie=!1,Be=0;return{start(re,oe){ke=re,Te=oe,Be=0,ie=!0},detect(re,oe){if(!ie)return!1;const be=re-ke,Ne=oe-Te,Q=be*be+Ne*Ne;if(QK?1:k<-K?-1:0,ie=!1,!0},isGesture:()=>0!==Be,getDirection:()=>Be}})(K.direction,K.threshold,K.maxAngle),k=o.G.createGesture({name:S.gestureName,priority:S.gesturePriority,disableScroll:S.disableScroll}),ce=()=>{!B||(P=!1,re&&re(Q))},Ae=()=>!!k.capture()&&(B=!0,j=!1,Q.startX=Q.currentX,Q.startY=Q.currentY,Q.startTime=Q.currentTime,ke?ke(Q).then(ue):ue(),!0),ue=()=>{Ne&&(()=>{if(typeof document<"u"){const ze=document.activeElement;ze?.blur&&ze.blur()}})(),Te&&Te(Q),j=!0},de=()=>{B=!1,E=!1,P=!1,j=!0,k.release()},ne=ze=>{const dt=B,et=j;if(de(),et){if(Y(Q,ze),dt)return void(ie&&ie(Q));Be&&Be(Q)}},Ee=((S,B,E,j,P)=>{let K,pe,ke,Te,ie,Be,re,oe=0;const be=De=>{oe=Date.now()+2e3,B(De)&&(!pe&&E&&(pe=x(S,"touchmove",E,P)),ke||(ke=x(De.target,"touchend",Q,P)),Te||(Te=x(De.target,"touchcancel",Q,P)))},Ne=De=>{oe>Date.now()||!B(De)||(!Be&&E&&(Be=x(M(S),"mousemove",E,P)),re||(re=x(M(S),"mouseup",T,P)))},Q=De=>{k(),j&&j(De)},T=De=>{O(),j&&j(De)},k=()=>{pe&&pe(),ke&&ke(),Te&&Te(),pe=ke=Te=void 0},O=()=>{Be&&Be(),re&&re(),Be=re=void 0},te=()=>{k(),O()},ce=(De=!0)=>{De?(K||(K=x(S,"touchstart",be,P)),ie||(ie=x(S,"mousedown",Ne,P))):(K&&K(),ie&&ie(),K=ie=void 0,te())};return{enable:ce,stop:te,destroy:()=>{ce(!1),j=E=B=void 0}}})(K.el,ze=>{const dt=Z(ze);return!(E||!j||(G(ze,Q),Q.startX=Q.currentX,Q.startY=Q.currentY,Q.startTime=Q.currentTime=dt,Q.velocityX=Q.velocityY=Q.deltaX=Q.deltaY=0,Q.event=ze,pe&&!1===pe(Q))||(k.release(),!k.start()))&&(E=!0,0===oe?Ae():(T.start(Q.startX,Q.startY),!0))},ze=>{B?!P&&j&&(P=!0,Y(Q,ze),requestAnimationFrame(ce)):(Y(Q,ze),T.detect(Q.currentX,Q.currentY)&&(!T.isGesture()||!Ae())&&Ce())},ne,{capture:!1,passive:be}),Ce=()=>{de(),Ee.stop(),Be&&Be(Q)};return{enable(ze=!0){ze||(B&&ne(void 0),de()),Ee.enable(ze)},destroy(){k.destroy(),Ee.destroy()}}},Y=(S,B)=>{if(!B)return;const E=S.currentX,j=S.currentY,P=S.currentTime;G(B,S);const K=S.currentX,pe=S.currentY,Te=(S.currentTime=Z(B))-P;if(Te>0&&Te<100){const Be=(pe-j)/Te;S.velocityX=(K-E)/Te*.7+.3*S.velocityX,S.velocityY=.7*Be+.3*S.velocityY}S.deltaX=K-S.startX,S.deltaY=pe-S.startY,S.event=B},G=(S,B)=>{let E=0,j=0;if(S){const P=S.changedTouches;if(P&&P.length>0){const K=P[0];E=K.clientX,j=K.clientY}else void 0!==S.pageX&&(E=S.pageX,j=S.pageY)}B.currentX=E,B.currentY=j},Z=S=>S.timeStamp||Date.now()},9658:(Qe,Fe,w)=>{"use strict";w.d(Fe,{a:()=>G,b:()=>ce,c:()=>N,g:()=>Y,i:()=>Ae});var o=w(1308);class x{constructor(){this.m=new Map}reset(ue){this.m=new Map(Object.entries(ue))}get(ue,de){const ne=this.m.get(ue);return void 0!==ne?ne:de}getBoolean(ue,de=!1){const ne=this.m.get(ue);return void 0===ne?de:"string"==typeof ne?"true"===ne:!!ne}getNumber(ue,de){const ne=parseFloat(this.m.get(ue));return isNaN(ne)?void 0!==de?de:NaN:ne}set(ue,de){this.m.set(ue,de)}}const N=new x,U="ionic:",_="ionic-persist-config",Y=De=>Z(De),G=(De,ue)=>("string"==typeof De&&(ue=De,De=void 0),Y(De).includes(ue)),Z=(De=window)=>{if(typeof De>"u")return[];De.Ionic=De.Ionic||{};let ue=De.Ionic.platforms;return null==ue&&(ue=De.Ionic.platforms=S(De),ue.forEach(de=>De.document.documentElement.classList.add(`plt-${de}`))),ue},S=De=>{const ue=N.get("platform");return Object.keys(O).filter(de=>{const ne=ue?.[de];return"function"==typeof ne?ne(De):O[de](De)})},E=De=>!!(T(De,/iPad/i)||T(De,/Macintosh/i)&&ie(De)),K=De=>T(De,/android|sink/i),ie=De=>k(De,"(any-pointer:coarse)"),re=De=>oe(De)||be(De),oe=De=>!!(De.cordova||De.phonegap||De.PhoneGap),be=De=>!!De.Capacitor?.isNative,T=(De,ue)=>ue.test(De.navigator.userAgent),k=(De,ue)=>{var de;return null===(de=De.matchMedia)||void 0===de?void 0:de.call(De,ue).matches},O={ipad:E,iphone:De=>T(De,/iPhone/i),ios:De=>T(De,/iPhone|iPod/i)||E(De),android:K,phablet:De=>{const ue=De.innerWidth,de=De.innerHeight,ne=Math.min(ue,de),Ee=Math.max(ue,de);return ne>390&&ne<520&&Ee>620&&Ee<800},tablet:De=>{const ue=De.innerWidth,de=De.innerHeight,ne=Math.min(ue,de),Ee=Math.max(ue,de);return E(De)||(De=>K(De)&&!T(De,/mobile/i))(De)||ne>460&&ne<820&&Ee>780&&Ee<1400},cordova:oe,capacitor:be,electron:De=>T(De,/electron/i),pwa:De=>{var ue;return!(!(null===(ue=De.matchMedia)||void 0===ue?void 0:ue.call(De,"(display-mode: standalone)").matches)&&!De.navigator.standalone)},mobile:ie,mobileweb:De=>ie(De)&&!re(De),desktop:De=>!ie(De),hybrid:re};let te;const ce=De=>De&&(0,o.g)(De)||te,Ae=(De={})=>{if(typeof window>"u")return;const ue=window.document,de=window,ne=de.Ionic=de.Ionic||{},Ee={};De._ael&&(Ee.ael=De._ael),De._rel&&(Ee.rel=De._rel),De._ce&&(Ee.ce=De._ce),(0,o.s)(Ee);const Ce=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(De=>{try{const ue=De.sessionStorage.getItem(_);return null!==ue?JSON.parse(ue):{}}catch{return{}}})(de)),{persistConfig:!1}),ne.config),(De=>{const ue={};return De.location.search.slice(1).split("&").map(de=>de.split("=")).map(([de,ne])=>[decodeURIComponent(de),decodeURIComponent(ne)]).filter(([de])=>((De,ue)=>De.substr(0,ue.length)===ue)(de,U)).map(([de,ne])=>[de.slice(U.length),ne]).forEach(([de,ne])=>{ue[de]=ne}),ue})(de)),De);N.reset(Ce),N.getBoolean("persistConfig")&&((De,ue)=>{try{De.sessionStorage.setItem(_,JSON.stringify(ue))}catch{return}})(de,Ce),Z(de),ne.config=N,ne.mode=te=N.get("mode",ue.documentElement.getAttribute("mode")||(G(de,"ios")?"ios":"md")),N.set("mode",te),ue.documentElement.setAttribute("mode",te),ue.documentElement.classList.add(te),N.getBoolean("_testing")&&N.set("animated",!1);const ze=et=>{var Ue;return null===(Ue=et.tagName)||void 0===Ue?void 0:Ue.startsWith("ION-")},dt=et=>["ios","md"].includes(et);(0,o.a)(et=>{for(;et;){const Ue=et.mode||et.getAttribute("mode");if(Ue){if(dt(Ue))return Ue;ze(et)&&console.warn('Invalid ionic mode: "'+Ue+'", expected: "ios" or "md"')}et=et.parentElement}return te})}},3953:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{iosTransitionAnimation:()=>S,shadow:()=>M});var o=w(8834),x=w(697);w(3457),w(1308);const W=B=>document.querySelector(`${B}.ion-cloned-element`),M=B=>B.shadowRoot||B,U=B=>{const E="ION-TABS"===B.tagName?B:B.querySelector("ion-tabs"),j="ion-content ion-header:not(.header-collapse-condense-inactive) ion-title.title-large";if(null!=E){const P=E.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");return null!=P?P.querySelector(j):null}return B.querySelector(j)},_=(B,E)=>{const j="ION-TABS"===B.tagName?B:B.querySelector("ion-tabs");let P=[];if(null!=j){const K=j.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");null!=K&&(P=K.querySelectorAll("ion-buttons"))}else P=B.querySelectorAll("ion-buttons");for(const K of P){const pe=K.closest("ion-header"),ke=pe&&!pe.classList.contains("header-collapse-condense-inactive"),Te=K.querySelector("ion-back-button"),ie=K.classList.contains("buttons-collapse"),Be="start"===K.slot||""===K.slot;if(null!==Te&&Be&&(ie&&ke&&E||!ie))return Te}return null},G=(B,E,j,P,K,pe)=>{const ke=E?`calc(100% - ${pe.right+4}px)`:pe.left-4+"px",Te=E?"7px":"-7px",ie=E?"-4px":"4px",Be=E?"-4px":"4px",re=E?"right":"left",oe=E?"left":"right",Q=j?[{offset:0,opacity:1,transform:`translate3d(${ie}, ${pe.top-46}px, 0) scale(1)`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${Te}, ${K.top-40}px, 0) scale(2.1)`}]:[{offset:0,opacity:0,transform:`translate3d(${Te}, ${K.top-40}px, 0) scale(2.1)`},{offset:1,opacity:1,transform:`translate3d(${ie}, ${pe.top-46}px, 0) scale(1)`}],O=j?[{offset:0,opacity:1,transform:`translate3d(${Be}, ${pe.top-46}px, 0) scale(1)`},{offset:.2,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`},{offset:1,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`}]:[{offset:0,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`},{offset:1,opacity:1,transform:`translate3d(${Be}, ${pe.top-46}px, 0) scale(1)`}],te=(0,o.c)(),ce=(0,o.c)(),Ae=W("ion-back-button"),De=M(Ae).querySelector(".button-text"),ue=M(Ae).querySelector("ion-icon");Ae.text=P.text,Ae.mode=P.mode,Ae.icon=P.icon,Ae.color=P.color,Ae.disabled=P.disabled,Ae.style.setProperty("display","block"),Ae.style.setProperty("position","fixed"),ce.addElement(ue),te.addElement(De),te.beforeStyles({"transform-origin":`${re} center`}).beforeAddWrite(()=>{P.style.setProperty("display","none"),Ae.style.setProperty(re,ke)}).afterAddWrite(()=>{P.style.setProperty("display",""),Ae.style.setProperty("display","none"),Ae.style.removeProperty(re)}).keyframes(Q),ce.beforeStyles({"transform-origin":`${oe} center`}).keyframes(O),B.addAnimation([te,ce])},Z=(B,E,j,P,K,pe)=>{const ke=E?`calc(100% - ${K.right}px)`:`${K.left}px`,Te=E?"-18px":"18px",ie=E?"right":"left",oe=j?[{offset:0,opacity:0,transform:`translate3d(${Te}, ${pe.top-4}px, 0) scale(0.49)`},{offset:.1,opacity:0},{offset:1,opacity:1,transform:`translate3d(0, ${K.top-2}px, 0) scale(1)`}]:[{offset:0,opacity:.99,transform:`translate3d(0, ${K.top-2}px, 0) scale(1)`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${Te}, ${pe.top-4}px, 0) scale(0.5)`}],be=W("ion-title"),Ne=(0,o.c)();be.innerText=P.innerText,be.size=P.size,be.color=P.color,Ne.addElement(be),Ne.beforeStyles({"transform-origin":`${ie} center`,height:"46px",display:"",position:"relative",[ie]:ke}).beforeAddWrite(()=>{P.style.setProperty("display","none")}).afterAddWrite(()=>{P.style.setProperty("display",""),be.style.setProperty("display","none")}).keyframes(oe),B.addAnimation(Ne)},S=(B,E)=>{var j;try{const P="cubic-bezier(0.32,0.72,0,1)",K="opacity",pe="transform",ke="0%",ie="rtl"===B.ownerDocument.dir,Be=ie?"-99.5%":"99.5%",re=ie?"33%":"-33%",oe=E.enteringEl,be=E.leavingEl,Ne="back"===E.direction,Q=oe.querySelector(":scope > ion-content"),T=oe.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *"),k=oe.querySelectorAll(":scope > ion-header > ion-toolbar"),O=(0,o.c)(),te=(0,o.c)();if(O.addElement(oe).duration((null!==(j=E.duration)&&void 0!==j?j:0)||540).easing(E.easing||P).fill("both").beforeRemoveClass("ion-page-invisible"),be&&null!=B){const ue=(0,o.c)();ue.addElement(B),O.addAnimation(ue)}if(Q||0!==k.length||0!==T.length?(te.addElement(Q),te.addElement(T)):te.addElement(oe.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),O.addAnimation(te),Ne?te.beforeClearStyles([K]).fromTo("transform",`translateX(${re})`,`translateX(${ke})`).fromTo(K,.8,1):te.beforeClearStyles([K]).fromTo("transform",`translateX(${Be})`,`translateX(${ke})`),Q){const ue=M(Q).querySelector(".transition-effect");if(ue){const de=ue.querySelector(".transition-cover"),ne=ue.querySelector(".transition-shadow"),Ee=(0,o.c)(),Ce=(0,o.c)(),ze=(0,o.c)();Ee.addElement(ue).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),Ce.addElement(de).beforeClearStyles([K]).fromTo(K,0,.1),ze.addElement(ne).beforeClearStyles([K]).fromTo(K,.03,.7),Ee.addAnimation([Ce,ze]),te.addAnimation([Ee])}}const ce=oe.querySelector("ion-header.header-collapse-condense"),{forward:Ae,backward:De}=((B,E,j,P,K)=>{const pe=_(P,j),ke=U(K),Te=U(P),ie=_(K,j),Be=null!==pe&&null!==ke&&!j,re=null!==Te&&null!==ie&&j;if(Be){const oe=ke.getBoundingClientRect(),be=pe.getBoundingClientRect();Z(B,E,j,ke,oe,be),G(B,E,j,pe,oe,be)}else if(re){const oe=Te.getBoundingClientRect(),be=ie.getBoundingClientRect();Z(B,E,j,Te,oe,be),G(B,E,j,ie,oe,be)}return{forward:Be,backward:re}})(O,ie,Ne,oe,be);if(k.forEach(ue=>{const de=(0,o.c)();de.addElement(ue),O.addAnimation(de);const ne=(0,o.c)();ne.addElement(ue.querySelector("ion-title"));const Ee=(0,o.c)(),Ce=Array.from(ue.querySelectorAll("ion-buttons,[menuToggle]")),ze=ue.closest("ion-header"),dt=ze?.classList.contains("header-collapse-condense-inactive");let et;et=Ce.filter(Ne?wt=>{const Rt=wt.classList.contains("buttons-collapse");return Rt&&!dt||!Rt}:wt=>!wt.classList.contains("buttons-collapse")),Ee.addElement(et);const Ue=(0,o.c)();Ue.addElement(ue.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])"));const St=(0,o.c)();St.addElement(M(ue).querySelector(".toolbar-background"));const Ke=(0,o.c)(),nn=ue.querySelector("ion-back-button");if(nn&&Ke.addElement(nn),de.addAnimation([ne,Ee,Ue,St,Ke]),Ee.fromTo(K,.01,1),Ue.fromTo(K,.01,1),Ne)dt||ne.fromTo("transform",`translateX(${re})`,`translateX(${ke})`).fromTo(K,.01,1),Ue.fromTo("transform",`translateX(${re})`,`translateX(${ke})`),Ke.fromTo(K,.01,1);else if(ce||ne.fromTo("transform",`translateX(${Be})`,`translateX(${ke})`).fromTo(K,.01,1),Ue.fromTo("transform",`translateX(${Be})`,`translateX(${ke})`),St.beforeClearStyles([K,"transform"]),ze?.translucent?St.fromTo("transform",ie?"translateX(-100%)":"translateX(100%)","translateX(0px)"):St.fromTo(K,.01,"var(--opacity)"),Ae||Ke.fromTo(K,.01,1),nn&&!Ae){const Rt=(0,o.c)();Rt.addElement(M(nn).querySelector(".button-text")).fromTo("transform",ie?"translateX(-100px)":"translateX(100px)","translateX(0px)"),de.addAnimation(Rt)}}),be){const ue=(0,o.c)(),de=be.querySelector(":scope > ion-content"),ne=be.querySelectorAll(":scope > ion-header > ion-toolbar"),Ee=be.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *");if(de||0!==ne.length||0!==Ee.length?(ue.addElement(de),ue.addElement(Ee)):ue.addElement(be.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),O.addAnimation(ue),Ne){ue.beforeClearStyles([K]).fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)");const Ce=(0,x.g)(be);O.afterAddWrite(()=>{"normal"===O.getDirection()&&Ce.style.setProperty("display","none")})}else ue.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).fromTo(K,1,.8);if(de){const Ce=M(de).querySelector(".transition-effect");if(Ce){const ze=Ce.querySelector(".transition-cover"),dt=Ce.querySelector(".transition-shadow"),et=(0,o.c)(),Ue=(0,o.c)(),St=(0,o.c)();et.addElement(Ce).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),Ue.addElement(ze).beforeClearStyles([K]).fromTo(K,.1,0),St.addElement(dt).beforeClearStyles([K]).fromTo(K,.7,.03),et.addAnimation([Ue,St]),ue.addAnimation([et])}}ne.forEach(Ce=>{const ze=(0,o.c)();ze.addElement(Ce);const dt=(0,o.c)();dt.addElement(Ce.querySelector("ion-title"));const et=(0,o.c)(),Ue=Ce.querySelectorAll("ion-buttons,[menuToggle]"),St=Ce.closest("ion-header"),Ke=St?.classList.contains("header-collapse-condense-inactive"),nn=Array.from(Ue).filter(Ut=>{const it=Ut.classList.contains("buttons-collapse");return it&&!Ke||!it});et.addElement(nn);const wt=(0,o.c)(),Rt=Ce.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])");Rt.length>0&&wt.addElement(Rt);const Kt=(0,o.c)();Kt.addElement(M(Ce).querySelector(".toolbar-background"));const pn=(0,o.c)(),Pt=Ce.querySelector("ion-back-button");if(Pt&&pn.addElement(Pt),ze.addAnimation([dt,et,wt,pn,Kt]),O.addAnimation(ze),pn.fromTo(K,.99,0),et.fromTo(K,.99,0),wt.fromTo(K,.99,0),Ne){if(Ke||dt.fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)").fromTo(K,.99,0),wt.fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)"),Kt.beforeClearStyles([K,"transform"]),St?.translucent?Kt.fromTo("transform","translateX(0px)",ie?"translateX(-100%)":"translateX(100%)"):Kt.fromTo(K,"var(--opacity)",0),Pt&&!De){const it=(0,o.c)();it.addElement(M(Pt).querySelector(".button-text")).fromTo("transform",`translateX(${ke})`,`translateX(${(ie?-124:124)+"px"})`),ze.addAnimation(it)}}else Ke||dt.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).fromTo(K,.99,0).afterClearStyles([pe,K]),wt.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).afterClearStyles([pe,K]),pn.afterClearStyles([K]),dt.afterClearStyles([K]),et.afterClearStyles([K])})}return O}catch(P){throw P}}},3880:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{mdTransitionAnimation:()=>R});var o=w(8834),x=w(697);w(3457),w(1308);const R=(W,M)=>{var U,_,Y;const S="back"===M.direction,E=M.leavingEl,j=(0,x.g)(M.enteringEl),P=j.querySelector("ion-toolbar"),K=(0,o.c)();if(K.addElement(j).fill("both").beforeRemoveClass("ion-page-invisible"),S?K.duration((null!==(U=M.duration)&&void 0!==U?U:0)||200).easing("cubic-bezier(0.47,0,0.745,0.715)"):K.duration((null!==(_=M.duration)&&void 0!==_?_:0)||280).easing("cubic-bezier(0.36,0.66,0.04,1)").fromTo("transform","translateY(40px)","translateY(0px)").fromTo("opacity",.01,1),P){const pe=(0,o.c)();pe.addElement(P),K.addAnimation(pe)}if(E&&S){K.duration((null!==(Y=M.duration)&&void 0!==Y?Y:0)||200).easing("cubic-bezier(0.47,0,0.745,0.715)");const pe=(0,o.c)();pe.addElement((0,x.g)(E)).onFinish(ke=>{1===ke&&pe.elements.length>0&&pe.elements[0].style.setProperty("display","none")}).fromTo("transform","translateY(0px)","translateY(40px)").fromTo("opacity",1,0),K.addAnimation(pe)}return K}},4414:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>de,a:()=>U,b:()=>_,c:()=>S,d:()=>Ne,e:()=>E,f:()=>T,g:()=>te,h:()=>W,i:()=>Ae,j:()=>K,k:()=>oe,l:()=>Y,m:()=>G,s:()=>ue,t:()=>B});var o=w(5861),x=w(9658),N=w(7593),ge=w(5730);let R=0;const W=new WeakMap,M=ne=>({create:Ee=>j(ne,Ee),dismiss:(Ee,Ce,ze)=>Be(document,Ee,Ce,ne,ze),getTop:()=>(0,o.Z)(function*(){return oe(document,ne)})()}),U=M("ion-alert"),_=M("ion-action-sheet"),Y=M("ion-loading"),G=M("ion-modal"),S=M("ion-popover"),B=M("ion-toast"),E=ne=>{typeof document<"u"&&ie(document);const Ee=R++;ne.overlayIndex=Ee,ne.hasAttribute("id")||(ne.id=`ion-overlay-${Ee}`)},j=(ne,Ee)=>typeof window<"u"&&typeof window.customElements<"u"?window.customElements.whenDefined(ne).then(()=>{const Ce=document.createElement(ne);return Ce.classList.add("overlay-hidden"),Object.assign(Ce,Object.assign(Object.assign({},Ee),{hasController:!0})),k(document).appendChild(Ce),new Promise(ze=>(0,ge.c)(Ce,ze))}):Promise.resolve(),P='[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])',K=(ne,Ee)=>{let Ce=ne.querySelector(P);const ze=Ce?.shadowRoot;ze&&(Ce=ze.querySelector(P)||Ce),Ce?(0,ge.f)(Ce):Ee.focus()},ke=(ne,Ee)=>{const Ce=Array.from(ne.querySelectorAll(P));let ze=Ce.length>0?Ce[Ce.length-1]:null;const dt=ze?.shadowRoot;dt&&(ze=dt.querySelector(P)||ze),ze?ze.focus():Ee.focus()},ie=ne=>{0===R&&(R=1,ne.addEventListener("focus",Ee=>{((ne,Ee)=>{const Ce=oe(Ee,"ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover"),ze=ne.target;Ce&&ze&&!Ce.classList.contains("ion-disable-focus-trap")&&(Ce.shadowRoot?(()=>{if(Ce.contains(ze))Ce.lastFocus=ze;else{const Ue=Ce.lastFocus;K(Ce,Ce),Ue===Ee.activeElement&&ke(Ce,Ce),Ce.lastFocus=Ee.activeElement}})():(()=>{if(Ce===ze)Ce.lastFocus=void 0;else{const Ue=(0,ge.g)(Ce);if(!Ue.contains(ze))return;const St=Ue.querySelector(".ion-overlay-wrapper");if(!St)return;if(St.contains(ze))Ce.lastFocus=ze;else{const Ke=Ce.lastFocus;K(St,Ce),Ke===Ee.activeElement&&ke(St,Ce),Ce.lastFocus=Ee.activeElement}}})())})(Ee,ne)},!0),ne.addEventListener("ionBackButton",Ee=>{const Ce=oe(ne);Ce?.backdropDismiss&&Ee.detail.register(N.OVERLAY_BACK_BUTTON_PRIORITY,()=>Ce.dismiss(void 0,de))}),ne.addEventListener("keyup",Ee=>{if("Escape"===Ee.key){const Ce=oe(ne);Ce?.backdropDismiss&&Ce.dismiss(void 0,de)}}))},Be=(ne,Ee,Ce,ze,dt)=>{const et=oe(ne,ze,dt);return et?et.dismiss(Ee,Ce):Promise.reject("overlay does not exist")},oe=(ne,Ee,Ce)=>{const ze=((ne,Ee)=>(void 0===Ee&&(Ee="ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover,ion-toast"),Array.from(ne.querySelectorAll(Ee)).filter(Ce=>Ce.overlayIndex>0)))(ne,Ee).filter(dt=>!(ne=>ne.classList.contains("overlay-hidden"))(dt));return void 0===Ce?ze[ze.length-1]:ze.find(dt=>dt.id===Ce)},be=(ne=!1)=>{const Ce=k(document).querySelector("ion-router-outlet, ion-nav, #ion-view-container-root");!Ce||(ne?Ce.setAttribute("aria-hidden","true"):Ce.removeAttribute("aria-hidden"))},Ne=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt,et){var Ue,St;if(Ee.presented)return;be(!0),Ee.presented=!0,Ee.willPresent.emit(),null===(Ue=Ee.willPresentShorthand)||void 0===Ue||Ue.emit();const Ke=(0,x.b)(Ee),nn=Ee.enterAnimation?Ee.enterAnimation:x.c.get(Ce,"ios"===Ke?ze:dt);(yield O(Ee,nn,Ee.el,et))&&(Ee.didPresent.emit(),null===(St=Ee.didPresentShorthand)||void 0===St||St.emit()),"ION-TOAST"!==Ee.el.tagName&&Q(Ee.el),Ee.keyboardClose&&(null===document.activeElement||!Ee.el.contains(document.activeElement))&&Ee.el.focus()});return function(Ce,ze,dt,et,Ue){return ne.apply(this,arguments)}}(),Q=function(){var ne=(0,o.Z)(function*(Ee){let Ce=document.activeElement;if(!Ce)return;const ze=Ce?.shadowRoot;ze&&(Ce=ze.querySelector(P)||Ce),yield Ee.onDidDismiss(),Ce.focus()});return function(Ce){return ne.apply(this,arguments)}}(),T=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt,et,Ue,St){var Ke,nn;if(!Ee.presented)return!1;be(!1),Ee.presented=!1;try{Ee.el.style.setProperty("pointer-events","none"),Ee.willDismiss.emit({data:Ce,role:ze}),null===(Ke=Ee.willDismissShorthand)||void 0===Ke||Ke.emit({data:Ce,role:ze});const wt=(0,x.b)(Ee),Rt=Ee.leaveAnimation?Ee.leaveAnimation:x.c.get(dt,"ios"===wt?et:Ue);"gesture"!==ze&&(yield O(Ee,Rt,Ee.el,St)),Ee.didDismiss.emit({data:Ce,role:ze}),null===(nn=Ee.didDismissShorthand)||void 0===nn||nn.emit({data:Ce,role:ze}),W.delete(Ee),Ee.el.classList.add("overlay-hidden"),Ee.el.style.removeProperty("pointer-events")}catch(wt){console.error(wt)}return Ee.el.remove(),!0});return function(Ce,ze,dt,et,Ue,St,Ke){return ne.apply(this,arguments)}}(),k=ne=>ne.querySelector("ion-app")||ne.body,O=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt){ze.classList.remove("overlay-hidden");const Ue=Ce(Ee.el,dt);(!Ee.animated||!x.c.getBoolean("animated",!0))&&Ue.duration(0),Ee.keyboardClose&&Ue.beforeAddWrite(()=>{const Ke=ze.ownerDocument.activeElement;Ke?.matches("input,ion-input, ion-textarea")&&Ke.blur()});const St=W.get(Ee)||[];return W.set(Ee,[...St,Ue]),yield Ue.play(),!0});return function(Ce,ze,dt,et){return ne.apply(this,arguments)}}(),te=(ne,Ee)=>{let Ce;const ze=new Promise(dt=>Ce=dt);return ce(ne,Ee,dt=>{Ce(dt.detail)}),ze},ce=(ne,Ee,Ce)=>{const ze=dt=>{(0,ge.b)(ne,Ee,ze),Ce(dt)};(0,ge.a)(ne,Ee,ze)},Ae=ne=>"cancel"===ne||ne===de,De=ne=>ne(),ue=(ne,Ee)=>{if("function"==typeof ne)return x.c.get("_zoneGate",De)(()=>{try{return ne(Ee)}catch(ze){throw ze}})},de="backdrop"},600:(Qe,Fe,w)=>{"use strict";w.d(Fe,{v:()=>Z});var o=w(9192),x=w(529),N=w(1135),ge=w(7579),R=w(9646),W=w(3900),M=w(3099),U=w(4004),_=w(7225),Y=w(8274),G=w(502);let Z=(()=>{class S extends o.iw{constructor(E,j){super(),this.http=E,this.loadingCtrl=j,this.loggedIn=!1,this.stationFreezed=!1,this.captionmode=!1,this.geraeteSubject=new N.X([]),this.wertungenSubject=new N.X([]),this.newLastResults=new N.X(void 0),this._clubregistrations=[],this.clubRegistrations=new N.X([]),this.askForUsername=new ge.x,this._competition=void 0,this._durchgang=void 0,this._geraet=void 0,this._step=void 0,this.lastJWTChecked=0,this.wertungenLoading=!1,this.isInitializing=!1,this._activeDurchgangList=[],this.durchgangStarted=new N.X([]),this.wertungUpdated=new ge.x,this.standardErrorHandler=P=>{if(console.log(P),this.resetLoading(),this.wertungenLoading=!1,this.isInitializing=!1,401===P.status)localStorage.removeItem("auth_token"),this.loggedIn=!1,this.showMessage.next({msg:"Die Berechtigung zum erfassen von Wertungen ist abgelaufen.",type:"Berechtigung"});else if(404===P.status)this.loggedIn=!1,this.stationFreezed=!1,this.captionmode=!1,this._competition=void 0,this._durchgang=void 0,this._geraet=void 0,this._step=void 0,localStorage.removeItem("auth_token"),localStorage.removeItem("current_competition"),localStorage.removeItem("current_station"),localStorage.removeItem("auth_clubid"),this.showMessage.next({msg:"Die aktuele Einstellung ist nicht mehr g\xfcltig und wird zur\xfcckgesetzt.",type:"Einstellung"});else{const K={msg:""+P.statusText+"
            "+P.message,type:P.name};(!this.lastMessageAck||this.lastMessageAck.msg!==K.msg)&&this.showMessage.next(K)}},this.clublist=[],this.showMessage.subscribe(P=>{this.resetLoading(),this.lastMessageAck=P}),this.resetLoading()}get competition(){return this._competition}get durchgang(){return this._durchgang}get geraet(){return this._geraet}get step(){return this._step}set currentUserName(E){localStorage.setItem("current_username",E)}get currentUserName(){return localStorage.getItem("current_username")}get activeDurchgangList(){return this._activeDurchgangList}get authenticatedClubId(){return localStorage.getItem("auth_clubid")}get competitionName(){if(!this.competitions)return"";const E=this.competitions.filter(j=>j.uuid===this.competition).map(j=>j.titel+", am "+(j.datum+"T").split("T")[0].split("-").reverse().join("-"));return 1===E.length?E[0]:""}getCurrentStation(){return localStorage.getItem("current_station")||this.competition+"/"+this.durchgang+"/"+this.geraet+"/"+this.step}resetLoading(){this.loadingInstance&&(this.loadingInstance.then(E=>E.dismiss()),this.loadingInstance=void 0)}startLoading(E,j){return this.resetLoading(),this.loadingInstance=this.loadingCtrl.create({message:E}),this.loadingInstance.then(P=>P.present()),j&&j.subscribe({next:()=>this.resetLoading(),error:P=>this.resetLoading()}),j}initWithQuery(E){this.isInitializing=!0;const j=new N.X(!1);return E&&E.startsWith("c=")?(this._step=1,E.split("&").forEach(P=>{const[K,pe]=P.split("=");switch(K){case"s":this.currentUserName||this.askForUsername.next(this),localStorage.setItem("auth_token",pe),localStorage.removeItem("auth_clubid"),this.checkJWT(pe);const ke=localStorage.getItem("current_station");ke&&this.initWithQuery(ke);break;case"c":this._competition=pe;break;case"ca":this._competition=void 0;break;case"d":this._durchgang=pe;break;case"st":this._step=parseInt(pe);break;case"g":this._geraet=parseInt(pe),localStorage.setItem("current_station",E),this.checkJWT(),this.stationFreezed=!0;break;case"rs":localStorage.setItem("auth_token",pe),this.unlock(),this.loggedIn=!0,console.log("club auth-token initialized");break;case"rid":localStorage.setItem("auth_clubid",pe),console.log("club id initialized",pe)}}),localStorage.removeItem("external_load"),this.startLoading("Bitte warten ..."),this._geraet?this.getCompetitions().pipe((0,W.w)(()=>this.loadDurchgaenge()),(0,W.w)(()=>this.loadGeraete()),(0,W.w)(()=>this.loadSteps()),(0,W.w)(()=>this.loadWertungen())).subscribe(P=>j.next(!0)):!this._competition||"undefined"===this._competition&&!localStorage.getItem("auth_clubid")?(console.log("initializing clubreg ..."),this.getClubRegistrations(this._competition).subscribe(P=>j.next(!0))):this._competition&&this.getCompetitions().pipe((0,W.w)(()=>this.loadDurchgaenge())).subscribe(P=>j.next(!0))):j.next(!0),j.subscribe(P=>{P&&(this.isInitializing=!1,this.resetLoading())}),j}checkJWT(E){if(E||(E=localStorage.getItem("auth_token")),!E)return void(this.loggedIn=!1);const P=(new Date).getTime()-36e5;(!E||E===localStorage.getItem("auth_token"))&&P{localStorage.setItem("auth_token",K.headers.get("x-access-token")),this.loggedIn=!0,this.competitions&&0!==this.competitions.length?this._competition&&this.getDurchgaenge(this._competition):this.getCompetitions().subscribe(pe=>{this._competition&&this.getDurchgaenge(this._competition)})},error:K=>{console.log(K),401===K.status?(localStorage.removeItem("auth_token"),this.loggedIn=!1,this.showMessage.next({msg:"Die Berechtigung ist abgelaufen. Bitte neu anmelden",type:"Berechtigung"})):this.standardErrorHandler(K)}}),this.lastJWTChecked=(new Date).getTime())}saveClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j.id,j).pipe((0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations.filter(pe=>pe.id!=j.id),K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}saveClubRegistrationPW(E,j){const P=this.startLoading("Neues Password wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j.id+"/pwchange",j).pipe((0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations.filter(pe=>pe.id!=j.id),K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}createClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird registriert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E,j,{observe:"response"}).pipe((0,U.U)(K=>(console.log(K),localStorage.setItem("auth_token",K.headers.get("x-access-token")),localStorage.setItem("auth_clubid",K.body.id+""),this.loggedIn=!0,K.body)),(0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations,K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}deleteClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird gel\xf6scht. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j,{responseType:"text"}).pipe((0,M.B)()));return P.subscribe({next:K=>{this.clublogout(),this._clubregistrations=this._clubregistrations.filter(pe=>pe.id!=j),this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}loadProgramsForCompetition(E){const j=this.startLoading("Programmliste zum Wettkampf wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/programmlist").pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}loadAthletListForClub(E,j){const P=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/athletlist").pipe((0,M.B)()));return P.subscribe({next:K=>{},error:this.standardErrorHandler}),P}loadAthletRegistrations(E,j){const P=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/athletes").pipe((0,M.B)()));return P.subscribe({error:this.standardErrorHandler}),P}createAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E+"/"+j+"/athletes",P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}saveAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j+"/athletes/"+P.id,P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}deleteAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j+"/athletes/"+P.id,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}findCompetitionsByVerein(E){const j=this.startLoading("Es werden fr\xfchere Anmeldungen gesucht. Bitte warten ...",this.http.get(_.AC+"api/competition/byVerein/"+E).pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}copyClubRegsFromCompetition(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+j+"/"+P+"/copyfrom",E,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}loadJudgeProgramDisziplinList(E){const j=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/programmdisziplinlist").pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}loadJudgeRegistrations(E,j){const P=this.startLoading("Wertungsrichter-Liste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/judges").pipe((0,M.B)()));return P.subscribe({error:this.standardErrorHandler}),P}createJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E+"/"+j+"/judges",P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}saveJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j+"/judges/"+P.id,P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}deleteJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j+"/judges/"+P.id,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}clublogout(){this.logout()}utf8_to_b64(E){return window.btoa(unescape(encodeURIComponent(E)))}b64_to_utf8(E){return decodeURIComponent(escape(window.atob(E)))}getClubList(){if(this.clublist&&this.clublist.length>0)return(0,R.of)(this.clublist);const E=this.startLoading("Clubliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/clubnames").pipe((0,M.B)()));return E.subscribe({next:j=>{this.clublist=j},error:this.standardErrorHandler}),E}resetRegistration(E){const j=new x.WM,P=this.http.options(_.AC+"api/registrations/"+this._competition+"/"+E+"/loginreset",{observe:"response",headers:j.set("Host",_.AC),responseType:"text"}).pipe((0,M.B)());return this.startLoading("Mail f\xfcr Login-Reset wird versendet. Bitte warten ...",P)}clublogin(E,j){this.clublogout();const P=new x.WM,K=this.startLoading("Login wird verarbeitet. Bitte warten ...",this.http.options(_.AC+"api/login",{observe:"response",headers:P.set("Authorization","Basic "+this.utf8_to_b64(`${E}:${j}`)),withCredentials:!0,responseType:"text"}).pipe((0,M.B)()));return K.subscribe({next:pe=>{console.log(pe),localStorage.setItem("auth_token",pe.headers.get("x-access-token")),localStorage.setItem("auth_clubid",E),this.loggedIn=!0},error:pe=>{console.log(pe),this.clublogout(),this.resetLoading(),401===pe.status?(localStorage.setItem("auth_token",pe.headers.get("x-access-token")),this.loggedIn=!1):this.standardErrorHandler(pe)}}),K}unlock(){localStorage.removeItem("current_station"),this.checkJWT(),this.stationFreezed=!1}logout(){localStorage.removeItem("auth_token"),localStorage.removeItem("auth_clubid"),this.loggedIn=!1,this.unlock()}getCompetitions(){const E=this.startLoading("Wettkampfliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/competition").pipe((0,M.B)()));return E.subscribe({next:j=>{this.competitions=j},error:this.standardErrorHandler}),E}getClubRegistrations(E){return this.checkJWT(),void 0!==this._clubregistrations&&this._competition===E||this.isInitializing||(this.durchgaenge=[],this._clubregistrations=[],this.geraete=void 0,this.steps=void 0,this.wertungen=void 0,this._competition=E,this._durchgang=void 0,this._geraet=void 0,this._step=void 0),this.loadClubRegistrations()}loadClubRegistrations(){return this._competition&&"undefined"!==this._competition?(this.startLoading("Clubanmeldungen werden geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+this._competition).pipe((0,M.B)())).subscribe({next:j=>{localStorage.setItem("current_competition",this._competition),this._clubregistrations=j,this.clubRegistrations.next(j)},error:this.standardErrorHandler}),this.clubRegistrations):(0,R.of)([])}loadRegistrationSyncActions(){if(!this._competition||"undefined"===this._competition)return(0,R.of)([]);const E=this.startLoading("Pendente An-/Abmeldungen werden geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+this._competition+"/syncactions").pipe((0,M.B)()));return E.subscribe({error:this.standardErrorHandler}),E}resetCompetition(E){console.log("reset data"),this.durchgaenge=[],this._clubregistrations=[],this.clubRegistrations.next([]),this.geraete=void 0,this.geraeteSubject.next([]),this.steps=void 0,this.wertungen=void 0,this.wertungenSubject.next([]),this._competition=E,this._durchgang=void 0,this._geraet=void 0,this._step=void 0}getDurchgaenge(E){return this.checkJWT(),void 0!==this.durchgaenge&&this._competition===E||this.isInitializing?(0,R.of)(this.durchgaenge||[]):(this.resetCompetition(E),this.loadDurchgaenge())}loadDurchgaenge(){if(!this._competition||"undefined"===this._competition)return(0,R.of)([]);const E=this.startLoading("Durchgangliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition).pipe((0,M.B)())),j=this._durchgang;return E.subscribe({next:P=>{if(localStorage.setItem("current_competition",this._competition),this.durchgaenge=P,j){const K=this.durchgaenge.filter(pe=>{const ke=(0,o._5)(pe);return j===pe||j===ke});1===K.length&&(this._durchgang=K[0])}},error:this.standardErrorHandler}),E}getGeraete(E,j){return void 0!==this.geraete&&this._competition===E&&this._durchgang===j||this.isInitializing?(0,R.of)(this.geraete||[]):(this.geraete=[],this.steps=void 0,this.wertungen=void 0,this._competition=E,this._durchgang=j,this._geraet=void 0,this._step=void 0,this.captionmode=!0,this.loadGeraete())}loadGeraete(){if(this.geraete=[],!this._competition||"undefined"===this._competition)return console.log("reusing geraetelist"),(0,R.of)([]);console.log("renewing geraetelist");let E="";E=this.captionmode&&this._durchgang&&"undefined"!==this._durchgang?_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang):_.AC+"api/durchgang/"+this._competition+"/geraete";const j=this.startLoading("Ger\xe4te zum Durchgang werden geladen. Bitte warten ...",this.http.get(E).pipe((0,M.B)()));return j.subscribe({next:P=>{this.geraete=P,this.geraeteSubject.next(this.geraete)},error:this.standardErrorHandler}),j}getSteps(E,j,P){if(void 0!==this.steps&&this._competition===E&&this._durchgang===j&&this._geraet===P||this.isInitializing)return(0,R.of)(this.steps||[]);this.steps=[],this.wertungen=void 0,this._competition=E,this._durchgang=j,this._geraet=P,this._step=void 0;const K=this.loadSteps();return K.subscribe({next:pe=>{this.steps=pe.map(ke=>parseInt(ke)),(void 0===this._step||this.steps.indexOf(this._step)<0)&&(this._step=this.steps[0],this.loadWertungen())},error:this.standardErrorHandler}),K}loadSteps(){if(this.steps=[],!this._competition||"undefined"===this._competition||!this._durchgang||"undefined"===this._durchgang||void 0===this._geraet)return(0,R.of)([]);const E=this.startLoading("Stationen zum Ger\xe4t werden geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/"+this._geraet).pipe((0,M.B)()));return E.subscribe({next:j=>{this.steps=j},error:this.standardErrorHandler}),E}getWertungen(E,j,P,K){void 0!==this.wertungen&&this._competition===E&&this._durchgang===j&&this._geraet===P&&this._step===K||this.isInitializing||(this.wertungen=[],this._competition=E,this._durchgang=j,this._geraet=P,this._step=K,this.loadWertungen())}activateCaptionMode(){this.competitions||this.getCompetitions(),this.durchgaenge||this.loadDurchgaenge(),(!this.captionmode||!this.geraete)&&(this.captionmode=!0,this.loadGeraete()),this.geraet&&!this.steps&&this.loadSteps(),this.geraet&&(this.disconnectWS(!0),this.initWebsocket())}loadWertungen(){if(this.wertungenLoading||void 0===this._geraet||void 0===this._step)return(0,R.of)([]);this.activateCaptionMode();const E=this._step;this.wertungenLoading=!0;const j=this.startLoading("Riegenteilnehmer werden geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/"+this._geraet+"/"+this._step).pipe((0,M.B)()));return j.subscribe({next:P=>{this.wertungenLoading=!1,this._step!==E?this.loadWertungen():(this.wertungen=P,this.wertungenSubject.next(this.wertungen))},error:this.standardErrorHandler}),j}loadAthletWertungen(E,j){return this.activateNonCaptionMode(E),this.startLoading("Wertungen werden geladen. Bitte warten ...",this.http.get(_.AC+`api/athlet/${this._competition}/${j}`).pipe((0,M.B)()))}activateNonCaptionMode(E){return this._competition!==E||this.captionmode||!this.geraete||0===this.geraete.length||E&&!this.isWebsocketConnected()?(this.captionmode=!1,this._competition=E,this.disconnectWS(!0),this.initWebsocket(),this.loadGeraete()):(0,R.of)(this.geraete)}loadStartlist(E){return this._competition?this.startLoading("Teilnehmerliste wird geladen. Bitte warten ...",E?this.http.get(_.AC+"api/report/"+this._competition+"/startlist?q="+E).pipe((0,M.B)()):this.http.get(_.AC+"api/report/"+this._competition+"/startlist").pipe((0,M.B)())):(0,R.of)()}isMessageAck(E){return"MessageAck"===E.type}updateWertung(E,j,P,K){const pe=K.wettkampfUUID,ke=new ge.x;return this.shouldConnectAgain()&&this.reconnect(),this.startLoading("Wertung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/durchgang/"+pe+"/"+(0,o.gT)(E)+"/"+P+"/"+j,K).pipe((0,M.B)())).subscribe({next:Te=>{if(!this.isMessageAck(Te)&&Te.wertung){let ie=!1;this.wertungen=this.wertungen.map(Be=>Be.wertung.id===Te.wertung.id?(ie=!0,Te):Be),this.wertungenSubject.next(this.wertungen),ke.next(Te),ie&&ke.complete()}else{const ie=Te;this.showMessage.next(ie),ke.error(ie.msg),ke.complete()}},error:this.standardErrorHandler}),ke}finishStation(E,j,P,K){const pe=new ge.x;return this.startLoading("Station wird abgeschlossen. Bitte warten ...",this.http.post(_.AC+"api/durchgang/"+E+"/finish",{type:"FinishDurchgangStation",wettkampfUUID:E,durchgang:j,geraet:P,step:K}).pipe((0,M.B)())).subscribe({next:ke=>{const Te=this.steps.filter(ie=>ie>K);Te.length>0?this._step=Te[0]:(localStorage.removeItem("current_station"),this.checkJWT(),this.stationFreezed=!1,this._step=this.steps[0]),this.loadWertungen().subscribe(ie=>{pe.next(Te)})},error:this.standardErrorHandler}),pe.asObservable()}nextStep(){const E=this.steps.filter(j=>j>this._step);return E.length>0?E[0]:this.steps[0]}prevStep(){const E=this.steps.filter(j=>j0?E[E.length-1]:this.steps[this.steps.length-1]}getPrevGeraet(){let E=this.geraete.indexOf(this.geraete.find(j=>j.id===this._geraet))-1;return E<0&&(E=this.geraete.length-1),this.geraete[E].id}getNextGeraet(){let E=this.geraete.indexOf(this.geraete.find(j=>j.id===this._geraet))+1;return E>=this.geraete.length&&(E=0),this.geraete[E].id}nextGeraet(){if(this.loggedIn){const E=this.steps.filter(j=>j>this._step);return(0,R.of)(E.length>0?E[0]:this.steps[0])}{const E=this._step;return this._geraet=this.getNextGeraet(),this.loadSteps().pipe((0,U.U)(j=>{const P=j.filter(K=>K>E);return P.length>0?P[0]:this.steps[0]}))}}prevGeraet(){if(this.loggedIn){const E=this.steps.filter(j=>j0?E[E.length-1]:this.steps[this.steps.length-1])}{const E=this._step;return this._geraet=this.getPrevGeraet(),this.loadSteps().pipe((0,U.U)(j=>{const P=this.steps.filter(K=>K0?P[P.length-1]:this.steps[this.steps.length-1]}))}}getScoreList(E){return this._competition?this.startLoading("Rangliste wird geladen. Bitte warten ...",this.http.get(`${_.AC}${E}`).pipe((0,M.B)())):(0,R.of)({})}getScoreLists(){return this._competition?this.startLoading("Ranglisten werden geladen. Bitte warten ...",this.http.get(`${_.AC}api/scores/${this._competition}`).pipe((0,M.B)())):(0,R.of)(Object.assign({}))}getWebsocketBackendUrl(){let E=location.host;const P="https:"===location.protocol?"wss:":"ws:";let K="api/";return K=this._durchgang&&this.captionmode?K+"durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/ws":K+"durchgang/"+this._competition+"/all/ws",E=E&&""!==E?(P+"//"+E+"/").replace("index.html",""):"wss://kutuapp.sharevic.net/",E+K}handleWebsocketMessage(E){switch(E.type){case"BulkEvent":return E.events.map(pe=>this.handleWebsocketMessage(pe)).reduce((pe,ke)=>pe&&ke);case"DurchgangStarted":return this._activeDurchgangList=[...this.activeDurchgangList,E],this.durchgangStarted.next(this.activeDurchgangList),!0;case"DurchgangFinished":const P=E;return this._activeDurchgangList=this.activeDurchgangList.filter(pe=>pe.durchgang!==P.durchgang||pe.wettkampfUUID!==P.wettkampfUUID),this.durchgangStarted.next(this.activeDurchgangList),!0;case"AthletWertungUpdatedSequenced":case"AthletWertungUpdated":const K=E;return this.wertungen=this.wertungen.map(pe=>pe.id===K.wertung.athletId&&pe.wertung.wettkampfdisziplinId===K.wertung.wettkampfdisziplinId?Object.assign({},pe,{wertung:K.wertung}):pe),this.wertungenSubject.next(this.wertungen),this.wertungUpdated.next(K),!0;case"AthletMovedInWettkampf":case"AthletRemovedFromWettkampf":return this.loadWertungen(),!0;case"NewLastResults":return this.newLastResults.next(E),!0;case"MessageAck":return console.log(E.msg),this.showMessage.next(E),!0;default:return!1}}}return S.\u0275fac=function(E){return new(E||S)(Y.LFG(x.eN),Y.LFG(G.HT))},S.\u0275prov=Y.Yz7({token:S,factory:S.\u0275fac,providedIn:"root"}),S})()},9192:(Qe,Fe,w)=>{"use strict";w.d(Fe,{iw:()=>B,_5:()=>Z,gT:()=>S});var o=w(1135),x=w(7579),N=w(1566),ge=w(9751),R=w(3532);var _=w(7225),Y=w(2529),G=w(8274);function Z(E){return E?E.replace(/[,&.*+?/^${}()|[\]\\]/g,"_"):""}function S(E){return E?encodeURIComponent(Z(E)):""}let B=(()=>{class E{constructor(){this.identifiedState=!1,this.connectedState=!1,this.explicitClosed=!0,this.reconnectInterval=3e4,this.reconnectAttempts=480,this.lstKeepAliveReceived=0,this.connected=new o.X(!1),this.identified=new o.X(!1),this.logMessages=new o.X(""),this.showMessage=new x.x,this.lastMessages=[]}get stopped(){return this.explicitClosed}startKeepAliveObservation(){setTimeout(()=>{const K=(new Date).getTime()-this.lstKeepAliveReceived;!this.explicitClosed&&!this.reconnectionObservable&&K>this.reconnectInterval?(this.logMessages.next("connection verified since "+K+"ms. It seems to be dead and need to be reconnected!"),this.disconnectWS(!1),this.reconnect()):this.logMessages.next("connection verified since "+K+"ms"),this.startKeepAliveObservation()},this.reconnectInterval)}sendMessage(P){this.websocket?this.connectedState&&this.websocket.send(P):this.connect(P)}disconnectWS(P=!0){this.explicitClosed=P,this.lstKeepAliveReceived=0,this.websocket?(this.websocket.close(),P&&this.close()):this.close()}close(){this.websocket&&(this.websocket.onerror=void 0,this.websocket.onclose=void 0,this.websocket.onopen=void 0,this.websocket.onmessage=void 0,this.websocket.close()),this.websocket=void 0,this.identifiedState=!1,this.lstKeepAliveReceived=0,this.identified.next(this.identifiedState),this.connectedState=!1,this.connected.next(this.connectedState)}isWebsocketConnected(){return this.websocket&&this.websocket.readyState===this.websocket.OPEN}isWebsocketConnecting(){return this.websocket&&this.websocket.readyState===this.websocket.CONNECTING}shouldConnectAgain(){return!(this.isWebsocketConnected()||this.isWebsocketConnecting())}reconnect(){if(!this.reconnectionObservable){this.logMessages.next("start try reconnection ..."),this.reconnectionObservable=function U(E=0,j=N.z){return E<0&&(E=0),function M(E=0,j,P=N.P){let K=-1;return null!=j&&((0,R.K)(j)?P=j:K=j),new ge.y(pe=>{let ke=function W(E){return E instanceof Date&&!isNaN(E)}(E)?+E-P.now():E;ke<0&&(ke=0);let Te=0;return P.schedule(function(){pe.closed||(pe.next(Te++),0<=K?this.schedule(void 0,K):pe.complete())},ke)})}(E,E,j)}(this.reconnectInterval).pipe((0,Y.o)((K,pe)=>pe{this.shouldConnectAgain()&&(this.logMessages.next("continue with reconnection ..."),this.connect(void 0))},null,()=>{this.reconnectionObservable=null,P.unsubscribe(),this.isWebsocketConnected()?this.logMessages.next("finish with reconnection (successfull)"):this.isWebsocketConnecting()?this.logMessages.next("continue with reconnection (CONNECTING)"):(!this.websocket||this.websocket.CLOSING||this.websocket.CLOSED)&&(this.disconnectWS(),this.logMessages.next("finish with reconnection (unsuccessfull)"))})}}initWebsocket(){this.logMessages.subscribe(P=>{this.lastMessages.push((0,_.sZ)(!0)+` - ${P}`),this.lastMessages=this.lastMessages.slice(Math.max(this.lastMessages.length-50,0))}),this.logMessages.next("init"),this.backendUrl=this.getWebsocketBackendUrl()+`?clientid=${(0,_.ix)()}`,this.logMessages.next("init with "+this.backendUrl),this.connect(void 0),this.startKeepAliveObservation()}connect(P){this.disconnectWS(),this.explicitClosed=!1,this.websocket=new WebSocket(this.backendUrl),this.websocket.onopen=()=>{this.connectedState=!0,this.connected.next(this.connectedState),P&&this.sendMessage(P)},this.websocket.onclose=pe=>{switch(this.close(),pe.code){case 1001:this.logMessages.next("Going Away"),this.explicitClosed||this.reconnect();break;case 1002:this.logMessages.next("Protocol error"),this.explicitClosed||this.reconnect();break;case 1003:this.logMessages.next("Unsupported Data"),this.explicitClosed||this.reconnect();break;case 1005:this.logMessages.next("No Status Rcvd"),this.explicitClosed||this.reconnect();break;case 1006:this.logMessages.next("Abnormal Closure"),this.explicitClosed||this.reconnect();break;case 1007:this.logMessages.next("Invalid frame payload data"),this.explicitClosed||this.reconnect();break;case 1008:this.logMessages.next("Policy Violation"),this.explicitClosed||this.reconnect();break;case 1009:this.logMessages.next("Message Too Big"),this.explicitClosed||this.reconnect();break;case 1010:this.logMessages.next("Mandatory Ext."),this.explicitClosed||this.reconnect();break;case 1011:this.logMessages.next("Internal Server Error"),this.explicitClosed||this.reconnect();break;case 1015:this.logMessages.next("TLS handshake")}},this.websocket.onmessage=pe=>{if(this.lstKeepAliveReceived=(new Date).getTime(),!pe.data.startsWith("Connection established.")&&"keepAlive"!==pe.data)try{const ke=JSON.parse(pe.data);"MessageAck"===ke.type?(console.log(ke.msg),this.showMessage.next(ke)):this.handleWebsocketMessage(ke)||(console.log(ke),this.logMessages.next("unknown message: "+pe.data))}catch(ke){this.logMessages.next(ke+": "+pe.data)}},this.websocket.onerror=pe=>{this.logMessages.next(pe.message+", "+pe.type)}}}return E.\u0275fac=function(P){return new(P||E)},E.\u0275prov=G.Yz7({token:E,factory:E.\u0275fac,providedIn:"root"}),E})()},7225:(Qe,Fe,w)=>{"use strict";w.d(Fe,{AC:()=>M,WZ:()=>B,ix:()=>S,sZ:()=>Y,tC:()=>_});const ge=location.host,M=(location.protocol+"//"+ge+"/").replace("index.html","");function _(E){let j=new Date;j=function U(E){return null!=E&&""!==E&&!isNaN(Number(E.toString()))}(E)?new Date(parseInt(E)):new Date(Date.parse(E));const P=`${j.getFullYear().toString()}-${("0"+(j.getMonth()+1)).slice(-2)}-${("0"+j.getDate()).slice(-2)}`;return console.log(P),P}function Y(E=!1){return function G(E,j=!1){const P=("0"+E.getDate()).slice(-2)+"-"+("0"+(E.getMonth()+1)).slice(-2)+"-"+E.getFullYear()+" "+("0"+E.getHours()).slice(-2)+":"+("0"+E.getMinutes()).slice(-2);return j?P+":"+("0"+E.getSeconds()).slice(-2):P}(new Date,E)}function S(){let E=localStorage.getItem("clientid");return E||(E=function Z(){function E(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return E()+E()+"-"+E()+"-"+E()+"-"+E()+"-"+E()+E()+E()}(),localStorage.setItem("clientid",E)),localStorage.getItem("current_username")+":"+E}const B={1:"boden.svg",2:"pferdpauschen.svg",3:"ringe.svg",4:"sprung.svg",5:"barren.svg",6:"reck.svg",26:"ringe.svg",27:"stufenbarren.svg",28:"schwebebalken.svg",29:"minitramp.svg",30:"minitramp.svg",31:"ringe.svg"}},1394:(Qe,Fe,w)=>{"use strict";var o=w(1481),x=w(8274),N=w(5472),ge=w(529),R=w(502);const M=(0,w(7423).fo)("SplashScreen",{web:()=>w.e(2680).then(w.bind(w,2680)).then(T=>new T.SplashScreenWeb)});var U=w(6895),_=w(3608);let Y=(()=>{class T{constructor(O){this.document=O;const te=localStorage.getItem("theme");te?this.setGlobalCSS(te):this.setTheme({})}setTheme(O){const te=function S(T){T={...G,...T};const{primary:k,secondary:O,tertiary:te,success:ce,warning:Ae,danger:De,dark:ue,medium:de,light:ne}=T,Ee=.2,Ce=.2;return`\n --ion-color-base: ${ne};\n --ion-color-contrast: ${ue};\n --ion-background-color: ${ne};\n --ion-card-background-color: ${E(ne,.4)};\n --ion-card-shadow-color1: ${E(ue,2).alpha(.2)};\n --ion-card-shadow-color2: ${E(ue,2).alpha(.14)};\n --ion-card-shadow-color3: ${E(ue,2).alpha(.12)};\n --ion-card-color: ${E(ue,2)};\n --ion-text-color: ${ue};\n --ion-toolbar-background-color: ${_(ne).lighten(Ce)};\n --ion-toolbar-text-color: ${B(ue,.2)};\n --ion-item-background-color: ${B(ne,.1)};\n --ion-item-background-activated: ${B(ne,.3)};\n --ion-item-text-color: ${B(ue,.1)};\n --ion-item-border-color: ${_(de).lighten(Ce)};\n --ion-overlay-background-color: ${E(ne,.1)};\n --ion-color-primary: ${k};\n --ion-color-primary-rgb: ${j(k)};\n --ion-color-primary-contrast: ${B(k)};\n --ion-color-primary-contrast-rgb: ${j(B(k))};\n --ion-color-primary-shade: ${_(k).darken(Ee)};\n --ion-color-primary-tint: ${_(k).lighten(Ce)};\n --ion-color-secondary: ${O};\n --ion-color-secondary-rgb: ${j(O)};\n --ion-color-secondary-contrast: ${B(O)};\n --ion-color-secondary-contrast-rgb: ${j(B(O))};\n --ion-color-secondary-shade: ${_(O).darken(Ee)};\n --ion-color-secondary-tint: ${_(O).lighten(Ce)};\n --ion-color-tertiary: ${te};\n --ion-color-tertiary-rgb: ${j(te)};\n --ion-color-tertiary-contrast: ${B(te)};\n --ion-color-tertiary-contrast-rgb: ${j(B(te))};\n --ion-color-tertiary-shade: ${_(te).darken(Ee)};\n --ion-color-tertiary-tint: ${_(te).lighten(Ce)};\n --ion-color-success: ${ce};\n --ion-color-success-rgb: ${j(ce)};\n --ion-color-success-contrast: ${B(ce)};\n --ion-color-success-contrast-rgb: ${j(B(ce))};\n --ion-color-success-shade: ${_(ce).darken(Ee)};\n --ion-color-success-tint: ${_(ce).lighten(Ce)};\n --ion-color-warning: ${Ae};\n --ion-color-warning-rgb: ${j(Ae)};\n --ion-color-warning-contrast: ${B(Ae)};\n --ion-color-warning-contrast-rgb: ${j(B(Ae))};\n --ion-color-warning-shade: ${_(Ae).darken(Ee)};\n --ion-color-warning-tint: ${_(Ae).lighten(Ce)};\n --ion-color-danger: ${De};\n --ion-color-danger-rgb: ${j(De)};\n --ion-color-danger-contrast: ${B(De)};\n --ion-color-danger-contrast-rgb: ${j(B(De))};\n --ion-color-danger-shade: ${_(De).darken(Ee)};\n --ion-color-danger-tint: ${_(De).lighten(Ce)};\n --ion-color-dark: ${ue};\n --ion-color-dark-rgb: ${j(ue)};\n --ion-color-dark-contrast: ${B(ue)};\n --ion-color-dark-contrast-rgb: ${j(B(ue))};\n --ion-color-dark-shade: ${_(ue).darken(Ee)};\n --ion-color-dark-tint: ${_(ue).lighten(Ce)};\n --ion-color-medium: ${de};\n --ion-color-medium-rgb: ${j(de)};\n --ion-color-medium-contrast: ${B(de)};\n --ion-color-medium-contrast-rgb: ${j(B(de))};\n --ion-color-medium-shade: ${_(de).darken(Ee)};\n --ion-color-medium-tint: ${_(de).lighten(Ce)};\n --ion-color-light: ${ne};\n --ion-color-light-rgb: ${j(ne)};\n --ion-color-light-contrast: ${B(ne)};\n --ion-color-light-contrast-rgb: ${j(B(ne))};\n --ion-color-light-shade: ${_(ne).darken(Ee)};\n --ion-color-light-tint: ${_(ne).lighten(Ce)};`+function Z(T,k){void 0===T&&(T="#ffffff"),void 0===k&&(k="#000000");const O=new _(T);let te="";for(let ce=5;ce<100;ce+=5){const De=ce/100;te+=` --ion-color-step-${ce+"0"}: ${O.mix(_(k),De).hex()};`,ce<95&&(te+="\n")}return te}(ue,ne)}(O);this.setGlobalCSS(te),localStorage.setItem("theme",te)}setVariable(O,te){this.document.documentElement.style.setProperty(O,te)}setGlobalCSS(O){this.document.documentElement.style.cssText=O}get storedTheme(){return localStorage.getItem("theme")}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(U.K0))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})();const G={primary:"#3880ff",secondary:"#0cd1e8",tertiary:"#7044ff",success:"#10dc60",warning:"#ff7b00",danger:"#f04141",dark:"#222428",medium:"#989aa2",light:"#fcfdff"};function B(T,k=.8){const O=_(T);return O.isDark()?O.lighten(k):O.darken(k)}function E(T,k=.8){const O=_(T);return O.isDark()?O.darken(k):O.lighten(k)}function j(T){const k=_(T);return`${k.red()}, ${k.green()}, ${k.blue()}`}var P=w(600);function K(T,k){if(1&T){const O=x.EpF();x.TgZ(0,"ion-item",4),x.NdJ("click",function(){const Ae=x.CHM(O).$implicit,De=x.oxw();return x.KtG(De.openPage(Ae.url))}),x._UZ(1,"ion-icon",9),x.TgZ(2,"ion-label"),x._uU(3),x.qZA()()}if(2&T){const O=k.$implicit;x.xp6(1),x.Q6J("name",O.icon),x.xp6(2),x.hij(" ",O.title," ")}}function pe(T,k){if(1&T){const O=x.EpF();x.TgZ(0,"ion-item",4),x.NdJ("click",function(){const Ae=x.CHM(O).$implicit,De=x.oxw();return x.KtG(De.changeTheme(Ae))}),x._UZ(1,"ion-icon",6),x.TgZ(2,"ion-label"),x._uU(3),x.qZA()()}if(2&T){const O=k.$implicit,te=x.oxw();x.Udp("background-color",te.themes[O].light)("color",te.themes[O].dark),x.xp6(2),x.Udp("background-color",te.themes[O].light)("color",te.themes[O].dark),x.xp6(1),x.hij(" ",O," ")}}let ke=(()=>{class T{constructor(O,te,ce,Ae,De,ue,de){this.platform=O,this.navController=te,this.route=ce,this.router=Ae,this.themeSwitcher=De,this.backendService=ue,this.alertCtrl=de,this.themes={Blau:{primary:"#ffa238",secondary:"#a19137",tertiary:"#421804",success:"#0eb651",warning:"#ff7b00",danger:"#f04141",dark:"#fffdf5",medium:"#454259",light:"#03163d"},Sport:{primary:"#ffa238",secondary:"#7dc0ff",tertiary:"#421804",success:"#0eb651",warning:"#ff7b00",danger:"#f04141",dark:"#03163d",medium:"#8092dd",light:"#fffdf5"},Dunkel:{primary:"#8DBB82",secondary:"#FCFF6C",tertiary:"#FE5F55",warning:"#ffce00",medium:"#BCC2C7",dark:"#DADFE1",light:"#363232"},Neon:{primary:"#23ff00",secondary:"#4CE0B3",tertiary:"#FF5E79",warning:"#ff7b00",light:"#F4EDF2",medium:"#B682A5",dark:"#34162A"}},this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"},{title:"Letzte Resultate",url:"last-results",icon:"radio"},{title:"Top Resultate",url:"top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"},{title:"Wettkampfanmeldungen",url:"/registration",icon:"people-outline"}],this.backendService.askForUsername.subscribe(ne=>{this.alertCtrl.create({header:"Settings",message:ne.currentUserName?"Dein Benutzername":"Du bist das erste Mal hier. Bitte gib einen Benutzernamen an",inputs:[{name:"username",placeholder:"Benutzername",value:ne.currentUserName}],buttons:[{text:"Abbrechen",role:"cancel",handler:()=>{console.log("Cancel clicked")}},{text:"Speichern",handler:Ce=>{if(!(Ce.username&&Ce.username.trim().length>1))return!1;ne.currentUserName=Ce.username.trim()}}]}).then(Ce=>Ce.present())}),this.backendService.showMessage.subscribe(ne=>{let Ee=ne.msg;(!Ee||0===Ee.trim().length)&&(Ee="Die gew\xfcnschte Aktion ist aktuell nicht m\xf6glich."),this.alertCtrl.create({header:"Achtung",message:Ee,buttons:["OK"]}).then(ze=>ze.present())}),this.initializeApp()}get themeKeys(){return Object.keys(this.themes)}clearPosParam(){this.router.navigate(["."],{relativeTo:this.route,queryParams:{}})}initializeApp(){this.platform.ready().then(()=>{if(M.show(),window.location.href.indexOf("?")>0)try{const O=window.location.href.split("?")[1],te=atob(O);O.startsWith("all")?(this.appPages=[{title:"Alle Resultate",url:"/all-results",icon:"radio"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/last-results")):O.startsWith("top")?(this.appPages=[{title:"Top Resultate",url:"/top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/top-results")):te.startsWith("last")?(this.appPages=[{title:"Aktuelle Resultate",url:"/last-results",icon:"radio"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/last-results"),this.backendService.initWithQuery(te.substring(5))):te.startsWith("top")?(this.appPages=[{title:"Top Resultate",url:"/top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/top-results"),this.backendService.initWithQuery(te.substring(4))):te.startsWith("registration")?(window.history.replaceState({},document.title,window.location.href.split("?")[0]),this.clearPosParam(),console.log("initializing with "+te),localStorage.setItem("external_load",te),this.backendService.initWithQuery(te.substring(13)).subscribe(ce=>{console.log("clubreg initialzed. navigate to clubreg-editor"),this.navController.navigateRoot("/registration/"+this.backendService.competition+"/"+localStorage.getItem("auth_clubid"))})):(window.history.replaceState({},document.title,window.location.href.split("?")[0]),this.clearPosParam(),console.log("initializing with "+te),localStorage.setItem("external_load",te),this.backendService.initWithQuery(te).subscribe(ce=>{te.startsWith("c=")&&te.indexOf("&st=")>-1&&te.indexOf("&g=")>-1&&(this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"}],this.navController.navigateRoot("/station"))}))}catch(O){console.log(O)}else if(localStorage.getItem("current_station")){const O=localStorage.getItem("current_station");this.backendService.initWithQuery(O).subscribe(te=>{O.startsWith("c=")&&O.indexOf("&st=")&&O.indexOf("&g=")&&(this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"}],this.navController.navigateRoot("/station"))})}else if(localStorage.getItem("current_competition")){const O=localStorage.getItem("current_competition");this.backendService.getDurchgaenge(O)}M.hide()})}askUserName(){this.backendService.askForUsername.next(this.backendService)}changeTheme(O){this.themeSwitcher.setTheme(this.themes[O])}openPage(O){this.navController.navigateRoot(O)}}return T.\u0275fac=function(O){return new(O||T)(x.Y36(R.t4),x.Y36(R.SH),x.Y36(N.gz),x.Y36(N.F0),x.Y36(Y),x.Y36(P.v),x.Y36(R.Br))},T.\u0275cmp=x.Xpm({type:T,selectors:[["app-root"]],decls:25,vars:2,consts:[["contentId","main","disabled","true"],["contentId","main"],["auto-hide","false"],["menuClose","",3,"click",4,"ngFor","ngForOf"],["menuClose","",3,"click"],["slot","start","name","settings"],["slot","start","name","color-palette"],["menuClose","",3,"background-color","color","click",4,"ngFor","ngForOf"],["id","main"],["slot","start",3,"name"]],template:function(O,te){1&O&&(x.TgZ(0,"ion-app")(1,"ion-split-pane",0)(2,"ion-menu",1)(3,"ion-header")(4,"ion-toolbar")(5,"ion-title"),x._uU(6,"Menu"),x.qZA()()(),x.TgZ(7,"ion-content")(8,"ion-list")(9,"ion-menu-toggle",2),x.YNc(10,K,4,2,"ion-item",3),x.TgZ(11,"ion-item",4),x.NdJ("click",function(){return te.askUserName()}),x._UZ(12,"ion-icon",5),x.TgZ(13,"ion-label"),x._uU(14," Settings "),x.qZA()(),x.TgZ(15,"ion-item-divider"),x._uU(16,"\xa0"),x._UZ(17,"br"),x._uU(18," Farbschema"),x.qZA(),x.TgZ(19,"ion-item",4),x.NdJ("click",function(){return te.changeTheme("")}),x._UZ(20,"ion-icon",6),x.TgZ(21,"ion-label"),x._uU(22," Standardfarben "),x.qZA()(),x.YNc(23,pe,4,9,"ion-item",7),x.qZA()()()(),x._UZ(24,"ion-router-outlet",8),x.qZA()()),2&O&&(x.xp6(10),x.Q6J("ngForOf",te.appPages),x.xp6(13),x.Q6J("ngForOf",te.themeKeys))},dependencies:[U.sg,R.dr,R.W2,R.Gu,R.gu,R.Ie,R.rH,R.Q$,R.q_,R.z0,R.zc,R.jI,R.wd,R.sr,R.jP],encapsulation:2}),T})(),Te=(()=>{class T{constructor(O,te){this.router=O,this.backendService=te}canActivate(O){return!(!this.backendService.geraet||!this.backendService.step)||(this.router.navigate(["home"]),!1)}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(N.F0),x.LFG(P.v))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})(),ie=(()=>{class T{constructor(O,te){this.router=O,this.backendService=te}canActivate(O){const te=O.paramMap.get("wkId"),ce=O.paramMap.get("regId");return!!("0"===ce||this.backendService.loggedIn&&this.backendService.authenticatedClubId===ce)||(this.router.navigate(["registration/"+te]),!1)}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(N.F0),x.LFG(P.v))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})();const Be=[{path:"",redirectTo:"home",pathMatch:"full"},{path:"home",loadChildren:()=>w.e(4902).then(w.bind(w,4902)).then(T=>T.HomePageModule)},{path:"station",canActivate:[Te],loadChildren:()=>Promise.all([w.e(8592),w.e(3050)]).then(w.bind(w,3050)).then(T=>T.StationPageModule)},{path:"wertung-editor/:itemId",canActivate:[Te],loadChildren:()=>Promise.all([w.e(8592),w.e(2539)]).then(w.bind(w,58)).then(T=>T.WertungEditorPageModule)},{path:"last-results",loadChildren:()=>Promise.all([w.e(8592),w.e(9946)]).then(w.bind(w,9946)).then(T=>T.LastResultsPageModule)},{path:"top-results",loadChildren:()=>Promise.all([w.e(8592),w.e(5332)]).then(w.bind(w,5332)).then(T=>T.LastTopResultsPageModule)},{path:"search-athlet",loadChildren:()=>Promise.all([w.e(8592),w.e(3375)]).then(w.bind(w,3375)).then(T=>T.SearchAthletPageModule)},{path:"search-athlet/:wkId",loadChildren:()=>Promise.all([w.e(8592),w.e(3375)]).then(w.bind(w,3375)).then(T=>T.SearchAthletPageModule)},{path:"athlet-view/:wkId/:athletId",loadChildren:()=>Promise.all([w.e(8592),w.e(5201)]).then(w.bind(w,5201)).then(T=>T.AthletViewPageModule)},{path:"registration",loadChildren:()=>Promise.all([w.e(8592),w.e(5323)]).then(w.bind(w,5323)).then(T=>T.RegistrationPageModule)},{path:"registration/:wkId",loadChildren:()=>Promise.all([w.e(8592),w.e(5323)]).then(w.bind(w,5323)).then(T=>T.RegistrationPageModule)},{path:"registration/:wkId/:regId",canActivate:[ie],loadChildren:()=>w.e(1994).then(w.bind(w,1994)).then(T=>T.ClubregEditorPageModule)},{path:"reg-athletlist/:wkId/:regId",canActivate:[ie],loadChildren:()=>Promise.all([w.e(8592),w.e(170)]).then(w.bind(w,170)).then(T=>T.RegAthletlistPageModule)},{path:"reg-athletlist/:wkId/:regId/:athletId",canActivate:[ie],loadChildren:()=>w.e(5231).then(w.bind(w,5231)).then(T=>T.RegAthletEditorPageModule)},{path:"reg-judgelist/:wkId/:regId",canActivate:[ie],loadChildren:()=>Promise.all([w.e(8592),w.e(6482)]).then(w.bind(w,6482)).then(T=>T.RegJudgelistPageModule)},{path:"reg-judgelist/:wkId/:regId/:judgeId",canActivate:[ie],loadChildren:()=>w.e(1053).then(w.bind(w,1053)).then(T=>T.RegJudgeEditorPageModule)}];let re=(()=>{class T{}return T.\u0275fac=function(O){return new(O||T)},T.\u0275mod=x.oAB({type:T}),T.\u0275inj=x.cJS({imports:[N.Bz.forRoot(Be,{preloadingStrategy:N.wm}),N.Bz]}),T})();var oe=w(7225);let be=(()=>{class T{constructor(){}intercept(O,te){const ce=O.headers.get("x-access-token")||localStorage.getItem("auth_token");return O=O.clone({setHeaders:{clientid:`${(0,oe.ix)()}`,"x-access-token":`${ce}`}}),te.handle(O)}}return T.\u0275fac=function(O){return new(O||T)},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})(),Ne=(()=>{class T{}return T.\u0275fac=function(O){return new(O||T)},T.\u0275mod=x.oAB({type:T,bootstrap:[ke]}),T.\u0275inj=x.cJS({providers:[Te,{provide:N.wN,useClass:R.r4},P.v,Y,be,{provide:ge.TP,useClass:be,multi:!0}],imports:[ge.JF,o.b2,R.Pc.forRoot(),re]}),T})();(0,x.G48)(),o.q6().bootstrapModule(Ne).catch(T=>console.log(T))},9914:Qe=>{"use strict";Qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},9655:(Qe,Fe,w)=>{var o=w(9914),x=w(6931),N=Object.hasOwnProperty,ge=Object.create(null);for(var R in o)N.call(o,R)&&(ge[o[R]]=R);var W=Qe.exports={to:{},get:{}};function M(_,Y,G){return Math.min(Math.max(Y,_),G)}function U(_){var Y=Math.round(_).toString(16).toUpperCase();return Y.length<2?"0"+Y:Y}W.get=function(_){var G,Z;switch(_.substring(0,3).toLowerCase()){case"hsl":G=W.get.hsl(_),Z="hsl";break;case"hwb":G=W.get.hwb(_),Z="hwb";break;default:G=W.get.rgb(_),Z="rgb"}return G?{model:Z,value:G}:null},W.get.rgb=function(_){if(!_)return null;var j,P,K,E=[0,0,0,1];if(j=_.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(K=j[2],j=j[1],P=0;P<3;P++){var pe=2*P;E[P]=parseInt(j.slice(pe,pe+2),16)}K&&(E[3]=parseInt(K,16)/255)}else if(j=_.match(/^#([a-f0-9]{3,4})$/i)){for(K=(j=j[1])[3],P=0;P<3;P++)E[P]=parseInt(j[P]+j[P],16);K&&(E[3]=parseInt(K+K,16)/255)}else if(j=_.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(P=0;P<3;P++)E[P]=parseInt(j[P+1],0);j[4]&&(E[3]=j[5]?.01*parseFloat(j[4]):parseFloat(j[4]))}else{if(!(j=_.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)))return(j=_.match(/^(\w+)$/))?"transparent"===j[1]?[0,0,0,0]:N.call(o,j[1])?((E=o[j[1]])[3]=1,E):null:null;for(P=0;P<3;P++)E[P]=Math.round(2.55*parseFloat(j[P+1]));j[4]&&(E[3]=j[5]?.01*parseFloat(j[4]):parseFloat(j[4]))}for(P=0;P<3;P++)E[P]=M(E[P],0,255);return E[3]=M(E[3],0,1),E},W.get.hsl=function(_){if(!_)return null;var G=_.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(G){var Z=parseFloat(G[4]);return[(parseFloat(G[1])%360+360)%360,M(parseFloat(G[2]),0,100),M(parseFloat(G[3]),0,100),M(isNaN(Z)?1:Z,0,1)]}return null},W.get.hwb=function(_){if(!_)return null;var G=_.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(G){var Z=parseFloat(G[4]);return[(parseFloat(G[1])%360+360)%360,M(parseFloat(G[2]),0,100),M(parseFloat(G[3]),0,100),M(isNaN(Z)?1:Z,0,1)]}return null},W.to.hex=function(){var _=x(arguments);return"#"+U(_[0])+U(_[1])+U(_[2])+(_[3]<1?U(Math.round(255*_[3])):"")},W.to.rgb=function(){var _=x(arguments);return _.length<4||1===_[3]?"rgb("+Math.round(_[0])+", "+Math.round(_[1])+", "+Math.round(_[2])+")":"rgba("+Math.round(_[0])+", "+Math.round(_[1])+", "+Math.round(_[2])+", "+_[3]+")"},W.to.rgb.percent=function(){var _=x(arguments),Y=Math.round(_[0]/255*100),G=Math.round(_[1]/255*100),Z=Math.round(_[2]/255*100);return _.length<4||1===_[3]?"rgb("+Y+"%, "+G+"%, "+Z+"%)":"rgba("+Y+"%, "+G+"%, "+Z+"%, "+_[3]+")"},W.to.hsl=function(){var _=x(arguments);return _.length<4||1===_[3]?"hsl("+_[0]+", "+_[1]+"%, "+_[2]+"%)":"hsla("+_[0]+", "+_[1]+"%, "+_[2]+"%, "+_[3]+")"},W.to.hwb=function(){var _=x(arguments),Y="";return _.length>=4&&1!==_[3]&&(Y=", "+_[3]),"hwb("+_[0]+", "+_[1]+"%, "+_[2]+"%"+Y+")"},W.to.keyword=function(_){return ge[_.slice(0,3)]}},3608:(Qe,Fe,w)=>{const o=w(9655),x=w(798),N=["keyword","gray","hex"],ge={};for(const S of Object.keys(x))ge[[...x[S].labels].sort().join("")]=S;const R={};function W(S,B){if(!(this instanceof W))return new W(S,B);if(B&&B in N&&(B=null),B&&!(B in x))throw new Error("Unknown model: "+B);let E,j;if(null==S)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(S instanceof W)this.model=S.model,this.color=[...S.color],this.valpha=S.valpha;else if("string"==typeof S){const P=o.get(S);if(null===P)throw new Error("Unable to parse color from string: "+S);this.model=P.model,j=x[this.model].channels,this.color=P.value.slice(0,j),this.valpha="number"==typeof P.value[j]?P.value[j]:1}else if(S.length>0){this.model=B||"rgb",j=x[this.model].channels;const P=Array.prototype.slice.call(S,0,j);this.color=Z(P,j),this.valpha="number"==typeof S[j]?S[j]:1}else if("number"==typeof S)this.model="rgb",this.color=[S>>16&255,S>>8&255,255&S],this.valpha=1;else{this.valpha=1;const P=Object.keys(S);"alpha"in S&&(P.splice(P.indexOf("alpha"),1),this.valpha="number"==typeof S.alpha?S.alpha:0);const K=P.sort().join("");if(!(K in ge))throw new Error("Unable to parse color from object: "+JSON.stringify(S));this.model=ge[K];const{labels:pe}=x[this.model],ke=[];for(E=0;E(S%360+360)%360),saturationl:_("hsl",1,Y(100)),lightness:_("hsl",2,Y(100)),saturationv:_("hsv",1,Y(100)),value:_("hsv",2,Y(100)),chroma:_("hcg",1,Y(100)),gray:_("hcg",2,Y(100)),white:_("hwb",1,Y(100)),wblack:_("hwb",2,Y(100)),cyan:_("cmyk",0,Y(100)),magenta:_("cmyk",1,Y(100)),yellow:_("cmyk",2,Y(100)),black:_("cmyk",3,Y(100)),x:_("xyz",0,Y(95.047)),y:_("xyz",1,Y(100)),z:_("xyz",2,Y(108.833)),l:_("lab",0,Y(100)),a:_("lab",1),b:_("lab",2),keyword(S){return void 0!==S?new W(S):x[this.model].keyword(this.color)},hex(S){return void 0!==S?new W(S):o.to.hex(this.rgb().round().color)},hexa(S){if(void 0!==S)return new W(S);const B=this.rgb().round().color;let E=Math.round(255*this.valpha).toString(16).toUpperCase();return 1===E.length&&(E="0"+E),o.to.hex(B)+E},rgbNumber(){const S=this.rgb().color;return(255&S[0])<<16|(255&S[1])<<8|255&S[2]},luminosity(){const S=this.rgb().color,B=[];for(const[E,j]of S.entries()){const P=j/255;B[E]=P<=.04045?P/12.92:((P+.055)/1.055)**2.4}return.2126*B[0]+.7152*B[1]+.0722*B[2]},contrast(S){const B=this.luminosity(),E=S.luminosity();return B>E?(B+.05)/(E+.05):(E+.05)/(B+.05)},level(S){const B=this.contrast(S);return B>=7?"AAA":B>=4.5?"AA":""},isDark(){const S=this.rgb().color;return(2126*S[0]+7152*S[1]+722*S[2])/1e4<128},isLight(){return!this.isDark()},negate(){const S=this.rgb();for(let B=0;B<3;B++)S.color[B]=255-S.color[B];return S},lighten(S){const B=this.hsl();return B.color[2]+=B.color[2]*S,B},darken(S){const B=this.hsl();return B.color[2]-=B.color[2]*S,B},saturate(S){const B=this.hsl();return B.color[1]+=B.color[1]*S,B},desaturate(S){const B=this.hsl();return B.color[1]-=B.color[1]*S,B},whiten(S){const B=this.hwb();return B.color[1]+=B.color[1]*S,B},blacken(S){const B=this.hwb();return B.color[2]+=B.color[2]*S,B},grayscale(){const S=this.rgb().color,B=.3*S[0]+.59*S[1]+.11*S[2];return W.rgb(B,B,B)},fade(S){return this.alpha(this.valpha-this.valpha*S)},opaquer(S){return this.alpha(this.valpha+this.valpha*S)},rotate(S){const B=this.hsl();let E=B.color[0];return E=(E+S)%360,E=E<0?360+E:E,B.color[0]=E,B},mix(S,B){if(!S||!S.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof S);const E=S.rgb(),j=this.rgb(),P=void 0===B?.5:B,K=2*P-1,pe=E.alpha()-j.alpha(),ke=((K*pe==-1?K:(K+pe)/(1+K*pe))+1)/2,Te=1-ke;return W.rgb(ke*E.red()+Te*j.red(),ke*E.green()+Te*j.green(),ke*E.blue()+Te*j.blue(),E.alpha()*P+j.alpha()*(1-P))}};for(const S of Object.keys(x)){if(N.includes(S))continue;const{channels:B}=x[S];W.prototype[S]=function(...E){return this.model===S?new W(this):new W(E.length>0?E:[...G(x[this.model][S].raw(this.color)),this.valpha],S)},W[S]=function(...E){let j=E[0];return"number"==typeof j&&(j=Z(E,B)),new W(j,S)}}function U(S){return function(B){return function M(S,B){return Number(S.toFixed(B))}(B,S)}}function _(S,B,E){S=Array.isArray(S)?S:[S];for(const j of S)(R[j]||(R[j]=[]))[B]=E;return S=S[0],function(j){let P;return void 0!==j?(E&&(j=E(j)),P=this[S](),P.color[B]=j,P):(P=this[S]().color[B],E&&(P=E(P)),P)}}function Y(S){return function(B){return Math.max(0,Math.min(S,B))}}function G(S){return Array.isArray(S)?S:[S]}function Z(S,B){for(let E=0;E{const o=w(1382),x={};for(const R of Object.keys(o))x[o[R]]=R;const N={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};Qe.exports=N;for(const R of Object.keys(N)){if(!("channels"in N[R]))throw new Error("missing channels property: "+R);if(!("labels"in N[R]))throw new Error("missing channel labels property: "+R);if(N[R].labels.length!==N[R].channels)throw new Error("channel and label counts mismatch: "+R);const{channels:W,labels:M}=N[R];delete N[R].channels,delete N[R].labels,Object.defineProperty(N[R],"channels",{value:W}),Object.defineProperty(N[R],"labels",{value:M})}function ge(R,W){return(R[0]-W[0])**2+(R[1]-W[1])**2+(R[2]-W[2])**2}N.rgb.hsl=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.min(W,M,U),Y=Math.max(W,M,U),G=Y-_;let Z,S;Y===_?Z=0:W===Y?Z=(M-U)/G:M===Y?Z=2+(U-W)/G:U===Y&&(Z=4+(W-M)/G),Z=Math.min(60*Z,360),Z<0&&(Z+=360);const B=(_+Y)/2;return S=Y===_?0:B<=.5?G/(Y+_):G/(2-Y-_),[Z,100*S,100*B]},N.rgb.hsv=function(R){let W,M,U,_,Y;const G=R[0]/255,Z=R[1]/255,S=R[2]/255,B=Math.max(G,Z,S),E=B-Math.min(G,Z,S),j=function(P){return(B-P)/6/E+.5};return 0===E?(_=0,Y=0):(Y=E/B,W=j(G),M=j(Z),U=j(S),G===B?_=U-M:Z===B?_=1/3+W-U:S===B&&(_=2/3+M-W),_<0?_+=1:_>1&&(_-=1)),[360*_,100*Y,100*B]},N.rgb.hwb=function(R){const W=R[0],M=R[1];let U=R[2];const _=N.rgb.hsl(R)[0],Y=1/255*Math.min(W,Math.min(M,U));return U=1-1/255*Math.max(W,Math.max(M,U)),[_,100*Y,100*U]},N.rgb.cmyk=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.min(1-W,1-M,1-U);return[100*((1-W-_)/(1-_)||0),100*((1-M-_)/(1-_)||0),100*((1-U-_)/(1-_)||0),100*_]},N.rgb.keyword=function(R){const W=x[R];if(W)return W;let U,M=1/0;for(const _ of Object.keys(o)){const G=ge(R,o[_]);G.04045?((W+.055)/1.055)**2.4:W/12.92,M=M>.04045?((M+.055)/1.055)**2.4:M/12.92,U=U>.04045?((U+.055)/1.055)**2.4:U/12.92,[100*(.4124*W+.3576*M+.1805*U),100*(.2126*W+.7152*M+.0722*U),100*(.0193*W+.1192*M+.9505*U)]},N.rgb.lab=function(R){const W=N.rgb.xyz(R);let M=W[0],U=W[1],_=W[2];return M/=95.047,U/=100,_/=108.883,M=M>.008856?M**(1/3):7.787*M+16/116,U=U>.008856?U**(1/3):7.787*U+16/116,_=_>.008856?_**(1/3):7.787*_+16/116,[116*U-16,500*(M-U),200*(U-_)]},N.hsl.rgb=function(R){const W=R[0]/360,M=R[1]/100,U=R[2]/100;let _,Y,G;if(0===M)return G=255*U,[G,G,G];_=U<.5?U*(1+M):U+M-U*M;const Z=2*U-_,S=[0,0,0];for(let B=0;B<3;B++)Y=W+1/3*-(B-1),Y<0&&Y++,Y>1&&Y--,G=6*Y<1?Z+6*(_-Z)*Y:2*Y<1?_:3*Y<2?Z+(_-Z)*(2/3-Y)*6:Z,S[B]=255*G;return S},N.hsl.hsv=function(R){const W=R[0];let M=R[1]/100,U=R[2]/100,_=M;const Y=Math.max(U,.01);return U*=2,M*=U<=1?U:2-U,_*=Y<=1?Y:2-Y,[W,100*(0===U?2*_/(Y+_):2*M/(U+M)),(U+M)/2*100]},N.hsv.rgb=function(R){const W=R[0]/60,M=R[1]/100;let U=R[2]/100;const _=Math.floor(W)%6,Y=W-Math.floor(W),G=255*U*(1-M),Z=255*U*(1-M*Y),S=255*U*(1-M*(1-Y));switch(U*=255,_){case 0:return[U,S,G];case 1:return[Z,U,G];case 2:return[G,U,S];case 3:return[G,Z,U];case 4:return[S,G,U];case 5:return[U,G,Z]}},N.hsv.hsl=function(R){const W=R[0],M=R[1]/100,U=R[2]/100,_=Math.max(U,.01);let Y,G;G=(2-M)*U;const Z=(2-M)*_;return Y=M*_,Y/=Z<=1?Z:2-Z,Y=Y||0,G/=2,[W,100*Y,100*G]},N.hwb.rgb=function(R){const W=R[0]/360;let M=R[1]/100,U=R[2]/100;const _=M+U;let Y;_>1&&(M/=_,U/=_);const G=Math.floor(6*W),Z=1-U;Y=6*W-G,0!=(1&G)&&(Y=1-Y);const S=M+Y*(Z-M);let B,E,j;switch(G){default:case 6:case 0:B=Z,E=S,j=M;break;case 1:B=S,E=Z,j=M;break;case 2:B=M,E=Z,j=S;break;case 3:B=M,E=S,j=Z;break;case 4:B=S,E=M,j=Z;break;case 5:B=Z,E=M,j=S}return[255*B,255*E,255*j]},N.cmyk.rgb=function(R){const M=R[1]/100,U=R[2]/100,_=R[3]/100;return[255*(1-Math.min(1,R[0]/100*(1-_)+_)),255*(1-Math.min(1,M*(1-_)+_)),255*(1-Math.min(1,U*(1-_)+_))]},N.xyz.rgb=function(R){const W=R[0]/100,M=R[1]/100,U=R[2]/100;let _,Y,G;return _=3.2406*W+-1.5372*M+-.4986*U,Y=-.9689*W+1.8758*M+.0415*U,G=.0557*W+-.204*M+1.057*U,_=_>.0031308?1.055*_**(1/2.4)-.055:12.92*_,Y=Y>.0031308?1.055*Y**(1/2.4)-.055:12.92*Y,G=G>.0031308?1.055*G**(1/2.4)-.055:12.92*G,_=Math.min(Math.max(0,_),1),Y=Math.min(Math.max(0,Y),1),G=Math.min(Math.max(0,G),1),[255*_,255*Y,255*G]},N.xyz.lab=function(R){let W=R[0],M=R[1],U=R[2];return W/=95.047,M/=100,U/=108.883,W=W>.008856?W**(1/3):7.787*W+16/116,M=M>.008856?M**(1/3):7.787*M+16/116,U=U>.008856?U**(1/3):7.787*U+16/116,[116*M-16,500*(W-M),200*(M-U)]},N.lab.xyz=function(R){let _,Y,G;Y=(R[0]+16)/116,_=R[1]/500+Y,G=Y-R[2]/200;const Z=Y**3,S=_**3,B=G**3;return Y=Z>.008856?Z:(Y-16/116)/7.787,_=S>.008856?S:(_-16/116)/7.787,G=B>.008856?B:(G-16/116)/7.787,_*=95.047,Y*=100,G*=108.883,[_,Y,G]},N.lab.lch=function(R){const W=R[0],M=R[1],U=R[2];let _;return _=360*Math.atan2(U,M)/2/Math.PI,_<0&&(_+=360),[W,Math.sqrt(M*M+U*U),_]},N.lch.lab=function(R){const M=R[1],_=R[2]/360*2*Math.PI;return[R[0],M*Math.cos(_),M*Math.sin(_)]},N.rgb.ansi16=function(R,W=null){const[M,U,_]=R;let Y=null===W?N.rgb.hsv(R)[2]:W;if(Y=Math.round(Y/50),0===Y)return 30;let G=30+(Math.round(_/255)<<2|Math.round(U/255)<<1|Math.round(M/255));return 2===Y&&(G+=60),G},N.hsv.ansi16=function(R){return N.rgb.ansi16(N.hsv.rgb(R),R[2])},N.rgb.ansi256=function(R){const W=R[0],M=R[1],U=R[2];return W===M&&M===U?W<8?16:W>248?231:Math.round((W-8)/247*24)+232:16+36*Math.round(W/255*5)+6*Math.round(M/255*5)+Math.round(U/255*5)},N.ansi16.rgb=function(R){let W=R%10;if(0===W||7===W)return R>50&&(W+=3.5),W=W/10.5*255,[W,W,W];const M=.5*(1+~~(R>50));return[(1&W)*M*255,(W>>1&1)*M*255,(W>>2&1)*M*255]},N.ansi256.rgb=function(R){if(R>=232){const Y=10*(R-232)+8;return[Y,Y,Y]}let W;return R-=16,[Math.floor(R/36)/5*255,Math.floor((W=R%36)/6)/5*255,W%6/5*255]},N.rgb.hex=function(R){const M=(((255&Math.round(R[0]))<<16)+((255&Math.round(R[1]))<<8)+(255&Math.round(R[2]))).toString(16).toUpperCase();return"000000".substring(M.length)+M},N.hex.rgb=function(R){const W=R.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!W)return[0,0,0];let M=W[0];3===W[0].length&&(M=M.split("").map(Z=>Z+Z).join(""));const U=parseInt(M,16);return[U>>16&255,U>>8&255,255&U]},N.rgb.hcg=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.max(Math.max(W,M),U),Y=Math.min(Math.min(W,M),U),G=_-Y;let Z,S;return Z=G<1?Y/(1-G):0,S=G<=0?0:_===W?(M-U)/G%6:_===M?2+(U-W)/G:4+(W-M)/G,S/=6,S%=1,[360*S,100*G,100*Z]},N.hsl.hcg=function(R){const W=R[1]/100,M=R[2]/100,U=M<.5?2*W*M:2*W*(1-M);let _=0;return U<1&&(_=(M-.5*U)/(1-U)),[R[0],100*U,100*_]},N.hsv.hcg=function(R){const M=R[2]/100,U=R[1]/100*M;let _=0;return U<1&&(_=(M-U)/(1-U)),[R[0],100*U,100*_]},N.hcg.rgb=function(R){const M=R[1]/100,U=R[2]/100;if(0===M)return[255*U,255*U,255*U];const _=[0,0,0],Y=R[0]/360%1*6,G=Y%1,Z=1-G;let S=0;switch(Math.floor(Y)){case 0:_[0]=1,_[1]=G,_[2]=0;break;case 1:_[0]=Z,_[1]=1,_[2]=0;break;case 2:_[0]=0,_[1]=1,_[2]=G;break;case 3:_[0]=0,_[1]=Z,_[2]=1;break;case 4:_[0]=G,_[1]=0,_[2]=1;break;default:_[0]=1,_[1]=0,_[2]=Z}return S=(1-M)*U,[255*(M*_[0]+S),255*(M*_[1]+S),255*(M*_[2]+S)]},N.hcg.hsv=function(R){const W=R[1]/100,U=W+R[2]/100*(1-W);let _=0;return U>0&&(_=W/U),[R[0],100*_,100*U]},N.hcg.hsl=function(R){const W=R[1]/100,U=R[2]/100*(1-W)+.5*W;let _=0;return U>0&&U<.5?_=W/(2*U):U>=.5&&U<1&&(_=W/(2*(1-U))),[R[0],100*_,100*U]},N.hcg.hwb=function(R){const W=R[1]/100,U=W+R[2]/100*(1-W);return[R[0],100*(U-W),100*(1-U)]},N.hwb.hcg=function(R){const U=1-R[2]/100,_=U-R[1]/100;let Y=0;return _<1&&(Y=(U-_)/(1-_)),[R[0],100*_,100*Y]},N.apple.rgb=function(R){return[R[0]/65535*255,R[1]/65535*255,R[2]/65535*255]},N.rgb.apple=function(R){return[R[0]/255*65535,R[1]/255*65535,R[2]/255*65535]},N.gray.rgb=function(R){return[R[0]/100*255,R[0]/100*255,R[0]/100*255]},N.gray.hsl=function(R){return[0,0,R[0]]},N.gray.hsv=N.gray.hsl,N.gray.hwb=function(R){return[0,100,R[0]]},N.gray.cmyk=function(R){return[0,0,0,R[0]]},N.gray.lab=function(R){return[R[0],0,0]},N.gray.hex=function(R){const W=255&Math.round(R[0]/100*255),U=((W<<16)+(W<<8)+W).toString(16).toUpperCase();return"000000".substring(U.length)+U},N.rgb.gray=function(R){return[(R[0]+R[1]+R[2])/3/255*100]}},798:(Qe,Fe,w)=>{const o=w(2539),x=w(2535),N={};Object.keys(o).forEach(M=>{N[M]={},Object.defineProperty(N[M],"channels",{value:o[M].channels}),Object.defineProperty(N[M],"labels",{value:o[M].labels});const U=x(M);Object.keys(U).forEach(Y=>{const G=U[Y];N[M][Y]=function W(M){const U=function(..._){const Y=_[0];if(null==Y)return Y;Y.length>1&&(_=Y);const G=M(_);if("object"==typeof G)for(let Z=G.length,S=0;S1&&(_=Y),M(_))};return"conversion"in M&&(U.conversion=M.conversion),U}(G)})}),Qe.exports=N},2535:(Qe,Fe,w)=>{const o=w(2539);function ge(W,M){return function(U){return M(W(U))}}function R(W,M){const U=[M[W].parent,W];let _=o[M[W].parent][W],Y=M[W].parent;for(;M[Y].parent;)U.unshift(M[Y].parent),_=ge(o[M[Y].parent][Y],_),Y=M[Y].parent;return _.conversion=U,_}Qe.exports=function(W){const M=function N(W){const M=function x(){const W={},M=Object.keys(o);for(let U=M.length,_=0;_{"use strict";Qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},1135:(Qe,Fe,w)=>{"use strict";w.d(Fe,{X:()=>x});var o=w(7579);class x extends o.x{constructor(ge){super(),this._value=ge}get value(){return this.getValue()}_subscribe(ge){const R=super._subscribe(ge);return!R.closed&&ge.next(this._value),R}getValue(){const{hasError:ge,thrownError:R,_value:W}=this;if(ge)throw R;return this._throwIfClosed(),W}next(ge){super.next(this._value=ge)}}},9751:(Qe,Fe,w)=>{"use strict";w.d(Fe,{y:()=>U});var o=w(2961),x=w(727),N=w(8822),ge=w(9635),R=w(2416),W=w(576),M=w(2806);let U=(()=>{class Z{constructor(B){B&&(this._subscribe=B)}lift(B){const E=new Z;return E.source=this,E.operator=B,E}subscribe(B,E,j){const P=function G(Z){return Z&&Z instanceof o.Lv||function Y(Z){return Z&&(0,W.m)(Z.next)&&(0,W.m)(Z.error)&&(0,W.m)(Z.complete)}(Z)&&(0,x.Nn)(Z)}(B)?B:new o.Hp(B,E,j);return(0,M.x)(()=>{const{operator:K,source:pe}=this;P.add(K?K.call(P,pe):pe?this._subscribe(P):this._trySubscribe(P))}),P}_trySubscribe(B){try{return this._subscribe(B)}catch(E){B.error(E)}}forEach(B,E){return new(E=_(E))((j,P)=>{const K=new o.Hp({next:pe=>{try{B(pe)}catch(ke){P(ke),K.unsubscribe()}},error:P,complete:j});this.subscribe(K)})}_subscribe(B){var E;return null===(E=this.source)||void 0===E?void 0:E.subscribe(B)}[N.L](){return this}pipe(...B){return(0,ge.U)(B)(this)}toPromise(B){return new(B=_(B))((E,j)=>{let P;this.subscribe(K=>P=K,K=>j(K),()=>E(P))})}}return Z.create=S=>new Z(S),Z})();function _(Z){var S;return null!==(S=Z??R.v.Promise)&&void 0!==S?S:Promise}},7579:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>M});var o=w(9751),x=w(727);const ge=(0,w(3888).d)(_=>function(){_(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var R=w(8737),W=w(2806);let M=(()=>{class _ extends o.y{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(G){const Z=new U(this,this);return Z.operator=G,Z}_throwIfClosed(){if(this.closed)throw new ge}next(G){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const Z of this.currentObservers)Z.next(G)}})}error(G){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=G;const{observers:Z}=this;for(;Z.length;)Z.shift().error(G)}})}complete(){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:G}=this;for(;G.length;)G.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var G;return(null===(G=this.observers)||void 0===G?void 0:G.length)>0}_trySubscribe(G){return this._throwIfClosed(),super._trySubscribe(G)}_subscribe(G){return this._throwIfClosed(),this._checkFinalizedStatuses(G),this._innerSubscribe(G)}_innerSubscribe(G){const{hasError:Z,isStopped:S,observers:B}=this;return Z||S?x.Lc:(this.currentObservers=null,B.push(G),new x.w0(()=>{this.currentObservers=null,(0,R.P)(B,G)}))}_checkFinalizedStatuses(G){const{hasError:Z,thrownError:S,isStopped:B}=this;Z?G.error(S):B&&G.complete()}asObservable(){const G=new o.y;return G.source=this,G}}return _.create=(Y,G)=>new U(Y,G),_})();class U extends M{constructor(Y,G){super(),this.destination=Y,this.source=G}next(Y){var G,Z;null===(Z=null===(G=this.destination)||void 0===G?void 0:G.next)||void 0===Z||Z.call(G,Y)}error(Y){var G,Z;null===(Z=null===(G=this.destination)||void 0===G?void 0:G.error)||void 0===Z||Z.call(G,Y)}complete(){var Y,G;null===(G=null===(Y=this.destination)||void 0===Y?void 0:Y.complete)||void 0===G||G.call(Y)}_subscribe(Y){var G,Z;return null!==(Z=null===(G=this.source)||void 0===G?void 0:G.subscribe(Y))&&void 0!==Z?Z:x.Lc}}},2961:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Hp:()=>j,Lv:()=>Z});var o=w(576),x=w(727),N=w(2416),ge=w(7849);function R(){}const W=_("C",void 0,void 0);function _(Te,ie,Be){return{kind:Te,value:ie,error:Be}}var Y=w(3410),G=w(2806);class Z extends x.w0{constructor(ie){super(),this.isStopped=!1,ie?(this.destination=ie,(0,x.Nn)(ie)&&ie.add(this)):this.destination=ke}static create(ie,Be,re){return new j(ie,Be,re)}next(ie){this.isStopped?pe(function U(Te){return _("N",Te,void 0)}(ie),this):this._next(ie)}error(ie){this.isStopped?pe(function M(Te){return _("E",void 0,Te)}(ie),this):(this.isStopped=!0,this._error(ie))}complete(){this.isStopped?pe(W,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(ie){this.destination.next(ie)}_error(ie){try{this.destination.error(ie)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const S=Function.prototype.bind;function B(Te,ie){return S.call(Te,ie)}class E{constructor(ie){this.partialObserver=ie}next(ie){const{partialObserver:Be}=this;if(Be.next)try{Be.next(ie)}catch(re){P(re)}}error(ie){const{partialObserver:Be}=this;if(Be.error)try{Be.error(ie)}catch(re){P(re)}else P(ie)}complete(){const{partialObserver:ie}=this;if(ie.complete)try{ie.complete()}catch(Be){P(Be)}}}class j extends Z{constructor(ie,Be,re){let oe;if(super(),(0,o.m)(ie)||!ie)oe={next:ie??void 0,error:Be??void 0,complete:re??void 0};else{let be;this&&N.v.useDeprecatedNextContext?(be=Object.create(ie),be.unsubscribe=()=>this.unsubscribe(),oe={next:ie.next&&B(ie.next,be),error:ie.error&&B(ie.error,be),complete:ie.complete&&B(ie.complete,be)}):oe=ie}this.destination=new E(oe)}}function P(Te){N.v.useDeprecatedSynchronousErrorHandling?(0,G.O)(Te):(0,ge.h)(Te)}function pe(Te,ie){const{onStoppedNotification:Be}=N.v;Be&&Y.z.setTimeout(()=>Be(Te,ie))}const ke={closed:!0,next:R,error:function K(Te){throw Te},complete:R}},727:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Lc:()=>W,w0:()=>R,Nn:()=>M});var o=w(576);const N=(0,w(3888).d)(_=>function(G){_(this),this.message=G?`${G.length} errors occurred during unsubscription:\n${G.map((Z,S)=>`${S+1}) ${Z.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=G});var ge=w(8737);class R{constructor(Y){this.initialTeardown=Y,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let Y;if(!this.closed){this.closed=!0;const{_parentage:G}=this;if(G)if(this._parentage=null,Array.isArray(G))for(const B of G)B.remove(this);else G.remove(this);const{initialTeardown:Z}=this;if((0,o.m)(Z))try{Z()}catch(B){Y=B instanceof N?B.errors:[B]}const{_finalizers:S}=this;if(S){this._finalizers=null;for(const B of S)try{U(B)}catch(E){Y=Y??[],E instanceof N?Y=[...Y,...E.errors]:Y.push(E)}}if(Y)throw new N(Y)}}add(Y){var G;if(Y&&Y!==this)if(this.closed)U(Y);else{if(Y instanceof R){if(Y.closed||Y._hasParent(this))return;Y._addParent(this)}(this._finalizers=null!==(G=this._finalizers)&&void 0!==G?G:[]).push(Y)}}_hasParent(Y){const{_parentage:G}=this;return G===Y||Array.isArray(G)&&G.includes(Y)}_addParent(Y){const{_parentage:G}=this;this._parentage=Array.isArray(G)?(G.push(Y),G):G?[G,Y]:Y}_removeParent(Y){const{_parentage:G}=this;G===Y?this._parentage=null:Array.isArray(G)&&(0,ge.P)(G,Y)}remove(Y){const{_finalizers:G}=this;G&&(0,ge.P)(G,Y),Y instanceof R&&Y._removeParent(this)}}R.EMPTY=(()=>{const _=new R;return _.closed=!0,_})();const W=R.EMPTY;function M(_){return _ instanceof R||_&&"closed"in _&&(0,o.m)(_.remove)&&(0,o.m)(_.add)&&(0,o.m)(_.unsubscribe)}function U(_){(0,o.m)(_)?_():_.unsubscribe()}},2416:(Qe,Fe,w)=>{"use strict";w.d(Fe,{v:()=>o});const o={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1}},515:(Qe,Fe,w)=>{"use strict";w.d(Fe,{E:()=>x});const x=new(w(9751).y)(R=>R.complete())},2076:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>re});var o=w(8421),x=w(9672),N=w(4482),ge=w(5403);function R(oe,be=0){return(0,N.e)((Ne,Q)=>{Ne.subscribe((0,ge.x)(Q,T=>(0,x.f)(Q,oe,()=>Q.next(T),be),()=>(0,x.f)(Q,oe,()=>Q.complete(),be),T=>(0,x.f)(Q,oe,()=>Q.error(T),be)))})}function W(oe,be=0){return(0,N.e)((Ne,Q)=>{Q.add(oe.schedule(()=>Ne.subscribe(Q),be))})}var _=w(9751),G=w(2202),Z=w(576);function B(oe,be){if(!oe)throw new Error("Iterable cannot be null");return new _.y(Ne=>{(0,x.f)(Ne,be,()=>{const Q=oe[Symbol.asyncIterator]();(0,x.f)(Ne,be,()=>{Q.next().then(T=>{T.done?Ne.complete():Ne.next(T.value)})},0,!0)})})}var E=w(3670),j=w(8239),P=w(1144),K=w(6495),pe=w(2206),ke=w(4532),Te=w(3260);function re(oe,be){return be?function Be(oe,be){if(null!=oe){if((0,E.c)(oe))return function M(oe,be){return(0,o.Xf)(oe).pipe(W(be),R(be))}(oe,be);if((0,P.z)(oe))return function Y(oe,be){return new _.y(Ne=>{let Q=0;return be.schedule(function(){Q===oe.length?Ne.complete():(Ne.next(oe[Q++]),Ne.closed||this.schedule())})})}(oe,be);if((0,j.t)(oe))return function U(oe,be){return(0,o.Xf)(oe).pipe(W(be),R(be))}(oe,be);if((0,pe.D)(oe))return B(oe,be);if((0,K.T)(oe))return function S(oe,be){return new _.y(Ne=>{let Q;return(0,x.f)(Ne,be,()=>{Q=oe[G.h](),(0,x.f)(Ne,be,()=>{let T,k;try{({value:T,done:k}=Q.next())}catch(O){return void Ne.error(O)}k?Ne.complete():Ne.next(T)},0,!0)}),()=>(0,Z.m)(Q?.return)&&Q.return()})}(oe,be);if((0,Te.L)(oe))return function ie(oe,be){return B((0,Te.Q)(oe),be)}(oe,be)}throw(0,ke.z)(oe)}(oe,be):(0,o.Xf)(oe)}},8421:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Xf:()=>S});var o=w(655),x=w(1144),N=w(8239),ge=w(9751),R=w(3670),W=w(2206),M=w(4532),U=w(6495),_=w(3260),Y=w(576),G=w(7849),Z=w(8822);function S(Te){if(Te instanceof ge.y)return Te;if(null!=Te){if((0,R.c)(Te))return function B(Te){return new ge.y(ie=>{const Be=Te[Z.L]();if((0,Y.m)(Be.subscribe))return Be.subscribe(ie);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(Te);if((0,x.z)(Te))return function E(Te){return new ge.y(ie=>{for(let Be=0;Be{Te.then(Be=>{ie.closed||(ie.next(Be),ie.complete())},Be=>ie.error(Be)).then(null,G.h)})}(Te);if((0,W.D)(Te))return K(Te);if((0,U.T)(Te))return function P(Te){return new ge.y(ie=>{for(const Be of Te)if(ie.next(Be),ie.closed)return;ie.complete()})}(Te);if((0,_.L)(Te))return function pe(Te){return K((0,_.Q)(Te))}(Te)}throw(0,M.z)(Te)}function K(Te){return new ge.y(ie=>{(function ke(Te,ie){var Be,re,oe,be;return(0,o.mG)(this,void 0,void 0,function*(){try{for(Be=(0,o.KL)(Te);!(re=yield Be.next()).done;)if(ie.next(re.value),ie.closed)return}catch(Ne){oe={error:Ne}}finally{try{re&&!re.done&&(be=Be.return)&&(yield be.call(Be))}finally{if(oe)throw oe.error}}ie.complete()})})(Te,ie).catch(Be=>ie.error(Be))})}},9646:(Qe,Fe,w)=>{"use strict";w.d(Fe,{of:()=>N});var o=w(3269),x=w(2076);function N(...ge){const R=(0,o.yG)(ge);return(0,x.D)(ge,R)}},5403:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>x});var o=w(2961);function x(ge,R,W,M,U){return new N(ge,R,W,M,U)}class N extends o.Lv{constructor(R,W,M,U,_,Y){super(R),this.onFinalize=_,this.shouldUnsubscribe=Y,this._next=W?function(G){try{W(G)}catch(Z){R.error(Z)}}:super._next,this._error=U?function(G){try{U(G)}catch(Z){R.error(Z)}finally{this.unsubscribe()}}:super._error,this._complete=M?function(){try{M()}catch(G){R.error(G)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var R;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:W}=this;super.unsubscribe(),!W&&(null===(R=this.onFinalize)||void 0===R||R.call(this))}}}},4351:(Qe,Fe,w)=>{"use strict";w.d(Fe,{b:()=>N});var o=w(5577),x=w(576);function N(ge,R){return(0,x.m)(R)?(0,o.z)(ge,R,1):(0,o.z)(ge,1)}},1884:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>ge});var o=w(4671),x=w(4482),N=w(5403);function ge(W,M=o.y){return W=W??R,(0,x.e)((U,_)=>{let Y,G=!0;U.subscribe((0,N.x)(_,Z=>{const S=M(Z);(G||!W(Y,S))&&(G=!1,Y=S,_.next(Z))}))})}function R(W,M){return W===M}},9300:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>N});var o=w(4482),x=w(5403);function N(ge,R){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>ge.call(R,_,U++)&&M.next(_)))})}},8746:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>x});var o=w(4482);function x(N){return(0,o.e)((ge,R)=>{try{ge.subscribe(R)}finally{R.add(N)}})}},4004:(Qe,Fe,w)=>{"use strict";w.d(Fe,{U:()=>N});var o=w(4482),x=w(5403);function N(ge,R){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>{M.next(ge.call(R,_,U++))}))})}},8189:(Qe,Fe,w)=>{"use strict";w.d(Fe,{J:()=>N});var o=w(5577),x=w(4671);function N(ge=1/0){return(0,o.z)(x.y,ge)}},5577:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>U});var o=w(4004),x=w(8421),N=w(4482),ge=w(9672),R=w(5403),M=w(576);function U(_,Y,G=1/0){return(0,M.m)(Y)?U((Z,S)=>(0,o.U)((B,E)=>Y(Z,B,S,E))((0,x.Xf)(_(Z,S))),G):("number"==typeof Y&&(G=Y),(0,N.e)((Z,S)=>function W(_,Y,G,Z,S,B,E,j){const P=[];let K=0,pe=0,ke=!1;const Te=()=>{ke&&!P.length&&!K&&Y.complete()},ie=re=>K{B&&Y.next(re),K++;let oe=!1;(0,x.Xf)(G(re,pe++)).subscribe((0,R.x)(Y,be=>{S?.(be),B?ie(be):Y.next(be)},()=>{oe=!0},void 0,()=>{if(oe)try{for(K--;P.length&&KBe(be)):Be(be)}Te()}catch(be){Y.error(be)}}))};return _.subscribe((0,R.x)(Y,ie,()=>{ke=!0,Te()})),()=>{j?.()}}(Z,S,_,G)))}},3099:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>R});var o=w(8421),x=w(7579),N=w(2961),ge=w(4482);function R(M={}){const{connector:U=(()=>new x.x),resetOnError:_=!0,resetOnComplete:Y=!0,resetOnRefCountZero:G=!0}=M;return Z=>{let S,B,E,j=0,P=!1,K=!1;const pe=()=>{B?.unsubscribe(),B=void 0},ke=()=>{pe(),S=E=void 0,P=K=!1},Te=()=>{const ie=S;ke(),ie?.unsubscribe()};return(0,ge.e)((ie,Be)=>{j++,!K&&!P&&pe();const re=E=E??U();Be.add(()=>{j--,0===j&&!K&&!P&&(B=W(Te,G))}),re.subscribe(Be),!S&&j>0&&(S=new N.Hp({next:oe=>re.next(oe),error:oe=>{K=!0,pe(),B=W(ke,_,oe),re.error(oe)},complete:()=>{P=!0,pe(),B=W(ke,Y),re.complete()}}),(0,o.Xf)(ie).subscribe(S))})(Z)}}function W(M,U,..._){if(!0===U)return void M();if(!1===U)return;const Y=new N.Hp({next:()=>{Y.unsubscribe(),M()}});return U(..._).subscribe(Y)}},3900:(Qe,Fe,w)=>{"use strict";w.d(Fe,{w:()=>ge});var o=w(8421),x=w(4482),N=w(5403);function ge(R,W){return(0,x.e)((M,U)=>{let _=null,Y=0,G=!1;const Z=()=>G&&!_&&U.complete();M.subscribe((0,N.x)(U,S=>{_?.unsubscribe();let B=0;const E=Y++;(0,o.Xf)(R(S,E)).subscribe(_=(0,N.x)(U,j=>U.next(W?W(S,j,E,B++):j),()=>{_=null,Z()}))},()=>{G=!0,Z()}))})}},5698:(Qe,Fe,w)=>{"use strict";w.d(Fe,{q:()=>ge});var o=w(515),x=w(4482),N=w(5403);function ge(R){return R<=0?()=>o.E:(0,x.e)((W,M)=>{let U=0;W.subscribe((0,N.x)(M,_=>{++U<=R&&(M.next(_),R<=U&&M.complete())}))})}},2529:(Qe,Fe,w)=>{"use strict";w.d(Fe,{o:()=>N});var o=w(4482),x=w(5403);function N(ge,R=!1){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>{const Y=ge(_,U++);(Y||R)&&M.next(_),!Y&&M.complete()}))})}},8505:(Qe,Fe,w)=>{"use strict";w.d(Fe,{b:()=>R});var o=w(576),x=w(4482),N=w(5403),ge=w(4671);function R(W,M,U){const _=(0,o.m)(W)||M||U?{next:W,error:M,complete:U}:W;return _?(0,x.e)((Y,G)=>{var Z;null===(Z=_.subscribe)||void 0===Z||Z.call(_);let S=!0;Y.subscribe((0,N.x)(G,B=>{var E;null===(E=_.next)||void 0===E||E.call(_,B),G.next(B)},()=>{var B;S=!1,null===(B=_.complete)||void 0===B||B.call(_),G.complete()},B=>{var E;S=!1,null===(E=_.error)||void 0===E||E.call(_,B),G.error(B)},()=>{var B,E;S&&(null===(B=_.unsubscribe)||void 0===B||B.call(_)),null===(E=_.finalize)||void 0===E||E.call(_)}))}):ge.y}},1566:(Qe,Fe,w)=>{"use strict";w.d(Fe,{P:()=>Y,z:()=>_});var o=w(727);class x extends o.w0{constructor(Z,S){super()}schedule(Z,S=0){return this}}const N={setInterval(G,Z,...S){const{delegate:B}=N;return B?.setInterval?B.setInterval(G,Z,...S):setInterval(G,Z,...S)},clearInterval(G){const{delegate:Z}=N;return(Z?.clearInterval||clearInterval)(G)},delegate:void 0};var ge=w(8737);const W={now:()=>(W.delegate||Date).now(),delegate:void 0};class M{constructor(Z,S=M.now){this.schedulerActionCtor=Z,this.now=S}schedule(Z,S=0,B){return new this.schedulerActionCtor(this,Z).schedule(B,S)}}M.now=W.now;const _=new class U extends M{constructor(Z,S=M.now){super(Z,S),this.actions=[],this._active=!1}flush(Z){const{actions:S}=this;if(this._active)return void S.push(Z);let B;this._active=!0;do{if(B=Z.execute(Z.state,Z.delay))break}while(Z=S.shift());if(this._active=!1,B){for(;Z=S.shift();)Z.unsubscribe();throw B}}}(class R extends x{constructor(Z,S){super(Z,S),this.scheduler=Z,this.work=S,this.pending=!1}schedule(Z,S=0){var B;if(this.closed)return this;this.state=Z;const E=this.id,j=this.scheduler;return null!=E&&(this.id=this.recycleAsyncId(j,E,S)),this.pending=!0,this.delay=S,this.id=null!==(B=this.id)&&void 0!==B?B:this.requestAsyncId(j,this.id,S),this}requestAsyncId(Z,S,B=0){return N.setInterval(Z.flush.bind(Z,this),B)}recycleAsyncId(Z,S,B=0){if(null!=B&&this.delay===B&&!1===this.pending)return S;null!=S&&N.clearInterval(S)}execute(Z,S){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const B=this._execute(Z,S);if(B)return B;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(Z,S){let E,B=!1;try{this.work(Z)}catch(j){B=!0,E=j||new Error("Scheduled action threw falsy error")}if(B)return this.unsubscribe(),E}unsubscribe(){if(!this.closed){const{id:Z,scheduler:S}=this,{actions:B}=S;this.work=this.state=this.scheduler=null,this.pending=!1,(0,ge.P)(B,this),null!=Z&&(this.id=this.recycleAsyncId(S,Z,null)),this.delay=null,super.unsubscribe()}}}),Y=_},3410:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>o});const o={setTimeout(x,N,...ge){const{delegate:R}=o;return R?.setTimeout?R.setTimeout(x,N,...ge):setTimeout(x,N,...ge)},clearTimeout(x){const{delegate:N}=o;return(N?.clearTimeout||clearTimeout)(x)},delegate:void 0}},2202:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>x});const x=function o(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}()},8822:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>o});const o="function"==typeof Symbol&&Symbol.observable||"@@observable"},3269:(Qe,Fe,w)=>{"use strict";w.d(Fe,{_6:()=>W,jO:()=>ge,yG:()=>R});var o=w(576),x=w(3532);function N(M){return M[M.length-1]}function ge(M){return(0,o.m)(N(M))?M.pop():void 0}function R(M){return(0,x.K)(N(M))?M.pop():void 0}function W(M,U){return"number"==typeof N(M)?M.pop():U}},4742:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>R});const{isArray:o}=Array,{getPrototypeOf:x,prototype:N,keys:ge}=Object;function R(M){if(1===M.length){const U=M[0];if(o(U))return{args:U,keys:null};if(function W(M){return M&&"object"==typeof M&&x(M)===N}(U)){const _=ge(U);return{args:_.map(Y=>U[Y]),keys:_}}}return{args:M,keys:null}}},8737:(Qe,Fe,w)=>{"use strict";function o(x,N){if(x){const ge=x.indexOf(N);0<=ge&&x.splice(ge,1)}}w.d(Fe,{P:()=>o})},3888:(Qe,Fe,w)=>{"use strict";function o(x){const ge=x(R=>{Error.call(R),R.stack=(new Error).stack});return ge.prototype=Object.create(Error.prototype),ge.prototype.constructor=ge,ge}w.d(Fe,{d:()=>o})},1810:(Qe,Fe,w)=>{"use strict";function o(x,N){return x.reduce((ge,R,W)=>(ge[R]=N[W],ge),{})}w.d(Fe,{n:()=>o})},2806:(Qe,Fe,w)=>{"use strict";w.d(Fe,{O:()=>ge,x:()=>N});var o=w(2416);let x=null;function N(R){if(o.v.useDeprecatedSynchronousErrorHandling){const W=!x;if(W&&(x={errorThrown:!1,error:null}),R(),W){const{errorThrown:M,error:U}=x;if(x=null,M)throw U}}else R()}function ge(R){o.v.useDeprecatedSynchronousErrorHandling&&x&&(x.errorThrown=!0,x.error=R)}},9672:(Qe,Fe,w)=>{"use strict";function o(x,N,ge,R=0,W=!1){const M=N.schedule(function(){ge(),W?x.add(this.schedule(null,R)):this.unsubscribe()},R);if(x.add(M),!W)return M}w.d(Fe,{f:()=>o})},4671:(Qe,Fe,w)=>{"use strict";function o(x){return x}w.d(Fe,{y:()=>o})},1144:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>o});const o=x=>x&&"number"==typeof x.length&&"function"!=typeof x},2206:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>x});var o=w(576);function x(N){return Symbol.asyncIterator&&(0,o.m)(N?.[Symbol.asyncIterator])}},576:(Qe,Fe,w)=>{"use strict";function o(x){return"function"==typeof x}w.d(Fe,{m:()=>o})},3670:(Qe,Fe,w)=>{"use strict";w.d(Fe,{c:()=>N});var o=w(8822),x=w(576);function N(ge){return(0,x.m)(ge[o.L])}},6495:(Qe,Fe,w)=>{"use strict";w.d(Fe,{T:()=>N});var o=w(2202),x=w(576);function N(ge){return(0,x.m)(ge?.[o.h])}},8239:(Qe,Fe,w)=>{"use strict";w.d(Fe,{t:()=>x});var o=w(576);function x(N){return(0,o.m)(N?.then)}},3260:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>ge,Q:()=>N});var o=w(655),x=w(576);function N(R){return(0,o.FC)(this,arguments,function*(){const M=R.getReader();try{for(;;){const{value:U,done:_}=yield(0,o.qq)(M.read());if(_)return yield(0,o.qq)(void 0);yield yield(0,o.qq)(U)}}finally{M.releaseLock()}})}function ge(R){return(0,x.m)(R?.getReader)}},3532:(Qe,Fe,w)=>{"use strict";w.d(Fe,{K:()=>x});var o=w(576);function x(N){return N&&(0,o.m)(N.schedule)}},4482:(Qe,Fe,w)=>{"use strict";w.d(Fe,{A:()=>x,e:()=>N});var o=w(576);function x(ge){return(0,o.m)(ge?.lift)}function N(ge){return R=>{if(x(R))return R.lift(function(W){try{return ge(W,this)}catch(M){this.error(M)}});throw new TypeError("Unable to lift unknown Observable type")}}},3268:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Z:()=>ge});var o=w(4004);const{isArray:x}=Array;function ge(R){return(0,o.U)(W=>function N(R,W){return x(W)?R(...W):R(W)}(R,W))}},9635:(Qe,Fe,w)=>{"use strict";w.d(Fe,{U:()=>N,z:()=>x});var o=w(4671);function x(...ge){return N(ge)}function N(ge){return 0===ge.length?o.y:1===ge.length?ge[0]:function(W){return ge.reduce((M,U)=>U(M),W)}}},7849:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>N});var o=w(2416),x=w(3410);function N(ge){x.z.setTimeout(()=>{const{onUnhandledError:R}=o.v;if(!R)throw ge;R(ge)})}},4532:(Qe,Fe,w)=>{"use strict";function o(x){return new TypeError(`You provided ${null!==x&&"object"==typeof x?"an invalid object":`'${x}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}w.d(Fe,{z:()=>o})},6931:(Qe,Fe,w)=>{"use strict";var o=w(1708),x=Array.prototype.concat,N=Array.prototype.slice,ge=Qe.exports=function(W){for(var M=[],U=0,_=W.length;U<_;U++){var Y=W[U];o(Y)?M=x.call(M,N.call(Y)):M.push(Y)}return M};ge.wrap=function(R){return function(){return R(ge(arguments))}}},1708:Qe=>{Qe.exports=function(w){return!(!w||"string"==typeof w)&&(w instanceof Array||Array.isArray(w)||w.length>=0&&(w.splice instanceof Function||Object.getOwnPropertyDescriptor(w,w.length-1)&&"String"!==w.constructor.name))}},863:(Qe,Fe,w)=>{var o={"./ion-accordion_2.entry.js":[9654,8592,9654],"./ion-action-sheet.entry.js":[3648,8592,3648],"./ion-alert.entry.js":[1118,8592,1118],"./ion-app_8.entry.js":[53,8592,3236],"./ion-avatar_3.entry.js":[4753,4753],"./ion-back-button.entry.js":[2073,8592,2073],"./ion-backdrop.entry.js":[8939,8939],"./ion-breadcrumb_2.entry.js":[7544,8592,7544],"./ion-button_2.entry.js":[5652,5652],"./ion-card_5.entry.js":[388,388],"./ion-checkbox.entry.js":[9922,9922],"./ion-chip.entry.js":[657,657],"./ion-col_3.entry.js":[9824,9824],"./ion-datetime-button.entry.js":[9230,1435,9230],"./ion-datetime_3.entry.js":[4959,1435,8592,4959],"./ion-fab_3.entry.js":[5836,8592,5836],"./ion-img.entry.js":[1033,1033],"./ion-infinite-scroll_2.entry.js":[8034,8592,5817],"./ion-input.entry.js":[1217,1217],"./ion-item-option_3.entry.js":[2933,8592,4651],"./ion-item_8.entry.js":[4711,8592,4711],"./ion-loading.entry.js":[9434,8592,9434],"./ion-menu_3.entry.js":[8136,8592,8136],"./ion-modal.entry.js":[2349,8592,2349],"./ion-nav_2.entry.js":[5349,8592,5349],"./ion-picker-column-internal.entry.js":[7602,8592,7602],"./ion-picker-internal.entry.js":[9016,9016],"./ion-popover.entry.js":[3804,8592,3804],"./ion-progress-bar.entry.js":[4174,4174],"./ion-radio_2.entry.js":[4432,4432],"./ion-range.entry.js":[1709,8592,1709],"./ion-refresher_2.entry.js":[3326,8592,2175],"./ion-reorder_2.entry.js":[3583,8592,1186],"./ion-ripple-effect.entry.js":[9958,9958],"./ion-route_4.entry.js":[4330,4330],"./ion-searchbar.entry.js":[8628,8592,8628],"./ion-segment_2.entry.js":[9325,8592,9325],"./ion-select_3.entry.js":[2773,2773],"./ion-slide_2.entry.js":[1650,1650],"./ion-spinner.entry.js":[4908,8592,4908],"./ion-split-pane.entry.js":[9536,9536],"./ion-tab-bar_2.entry.js":[438,8592,438],"./ion-tab_2.entry.js":[1536,8592,1536],"./ion-text.entry.js":[4376,4376],"./ion-textarea.entry.js":[6560,6560],"./ion-toast.entry.js":[6120,8592,6120],"./ion-toggle.entry.js":[5168,8592,5168],"./ion-virtual-scroll.entry.js":[2289,2289]};function x(N){if(!w.o(o,N))return Promise.resolve().then(()=>{var W=new Error("Cannot find module '"+N+"'");throw W.code="MODULE_NOT_FOUND",W});var ge=o[N],R=ge[0];return Promise.all(ge.slice(1).map(w.e)).then(()=>w(R))}x.keys=()=>Object.keys(o),x.id=863,Qe.exports=x},655:(Qe,Fe,w)=>{"use strict";function R(Q,T,k,O){var Ae,te=arguments.length,ce=te<3?T:null===O?O=Object.getOwnPropertyDescriptor(T,k):O;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)ce=Reflect.decorate(Q,T,k,O);else for(var De=Q.length-1;De>=0;De--)(Ae=Q[De])&&(ce=(te<3?Ae(ce):te>3?Ae(T,k,ce):Ae(T,k))||ce);return te>3&&ce&&Object.defineProperty(T,k,ce),ce}function U(Q,T,k,O){return new(k||(k=Promise))(function(ce,Ae){function De(ne){try{de(O.next(ne))}catch(Ee){Ae(Ee)}}function ue(ne){try{de(O.throw(ne))}catch(Ee){Ae(Ee)}}function de(ne){ne.done?ce(ne.value):function te(ce){return ce instanceof k?ce:new k(function(Ae){Ae(ce)})}(ne.value).then(De,ue)}de((O=O.apply(Q,T||[])).next())})}function P(Q){return this instanceof P?(this.v=Q,this):new P(Q)}function K(Q,T,k){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var te,O=k.apply(Q,T||[]),ce=[];return te={},Ae("next"),Ae("throw"),Ae("return"),te[Symbol.asyncIterator]=function(){return this},te;function Ae(Ce){O[Ce]&&(te[Ce]=function(ze){return new Promise(function(dt,et){ce.push([Ce,ze,dt,et])>1||De(Ce,ze)})})}function De(Ce,ze){try{!function ue(Ce){Ce.value instanceof P?Promise.resolve(Ce.value.v).then(de,ne):Ee(ce[0][2],Ce)}(O[Ce](ze))}catch(dt){Ee(ce[0][3],dt)}}function de(Ce){De("next",Ce)}function ne(Ce){De("throw",Ce)}function Ee(Ce,ze){Ce(ze),ce.shift(),ce.length&&De(ce[0][0],ce[0][1])}}function ke(Q){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var k,T=Q[Symbol.asyncIterator];return T?T.call(Q):(Q=function Z(Q){var T="function"==typeof Symbol&&Symbol.iterator,k=T&&Q[T],O=0;if(k)return k.call(Q);if(Q&&"number"==typeof Q.length)return{next:function(){return Q&&O>=Q.length&&(Q=void 0),{value:Q&&Q[O++],done:!Q}}};throw new TypeError(T?"Object is not iterable.":"Symbol.iterator is not defined.")}(Q),k={},O("next"),O("throw"),O("return"),k[Symbol.asyncIterator]=function(){return this},k);function O(ce){k[ce]=Q[ce]&&function(Ae){return new Promise(function(De,ue){!function te(ce,Ae,De,ue){Promise.resolve(ue).then(function(de){ce({value:de,done:De})},Ae)}(De,ue,(Ae=Q[ce](Ae)).done,Ae.value)})}}}w.d(Fe,{FC:()=>K,KL:()=>ke,gn:()=>R,mG:()=>U,qq:()=>P})},6895:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Do:()=>ke,EM:()=>zr,HT:()=>R,JF:()=>hr,JJ:()=>Gn,K0:()=>M,Mx:()=>gr,O5:()=>q,OU:()=>Pr,Ov:()=>mr,PC:()=>st,S$:()=>P,V_:()=>Y,Ye:()=>Te,b0:()=>pe,bD:()=>yo,ez:()=>vo,mk:()=>$t,q:()=>N,sg:()=>Cn,tP:()=>Mt,uU:()=>ar,w_:()=>W});var o=w(8274);let x=null;function N(){return x}function R(v){x||(x=v)}class W{}const M=new o.OlP("DocumentToken");let U=(()=>{class v{historyGo(D){throw new Error("Not implemented")}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275prov=o.Yz7({token:v,factory:function(){return function _(){return(0,o.LFG)(G)}()},providedIn:"platform"}),v})();const Y=new o.OlP("Location Initialized");let G=(()=>{class v extends U{constructor(D){super(),this._doc=D,this._init()}_init(){this.location=window.location,this._history=window.history}getBaseHrefFromDOM(){return N().getBaseHref(this._doc)}onPopState(D){const H=N().getGlobalEventTarget(this._doc,"window");return H.addEventListener("popstate",D,!1),()=>H.removeEventListener("popstate",D)}onHashChange(D){const H=N().getGlobalEventTarget(this._doc,"window");return H.addEventListener("hashchange",D,!1),()=>H.removeEventListener("hashchange",D)}get href(){return this.location.href}get protocol(){return this.location.protocol}get hostname(){return this.location.hostname}get port(){return this.location.port}get pathname(){return this.location.pathname}get search(){return this.location.search}get hash(){return this.location.hash}set pathname(D){this.location.pathname=D}pushState(D,H,ae){Z()?this._history.pushState(D,H,ae):this.location.hash=ae}replaceState(D,H,ae){Z()?this._history.replaceState(D,H,ae):this.location.hash=ae}forward(){this._history.forward()}back(){this._history.back()}historyGo(D=0){this._history.go(D)}getState(){return this._history.state}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(M))},v.\u0275prov=o.Yz7({token:v,factory:function(){return function S(){return new G((0,o.LFG)(M))}()},providedIn:"platform"}),v})();function Z(){return!!window.history.pushState}function B(v,A){if(0==v.length)return A;if(0==A.length)return v;let D=0;return v.endsWith("/")&&D++,A.startsWith("/")&&D++,2==D?v+A.substring(1):1==D?v+A:v+"/"+A}function E(v){const A=v.match(/#|\?|$/),D=A&&A.index||v.length;return v.slice(0,D-("/"===v[D-1]?1:0))+v.slice(D)}function j(v){return v&&"?"!==v[0]?"?"+v:v}let P=(()=>{class v{historyGo(D){throw new Error("Not implemented")}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275prov=o.Yz7({token:v,factory:function(){return(0,o.f3M)(pe)},providedIn:"root"}),v})();const K=new o.OlP("appBaseHref");let pe=(()=>{class v extends P{constructor(D,H){super(),this._platformLocation=D,this._removeListenerFns=[],this._baseHref=H??this._platformLocation.getBaseHrefFromDOM()??(0,o.f3M)(M).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(D){this._removeListenerFns.push(this._platformLocation.onPopState(D),this._platformLocation.onHashChange(D))}getBaseHref(){return this._baseHref}prepareExternalUrl(D){return B(this._baseHref,D)}path(D=!1){const H=this._platformLocation.pathname+j(this._platformLocation.search),ae=this._platformLocation.hash;return ae&&D?`${H}${ae}`:H}pushState(D,H,ae,$e){const Xe=this.prepareExternalUrl(ae+j($e));this._platformLocation.pushState(D,H,Xe)}replaceState(D,H,ae,$e){const Xe=this.prepareExternalUrl(ae+j($e));this._platformLocation.replaceState(D,H,Xe)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(D=0){this._platformLocation.historyGo?.(D)}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(U),o.LFG(K,8))},v.\u0275prov=o.Yz7({token:v,factory:v.\u0275fac,providedIn:"root"}),v})(),ke=(()=>{class v extends P{constructor(D,H){super(),this._platformLocation=D,this._baseHref="",this._removeListenerFns=[],null!=H&&(this._baseHref=H)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(D){this._removeListenerFns.push(this._platformLocation.onPopState(D),this._platformLocation.onHashChange(D))}getBaseHref(){return this._baseHref}path(D=!1){let H=this._platformLocation.hash;return null==H&&(H="#"),H.length>0?H.substring(1):H}prepareExternalUrl(D){const H=B(this._baseHref,D);return H.length>0?"#"+H:H}pushState(D,H,ae,$e){let Xe=this.prepareExternalUrl(ae+j($e));0==Xe.length&&(Xe=this._platformLocation.pathname),this._platformLocation.pushState(D,H,Xe)}replaceState(D,H,ae,$e){let Xe=this.prepareExternalUrl(ae+j($e));0==Xe.length&&(Xe=this._platformLocation.pathname),this._platformLocation.replaceState(D,H,Xe)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(D=0){this._platformLocation.historyGo?.(D)}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(U),o.LFG(K,8))},v.\u0275prov=o.Yz7({token:v,factory:v.\u0275fac}),v})(),Te=(()=>{class v{constructor(D){this._subject=new o.vpe,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=D;const H=this._locationStrategy.getBaseHref();this._baseHref=E(re(H)),this._locationStrategy.onPopState(ae=>{this._subject.emit({url:this.path(!0),pop:!0,state:ae.state,type:ae.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(D=!1){return this.normalize(this._locationStrategy.path(D))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(D,H=""){return this.path()==this.normalize(D+j(H))}normalize(D){return v.stripTrailingSlash(function Be(v,A){return v&&A.startsWith(v)?A.substring(v.length):A}(this._baseHref,re(D)))}prepareExternalUrl(D){return D&&"/"!==D[0]&&(D="/"+D),this._locationStrategy.prepareExternalUrl(D)}go(D,H="",ae=null){this._locationStrategy.pushState(ae,"",D,H),this._notifyUrlChangeListeners(this.prepareExternalUrl(D+j(H)),ae)}replaceState(D,H="",ae=null){this._locationStrategy.replaceState(ae,"",D,H),this._notifyUrlChangeListeners(this.prepareExternalUrl(D+j(H)),ae)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(D=0){this._locationStrategy.historyGo?.(D)}onUrlChange(D){return this._urlChangeListeners.push(D),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(H=>{this._notifyUrlChangeListeners(H.url,H.state)})),()=>{const H=this._urlChangeListeners.indexOf(D);this._urlChangeListeners.splice(H,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(D="",H){this._urlChangeListeners.forEach(ae=>ae(D,H))}subscribe(D,H,ae){return this._subject.subscribe({next:D,error:H,complete:ae})}}return v.normalizeQueryParams=j,v.joinWithSlash=B,v.stripTrailingSlash=E,v.\u0275fac=function(D){return new(D||v)(o.LFG(P))},v.\u0275prov=o.Yz7({token:v,factory:function(){return function ie(){return new Te((0,o.LFG)(P))}()},providedIn:"root"}),v})();function re(v){return v.replace(/\/index.html$/,"")}var be=(()=>((be=be||{})[be.Decimal=0]="Decimal",be[be.Percent=1]="Percent",be[be.Currency=2]="Currency",be[be.Scientific=3]="Scientific",be))(),Q=(()=>((Q=Q||{})[Q.Format=0]="Format",Q[Q.Standalone=1]="Standalone",Q))(),T=(()=>((T=T||{})[T.Narrow=0]="Narrow",T[T.Abbreviated=1]="Abbreviated",T[T.Wide=2]="Wide",T[T.Short=3]="Short",T))(),k=(()=>((k=k||{})[k.Short=0]="Short",k[k.Medium=1]="Medium",k[k.Long=2]="Long",k[k.Full=3]="Full",k))(),O=(()=>((O=O||{})[O.Decimal=0]="Decimal",O[O.Group=1]="Group",O[O.List=2]="List",O[O.PercentSign=3]="PercentSign",O[O.PlusSign=4]="PlusSign",O[O.MinusSign=5]="MinusSign",O[O.Exponential=6]="Exponential",O[O.SuperscriptingExponent=7]="SuperscriptingExponent",O[O.PerMille=8]="PerMille",O[O.Infinity=9]="Infinity",O[O.NaN=10]="NaN",O[O.TimeSeparator=11]="TimeSeparator",O[O.CurrencyDecimal=12]="CurrencyDecimal",O[O.CurrencyGroup=13]="CurrencyGroup",O))();function Ce(v,A){return it((0,o.cg1)(v)[o.wAp.DateFormat],A)}function ze(v,A){return it((0,o.cg1)(v)[o.wAp.TimeFormat],A)}function dt(v,A){return it((0,o.cg1)(v)[o.wAp.DateTimeFormat],A)}function et(v,A){const D=(0,o.cg1)(v),H=D[o.wAp.NumberSymbols][A];if(typeof H>"u"){if(A===O.CurrencyDecimal)return D[o.wAp.NumberSymbols][O.Decimal];if(A===O.CurrencyGroup)return D[o.wAp.NumberSymbols][O.Group]}return H}function Kt(v){if(!v[o.wAp.ExtraData])throw new Error(`Missing extra locale data for the locale "${v[o.wAp.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function it(v,A){for(let D=A;D>-1;D--)if(typeof v[D]<"u")return v[D];throw new Error("Locale data API: locale data undefined")}function Xt(v){const[A,D]=v.split(":");return{hours:+A,minutes:+D}}const Vn=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,en={},gt=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;var Yt=(()=>((Yt=Yt||{})[Yt.Short=0]="Short",Yt[Yt.ShortGMT=1]="ShortGMT",Yt[Yt.Long=2]="Long",Yt[Yt.Extended=3]="Extended",Yt))(),ht=(()=>((ht=ht||{})[ht.FullYear=0]="FullYear",ht[ht.Month=1]="Month",ht[ht.Date=2]="Date",ht[ht.Hours=3]="Hours",ht[ht.Minutes=4]="Minutes",ht[ht.Seconds=5]="Seconds",ht[ht.FractionalSeconds=6]="FractionalSeconds",ht[ht.Day=7]="Day",ht))(),nt=(()=>((nt=nt||{})[nt.DayPeriods=0]="DayPeriods",nt[nt.Days=1]="Days",nt[nt.Months=2]="Months",nt[nt.Eras=3]="Eras",nt))();function Et(v,A,D,H){let ae=function tn(v){if(mn(v))return v;if("number"==typeof v&&!isNaN(v))return new Date(v);if("string"==typeof v){if(v=v.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(v)){const[ae,$e=1,Xe=1]=v.split("-").map(lt=>+lt);return ut(ae,$e-1,Xe)}const D=parseFloat(v);if(!isNaN(v-D))return new Date(D);let H;if(H=v.match(Vn))return function Ln(v){const A=new Date(0);let D=0,H=0;const ae=v[8]?A.setUTCFullYear:A.setFullYear,$e=v[8]?A.setUTCHours:A.setHours;v[9]&&(D=Number(v[9]+v[10]),H=Number(v[9]+v[11])),ae.call(A,Number(v[1]),Number(v[2])-1,Number(v[3]));const Xe=Number(v[4]||0)-D,lt=Number(v[5]||0)-H,qt=Number(v[6]||0),Tt=Math.floor(1e3*parseFloat("0."+(v[7]||0)));return $e.call(A,Xe,lt,qt,Tt),A}(H)}const A=new Date(v);if(!mn(A))throw new Error(`Unable to convert "${v}" into a date`);return A}(v);A=Ct(D,A)||A;let lt,Xe=[];for(;A;){if(lt=gt.exec(A),!lt){Xe.push(A);break}{Xe=Xe.concat(lt.slice(1));const un=Xe.pop();if(!un)break;A=un}}let qt=ae.getTimezoneOffset();H&&(qt=vt(H,qt),ae=function _t(v,A,D){const H=D?-1:1,ae=v.getTimezoneOffset();return function Ht(v,A){return(v=new Date(v.getTime())).setMinutes(v.getMinutes()+A),v}(v,H*(vt(A,ae)-ae))}(ae,H,!0));let Tt="";return Xe.forEach(un=>{const Jt=function pt(v){if(Ye[v])return Ye[v];let A;switch(v){case"G":case"GG":case"GGG":A=zt(nt.Eras,T.Abbreviated);break;case"GGGG":A=zt(nt.Eras,T.Wide);break;case"GGGGG":A=zt(nt.Eras,T.Narrow);break;case"y":A=Nt(ht.FullYear,1,0,!1,!0);break;case"yy":A=Nt(ht.FullYear,2,0,!0,!0);break;case"yyy":A=Nt(ht.FullYear,3,0,!1,!0);break;case"yyyy":A=Nt(ht.FullYear,4,0,!1,!0);break;case"Y":A=He(1);break;case"YY":A=He(2,!0);break;case"YYY":A=He(3);break;case"YYYY":A=He(4);break;case"M":case"L":A=Nt(ht.Month,1,1);break;case"MM":case"LL":A=Nt(ht.Month,2,1);break;case"MMM":A=zt(nt.Months,T.Abbreviated);break;case"MMMM":A=zt(nt.Months,T.Wide);break;case"MMMMM":A=zt(nt.Months,T.Narrow);break;case"LLL":A=zt(nt.Months,T.Abbreviated,Q.Standalone);break;case"LLLL":A=zt(nt.Months,T.Wide,Q.Standalone);break;case"LLLLL":A=zt(nt.Months,T.Narrow,Q.Standalone);break;case"w":A=ye(1);break;case"ww":A=ye(2);break;case"W":A=ye(1,!0);break;case"d":A=Nt(ht.Date,1);break;case"dd":A=Nt(ht.Date,2);break;case"c":case"cc":A=Nt(ht.Day,1);break;case"ccc":A=zt(nt.Days,T.Abbreviated,Q.Standalone);break;case"cccc":A=zt(nt.Days,T.Wide,Q.Standalone);break;case"ccccc":A=zt(nt.Days,T.Narrow,Q.Standalone);break;case"cccccc":A=zt(nt.Days,T.Short,Q.Standalone);break;case"E":case"EE":case"EEE":A=zt(nt.Days,T.Abbreviated);break;case"EEEE":A=zt(nt.Days,T.Wide);break;case"EEEEE":A=zt(nt.Days,T.Narrow);break;case"EEEEEE":A=zt(nt.Days,T.Short);break;case"a":case"aa":case"aaa":A=zt(nt.DayPeriods,T.Abbreviated);break;case"aaaa":A=zt(nt.DayPeriods,T.Wide);break;case"aaaaa":A=zt(nt.DayPeriods,T.Narrow);break;case"b":case"bb":case"bbb":A=zt(nt.DayPeriods,T.Abbreviated,Q.Standalone,!0);break;case"bbbb":A=zt(nt.DayPeriods,T.Wide,Q.Standalone,!0);break;case"bbbbb":A=zt(nt.DayPeriods,T.Narrow,Q.Standalone,!0);break;case"B":case"BB":case"BBB":A=zt(nt.DayPeriods,T.Abbreviated,Q.Format,!0);break;case"BBBB":A=zt(nt.DayPeriods,T.Wide,Q.Format,!0);break;case"BBBBB":A=zt(nt.DayPeriods,T.Narrow,Q.Format,!0);break;case"h":A=Nt(ht.Hours,1,-12);break;case"hh":A=Nt(ht.Hours,2,-12);break;case"H":A=Nt(ht.Hours,1);break;case"HH":A=Nt(ht.Hours,2);break;case"m":A=Nt(ht.Minutes,1);break;case"mm":A=Nt(ht.Minutes,2);break;case"s":A=Nt(ht.Seconds,1);break;case"ss":A=Nt(ht.Seconds,2);break;case"S":A=Nt(ht.FractionalSeconds,1);break;case"SS":A=Nt(ht.FractionalSeconds,2);break;case"SSS":A=Nt(ht.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":A=jn(Yt.Short);break;case"ZZZZZ":A=jn(Yt.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":A=jn(Yt.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":A=jn(Yt.Long);break;default:return null}return Ye[v]=A,A}(un);Tt+=Jt?Jt(ae,D,qt):"''"===un?"'":un.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),Tt}function ut(v,A,D){const H=new Date(0);return H.setFullYear(v,A,D),H.setHours(0,0,0),H}function Ct(v,A){const D=function ce(v){return(0,o.cg1)(v)[o.wAp.LocaleId]}(v);if(en[D]=en[D]||{},en[D][A])return en[D][A];let H="";switch(A){case"shortDate":H=Ce(v,k.Short);break;case"mediumDate":H=Ce(v,k.Medium);break;case"longDate":H=Ce(v,k.Long);break;case"fullDate":H=Ce(v,k.Full);break;case"shortTime":H=ze(v,k.Short);break;case"mediumTime":H=ze(v,k.Medium);break;case"longTime":H=ze(v,k.Long);break;case"fullTime":H=ze(v,k.Full);break;case"short":const ae=Ct(v,"shortTime"),$e=Ct(v,"shortDate");H=qe(dt(v,k.Short),[ae,$e]);break;case"medium":const Xe=Ct(v,"mediumTime"),lt=Ct(v,"mediumDate");H=qe(dt(v,k.Medium),[Xe,lt]);break;case"long":const qt=Ct(v,"longTime"),Tt=Ct(v,"longDate");H=qe(dt(v,k.Long),[qt,Tt]);break;case"full":const un=Ct(v,"fullTime"),Jt=Ct(v,"fullDate");H=qe(dt(v,k.Full),[un,Jt])}return H&&(en[D][A]=H),H}function qe(v,A){return A&&(v=v.replace(/\{([^}]+)}/g,function(D,H){return null!=A&&H in A?A[H]:D})),v}function on(v,A,D="-",H,ae){let $e="";(v<0||ae&&v<=0)&&(ae?v=1-v:(v=-v,$e=D));let Xe=String(v);for(;Xe.length0||lt>-D)&&(lt+=D),v===ht.Hours)0===lt&&-12===D&&(lt=12);else if(v===ht.FractionalSeconds)return function gn(v,A){return on(v,3).substring(0,A)}(lt,A);const qt=et(Xe,O.MinusSign);return on(lt,A,qt,H,ae)}}function zt(v,A,D=Q.Format,H=!1){return function(ae,$e){return function Er(v,A,D,H,ae,$e){switch(D){case nt.Months:return function ue(v,A,D){const H=(0,o.cg1)(v),$e=it([H[o.wAp.MonthsFormat],H[o.wAp.MonthsStandalone]],A);return it($e,D)}(A,ae,H)[v.getMonth()];case nt.Days:return function De(v,A,D){const H=(0,o.cg1)(v),$e=it([H[o.wAp.DaysFormat],H[o.wAp.DaysStandalone]],A);return it($e,D)}(A,ae,H)[v.getDay()];case nt.DayPeriods:const Xe=v.getHours(),lt=v.getMinutes();if($e){const Tt=function pn(v){const A=(0,o.cg1)(v);return Kt(A),(A[o.wAp.ExtraData][2]||[]).map(H=>"string"==typeof H?Xt(H):[Xt(H[0]),Xt(H[1])])}(A),un=function Pt(v,A,D){const H=(0,o.cg1)(v);Kt(H);const $e=it([H[o.wAp.ExtraData][0],H[o.wAp.ExtraData][1]],A)||[];return it($e,D)||[]}(A,ae,H),Jt=Tt.findIndex(Yn=>{if(Array.isArray(Yn)){const[yn,Wn]=Yn,Eo=Xe>=yn.hours&<>=yn.minutes,pr=Xe0?Math.floor(ae/60):Math.ceil(ae/60);switch(v){case Yt.Short:return(ae>=0?"+":"")+on(Xe,2,$e)+on(Math.abs(ae%60),2,$e);case Yt.ShortGMT:return"GMT"+(ae>=0?"+":"")+on(Xe,1,$e);case Yt.Long:return"GMT"+(ae>=0?"+":"")+on(Xe,2,$e)+":"+on(Math.abs(ae%60),2,$e);case Yt.Extended:return 0===H?"Z":(ae>=0?"+":"")+on(Xe,2,$e)+":"+on(Math.abs(ae%60),2,$e);default:throw new Error(`Unknown zone width "${v}"`)}}}function se(v){return ut(v.getFullYear(),v.getMonth(),v.getDate()+(4-v.getDay()))}function ye(v,A=!1){return function(D,H){let ae;if(A){const $e=new Date(D.getFullYear(),D.getMonth(),1).getDay()-1,Xe=D.getDate();ae=1+Math.floor((Xe+$e)/7)}else{const $e=se(D),Xe=function xe(v){const A=ut(v,0,1).getDay();return ut(v,0,1+(A<=4?4:11)-A)}($e.getFullYear()),lt=$e.getTime()-Xe.getTime();ae=1+Math.round(lt/6048e5)}return on(ae,v,et(H,O.MinusSign))}}function He(v,A=!1){return function(D,H){return on(se(D).getFullYear(),v,et(H,O.MinusSign),A)}}const Ye={};function vt(v,A){v=v.replace(/:/g,"");const D=Date.parse("Jan 01, 1970 00:00:00 "+v)/6e4;return isNaN(D)?A:D}function mn(v){return v instanceof Date&&!isNaN(v.valueOf())}const ln=/^(\d+)?\.((\d+)(-(\d+))?)?$/;function xn(v){const A=parseInt(v);if(isNaN(A))throw new Error("Invalid integer literal when parsing "+v);return A}function gr(v,A){A=encodeURIComponent(A);for(const D of v.split(";")){const H=D.indexOf("="),[ae,$e]=-1==H?[D,""]:[D.slice(0,H),D.slice(H+1)];if(ae.trim()===A)return decodeURIComponent($e)}return null}let $t=(()=>{class v{constructor(D,H,ae,$e){this._iterableDiffers=D,this._keyValueDiffers=H,this._ngEl=ae,this._renderer=$e,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(D){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof D?D.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(D){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof D?D.split(/\s+/):D,this._rawClass&&((0,o.sIi)(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const D=this._iterableDiffer.diff(this._rawClass);D&&this._applyIterableChanges(D)}else if(this._keyValueDiffer){const D=this._keyValueDiffer.diff(this._rawClass);D&&this._applyKeyValueChanges(D)}}_applyKeyValueChanges(D){D.forEachAddedItem(H=>this._toggleClass(H.key,H.currentValue)),D.forEachChangedItem(H=>this._toggleClass(H.key,H.currentValue)),D.forEachRemovedItem(H=>{H.previousValue&&this._toggleClass(H.key,!1)})}_applyIterableChanges(D){D.forEachAddedItem(H=>{if("string"!=typeof H.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${(0,o.AaK)(H.item)}`);this._toggleClass(H.item,!0)}),D.forEachRemovedItem(H=>this._toggleClass(H.item,!1))}_applyClasses(D){D&&(Array.isArray(D)||D instanceof Set?D.forEach(H=>this._toggleClass(H,!0)):Object.keys(D).forEach(H=>this._toggleClass(H,!!D[H])))}_removeClasses(D){D&&(Array.isArray(D)||D instanceof Set?D.forEach(H=>this._toggleClass(H,!1)):Object.keys(D).forEach(H=>this._toggleClass(H,!1)))}_toggleClass(D,H){(D=D.trim())&&D.split(/\s+/g).forEach(ae=>{H?this._renderer.addClass(this._ngEl.nativeElement,ae):this._renderer.removeClass(this._ngEl.nativeElement,ae)})}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.ZZ4),o.Y36(o.aQg),o.Y36(o.SBq),o.Y36(o.Qsj))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0}),v})();class On{constructor(A,D,H,ae){this.$implicit=A,this.ngForOf=D,this.index=H,this.count=ae}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Cn=(()=>{class v{constructor(D,H,ae){this._viewContainer=D,this._template=H,this._differs=ae,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(D){this._ngForOf=D,this._ngForOfDirty=!0}set ngForTrackBy(D){this._trackByFn=D}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(D){D&&(this._template=D)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const D=this._ngForOf;!this._differ&&D&&(this._differ=this._differs.find(D).create(this.ngForTrackBy))}if(this._differ){const D=this._differ.diff(this._ngForOf);D&&this._applyChanges(D)}}_applyChanges(D){const H=this._viewContainer;D.forEachOperation((ae,$e,Xe)=>{if(null==ae.previousIndex)H.createEmbeddedView(this._template,new On(ae.item,this._ngForOf,-1,-1),null===Xe?void 0:Xe);else if(null==Xe)H.remove(null===$e?void 0:$e);else if(null!==$e){const lt=H.get($e);H.move(lt,Xe),rt(lt,ae)}});for(let ae=0,$e=H.length;ae<$e;ae++){const lt=H.get(ae).context;lt.index=ae,lt.count=$e,lt.ngForOf=this._ngForOf}D.forEachIdentityChange(ae=>{rt(H.get(ae.currentIndex),ae)})}static ngTemplateContextGuard(D,H){return!0}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b),o.Y36(o.Rgc),o.Y36(o.ZZ4))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0}),v})();function rt(v,A){v.context.$implicit=A.item}let q=(()=>{class v{constructor(D,H){this._viewContainer=D,this._context=new he,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=H}set ngIf(D){this._context.$implicit=this._context.ngIf=D,this._updateView()}set ngIfThen(D){we("ngIfThen",D),this._thenTemplateRef=D,this._thenViewRef=null,this._updateView()}set ngIfElse(D){we("ngIfElse",D),this._elseTemplateRef=D,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(D,H){return!0}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b),o.Y36(o.Rgc))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0}),v})();class he{constructor(){this.$implicit=null,this.ngIf=null}}function we(v,A){if(A&&!A.createEmbeddedView)throw new Error(`${v} must be a TemplateRef, but received '${(0,o.AaK)(A)}'.`)}let st=(()=>{class v{constructor(D,H,ae){this._ngEl=D,this._differs=H,this._renderer=ae,this._ngStyle=null,this._differ=null}set ngStyle(D){this._ngStyle=D,!this._differ&&D&&(this._differ=this._differs.find(D).create())}ngDoCheck(){if(this._differ){const D=this._differ.diff(this._ngStyle);D&&this._applyChanges(D)}}_setStyle(D,H){const[ae,$e]=D.split("."),Xe=-1===ae.indexOf("-")?void 0:o.JOm.DashCase;null!=H?this._renderer.setStyle(this._ngEl.nativeElement,ae,$e?`${H}${$e}`:H,Xe):this._renderer.removeStyle(this._ngEl.nativeElement,ae,Xe)}_applyChanges(D){D.forEachRemovedItem(H=>this._setStyle(H.key,null)),D.forEachAddedItem(H=>this._setStyle(H.key,H.currentValue)),D.forEachChangedItem(H=>this._setStyle(H.key,H.currentValue))}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.SBq),o.Y36(o.aQg),o.Y36(o.Qsj))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0}),v})(),Mt=(()=>{class v{constructor(D){this._viewContainerRef=D,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null,this.ngTemplateOutletInjector=null}ngOnChanges(D){if(D.ngTemplateOutlet||D.ngTemplateOutletInjector){const H=this._viewContainerRef;if(this._viewRef&&H.remove(H.indexOf(this._viewRef)),this.ngTemplateOutlet){const{ngTemplateOutlet:ae,ngTemplateOutletContext:$e,ngTemplateOutletInjector:Xe}=this;this._viewRef=H.createEmbeddedView(ae,$e,Xe?{injector:Xe}:void 0)}else this._viewRef=null}else this._viewRef&&D.ngTemplateOutletContext&&this.ngTemplateOutletContext&&(this._viewRef.context=this.ngTemplateOutletContext)}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},standalone:!0,features:[o.TTD]}),v})();function Bt(v,A){return new o.vHH(2100,!1)}class An{createSubscription(A,D){return A.subscribe({next:D,error:H=>{throw H}})}dispose(A){A.unsubscribe()}}class Rn{createSubscription(A,D){return A.then(D,H=>{throw H})}dispose(A){}}const Pn=new Rn,ur=new An;let mr=(()=>{class v{constructor(D){this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null,this._ref=D}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(D){return this._obj?D!==this._obj?(this._dispose(),this.transform(D)):this._latestValue:(D&&this._subscribe(D),this._latestValue)}_subscribe(D){this._obj=D,this._strategy=this._selectStrategy(D),this._subscription=this._strategy.createSubscription(D,H=>this._updateLatestValue(D,H))}_selectStrategy(D){if((0,o.QGY)(D))return Pn;if((0,o.F4k)(D))return ur;throw Bt()}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(D,H){D===this._obj&&(this._latestValue=H,this._ref.markForCheck())}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.sBO,16))},v.\u0275pipe=o.Yjl({name:"async",type:v,pure:!1,standalone:!0}),v})();const xr=new o.OlP("DATE_PIPE_DEFAULT_TIMEZONE"),Or=new o.OlP("DATE_PIPE_DEFAULT_OPTIONS");let ar=(()=>{class v{constructor(D,H,ae){this.locale=D,this.defaultTimezone=H,this.defaultOptions=ae}transform(D,H,ae,$e){if(null==D||""===D||D!=D)return null;try{return Et(D,H??this.defaultOptions?.dateFormat??"mediumDate",$e||this.locale,ae??this.defaultOptions?.timezone??this.defaultTimezone??void 0)}catch(Xe){throw Bt()}}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.soG,16),o.Y36(xr,24),o.Y36(Or,24))},v.\u0275pipe=o.Yjl({name:"date",type:v,pure:!0,standalone:!0}),v})(),Gn=(()=>{class v{constructor(D){this._locale=D}transform(D,H,ae){if(!function vr(v){return!(null==v||""===v||v!=v)}(D))return null;ae=ae||this._locale;try{return function dn(v,A,D){return function cn(v,A,D,H,ae,$e,Xe=!1){let lt="",qt=!1;if(isFinite(v)){let Tt=function $n(v){let H,ae,$e,Xe,lt,A=Math.abs(v)+"",D=0;for((ae=A.indexOf("."))>-1&&(A=A.replace(".","")),($e=A.search(/e/i))>0?(ae<0&&(ae=$e),ae+=+A.slice($e+1),A=A.substring(0,$e)):ae<0&&(ae=A.length),$e=0;"0"===A.charAt($e);$e++);if($e===(lt=A.length))H=[0],ae=1;else{for(lt--;"0"===A.charAt(lt);)lt--;for(ae-=$e,H=[],Xe=0;$e<=lt;$e++,Xe++)H[Xe]=Number(A.charAt($e))}return ae>22&&(H=H.splice(0,21),D=ae-1,ae=1),{digits:H,exponent:D,integerLen:ae}}(v);Xe&&(Tt=function sr(v){if(0===v.digits[0])return v;const A=v.digits.length-v.integerLen;return v.exponent?v.exponent+=2:(0===A?v.digits.push(0,0):1===A&&v.digits.push(0),v.integerLen+=2),v}(Tt));let un=A.minInt,Jt=A.minFrac,Yn=A.maxFrac;if($e){const Mr=$e.match(ln);if(null===Mr)throw new Error(`${$e} is not a valid digit info`);const Lo=Mr[1],di=Mr[3],Ai=Mr[5];null!=Lo&&(un=xn(Lo)),null!=di&&(Jt=xn(di)),null!=Ai?Yn=xn(Ai):null!=di&&Jt>Yn&&(Yn=Jt)}!function Tn(v,A,D){if(A>D)throw new Error(`The minimum number of digits after fraction (${A}) is higher than the maximum (${D}).`);let H=v.digits,ae=H.length-v.integerLen;const $e=Math.min(Math.max(A,ae),D);let Xe=$e+v.integerLen,lt=H[Xe];if(Xe>0){H.splice(Math.max(v.integerLen,Xe));for(let Jt=Xe;Jt=5)if(Xe-1<0){for(let Jt=0;Jt>Xe;Jt--)H.unshift(0),v.integerLen++;H.unshift(1),v.integerLen++}else H[Xe-1]++;for(;ae=Tt?Wn.pop():qt=!1),Yn>=10?1:0},0);un&&(H.unshift(un),v.integerLen++)}(Tt,Jt,Yn);let yn=Tt.digits,Wn=Tt.integerLen;const Eo=Tt.exponent;let pr=[];for(qt=yn.every(Mr=>!Mr);Wn0?pr=yn.splice(Wn,yn.length):(pr=yn,yn=[0]);const Vr=[];for(yn.length>=A.lgSize&&Vr.unshift(yn.splice(-A.lgSize,yn.length).join(""));yn.length>A.gSize;)Vr.unshift(yn.splice(-A.gSize,yn.length).join(""));yn.length&&Vr.unshift(yn.join("")),lt=Vr.join(et(D,H)),pr.length&&(lt+=et(D,ae)+pr.join("")),Eo&&(lt+=et(D,O.Exponential)+"+"+Eo)}else lt=et(D,O.Infinity);return lt=v<0&&!qt?A.negPre+lt+A.negSuf:A.posPre+lt+A.posSuf,lt}(v,function er(v,A="-"){const D={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},H=v.split(";"),ae=H[0],$e=H[1],Xe=-1!==ae.indexOf(".")?ae.split("."):[ae.substring(0,ae.lastIndexOf("0")+1),ae.substring(ae.lastIndexOf("0")+1)],lt=Xe[0],qt=Xe[1]||"";D.posPre=lt.substring(0,lt.indexOf("#"));for(let un=0;un{class v{transform(D,H,ae){if(null==D)return null;if(!this.supports(D))throw Bt();return D.slice(H,ae)}supports(D){return"string"==typeof D||Array.isArray(D)}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275pipe=o.Yjl({name:"slice",type:v,pure:!1,standalone:!0}),v})(),vo=(()=>{class v{}return v.\u0275fac=function(D){return new(D||v)},v.\u0275mod=o.oAB({type:v}),v.\u0275inj=o.cJS({}),v})();const yo="browser";let zr=(()=>{class v{}return v.\u0275prov=(0,o.Yz7)({token:v,providedIn:"root",factory:()=>new Do((0,o.LFG)(M),window)}),v})();class Do{constructor(A,D){this.document=A,this.window=D,this.offset=()=>[0,0]}setOffset(A){this.offset=Array.isArray(A)?()=>A:A}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(A){this.supportsScrolling()&&this.window.scrollTo(A[0],A[1])}scrollToAnchor(A){if(!this.supportsScrolling())return;const D=function Yr(v,A){const D=v.getElementById(A)||v.getElementsByName(A)[0];if(D)return D;if("function"==typeof v.createTreeWalker&&v.body&&(v.body.createShadowRoot||v.body.attachShadow)){const H=v.createTreeWalker(v.body,NodeFilter.SHOW_ELEMENT);let ae=H.currentNode;for(;ae;){const $e=ae.shadowRoot;if($e){const Xe=$e.getElementById(A)||$e.querySelector(`[name="${A}"]`);if(Xe)return Xe}ae=H.nextNode()}}return null}(this.document,A);D&&(this.scrollToElement(D),D.focus())}setHistoryScrollRestoration(A){if(this.supportScrollRestoration()){const D=this.window.history;D&&D.scrollRestoration&&(D.scrollRestoration=A)}}scrollToElement(A){const D=A.getBoundingClientRect(),H=D.left+this.window.pageXOffset,ae=D.top+this.window.pageYOffset,$e=this.offset();this.window.scrollTo(H-$e[0],ae-$e[1])}supportScrollRestoration(){try{if(!this.supportsScrolling())return!1;const A=Gr(this.window.history)||Gr(Object.getPrototypeOf(this.window.history));return!(!A||!A.writable&&!A.set)}catch{return!1}}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}function Gr(v){return Object.getOwnPropertyDescriptor(v,"scrollRestoration")}class hr{}},529:(Qe,Fe,w)=>{"use strict";w.d(Fe,{JF:()=>jn,TP:()=>de,WM:()=>Y,eN:()=>ce});var o=w(6895),x=w(8274),N=w(9646),ge=w(9751),R=w(4351),W=w(9300),M=w(4004);class U{}class _{}class Y{constructor(se){this.normalizedNames=new Map,this.lazyUpdate=null,se?this.lazyInit="string"==typeof se?()=>{this.headers=new Map,se.split("\n").forEach(ye=>{const He=ye.indexOf(":");if(He>0){const Ye=ye.slice(0,He),pt=Ye.toLowerCase(),vt=ye.slice(He+1).trim();this.maybeSetNormalizedName(Ye,pt),this.headers.has(pt)?this.headers.get(pt).push(vt):this.headers.set(pt,[vt])}})}:()=>{this.headers=new Map,Object.keys(se).forEach(ye=>{let He=se[ye];const Ye=ye.toLowerCase();"string"==typeof He&&(He=[He]),He.length>0&&(this.headers.set(Ye,He),this.maybeSetNormalizedName(ye,Ye))})}:this.headers=new Map}has(se){return this.init(),this.headers.has(se.toLowerCase())}get(se){this.init();const ye=this.headers.get(se.toLowerCase());return ye&&ye.length>0?ye[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(se){return this.init(),this.headers.get(se.toLowerCase())||null}append(se,ye){return this.clone({name:se,value:ye,op:"a"})}set(se,ye){return this.clone({name:se,value:ye,op:"s"})}delete(se,ye){return this.clone({name:se,value:ye,op:"d"})}maybeSetNormalizedName(se,ye){this.normalizedNames.has(ye)||this.normalizedNames.set(ye,se)}init(){this.lazyInit&&(this.lazyInit instanceof Y?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(se=>this.applyUpdate(se)),this.lazyUpdate=null))}copyFrom(se){se.init(),Array.from(se.headers.keys()).forEach(ye=>{this.headers.set(ye,se.headers.get(ye)),this.normalizedNames.set(ye,se.normalizedNames.get(ye))})}clone(se){const ye=new Y;return ye.lazyInit=this.lazyInit&&this.lazyInit instanceof Y?this.lazyInit:this,ye.lazyUpdate=(this.lazyUpdate||[]).concat([se]),ye}applyUpdate(se){const ye=se.name.toLowerCase();switch(se.op){case"a":case"s":let He=se.value;if("string"==typeof He&&(He=[He]),0===He.length)return;this.maybeSetNormalizedName(se.name,ye);const Ye=("a"===se.op?this.headers.get(ye):void 0)||[];Ye.push(...He),this.headers.set(ye,Ye);break;case"d":const pt=se.value;if(pt){let vt=this.headers.get(ye);if(!vt)return;vt=vt.filter(Ht=>-1===pt.indexOf(Ht)),0===vt.length?(this.headers.delete(ye),this.normalizedNames.delete(ye)):this.headers.set(ye,vt)}else this.headers.delete(ye),this.normalizedNames.delete(ye)}}forEach(se){this.init(),Array.from(this.normalizedNames.keys()).forEach(ye=>se(this.normalizedNames.get(ye),this.headers.get(ye)))}}class Z{encodeKey(se){return j(se)}encodeValue(se){return j(se)}decodeKey(se){return decodeURIComponent(se)}decodeValue(se){return decodeURIComponent(se)}}const B=/%(\d[a-f0-9])/gi,E={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function j(xe){return encodeURIComponent(xe).replace(B,(se,ye)=>E[ye]??se)}function P(xe){return`${xe}`}class K{constructor(se={}){if(this.updates=null,this.cloneFrom=null,this.encoder=se.encoder||new Z,se.fromString){if(se.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function S(xe,se){const ye=new Map;return xe.length>0&&xe.replace(/^\?/,"").split("&").forEach(Ye=>{const pt=Ye.indexOf("="),[vt,Ht]=-1==pt?[se.decodeKey(Ye),""]:[se.decodeKey(Ye.slice(0,pt)),se.decodeValue(Ye.slice(pt+1))],_t=ye.get(vt)||[];_t.push(Ht),ye.set(vt,_t)}),ye}(se.fromString,this.encoder)}else se.fromObject?(this.map=new Map,Object.keys(se.fromObject).forEach(ye=>{const He=se.fromObject[ye],Ye=Array.isArray(He)?He.map(P):[P(He)];this.map.set(ye,Ye)})):this.map=null}has(se){return this.init(),this.map.has(se)}get(se){this.init();const ye=this.map.get(se);return ye?ye[0]:null}getAll(se){return this.init(),this.map.get(se)||null}keys(){return this.init(),Array.from(this.map.keys())}append(se,ye){return this.clone({param:se,value:ye,op:"a"})}appendAll(se){const ye=[];return Object.keys(se).forEach(He=>{const Ye=se[He];Array.isArray(Ye)?Ye.forEach(pt=>{ye.push({param:He,value:pt,op:"a"})}):ye.push({param:He,value:Ye,op:"a"})}),this.clone(ye)}set(se,ye){return this.clone({param:se,value:ye,op:"s"})}delete(se,ye){return this.clone({param:se,value:ye,op:"d"})}toString(){return this.init(),this.keys().map(se=>{const ye=this.encoder.encodeKey(se);return this.map.get(se).map(He=>ye+"="+this.encoder.encodeValue(He)).join("&")}).filter(se=>""!==se).join("&")}clone(se){const ye=new K({encoder:this.encoder});return ye.cloneFrom=this.cloneFrom||this,ye.updates=(this.updates||[]).concat(se),ye}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(se=>this.map.set(se,this.cloneFrom.map.get(se))),this.updates.forEach(se=>{switch(se.op){case"a":case"s":const ye=("a"===se.op?this.map.get(se.param):void 0)||[];ye.push(P(se.value)),this.map.set(se.param,ye);break;case"d":if(void 0===se.value){this.map.delete(se.param);break}{let He=this.map.get(se.param)||[];const Ye=He.indexOf(P(se.value));-1!==Ye&&He.splice(Ye,1),He.length>0?this.map.set(se.param,He):this.map.delete(se.param)}}}),this.cloneFrom=this.updates=null)}}class ke{constructor(){this.map=new Map}set(se,ye){return this.map.set(se,ye),this}get(se){return this.map.has(se)||this.map.set(se,se.defaultValue()),this.map.get(se)}delete(se){return this.map.delete(se),this}has(se){return this.map.has(se)}keys(){return this.map.keys()}}function ie(xe){return typeof ArrayBuffer<"u"&&xe instanceof ArrayBuffer}function Be(xe){return typeof Blob<"u"&&xe instanceof Blob}function re(xe){return typeof FormData<"u"&&xe instanceof FormData}class be{constructor(se,ye,He,Ye){let pt;if(this.url=ye,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=se.toUpperCase(),function Te(xe){switch(xe){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||Ye?(this.body=void 0!==He?He:null,pt=Ye):pt=He,pt&&(this.reportProgress=!!pt.reportProgress,this.withCredentials=!!pt.withCredentials,pt.responseType&&(this.responseType=pt.responseType),pt.headers&&(this.headers=pt.headers),pt.context&&(this.context=pt.context),pt.params&&(this.params=pt.params)),this.headers||(this.headers=new Y),this.context||(this.context=new ke),this.params){const vt=this.params.toString();if(0===vt.length)this.urlWithParams=ye;else{const Ht=ye.indexOf("?");this.urlWithParams=ye+(-1===Ht?"?":Htmn.set(ln,se.setHeaders[ln]),_t)),se.setParams&&(tn=Object.keys(se.setParams).reduce((mn,ln)=>mn.set(ln,se.setParams[ln]),tn)),new be(ye,He,pt,{params:tn,headers:_t,context:Ln,reportProgress:Ht,responseType:Ye,withCredentials:vt})}}var Ne=(()=>((Ne=Ne||{})[Ne.Sent=0]="Sent",Ne[Ne.UploadProgress=1]="UploadProgress",Ne[Ne.ResponseHeader=2]="ResponseHeader",Ne[Ne.DownloadProgress=3]="DownloadProgress",Ne[Ne.Response=4]="Response",Ne[Ne.User=5]="User",Ne))();class Q{constructor(se,ye=200,He="OK"){this.headers=se.headers||new Y,this.status=void 0!==se.status?se.status:ye,this.statusText=se.statusText||He,this.url=se.url||null,this.ok=this.status>=200&&this.status<300}}class T extends Q{constructor(se={}){super(se),this.type=Ne.ResponseHeader}clone(se={}){return new T({headers:se.headers||this.headers,status:void 0!==se.status?se.status:this.status,statusText:se.statusText||this.statusText,url:se.url||this.url||void 0})}}class k extends Q{constructor(se={}){super(se),this.type=Ne.Response,this.body=void 0!==se.body?se.body:null}clone(se={}){return new k({body:void 0!==se.body?se.body:this.body,headers:se.headers||this.headers,status:void 0!==se.status?se.status:this.status,statusText:se.statusText||this.statusText,url:se.url||this.url||void 0})}}class O extends Q{constructor(se){super(se,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${se.url||"(unknown url)"}`:`Http failure response for ${se.url||"(unknown url)"}: ${se.status} ${se.statusText}`,this.error=se.error||null}}function te(xe,se){return{body:se,headers:xe.headers,context:xe.context,observe:xe.observe,params:xe.params,reportProgress:xe.reportProgress,responseType:xe.responseType,withCredentials:xe.withCredentials}}let ce=(()=>{class xe{constructor(ye){this.handler=ye}request(ye,He,Ye={}){let pt;if(ye instanceof be)pt=ye;else{let _t,tn;_t=Ye.headers instanceof Y?Ye.headers:new Y(Ye.headers),Ye.params&&(tn=Ye.params instanceof K?Ye.params:new K({fromObject:Ye.params})),pt=new be(ye,He,void 0!==Ye.body?Ye.body:null,{headers:_t,context:Ye.context,params:tn,reportProgress:Ye.reportProgress,responseType:Ye.responseType||"json",withCredentials:Ye.withCredentials})}const vt=(0,N.of)(pt).pipe((0,R.b)(_t=>this.handler.handle(_t)));if(ye instanceof be||"events"===Ye.observe)return vt;const Ht=vt.pipe((0,W.h)(_t=>_t instanceof k));switch(Ye.observe||"body"){case"body":switch(pt.responseType){case"arraybuffer":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&!(_t.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return _t.body}));case"blob":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&!(_t.body instanceof Blob))throw new Error("Response is not a Blob.");return _t.body}));case"text":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&"string"!=typeof _t.body)throw new Error("Response is not a string.");return _t.body}));default:return Ht.pipe((0,M.U)(_t=>_t.body))}case"response":return Ht;default:throw new Error(`Unreachable: unhandled observe type ${Ye.observe}}`)}}delete(ye,He={}){return this.request("DELETE",ye,He)}get(ye,He={}){return this.request("GET",ye,He)}head(ye,He={}){return this.request("HEAD",ye,He)}jsonp(ye,He){return this.request("JSONP",ye,{params:(new K).append(He,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(ye,He={}){return this.request("OPTIONS",ye,He)}patch(ye,He,Ye={}){return this.request("PATCH",ye,te(Ye,He))}post(ye,He,Ye={}){return this.request("POST",ye,te(Ye,He))}put(ye,He,Ye={}){return this.request("PUT",ye,te(Ye,He))}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(U))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();function Ae(xe,se){return se(xe)}function De(xe,se){return(ye,He)=>se.intercept(ye,{handle:Ye=>xe(Ye,He)})}const de=new x.OlP("HTTP_INTERCEPTORS"),ne=new x.OlP("HTTP_INTERCEPTOR_FNS");function Ee(){let xe=null;return(se,ye)=>(null===xe&&(xe=((0,x.f3M)(de,{optional:!0})??[]).reduceRight(De,Ae)),xe(se,ye))}let Ce=(()=>{class xe extends U{constructor(ye,He){super(),this.backend=ye,this.injector=He,this.chain=null}handle(ye){if(null===this.chain){const He=Array.from(new Set(this.injector.get(ne)));this.chain=He.reduceRight((Ye,pt)=>function ue(xe,se,ye){return(He,Ye)=>ye.runInContext(()=>se(He,pt=>xe(pt,Ye)))}(Ye,pt,this.injector),Ae)}return this.chain(ye,He=>this.backend.handle(He))}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(_),x.LFG(x.lqb))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();const Pt=/^\)\]\}',?\n/;let it=(()=>{class xe{constructor(ye){this.xhrFactory=ye}handle(ye){if("JSONP"===ye.method)throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");return new ge.y(He=>{const Ye=this.xhrFactory.build();if(Ye.open(ye.method,ye.urlWithParams),ye.withCredentials&&(Ye.withCredentials=!0),ye.headers.forEach((Ft,_e)=>Ye.setRequestHeader(Ft,_e.join(","))),ye.headers.has("Accept")||Ye.setRequestHeader("Accept","application/json, text/plain, */*"),!ye.headers.has("Content-Type")){const Ft=ye.detectContentTypeHeader();null!==Ft&&Ye.setRequestHeader("Content-Type",Ft)}if(ye.responseType){const Ft=ye.responseType.toLowerCase();Ye.responseType="json"!==Ft?Ft:"text"}const pt=ye.serializeBody();let vt=null;const Ht=()=>{if(null!==vt)return vt;const Ft=Ye.statusText||"OK",_e=new Y(Ye.getAllResponseHeaders()),fe=function Ut(xe){return"responseURL"in xe&&xe.responseURL?xe.responseURL:/^X-Request-URL:/m.test(xe.getAllResponseHeaders())?xe.getResponseHeader("X-Request-URL"):null}(Ye)||ye.url;return vt=new T({headers:_e,status:Ye.status,statusText:Ft,url:fe}),vt},_t=()=>{let{headers:Ft,status:_e,statusText:fe,url:ee}=Ht(),Se=null;204!==_e&&(Se=typeof Ye.response>"u"?Ye.responseText:Ye.response),0===_e&&(_e=Se?200:0);let Le=_e>=200&&_e<300;if("json"===ye.responseType&&"string"==typeof Se){const yt=Se;Se=Se.replace(Pt,"");try{Se=""!==Se?JSON.parse(Se):null}catch(It){Se=yt,Le&&(Le=!1,Se={error:It,text:Se})}}Le?(He.next(new k({body:Se,headers:Ft,status:_e,statusText:fe,url:ee||void 0})),He.complete()):He.error(new O({error:Se,headers:Ft,status:_e,statusText:fe,url:ee||void 0}))},tn=Ft=>{const{url:_e}=Ht(),fe=new O({error:Ft,status:Ye.status||0,statusText:Ye.statusText||"Unknown Error",url:_e||void 0});He.error(fe)};let Ln=!1;const mn=Ft=>{Ln||(He.next(Ht()),Ln=!0);let _e={type:Ne.DownloadProgress,loaded:Ft.loaded};Ft.lengthComputable&&(_e.total=Ft.total),"text"===ye.responseType&&!!Ye.responseText&&(_e.partialText=Ye.responseText),He.next(_e)},ln=Ft=>{let _e={type:Ne.UploadProgress,loaded:Ft.loaded};Ft.lengthComputable&&(_e.total=Ft.total),He.next(_e)};return Ye.addEventListener("load",_t),Ye.addEventListener("error",tn),Ye.addEventListener("timeout",tn),Ye.addEventListener("abort",tn),ye.reportProgress&&(Ye.addEventListener("progress",mn),null!==pt&&Ye.upload&&Ye.upload.addEventListener("progress",ln)),Ye.send(pt),He.next({type:Ne.Sent}),()=>{Ye.removeEventListener("error",tn),Ye.removeEventListener("abort",tn),Ye.removeEventListener("load",_t),Ye.removeEventListener("timeout",tn),ye.reportProgress&&(Ye.removeEventListener("progress",mn),null!==pt&&Ye.upload&&Ye.upload.removeEventListener("progress",ln)),Ye.readyState!==Ye.DONE&&Ye.abort()}})}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(o.JF))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();const Xt=new x.OlP("XSRF_ENABLED"),kt="XSRF-TOKEN",Vt=new x.OlP("XSRF_COOKIE_NAME",{providedIn:"root",factory:()=>kt}),rn="X-XSRF-TOKEN",Vn=new x.OlP("XSRF_HEADER_NAME",{providedIn:"root",factory:()=>rn});class en{}let gt=(()=>{class xe{constructor(ye,He,Ye){this.doc=ye,this.platform=He,this.cookieName=Ye,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const ye=this.doc.cookie||"";return ye!==this.lastCookieString&&(this.parseCount++,this.lastToken=(0,o.Mx)(ye,this.cookieName),this.lastCookieString=ye),this.lastToken}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(o.K0),x.LFG(x.Lbi),x.LFG(Vt))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();function Yt(xe,se){const ye=xe.url.toLowerCase();if(!(0,x.f3M)(Xt)||"GET"===xe.method||"HEAD"===xe.method||ye.startsWith("http://")||ye.startsWith("https://"))return se(xe);const He=(0,x.f3M)(en).getToken(),Ye=(0,x.f3M)(Vn);return null!=He&&!xe.headers.has(Ye)&&(xe=xe.clone({headers:xe.headers.set(Ye,He)})),se(xe)}var nt=(()=>((nt=nt||{})[nt.Interceptors=0]="Interceptors",nt[nt.LegacyInterceptors=1]="LegacyInterceptors",nt[nt.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",nt[nt.NoXsrfProtection=3]="NoXsrfProtection",nt[nt.JsonpSupport=4]="JsonpSupport",nt[nt.RequestsMadeViaParent=5]="RequestsMadeViaParent",nt))();function Et(xe,se){return{\u0275kind:xe,\u0275providers:se}}function ut(...xe){const se=[ce,it,Ce,{provide:U,useExisting:Ce},{provide:_,useExisting:it},{provide:ne,useValue:Yt,multi:!0},{provide:Xt,useValue:!0},{provide:en,useClass:gt}];for(const ye of xe)se.push(...ye.\u0275providers);return(0,x.MR2)(se)}const qe=new x.OlP("LEGACY_INTERCEPTOR_FN");function gn({cookieName:xe,headerName:se}){const ye=[];return void 0!==xe&&ye.push({provide:Vt,useValue:xe}),void 0!==se&&ye.push({provide:Vn,useValue:se}),Et(nt.CustomXsrfConfiguration,ye)}let jn=(()=>{class xe{}return xe.\u0275fac=function(ye){return new(ye||xe)},xe.\u0275mod=x.oAB({type:xe}),xe.\u0275inj=x.cJS({providers:[ut(Et(nt.LegacyInterceptors,[{provide:qe,useFactory:Ee},{provide:ne,useExisting:qe,multi:!0}]),gn({cookieName:kt,headerName:rn}))]}),xe})()},8274:(Qe,Fe,w)=>{"use strict";w.d(Fe,{tb:()=>qg,AFp:()=>Wg,ip1:()=>Yg,CZH:()=>ll,hGG:()=>T_,z2F:()=>ul,sBO:()=>h_,Sil:()=>KC,_Vd:()=>Zs,EJc:()=>YC,Xts:()=>Jl,SBq:()=>Js,lqb:()=>Ni,qLn:()=>Qs,vpe:()=>zo,XFs:()=>gt,OlP:()=>_n,zs3:()=>Li,ZZ4:()=>ku,aQg:()=>Nu,soG:()=>cl,YKP:()=>Wp,h0i:()=>Es,PXZ:()=>a_,R0b:()=>uo,FiY:()=>Hs,Lbi:()=>UC,g9A:()=>Xg,Qsj:()=>sy,FYo:()=>hf,JOm:()=>Bo,tp0:()=>js,Rgc:()=>ha,dDg:()=>r_,eoX:()=>rm,GfV:()=>pf,s_b:()=>il,ifc:()=>ee,MMx:()=>uu,Lck:()=>Ub,eFA:()=>sm,G48:()=>f_,Gpc:()=>j,f3M:()=>pt,MR2:()=>Gv,_c5:()=>A_,c2e:()=>zC,zSh:()=>nc,wAp:()=>Ot,vHH:()=>ie,lri:()=>tm,rWj:()=>nm,D6c:()=>x_,cg1:()=>nu,kL8:()=>yp,dqk:()=>Ct,Z0I:()=>Pt,sIi:()=>ra,CqO:()=>Eh,QGY:()=>Wc,QP$:()=>Un,F4k:()=>wh,RDi:()=>wv,AaK:()=>S,qOj:()=>Lc,TTD:()=>kr,_Bn:()=>Yp,jDz:()=>Xp,xp6:()=>_f,uIk:()=>Vc,Tol:()=>Wh,ekj:()=>Zc,Suo:()=>_g,Xpm:()=>sr,lG2:()=>cr,Yz7:()=>wt,cJS:()=>Kt,oAB:()=>vn,Yjl:()=>gr,Y36:()=>us,_UZ:()=>Uc,GkF:()=>Yc,qZA:()=>qa,TgZ:()=>Xa,EpF:()=>_h,n5z:()=>$s,LFG:()=>He,$8M:()=>Vs,$Z:()=>kf,NdJ:()=>Kc,CRH:()=>wg,oxw:()=>Th,ALo:()=>dg,lcZ:()=>fg,xi3:()=>hg,Dn7:()=>pg,Hsn:()=>Oh,F$t:()=>xh,Q6J:()=>Hc,MGl:()=>Za,hYB:()=>Xc,VKq:()=>ng,WLB:()=>rg,kEZ:()=>og,HTZ:()=>ig,iGM:()=>bg,MAs:()=>Ch,KtG:()=>Dr,evT:()=>gf,CHM:()=>yr,oJD:()=>qd,P3R:()=>Qd,kYT:()=>tr,Udp:()=>qc,YNc:()=>bh,W1O:()=>Mg,_uU:()=>ep,Oqu:()=>Qc,hij:()=>Qa,AsE:()=>eu,lnq:()=>tu,Gf:()=>Cg});var o=w(7579),x=w(727),N=w(9751),ge=w(8189),R=w(8421),W=w(515),M=w(3269),U=w(2076),Y=w(3099);function G(e){for(let t in e)if(e[t]===G)return t;throw Error("Could not find renamed property on target object.")}function Z(e,t){for(const n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function S(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(S).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function B(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const E=G({__forward_ref__:G});function j(e){return e.__forward_ref__=j,e.toString=function(){return S(this())},e}function P(e){return K(e)?e():e}function K(e){return"function"==typeof e&&e.hasOwnProperty(E)&&e.__forward_ref__===j}function pe(e){return e&&!!e.\u0275providers}const Te="https://g.co/ng/security#xss";class ie extends Error{constructor(t,n){super(function Be(e,t){return`NG0${Math.abs(e)}${t?": "+t.trim():""}`}(t,n)),this.code=t}}function re(e){return"string"==typeof e?e:null==e?"":String(e)}function T(e,t){throw new ie(-201,!1)}function et(e,t){null==e&&function Ue(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function wt(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Kt(e){return{providers:e.providers||[],imports:e.imports||[]}}function pn(e){return Ut(e,Vt)||Ut(e,Vn)}function Pt(e){return null!==pn(e)}function Ut(e,t){return e.hasOwnProperty(t)?e[t]:null}function kt(e){return e&&(e.hasOwnProperty(rn)||e.hasOwnProperty(en))?e[rn]:null}const Vt=G({\u0275prov:G}),rn=G({\u0275inj:G}),Vn=G({ngInjectableDef:G}),en=G({ngInjectorDef:G});var gt=(()=>((gt=gt||{})[gt.Default=0]="Default",gt[gt.Host=1]="Host",gt[gt.Self=2]="Self",gt[gt.SkipSelf=4]="SkipSelf",gt[gt.Optional=8]="Optional",gt))();let Yt;function nt(e){const t=Yt;return Yt=e,t}function Et(e,t,n){const r=pn(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n>.Optional?null:void 0!==t?t:void T(S(e))}const Ct=(()=>typeof globalThis<"u"&&globalThis||typeof global<"u"&&global||typeof window<"u"&&window||typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self)(),Nt={},Hn="__NG_DI_FLAG__",zt="ngTempTokenPath",jn=/\n/gm,En="__source";let xe;function se(e){const t=xe;return xe=e,t}function ye(e,t=gt.Default){if(void 0===xe)throw new ie(-203,!1);return null===xe?Et(e,void 0,t):xe.get(e,t>.Optional?null:void 0,t)}function He(e,t=gt.Default){return(function ht(){return Yt}()||ye)(P(e),t)}function pt(e,t=gt.Default){return He(e,vt(t))}function vt(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Ht(e){const t=[];for(let n=0;n((Ft=Ft||{})[Ft.OnPush=0]="OnPush",Ft[Ft.Default=1]="Default",Ft))(),ee=(()=>{return(e=ee||(ee={}))[e.Emulated=0]="Emulated",e[e.None=2]="None",e[e.ShadowDom=3]="ShadowDom",ee;var e})();const Se={},Le=[],yt=G({\u0275cmp:G}),It=G({\u0275dir:G}),cn=G({\u0275pipe:G}),Dn=G({\u0275mod:G}),sn=G({\u0275fac:G}),dn=G({__NG_ELEMENT_ID__:G});let er=0;function sr(e){return ln(()=>{const n=!0===e.standalone,r={},i={type:e.type,providersResolver:null,decls:e.decls,vars:e.vars,factory:null,template:e.template||null,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:r,inputs:null,outputs:null,exportAs:e.exportAs||null,onPush:e.changeDetection===Ft.OnPush,directiveDefs:null,pipeDefs:null,standalone:n,dependencies:n&&e.dependencies||null,getStandaloneInjector:null,selectors:e.selectors||Le,viewQuery:e.viewQuery||null,features:e.features||null,data:e.data||{},encapsulation:e.encapsulation||ee.Emulated,id:"c"+er++,styles:e.styles||Le,_:null,setInput:null,schemas:e.schemas||null,tView:null,findHostDirectiveDefs:null,hostDirectives:null},l=e.dependencies,u=e.features;return i.inputs=Ir(e.inputs,r),i.outputs=Ir(e.outputs),u&&u.forEach(p=>p(i)),i.directiveDefs=l?()=>("function"==typeof l?l():l).map(Tn).filter(xn):null,i.pipeDefs=l?()=>("function"==typeof l?l():l).map(Qt).filter(xn):null,i})}function Tn(e){return $t(e)||fn(e)}function xn(e){return null!==e}function vn(e){return ln(()=>({type:e.type,bootstrap:e.bootstrap||Le,declarations:e.declarations||Le,imports:e.imports||Le,exports:e.exports||Le,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function tr(e,t){return ln(()=>{const n=On(e,!0);n.declarations=t.declarations||Le,n.imports=t.imports||Le,n.exports=t.exports||Le})}function Ir(e,t){if(null==e)return Se;const n={};for(const r in e)if(e.hasOwnProperty(r)){let i=e[r],l=i;Array.isArray(i)&&(l=i[1],i=i[0]),n[i]=r,t&&(t[i]=l)}return n}const cr=sr;function gr(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,standalone:!0===e.standalone,onDestroy:e.type.prototype.ngOnDestroy||null}}function $t(e){return e[yt]||null}function fn(e){return e[It]||null}function Qt(e){return e[cn]||null}function Un(e){const t=$t(e)||fn(e)||Qt(e);return null!==t&&t.standalone}function On(e,t){const n=e[Dn]||null;if(!n&&!0===t)throw new Error(`Type ${S(e)} does not have '\u0275mod' property.`);return n}function Fn(e){return Array.isArray(e)&&"object"==typeof e[1]}function zn(e){return Array.isArray(e)&&!0===e[1]}function qn(e){return 0!=(4&e.flags)}function dr(e){return e.componentOffset>-1}function Sr(e){return 1==(1&e.flags)}function Gn(e){return null!==e.template}function go(e){return 0!=(256&e[2])}function nr(e,t){return e.hasOwnProperty(sn)?e[sn]:null}class li{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function kr(){return bo}function bo(e){return e.type.prototype.ngOnChanges&&(e.setInput=Wr),Wo}function Wo(){const e=Qr(this),t=e?.current;if(t){const n=e.previous;if(n===Se)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function Wr(e,t,n,r){const i=this.declaredInputs[n],l=Qr(e)||function eo(e,t){return e[Co]=t}(e,{previous:Se,current:null}),u=l.current||(l.current={}),p=l.previous,y=p[i];u[i]=new li(y&&y.currentValue,t,p===Se),e[r]=t}kr.ngInherit=!0;const Co="__ngSimpleChanges__";function Qr(e){return e[Co]||null}function Sn(e){for(;Array.isArray(e);)e=e[0];return e}function ko(e,t){return Sn(t[e])}function Jn(e,t){return Sn(t[e.index])}function Kr(e,t){return e.data[t]}function no(e,t){return e[t]}function rr(e,t){const n=t[e];return Fn(n)?n:n[0]}function hn(e){return 64==(64&e[2])}function C(e,t){return null==t?null:e[t]}function s(e){e[18]=0}function c(e,t){e[5]+=t;let n=e,r=e[3];for(;null!==r&&(1===t&&1===n[5]||-1===t&&0===n[5]);)r[5]+=t,n=r,r=r[3]}const a={lFrame:A(null),bindingsEnabled:!0};function Dt(){return a.bindingsEnabled}function Ve(){return a.lFrame.lView}function At(){return a.lFrame.tView}function yr(e){return a.lFrame.contextLView=e,e[8]}function Dr(e){return a.lFrame.contextLView=null,e}function Mn(){let e=$r();for(;null!==e&&64===e.type;)e=e.parent;return e}function $r(){return a.lFrame.currentTNode}function br(e,t){const n=a.lFrame;n.currentTNode=e,n.isParent=t}function zi(){return a.lFrame.isParent}function ci(){a.lFrame.isParent=!1}function lr(){const e=a.lFrame;let t=e.bindingRootIndex;return-1===t&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function oo(){return a.lFrame.bindingIndex}function io(){return a.lFrame.bindingIndex++}function Br(e){const t=a.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function ui(e,t){const n=a.lFrame;n.bindingIndex=n.bindingRootIndex=e,No(t)}function No(e){a.lFrame.currentDirectiveIndex=e}function Os(){return a.lFrame.currentQueryIndex}function Wi(e){a.lFrame.currentQueryIndex=e}function ma(e){const t=e[1];return 2===t.type?t.declTNode:1===t.type?e[6]:null}function Rs(e,t,n){if(n>.SkipSelf){let i=t,l=e;for(;!(i=i.parent,null!==i||n>.Host||(i=ma(l),null===i||(l=l[15],10&i.type))););if(null===i)return!1;t=i,e=l}const r=a.lFrame=v();return r.currentTNode=t,r.lView=e,!0}function Ki(e){const t=v(),n=e[1];a.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function v(){const e=a.lFrame,t=null===e?null:e.child;return null===t?A(e):t}function A(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function D(){const e=a.lFrame;return a.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const H=D;function ae(){const e=D();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function lt(){return a.lFrame.selectedIndex}function qt(e){a.lFrame.selectedIndex=e}function Tt(){const e=a.lFrame;return Kr(e.tView,e.selectedIndex)}function pr(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[y]<0&&(e[18]+=65536),(p>11>16&&(3&e[2])===t){e[2]+=2048;try{l.call(p)}finally{}}}else try{l.call(p)}finally{}}class fi{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function pi(e,t,n){let r=0;for(;rt){u=l-1;break}}}for(;l>16}(e),r=t;for(;n>0;)r=r[15],n--;return r}let qi=!0;function Zi(e){const t=qi;return qi=e,t}let yl=0;const Xr={};function Ji(e,t){const n=ks(e,t);if(-1!==n)return n;const r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,mi(r.data,e),mi(t,null),mi(r.blueprint,null));const i=Qi(e,t),l=e.injectorIndex;if(ba(i)){const u=Zo(i),p=gi(i,t),y=p[1].data;for(let I=0;I<8;I++)t[l+I]=p[u+I]|y[u+I]}return t[l+8]=i,l}function mi(e,t){e.push(0,0,0,0,0,0,0,0,t)}function ks(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function Qi(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,i=t;for(;null!==i;){if(r=Ia(i),null===r)return-1;if(n++,i=i[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return-1}function es(e,t,n){!function or(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(dn)&&(r=n[dn]),null==r&&(r=n[dn]=yl++);const i=255&r;t.data[e+(i>>5)]|=1<=0?255&t:Xu:t}(n);if("function"==typeof l){if(!Rs(t,e,r))return r>.Host?bl(i,0,r):wa(t,n,r,i);try{const u=l(r);if(null!=u||r>.Optional)return u;T()}finally{H()}}else if("number"==typeof l){let u=null,p=ks(e,t),y=-1,I=r>.Host?t[16][6]:null;for((-1===p||r>.SkipSelf)&&(y=-1===p?Qi(e,t):t[p+8],-1!==y&&Ea(r,!1)?(u=t[1],p=Zo(y),t=gi(y,t)):p=-1);-1!==p;){const V=t[1];if(ns(l,p,V.data)){const J=vi(p,t,n,u,r,I);if(J!==Xr)return J}y=t[p+8],-1!==y&&Ea(r,t[1].data[p+8]===I)&&ns(l,p,t)?(u=V,p=Zo(y),t=gi(y,t)):p=-1}}return i}function vi(e,t,n,r,i,l){const u=t[1],p=u.data[e+8],V=Ls(p,u,n,null==r?dr(p)&&qi:r!=u&&0!=(3&p.type),i>.Host&&l===p);return null!==V?Jo(t,u,V,p):Xr}function Ls(e,t,n,r,i){const l=e.providerIndexes,u=t.data,p=1048575&l,y=e.directiveStart,V=l>>20,me=i?p+V:e.directiveEnd;for(let Oe=r?p:p+V;Oe=y&&Ge.type===n)return Oe}if(i){const Oe=u[y];if(Oe&&Gn(Oe)&&Oe.type===n)return y}return null}function Jo(e,t,n,r){let i=e[n];const l=t.data;if(function gl(e){return e instanceof fi}(i)){const u=i;u.resolving&&function be(e,t){const n=t?`. Dependency path: ${t.join(" > ")} > ${e}`:"";throw new ie(-200,`Circular dependency in DI detected for ${e}${n}`)}(function oe(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():re(e)}(l[n]));const p=Zi(u.canSeeViewProviders);u.resolving=!0;const y=u.injectImpl?nt(u.injectImpl):null;Rs(e,r,gt.Default);try{i=e[n]=u.factory(void 0,l,e,r),t.firstCreatePass&&n>=r.directiveStart&&function Eo(e,t,n){const{ngOnChanges:r,ngOnInit:i,ngDoCheck:l}=t.type.prototype;if(r){const u=bo(t);(n.preOrderHooks||(n.preOrderHooks=[])).push(e,u),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,u)}i&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-e,i),l&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,l),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,l))}(n,l[n],t)}finally{null!==y&&nt(y),Zi(p),u.resolving=!1,H()}}return i}function ns(e,t,n){return!!(n[t+(e>>5)]&1<{const t=e.prototype.constructor,n=t[sn]||rs(t),r=Object.prototype;let i=Object.getPrototypeOf(e.prototype).constructor;for(;i&&i!==r;){const l=i[sn]||rs(i);if(l&&l!==n)return l;i=Object.getPrototypeOf(i)}return l=>new l})}function rs(e){return K(e)?()=>{const t=rs(P(e));return t&&t()}:nr(e)}function Ia(e){const t=e[1],n=t.type;return 2===n?t.declTNode:1===n?e[6]:null}function Vs(e){return function Dl(e,t){if("class"===t)return e.classes;if("style"===t)return e.styles;const n=e.attrs;if(n){const r=n.length;let i=0;for(;i{const r=function ei(e){return function(...n){if(e){const r=e(...n);for(const i in r)this[i]=r[i]}}}(t);function i(...l){if(this instanceof i)return r.apply(this,l),this;const u=new i(...l);return p.annotation=u,p;function p(y,I,V){const J=y.hasOwnProperty(Qo)?y[Qo]:Object.defineProperty(y,Qo,{value:[]})[Qo];for(;J.length<=V;)J.push(null);return(J[V]=J[V]||[]).push(u),y}}return n&&(i.prototype=Object.create(n.prototype)),i.prototype.ngMetadataName=e,i.annotationCls=i,i})}class _n{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=wt({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}function z(e,t){void 0===t&&(t=e);for(let n=0;nArray.isArray(n)?ve(n,t):t(n))}function We(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function ft(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function bt(e,t){const n=[];for(let r=0;r=0?e[1|r]=n:(r=~r,function lo(e,t,n,r){let i=e.length;if(i==t)e.push(n,r);else if(1===i)e.push(r,e[0]),e[0]=n;else{for(i--,e.push(e[i-1],e[i]);i>t;)e[i]=e[i-2],i--;e[t]=n,e[t+1]=r}}(e,r,t,n)),r}function Ri(e,t){const n=_i(e,t);if(n>=0)return e[1|n]}function _i(e,t){return function nd(e,t,n){let r=0,i=e.length>>n;for(;i!==r;){const l=r+(i-r>>1),u=e[l<t?i=l:r=l+1}return~(i<((Bo=Bo||{})[Bo.Important=1]="Important",Bo[Bo.DashCase=2]="DashCase",Bo))();const xl=new Map;let Gm=0;const Rl="__ngContext__";function _r(e,t){Fn(t)?(e[Rl]=t[20],function Wm(e){xl.set(e[20],e)}(t)):e[Rl]=t}function Fl(e,t){return undefined(e,t)}function Ys(e){const t=e[3];return zn(t)?t[3]:t}function kl(e){return wd(e[13])}function Nl(e){return wd(e[4])}function wd(e){for(;null!==e&&!zn(e);)e=e[4];return e}function is(e,t,n,r,i){if(null!=r){let l,u=!1;zn(r)?l=r:Fn(r)&&(u=!0,r=r[0]);const p=Sn(r);0===e&&null!==n?null==i?Td(t,n,p):Pi(t,n,p,i||null,!0):1===e&&null!==n?Pi(t,n,p,i||null,!0):2===e?function Ul(e,t,n){const r=Ta(e,t);r&&function pv(e,t,n,r){e.removeChild(t,n,r)}(e,r,t,n)}(t,p,u):3===e&&t.destroyNode(p),null!=l&&function vv(e,t,n,r,i){const l=n[7];l!==Sn(n)&&is(t,e,r,l,i);for(let p=10;p0&&(e[n-1][4]=r[4]);const l=ft(e,10+t);!function sv(e,t){Ws(e,t,t[11],2,null,null),t[0]=null,t[6]=null}(r[1],r);const u=l[19];null!==u&&u.detachView(l[1]),r[3]=null,r[4]=null,r[2]&=-65}return r}function Sd(e,t){if(!(128&t[2])){const n=t[11];n.destroyNode&&Ws(e,t,n,3,null,null),function cv(e){let t=e[13];if(!t)return Vl(e[1],e);for(;t;){let n=null;if(Fn(t))n=t[13];else{const r=t[10];r&&(n=r)}if(!n){for(;t&&!t[4]&&t!==e;)Fn(t)&&Vl(t[1],t),t=t[3];null===t&&(t=e),Fn(t)&&Vl(t[1],t),n=t&&t[4]}t=n}}(t)}}function Vl(e,t){if(!(128&t[2])){t[2]&=-65,t[2]|=128,function hv(e,t){let n;if(null!=e&&null!=(n=e.destroyHooks))for(let r=0;r=0?r[i=u]():r[i=-u].unsubscribe(),l+=2}else{const u=r[i=n[l+1]];n[l].call(u)}if(null!==r){for(let l=i+1;l-1){const{encapsulation:l}=e.data[r.directiveStart+i];if(l===ee.None||l===ee.Emulated)return null}return Jn(r,n)}}(e,t.parent,n)}function Pi(e,t,n,r,i){e.insertBefore(t,n,r,i)}function Td(e,t,n){e.appendChild(t,n)}function xd(e,t,n,r,i){null!==r?Pi(e,t,n,r,i):Td(e,t,n)}function Ta(e,t){return e.parentNode(t)}function Od(e,t,n){return Pd(e,t,n)}let Ra,Yl,Pa,Pd=function Rd(e,t,n){return 40&e.type?Jn(e,n):null};function xa(e,t,n,r){const i=Md(e,r,t),l=t[11],p=Od(r.parent||t[6],r,t);if(null!=i)if(Array.isArray(n))for(let y=0;ye,createScript:e=>e,createScriptURL:e=>e})}catch{}return Ra}()?.createHTML(e)||e}function wv(e){Yl=e}function Wl(){if(void 0===Pa&&(Pa=null,Ct.trustedTypes))try{Pa=Ct.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return Pa}function Vd(e){return Wl()?.createHTML(e)||e}function jd(e){return Wl()?.createScriptURL(e)||e}class Ud{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Te})`}}function wi(e){return e instanceof Ud?e.changingThisBreaksApplicationSecurity:e}function Ks(e,t){const n=function Tv(e){return e instanceof Ud&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${Te})`)}return n===t}class xv{constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{const n=(new window.DOMParser).parseFromString(Fi(t),"text/html").body;return null===n?this.inertDocumentHelper.getInertBodyElement(t):(n.removeChild(n.firstChild),n)}catch{return null}}}class Ov{constructor(t){if(this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),null==this.inertDocument.body){const n=this.inertDocument.createElement("html");this.inertDocument.appendChild(n);const r=this.inertDocument.createElement("body");n.appendChild(r)}}getInertBodyElement(t){const n=this.inertDocument.createElement("template");if("content"in n)return n.innerHTML=Fi(t),n;const r=this.inertDocument.createElement("body");return r.innerHTML=Fi(t),this.defaultDoc.documentMode&&this.stripCustomNsAttrs(r),r}stripCustomNsAttrs(t){const n=t.attributes;for(let i=n.length-1;0"),!0}endElement(t){const n=t.nodeName.toLowerCase();Xl.hasOwnProperty(n)&&!Gd.hasOwnProperty(n)&&(this.buf.push(""))}chars(t){this.buf.push(Xd(t))}checkClobberedElement(t,n){if(n&&(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${t.outerHTML}`);return n}}const Nv=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Lv=/([^\#-~ |!])/g;function Xd(e){return e.replace(/&/g,"&").replace(Nv,function(t){return"&#"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+";"}).replace(Lv,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}let Fa;function Zl(e){return"content"in e&&function Bv(e){return e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.nodeName}(e)?e.content:null}var Qn=(()=>((Qn=Qn||{})[Qn.NONE=0]="NONE",Qn[Qn.HTML=1]="HTML",Qn[Qn.STYLE=2]="STYLE",Qn[Qn.SCRIPT=3]="SCRIPT",Qn[Qn.URL=4]="URL",Qn[Qn.RESOURCE_URL=5]="RESOURCE_URL",Qn))();function qd(e){const t=qs();return t?Vd(t.sanitize(Qn.HTML,e)||""):Ks(e,"HTML")?Vd(wi(e)):function $v(e,t){let n=null;try{Fa=Fa||function zd(e){const t=new Ov(e);return function Rv(){try{return!!(new window.DOMParser).parseFromString(Fi(""),"text/html")}catch{return!1}}()?new xv(t):t}(e);let r=t?String(t):"";n=Fa.getInertBodyElement(r);let i=5,l=r;do{if(0===i)throw new Error("Failed to sanitize html because the input is unstable");i--,r=l,l=n.innerHTML,n=Fa.getInertBodyElement(r)}while(r!==l);return Fi((new kv).sanitizeChildren(Zl(n)||n))}finally{if(n){const r=Zl(n)||n;for(;r.firstChild;)r.removeChild(r.firstChild)}}}(function Bd(){return void 0!==Yl?Yl:typeof document<"u"?document:void 0}(),re(e))}function Zd(e){const t=qs();return t?t.sanitize(Qn.URL,e)||"":Ks(e,"URL")?wi(e):Kl(re(e))}function Jd(e){const t=qs();if(t)return jd(t.sanitize(Qn.RESOURCE_URL,e)||"");if(Ks(e,"ResourceURL"))return jd(wi(e));throw new ie(904,!1)}function Qd(e,t,n){return function zv(e,t){return"src"===t&&("embed"===e||"frame"===e||"iframe"===e||"media"===e||"script"===e)||"href"===t&&("base"===e||"link"===e)?Jd:Zd}(t,n)(e)}function qs(){const e=Ve();return e&&e[12]}const Jl=new _n("ENVIRONMENT_INITIALIZER"),ef=new _n("INJECTOR",-1),tf=new _n("INJECTOR_DEF_TYPES");class nf{get(t,n=Nt){if(n===Nt){const r=new Error(`NullInjectorError: No provider for ${S(t)}!`);throw r.name="NullInjectorError",r}return n}}function Gv(e){return{\u0275providers:e}}function Yv(...e){return{\u0275providers:rf(0,e),\u0275fromNgModule:!0}}function rf(e,...t){const n=[],r=new Set;let i;return ve(t,l=>{const u=l;Ql(u,n,[],r)&&(i||(i=[]),i.push(u))}),void 0!==i&&sf(i,n),n}function sf(e,t){for(let n=0;n{t.push(l)})}}function Ql(e,t,n,r){if(!(e=P(e)))return!1;let i=null,l=kt(e);const u=!l&&$t(e);if(l||u){if(u&&!u.standalone)return!1;i=e}else{const y=e.ngModule;if(l=kt(y),!l)return!1;i=y}const p=r.has(i);if(u){if(p)return!1;if(r.add(i),u.dependencies){const y="function"==typeof u.dependencies?u.dependencies():u.dependencies;for(const I of y)Ql(I,t,n,r)}}else{if(!l)return!1;{if(null!=l.imports&&!p){let I;r.add(i);try{ve(l.imports,V=>{Ql(V,t,n,r)&&(I||(I=[]),I.push(V))})}finally{}void 0!==I&&sf(I,t)}if(!p){const I=nr(i)||(()=>new i);t.push({provide:i,useFactory:I,deps:Le},{provide:tf,useValue:i,multi:!0},{provide:Jl,useValue:()=>He(i),multi:!0})}const y=l.providers;null==y||p||ec(y,V=>{t.push(V)})}}return i!==e&&void 0!==e.providers}function ec(e,t){for(let n of e)pe(n)&&(n=n.\u0275providers),Array.isArray(n)?ec(n,t):t(n)}const Wv=G({provide:String,useValue:G});function tc(e){return null!==e&&"object"==typeof e&&Wv in e}function ki(e){return"function"==typeof e}const nc=new _n("Set Injector scope."),ka={},Xv={};let rc;function Na(){return void 0===rc&&(rc=new nf),rc}class Ni{}class cf extends Ni{constructor(t,n,r,i){super(),this.parent=n,this.source=r,this.scopes=i,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,ic(t,u=>this.processProvider(u)),this.records.set(ef,ss(void 0,this)),i.has("environment")&&this.records.set(Ni,ss(void 0,this));const l=this.records.get(nc);null!=l&&"string"==typeof l.value&&this.scopes.add(l.value),this.injectorDefTypes=new Set(this.get(tf.multi,Le,gt.Self))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const t of this._ngOnDestroyHooks)t.ngOnDestroy();for(const t of this._onDestroyHooks)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),this._onDestroyHooks.length=0}}onDestroy(t){this._onDestroyHooks.push(t)}runInContext(t){this.assertNotDestroyed();const n=se(this),r=nt(void 0);try{return t()}finally{se(n),nt(r)}}get(t,n=Nt,r=gt.Default){this.assertNotDestroyed(),r=vt(r);const i=se(this),l=nt(void 0);try{if(!(r>.SkipSelf)){let p=this.records.get(t);if(void 0===p){const y=function ey(e){return"function"==typeof e||"object"==typeof e&&e instanceof _n}(t)&&pn(t);p=y&&this.injectableDefInScope(y)?ss(oc(t),ka):null,this.records.set(t,p)}if(null!=p)return this.hydrate(t,p)}return(r>.Self?Na():this.parent).get(t,n=r>.Optional&&n===Nt?null:n)}catch(u){if("NullInjectorError"===u.name){if((u[zt]=u[zt]||[]).unshift(S(t)),i)throw u;return function Ln(e,t,n,r){const i=e[zt];throw t[En]&&i.unshift(t[En]),e.message=function mn(e,t,n,r=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let i=S(t);if(Array.isArray(t))i=t.map(S).join(" -> ");else if("object"==typeof t){let l=[];for(let u in t)if(t.hasOwnProperty(u)){let p=t[u];l.push(u+":"+("string"==typeof p?JSON.stringify(p):S(p)))}i=`{${l.join(", ")}}`}return`${n}${r?"("+r+")":""}[${i}]: ${e.replace(jn,"\n ")}`}("\n"+e.message,i,n,r),e.ngTokenPath=i,e[zt]=null,e}(u,t,"R3InjectorError",this.source)}throw u}finally{nt(l),se(i)}}resolveInjectorInitializers(){const t=se(this),n=nt(void 0);try{const r=this.get(Jl.multi,Le,gt.Self);for(const i of r)i()}finally{se(t),nt(n)}}toString(){const t=[],n=this.records;for(const r of n.keys())t.push(S(r));return`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new ie(205,!1)}processProvider(t){let n=ki(t=P(t))?t:P(t&&t.provide);const r=function Zv(e){return tc(e)?ss(void 0,e.useValue):ss(uf(e),ka)}(t);if(ki(t)||!0!==t.multi)this.records.get(n);else{let i=this.records.get(n);i||(i=ss(void 0,ka,!0),i.factory=()=>Ht(i.multi),this.records.set(n,i)),n=t,i.multi.push(t)}this.records.set(n,r)}hydrate(t,n){return n.value===ka&&(n.value=Xv,n.value=n.factory()),"object"==typeof n.value&&n.value&&function Qv(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=P(t.providedIn);return"string"==typeof n?"any"===n||this.scopes.has(n):this.injectorDefTypes.has(n)}}function oc(e){const t=pn(e),n=null!==t?t.factory:nr(e);if(null!==n)return n;if(e instanceof _n)throw new ie(204,!1);if(e instanceof Function)return function qv(e){const t=e.length;if(t>0)throw bt(t,"?"),new ie(204,!1);const n=function it(e){const t=e&&(e[Vt]||e[Vn]);if(t){const n=function Xt(e){if(e.hasOwnProperty("name"))return e.name;const t=(""+e).match(/^function\s*([^\s(]+)/);return null===t?"":t[1]}(e);return console.warn(`DEPRECATED: DI is instantiating a token "${n}" that inherits its @Injectable decorator but does not provide one itself.\nThis will become an error in a future version of Angular. Please add @Injectable() to the "${n}" class.`),t}return null}(e);return null!==n?()=>n.factory(e):()=>new e}(e);throw new ie(204,!1)}function uf(e,t,n){let r;if(ki(e)){const i=P(e);return nr(i)||oc(i)}if(tc(e))r=()=>P(e.useValue);else if(function lf(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...Ht(e.deps||[]));else if(function af(e){return!(!e||!e.useExisting)}(e))r=()=>He(P(e.useExisting));else{const i=P(e&&(e.useClass||e.provide));if(!function Jv(e){return!!e.deps}(e))return nr(i)||oc(i);r=()=>new i(...Ht(e.deps))}return r}function ss(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function ic(e,t){for(const n of e)Array.isArray(n)?ic(n,t):n&&pe(n)?ic(n.\u0275providers,t):t(n)}class ty{}class df{}class ry{resolveComponentFactory(t){throw function ny(e){const t=Error(`No component factory found for ${S(e)}. Did you add it to @NgModule.entryComponents?`);return t.ngComponent=e,t}(t)}}let Zs=(()=>{class e{}return e.NULL=new ry,e})();function oy(){return as(Mn(),Ve())}function as(e,t){return new Js(Jn(e,t))}let Js=(()=>{class e{constructor(n){this.nativeElement=n}}return e.__NG_ELEMENT_ID__=oy,e})();function iy(e){return e instanceof Js?e.nativeElement:e}class hf{}let sy=(()=>{class e{}return e.__NG_ELEMENT_ID__=()=>function ay(){const e=Ve(),n=rr(Mn().index,e);return(Fn(n)?n:e)[11]}(),e})(),ly=(()=>{class e{}return e.\u0275prov=wt({token:e,providedIn:"root",factory:()=>null}),e})();class pf{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const cy=new pf("15.0.1"),sc={};function lc(e){return e.ngOriginalError}class Qs{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t);this._console.error("ERROR",t),n&&this._console.error("ORIGINAL ERROR",n)}_findOriginalError(t){let n=t&&lc(t);for(;n&&lc(n);)n=lc(n);return n||null}}function gf(e){return e.ownerDocument}function ni(e){return e instanceof Function?e():e}function vf(e,t,n){let r=e.length;for(;;){const i=e.indexOf(t,n);if(-1===i)return i;if(0===i||e.charCodeAt(i-1)<=32){const l=t.length;if(i+l===r||e.charCodeAt(i+l)<=32)return i}n=i+1}}const yf="ng-template";function Dy(e,t,n){let r=0;for(;rl?"":i[J+1].toLowerCase();const Oe=8&r?me:null;if(Oe&&-1!==vf(Oe,I,0)||2&r&&I!==me){if(Io(r))return!1;u=!0}}}}else{if(!u&&!Io(r)&&!Io(y))return!1;if(u&&Io(y))continue;u=!1,r=y|1&r}}return Io(r)||u}function Io(e){return 0==(1&e)}function _y(e,t,n,r){if(null===t)return-1;let i=0;if(r||!n){let l=!1;for(;i-1)for(n++;n0?'="'+p+'"':"")+"]"}else 8&r?i+="."+u:4&r&&(i+=" "+u);else""!==i&&!Io(u)&&(t+=Cf(l,i),i=""),r=u,l=l||!Io(r);n++}return""!==i&&(t+=Cf(l,i)),t}const Gt={};function _f(e){wf(At(),Ve(),lt()+e,!1)}function wf(e,t,n,r){if(!r)if(3==(3&t[2])){const l=e.preOrderCheckHooks;null!==l&&Vr(t,l,n)}else{const l=e.preOrderHooks;null!==l&&Mr(t,l,0,n)}qt(n)}function Mf(e,t=null,n=null,r){const i=Af(e,t,n,r);return i.resolveInjectorInitializers(),i}function Af(e,t=null,n=null,r,i=new Set){const l=[n||Le,Yv(e)];return r=r||("object"==typeof e?void 0:S(e)),new cf(l,t||Na(),r||null,i)}let Li=(()=>{class e{static create(n,r){if(Array.isArray(n))return Mf({name:""},r,n,"");{const i=n.name??"";return Mf({name:i},n.parent,n.providers,i)}}}return e.THROW_IF_NOT_FOUND=Nt,e.NULL=new nf,e.\u0275prov=wt({token:e,providedIn:"any",factory:()=>He(ef)}),e.__NG_ELEMENT_ID__=-1,e})();function us(e,t=gt.Default){const n=Ve();return null===n?He(e,t):ts(Mn(),n,P(e),t)}function kf(){throw new Error("invalid")}function $a(e,t){return e<<17|t<<2}function So(e){return e>>17&32767}function hc(e){return 2|e}function ri(e){return(131068&e)>>2}function pc(e,t){return-131069&e|t<<2}function gc(e){return 1|e}function Yf(e,t){const n=e.contentQueries;if(null!==n)for(let r=0;r22&&wf(e,t,22,!1),n(r,i)}finally{qt(l)}}function Ic(e,t,n){if(qn(t)){const i=t.directiveEnd;for(let l=t.directiveStart;l0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(u)!=p&&u.push(p),u.push(n,r,l)}}(e,t,r,ea(e,n,i.hostVars,Gt),i)}function w0(e,t,n){const r=Jn(t,e),i=Kf(n),l=e[10],u=Ua(e,Ha(e,i,null,n.onPush?32:16,r,t,l,l.createRenderer(r,n),null,null,null));e[t.index]=u}function Vo(e,t,n,r,i,l){const u=Jn(e,t);!function Oc(e,t,n,r,i,l,u){if(null==l)e.removeAttribute(t,i,n);else{const p=null==u?re(l):u(l,r||"",i);e.setAttribute(t,i,p,n)}}(t[11],u,l,e.value,n,r,i)}function E0(e,t,n,r,i,l){const u=l[t];if(null!==u){const p=r.setInput;for(let y=0;y0&&Rc(n)}}function Rc(e){for(let r=kl(e);null!==r;r=Nl(r))for(let i=10;i0&&Rc(l)}const n=e[1].components;if(null!==n)for(let r=0;r0&&Rc(i)}}function T0(e,t){const n=rr(t,e),r=n[1];(function x0(e,t){for(let n=t.length;n-1&&(Bl(t,r),ft(n,r))}this._attachedToViewContainer=!1}Sd(this._lView[1],this._lView)}onDestroy(t){Xf(this._lView[1],this._lView,null,t)}markForCheck(){Pc(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-65}reattach(){this._lView[2]|=64}detectChanges(){za(this._lView[1],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new ie(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function lv(e,t){Ws(e,t,t[11],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new ie(902,!1);this._appRef=t}}class O0 extends ta{constructor(t){super(t),this._view=t}detectChanges(){const t=this._view;za(t[1],t,t[8],!1)}checkNoChanges(){}get context(){return null}}class Nc extends Zs{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const n=$t(t);return new na(n,this.ngModule)}}function sh(e){const t=[];for(let n in e)e.hasOwnProperty(n)&&t.push({propName:e[n],templateName:n});return t}class P0{constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){r=vt(r);const i=this.injector.get(t,sc,r);return i!==sc||n===sc?i:this.parentInjector.get(t,n,r)}}class na extends df{constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function Ay(e){return e.map(My).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}get inputs(){return sh(this.componentDef.inputs)}get outputs(){return sh(this.componentDef.outputs)}create(t,n,r,i){let l=(i=i||this.ngModule)instanceof Ni?i:i?.injector;l&&null!==this.componentDef.getStandaloneInjector&&(l=this.componentDef.getStandaloneInjector(l)||l);const u=l?new P0(t,l):t,p=u.get(hf,null);if(null===p)throw new ie(407,!1);const y=u.get(ly,null),I=p.createRenderer(null,this.componentDef),V=this.componentDef.selectors[0][0]||"div",J=r?function c0(e,t,n){return e.selectRootElement(t,n===ee.ShadowDom)}(I,r,this.componentDef.encapsulation):$l(I,V,function R0(e){const t=e.toLowerCase();return"svg"===t?"svg":"math"===t?"math":null}(V)),me=this.componentDef.onPush?288:272,Oe=Ac(0,null,null,1,0,null,null,null,null,null),Ge=Ha(null,Oe,null,me,null,null,p,I,y,u,null);let tt,ct;Ki(Ge);try{const mt=this.componentDef;let xt,Ze=null;mt.findHostDirectiveDefs?(xt=[],Ze=new Map,mt.findHostDirectiveDefs(mt,xt,Ze),xt.push(mt)):xt=[mt];const Lt=function N0(e,t){const n=e[1];return e[22]=t,ds(n,22,2,"#host",null)}(Ge,J),In=function L0(e,t,n,r,i,l,u,p){const y=i[1];!function $0(e,t,n,r){for(const i of e)t.mergedAttrs=ao(t.mergedAttrs,i.hostAttrs);null!==t.mergedAttrs&&(Ga(t,t.mergedAttrs,!0),null!==n&&$d(r,n,t))}(r,e,t,u);const I=l.createRenderer(t,n),V=Ha(i,Kf(n),null,n.onPush?32:16,i[e.index],e,l,I,p||null,null,null);return y.firstCreatePass&&xc(y,e,r.length-1),Ua(i,V),i[e.index]=V}(Lt,J,mt,xt,Ge,p,I);ct=Kr(Oe,22),J&&function V0(e,t,n,r){if(r)pi(e,n,["ng-version",cy.full]);else{const{attrs:i,classes:l}=function Ty(e){const t=[],n=[];let r=1,i=2;for(;r0&&Ld(e,n,l.join(" "))}}(I,mt,J,r),void 0!==n&&function H0(e,t,n){const r=e.projection=[];for(let i=0;i=0;r--){const i=e[r];i.hostVars=t+=i.hostVars,i.hostAttrs=ao(i.hostAttrs,n=ao(n,i.hostAttrs))}}(r)}function $c(e){return e===Se?{}:e===Le?[]:e}function z0(e,t){const n=e.viewQuery;e.viewQuery=n?(r,i)=>{t(r,i),n(r,i)}:t}function G0(e,t){const n=e.contentQueries;e.contentQueries=n?(r,i,l)=>{t(r,i,l),n(r,i,l)}:t}function Y0(e,t){const n=e.hostBindings;e.hostBindings=n?(r,i)=>{t(r,i),n(r,i)}:t}let Wa=null;function $i(){if(!Wa){const e=Ct.Symbol;if(e&&e.iterator)Wa=e.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let n=0;nu(Sn(Lt[r.index])):r.index;let Ze=null;if(!u&&p&&(Ze=function sD(e,t,n,r){const i=e.cleanup;if(null!=i)for(let l=0;ly?p[y]:null}"string"==typeof u&&(l+=2)}return null}(e,t,i,r.index)),null!==Ze)(Ze.__ngLastListenerFn__||Ze).__ngNextListenerFn__=l,Ze.__ngLastListenerFn__=l,me=!1;else{l=Ah(r,t,V,l,!1);const Lt=n.listen(ct,i,l);J.push(l,Lt),I&&I.push(i,xt,mt,mt+1)}}else l=Ah(r,t,V,l,!1);const Oe=r.outputs;let Ge;if(me&&null!==Oe&&(Ge=Oe[i])){const tt=Ge.length;if(tt)for(let ct=0;ct-1?rr(e.index,t):t);let y=Mh(t,0,r,u),I=l.__ngNextListenerFn__;for(;I;)y=Mh(t,0,I,u)&&y,I=I.__ngNextListenerFn__;return i&&!1===y&&(u.preventDefault(),u.returnValue=!1),y}}function Th(e=1){return function $e(e){return(a.lFrame.contextLView=function Xe(e,t){for(;e>0;)t=t[15],e--;return t}(e,a.lFrame.contextLView))[8]}(e)}function aD(e,t){let n=null;const r=function wy(e){const t=e.attrs;if(null!=t){const n=t.indexOf(5);if(0==(1&n))return t[n+1]}return null}(e);for(let i=0;i=0}const ir={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Hh(e){return e.substring(ir.key,ir.keyEnd)}function jh(e,t){const n=ir.textEnd;return n===t?-1:(t=ir.keyEnd=function pD(e,t,n){for(;t32;)t++;return t}(e,ir.key=t,n),Cs(e,t,n))}function Cs(e,t,n){for(;t=0;n=jh(t,n))Cr(e,Hh(t),!0)}function Mo(e,t,n,r){const i=Ve(),l=At(),u=Br(2);l.firstUpdatePass&&Xh(l,e,u,r),t!==Gt&&wr(i,u,t)&&Zh(l,l.data[lt()],i,i[11],e,i[u+1]=function ED(e,t){return null==e||("string"==typeof t?e+=t:"object"==typeof e&&(e=S(wi(e)))),e}(t,n),r,u)}function Kh(e,t){return t>=e.expandoStartIndex}function Xh(e,t,n,r){const i=e.data;if(null===i[n+1]){const l=i[lt()],u=Kh(e,n);Qh(l,r)&&null===t&&!u&&(t=!1),t=function yD(e,t,n,r){const i=function Mi(e){const t=a.lFrame.currentDirectiveIndex;return-1===t?null:e[t]}(e);let l=r?t.residualClasses:t.residualStyles;if(null===i)0===(r?t.classBindings:t.styleBindings)&&(n=ia(n=Jc(null,e,t,n,r),t.attrs,r),l=null);else{const u=t.directiveStylingLast;if(-1===u||e[u]!==i)if(n=Jc(i,e,t,n,r),null===l){let y=function DD(e,t,n){const r=n?t.classBindings:t.styleBindings;if(0!==ri(r))return e[So(r)]}(e,t,r);void 0!==y&&Array.isArray(y)&&(y=Jc(null,e,t,y[1],r),y=ia(y,t.attrs,r),function bD(e,t,n,r){e[So(n?t.classBindings:t.styleBindings)]=r}(e,t,r,y))}else l=function CD(e,t,n){let r;const i=t.directiveEnd;for(let l=1+t.directiveStylingLast;l0)&&(I=!0)}else V=n;if(i)if(0!==y){const me=So(e[p+1]);e[r+1]=$a(me,p),0!==me&&(e[me+1]=pc(e[me+1],r)),e[p+1]=function Ky(e,t){return 131071&e|t<<17}(e[p+1],r)}else e[r+1]=$a(p,0),0!==p&&(e[p+1]=pc(e[p+1],r)),p=r;else e[r+1]=$a(y,0),0===p?p=r:e[y+1]=pc(e[y+1],r),y=r;I&&(e[r+1]=hc(e[r+1])),Vh(e,V,r,!0),Vh(e,V,r,!1),function cD(e,t,n,r,i){const l=i?e.residualClasses:e.residualStyles;null!=l&&"string"==typeof t&&_i(l,t)>=0&&(n[r+1]=gc(n[r+1]))}(t,V,e,r,l),u=$a(p,y),l?t.classBindings=u:t.styleBindings=u}(i,l,t,n,u,r)}}function Jc(e,t,n,r,i){let l=null;const u=n.directiveEnd;let p=n.directiveStylingLast;for(-1===p?p=n.directiveStart:p++;p0;){const y=e[i],I=Array.isArray(y),V=I?y[1]:y,J=null===V;let me=n[i+1];me===Gt&&(me=J?Le:void 0);let Oe=J?Ri(me,r):V===r?me:void 0;if(I&&!Ja(Oe)&&(Oe=Ri(y,r)),Ja(Oe)&&(p=Oe,u))return p;const Ge=e[i+1];i=u?So(Ge):ri(Ge)}if(null!==t){let y=l?t.residualClasses:t.residualStyles;null!=y&&(p=Ri(y,r))}return p}function Ja(e){return void 0!==e}function Qh(e,t){return 0!=(e.flags&(t?8:16))}function ep(e,t=""){const n=Ve(),r=At(),i=e+22,l=r.firstCreatePass?ds(r,i,1,t,null):r.data[i],u=n[i]=function Ll(e,t){return e.createText(t)}(n[11],t);xa(r,n,u,l),br(l,!1)}function Qc(e){return Qa("",e,""),Qc}function Qa(e,t,n){const r=Ve(),i=hs(r,e,t,n);return i!==Gt&&oi(r,lt(),i),Qa}function eu(e,t,n,r,i){const l=Ve(),u=ps(l,e,t,n,r,i);return u!==Gt&&oi(l,lt(),u),eu}function tu(e,t,n,r,i,l,u){const p=Ve(),y=function gs(e,t,n,r,i,l,u,p){const I=Ka(e,oo(),n,i,u);return Br(3),I?t+re(n)+r+re(i)+l+re(u)+p:Gt}(p,e,t,n,r,i,l,u);return y!==Gt&&oi(p,lt(),y),tu}const Vi=void 0;var zD=["en",[["a","p"],["AM","PM"],Vi],[["AM","PM"],Vi,Vi],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],Vi,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],Vi,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",Vi,"{1} 'at' {0}",Vi],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",function UD(e){const n=Math.floor(Math.abs(e)),r=e.toString().replace(/^[^.]*\.?/,"").length;return 1===n&&0===r?1:5}];let _s={};function nu(e){const t=function GD(e){return e.toLowerCase().replace(/_/g,"-")}(e);let n=Dp(t);if(n)return n;const r=t.split("-")[0];if(n=Dp(r),n)return n;if("en"===r)return zD;throw new ie(701,!1)}function yp(e){return nu(e)[Ot.PluralCase]}function Dp(e){return e in _s||(_s[e]=Ct.ng&&Ct.ng.common&&Ct.ng.common.locales&&Ct.ng.common.locales[e]),_s[e]}var Ot=(()=>((Ot=Ot||{})[Ot.LocaleId=0]="LocaleId",Ot[Ot.DayPeriodsFormat=1]="DayPeriodsFormat",Ot[Ot.DayPeriodsStandalone=2]="DayPeriodsStandalone",Ot[Ot.DaysFormat=3]="DaysFormat",Ot[Ot.DaysStandalone=4]="DaysStandalone",Ot[Ot.MonthsFormat=5]="MonthsFormat",Ot[Ot.MonthsStandalone=6]="MonthsStandalone",Ot[Ot.Eras=7]="Eras",Ot[Ot.FirstDayOfWeek=8]="FirstDayOfWeek",Ot[Ot.WeekendRange=9]="WeekendRange",Ot[Ot.DateFormat=10]="DateFormat",Ot[Ot.TimeFormat=11]="TimeFormat",Ot[Ot.DateTimeFormat=12]="DateTimeFormat",Ot[Ot.NumberSymbols=13]="NumberSymbols",Ot[Ot.NumberFormats=14]="NumberFormats",Ot[Ot.CurrencyCode=15]="CurrencyCode",Ot[Ot.CurrencySymbol=16]="CurrencySymbol",Ot[Ot.CurrencyName=17]="CurrencyName",Ot[Ot.Currencies=18]="Currencies",Ot[Ot.Directionality=19]="Directionality",Ot[Ot.PluralCase=20]="PluralCase",Ot[Ot.ExtraData=21]="ExtraData",Ot))();const ws="en-US";let bp=ws;function iu(e,t,n,r,i){if(e=P(e),Array.isArray(e))for(let l=0;l>20;if(ki(e)||!e.multi){const Oe=new fi(y,i,us),Ge=au(p,t,i?V:V+me,J);-1===Ge?(es(Ji(I,u),l,p),su(l,e,t.length),t.push(p),I.directiveStart++,I.directiveEnd++,i&&(I.providerIndexes+=1048576),n.push(Oe),u.push(Oe)):(n[Ge]=Oe,u[Ge]=Oe)}else{const Oe=au(p,t,V+me,J),Ge=au(p,t,V,V+me),tt=Oe>=0&&n[Oe],ct=Ge>=0&&n[Ge];if(i&&!ct||!i&&!tt){es(Ji(I,u),l,p);const mt=function jb(e,t,n,r,i){const l=new fi(e,n,us);return l.multi=[],l.index=t,l.componentProviders=0,Gp(l,i,r&&!n),l}(i?Hb:Vb,n.length,i,r,y);!i&&ct&&(n[Ge].providerFactory=mt),su(l,e,t.length,0),t.push(p),I.directiveStart++,I.directiveEnd++,i&&(I.providerIndexes+=1048576),n.push(mt),u.push(mt)}else su(l,e,Oe>-1?Oe:Ge,Gp(n[i?Ge:Oe],y,!i&&r));!i&&r&&ct&&n[Ge].componentProviders++}}}function su(e,t,n,r){const i=ki(t),l=function Kv(e){return!!e.useClass}(t);if(i||l){const y=(l?P(t.useClass):t).prototype.ngOnDestroy;if(y){const I=e.destroyHooks||(e.destroyHooks=[]);if(!i&&t.multi){const V=I.indexOf(n);-1===V?I.push(n,[r,y]):I[V+1].push(r,y)}else I.push(n,y)}}}function Gp(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function au(e,t,n,r){for(let i=n;i{n.providersResolver=(r,i)=>function Bb(e,t,n){const r=At();if(r.firstCreatePass){const i=Gn(e);iu(n,r.data,r.blueprint,i,!0),iu(t,r.data,r.blueprint,i,!1)}}(r,i?i(e):e,t)}}class Es{}class Wp{}function Ub(e,t){return new Kp(e,t??null)}class Kp extends Es{constructor(t,n){super(),this._parent=n,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Nc(this);const r=On(t);this._bootstrapComponents=ni(r.bootstrap),this._r3Injector=Af(t,n,[{provide:Es,useValue:this},{provide:Zs,useValue:this.componentFactoryResolver}],S(t),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(t)}get injector(){return this._r3Injector}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class cu extends Wp{constructor(t){super(),this.moduleType=t}create(t){return new Kp(this.moduleType,t)}}class zb extends Es{constructor(t,n,r){super(),this.componentFactoryResolver=new Nc(this),this.instance=null;const i=new cf([...t,{provide:Es,useValue:this},{provide:Zs,useValue:this.componentFactoryResolver}],n||Na(),r,new Set(["environment"]));this.injector=i,i.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}}function uu(e,t,n=null){return new zb(e,t,n).injector}let Gb=(()=>{class e{constructor(n){this._injector=n,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n.id)){const r=rf(0,n.type),i=r.length>0?uu([r],this._injector,`Standalone[${n.type.name}]`):null;this.cachedInjectors.set(n.id,i)}return this.cachedInjectors.get(n.id)}ngOnDestroy(){try{for(const n of this.cachedInjectors.values())null!==n&&n.destroy()}finally{this.cachedInjectors.clear()}}}return e.\u0275prov=wt({token:e,providedIn:"environment",factory:()=>new e(He(Ni))}),e})();function Xp(e){e.getStandaloneInjector=t=>t.get(Gb).getOrCreateStandaloneInjector(e)}function ng(e,t,n,r){return sg(Ve(),lr(),e,t,n,r)}function rg(e,t,n,r,i){return ag(Ve(),lr(),e,t,n,r,i)}function og(e,t,n,r,i,l){return lg(Ve(),lr(),e,t,n,r,i,l)}function ig(e,t,n,r,i,l,u,p,y){const I=lr()+e,V=Ve(),J=function co(e,t,n,r,i,l){const u=Bi(e,t,n,r);return Bi(e,t+2,i,l)||u}(V,I,n,r,i,l);return Bi(V,I+4,u,p)||J?Ho(V,I+6,y?t.call(y,n,r,i,l,u,p):t(n,r,i,l,u,p)):function oa(e,t){return e[t]}(V,I+6)}function da(e,t){const n=e[t];return n===Gt?void 0:n}function sg(e,t,n,r,i,l){const u=t+n;return wr(e,u,i)?Ho(e,u+1,l?r.call(l,i):r(i)):da(e,u+1)}function ag(e,t,n,r,i,l,u){const p=t+n;return Bi(e,p,i,l)?Ho(e,p+2,u?r.call(u,i,l):r(i,l)):da(e,p+2)}function lg(e,t,n,r,i,l,u,p){const y=t+n;return Ka(e,y,i,l,u)?Ho(e,y+3,p?r.call(p,i,l,u):r(i,l,u)):da(e,y+3)}function dg(e,t){const n=At();let r;const i=e+22;n.firstCreatePass?(r=function sC(e,t){if(t)for(let n=t.length-1;n>=0;n--){const r=t[n];if(e===r.name)return r}}(t,n.pipeRegistry),n.data[i]=r,r.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(i,r.onDestroy)):r=n.data[i];const l=r.factory||(r.factory=nr(r.type)),u=nt(us);try{const p=Zi(!1),y=l();return Zi(p),function rD(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}(n,Ve(),i,y),y}finally{nt(u)}}function fg(e,t,n){const r=e+22,i=Ve(),l=no(i,r);return fa(i,r)?sg(i,lr(),t,l.transform,n,l):l.transform(n)}function hg(e,t,n,r){const i=e+22,l=Ve(),u=no(l,i);return fa(l,i)?ag(l,lr(),t,u.transform,n,r,u):u.transform(n,r)}function pg(e,t,n,r,i){const l=e+22,u=Ve(),p=no(u,l);return fa(u,l)?lg(u,lr(),t,p.transform,n,r,i,p):p.transform(n,r,i)}function fa(e,t){return e[1].data[t].pure}function fu(e){return t=>{setTimeout(e,void 0,t)}}const zo=class cC extends o.x{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){let i=t,l=n||(()=>null),u=r;if(t&&"object"==typeof t){const y=t;i=y.next?.bind(y),l=y.error?.bind(y),u=y.complete?.bind(y)}this.__isAsync&&(l=fu(l),i&&(i=fu(i)),u&&(u=fu(u)));const p=super.subscribe({next:i,error:l,complete:u});return t instanceof x.w0&&t.add(p),p}};function uC(){return this._results[$i()]()}class hu{constructor(t=!1){this._emitDistinctChangesOnly=t,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const n=$i(),r=hu.prototype;r[n]||(r[n]=uC)}get changes(){return this._changes||(this._changes=new zo)}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){const r=this;r.dirty=!1;const i=z(t);(this._changesDetected=!function $(e,t,n){if(e.length!==t.length)return!1;for(let r=0;r{class e{}return e.__NG_ELEMENT_ID__=hC,e})();const dC=ha,fC=class extends dC{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}createEmbeddedView(t,n){const r=this._declarationTContainer.tViews,i=Ha(this._declarationLView,r,t,16,null,r.declTNode,null,null,null,null,n||null);i[17]=this._declarationLView[this._declarationTContainer.index];const u=this._declarationLView[19];return null!==u&&(i[19]=u.createEmbeddedView(r)),Ec(r,i,t),new ta(i)}};function hC(){return ol(Mn(),Ve())}function ol(e,t){return 4&e.type?new fC(t,e,as(e,t)):null}let il=(()=>{class e{}return e.__NG_ELEMENT_ID__=pC,e})();function pC(){return vg(Mn(),Ve())}const gC=il,gg=class extends gC{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return as(this._hostTNode,this._hostLView)}get injector(){return new Ti(this._hostTNode,this._hostLView)}get parentInjector(){const t=Qi(this._hostTNode,this._hostLView);if(ba(t)){const n=gi(t,this._hostLView),r=Zo(t);return new Ti(n[1].data[r+8],n)}return new Ti(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=mg(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-10}createEmbeddedView(t,n,r){let i,l;"number"==typeof r?i=r:null!=r&&(i=r.index,l=r.injector);const u=t.createEmbeddedView(n||{},l);return this.insert(u,i),u}createComponent(t,n,r,i,l){const u=t&&!function m(e){return"function"==typeof e}(t);let p;if(u)p=n;else{const J=n||{};p=J.index,r=J.injector,i=J.projectableNodes,l=J.environmentInjector||J.ngModuleRef}const y=u?t:new na($t(t)),I=r||this.parentInjector;if(!l&&null==y.ngModule){const me=(u?I:this.parentInjector).get(Ni,null);me&&(l=me)}const V=y.create(I,i,void 0,l);return this.insert(V.hostView,p),V}insert(t,n){const r=t._lView,i=r[1];if(function Ui(e){return zn(e[3])}(r)){const V=this.indexOf(t);if(-1!==V)this.detach(V);else{const J=r[3],me=new gg(J,J[6],J[3]);me.detach(me.indexOf(t))}}const l=this._adjustIndex(n),u=this._lContainer;!function uv(e,t,n,r){const i=10+r,l=n.length;r>0&&(n[i-1][4]=t),r0)r.push(u[p/2]);else{const I=l[p+1],V=t[-y];for(let J=10;J{class e{constructor(n){this.appInits=n,this.resolve=al,this.reject=al,this.initialized=!1,this.done=!1,this.donePromise=new Promise((r,i)=>{this.resolve=r,this.reject=i})}runInitializers(){if(this.initialized)return;const n=[],r=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let i=0;i{l.subscribe({complete:p,error:y})});n.push(u)}}Promise.all(n).then(()=>{r()}).catch(i=>{this.reject(i)}),0===n.length&&r(),this.initialized=!0}}return e.\u0275fac=function(n){return new(n||e)(He(Yg,8))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const Wg=new _n("AppId",{providedIn:"root",factory:function Kg(){return`${Eu()}${Eu()}${Eu()}`}});function Eu(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const Xg=new _n("Platform Initializer"),UC=new _n("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),qg=new _n("appBootstrapListener");let zC=(()=>{class e{log(n){console.log(n)}warn(n){console.warn(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();const cl=new _n("LocaleId",{providedIn:"root",factory:()=>pt(cl,gt.Optional|gt.SkipSelf)||function GC(){return typeof $localize<"u"&&$localize.locale||ws}()}),YC=new _n("DefaultCurrencyCode",{providedIn:"root",factory:()=>"USD"});class WC{constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}}let KC=(()=>{class e{compileModuleSync(n){return new cu(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){const r=this.compileModuleSync(n),l=ni(On(n).declarations).reduce((u,p)=>{const y=$t(p);return y&&u.push(new na(y)),u},[]);return new WC(r,l)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const ZC=(()=>Promise.resolve(0))();function Iu(e){typeof Zone>"u"?ZC.then(()=>{e&&e.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",e)}class uo{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new zo(!1),this.onMicrotaskEmpty=new zo(!1),this.onStable=new zo(!1),this.onError=new zo(!1),typeof Zone>"u")throw new ie(908,!1);Zone.assertZonePatched();const i=this;i._nesting=0,i._outer=i._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(i._inner=i._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(i._inner=i._inner.fork(Zone.longStackTraceZoneSpec)),i.shouldCoalesceEventChangeDetection=!r&&n,i.shouldCoalesceRunChangeDetection=r,i.lastRequestAnimationFrameId=-1,i.nativeRequestAnimationFrame=function JC(){let e=Ct.requestAnimationFrame,t=Ct.cancelAnimationFrame;if(typeof Zone<"u"&&e&&t){const n=e[Zone.__symbol__("OriginalDelegate")];n&&(e=n);const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r)}return{nativeRequestAnimationFrame:e,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function t_(e){const t=()=>{!function e_(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(Ct,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,Mu(e),e.isCheckStableRunning=!0,Su(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),Mu(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,i,l,u,p)=>{try{return Qg(e),n.invokeTask(i,l,u,p)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===l.type||e.shouldCoalesceRunChangeDetection)&&t(),em(e)}},onInvoke:(n,r,i,l,u,p,y)=>{try{return Qg(e),n.invoke(i,l,u,p,y)}finally{e.shouldCoalesceRunChangeDetection&&t(),em(e)}},onHasTask:(n,r,i,l)=>{n.hasTask(i,l),r===i&&("microTask"==l.change?(e._hasPendingMicrotasks=l.microTask,Mu(e),Su(e)):"macroTask"==l.change&&(e.hasPendingMacrotasks=l.macroTask))},onHandleError:(n,r,i,l)=>(n.handleError(i,l),e.runOutsideAngular(()=>e.onError.emit(l)),!1)})}(i)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!uo.isInAngularZone())throw new ie(909,!1)}static assertNotInAngularZone(){if(uo.isInAngularZone())throw new ie(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,i){const l=this._inner,u=l.scheduleEventTask("NgZoneEvent: "+i,t,QC,al,al);try{return l.runTask(u,n,r)}finally{l.cancelTask(u)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const QC={};function Su(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function Mu(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function Qg(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function em(e){e._nesting--,Su(e)}class n_{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new zo,this.onMicrotaskEmpty=new zo,this.onStable=new zo,this.onError=new zo}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,i){return t.apply(n,r)}}const tm=new _n(""),nm=new _n("");let Au,r_=(()=>{class e{constructor(n,r,i){this._ngZone=n,this.registry=r,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,Au||(function o_(e){Au=e}(i),i.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{uo.assertNotInAngularZone(),Iu(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())Iu(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,i){let l=-1;r&&r>0&&(l=setTimeout(()=>{this._callbacks=this._callbacks.filter(u=>u.timeoutId!==l),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:l,updateCb:i})}whenStable(n,r,i){if(i&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,i),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,i){return[]}}return e.\u0275fac=function(n){return new(n||e)(He(uo),He(rm),He(nm))},e.\u0275prov=wt({token:e,factory:e.\u0275fac}),e})(),rm=(()=>{class e{constructor(){this._applications=new Map}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return Au?.findTestabilityInTree(this,n,r)??null}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})(),Si=null;const om=new _n("AllowMultipleToken"),Tu=new _n("PlatformDestroyListeners");class a_{constructor(t,n){this.name=t,this.token=n}}function sm(e,t,n=[]){const r=`Platform: ${t}`,i=new _n(r);return(l=[])=>{let u=xu();if(!u||u.injector.get(om,!1)){const p=[...n,...l,{provide:i,useValue:!0}];e?e(p):function l_(e){if(Si&&!Si.get(om,!1))throw new ie(400,!1);Si=e;const t=e.get(lm);(function im(e){const t=e.get(Xg,null);t&&t.forEach(n=>n())})(e)}(function am(e=[],t){return Li.create({name:t,providers:[{provide:nc,useValue:"platform"},{provide:Tu,useValue:new Set([()=>Si=null])},...e]})}(p,r))}return function u_(e){const t=xu();if(!t)throw new ie(401,!1);return t}()}}function xu(){return Si?.get(lm)??null}let lm=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const i=function um(e,t){let n;return n="noop"===e?new n_:("zone.js"===e?void 0:e)||new uo(t),n}(r?.ngZone,function cm(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!(!e||!e.ngZoneEventCoalescing)||!1,shouldCoalesceRunChangeDetection:!(!e||!e.ngZoneRunCoalescing)||!1}}(r)),l=[{provide:uo,useValue:i}];return i.run(()=>{const u=Li.create({providers:l,parent:this.injector,name:n.moduleType.name}),p=n.create(u),y=p.injector.get(Qs,null);if(!y)throw new ie(402,!1);return i.runOutsideAngular(()=>{const I=i.onError.subscribe({next:V=>{y.handleError(V)}});p.onDestroy(()=>{dl(this._modules,p),I.unsubscribe()})}),function dm(e,t,n){try{const r=n();return Wc(r)?r.catch(i=>{throw t.runOutsideAngular(()=>e.handleError(i)),i}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(y,i,()=>{const I=p.injector.get(ll);return I.runInitializers(),I.donePromise.then(()=>(function Cp(e){et(e,"Expected localeId to be defined"),"string"==typeof e&&(bp=e.toLowerCase().replace(/_/g,"-"))}(p.injector.get(cl,ws)||ws),this._moduleDoBootstrap(p),p))})})}bootstrapModule(n,r=[]){const i=fm({},r);return function i_(e,t,n){const r=new cu(n);return Promise.resolve(r)}(0,0,n).then(l=>this.bootstrapModuleFactory(l,i))}_moduleDoBootstrap(n){const r=n.injector.get(ul);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(i=>r.bootstrap(i));else{if(!n.instance.ngDoBootstrap)throw new ie(403,!1);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new ie(404,!1);this._modules.slice().forEach(r=>r.destroy()),this._destroyListeners.forEach(r=>r());const n=this._injector.get(Tu,null);n&&(n.forEach(r=>r()),n.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}}return e.\u0275fac=function(n){return new(n||e)(He(Li))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();function fm(e,t){return Array.isArray(t)?t.reduce(fm,e):{...e,...t}}let ul=(()=>{class e{constructor(n,r,i){this._zone=n,this._injector=r,this._exceptionHandler=i,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this._destroyed=!1,this._destroyListeners=[],this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const l=new N.y(p=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{p.next(this._stable),p.complete()})}),u=new N.y(p=>{let y;this._zone.runOutsideAngular(()=>{y=this._zone.onStable.subscribe(()=>{uo.assertNotInAngularZone(),Iu(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,p.next(!0))})})});const I=this._zone.onUnstable.subscribe(()=>{uo.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{p.next(!1)}))});return()=>{y.unsubscribe(),I.unsubscribe()}});this.isStable=function _(...e){const t=(0,M.yG)(e),n=(0,M._6)(e,1/0),r=e;return r.length?1===r.length?(0,R.Xf)(r[0]):(0,ge.J)(n)((0,U.D)(r,t)):W.E}(l,u.pipe((0,Y.B)()))}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(n,r){const i=n instanceof df;if(!this._injector.get(ll).done)throw!i&&Un(n),new ie(405,false);let u;u=i?n:this._injector.get(Zs).resolveComponentFactory(n),this.componentTypes.push(u.componentType);const p=function s_(e){return e.isBoundToModule}(u)?void 0:this._injector.get(Es),I=u.create(Li.NULL,[],r||u.selector,p),V=I.location.nativeElement,J=I.injector.get(tm,null);return J?.registerApplication(V),I.onDestroy(()=>{this.detachView(I.hostView),dl(this.components,I),J?.unregisterApplication(V)}),this._loadComponent(I),I}tick(){if(this._runningTick)throw new ie(101,!1);try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;dl(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n),this._injector.get(qg,[]).concat(this._bootstrapListeners).forEach(i=>i(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>dl(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new ie(406,!1);const n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return e.\u0275fac=function(n){return new(n||e)(He(uo),He(Ni),He(Qs))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();function dl(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}function f_(){}let h_=(()=>{class e{}return e.__NG_ELEMENT_ID__=p_,e})();function p_(e){return function g_(e,t,n){if(dr(e)&&!n){const r=rr(e.index,t);return new ta(r,r)}return 47&e.type?new ta(t[16],t):null}(Mn(),Ve(),16==(16&e))}class vm{constructor(){}supports(t){return ra(t)}create(t){return new C_(t)}}const b_=(e,t)=>t;class C_{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||b_}forEachItem(t){let n;for(n=this._itHead;null!==n;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,i=0,l=null;for(;n||r;){const u=!r||n&&n.currentIndex{u=this._trackByFn(i,p),null!==n&&Object.is(n.trackById,u)?(r&&(n=this._verifyReinsertion(n,p,u,i)),Object.is(n.item,p)||this._addIdentityChange(n,p)):(n=this._mismatch(n,p,u,i),r=!0),n=n._next,i++}),this.length=i;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,i){let l;return null===t?l=this._itTail:(l=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,l,i)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(r,i))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,l,i)):t=this._addAfter(new __(n,r),l,i),t}_verifyReinsertion(t,n,r,i){let l=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null);return null!==l?t=this._reinsertAfter(l,t._prev,i):t.currentIndex!=i&&(t.currentIndex=i,this._addToMoves(t,i)),t}_truncate(t){for(;null!==t;){const n=t._next;this._addToRemovals(this._unlink(t)),t=n}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const i=t._prevRemoved,l=t._nextRemoved;return null===i?this._removalsHead=l:i._nextRemoved=l,null===l?this._removalsTail=i:l._prevRemoved=i,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){const i=null===n?this._itHead:n._next;return t._next=i,t._prev=n,null===i?this._itTail=t:i._prev=t,null===n?this._itHead=t:n._next=t,null===this._linkedRecords&&(this._linkedRecords=new ym),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const n=t._prev,r=t._next;return null===n?this._itHead=r:n._next=r,null===r?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new ym),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class __{constructor(t,n){this.item=t,this.trackById=n,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class w_{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;null!==r;r=r._nextDup)if((null===n||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){const n=t._prevDup,r=t._nextDup;return null===n?this._head=r:n._nextDup=r,null===r?this._tail=n:r._prevDup=n,null===this._head}}class ym{constructor(){this.map=new Map}put(t){const n=t.trackById;let r=this.map.get(n);r||(r=new w_,this.map.set(n,r)),r.add(t)}get(t,n){const i=this.map.get(t);return i?i.get(t,n):null}remove(t){const n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function Dm(e,t,n){const r=e.previousIndex;if(null===r)return r;let i=0;return n&&r{if(n&&n.key===i)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{const l=this._getOrCreateRecordForKey(i,r);n=this._insertBeforeOrAppend(n,l)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){const r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){const i=this._records.get(t);this._maybeAddToChanges(i,n);const l=i._prev,u=i._next;return l&&(l._next=u),u&&(u._prev=l),i._next=null,i._prev=null,i}const r=new I_(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}}class I_{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function Cm(){return new ku([new vm])}let ku=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(null!=r){const i=r.factories.slice();n=n.concat(i)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||Cm()),deps:[[e,new js,new Hs]]}}find(n){const r=this.factories.find(i=>i.supports(n));if(null!=r)return r;throw new ie(901,!1)}}return e.\u0275prov=wt({token:e,providedIn:"root",factory:Cm}),e})();function _m(){return new Nu([new bm])}let Nu=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(r){const i=r.factories.slice();n=n.concat(i)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||_m()),deps:[[e,new js,new Hs]]}}find(n){const r=this.factories.find(i=>i.supports(n));if(r)return r;throw new ie(901,!1)}}return e.\u0275prov=wt({token:e,providedIn:"root",factory:_m}),e})();const A_=sm(null,"core",[]);let T_=(()=>{class e{constructor(n){}}return e.\u0275fac=function(n){return new(n||e)(He(ul))},e.\u0275mod=vn({type:e}),e.\u0275inj=Kt({}),e})();function x_(e){return"boolean"==typeof e?e:null!=e&&"false"!==e}},433:(Qe,Fe,w)=>{"use strict";w.d(Fe,{u5:()=>wo,JU:()=>E,a5:()=>Vt,JJ:()=>gt,JL:()=>Yt,F:()=>le,On:()=>fo,c5:()=>Lr,Q7:()=>Wr,_Y:()=>ho});var o=w(8274),x=w(6895),N=w(2076),ge=w(9751),R=w(4742),W=w(8421),M=w(3269),U=w(5403),_=w(3268),Y=w(1810),Z=w(4004);let S=(()=>{class C{constructor(c,a){this._renderer=c,this._elementRef=a,this.onChange=g=>{},this.onTouched=()=>{}}setProperty(c,a){this._renderer.setProperty(this._elementRef.nativeElement,c,a)}registerOnTouched(c){this.onTouched=c}registerOnChange(c){this.onChange=c}setDisabledState(c){this.setProperty("disabled",c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(o.Qsj),o.Y36(o.SBq))},C.\u0275dir=o.lG2({type:C}),C})(),B=(()=>{class C extends S{}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,features:[o.qOj]}),C})();const E=new o.OlP("NgValueAccessor"),K={provide:E,useExisting:(0,o.Gpc)(()=>Te),multi:!0},ke=new o.OlP("CompositionEventMode");let Te=(()=>{class C extends S{constructor(c,a,g){super(c,a),this._compositionMode=g,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function pe(){const C=(0,x.q)()?(0,x.q)().getUserAgent():"";return/android (\d+)/.test(C.toLowerCase())}())}writeValue(c){this.setProperty("value",c??"")}_handleInput(c){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(c)}_compositionStart(){this._composing=!0}_compositionEnd(c){this._composing=!1,this._compositionMode&&this.onChange(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(o.Qsj),o.Y36(o.SBq),o.Y36(ke,8))},C.\u0275dir=o.lG2({type:C,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(c,a){1&c&&o.NdJ("input",function(L){return a._handleInput(L.target.value)})("blur",function(){return a.onTouched()})("compositionstart",function(){return a._compositionStart()})("compositionend",function(L){return a._compositionEnd(L.target.value)})},features:[o._Bn([K]),o.qOj]}),C})();function Be(C){return null==C||("string"==typeof C||Array.isArray(C))&&0===C.length}const oe=new o.OlP("NgValidators"),be=new o.OlP("NgAsyncValidators");function O(C){return Be(C.value)?{required:!0}:null}function de(C){return null}function ne(C){return null!=C}function Ee(C){return(0,o.QGY)(C)?(0,N.D)(C):C}function Ce(C){let s={};return C.forEach(c=>{s=null!=c?{...s,...c}:s}),0===Object.keys(s).length?null:s}function ze(C,s){return s.map(c=>c(C))}function et(C){return C.map(s=>function dt(C){return!C.validate}(s)?s:c=>s.validate(c))}function St(C){return null!=C?function Ue(C){if(!C)return null;const s=C.filter(ne);return 0==s.length?null:function(c){return Ce(ze(c,s))}}(et(C)):null}function nn(C){return null!=C?function Ke(C){if(!C)return null;const s=C.filter(ne);return 0==s.length?null:function(c){return function G(...C){const s=(0,M.jO)(C),{args:c,keys:a}=(0,R.D)(C),g=new ge.y(L=>{const{length:Me}=c;if(!Me)return void L.complete();const Je=new Array(Me);let at=Me,Dt=Me;for(let Zt=0;Zt{bn||(bn=!0,Dt--),Je[Zt]=Ve},()=>at--,void 0,()=>{(!at||!bn)&&(Dt||L.next(a?(0,Y.n)(a,Je):Je),L.complete())}))}});return s?g.pipe((0,_.Z)(s)):g}(ze(c,s).map(Ee)).pipe((0,Z.U)(Ce))}}(et(C)):null}function wt(C,s){return null===C?[s]:Array.isArray(C)?[...C,s]:[C,s]}function pn(C){return C?Array.isArray(C)?C:[C]:[]}function Pt(C,s){return Array.isArray(C)?C.includes(s):C===s}function Ut(C,s){const c=pn(s);return pn(C).forEach(g=>{Pt(c,g)||c.push(g)}),c}function it(C,s){return pn(s).filter(c=>!Pt(C,c))}class Xt{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(s){this._rawValidators=s||[],this._composedValidatorFn=St(this._rawValidators)}_setAsyncValidators(s){this._rawAsyncValidators=s||[],this._composedAsyncValidatorFn=nn(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(s){this._onDestroyCallbacks.push(s)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(s=>s()),this._onDestroyCallbacks=[]}reset(s){this.control&&this.control.reset(s)}hasError(s,c){return!!this.control&&this.control.hasError(s,c)}getError(s,c){return this.control?this.control.getError(s,c):null}}class kt extends Xt{get formDirective(){return null}get path(){return null}}class Vt extends Xt{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class rn{constructor(s){this._cd=s}get isTouched(){return!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return!!this._cd?.submitted}}let gt=(()=>{class C extends rn{constructor(c){super(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(Vt,2))},C.\u0275dir=o.lG2({type:C,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(c,a){2&c&&o.ekj("ng-untouched",a.isUntouched)("ng-touched",a.isTouched)("ng-pristine",a.isPristine)("ng-dirty",a.isDirty)("ng-valid",a.isValid)("ng-invalid",a.isInvalid)("ng-pending",a.isPending)},features:[o.qOj]}),C})(),Yt=(()=>{class C extends rn{constructor(c){super(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(kt,10))},C.\u0275dir=o.lG2({type:C,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(c,a){2&c&&o.ekj("ng-untouched",a.isUntouched)("ng-touched",a.isTouched)("ng-pristine",a.isPristine)("ng-dirty",a.isDirty)("ng-valid",a.isValid)("ng-invalid",a.isInvalid)("ng-pending",a.isPending)("ng-submitted",a.isSubmitted)},features:[o.qOj]}),C})();const He="VALID",Ye="INVALID",pt="PENDING",vt="DISABLED";function Ht(C){return(mn(C)?C.validators:C)||null}function tn(C,s){return(mn(s)?s.asyncValidators:C)||null}function mn(C){return null!=C&&!Array.isArray(C)&&"object"==typeof C}class _e{constructor(s,c){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._assignValidators(s),this._assignAsyncValidators(c)}get validator(){return this._composedValidatorFn}set validator(s){this._rawValidators=this._composedValidatorFn=s}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(s){this._rawAsyncValidators=this._composedAsyncValidatorFn=s}get parent(){return this._parent}get valid(){return this.status===He}get invalid(){return this.status===Ye}get pending(){return this.status==pt}get disabled(){return this.status===vt}get enabled(){return this.status!==vt}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(s){this._assignValidators(s)}setAsyncValidators(s){this._assignAsyncValidators(s)}addValidators(s){this.setValidators(Ut(s,this._rawValidators))}addAsyncValidators(s){this.setAsyncValidators(Ut(s,this._rawAsyncValidators))}removeValidators(s){this.setValidators(it(s,this._rawValidators))}removeAsyncValidators(s){this.setAsyncValidators(it(s,this._rawAsyncValidators))}hasValidator(s){return Pt(this._rawValidators,s)}hasAsyncValidator(s){return Pt(this._rawAsyncValidators,s)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(s={}){this.touched=!0,this._parent&&!s.onlySelf&&this._parent.markAsTouched(s)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(s=>s.markAllAsTouched())}markAsUntouched(s={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(c=>{c.markAsUntouched({onlySelf:!0})}),this._parent&&!s.onlySelf&&this._parent._updateTouched(s)}markAsDirty(s={}){this.pristine=!1,this._parent&&!s.onlySelf&&this._parent.markAsDirty(s)}markAsPristine(s={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(c=>{c.markAsPristine({onlySelf:!0})}),this._parent&&!s.onlySelf&&this._parent._updatePristine(s)}markAsPending(s={}){this.status=pt,!1!==s.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!s.onlySelf&&this._parent.markAsPending(s)}disable(s={}){const c=this._parentMarkedDirty(s.onlySelf);this.status=vt,this.errors=null,this._forEachChild(a=>{a.disable({...s,onlySelf:!0})}),this._updateValue(),!1!==s.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors({...s,skipPristineCheck:c}),this._onDisabledChange.forEach(a=>a(!0))}enable(s={}){const c=this._parentMarkedDirty(s.onlySelf);this.status=He,this._forEachChild(a=>{a.enable({...s,onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:s.emitEvent}),this._updateAncestors({...s,skipPristineCheck:c}),this._onDisabledChange.forEach(a=>a(!1))}_updateAncestors(s){this._parent&&!s.onlySelf&&(this._parent.updateValueAndValidity(s),s.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(s){this._parent=s}getRawValue(){return this.value}updateValueAndValidity(s={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===He||this.status===pt)&&this._runAsyncValidator(s.emitEvent)),!1!==s.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!s.onlySelf&&this._parent.updateValueAndValidity(s)}_updateTreeValidity(s={emitEvent:!0}){this._forEachChild(c=>c._updateTreeValidity(s)),this.updateValueAndValidity({onlySelf:!0,emitEvent:s.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?vt:He}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(s){if(this.asyncValidator){this.status=pt,this._hasOwnPendingAsyncValidator=!0;const c=Ee(this.asyncValidator(this));this._asyncValidationSubscription=c.subscribe(a=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(a,{emitEvent:s})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(s,c={}){this.errors=s,this._updateControlsErrors(!1!==c.emitEvent)}get(s){let c=s;return null==c||(Array.isArray(c)||(c=c.split(".")),0===c.length)?null:c.reduce((a,g)=>a&&a._find(g),this)}getError(s,c){const a=c?this.get(c):this;return a&&a.errors?a.errors[s]:null}hasError(s,c){return!!this.getError(s,c)}get root(){let s=this;for(;s._parent;)s=s._parent;return s}_updateControlsErrors(s){this.status=this._calculateStatus(),s&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(s)}_initObservables(){this.valueChanges=new o.vpe,this.statusChanges=new o.vpe}_calculateStatus(){return this._allControlsDisabled()?vt:this.errors?Ye:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(pt)?pt:this._anyControlsHaveStatus(Ye)?Ye:He}_anyControlsHaveStatus(s){return this._anyControls(c=>c.status===s)}_anyControlsDirty(){return this._anyControls(s=>s.dirty)}_anyControlsTouched(){return this._anyControls(s=>s.touched)}_updatePristine(s={}){this.pristine=!this._anyControlsDirty(),this._parent&&!s.onlySelf&&this._parent._updatePristine(s)}_updateTouched(s={}){this.touched=this._anyControlsTouched(),this._parent&&!s.onlySelf&&this._parent._updateTouched(s)}_registerOnCollectionChange(s){this._onCollectionChange=s}_setUpdateStrategy(s){mn(s)&&null!=s.updateOn&&(this._updateOn=s.updateOn)}_parentMarkedDirty(s){return!s&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}_find(s){return null}_assignValidators(s){this._rawValidators=Array.isArray(s)?s.slice():s,this._composedValidatorFn=function _t(C){return Array.isArray(C)?St(C):C||null}(this._rawValidators)}_assignAsyncValidators(s){this._rawAsyncValidators=Array.isArray(s)?s.slice():s,this._composedAsyncValidatorFn=function Ln(C){return Array.isArray(C)?nn(C):C||null}(this._rawAsyncValidators)}}class fe extends _e{constructor(s,c,a){super(Ht(c),tn(a,c)),this.controls=s,this._initObservables(),this._setUpdateStrategy(c),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(s,c){return this.controls[s]?this.controls[s]:(this.controls[s]=c,c.setParent(this),c._registerOnCollectionChange(this._onCollectionChange),c)}addControl(s,c,a={}){this.registerControl(s,c),this.updateValueAndValidity({emitEvent:a.emitEvent}),this._onCollectionChange()}removeControl(s,c={}){this.controls[s]&&this.controls[s]._registerOnCollectionChange(()=>{}),delete this.controls[s],this.updateValueAndValidity({emitEvent:c.emitEvent}),this._onCollectionChange()}setControl(s,c,a={}){this.controls[s]&&this.controls[s]._registerOnCollectionChange(()=>{}),delete this.controls[s],c&&this.registerControl(s,c),this.updateValueAndValidity({emitEvent:a.emitEvent}),this._onCollectionChange()}contains(s){return this.controls.hasOwnProperty(s)&&this.controls[s].enabled}setValue(s,c={}){(function Ft(C,s,c){C._forEachChild((a,g)=>{if(void 0===c[g])throw new o.vHH(1002,"")})})(this,0,s),Object.keys(s).forEach(a=>{(function ln(C,s,c){const a=C.controls;if(!(s?Object.keys(a):a).length)throw new o.vHH(1e3,"");if(!a[c])throw new o.vHH(1001,"")})(this,!0,a),this.controls[a].setValue(s[a],{onlySelf:!0,emitEvent:c.emitEvent})}),this.updateValueAndValidity(c)}patchValue(s,c={}){null!=s&&(Object.keys(s).forEach(a=>{const g=this.controls[a];g&&g.patchValue(s[a],{onlySelf:!0,emitEvent:c.emitEvent})}),this.updateValueAndValidity(c))}reset(s={},c={}){this._forEachChild((a,g)=>{a.reset(s[g],{onlySelf:!0,emitEvent:c.emitEvent})}),this._updatePristine(c),this._updateTouched(c),this.updateValueAndValidity(c)}getRawValue(){return this._reduceChildren({},(s,c,a)=>(s[a]=c.getRawValue(),s))}_syncPendingControls(){let s=this._reduceChildren(!1,(c,a)=>!!a._syncPendingControls()||c);return s&&this.updateValueAndValidity({onlySelf:!0}),s}_forEachChild(s){Object.keys(this.controls).forEach(c=>{const a=this.controls[c];a&&s(a,c)})}_setUpControls(){this._forEachChild(s=>{s.setParent(this),s._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(s){for(const[c,a]of Object.entries(this.controls))if(this.contains(c)&&s(a))return!0;return!1}_reduceValue(){return this._reduceChildren({},(c,a,g)=>((a.enabled||this.disabled)&&(c[g]=a.value),c))}_reduceChildren(s,c){let a=s;return this._forEachChild((g,L)=>{a=c(a,g,L)}),a}_allControlsDisabled(){for(const s of Object.keys(this.controls))if(this.controls[s].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(s){return this.controls.hasOwnProperty(s)?this.controls[s]:null}}const It=new o.OlP("CallSetDisabledState",{providedIn:"root",factory:()=>cn}),cn="always";function sn(C,s,c=cn){$n(C,s),s.valueAccessor.writeValue(C.value),(C.disabled||"always"===c)&&s.valueAccessor.setDisabledState?.(C.disabled),function xn(C,s){s.valueAccessor.registerOnChange(c=>{C._pendingValue=c,C._pendingChange=!0,C._pendingDirty=!0,"change"===C.updateOn&&tr(C,s)})}(C,s),function Ir(C,s){const c=(a,g)=>{s.valueAccessor.writeValue(a),g&&s.viewToModelUpdate(a)};C.registerOnChange(c),s._registerOnDestroy(()=>{C._unregisterOnChange(c)})}(C,s),function vn(C,s){s.valueAccessor.registerOnTouched(()=>{C._pendingTouched=!0,"blur"===C.updateOn&&C._pendingChange&&tr(C,s),"submit"!==C.updateOn&&C.markAsTouched()})}(C,s),function sr(C,s){if(s.valueAccessor.setDisabledState){const c=a=>{s.valueAccessor.setDisabledState(a)};C.registerOnDisabledChange(c),s._registerOnDestroy(()=>{C._unregisterOnDisabledChange(c)})}}(C,s)}function er(C,s){C.forEach(c=>{c.registerOnValidatorChange&&c.registerOnValidatorChange(s)})}function $n(C,s){const c=function Rt(C){return C._rawValidators}(C);null!==s.validator?C.setValidators(wt(c,s.validator)):"function"==typeof c&&C.setValidators([c]);const a=function Kt(C){return C._rawAsyncValidators}(C);null!==s.asyncValidator?C.setAsyncValidators(wt(a,s.asyncValidator)):"function"==typeof a&&C.setAsyncValidators([a]);const g=()=>C.updateValueAndValidity();er(s._rawValidators,g),er(s._rawAsyncValidators,g)}function tr(C,s){C._pendingDirty&&C.markAsDirty(),C.setValue(C._pendingValue,{emitModelToViewChange:!1}),s.viewToModelUpdate(C._pendingValue),C._pendingChange=!1}const Pe={provide:kt,useExisting:(0,o.Gpc)(()=>le)},X=(()=>Promise.resolve())();let le=(()=>{class C extends kt{constructor(c,a,g){super(),this.callSetDisabledState=g,this.submitted=!1,this._directives=new Set,this.ngSubmit=new o.vpe,this.form=new fe({},St(c),nn(a))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(c){X.then(()=>{const a=this._findContainer(c.path);c.control=a.registerControl(c.name,c.control),sn(c.control,c,this.callSetDisabledState),c.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(c)})}getControl(c){return this.form.get(c.path)}removeControl(c){X.then(()=>{const a=this._findContainer(c.path);a&&a.removeControl(c.name),this._directives.delete(c)})}addFormGroup(c){X.then(()=>{const a=this._findContainer(c.path),g=new fe({});(function cr(C,s){$n(C,s)})(g,c),a.registerControl(c.name,g),g.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(c){X.then(()=>{const a=this._findContainer(c.path);a&&a.removeControl(c.name)})}getFormGroup(c){return this.form.get(c.path)}updateModel(c,a){X.then(()=>{this.form.get(c.path).setValue(a)})}setValue(c){this.control.setValue(c)}onSubmit(c){return this.submitted=!0,function F(C,s){C._syncPendingControls(),s.forEach(c=>{const a=c.control;"submit"===a.updateOn&&a._pendingChange&&(c.viewToModelUpdate(a._pendingValue),a._pendingChange=!1)})}(this.form,this._directives),this.ngSubmit.emit(c),"dialog"===c?.target?.method}onReset(){this.resetForm()}resetForm(c){this.form.reset(c),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(c){return c.pop(),c.length?this.form.get(c):this.form}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(oe,10),o.Y36(be,10),o.Y36(It,8))},C.\u0275dir=o.lG2({type:C,selectors:[["form",3,"ngNoForm","",3,"formGroup",""],["ng-form"],["","ngForm",""]],hostBindings:function(c,a){1&c&&o.NdJ("submit",function(L){return a.onSubmit(L)})("reset",function(){return a.onReset()})},inputs:{options:["ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[o._Bn([Pe]),o.qOj]}),C})();function Ie(C,s){const c=C.indexOf(s);c>-1&&C.splice(c,1)}function je(C){return"object"==typeof C&&null!==C&&2===Object.keys(C).length&&"value"in C&&"disabled"in C}const Re=class extends _e{constructor(s=null,c,a){super(Ht(c),tn(a,c)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(s),this._setUpdateStrategy(c),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),mn(c)&&(c.nonNullable||c.initialValueIsDefault)&&(this.defaultValue=je(s)?s.value:s)}setValue(s,c={}){this.value=this._pendingValue=s,this._onChange.length&&!1!==c.emitModelToViewChange&&this._onChange.forEach(a=>a(this.value,!1!==c.emitViewToModelChange)),this.updateValueAndValidity(c)}patchValue(s,c={}){this.setValue(s,c)}reset(s=this.defaultValue,c={}){this._applyFormState(s),this.markAsPristine(c),this.markAsUntouched(c),this.setValue(this.value,c),this._pendingChange=!1}_updateValue(){}_anyControls(s){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(s){this._onChange.push(s)}_unregisterOnChange(s){Ie(this._onChange,s)}registerOnDisabledChange(s){this._onDisabledChange.push(s)}_unregisterOnDisabledChange(s){Ie(this._onDisabledChange,s)}_forEachChild(s){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(s){je(s)?(this.value=this._pendingValue=s.value,s.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=s}},mr={provide:Vt,useExisting:(0,o.Gpc)(()=>fo)},an=(()=>Promise.resolve())();let fo=(()=>{class C extends Vt{constructor(c,a,g,L,Me,Je){super(),this._changeDetectorRef=Me,this.callSetDisabledState=Je,this.control=new Re,this._registered=!1,this.update=new o.vpe,this._parent=c,this._setValidators(a),this._setAsyncValidators(g),this.valueAccessor=function q(C,s){if(!s)return null;let c,a,g;return Array.isArray(s),s.forEach(L=>{L.constructor===Te?c=L:function rt(C){return Object.getPrototypeOf(C.constructor)===B}(L)?a=L:g=L}),g||a||c||null}(0,L)}ngOnChanges(c){if(this._checkForErrors(),!this._registered||"name"in c){if(this._registered&&(this._checkName(),this.formDirective)){const a=c.name.previousValue;this.formDirective.removeControl({name:a,path:this._getPath(a)})}this._setUpControl()}"isDisabled"in c&&this._updateDisabled(c),function Cn(C,s){if(!C.hasOwnProperty("model"))return!1;const c=C.model;return!!c.isFirstChange()||!Object.is(s,c.currentValue)}(c,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(c){this.viewModel=c,this.update.emit(c)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){sn(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(c){an.then(()=>{this.control.setValue(c,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(c){const a=c.isDisabled.currentValue,g=0!==a&&(0,o.D6c)(a);an.then(()=>{g&&!this.control.disabled?this.control.disable():!g&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(c){return this._parent?function Dn(C,s){return[...s.path,C]}(c,this._parent):[c]}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(kt,9),o.Y36(oe,10),o.Y36(be,10),o.Y36(E,10),o.Y36(o.sBO,8),o.Y36(It,8))},C.\u0275dir=o.lG2({type:C,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[o._Bn([mr]),o.qOj,o.TTD]}),C})(),ho=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275dir=o.lG2({type:C,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""]}),C})(),ar=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({}),C})(),hr=(()=>{class C{constructor(){this._validator=de}ngOnChanges(c){if(this.inputName in c){const a=this.normalizeInput(c[this.inputName].currentValue);this._enabled=this.enabled(a),this._validator=this._enabled?this.createValidator(a):de,this._onChange&&this._onChange()}}validate(c){return this._validator(c)}registerOnValidatorChange(c){this._onChange=c}enabled(c){return null!=c}}return C.\u0275fac=function(c){return new(c||C)},C.\u0275dir=o.lG2({type:C,features:[o.TTD]}),C})();const bo={provide:oe,useExisting:(0,o.Gpc)(()=>Wr),multi:!0};let Wr=(()=>{class C extends hr{constructor(){super(...arguments),this.inputName="required",this.normalizeInput=o.D6c,this.createValidator=c=>O}enabled(c){return c}}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,selectors:[["","required","","formControlName","",3,"type","checkbox"],["","required","","formControl","",3,"type","checkbox"],["","required","","ngModel","",3,"type","checkbox"]],hostVars:1,hostBindings:function(c,a){2&c&&o.uIk("required",a._enabled?"":null)},inputs:{required:"required"},features:[o._Bn([bo]),o.qOj]}),C})();const Zn={provide:oe,useExisting:(0,o.Gpc)(()=>Lr),multi:!0};let Lr=(()=>{class C extends hr{constructor(){super(...arguments),this.inputName="pattern",this.normalizeInput=c=>c,this.createValidator=c=>function ue(C){if(!C)return de;let s,c;return"string"==typeof C?(c="","^"!==C.charAt(0)&&(c+="^"),c+=C,"$"!==C.charAt(C.length-1)&&(c+="$"),s=new RegExp(c)):(c=C.toString(),s=C),a=>{if(Be(a.value))return null;const g=a.value;return s.test(g)?null:{pattern:{requiredPattern:c,actualValue:g}}}}(c)}}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,selectors:[["","pattern","","formControlName",""],["","pattern","","formControl",""],["","pattern","","ngModel",""]],hostVars:1,hostBindings:function(c,a){2&c&&o.uIk("pattern",a._enabled?a.pattern:null)},inputs:{pattern:"pattern"},features:[o._Bn([Zn]),o.qOj]}),C})(),Fo=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({imports:[ar]}),C})(),wo=(()=>{class C{static withConfig(c){return{ngModule:C,providers:[{provide:It,useValue:c.callSetDisabledState??cn}]}}}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({imports:[Fo]}),C})()},1481:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Dx:()=>gt,b2:()=>kt,q6:()=>Pt});var o=w(6895),x=w(8274);class N extends o.w_{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class ge extends N{static makeCurrent(){(0,o.HT)(new ge)}onAndCancel(fe,ee,Se){return fe.addEventListener(ee,Se,!1),()=>{fe.removeEventListener(ee,Se,!1)}}dispatchEvent(fe,ee){fe.dispatchEvent(ee)}remove(fe){fe.parentNode&&fe.parentNode.removeChild(fe)}createElement(fe,ee){return(ee=ee||this.getDefaultDocument()).createElement(fe)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(fe){return fe.nodeType===Node.ELEMENT_NODE}isShadowRoot(fe){return fe instanceof DocumentFragment}getGlobalEventTarget(fe,ee){return"window"===ee?window:"document"===ee?fe:"body"===ee?fe.body:null}getBaseHref(fe){const ee=function W(){return R=R||document.querySelector("base"),R?R.getAttribute("href"):null}();return null==ee?null:function U(_e){M=M||document.createElement("a"),M.setAttribute("href",_e);const fe=M.pathname;return"/"===fe.charAt(0)?fe:`/${fe}`}(ee)}resetBaseElement(){R=null}getUserAgent(){return window.navigator.userAgent}getCookie(fe){return(0,o.Mx)(document.cookie,fe)}}let M,R=null;const _=new x.OlP("TRANSITION_ID"),G=[{provide:x.ip1,useFactory:function Y(_e,fe,ee){return()=>{ee.get(x.CZH).donePromise.then(()=>{const Se=(0,o.q)(),Le=fe.querySelectorAll(`style[ng-transition="${_e}"]`);for(let yt=0;yt{class _e{build(){return new XMLHttpRequest}}return _e.\u0275fac=function(ee){return new(ee||_e)},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const B=new x.OlP("EventManagerPlugins");let E=(()=>{class _e{constructor(ee,Se){this._zone=Se,this._eventNameToPlugin=new Map,ee.forEach(Le=>Le.manager=this),this._plugins=ee.slice().reverse()}addEventListener(ee,Se,Le){return this._findPluginFor(Se).addEventListener(ee,Se,Le)}addGlobalEventListener(ee,Se,Le){return this._findPluginFor(Se).addGlobalEventListener(ee,Se,Le)}getZone(){return this._zone}_findPluginFor(ee){const Se=this._eventNameToPlugin.get(ee);if(Se)return Se;const Le=this._plugins;for(let yt=0;yt{class _e{constructor(){this._stylesSet=new Set}addStyles(ee){const Se=new Set;ee.forEach(Le=>{this._stylesSet.has(Le)||(this._stylesSet.add(Le),Se.add(Le))}),this.onStylesAdded(Se)}onStylesAdded(ee){}getAllStyles(){return Array.from(this._stylesSet)}}return _e.\u0275fac=function(ee){return new(ee||_e)},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})(),K=(()=>{class _e extends P{constructor(ee){super(),this._doc=ee,this._hostNodes=new Map,this._hostNodes.set(ee.head,[])}_addStylesToHost(ee,Se,Le){ee.forEach(yt=>{const It=this._doc.createElement("style");It.textContent=yt,Le.push(Se.appendChild(It))})}addHost(ee){const Se=[];this._addStylesToHost(this._stylesSet,ee,Se),this._hostNodes.set(ee,Se)}removeHost(ee){const Se=this._hostNodes.get(ee);Se&&Se.forEach(pe),this._hostNodes.delete(ee)}onStylesAdded(ee){this._hostNodes.forEach((Se,Le)=>{this._addStylesToHost(ee,Le,Se)})}ngOnDestroy(){this._hostNodes.forEach(ee=>ee.forEach(pe))}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();function pe(_e){(0,o.q)().remove(_e)}const ke={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},Te=/%COMP%/g;function Q(_e,fe,ee){for(let Se=0;Se{if("__ngUnwrap__"===fe)return _e;!1===_e(fe)&&(fe.preventDefault(),fe.returnValue=!1)}}let O=(()=>{class _e{constructor(ee,Se,Le){this.eventManager=ee,this.sharedStylesHost=Se,this.appId=Le,this.rendererByCompId=new Map,this.defaultRenderer=new te(ee)}createRenderer(ee,Se){if(!ee||!Se)return this.defaultRenderer;switch(Se.encapsulation){case x.ifc.Emulated:{let Le=this.rendererByCompId.get(Se.id);return Le||(Le=new ue(this.eventManager,this.sharedStylesHost,Se,this.appId),this.rendererByCompId.set(Se.id,Le)),Le.applyToHost(ee),Le}case 1:case x.ifc.ShadowDom:return new de(this.eventManager,this.sharedStylesHost,ee,Se);default:if(!this.rendererByCompId.has(Se.id)){const Le=Q(Se.id,Se.styles,[]);this.sharedStylesHost.addStyles(Le),this.rendererByCompId.set(Se.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(E),x.LFG(K),x.LFG(x.AFp))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();class te{constructor(fe){this.eventManager=fe,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(fe,ee){return ee?document.createElementNS(ke[ee]||ee,fe):document.createElement(fe)}createComment(fe){return document.createComment(fe)}createText(fe){return document.createTextNode(fe)}appendChild(fe,ee){(De(fe)?fe.content:fe).appendChild(ee)}insertBefore(fe,ee,Se){fe&&(De(fe)?fe.content:fe).insertBefore(ee,Se)}removeChild(fe,ee){fe&&fe.removeChild(ee)}selectRootElement(fe,ee){let Se="string"==typeof fe?document.querySelector(fe):fe;if(!Se)throw new Error(`The selector "${fe}" did not match any elements`);return ee||(Se.textContent=""),Se}parentNode(fe){return fe.parentNode}nextSibling(fe){return fe.nextSibling}setAttribute(fe,ee,Se,Le){if(Le){ee=Le+":"+ee;const yt=ke[Le];yt?fe.setAttributeNS(yt,ee,Se):fe.setAttribute(ee,Se)}else fe.setAttribute(ee,Se)}removeAttribute(fe,ee,Se){if(Se){const Le=ke[Se];Le?fe.removeAttributeNS(Le,ee):fe.removeAttribute(`${Se}:${ee}`)}else fe.removeAttribute(ee)}addClass(fe,ee){fe.classList.add(ee)}removeClass(fe,ee){fe.classList.remove(ee)}setStyle(fe,ee,Se,Le){Le&(x.JOm.DashCase|x.JOm.Important)?fe.style.setProperty(ee,Se,Le&x.JOm.Important?"important":""):fe.style[ee]=Se}removeStyle(fe,ee,Se){Se&x.JOm.DashCase?fe.style.removeProperty(ee):fe.style[ee]=""}setProperty(fe,ee,Se){fe[ee]=Se}setValue(fe,ee){fe.nodeValue=ee}listen(fe,ee,Se){return"string"==typeof fe?this.eventManager.addGlobalEventListener(fe,ee,T(Se)):this.eventManager.addEventListener(fe,ee,T(Se))}}function De(_e){return"TEMPLATE"===_e.tagName&&void 0!==_e.content}class ue extends te{constructor(fe,ee,Se,Le){super(fe),this.component=Se;const yt=Q(Le+"-"+Se.id,Se.styles,[]);ee.addStyles(yt),this.contentAttr=function be(_e){return"_ngcontent-%COMP%".replace(Te,_e)}(Le+"-"+Se.id),this.hostAttr=function Ne(_e){return"_nghost-%COMP%".replace(Te,_e)}(Le+"-"+Se.id)}applyToHost(fe){super.setAttribute(fe,this.hostAttr,"")}createElement(fe,ee){const Se=super.createElement(fe,ee);return super.setAttribute(Se,this.contentAttr,""),Se}}class de extends te{constructor(fe,ee,Se,Le){super(fe),this.sharedStylesHost=ee,this.hostEl=Se,this.shadowRoot=Se.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const yt=Q(Le.id,Le.styles,[]);for(let It=0;It{class _e extends j{constructor(ee){super(ee)}supports(ee){return!0}addEventListener(ee,Se,Le){return ee.addEventListener(Se,Le,!1),()=>this.removeEventListener(ee,Se,Le)}removeEventListener(ee,Se,Le){return ee.removeEventListener(Se,Le)}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const Ee=["alt","control","meta","shift"],Ce={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},ze={alt:_e=>_e.altKey,control:_e=>_e.ctrlKey,meta:_e=>_e.metaKey,shift:_e=>_e.shiftKey};let dt=(()=>{class _e extends j{constructor(ee){super(ee)}supports(ee){return null!=_e.parseEventName(ee)}addEventListener(ee,Se,Le){const yt=_e.parseEventName(Se),It=_e.eventCallback(yt.fullKey,Le,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>(0,o.q)().onAndCancel(ee,yt.domEventName,It))}static parseEventName(ee){const Se=ee.toLowerCase().split("."),Le=Se.shift();if(0===Se.length||"keydown"!==Le&&"keyup"!==Le)return null;const yt=_e._normalizeKey(Se.pop());let It="",cn=Se.indexOf("code");if(cn>-1&&(Se.splice(cn,1),It="code."),Ee.forEach(sn=>{const dn=Se.indexOf(sn);dn>-1&&(Se.splice(dn,1),It+=sn+".")}),It+=yt,0!=Se.length||0===yt.length)return null;const Dn={};return Dn.domEventName=Le,Dn.fullKey=It,Dn}static matchEventFullKeyCode(ee,Se){let Le=Ce[ee.key]||ee.key,yt="";return Se.indexOf("code.")>-1&&(Le=ee.code,yt="code."),!(null==Le||!Le)&&(Le=Le.toLowerCase()," "===Le?Le="space":"."===Le&&(Le="dot"),Ee.forEach(It=>{It!==Le&&(0,ze[It])(ee)&&(yt+=It+".")}),yt+=Le,yt===Se)}static eventCallback(ee,Se,Le){return yt=>{_e.matchEventFullKeyCode(yt,ee)&&Le.runGuarded(()=>Se(yt))}}static _normalizeKey(ee){return"esc"===ee?"escape":ee}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const Pt=(0,x.eFA)(x._c5,"browser",[{provide:x.Lbi,useValue:o.bD},{provide:x.g9A,useValue:function wt(){ge.makeCurrent()},multi:!0},{provide:o.K0,useFactory:function Kt(){return(0,x.RDi)(document),document},deps:[]}]),Ut=new x.OlP(""),it=[{provide:x.rWj,useClass:class Z{addToWindow(fe){x.dqk.getAngularTestability=(Se,Le=!0)=>{const yt=fe.findTestabilityInTree(Se,Le);if(null==yt)throw new Error("Could not find testability for element.");return yt},x.dqk.getAllAngularTestabilities=()=>fe.getAllTestabilities(),x.dqk.getAllAngularRootElements=()=>fe.getAllRootElements(),x.dqk.frameworkStabilizers||(x.dqk.frameworkStabilizers=[]),x.dqk.frameworkStabilizers.push(Se=>{const Le=x.dqk.getAllAngularTestabilities();let yt=Le.length,It=!1;const cn=function(Dn){It=It||Dn,yt--,0==yt&&Se(It)};Le.forEach(function(Dn){Dn.whenStable(cn)})})}findTestabilityInTree(fe,ee,Se){return null==ee?null:fe.getTestability(ee)??(Se?(0,o.q)().isShadowRoot(ee)?this.findTestabilityInTree(fe,ee.host,!0):this.findTestabilityInTree(fe,ee.parentElement,!0):null)}},deps:[]},{provide:x.lri,useClass:x.dDg,deps:[x.R0b,x.eoX,x.rWj]},{provide:x.dDg,useClass:x.dDg,deps:[x.R0b,x.eoX,x.rWj]}],Xt=[{provide:x.zSh,useValue:"root"},{provide:x.qLn,useFactory:function Rt(){return new x.qLn},deps:[]},{provide:B,useClass:ne,multi:!0,deps:[o.K0,x.R0b,x.Lbi]},{provide:B,useClass:dt,multi:!0,deps:[o.K0]},{provide:O,useClass:O,deps:[E,K,x.AFp]},{provide:x.FYo,useExisting:O},{provide:P,useExisting:K},{provide:K,useClass:K,deps:[o.K0]},{provide:E,useClass:E,deps:[B,x.R0b]},{provide:o.JF,useClass:S,deps:[]},[]];let kt=(()=>{class _e{constructor(ee){}static withServerTransition(ee){return{ngModule:_e,providers:[{provide:x.AFp,useValue:ee.appId},{provide:_,useExisting:x.AFp},G]}}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(Ut,12))},_e.\u0275mod=x.oAB({type:_e}),_e.\u0275inj=x.cJS({providers:[...Xt,...it],imports:[o.ez,x.hGG]}),_e})(),gt=(()=>{class _e{constructor(ee){this._doc=ee}getTitle(){return this._doc.title}setTitle(ee){this._doc.title=ee||""}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:function(ee){let Se=null;return Se=ee?new ee:function en(){return new gt((0,x.LFG)(o.K0))}(),Se},providedIn:"root"}),_e})();typeof window<"u"&&window},5472:(Qe,Fe,w)=>{"use strict";w.d(Fe,{gz:()=>Rr,y6:()=>fr,OD:()=>Mt,eC:()=>it,wm:()=>Dl,wN:()=>ya,F0:()=>or,rH:()=>mi,Bz:()=>qu,Hx:()=>pt});var o=w(8274),x=w(2076),N=w(9646),ge=w(1135);const W=(0,w(3888).d)(f=>function(){f(this),this.name="EmptyError",this.message="no elements in sequence"});var M=w(9751),U=w(4742),_=w(4671),Y=w(3268),G=w(3269),Z=w(1810),S=w(5403),B=w(9672);function E(...f){const h=(0,G.yG)(f),d=(0,G.jO)(f),{args:m,keys:b}=(0,U.D)(f);if(0===m.length)return(0,x.D)([],h);const $=new M.y(function j(f,h,d=_.y){return m=>{P(h,()=>{const{length:b}=f,$=new Array(b);let z=b,ve=b;for(let We=0;We{const ft=(0,x.D)(f[We],h);let bt=!1;ft.subscribe((0,S.x)(m,jt=>{$[We]=jt,bt||(bt=!0,ve--),ve||m.next(d($.slice()))},()=>{--z||m.complete()}))},m)},m)}}(m,h,b?z=>(0,Z.n)(b,z):_.y));return d?$.pipe((0,Y.Z)(d)):$}function P(f,h,d){f?(0,B.f)(d,f,h):h()}var K=w(8189);function ke(...f){return function pe(){return(0,K.J)(1)}()((0,x.D)(f,(0,G.yG)(f)))}var Te=w(8421);function ie(f){return new M.y(h=>{(0,Te.Xf)(f()).subscribe(h)})}var Be=w(9635),re=w(576);function oe(f,h){const d=(0,re.m)(f)?f:()=>f,m=b=>b.error(d());return new M.y(h?b=>h.schedule(m,0,b):m)}var be=w(515),Ne=w(727),Q=w(4482);function T(){return(0,Q.e)((f,h)=>{let d=null;f._refCount++;const m=(0,S.x)(h,void 0,void 0,void 0,()=>{if(!f||f._refCount<=0||0<--f._refCount)return void(d=null);const b=f._connection,$=d;d=null,b&&(!$||b===$)&&b.unsubscribe(),h.unsubscribe()});f.subscribe(m),m.closed||(d=f.connect())})}class k extends M.y{constructor(h,d){super(),this.source=h,this.subjectFactory=d,this._subject=null,this._refCount=0,this._connection=null,(0,Q.A)(h)&&(this.lift=h.lift)}_subscribe(h){return this.getSubject().subscribe(h)}getSubject(){const h=this._subject;return(!h||h.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:h}=this;this._subject=this._connection=null,h?.unsubscribe()}connect(){let h=this._connection;if(!h){h=this._connection=new Ne.w0;const d=this.getSubject();h.add(this.source.subscribe((0,S.x)(d,void 0,()=>{this._teardown(),d.complete()},m=>{this._teardown(),d.error(m)},()=>this._teardown()))),h.closed&&(this._connection=null,h=Ne.w0.EMPTY)}return h}refCount(){return T()(this)}}var O=w(7579),te=w(6895),ce=w(4004),Ae=w(3900),De=w(5698),de=w(9300),ne=w(5577);function Ee(f){return(0,Q.e)((h,d)=>{let m=!1;h.subscribe((0,S.x)(d,b=>{m=!0,d.next(b)},()=>{m||d.next(f),d.complete()}))})}function Ce(f=ze){return(0,Q.e)((h,d)=>{let m=!1;h.subscribe((0,S.x)(d,b=>{m=!0,d.next(b)},()=>m?d.complete():d.error(f())))})}function ze(){return new W}function dt(f,h){const d=arguments.length>=2;return m=>m.pipe(f?(0,de.h)((b,$)=>f(b,$,m)):_.y,(0,De.q)(1),d?Ee(h):Ce(()=>new W))}var et=w(4351),Ue=w(8505);function St(f){return(0,Q.e)((h,d)=>{let $,m=null,b=!1;m=h.subscribe((0,S.x)(d,void 0,void 0,z=>{$=(0,Te.Xf)(f(z,St(f)(h))),m?(m.unsubscribe(),m=null,$.subscribe(d)):b=!0})),b&&(m.unsubscribe(),m=null,$.subscribe(d))})}function Ke(f,h,d,m,b){return($,z)=>{let ve=d,We=h,ft=0;$.subscribe((0,S.x)(z,bt=>{const jt=ft++;We=ve?f(We,bt,jt):(ve=!0,bt),m&&z.next(We)},b&&(()=>{ve&&z.next(We),z.complete()})))}}function nn(f,h){return(0,Q.e)(Ke(f,h,arguments.length>=2,!0))}function wt(f){return f<=0?()=>be.E:(0,Q.e)((h,d)=>{let m=[];h.subscribe((0,S.x)(d,b=>{m.push(b),f{for(const b of m)d.next(b);d.complete()},void 0,()=>{m=null}))})}function Rt(f,h){const d=arguments.length>=2;return m=>m.pipe(f?(0,de.h)((b,$)=>f(b,$,m)):_.y,wt(1),d?Ee(h):Ce(()=>new W))}var Kt=w(2529),Pt=w(8746),Ut=w(1481);const it="primary",Xt=Symbol("RouteTitle");class kt{constructor(h){this.params=h||{}}has(h){return Object.prototype.hasOwnProperty.call(this.params,h)}get(h){if(this.has(h)){const d=this.params[h];return Array.isArray(d)?d[0]:d}return null}getAll(h){if(this.has(h)){const d=this.params[h];return Array.isArray(d)?d:[d]}return[]}get keys(){return Object.keys(this.params)}}function Vt(f){return new kt(f)}function rn(f,h,d){const m=d.path.split("/");if(m.length>f.length||"full"===d.pathMatch&&(h.hasChildren()||m.lengthm[$]===b)}return f===h}function Yt(f){return Array.prototype.concat.apply([],f)}function ht(f){return f.length>0?f[f.length-1]:null}function Et(f,h){for(const d in f)f.hasOwnProperty(d)&&h(f[d],d)}function ut(f){return(0,o.CqO)(f)?f:(0,o.QGY)(f)?(0,x.D)(Promise.resolve(f)):(0,N.of)(f)}const Ct=!1,qe={exact:function Hn(f,h,d){if(!He(f.segments,h.segments)||!Xn(f.segments,h.segments,d)||f.numberOfChildren!==h.numberOfChildren)return!1;for(const m in h.children)if(!f.children[m]||!Hn(f.children[m],h.children[m],d))return!1;return!0},subset:Er},on={exact:function Nt(f,h){return en(f,h)},subset:function zt(f,h){return Object.keys(h).length<=Object.keys(f).length&&Object.keys(h).every(d=>gt(f[d],h[d]))},ignored:()=>!0};function gn(f,h,d){return qe[d.paths](f.root,h.root,d.matrixParams)&&on[d.queryParams](f.queryParams,h.queryParams)&&!("exact"===d.fragment&&f.fragment!==h.fragment)}function Er(f,h,d){return jn(f,h,h.segments,d)}function jn(f,h,d,m){if(f.segments.length>d.length){const b=f.segments.slice(0,d.length);return!(!He(b,d)||h.hasChildren()||!Xn(b,d,m))}if(f.segments.length===d.length){if(!He(f.segments,d)||!Xn(f.segments,d,m))return!1;for(const b in h.children)if(!f.children[b]||!Er(f.children[b],h.children[b],m))return!1;return!0}{const b=d.slice(0,f.segments.length),$=d.slice(f.segments.length);return!!(He(f.segments,b)&&Xn(f.segments,b,m)&&f.children[it])&&jn(f.children[it],h,$,m)}}function Xn(f,h,d){return h.every((m,b)=>on[d](f[b].parameters,m.parameters))}class En{constructor(h=new xe([],{}),d={},m=null){this.root=h,this.queryParams=d,this.fragment=m}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Vt(this.queryParams)),this._queryParamMap}toString(){return Ht.serialize(this)}}class xe{constructor(h,d){this.segments=h,this.children=d,this.parent=null,Et(d,(m,b)=>m.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return _t(this)}}class se{constructor(h,d){this.path=h,this.parameters=d}get parameterMap(){return this._parameterMap||(this._parameterMap=Vt(this.parameters)),this._parameterMap}toString(){return ee(this)}}function He(f,h){return f.length===h.length&&f.every((d,m)=>d.path===h[m].path)}let pt=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return new vt},providedIn:"root"}),f})();class vt{parse(h){const d=new er(h);return new En(d.parseRootSegment(),d.parseQueryParams(),d.parseFragment())}serialize(h){const d=`/${tn(h.root,!0)}`,m=function Le(f){const h=Object.keys(f).map(d=>{const m=f[d];return Array.isArray(m)?m.map(b=>`${mn(d)}=${mn(b)}`).join("&"):`${mn(d)}=${mn(m)}`}).filter(d=>!!d);return h.length?`?${h.join("&")}`:""}(h.queryParams);return`${d}${m}${"string"==typeof h.fragment?`#${function ln(f){return encodeURI(f)}(h.fragment)}`:""}`}}const Ht=new vt;function _t(f){return f.segments.map(h=>ee(h)).join("/")}function tn(f,h){if(!f.hasChildren())return _t(f);if(h){const d=f.children[it]?tn(f.children[it],!1):"",m=[];return Et(f.children,(b,$)=>{$!==it&&m.push(`${$}:${tn(b,!1)}`)}),m.length>0?`${d}(${m.join("//")})`:d}{const d=function Ye(f,h){let d=[];return Et(f.children,(m,b)=>{b===it&&(d=d.concat(h(m,b)))}),Et(f.children,(m,b)=>{b!==it&&(d=d.concat(h(m,b)))}),d}(f,(m,b)=>b===it?[tn(f.children[it],!1)]:[`${b}:${tn(m,!1)}`]);return 1===Object.keys(f.children).length&&null!=f.children[it]?`${_t(f)}/${d[0]}`:`${_t(f)}/(${d.join("//")})`}}function Ln(f){return encodeURIComponent(f).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function mn(f){return Ln(f).replace(/%3B/gi,";")}function Ft(f){return Ln(f).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function _e(f){return decodeURIComponent(f)}function fe(f){return _e(f.replace(/\+/g,"%20"))}function ee(f){return`${Ft(f.path)}${function Se(f){return Object.keys(f).map(h=>`;${Ft(h)}=${Ft(f[h])}`).join("")}(f.parameters)}`}const yt=/^[^\/()?;=#]+/;function It(f){const h=f.match(yt);return h?h[0]:""}const cn=/^[^=?&#]+/,sn=/^[^&#]+/;class er{constructor(h){this.url=h,this.remaining=h}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new xe([],{}):new xe([],this.parseChildren())}parseQueryParams(){const h={};if(this.consumeOptional("?"))do{this.parseQueryParam(h)}while(this.consumeOptional("&"));return h}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const h=[];for(this.peekStartsWith("(")||h.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),h.push(this.parseSegment());let d={};this.peekStartsWith("/(")&&(this.capture("/"),d=this.parseParens(!0));let m={};return this.peekStartsWith("(")&&(m=this.parseParens(!1)),(h.length>0||Object.keys(d).length>0)&&(m[it]=new xe(h,d)),m}parseSegment(){const h=It(this.remaining);if(""===h&&this.peekStartsWith(";"))throw new o.vHH(4009,Ct);return this.capture(h),new se(_e(h),this.parseMatrixParams())}parseMatrixParams(){const h={};for(;this.consumeOptional(";");)this.parseParam(h);return h}parseParam(h){const d=It(this.remaining);if(!d)return;this.capture(d);let m="";if(this.consumeOptional("=")){const b=It(this.remaining);b&&(m=b,this.capture(m))}h[_e(d)]=_e(m)}parseQueryParam(h){const d=function Dn(f){const h=f.match(cn);return h?h[0]:""}(this.remaining);if(!d)return;this.capture(d);let m="";if(this.consumeOptional("=")){const z=function dn(f){const h=f.match(sn);return h?h[0]:""}(this.remaining);z&&(m=z,this.capture(m))}const b=fe(d),$=fe(m);if(h.hasOwnProperty(b)){let z=h[b];Array.isArray(z)||(z=[z],h[b]=z),z.push($)}else h[b]=$}parseParens(h){const d={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const m=It(this.remaining),b=this.remaining[m.length];if("/"!==b&&")"!==b&&";"!==b)throw new o.vHH(4010,Ct);let $;m.indexOf(":")>-1?($=m.slice(0,m.indexOf(":")),this.capture($),this.capture(":")):h&&($=it);const z=this.parseChildren();d[$]=1===Object.keys(z).length?z[it]:new xe([],z),this.consumeOptional("//")}return d}peekStartsWith(h){return this.remaining.startsWith(h)}consumeOptional(h){return!!this.peekStartsWith(h)&&(this.remaining=this.remaining.substring(h.length),!0)}capture(h){if(!this.consumeOptional(h))throw new o.vHH(4011,Ct)}}function sr(f){return f.segments.length>0?new xe([],{[it]:f}):f}function $n(f){const h={};for(const m of Object.keys(f.children)){const $=$n(f.children[m]);($.segments.length>0||$.hasChildren())&&(h[m]=$)}return function Tn(f){if(1===f.numberOfChildren&&f.children[it]){const h=f.children[it];return new xe(f.segments.concat(h.segments),h.children)}return f}(new xe(f.segments,h))}function xn(f){return f instanceof En}function gr(f,h,d,m,b){if(0===d.length)return Qt(h.root,h.root,h.root,m,b);const $=function Cn(f){if("string"==typeof f[0]&&1===f.length&&"/"===f[0])return new On(!0,0,f);let h=0,d=!1;const m=f.reduce((b,$,z)=>{if("object"==typeof $&&null!=$){if($.outlets){const ve={};return Et($.outlets,(We,ft)=>{ve[ft]="string"==typeof We?We.split("/"):We}),[...b,{outlets:ve}]}if($.segmentPath)return[...b,$.segmentPath]}return"string"!=typeof $?[...b,$]:0===z?($.split("/").forEach((ve,We)=>{0==We&&"."===ve||(0==We&&""===ve?d=!0:".."===ve?h++:""!=ve&&b.push(ve))}),b):[...b,$]},[]);return new On(d,h,m)}(d);return $.toRoot()?Qt(h.root,h.root,new xe([],{}),m,b):function z(We){const ft=function q(f,h,d,m){if(f.isAbsolute)return new rt(h.root,!0,0);if(-1===m)return new rt(d,d===h.root,0);return function he(f,h,d){let m=f,b=h,$=d;for(;$>b;){if($-=b,m=m.parent,!m)throw new o.vHH(4005,!1);b=m.segments.length}return new rt(m,!1,b-$)}(d,m+($t(f.commands[0])?0:1),f.numberOfDoubleDots)}($,h,f.snapshot?._urlSegment,We),bt=ft.processChildren?X(ft.segmentGroup,ft.index,$.commands):Pe(ft.segmentGroup,ft.index,$.commands);return Qt(h.root,ft.segmentGroup,bt,m,b)}(f.snapshot?._lastPathIndex)}function $t(f){return"object"==typeof f&&null!=f&&!f.outlets&&!f.segmentPath}function fn(f){return"object"==typeof f&&null!=f&&f.outlets}function Qt(f,h,d,m,b){let z,$={};m&&Et(m,(We,ft)=>{$[ft]=Array.isArray(We)?We.map(bt=>`${bt}`):`${We}`}),z=f===h?d:Un(f,h,d);const ve=sr($n(z));return new En(ve,$,b)}function Un(f,h,d){const m={};return Et(f.children,(b,$)=>{m[$]=b===h?d:Un(b,h,d)}),new xe(f.segments,m)}class On{constructor(h,d,m){if(this.isAbsolute=h,this.numberOfDoubleDots=d,this.commands=m,h&&m.length>0&&$t(m[0]))throw new o.vHH(4003,!1);const b=m.find(fn);if(b&&b!==ht(m))throw new o.vHH(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class rt{constructor(h,d,m){this.segmentGroup=h,this.processChildren=d,this.index=m}}function Pe(f,h,d){if(f||(f=new xe([],{})),0===f.segments.length&&f.hasChildren())return X(f,h,d);const m=function le(f,h,d){let m=0,b=h;const $={match:!1,pathIndex:0,commandIndex:0};for(;b=d.length)return $;const z=f.segments[b],ve=d[m];if(fn(ve))break;const We=`${ve}`,ft=m0&&void 0===We)break;if(We&&ft&&"object"==typeof ft&&void 0===ft.outlets){if(!ot(We,ft,z))return $;m+=2}else{if(!ot(We,{},z))return $;m++}b++}return{match:!0,pathIndex:b,commandIndex:m}}(f,h,d),b=d.slice(m.commandIndex);if(m.match&&m.pathIndex{"string"==typeof $&&($=[$]),null!==$&&(b[z]=Pe(f.children[z],h,$))}),Et(f.children,($,z)=>{void 0===m[z]&&(b[z]=$)}),new xe(f.segments,b)}}function Ie(f,h,d){const m=f.segments.slice(0,h);let b=0;for(;b{"string"==typeof d&&(d=[d]),null!==d&&(h[m]=Ie(new xe([],{}),0,d))}),h}function Re(f){const h={};return Et(f,(d,m)=>h[m]=`${d}`),h}function ot(f,h,d){return f==d.path&&en(h,d.parameters)}class st{constructor(h,d){this.id=h,this.url=d}}class Mt extends st{constructor(h,d,m="imperative",b=null){super(h,d),this.type=0,this.navigationTrigger=m,this.restoredState=b}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class Wt extends st{constructor(h,d,m){super(h,d),this.urlAfterRedirects=m,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class Bt extends st{constructor(h,d,m,b){super(h,d),this.reason=m,this.code=b,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class An extends st{constructor(h,d,m,b){super(h,d),this.error=m,this.target=b,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class Rn extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Pn extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class ur extends st{constructor(h,d,m,b,$){super(h,d),this.urlAfterRedirects=m,this.state=b,this.shouldActivate=$,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class mr extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class an extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class fo{constructor(h){this.route=h,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class ho{constructor(h){this.route=h,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class Zr{constructor(h){this.snapshot=h,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class jr{constructor(h){this.snapshot=h,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class xr{constructor(h){this.snapshot=h,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Or{constructor(h){this.snapshot=h,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class ar{constructor(h,d,m){this.routerEvent=h,this.position=d,this.anchor=m,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class po{constructor(h){this._root=h}get root(){return this._root.value}parent(h){const d=this.pathFromRoot(h);return d.length>1?d[d.length-2]:null}children(h){const d=Fn(h,this._root);return d?d.children.map(m=>m.value):[]}firstChild(h){const d=Fn(h,this._root);return d&&d.children.length>0?d.children[0].value:null}siblings(h){const d=zn(h,this._root);return d.length<2?[]:d[d.length-2].children.map(b=>b.value).filter(b=>b!==h)}pathFromRoot(h){return zn(h,this._root).map(d=>d.value)}}function Fn(f,h){if(f===h.value)return h;for(const d of h.children){const m=Fn(f,d);if(m)return m}return null}function zn(f,h){if(f===h.value)return[h];for(const d of h.children){const m=zn(f,d);if(m.length)return m.unshift(h),m}return[]}class qn{constructor(h,d){this.value=h,this.children=d}toString(){return`TreeNode(${this.value})`}}function dr(f){const h={};return f&&f.children.forEach(d=>h[d.value.outlet]=d),h}class Sr extends po{constructor(h,d){super(h),this.snapshot=d,vo(this,h)}toString(){return this.snapshot.toString()}}function Gn(f,h){const d=function go(f,h){const z=new Pr([],{},{},"",{},it,h,null,f.root,-1,{});return new xo("",new qn(z,[]))}(f,h),m=new ge.X([new se("",{})]),b=new ge.X({}),$=new ge.X({}),z=new ge.X({}),ve=new ge.X(""),We=new Rr(m,b,z,ve,$,it,h,d.root);return We.snapshot=d.root,new Sr(new qn(We,[]),d)}class Rr{constructor(h,d,m,b,$,z,ve,We){this.url=h,this.params=d,this.queryParams=m,this.fragment=b,this.data=$,this.outlet=z,this.component=ve,this.title=this.data?.pipe((0,ce.U)(ft=>ft[Xt]))??(0,N.of)(void 0),this._futureSnapshot=We}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe((0,ce.U)(h=>Vt(h)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe((0,ce.U)(h=>Vt(h)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function vr(f,h="emptyOnly"){const d=f.pathFromRoot;let m=0;if("always"!==h)for(m=d.length-1;m>=1;){const b=d[m],$=d[m-1];if(b.routeConfig&&""===b.routeConfig.path)m--;else{if($.component)break;m--}}return function mo(f){return f.reduce((h,d)=>({params:{...h.params,...d.params},data:{...h.data,...d.data},resolve:{...d.data,...h.resolve,...d.routeConfig?.data,...d._resolvedData}}),{params:{},data:{},resolve:{}})}(d.slice(m))}class Pr{constructor(h,d,m,b,$,z,ve,We,ft,bt,jt){this.url=h,this.params=d,this.queryParams=m,this.fragment=b,this.data=$,this.outlet=z,this.component=ve,this.routeConfig=We,this._urlSegment=ft,this._lastPathIndex=bt,this._resolve=jt}get title(){return this.data?.[Xt]}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=Vt(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Vt(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(m=>m.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class xo extends po{constructor(h,d){super(d),this.url=h,vo(this,d)}toString(){return yo(this._root)}}function vo(f,h){h.value._routerState=f,h.children.forEach(d=>vo(f,d))}function yo(f){const h=f.children.length>0?` { ${f.children.map(yo).join(", ")} } `:"";return`${f.value}${h}`}function Oo(f){if(f.snapshot){const h=f.snapshot,d=f._futureSnapshot;f.snapshot=d,en(h.queryParams,d.queryParams)||f.queryParams.next(d.queryParams),h.fragment!==d.fragment&&f.fragment.next(d.fragment),en(h.params,d.params)||f.params.next(d.params),function Vn(f,h){if(f.length!==h.length)return!1;for(let d=0;den(d.parameters,h[m].parameters))}(f.url,h.url);return d&&!(!f.parent!=!h.parent)&&(!f.parent||Jr(f.parent,h.parent))}function Fr(f,h,d){if(d&&f.shouldReuseRoute(h.value,d.value.snapshot)){const m=d.value;m._futureSnapshot=h.value;const b=function Yo(f,h,d){return h.children.map(m=>{for(const b of d.children)if(f.shouldReuseRoute(m.value,b.value.snapshot))return Fr(f,m,b);return Fr(f,m)})}(f,h,d);return new qn(m,b)}{if(f.shouldAttach(h.value)){const $=f.retrieve(h.value);if(null!==$){const z=$.route;return z.value._futureSnapshot=h.value,z.children=h.children.map(ve=>Fr(f,ve)),z}}const m=function si(f){return new Rr(new ge.X(f.url),new ge.X(f.params),new ge.X(f.queryParams),new ge.X(f.fragment),new ge.X(f.data),f.outlet,f.component,f)}(h.value),b=h.children.map($=>Fr(f,$));return new qn(m,b)}}const Ro="ngNavigationCancelingError";function Ur(f,h){const{redirectTo:d,navigationBehaviorOptions:m}=xn(h)?{redirectTo:h,navigationBehaviorOptions:void 0}:h,b=zr(!1,0,h);return b.url=d,b.navigationBehaviorOptions=m,b}function zr(f,h,d){const m=new Error("NavigationCancelingError: "+(f||""));return m[Ro]=!0,m.cancellationCode=h,d&&(m.url=d),m}function Do(f){return Gr(f)&&xn(f.url)}function Gr(f){return f&&f[Ro]}class Yr{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.injector=null,this.children=new fr,this.attachRef=null}}let fr=(()=>{class f{constructor(){this.contexts=new Map}onChildOutletCreated(d,m){const b=this.getOrCreateContext(d);b.outlet=m,this.contexts.set(d,b)}onChildOutletDestroyed(d){const m=this.getContext(d);m&&(m.outlet=null,m.attachRef=null)}onOutletDeactivated(){const d=this.contexts;return this.contexts=new Map,d}onOutletReAttached(d){this.contexts=d}getOrCreateContext(d){let m=this.getContext(d);return m||(m=new Yr,this.contexts.set(d,m)),m}getContext(d){return this.contexts.get(d)||null}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const hr=!1;let ai=(()=>{class f{constructor(){this.activated=null,this._activatedRoute=null,this.name=it,this.activateEvents=new o.vpe,this.deactivateEvents=new o.vpe,this.attachEvents=new o.vpe,this.detachEvents=new o.vpe,this.parentContexts=(0,o.f3M)(fr),this.location=(0,o.f3M)(o.s_b),this.changeDetector=(0,o.f3M)(o.sBO),this.environmentInjector=(0,o.f3M)(o.lqb)}ngOnChanges(d){if(d.name){const{firstChange:m,previousValue:b}=d.name;if(m)return;this.isTrackedInParentContexts(b)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(b)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name)}isTrackedInParentContexts(d){return this.parentContexts.getContext(d)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const d=this.parentContexts.getContext(this.name);d?.route&&(d.attachRef?this.attach(d.attachRef,d.route):this.activateWith(d.route,d.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new o.vHH(4012,hr);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new o.vHH(4012,hr);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new o.vHH(4012,hr);this.location.detach();const d=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(d.instance),d}attach(d,m){this.activated=d,this._activatedRoute=m,this.location.insert(d.hostView),this.attachEvents.emit(d.instance)}deactivate(){if(this.activated){const d=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(d)}}activateWith(d,m){if(this.isActivated)throw new o.vHH(4013,hr);this._activatedRoute=d;const b=this.location,z=d.snapshot.component,ve=this.parentContexts.getOrCreateContext(this.name).children,We=new nr(d,ve,b.injector);if(m&&function li(f){return!!f.resolveComponentFactory}(m)){const ft=m.resolveComponentFactory(z);this.activated=b.createComponent(ft,b.length,We)}else this.activated=b.createComponent(z,{index:b.length,injector:We,environmentInjector:m??this.environmentInjector});this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275dir=o.lG2({type:f,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[o.TTD]}),f})();class nr{constructor(h,d,m){this.route=h,this.childContexts=d,this.parent=m}get(h,d){return h===Rr?this.route:h===fr?this.childContexts:this.parent.get(h,d)}}let kr=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275cmp=o.Xpm({type:f,selectors:[["ng-component"]],standalone:!0,features:[o.jDz],decls:1,vars:0,template:function(d,m){1&d&&o._UZ(0,"router-outlet")},dependencies:[ai],encapsulation:2}),f})();function bo(f,h){return f.providers&&!f._injector&&(f._injector=(0,o.MMx)(f.providers,h,`Route: ${f.path}`)),f._injector??h}function Nr(f){const h=f.children&&f.children.map(Nr),d=h?{...f,children:h}:{...f};return!d.component&&!d.loadComponent&&(h||d.loadChildren)&&d.outlet&&d.outlet!==it&&(d.component=kr),d}function Zn(f){return f.outlet||it}function Lr(f,h){const d=f.filter(m=>Zn(m)===h);return d.push(...f.filter(m=>Zn(m)!==h)),d}function Po(f){if(!f)return null;if(f.routeConfig?._injector)return f.routeConfig._injector;for(let h=f.parent;h;h=h.parent){const d=h.routeConfig;if(d?._loadedInjector)return d._loadedInjector;if(d?._injector)return d._injector}return null}class Sn{constructor(h,d,m,b){this.routeReuseStrategy=h,this.futureState=d,this.currState=m,this.forwardEvent=b}activate(h){const d=this.futureState._root,m=this.currState?this.currState._root:null;this.deactivateChildRoutes(d,m,h),Oo(this.futureState.root),this.activateChildRoutes(d,m,h)}deactivateChildRoutes(h,d,m){const b=dr(d);h.children.forEach($=>{const z=$.value.outlet;this.deactivateRoutes($,b[z],m),delete b[z]}),Et(b,($,z)=>{this.deactivateRouteAndItsChildren($,m)})}deactivateRoutes(h,d,m){const b=h.value,$=d?d.value:null;if(b===$)if(b.component){const z=m.getContext(b.outlet);z&&this.deactivateChildRoutes(h,d,z.children)}else this.deactivateChildRoutes(h,d,m);else $&&this.deactivateRouteAndItsChildren(d,m)}deactivateRouteAndItsChildren(h,d){h.value.component&&this.routeReuseStrategy.shouldDetach(h.value.snapshot)?this.detachAndStoreRouteSubtree(h,d):this.deactivateRouteAndOutlet(h,d)}detachAndStoreRouteSubtree(h,d){const m=d.getContext(h.value.outlet),b=m&&h.value.component?m.children:d,$=dr(h);for(const z of Object.keys($))this.deactivateRouteAndItsChildren($[z],b);if(m&&m.outlet){const z=m.outlet.detach(),ve=m.children.onOutletDeactivated();this.routeReuseStrategy.store(h.value.snapshot,{componentRef:z,route:h,contexts:ve})}}deactivateRouteAndOutlet(h,d){const m=d.getContext(h.value.outlet),b=m&&h.value.component?m.children:d,$=dr(h);for(const z of Object.keys($))this.deactivateRouteAndItsChildren($[z],b);m&&m.outlet&&(m.outlet.deactivate(),m.children.onOutletDeactivated(),m.attachRef=null,m.resolver=null,m.route=null)}activateChildRoutes(h,d,m){const b=dr(d);h.children.forEach($=>{this.activateRoutes($,b[$.value.outlet],m),this.forwardEvent(new Or($.value.snapshot))}),h.children.length&&this.forwardEvent(new jr(h.value.snapshot))}activateRoutes(h,d,m){const b=h.value,$=d?d.value:null;if(Oo(b),b===$)if(b.component){const z=m.getOrCreateContext(b.outlet);this.activateChildRoutes(h,d,z.children)}else this.activateChildRoutes(h,d,m);else if(b.component){const z=m.getOrCreateContext(b.outlet);if(this.routeReuseStrategy.shouldAttach(b.snapshot)){const ve=this.routeReuseStrategy.retrieve(b.snapshot);this.routeReuseStrategy.store(b.snapshot,null),z.children.onOutletReAttached(ve.contexts),z.attachRef=ve.componentRef,z.route=ve.route.value,z.outlet&&z.outlet.attach(ve.componentRef,ve.route.value),Oo(ve.route.value),this.activateChildRoutes(h,null,z.children)}else{const ve=Po(b.snapshot),We=ve?.get(o._Vd)??null;z.attachRef=null,z.route=b,z.resolver=We,z.injector=ve,z.outlet&&z.outlet.activateWith(b,z.injector),this.activateChildRoutes(h,null,z.children)}}else this.activateChildRoutes(h,null,m)}}class Fo{constructor(h){this.path=h,this.route=this.path[this.path.length-1]}}class wo{constructor(h,d){this.component=h,this.route=d}}function ko(f,h,d){const m=f._root;return Kr(m,h?h._root:null,d,[m.value])}function to(f,h){const d=Symbol(),m=h.get(f,d);return m===d?"function"!=typeof f||(0,o.Z0I)(f)?h.get(f):f:m}function Kr(f,h,d,m,b={canDeactivateChecks:[],canActivateChecks:[]}){const $=dr(h);return f.children.forEach(z=>{(function no(f,h,d,m,b={canDeactivateChecks:[],canActivateChecks:[]}){const $=f.value,z=h?h.value:null,ve=d?d.getContext(f.value.outlet):null;if(z&&$.routeConfig===z.routeConfig){const We=function rr(f,h,d){if("function"==typeof d)return d(f,h);switch(d){case"pathParamsChange":return!He(f.url,h.url);case"pathParamsOrQueryParamsChange":return!He(f.url,h.url)||!en(f.queryParams,h.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Jr(f,h)||!en(f.queryParams,h.queryParams);default:return!Jr(f,h)}}(z,$,$.routeConfig.runGuardsAndResolvers);We?b.canActivateChecks.push(new Fo(m)):($.data=z.data,$._resolvedData=z._resolvedData),Kr(f,h,$.component?ve?ve.children:null:d,m,b),We&&ve&&ve.outlet&&ve.outlet.isActivated&&b.canDeactivateChecks.push(new wo(ve.outlet.component,z))}else z&&ro(h,ve,b),b.canActivateChecks.push(new Fo(m)),Kr(f,null,$.component?ve?ve.children:null:d,m,b)})(z,$[z.value.outlet],d,m.concat([z.value]),b),delete $[z.value.outlet]}),Et($,(z,ve)=>ro(z,d.getContext(ve),b)),b}function ro(f,h,d){const m=dr(f),b=f.value;Et(m,($,z)=>{ro($,b.component?h?h.children.getContext(z):null:h,d)}),d.canDeactivateChecks.push(new wo(b.component&&h&&h.outlet&&h.outlet.isActivated?h.outlet.component:null,b))}function hn(f){return"function"==typeof f}function Je(f){return f instanceof W||"EmptyError"===f?.name}const at=Symbol("INITIAL_VALUE");function Dt(){return(0,Ae.w)(f=>E(f.map(h=>h.pipe((0,De.q)(1),function ue(...f){const h=(0,G.yG)(f);return(0,Q.e)((d,m)=>{(h?ke(f,d,h):ke(f,d)).subscribe(m)})}(at)))).pipe((0,ce.U)(h=>{for(const d of h)if(!0!==d){if(d===at)return at;if(!1===d||d instanceof En)return d}return!0}),(0,de.h)(h=>h!==at),(0,De.q)(1)))}function br(f){return(0,Be.z)((0,Ue.b)(h=>{if(xn(h))throw Ur(0,h)}),(0,ce.U)(h=>!0===h))}const ci={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function ga(f,h,d,m,b){const $=Gi(f,h,d);return $.matched?function zi(f,h,d,m){const b=h.canMatch;if(!b||0===b.length)return(0,N.of)(!0);const $=b.map(z=>{const ve=to(z,f);return ut(function g(f){return f&&hn(f.canMatch)}(ve)?ve.canMatch(h,d):f.runInContext(()=>ve(h,d)))});return(0,N.of)($).pipe(Dt(),br())}(m=bo(h,m),h,d).pipe((0,ce.U)(z=>!0===z?$:{...ci})):(0,N.of)($)}function Gi(f,h,d){if(""===h.path)return"full"===h.pathMatch&&(f.hasChildren()||d.length>0)?{...ci}:{matched:!0,consumedSegments:[],remainingSegments:d,parameters:{},positionalParamSegments:{}};const b=(h.matcher||rn)(d,f,h);if(!b)return{...ci};const $={};Et(b.posParams,(ve,We)=>{$[We]=ve.path});const z=b.consumed.length>0?{...$,...b.consumed[b.consumed.length-1].parameters}:$;return{matched:!0,consumedSegments:b.consumed,remainingSegments:d.slice(b.consumed.length),parameters:z,positionalParamSegments:b.posParams??{}}}function Yi(f,h,d,m){if(d.length>0&&function oo(f,h,d){return d.some(m=>io(f,h,m)&&Zn(m)!==it)}(f,d,m)){const $=new xe(h,function lr(f,h,d,m){const b={};b[it]=m,m._sourceSegment=f,m._segmentIndexShift=h.length;for(const $ of d)if(""===$.path&&Zn($)!==it){const z=new xe([],{});z._sourceSegment=f,z._segmentIndexShift=h.length,b[Zn($)]=z}return b}(f,h,m,new xe(d,f.children)));return $._sourceSegment=f,$._segmentIndexShift=h.length,{segmentGroup:$,slicedSegments:[]}}if(0===d.length&&function As(f,h,d){return d.some(m=>io(f,h,m))}(f,d,m)){const $=new xe(f.segments,function Ms(f,h,d,m,b){const $={};for(const z of m)if(io(f,d,z)&&!b[Zn(z)]){const ve=new xe([],{});ve._sourceSegment=f,ve._segmentIndexShift=h.length,$[Zn(z)]=ve}return{...b,...$}}(f,h,d,m,f.children));return $._sourceSegment=f,$._segmentIndexShift=h.length,{segmentGroup:$,slicedSegments:d}}const b=new xe(f.segments,f.children);return b._sourceSegment=f,b._segmentIndexShift=h.length,{segmentGroup:b,slicedSegments:d}}function io(f,h,d){return(!(f.hasChildren()||h.length>0)||"full"!==d.pathMatch)&&""===d.path}function Br(f,h,d,m){return!!(Zn(f)===m||m!==it&&io(h,d,f))&&("**"===f.path||Gi(h,f,d).matched)}function Ts(f,h,d){return 0===h.length&&!f.children[d]}const qo=!1;class ui{constructor(h){this.segmentGroup=h||null}}class xs{constructor(h){this.urlTree=h}}function No(f){return oe(new ui(f))}function Mi(f){return oe(new xs(f))}class Rs{constructor(h,d,m,b,$){this.injector=h,this.configLoader=d,this.urlSerializer=m,this.urlTree=b,this.config=$,this.allowRedirects=!0}apply(){const h=Yi(this.urlTree.root,[],[],this.config).segmentGroup,d=new xe(h.segments,h.children);return this.expandSegmentGroup(this.injector,this.config,d,it).pipe((0,ce.U)($=>this.createUrlTree($n($),this.urlTree.queryParams,this.urlTree.fragment))).pipe(St($=>{if($ instanceof xs)return this.allowRedirects=!1,this.match($.urlTree);throw $ instanceof ui?this.noMatchError($):$}))}match(h){return this.expandSegmentGroup(this.injector,this.config,h.root,it).pipe((0,ce.U)(b=>this.createUrlTree($n(b),h.queryParams,h.fragment))).pipe(St(b=>{throw b instanceof ui?this.noMatchError(b):b}))}noMatchError(h){return new o.vHH(4002,qo)}createUrlTree(h,d,m){const b=sr(h);return new En(b,d,m)}expandSegmentGroup(h,d,m,b){return 0===m.segments.length&&m.hasChildren()?this.expandChildren(h,d,m).pipe((0,ce.U)($=>new xe([],$))):this.expandSegment(h,m,d,m.segments,b,!0)}expandChildren(h,d,m){const b=[];for(const $ of Object.keys(m.children))"primary"===$?b.unshift($):b.push($);return(0,x.D)(b).pipe((0,et.b)($=>{const z=m.children[$],ve=Lr(d,$);return this.expandSegmentGroup(h,ve,z,$).pipe((0,ce.U)(We=>({segment:We,outlet:$})))}),nn(($,z)=>($[z.outlet]=z.segment,$),{}),Rt())}expandSegment(h,d,m,b,$,z){return(0,x.D)(m).pipe((0,et.b)(ve=>this.expandSegmentAgainstRoute(h,d,m,ve,b,$,z).pipe(St(ft=>{if(ft instanceof ui)return(0,N.of)(null);throw ft}))),dt(ve=>!!ve),St((ve,We)=>{if(Je(ve))return Ts(d,b,$)?(0,N.of)(new xe([],{})):No(d);throw ve}))}expandSegmentAgainstRoute(h,d,m,b,$,z,ve){return Br(b,d,$,z)?void 0===b.redirectTo?this.matchSegmentAgainstRoute(h,d,b,$,z):ve&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z):No(d):No(d)}expandSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z){return"**"===b.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(h,m,b,z):this.expandRegularSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z)}expandWildCardWithParamsAgainstRouteUsingRedirect(h,d,m,b){const $=this.applyRedirectCommands([],m.redirectTo,{});return m.redirectTo.startsWith("/")?Mi($):this.lineralizeSegments(m,$).pipe((0,ne.z)(z=>{const ve=new xe(z,{});return this.expandSegment(h,ve,d,z,b,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z){const{matched:ve,consumedSegments:We,remainingSegments:ft,positionalParamSegments:bt}=Gi(d,b,$);if(!ve)return No(d);const jt=this.applyRedirectCommands(We,b.redirectTo,bt);return b.redirectTo.startsWith("/")?Mi(jt):this.lineralizeSegments(b,jt).pipe((0,ne.z)(wn=>this.expandSegment(h,d,m,wn.concat(ft),z,!1)))}matchSegmentAgainstRoute(h,d,m,b,$){return"**"===m.path?(h=bo(m,h),m.loadChildren?(m._loadedRoutes?(0,N.of)({routes:m._loadedRoutes,injector:m._loadedInjector}):this.configLoader.loadChildren(h,m)).pipe((0,ce.U)(ve=>(m._loadedRoutes=ve.routes,m._loadedInjector=ve.injector,new xe(b,{})))):(0,N.of)(new xe(b,{}))):ga(d,m,b,h).pipe((0,Ae.w)(({matched:z,consumedSegments:ve,remainingSegments:We})=>z?this.getChildConfig(h=m._injector??h,m,b).pipe((0,ne.z)(bt=>{const jt=bt.injector??h,wn=bt.routes,{segmentGroup:lo,slicedSegments:$o}=Yi(d,ve,We,wn),Ci=new xe(lo.segments,lo.children);if(0===$o.length&&Ci.hasChildren())return this.expandChildren(jt,wn,Ci).pipe((0,ce.U)(_i=>new xe(ve,_i)));if(0===wn.length&&0===$o.length)return(0,N.of)(new xe(ve,{}));const Hr=Zn(m)===$;return this.expandSegment(jt,Ci,wn,$o,Hr?it:$,!0).pipe((0,ce.U)(Ri=>new xe(ve.concat(Ri.segments),Ri.children)))})):No(d)))}getChildConfig(h,d,m){return d.children?(0,N.of)({routes:d.children,injector:h}):d.loadChildren?void 0!==d._loadedRoutes?(0,N.of)({routes:d._loadedRoutes,injector:d._loadedInjector}):function Xo(f,h,d,m){const b=h.canLoad;if(void 0===b||0===b.length)return(0,N.of)(!0);const $=b.map(z=>{const ve=to(z,f);return ut(function C(f){return f&&hn(f.canLoad)}(ve)?ve.canLoad(h,d):f.runInContext(()=>ve(h,d)))});return(0,N.of)($).pipe(Dt(),br())}(h,d,m).pipe((0,ne.z)(b=>b?this.configLoader.loadChildren(h,d).pipe((0,Ue.b)($=>{d._loadedRoutes=$.routes,d._loadedInjector=$.injector})):function Wi(f){return oe(zr(qo,3))}())):(0,N.of)({routes:[],injector:h})}lineralizeSegments(h,d){let m=[],b=d.root;for(;;){if(m=m.concat(b.segments),0===b.numberOfChildren)return(0,N.of)(m);if(b.numberOfChildren>1||!b.children[it])return oe(new o.vHH(4e3,qo));b=b.children[it]}}applyRedirectCommands(h,d,m){return this.applyRedirectCreateUrlTree(d,this.urlSerializer.parse(d),h,m)}applyRedirectCreateUrlTree(h,d,m,b){const $=this.createSegmentGroup(h,d.root,m,b);return new En($,this.createQueryParams(d.queryParams,this.urlTree.queryParams),d.fragment)}createQueryParams(h,d){const m={};return Et(h,(b,$)=>{if("string"==typeof b&&b.startsWith(":")){const ve=b.substring(1);m[$]=d[ve]}else m[$]=b}),m}createSegmentGroup(h,d,m,b){const $=this.createSegments(h,d.segments,m,b);let z={};return Et(d.children,(ve,We)=>{z[We]=this.createSegmentGroup(h,ve,m,b)}),new xe($,z)}createSegments(h,d,m,b){return d.map($=>$.path.startsWith(":")?this.findPosParam(h,$,b):this.findOrReturn($,m))}findPosParam(h,d,m){const b=m[d.path.substring(1)];if(!b)throw new o.vHH(4001,qo);return b}findOrReturn(h,d){let m=0;for(const b of d){if(b.path===h.path)return d.splice(m),b;m++}return h}}class A{}class ae{constructor(h,d,m,b,$,z,ve){this.injector=h,this.rootComponentType=d,this.config=m,this.urlTree=b,this.url=$,this.paramsInheritanceStrategy=z,this.urlSerializer=ve}recognize(){const h=Yi(this.urlTree.root,[],[],this.config.filter(d=>void 0===d.redirectTo)).segmentGroup;return this.processSegmentGroup(this.injector,this.config,h,it).pipe((0,ce.U)(d=>{if(null===d)return null;const m=new Pr([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},it,this.rootComponentType,null,this.urlTree.root,-1,{}),b=new qn(m,d),$=new xo(this.url,b);return this.inheritParamsAndData($._root),$}))}inheritParamsAndData(h){const d=h.value,m=vr(d,this.paramsInheritanceStrategy);d.params=Object.freeze(m.params),d.data=Object.freeze(m.data),h.children.forEach(b=>this.inheritParamsAndData(b))}processSegmentGroup(h,d,m,b){return 0===m.segments.length&&m.hasChildren()?this.processChildren(h,d,m):this.processSegment(h,d,m,m.segments,b)}processChildren(h,d,m){return(0,x.D)(Object.keys(m.children)).pipe((0,et.b)(b=>{const $=m.children[b],z=Lr(d,b);return this.processSegmentGroup(h,z,$,b)}),nn((b,$)=>b&&$?(b.push(...$),b):null),(0,Kt.o)(b=>null!==b),Ee(null),Rt(),(0,ce.U)(b=>{if(null===b)return null;const $=qt(b);return function $e(f){f.sort((h,d)=>h.value.outlet===it?-1:d.value.outlet===it?1:h.value.outlet.localeCompare(d.value.outlet))}($),$}))}processSegment(h,d,m,b,$){return(0,x.D)(d).pipe((0,et.b)(z=>this.processSegmentAgainstRoute(z._injector??h,z,m,b,$)),dt(z=>!!z),St(z=>{if(Je(z))return Ts(m,b,$)?(0,N.of)([]):(0,N.of)(null);throw z}))}processSegmentAgainstRoute(h,d,m,b,$){if(d.redirectTo||!Br(d,m,b,$))return(0,N.of)(null);let z;if("**"===d.path){const ve=b.length>0?ht(b).parameters:{},We=Jt(m)+b.length,ft=new Pr(b,ve,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,yn(d),Zn(d),d.component??d._loadedComponent??null,d,un(m),We,Wn(d));z=(0,N.of)({snapshot:ft,consumedSegments:[],remainingSegments:[]})}else z=ga(m,d,b,h).pipe((0,ce.U)(({matched:ve,consumedSegments:We,remainingSegments:ft,parameters:bt})=>{if(!ve)return null;const jt=Jt(m)+We.length;return{snapshot:new Pr(We,bt,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,yn(d),Zn(d),d.component??d._loadedComponent??null,d,un(m),jt,Wn(d)),consumedSegments:We,remainingSegments:ft}}));return z.pipe((0,Ae.w)(ve=>{if(null===ve)return(0,N.of)(null);const{snapshot:We,consumedSegments:ft,remainingSegments:bt}=ve;h=d._injector??h;const jt=d._loadedInjector??h,wn=function Xe(f){return f.children?f.children:f.loadChildren?f._loadedRoutes:[]}(d),{segmentGroup:lo,slicedSegments:$o}=Yi(m,ft,bt,wn.filter(Hr=>void 0===Hr.redirectTo));if(0===$o.length&&lo.hasChildren())return this.processChildren(jt,wn,lo).pipe((0,ce.U)(Hr=>null===Hr?null:[new qn(We,Hr)]));if(0===wn.length&&0===$o.length)return(0,N.of)([new qn(We,[])]);const Ci=Zn(d)===$;return this.processSegment(jt,wn,lo,$o,Ci?it:$).pipe((0,ce.U)(Hr=>null===Hr?null:[new qn(We,Hr)]))}))}}function lt(f){const h=f.value.routeConfig;return h&&""===h.path&&void 0===h.redirectTo}function qt(f){const h=[],d=new Set;for(const m of f){if(!lt(m)){h.push(m);continue}const b=h.find($=>m.value.routeConfig===$.value.routeConfig);void 0!==b?(b.children.push(...m.children),d.add(b)):h.push(m)}for(const m of d){const b=qt(m.children);h.push(new qn(m.value,b))}return h.filter(m=>!d.has(m))}function un(f){let h=f;for(;h._sourceSegment;)h=h._sourceSegment;return h}function Jt(f){let h=f,d=h._segmentIndexShift??0;for(;h._sourceSegment;)h=h._sourceSegment,d+=h._segmentIndexShift??0;return d-1}function yn(f){return f.data||{}}function Wn(f){return f.resolve||{}}function Ai(f){return"string"==typeof f.title||null===f.title}function so(f){return(0,Ae.w)(h=>{const d=f(h);return d?(0,x.D)(d).pipe((0,ce.U)(()=>h)):(0,N.of)(h)})}class gl{constructor(h){this.router=h,this.currentNavigation=null}setupNavigations(h){const d=this.router.events;return h.pipe((0,de.h)(m=>0!==m.id),(0,ce.U)(m=>({...m,extractedUrl:this.router.urlHandlingStrategy.extract(m.rawUrl)})),(0,Ae.w)(m=>{let b=!1,$=!1;return(0,N.of)(m).pipe((0,Ue.b)(z=>{this.currentNavigation={id:z.id,initialUrl:z.rawUrl,extractedUrl:z.extractedUrl,trigger:z.source,extras:z.extras,previousNavigation:this.router.lastSuccessfulNavigation?{...this.router.lastSuccessfulNavigation,previousNavigation:null}:null}}),(0,Ae.w)(z=>{const ve=this.router.browserUrlTree.toString(),We=!this.router.navigated||z.extractedUrl.toString()!==ve||ve!==this.router.currentUrlTree.toString();if(("reload"===this.router.onSameUrlNavigation||We)&&this.router.urlHandlingStrategy.shouldProcessUrl(z.rawUrl))return va(z.source)&&(this.router.browserUrlTree=z.extractedUrl),(0,N.of)(z).pipe((0,Ae.w)(bt=>{const jt=this.router.transitions.getValue();return d.next(new Mt(bt.id,this.router.serializeUrl(bt.extractedUrl),bt.source,bt.restoredState)),jt!==this.router.transitions.getValue()?be.E:Promise.resolve(bt)}),function Ki(f,h,d,m){return(0,Ae.w)(b=>function ma(f,h,d,m,b){return new Rs(f,h,d,m,b).apply()}(f,h,d,b.extractedUrl,m).pipe((0,ce.U)($=>({...b,urlAfterRedirects:$}))))}(this.router.ngModule.injector,this.router.configLoader,this.router.urlSerializer,this.router.config),(0,Ue.b)(bt=>{this.currentNavigation={...this.currentNavigation,finalUrl:bt.urlAfterRedirects},m.urlAfterRedirects=bt.urlAfterRedirects}),function Eo(f,h,d,m,b){return(0,ne.z)($=>function H(f,h,d,m,b,$,z="emptyOnly"){return new ae(f,h,d,m,b,z,$).recognize().pipe((0,Ae.w)(ve=>null===ve?function D(f){return new M.y(h=>h.error(f))}(new A):(0,N.of)(ve)))}(f,h,d,$.urlAfterRedirects,m.serialize($.urlAfterRedirects),m,b).pipe((0,ce.U)(z=>({...$,targetSnapshot:z}))))}(this.router.ngModule.injector,this.router.rootComponentType,this.router.config,this.router.urlSerializer,this.router.paramsInheritanceStrategy),(0,Ue.b)(bt=>{if(m.targetSnapshot=bt.targetSnapshot,"eager"===this.router.urlUpdateStrategy){if(!bt.extras.skipLocationChange){const wn=this.router.urlHandlingStrategy.merge(bt.urlAfterRedirects,bt.rawUrl);this.router.setBrowserUrl(wn,bt)}this.router.browserUrlTree=bt.urlAfterRedirects}const jt=new Rn(bt.id,this.router.serializeUrl(bt.extractedUrl),this.router.serializeUrl(bt.urlAfterRedirects),bt.targetSnapshot);d.next(jt)}));if(We&&this.router.rawUrlTree&&this.router.urlHandlingStrategy.shouldProcessUrl(this.router.rawUrlTree)){const{id:jt,extractedUrl:wn,source:lo,restoredState:$o,extras:Ci}=z,Hr=new Mt(jt,this.router.serializeUrl(wn),lo,$o);d.next(Hr);const Cr=Gn(wn,this.router.rootComponentType).snapshot;return m={...z,targetSnapshot:Cr,urlAfterRedirects:wn,extras:{...Ci,skipLocationChange:!1,replaceUrl:!1}},(0,N.of)(m)}return this.router.rawUrlTree=z.rawUrl,z.resolve(null),be.E}),(0,Ue.b)(z=>{const ve=new Pn(z.id,this.router.serializeUrl(z.extractedUrl),this.router.serializeUrl(z.urlAfterRedirects),z.targetSnapshot);this.router.triggerEvent(ve)}),(0,ce.U)(z=>m={...z,guards:ko(z.targetSnapshot,z.currentSnapshot,this.router.rootContexts)}),function Zt(f,h){return(0,ne.z)(d=>{const{targetSnapshot:m,currentSnapshot:b,guards:{canActivateChecks:$,canDeactivateChecks:z}}=d;return 0===z.length&&0===$.length?(0,N.of)({...d,guardsResult:!0}):function bn(f,h,d,m){return(0,x.D)(f).pipe((0,ne.z)(b=>function $r(f,h,d,m,b){const $=h&&h.routeConfig?h.routeConfig.canDeactivate:null;if(!$||0===$.length)return(0,N.of)(!0);const z=$.map(ve=>{const We=Po(h)??b,ft=to(ve,We);return ut(function a(f){return f&&hn(f.canDeactivate)}(ft)?ft.canDeactivate(f,h,d,m):We.runInContext(()=>ft(f,h,d,m))).pipe(dt())});return(0,N.of)(z).pipe(Dt())}(b.component,b.route,d,h,m)),dt(b=>!0!==b,!0))}(z,m,b,f).pipe((0,ne.z)(ve=>ve&&function Ui(f){return"boolean"==typeof f}(ve)?function Ve(f,h,d,m){return(0,x.D)(h).pipe((0,et.b)(b=>ke(function yr(f,h){return null!==f&&h&&h(new Zr(f)),(0,N.of)(!0)}(b.route.parent,m),function At(f,h){return null!==f&&h&&h(new xr(f)),(0,N.of)(!0)}(b.route,m),function Mn(f,h,d){const m=h[h.length-1],$=h.slice(0,h.length-1).reverse().map(z=>function Jn(f){const h=f.routeConfig?f.routeConfig.canActivateChild:null;return h&&0!==h.length?{node:f,guards:h}:null}(z)).filter(z=>null!==z).map(z=>ie(()=>{const ve=z.guards.map(We=>{const ft=Po(z.node)??d,bt=to(We,ft);return ut(function c(f){return f&&hn(f.canActivateChild)}(bt)?bt.canActivateChild(m,f):ft.runInContext(()=>bt(m,f))).pipe(dt())});return(0,N.of)(ve).pipe(Dt())}));return(0,N.of)($).pipe(Dt())}(f,b.path,d),function Dr(f,h,d){const m=h.routeConfig?h.routeConfig.canActivate:null;if(!m||0===m.length)return(0,N.of)(!0);const b=m.map($=>ie(()=>{const z=Po(h)??d,ve=to($,z);return ut(function s(f){return f&&hn(f.canActivate)}(ve)?ve.canActivate(h,f):z.runInContext(()=>ve(h,f))).pipe(dt())}));return(0,N.of)(b).pipe(Dt())}(f,b.route,d))),dt(b=>!0!==b,!0))}(m,$,f,h):(0,N.of)(ve)),(0,ce.U)(ve=>({...d,guardsResult:ve})))})}(this.router.ngModule.injector,z=>this.router.triggerEvent(z)),(0,Ue.b)(z=>{if(m.guardsResult=z.guardsResult,xn(z.guardsResult))throw Ur(0,z.guardsResult);const ve=new ur(z.id,this.router.serializeUrl(z.extractedUrl),this.router.serializeUrl(z.urlAfterRedirects),z.targetSnapshot,!!z.guardsResult);this.router.triggerEvent(ve)}),(0,de.h)(z=>!!z.guardsResult||(this.router.restoreHistory(z),this.router.cancelNavigationTransition(z,"",3),!1)),so(z=>{if(z.guards.canActivateChecks.length)return(0,N.of)(z).pipe((0,Ue.b)(ve=>{const We=new mr(ve.id,this.router.serializeUrl(ve.extractedUrl),this.router.serializeUrl(ve.urlAfterRedirects),ve.targetSnapshot);this.router.triggerEvent(We)}),(0,Ae.w)(ve=>{let We=!1;return(0,N.of)(ve).pipe(function pr(f,h){return(0,ne.z)(d=>{const{targetSnapshot:m,guards:{canActivateChecks:b}}=d;if(!b.length)return(0,N.of)(d);let $=0;return(0,x.D)(b).pipe((0,et.b)(z=>function Vr(f,h,d,m){const b=f.routeConfig,$=f._resolve;return void 0!==b?.title&&!Ai(b)&&($[Xt]=b.title),function Mr(f,h,d,m){const b=function Lo(f){return[...Object.keys(f),...Object.getOwnPropertySymbols(f)]}(f);if(0===b.length)return(0,N.of)({});const $={};return(0,x.D)(b).pipe((0,ne.z)(z=>function di(f,h,d,m){const b=Po(h)??m,$=to(f,b);return ut($.resolve?$.resolve(h,d):b.runInContext(()=>$(h,d)))}(f[z],h,d,m).pipe(dt(),(0,Ue.b)(ve=>{$[z]=ve}))),wt(1),function pn(f){return(0,ce.U)(()=>f)}($),St(z=>Je(z)?be.E:oe(z)))}($,f,h,m).pipe((0,ce.U)(z=>(f._resolvedData=z,f.data=vr(f,d).resolve,b&&Ai(b)&&(f.data[Xt]=b.title),null)))}(z.route,m,f,h)),(0,Ue.b)(()=>$++),wt(1),(0,ne.z)(z=>$===b.length?(0,N.of)(d):be.E))})}(this.router.paramsInheritanceStrategy,this.router.ngModule.injector),(0,Ue.b)({next:()=>We=!0,complete:()=>{We||(this.router.restoreHistory(ve),this.router.cancelNavigationTransition(ve,"",2))}}))}),(0,Ue.b)(ve=>{const We=new an(ve.id,this.router.serializeUrl(ve.extractedUrl),this.router.serializeUrl(ve.urlAfterRedirects),ve.targetSnapshot);this.router.triggerEvent(We)}))}),so(z=>{const ve=We=>{const ft=[];We.routeConfig?.loadComponent&&!We.routeConfig._loadedComponent&&ft.push(this.router.configLoader.loadComponent(We.routeConfig).pipe((0,Ue.b)(bt=>{We.component=bt}),(0,ce.U)(()=>{})));for(const bt of We.children)ft.push(...ve(bt));return ft};return E(ve(z.targetSnapshot.root)).pipe(Ee(),(0,De.q)(1))}),so(()=>this.router.afterPreactivation()),(0,ce.U)(z=>{const ve=function Go(f,h,d){const m=Fr(f,h._root,d?d._root:void 0);return new Sr(m,h)}(this.router.routeReuseStrategy,z.targetSnapshot,z.currentRouterState);return m={...z,targetRouterState:ve}}),(0,Ue.b)(z=>{this.router.currentUrlTree=z.urlAfterRedirects,this.router.rawUrlTree=this.router.urlHandlingStrategy.merge(z.urlAfterRedirects,z.rawUrl),this.router.routerState=z.targetRouterState,"deferred"===this.router.urlUpdateStrategy&&(z.extras.skipLocationChange||this.router.setBrowserUrl(this.router.rawUrlTree,z),this.router.browserUrlTree=z.urlAfterRedirects)}),((f,h,d)=>(0,ce.U)(m=>(new Sn(h,m.targetRouterState,m.currentRouterState,d).activate(f),m)))(this.router.rootContexts,this.router.routeReuseStrategy,z=>this.router.triggerEvent(z)),(0,Ue.b)({next(){b=!0},complete(){b=!0}}),(0,Pt.x)(()=>{b||$||this.router.cancelNavigationTransition(m,"",1),this.currentNavigation?.id===m.id&&(this.currentNavigation=null)}),St(z=>{if($=!0,Gr(z)){Do(z)||(this.router.navigated=!0,this.router.restoreHistory(m,!0));const ve=new Bt(m.id,this.router.serializeUrl(m.extractedUrl),z.message,z.cancellationCode);if(d.next(ve),Do(z)){const We=this.router.urlHandlingStrategy.merge(z.url,this.router.rawUrlTree),ft={skipLocationChange:m.extras.skipLocationChange,replaceUrl:"eager"===this.router.urlUpdateStrategy||va(m.source)};this.router.scheduleNavigation(We,"imperative",null,ft,{resolve:m.resolve,reject:m.reject,promise:m.promise})}else m.resolve(!1)}else{this.router.restoreHistory(m,!0);const ve=new An(m.id,this.router.serializeUrl(m.extractedUrl),z,m.targetSnapshot??void 0);d.next(ve);try{m.resolve(this.router.errorHandler(z))}catch(We){m.reject(We)}}return be.E}))}))}}function va(f){return"imperative"!==f}let hi=(()=>{class f{buildTitle(d){let m,b=d.root;for(;void 0!==b;)m=this.getResolvedTitleForRoute(b)??m,b=b.children.find($=>$.outlet===it);return m}getResolvedTitleForRoute(d){return d.data[Xt]}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(Ps)},providedIn:"root"}),f})(),Ps=(()=>{class f extends hi{constructor(d){super(),this.title=d}updateTitle(d){const m=this.buildTitle(d);void 0!==m&&this.title.setTitle(m)}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(Ut.Dx))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})(),ya=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(Yu)},providedIn:"root"}),f})();class ml{shouldDetach(h){return!1}store(h,d){}shouldAttach(h){return!1}retrieve(h){return null}shouldReuseRoute(h,d){return h.routeConfig===d.routeConfig}}let Yu=(()=>{class f extends ml{}return f.\u0275fac=function(){let h;return function(m){return(h||(h=o.n5z(f)))(m||f)}}(),f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const pi=new o.OlP("",{providedIn:"root",factory:()=>({})}),ao=new o.OlP("ROUTES");let Xi=(()=>{class f{constructor(d,m){this.injector=d,this.compiler=m,this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap}loadComponent(d){if(this.componentLoaders.get(d))return this.componentLoaders.get(d);if(d._loadedComponent)return(0,N.of)(d._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(d);const m=ut(d.loadComponent()).pipe((0,ce.U)(Zo),(0,Ue.b)($=>{this.onLoadEndListener&&this.onLoadEndListener(d),d._loadedComponent=$}),(0,Pt.x)(()=>{this.componentLoaders.delete(d)})),b=new k(m,()=>new O.x).pipe(T());return this.componentLoaders.set(d,b),b}loadChildren(d,m){if(this.childrenLoaders.get(m))return this.childrenLoaders.get(m);if(m._loadedRoutes)return(0,N.of)({routes:m._loadedRoutes,injector:m._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(m);const $=this.loadModuleFactoryOrRoutes(m.loadChildren).pipe((0,ce.U)(ve=>{this.onLoadEndListener&&this.onLoadEndListener(m);let We,ft,bt=!1;Array.isArray(ve)?ft=ve:(We=ve.create(d).injector,ft=Yt(We.get(ao,[],o.XFs.Self|o.XFs.Optional)));return{routes:ft.map(Nr),injector:We}}),(0,Pt.x)(()=>{this.childrenLoaders.delete(m)})),z=new k($,()=>new O.x).pipe(T());return this.childrenLoaders.set(m,z),z}loadModuleFactoryOrRoutes(d){return ut(d()).pipe((0,ce.U)(Zo),(0,ne.z)(b=>b instanceof o.YKP||Array.isArray(b)?(0,N.of)(b):(0,x.D)(this.compiler.compileModuleAsync(b))))}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(o.zs3),o.LFG(o.Sil))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();function Zo(f){return function ba(f){return f&&"object"==typeof f&&"default"in f}(f)?f.default:f}let vl=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(gi)},providedIn:"root"}),f})(),gi=(()=>{class f{shouldProcessUrl(d){return!0}extract(d){return d}merge(d,m){return d}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();function Zi(f){throw f}function Ku(f,h,d){return h.parse("/")}const Ca={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},_a={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};function Xr(){const f=(0,o.f3M)(pt),h=(0,o.f3M)(fr),d=(0,o.f3M)(te.Ye),m=(0,o.f3M)(o.zs3),b=(0,o.f3M)(o.Sil),$=(0,o.f3M)(ao,{optional:!0})??[],z=(0,o.f3M)(pi,{optional:!0})??{},ve=new or(null,f,h,d,m,b,Yt($));return function yl(f,h){f.errorHandler&&(h.errorHandler=f.errorHandler),f.malformedUriErrorHandler&&(h.malformedUriErrorHandler=f.malformedUriErrorHandler),f.onSameUrlNavigation&&(h.onSameUrlNavigation=f.onSameUrlNavigation),f.paramsInheritanceStrategy&&(h.paramsInheritanceStrategy=f.paramsInheritanceStrategy),f.urlUpdateStrategy&&(h.urlUpdateStrategy=f.urlUpdateStrategy),f.canceledNavigationResolution&&(h.canceledNavigationResolution=f.canceledNavigationResolution)}(z,ve),ve}let or=(()=>{class f{constructor(d,m,b,$,z,ve,We){this.rootComponentType=d,this.urlSerializer=m,this.rootContexts=b,this.location=$,this.config=We,this.lastSuccessfulNavigation=null,this.disposed=!1,this.navigationId=0,this.currentPageId=0,this.isNgZoneEnabled=!1,this.events=new O.x,this.errorHandler=Zi,this.malformedUriErrorHandler=Ku,this.navigated=!1,this.lastSuccessfulId=-1,this.afterPreactivation=()=>(0,N.of)(void 0),this.urlHandlingStrategy=(0,o.f3M)(vl),this.routeReuseStrategy=(0,o.f3M)(ya),this.titleStrategy=(0,o.f3M)(hi),this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.canceledNavigationResolution="replace",this.navigationTransitions=new gl(this),this.configLoader=z.get(Xi),this.configLoader.onLoadEndListener=wn=>this.triggerEvent(new ho(wn)),this.configLoader.onLoadStartListener=wn=>this.triggerEvent(new fo(wn)),this.ngModule=z.get(o.h0i),this.console=z.get(o.c2e);const jt=z.get(o.R0b);this.isNgZoneEnabled=jt instanceof o.R0b&&o.R0b.isInAngularZone(),this.resetConfig(We),this.currentUrlTree=new En,this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=Gn(this.currentUrlTree,this.rootComponentType),this.transitions=new ge.X({id:0,targetPageId:0,currentUrlTree:this.currentUrlTree,extractedUrl:this.urlHandlingStrategy.extract(this.currentUrlTree),urlAfterRedirects:this.urlHandlingStrategy.extract(this.currentUrlTree),rawUrl:this.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:"imperative",restoredState:null,currentSnapshot:this.routerState.snapshot,targetSnapshot:null,currentRouterState:this.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.navigations=this.navigationTransitions.setupNavigations(this.transitions),this.processNavigations()}get browserPageId(){return this.location.getState()?.\u0275routerPageId}resetRootComponentType(d){this.rootComponentType=d,this.routerState.root.component=this.rootComponentType}setTransition(d){this.transitions.next({...this.transitions.value,...d})}initialNavigation(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(d=>{const m="popstate"===d.type?"popstate":"hashchange";"popstate"===m&&setTimeout(()=>{const b={replaceUrl:!0},$=d.state?.navigationId?d.state:null;if(d.state){const ve={...d.state};delete ve.navigationId,delete ve.\u0275routerPageId,0!==Object.keys(ve).length&&(b.state=ve)}const z=this.parseUrl(d.url);this.scheduleNavigation(z,m,$,b)},0)}))}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}triggerEvent(d){this.events.next(d)}resetConfig(d){this.config=d.map(Nr),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.transitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0}createUrlTree(d,m={}){const{relativeTo:b,queryParams:$,fragment:z,queryParamsHandling:ve,preserveFragment:We}=m,ft=b||this.routerState.root,bt=We?this.currentUrlTree.fragment:z;let jt=null;switch(ve){case"merge":jt={...this.currentUrlTree.queryParams,...$};break;case"preserve":jt=this.currentUrlTree.queryParams;break;default:jt=$||null}return null!==jt&&(jt=this.removeEmptyProps(jt)),gr(ft,this.currentUrlTree,d,jt,bt??null)}navigateByUrl(d,m={skipLocationChange:!1}){const b=xn(d)?d:this.parseUrl(d),$=this.urlHandlingStrategy.merge(b,this.rawUrlTree);return this.scheduleNavigation($,"imperative",null,m)}navigate(d,m={skipLocationChange:!1}){return function Ji(f){for(let h=0;h{const $=d[b];return null!=$&&(m[b]=$),m},{})}processNavigations(){this.navigations.subscribe(d=>{this.navigated=!0,this.lastSuccessfulId=d.id,this.currentPageId=d.targetPageId,this.events.next(new Wt(d.id,this.serializeUrl(d.extractedUrl),this.serializeUrl(this.currentUrlTree))),this.lastSuccessfulNavigation=this.getCurrentNavigation(),this.titleStrategy?.updateTitle(this.routerState.snapshot),d.resolve(!0)},d=>{this.console.warn(`Unhandled Navigation Error: ${d}`)})}scheduleNavigation(d,m,b,$,z){if(this.disposed)return Promise.resolve(!1);let ve,We,ft;z?(ve=z.resolve,We=z.reject,ft=z.promise):ft=new Promise((wn,lo)=>{ve=wn,We=lo});const bt=++this.navigationId;let jt;return"computed"===this.canceledNavigationResolution?(0===this.currentPageId&&(b=this.location.getState()),jt=b&&b.\u0275routerPageId?b.\u0275routerPageId:$.replaceUrl||$.skipLocationChange?this.browserPageId??0:(this.browserPageId??0)+1):jt=0,this.setTransition({id:bt,targetPageId:jt,source:m,restoredState:b,currentUrlTree:this.currentUrlTree,rawUrl:d,extras:$,resolve:ve,reject:We,promise:ft,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),ft.catch(wn=>Promise.reject(wn))}setBrowserUrl(d,m){const b=this.urlSerializer.serialize(d),$={...m.extras.state,...this.generateNgRouterState(m.id,m.targetPageId)};this.location.isCurrentPathEqualTo(b)||m.extras.replaceUrl?this.location.replaceState(b,"",$):this.location.go(b,"",$)}restoreHistory(d,m=!1){if("computed"===this.canceledNavigationResolution){const b=this.currentPageId-d.targetPageId;"popstate"!==d.source&&"eager"!==this.urlUpdateStrategy&&this.currentUrlTree!==this.getCurrentNavigation()?.finalUrl||0===b?this.currentUrlTree===this.getCurrentNavigation()?.finalUrl&&0===b&&(this.resetState(d),this.browserUrlTree=d.currentUrlTree,this.resetUrlToCurrentUrlTree()):this.location.historyGo(b)}else"replace"===this.canceledNavigationResolution&&(m&&this.resetState(d),this.resetUrlToCurrentUrlTree())}resetState(d){this.routerState=d.currentRouterState,this.currentUrlTree=d.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,d.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}cancelNavigationTransition(d,m,b){const $=new Bt(d.id,this.serializeUrl(d.extractedUrl),m,b);this.triggerEvent($),d.resolve(!1)}generateNgRouterState(d,m){return"computed"===this.canceledNavigationResolution?{navigationId:d,\u0275routerPageId:m}:{navigationId:d}}}return f.\u0275fac=function(d){o.$Z()},f.\u0275prov=o.Yz7({token:f,factory:function(){return Xr()},providedIn:"root"}),f})(),mi=(()=>{class f{constructor(d,m,b,$,z,ve){this.router=d,this.route=m,this.tabIndexAttribute=b,this.renderer=$,this.el=z,this.locationStrategy=ve,this._preserveFragment=!1,this._skipLocationChange=!1,this._replaceUrl=!1,this.href=null,this.commands=null,this.onChanges=new O.x;const We=z.nativeElement.tagName;this.isAnchorElement="A"===We||"AREA"===We,this.isAnchorElement?this.subscription=d.events.subscribe(ft=>{ft instanceof Wt&&this.updateHref()}):this.setTabIndexIfNotOnNativeEl("0")}set preserveFragment(d){this._preserveFragment=(0,o.D6c)(d)}get preserveFragment(){return this._preserveFragment}set skipLocationChange(d){this._skipLocationChange=(0,o.D6c)(d)}get skipLocationChange(){return this._skipLocationChange}set replaceUrl(d){this._replaceUrl=(0,o.D6c)(d)}get replaceUrl(){return this._replaceUrl}setTabIndexIfNotOnNativeEl(d){null!=this.tabIndexAttribute||this.isAnchorElement||this.applyAttributeValue("tabindex",d)}ngOnChanges(d){this.isAnchorElement&&this.updateHref(),this.onChanges.next(this)}set routerLink(d){null!=d?(this.commands=Array.isArray(d)?d:[d],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(d,m,b,$,z){return!!(null===this.urlTree||this.isAnchorElement&&(0!==d||m||b||$||z||"string"==typeof this.target&&"_self"!=this.target))||(this.router.navigateByUrl(this.urlTree,{skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state}),!this.isAnchorElement)}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){this.href=null!==this.urlTree&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(this.urlTree)):null;const d=null===this.href?null:(0,o.P3R)(this.href,this.el.nativeElement.tagName.toLowerCase(),"href");this.applyAttributeValue("href",d)}applyAttributeValue(d,m){const b=this.renderer,$=this.el.nativeElement;null!==m?b.setAttribute($,d,m):b.removeAttribute($,d)}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}}return f.\u0275fac=function(d){return new(d||f)(o.Y36(or),o.Y36(Rr),o.$8M("tabindex"),o.Y36(o.Qsj),o.Y36(o.SBq),o.Y36(te.S$))},f.\u0275dir=o.lG2({type:f,selectors:[["","routerLink",""]],hostVars:1,hostBindings:function(d,m){1&d&&o.NdJ("click",function($){return m.onClick($.button,$.ctrlKey,$.shiftKey,$.altKey,$.metaKey)}),2&d&&o.uIk("target",m.target)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",relativeTo:"relativeTo",preserveFragment:"preserveFragment",skipLocationChange:"skipLocationChange",replaceUrl:"replaceUrl",routerLink:"routerLink"},standalone:!0,features:[o.TTD]}),f})();class es{}let Dl=(()=>{class f{preload(d,m){return m().pipe(St(()=>(0,N.of)(null)))}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})(),wa=(()=>{class f{constructor(d,m,b,$,z){this.router=d,this.injector=b,this.preloadingStrategy=$,this.loader=z}setUpPreloading(){this.subscription=this.router.events.pipe((0,de.h)(d=>d instanceof Wt),(0,et.b)(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(d,m){const b=[];for(const $ of m){$.providers&&!$._injector&&($._injector=(0,o.MMx)($.providers,d,`Route: ${$.path}`));const z=$._injector??d,ve=$._loadedInjector??z;$.loadChildren&&!$._loadedRoutes&&void 0===$.canLoad||$.loadComponent&&!$._loadedComponent?b.push(this.preloadConfig(z,$)):($.children||$._loadedRoutes)&&b.push(this.processRoutes(ve,$.children??$._loadedRoutes))}return(0,x.D)(b).pipe((0,K.J)())}preloadConfig(d,m){return this.preloadingStrategy.preload(m,()=>{let b;b=m.loadChildren&&void 0===m.canLoad?this.loader.loadChildren(d,m):(0,N.of)(null);const $=b.pipe((0,ne.z)(z=>null===z?(0,N.of)(void 0):(m._loadedRoutes=z.routes,m._loadedInjector=z.injector,this.processRoutes(z.injector??d,z.routes))));if(m.loadComponent&&!m._loadedComponent){const z=this.loader.loadComponent(m);return(0,x.D)([$,z]).pipe((0,K.J)())}return $})}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(or),o.LFG(o.Sil),o.LFG(o.lqb),o.LFG(es),o.LFG(Xi))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const ts=new o.OlP("");let Ns=(()=>{class f{constructor(d,m,b,$={}){this.router=d,this.viewportScroller=m,this.zone=b,this.options=$,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},$.scrollPositionRestoration=$.scrollPositionRestoration||"disabled",$.anchorScrolling=$.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.router.events.subscribe(d=>{d instanceof Mt?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=d.navigationTrigger,this.restoredId=d.restoredState?d.restoredState.navigationId:0):d instanceof Wt&&(this.lastId=d.id,this.scheduleScrollEvent(d,this.router.parseUrl(d.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.router.events.subscribe(d=>{d instanceof ar&&(d.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(d.position):d.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(d.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(d,m){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.router.triggerEvent(new ar(d,"popstate"===this.lastSource?this.store[this.restoredId]:null,m))})},0)})}ngOnDestroy(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()}}return f.\u0275fac=function(d){o.$Z()},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac}),f})();function yi(f,h){return{\u0275kind:f,\u0275providers:h}}function $s(){const f=(0,o.f3M)(o.zs3);return h=>{const d=f.get(o.z2F);if(h!==d.components[0])return;const m=f.get(or),b=f.get(rs);1===f.get(Bs)&&m.initialNavigation(),f.get(Qo,null,o.XFs.Optional)?.setUpPreloading(),f.get(ts,null,o.XFs.Optional)?.init(),m.resetRootComponentType(d.componentTypes[0]),b.closed||(b.next(),b.unsubscribe())}}const rs=new o.OlP("",{factory:()=>new O.x}),Bs=new o.OlP("",{providedIn:"root",factory:()=>1});const Qo=new o.OlP("");function bi(f){return yi(0,[{provide:Qo,useExisting:wa},{provide:es,useExisting:f}])}const _l=new o.OlP("ROUTER_FORROOT_GUARD"),wl=[te.Ye,{provide:pt,useClass:vt},{provide:or,useFactory:Xr},fr,{provide:Rr,useFactory:function Jo(f){return f.routerState.root},deps:[or]},Xi,[]];function _n(){return new o.PXZ("Router",or)}let qu=(()=>{class f{constructor(d){}static forRoot(d,m){return{ngModule:f,providers:[wl,[],{provide:ao,multi:!0,useValue:d},{provide:_l,useFactory:ed,deps:[[or,new o.FiY,new o.tp0]]},{provide:pi,useValue:m||{}},m?.useHash?{provide:te.S$,useClass:te.Do}:{provide:te.S$,useClass:te.b0},{provide:ts,useFactory:()=>{const f=(0,o.f3M)(or),h=(0,o.f3M)(te.EM),d=(0,o.f3M)(o.R0b),m=(0,o.f3M)(pi);return m.scrollOffset&&h.setOffset(m.scrollOffset),new Ns(f,h,d,m)}},m?.preloadingStrategy?bi(m.preloadingStrategy).\u0275providers:[],{provide:o.PXZ,multi:!0,useFactory:_n},m?.initialNavigation?td(m):[],[{provide:El,useFactory:$s},{provide:o.tb,multi:!0,useExisting:El}]]}}static forChild(d){return{ngModule:f,providers:[{provide:ao,multi:!0,useValue:d}]}}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(_l,8))},f.\u0275mod=o.oAB({type:f}),f.\u0275inj=o.cJS({imports:[kr]}),f})();function ed(f){return"guarded"}function td(f){return["disabled"===f.initialNavigation?yi(3,[{provide:o.ip1,multi:!0,useFactory:()=>{const h=(0,o.f3M)(or);return()=>{h.setUpLocationChangeListener()}}},{provide:Bs,useValue:2}]).\u0275providers:[],"enabledBlocking"===f.initialNavigation?yi(2,[{provide:Bs,useValue:0},{provide:o.ip1,multi:!0,deps:[o.zs3],useFactory:h=>{const d=h.get(te.V_,Promise.resolve());return()=>d.then(()=>new Promise(b=>{const $=h.get(or),z=h.get(rs);(function m(b){h.get(or).events.pipe((0,de.h)(z=>z instanceof Wt||z instanceof Bt||z instanceof An),(0,ce.U)(z=>z instanceof Wt||z instanceof Bt&&(0===z.code||1===z.code)&&null),(0,de.h)(z=>null!==z),(0,De.q)(1)).subscribe(()=>{b()})})(()=>{b(!0)}),$.afterPreactivation=()=>(b(!0),z.closed?(0,N.of)(void 0):z),$.initialNavigation()}))}}]).\u0275providers:[]]}const El=new o.OlP("")},5861:(Qe,Fe,w)=>{"use strict";function o(N,ge,R,W,M,U,_){try{var Y=N[U](_),G=Y.value}catch(Z){return void R(Z)}Y.done?ge(G):Promise.resolve(G).then(W,M)}function x(N){return function(){var ge=this,R=arguments;return new Promise(function(W,M){var U=N.apply(ge,R);function _(G){o(U,W,M,_,Y,"next",G)}function Y(G){o(U,W,M,_,Y,"throw",G)}_(void 0)})}}w.d(Fe,{Z:()=>x})}},Qe=>{Qe(Qe.s=1394)}]); \ No newline at end of file diff --git a/src/main/resources/app/main.f2513059db4c78f6.js b/src/main/resources/app/main.f2513059db4c78f6.js deleted file mode 100644 index c4764d75d..000000000 --- a/src/main/resources/app/main.f2513059db4c78f6.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkapp=self.webpackChunkapp||[]).push([[179],{7423:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Uw:()=>P,fo:()=>B});var o=w(5861);typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"&&global;var U=(()=>{return(T=U||(U={})).Unimplemented="UNIMPLEMENTED",T.Unavailable="UNAVAILABLE",U;var T})();class _ extends Error{constructor(k,O,te){super(k),this.message=k,this.code=O,this.data=te}}const G=T=>{var k,O,te,ce,Ae;const De=T.CapacitorCustomPlatform||null,ue=T.Capacitor||{},de=ue.Plugins=ue.Plugins||{},ne=T.CapacitorPlatforms,Ce=(null===(k=ne?.currentPlatform)||void 0===k?void 0:k.getPlatform)||(()=>null!==De?De.name:(T=>{var k,O;return T?.androidBridge?"android":null!==(O=null===(k=T?.webkit)||void 0===k?void 0:k.messageHandlers)&&void 0!==O&&O.bridge?"ios":"web"})(T)),dt=(null===(O=ne?.currentPlatform)||void 0===O?void 0:O.isNativePlatform)||(()=>"web"!==Ce()),Ue=(null===(te=ne?.currentPlatform)||void 0===te?void 0:te.isPluginAvailable)||(Pt=>!(!Rt.get(Pt)?.platforms.has(Ce())&&!Ke(Pt))),Ke=(null===(ce=ne?.currentPlatform)||void 0===ce?void 0:ce.getPluginHeader)||(Pt=>{var Ut;return null===(Ut=ue.PluginHeaders)||void 0===Ut?void 0:Ut.find(it=>it.name===Pt)}),Rt=new Map,pn=(null===(Ae=ne?.currentPlatform)||void 0===Ae?void 0:Ae.registerPlugin)||((Pt,Ut={})=>{const it=Rt.get(Pt);if(it)return console.warn(`Capacitor plugin "${Pt}" already registered. Cannot register plugins twice.`),it.proxy;const Xt=Ce(),kt=Ke(Pt);let Vt;const rn=function(){var Et=(0,o.Z)(function*(){return!Vt&&Xt in Ut?Vt=Vt="function"==typeof Ut[Xt]?yield Ut[Xt]():Ut[Xt]:null!==De&&!Vt&&"web"in Ut&&(Vt=Vt="function"==typeof Ut.web?yield Ut.web():Ut.web),Vt});return function(){return Et.apply(this,arguments)}}(),en=Et=>{let ut;const Ct=(...qe)=>{const on=rn().then(gn=>{const Nt=((Et,ut)=>{var Ct,qe;if(!kt){if(Et)return null===(qe=Et[ut])||void 0===qe?void 0:qe.bind(Et);throw new _(`"${Pt}" plugin is not implemented on ${Xt}`,U.Unimplemented)}{const on=kt?.methods.find(gn=>ut===gn.name);if(on)return"promise"===on.rtype?gn=>ue.nativePromise(Pt,ut.toString(),gn):(gn,Nt)=>ue.nativeCallback(Pt,ut.toString(),gn,Nt);if(Et)return null===(Ct=Et[ut])||void 0===Ct?void 0:Ct.bind(Et)}})(gn,Et);if(Nt){const Hn=Nt(...qe);return ut=Hn?.remove,Hn}throw new _(`"${Pt}.${Et}()" is not implemented on ${Xt}`,U.Unimplemented)});return"addListener"===Et&&(on.remove=(0,o.Z)(function*(){return ut()})),on};return Ct.toString=()=>`${Et.toString()}() { [capacitor code] }`,Object.defineProperty(Ct,"name",{value:Et,writable:!1,configurable:!1}),Ct},gt=en("addListener"),Yt=en("removeListener"),ht=(Et,ut)=>{const Ct=gt({eventName:Et},ut),qe=function(){var gn=(0,o.Z)(function*(){const Nt=yield Ct;Yt({eventName:Et,callbackId:Nt},ut)});return function(){return gn.apply(this,arguments)}}(),on=new Promise(gn=>Ct.then(()=>gn({remove:qe})));return on.remove=(0,o.Z)(function*(){console.warn("Using addListener() without 'await' is deprecated."),yield qe()}),on},nt=new Proxy({},{get(Et,ut){switch(ut){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return kt?ht:gt;case"removeListener":return Yt;default:return en(ut)}}});return de[Pt]=nt,Rt.set(Pt,{name:Pt,proxy:nt,platforms:new Set([...Object.keys(Ut),...kt?[Xt]:[]])}),nt});return ue.convertFileSrc||(ue.convertFileSrc=Pt=>Pt),ue.getPlatform=Ce,ue.handleError=Pt=>T.console.error(Pt),ue.isNativePlatform=dt,ue.isPluginAvailable=Ue,ue.pluginMethodNoop=(Pt,Ut,it)=>Promise.reject(`${it} does not have an implementation of "${Ut}".`),ue.registerPlugin=pn,ue.Exception=_,ue.DEBUG=!!ue.DEBUG,ue.isLoggingEnabled=!!ue.isLoggingEnabled,ue.platform=ue.getPlatform(),ue.isNative=ue.isNativePlatform(),ue},S=(T=>T.Capacitor=G(T))(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),B=S.registerPlugin;class P{constructor(k){this.listeners={},this.windowListeners={},k&&(console.warn(`Capacitor WebPlugin "${k.name}" config object was deprecated in v3 and will be removed in v4.`),this.config=k)}addListener(k,O){var te=this;this.listeners[k]||(this.listeners[k]=[]),this.listeners[k].push(O);const Ae=this.windowListeners[k];Ae&&!Ae.registered&&this.addWindowListener(Ae);const De=function(){var de=(0,o.Z)(function*(){return te.removeListener(k,O)});return function(){return de.apply(this,arguments)}}(),ue=Promise.resolve({remove:De});return Object.defineProperty(ue,"remove",{value:(de=(0,o.Z)(function*(){console.warn("Using addListener() without 'await' is deprecated."),yield De()}),function(){return de.apply(this,arguments)})}),ue;var de}removeAllListeners(){var k=this;return(0,o.Z)(function*(){k.listeners={};for(const O in k.windowListeners)k.removeWindowListener(k.windowListeners[O]);k.windowListeners={}})()}notifyListeners(k,O){const te=this.listeners[k];te&&te.forEach(ce=>ce(O))}hasListeners(k){return!!this.listeners[k].length}registerWindowListener(k,O){this.windowListeners[O]={registered:!1,windowEventName:k,pluginEventName:O,handler:te=>{this.notifyListeners(O,te)}}}unimplemented(k="not implemented"){return new S.Exception(k,U.Unimplemented)}unavailable(k="not available"){return new S.Exception(k,U.Unavailable)}removeListener(k,O){var te=this;return(0,o.Z)(function*(){const ce=te.listeners[k];if(!ce)return;const Ae=ce.indexOf(O);te.listeners[k].splice(Ae,1),te.listeners[k].length||te.removeWindowListener(te.windowListeners[k])})()}addWindowListener(k){window.addEventListener(k.windowEventName,k.handler),k.registered=!0}removeWindowListener(k){!k||(window.removeEventListener(k.windowEventName,k.handler),k.registered=!1)}}const pe=T=>encodeURIComponent(T).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),ke=T=>T.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class Te extends P{getCookies(){return(0,o.Z)(function*(){const k=document.cookie,O={};return k.split(";").forEach(te=>{if(te.length<=0)return;let[ce,Ae]=te.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");ce=ke(ce).trim(),Ae=ke(Ae).trim(),O[ce]=Ae}),O})()}setCookie(k){return(0,o.Z)(function*(){try{const O=pe(k.key),te=pe(k.value),ce=`; expires=${(k.expires||"").replace("expires=","")}`,Ae=(k.path||"/").replace("path=","");document.cookie=`${O}=${te||""}${ce}; path=${Ae}`}catch(O){return Promise.reject(O)}})()}deleteCookie(k){return(0,o.Z)(function*(){try{document.cookie=`${k.key}=; Max-Age=0`}catch(O){return Promise.reject(O)}})()}clearCookies(){return(0,o.Z)(function*(){try{const k=document.cookie.split(";")||[];for(const O of k)document.cookie=O.replace(/^ +/,"").replace(/=.*/,`=;expires=${(new Date).toUTCString()};path=/`)}catch(k){return Promise.reject(k)}})()}clearAllCookies(){var k=this;return(0,o.Z)(function*(){try{yield k.clearCookies()}catch(O){return Promise.reject(O)}})()}}B("CapacitorCookies",{web:()=>new Te});const Be=function(){var T=(0,o.Z)(function*(k){return new Promise((O,te)=>{const ce=new FileReader;ce.onload=()=>{const Ae=ce.result;O(Ae.indexOf(",")>=0?Ae.split(",")[1]:Ae)},ce.onerror=Ae=>te(Ae),ce.readAsDataURL(k)})});return function(O){return T.apply(this,arguments)}}();class Ne extends P{request(k){return(0,o.Z)(function*(){const O=((T,k={})=>{const O=Object.assign({method:T.method||"GET",headers:T.headers},k),ce=((T={})=>{const k=Object.keys(T);return Object.keys(T).map(ce=>ce.toLocaleLowerCase()).reduce((ce,Ae,De)=>(ce[Ae]=T[k[De]],ce),{})})(T.headers)["content-type"]||"";if("string"==typeof T.data)O.body=T.data;else if(ce.includes("application/x-www-form-urlencoded")){const Ae=new URLSearchParams;for(const[De,ue]of Object.entries(T.data||{}))Ae.set(De,ue);O.body=Ae.toString()}else if(ce.includes("multipart/form-data")){const Ae=new FormData;if(T.data instanceof FormData)T.data.forEach((ue,de)=>{Ae.append(de,ue)});else for(const ue of Object.keys(T.data))Ae.append(ue,T.data[ue]);O.body=Ae;const De=new Headers(O.headers);De.delete("content-type"),O.headers=De}else(ce.includes("application/json")||"object"==typeof T.data)&&(O.body=JSON.stringify(T.data));return O})(k,k.webFetchExtra),te=((T,k=!0)=>T?Object.entries(T).reduce((te,ce)=>{const[Ae,De]=ce;let ue,de;return Array.isArray(De)?(de="",De.forEach(ne=>{ue=k?encodeURIComponent(ne):ne,de+=`${Ae}=${ue}&`}),de.slice(0,-1)):(ue=k?encodeURIComponent(De):De,de=`${Ae}=${ue}`),`${te}&${de}`},"").substr(1):null)(k.params,k.shouldEncodeUrlParams),ce=te?`${k.url}?${te}`:k.url,Ae=yield fetch(ce,O),De=Ae.headers.get("content-type")||"";let de,ne,{responseType:ue="text"}=Ae.ok?k:{};switch(De.includes("application/json")&&(ue="json"),ue){case"arraybuffer":case"blob":ne=yield Ae.blob(),de=yield Be(ne);break;case"json":de=yield Ae.json();break;default:de=yield Ae.text()}const Ee={};return Ae.headers.forEach((Ce,ze)=>{Ee[ze]=Ce}),{data:de,headers:Ee,status:Ae.status,url:Ae.url}})()}get(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"GET"}))})()}post(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"POST"}))})()}put(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"PUT"}))})()}patch(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"PATCH"}))})()}delete(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"DELETE"}))})()}}B("CapacitorHttp",{web:()=>new Ne})},502:(Qe,Fe,w)=>{"use strict";w.d(Fe,{BX:()=>Nr,Br:()=>Zn,dr:()=>Nt,BJ:()=>Hn,oU:()=>zt,cs:()=>nr,yp:()=>jn,YG:()=>xe,Sm:()=>se,PM:()=>ye,hM:()=>_t,wI:()=>tn,W2:()=>Ln,fr:()=>ee,jY:()=>Se,Gu:()=>Le,gu:()=>yt,pK:()=>sn,Ie:()=>dn,rH:()=>er,u8:()=>$n,IK:()=>Tn,td:()=>xn,Q$:()=>vn,q_:()=>tr,z0:()=>cr,zc:()=>$t,uN:()=>Un,jP:()=>fr,Nd:()=>le,VI:()=>Ie,t9:()=>ot,n0:()=>st,PQ:()=>An,jI:()=>Rn,g2:()=>an,wd:()=>ho,sr:()=>jr,Pc:()=>C,r4:()=>rr,HT:()=>Lr,SH:()=>zr,as:()=>en,t4:()=>si,QI:()=>Yt,j9:()=>ht,yF:()=>ko});var o=w(8274),x=w(433),N=w(655),ge=w(8421),R=w(9751),W=w(5577),M=w(1144),U=w(576),_=w(3268);const Y=["addListener","removeListener"],G=["addEventListener","removeEventListener"],Z=["on","off"];function S(s,c,a,g){if((0,U.m)(a)&&(g=a,a=void 0),g)return S(s,c,a).pipe((0,_.Z)(g));const[L,Me]=function P(s){return(0,U.m)(s.addEventListener)&&(0,U.m)(s.removeEventListener)}(s)?G.map(Je=>at=>s[Je](c,at,a)):function E(s){return(0,U.m)(s.addListener)&&(0,U.m)(s.removeListener)}(s)?Y.map(B(s,c)):function j(s){return(0,U.m)(s.on)&&(0,U.m)(s.off)}(s)?Z.map(B(s,c)):[];if(!L&&(0,M.z)(s))return(0,W.z)(Je=>S(Je,c,a))((0,ge.Xf)(s));if(!L)throw new TypeError("Invalid event target");return new R.y(Je=>{const at=(...Dt)=>Je.next(1Me(at)})}function B(s,c){return a=>g=>s[a](c,g)}var K=w(7579),pe=w(1135),ke=w(5472),oe=(w(8834),w(3953),w(3880),w(1911),w(9658)),be=w(5730),Ne=w(697),T=(w(4292),w(4414)),te=(w(3457),w(4349),w(1308)),ne=w(9300),Ee=w(3900),Ce=w(1884),ze=w(6895);const et=oe.i,Ke=["*"],Pt=s=>"function"==typeof __zone_symbol__requestAnimationFrame?__zone_symbol__requestAnimationFrame(s):"function"==typeof requestAnimationFrame?requestAnimationFrame(s):setTimeout(s),Ut=s=>!!s.resolveComponentFactory;let it=(()=>{class s{constructor(a,g){this.injector=a,this.el=g,this.onChange=()=>{},this.onTouched=()=>{}}writeValue(a){this.el.nativeElement.value=this.lastValue=a??"",Xt(this.el)}handleChangeEvent(a,g){a===this.el.nativeElement&&(g!==this.lastValue&&(this.lastValue=g,this.onChange(g)),Xt(this.el))}_handleBlurEvent(a){a===this.el.nativeElement&&(this.onTouched(),Xt(this.el))}registerOnChange(a){this.onChange=a}registerOnTouched(a){this.onTouched=a}setDisabledState(a){this.el.nativeElement.disabled=a}ngOnDestroy(){this.statusChanges&&this.statusChanges.unsubscribe()}ngAfterViewInit(){let a;try{a=this.injector.get(x.a5)}catch{}if(!a)return;a.statusChanges&&(this.statusChanges=a.statusChanges.subscribe(()=>Xt(this.el)));const g=a.control;g&&["markAsTouched","markAllAsTouched","markAsUntouched","markAsDirty","markAsPristine"].forEach(Me=>{if(typeof g[Me]<"u"){const Je=g[Me].bind(g);g[Me]=(...at)=>{Je(...at),Xt(this.el)}}})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,hostBindings:function(a,g){1&a&&o.NdJ("ionBlur",function(Me){return g._handleBlurEvent(Me.target)})}}),s})();const Xt=s=>{Pt(()=>{const c=s.nativeElement,a=null!=c.value&&c.value.toString().length>0,g=kt(c);Vt(c,g);const L=c.closest("ion-item");L&&Vt(L,a?[...g,"item-has-value"]:g)})},kt=s=>{const c=s.classList,a=[];for(let g=0;g{const a=s.classList;a.remove("ion-valid","ion-invalid","ion-touched","ion-untouched","ion-dirty","ion-pristine"),a.add(...c)},rn=(s,c)=>s.substring(0,c.length)===c;let en=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleIonChange(a){this.handleChangeEvent(a,a.value)}registerOnChange(a){super.registerOnChange(g=>{a(""===g?null:parseFloat(g))})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-input","type","number"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleIonChange(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})(),Yt=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleChangeEvent(a){this.handleChangeEvent(a,a.value)}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-range"],["ion-select"],["ion-radio-group"],["ion-segment"],["ion-datetime"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleChangeEvent(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})(),ht=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleInputEvent(a){this.handleChangeEvent(a,a.value)}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-input",3,"type","number"],["ion-textarea"],["ion-searchbar"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleInputEvent(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})();const nt=(s,c)=>{const a=s.prototype;c.forEach(g=>{Object.defineProperty(a,g,{get(){return this.el[g]},set(L){this.z.runOutsideAngular(()=>this.el[g]=L)}})})},Et=(s,c)=>{const a=s.prototype;c.forEach(g=>{a[g]=function(){const L=arguments;return this.z.runOutsideAngular(()=>this.el[g].apply(this.el,L))}})},ut=(s,c,a)=>{a.forEach(g=>s[g]=S(c,g))};function qe(s){return function(a){const{defineCustomElementFn:g,inputs:L,methods:Me}=s;return void 0!==g&&g(),L&&nt(a,L),Me&&Et(a,Me),a}}let Nt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-app"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),Hn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-avatar"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),zt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-back-button"]],inputs:{color:"color",defaultHref:"defaultHref",disabled:"disabled",icon:"icon",mode:"mode",routerAnimation:"routerAnimation",text:"text",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","defaultHref","disabled","icon","mode","routerAnimation","text","type"]})],s),s})(),jn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-badge"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})(),xe=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionFocus","ionBlur"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-button"]],inputs:{buttonType:"buttonType",color:"color",disabled:"disabled",download:"download",expand:"expand",fill:"fill",form:"form",href:"href",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",shape:"shape",size:"size",strong:"strong",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]})],s),s})(),se=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-buttons"]],inputs:{collapse:"collapse"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse"]})],s),s})(),ye=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-card"]],inputs:{button:"button",color:"color",disabled:"disabled",download:"download",href:"href",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]})],s),s})(),_t=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-chip"]],inputs:{color:"color",disabled:"disabled",mode:"mode",outline:"outline"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","disabled","mode","outline"]})],s),s})(),tn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-col"]],inputs:{offset:"offset",offsetLg:"offsetLg",offsetMd:"offsetMd",offsetSm:"offsetSm",offsetXl:"offsetXl",offsetXs:"offsetXs",pull:"pull",pullLg:"pullLg",pullMd:"pullMd",pullSm:"pullSm",pullXl:"pullXl",pullXs:"pullXs",push:"push",pushLg:"pushLg",pushMd:"pushMd",pushSm:"pushSm",pushXl:"pushXl",pushXs:"pushXs",size:"size",sizeLg:"sizeLg",sizeMd:"sizeMd",sizeSm:"sizeSm",sizeXl:"sizeXl",sizeXs:"sizeXs"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["offset","offsetLg","offsetMd","offsetSm","offsetXl","offsetXs","pull","pullLg","pullMd","pullSm","pullXl","pullXs","push","pushLg","pushMd","pushSm","pushXl","pushXs","size","sizeLg","sizeMd","sizeSm","sizeXl","sizeXs"]})],s),s})(),Ln=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionScrollStart","ionScroll","ionScrollEnd"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-content"]],inputs:{color:"color",forceOverscroll:"forceOverscroll",fullscreen:"fullscreen",scrollEvents:"scrollEvents",scrollX:"scrollX",scrollY:"scrollY"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"],methods:["getScrollElement","scrollToTop","scrollToBottom","scrollByPoint","scrollToPoint"]})],s),s})(),ee=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-footer"]],inputs:{collapse:"collapse",mode:"mode",translucent:"translucent"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse","mode","translucent"]})],s),s})(),Se=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-grid"]],inputs:{fixed:"fixed"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["fixed"]})],s),s})(),Le=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-header"]],inputs:{collapse:"collapse",mode:"mode",translucent:"translucent"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse","mode","translucent"]})],s),s})(),yt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-icon"]],inputs:{color:"color",flipRtl:"flipRtl",icon:"icon",ios:"ios",lazy:"lazy",md:"md",mode:"mode",name:"name",sanitize:"sanitize",size:"size",src:"src"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]})],s),s})(),sn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionInput","ionChange","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-input"]],inputs:{accept:"accept",autocapitalize:"autocapitalize",autocomplete:"autocomplete",autocorrect:"autocorrect",autofocus:"autofocus",clearInput:"clearInput",clearOnEdit:"clearOnEdit",color:"color",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",max:"max",maxlength:"maxlength",min:"min",minlength:"minlength",mode:"mode",multiple:"multiple",name:"name",pattern:"pattern",placeholder:"placeholder",readonly:"readonly",required:"required",size:"size",spellcheck:"spellcheck",step:"step",type:"type",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["accept","autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearOnEdit","color","debounce","disabled","enterkeyhint","inputmode","max","maxlength","min","minlength","mode","multiple","name","pattern","placeholder","readonly","required","size","spellcheck","step","type","value"],methods:["setFocus","getInputElement"]})],s),s})(),dn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item"]],inputs:{button:"button",color:"color",counter:"counter",counterFormatter:"counterFormatter",detail:"detail",detailIcon:"detailIcon",disabled:"disabled",download:"download",fill:"fill",href:"href",lines:"lines",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",shape:"shape",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["button","color","counter","counterFormatter","detail","detailIcon","disabled","download","fill","href","lines","mode","rel","routerAnimation","routerDirection","shape","target","type"]})],s),s})(),er=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-divider"]],inputs:{color:"color",mode:"mode",sticky:"sticky"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode","sticky"]})],s),s})(),$n=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-option"]],inputs:{color:"color",disabled:"disabled",download:"download",expandable:"expandable",href:"href",mode:"mode",rel:"rel",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","disabled","download","expandable","href","mode","rel","target","type"]})],s),s})(),Tn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionSwipe"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-options"]],inputs:{side:"side"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["side"]})],s),s})(),xn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionDrag"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-sliding"]],inputs:{disabled:"disabled"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["disabled"],methods:["getOpenAmount","getSlidingRatio","open","close","closeOpened"]})],s),s})(),vn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-label"]],inputs:{color:"color",mode:"mode",position:"position"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode","position"]})],s),s})(),tr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-list"]],inputs:{inset:"inset",lines:"lines",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["inset","lines","mode"],methods:["closeSlidingItems"]})],s),s})(),cr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionWillOpen","ionWillClose","ionDidOpen","ionDidClose"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-menu"]],inputs:{contentId:"contentId",disabled:"disabled",maxEdgeStart:"maxEdgeStart",menuId:"menuId",side:"side",swipeGesture:"swipeGesture",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["contentId","disabled","maxEdgeStart","menuId","side","swipeGesture","type"],methods:["isOpen","isActive","open","close","toggle","setOpen"]})],s),s})(),$t=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-menu-toggle"]],inputs:{autoHide:"autoHide",menu:"menu"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["autoHide","menu"]})],s),s})(),Un=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-note"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})(),le=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-row"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),Ie=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionInput","ionChange","ionCancel","ionClear","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-searchbar"]],inputs:{animated:"animated",autocomplete:"autocomplete",autocorrect:"autocorrect",cancelButtonIcon:"cancelButtonIcon",cancelButtonText:"cancelButtonText",clearIcon:"clearIcon",color:"color",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",mode:"mode",placeholder:"placeholder",searchIcon:"searchIcon",showCancelButton:"showCancelButton",showClearButton:"showClearButton",spellcheck:"spellcheck",type:"type",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["animated","autocomplete","autocorrect","cancelButtonIcon","cancelButtonText","clearIcon","color","debounce","disabled","enterkeyhint","inputmode","mode","placeholder","searchIcon","showCancelButton","showClearButton","spellcheck","type","value"],methods:["setFocus","getInputElement"]})],s),s})(),ot=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionChange","ionCancel","ionDismiss","ionFocus","ionBlur"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-select"]],inputs:{cancelText:"cancelText",compareWith:"compareWith",disabled:"disabled",interface:"interface",interfaceOptions:"interfaceOptions",mode:"mode",multiple:"multiple",name:"name",okText:"okText",placeholder:"placeholder",selectedText:"selectedText",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["cancelText","compareWith","disabled","interface","interfaceOptions","mode","multiple","name","okText","placeholder","selectedText","value"],methods:["open"]})],s),s})(),st=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-select-option"]],inputs:{disabled:"disabled",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["disabled","value"]})],s),s})(),An=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-spinner"]],inputs:{color:"color",duration:"duration",name:"name",paused:"paused"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","duration","name","paused"]})],s),s})(),Rn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionSplitPaneVisible"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-split-pane"]],inputs:{contentId:"contentId",disabled:"disabled",when:"when"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["contentId","disabled","when"]})],s),s})(),an=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionChange","ionInput","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-textarea"]],inputs:{autoGrow:"autoGrow",autocapitalize:"autocapitalize",autofocus:"autofocus",clearOnEdit:"clearOnEdit",color:"color",cols:"cols",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",maxlength:"maxlength",minlength:"minlength",mode:"mode",name:"name",placeholder:"placeholder",readonly:"readonly",required:"required",rows:"rows",spellcheck:"spellcheck",value:"value",wrap:"wrap"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["autoGrow","autocapitalize","autofocus","clearOnEdit","color","cols","debounce","disabled","enterkeyhint","inputmode","maxlength","minlength","mode","name","placeholder","readonly","required","rows","spellcheck","value","wrap"],methods:["setFocus","getInputElement"]})],s),s})(),ho=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-title"]],inputs:{color:"color",size:"size"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","size"]})],s),s})(),jr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-toolbar"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})();class xr{constructor(c={}){this.data=c}get(c){return this.data[c]}}let Or=(()=>{class s{constructor(a,g){this.zone=a,this.appRef=g}create(a,g,L){return new ar(a,g,L,this.appRef,this.zone)}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(o.R0b),o.LFG(o.z2F))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})();class ar{constructor(c,a,g,L,Me){this.resolverOrInjector=c,this.injector=a,this.location=g,this.appRef=L,this.zone=Me,this.elRefMap=new WeakMap,this.elEventsMap=new WeakMap}attachViewToDom(c,a,g,L){return this.zone.run(()=>new Promise(Me=>{Me(Bn(this.zone,this.resolverOrInjector,this.injector,this.location,this.appRef,this.elRefMap,this.elEventsMap,c,a,g,L))}))}removeViewFromDom(c,a){return this.zone.run(()=>new Promise(g=>{const L=this.elRefMap.get(a);if(L){L.destroy(),this.elRefMap.delete(a);const Me=this.elEventsMap.get(a);Me&&(Me(),this.elEventsMap.delete(a))}g()}))}}const Bn=(s,c,a,g,L,Me,Je,at,Dt,Zt,bn)=>{let Ve;const At=o.zs3.create({providers:qn(Zt),parent:a});if(c&&Ut(c)){const $r=c.resolveComponentFactory(Dt);Ve=g?g.createComponent($r,g.length,At):$r.create(At)}else{if(!g)return null;Ve=g.createComponent(Dt,{index:g.indexOf,injector:At,environmentInjector:c})}const yr=Ve.instance,Dr=Ve.location.nativeElement;if(Zt&&Object.assign(yr,Zt),bn)for(const $r of bn)Dr.classList.add($r);const Mn=Fn(s,yr,Dr);return at.appendChild(Dr),g||L.attachView(Ve.hostView),Ve.changeDetectorRef.reattach(),Me.set(Dr,Ve),Je.set(Dr,Mn),Dr},po=[Ne.L,Ne.a,Ne.b,Ne.c,Ne.d],Fn=(s,c,a)=>s.run(()=>{const g=po.filter(L=>"function"==typeof c[L]).map(L=>{const Me=Je=>c[L](Je.detail);return a.addEventListener(L,Me),()=>a.removeEventListener(L,Me)});return()=>g.forEach(L=>L())}),zn=new o.OlP("NavParamsToken"),qn=s=>[{provide:zn,useValue:s},{provide:xr,useFactory:dr,deps:[zn]}],dr=s=>new xr(s),Gn=(s,c)=>((s=s.filter(a=>a.stackId!==c.stackId)).push(c),s),vr=(s,c)=>{const a=s.createUrlTree(["."],{relativeTo:c});return s.serializeUrl(a)},Pr=(s,c)=>{if(!s)return;const a=xo(c);for(let g=0;g=s.length)return a[g];if(a[g]!==s[g])return}},xo=s=>s.split("/").map(c=>c.trim()).filter(c=>""!==c),vo=s=>{s&&(s.ref.destroy(),s.unlistenEvents())};class yo{constructor(c,a,g,L,Me,Je){this.containerEl=a,this.router=g,this.navCtrl=L,this.zone=Me,this.location=Je,this.views=[],this.skipTransition=!1,this.nextId=0,this.tabsPrefix=void 0!==c?xo(c):void 0}createView(c,a){var g;const L=vr(this.router,a),Me=null===(g=c?.location)||void 0===g?void 0:g.nativeElement,Je=Fn(this.zone,c.instance,Me);return{id:this.nextId++,stackId:Pr(this.tabsPrefix,L),unlistenEvents:Je,element:Me,ref:c,url:L}}getExistingView(c){const a=vr(this.router,c),g=this.views.find(L=>L.url===a);return g&&g.ref.changeDetectorRef.reattach(),g}setActive(c){var a,g;const L=this.navCtrl.consumeTransition();let{direction:Me,animation:Je,animationBuilder:at}=L;const Dt=this.activeView,Zt=((s,c)=>!c||s.stackId!==c.stackId)(c,Dt);Zt&&(Me="back",Je=void 0);const bn=this.views.slice();let Ve;const At=this.router;At.getCurrentNavigation?Ve=At.getCurrentNavigation():!(null===(a=At.navigations)||void 0===a)&&a.value&&(Ve=At.navigations.value),null!==(g=Ve?.extras)&&void 0!==g&&g.replaceUrl&&this.views.length>0&&this.views.splice(-1,1);const yr=this.views.includes(c),Dr=this.insertView(c,Me);yr||c.ref.changeDetectorRef.detectChanges();const Mn=c.animationBuilder;return void 0===at&&"back"===Me&&!Zt&&void 0!==Mn&&(at=Mn),Dt&&(Dt.animationBuilder=at),this.zone.runOutsideAngular(()=>this.wait(()=>(Dt&&Dt.ref.changeDetectorRef.detach(),c.ref.changeDetectorRef.reattach(),this.transition(c,Dt,Je,this.canGoBack(1),!1,at).then(()=>Oo(c,Dr,bn,this.location,this.zone)).then(()=>({enteringView:c,direction:Me,animation:Je,tabSwitch:Zt})))))}canGoBack(c,a=this.getActiveStackId()){return this.getStack(a).length>c}pop(c,a=this.getActiveStackId()){return this.zone.run(()=>{var g,L;const Me=this.getStack(a);if(Me.length<=c)return Promise.resolve(!1);const Je=Me[Me.length-c-1];let at=Je.url;const Dt=Je.savedData;if(Dt){const bn=Dt.get("primary");null!==(L=null===(g=bn?.route)||void 0===g?void 0:g._routerState)&&void 0!==L&&L.snapshot.url&&(at=bn.route._routerState.snapshot.url)}const{animationBuilder:Zt}=this.navCtrl.consumeTransition();return this.navCtrl.navigateBack(at,Object.assign(Object.assign({},Je.savedExtras),{animation:Zt})).then(()=>!0)})}startBackTransition(){const c=this.activeView;if(c){const a=this.getStack(c.stackId),g=a[a.length-2],L=g.animationBuilder;return this.wait(()=>this.transition(g,c,"back",this.canGoBack(2),!0,L))}return Promise.resolve()}endBackTransition(c){c?(this.skipTransition=!0,this.pop(1)):this.activeView&&Jr(this.activeView,this.views,this.views,this.location,this.zone)}getLastUrl(c){const a=this.getStack(c);return a.length>0?a[a.length-1]:void 0}getRootUrl(c){const a=this.getStack(c);return a.length>0?a[0]:void 0}getActiveStackId(){return this.activeView?this.activeView.stackId:void 0}hasRunningTask(){return void 0!==this.runningTask}destroy(){this.containerEl=void 0,this.views.forEach(vo),this.activeView=void 0,this.views=[]}getStack(c){return this.views.filter(a=>a.stackId===c)}insertView(c,a){return this.activeView=c,this.views=((s,c,a)=>"root"===a?Gn(s,c):"forward"===a?((s,c)=>(s.indexOf(c)>=0?s=s.filter(g=>g.stackId!==c.stackId||g.id<=c.id):s.push(c),s))(s,c):((s,c)=>s.indexOf(c)>=0?s.filter(g=>g.stackId!==c.stackId||g.id<=c.id):Gn(s,c))(s,c))(this.views,c,a),this.views.slice()}transition(c,a,g,L,Me,Je){if(this.skipTransition)return this.skipTransition=!1,Promise.resolve(!1);if(a===c)return Promise.resolve(!1);const at=c?c.element:void 0,Dt=a?a.element:void 0,Zt=this.containerEl;return at&&at!==Dt&&(at.classList.add("ion-page"),at.classList.add("ion-page-invisible"),at.parentElement!==Zt&&Zt.appendChild(at),Zt.commit)?Zt.commit(at,Dt,{deepWait:!0,duration:void 0===g?0:void 0,direction:g,showGoBack:L,progressAnimation:Me,animationBuilder:Je}):Promise.resolve(!1)}wait(c){return(0,N.mG)(this,void 0,void 0,function*(){void 0!==this.runningTask&&(yield this.runningTask,this.runningTask=void 0);const a=this.runningTask=c();return a.finally(()=>this.runningTask=void 0),a})}}const Oo=(s,c,a,g,L)=>"function"==typeof requestAnimationFrame?new Promise(Me=>{requestAnimationFrame(()=>{Jr(s,c,a,g,L),Me()})}):Promise.resolve(),Jr=(s,c,a,g,L)=>{L.run(()=>a.filter(Me=>!c.includes(Me)).forEach(vo)),c.forEach(Me=>{const at=g.path().split("?")[0].split("#")[0];if(Me!==s&&Me.url!==at){const Dt=Me.element;Dt.setAttribute("aria-hidden","true"),Dt.classList.add("ion-page-hidden"),Me.ref.changeDetectorRef.detach()}})};let Go=(()=>{class s{get(a,g){const L=Yo();return L?L.get(a,g):null}getBoolean(a,g){const L=Yo();return!!L&&L.getBoolean(a,g)}getNumber(a,g){const L=Yo();return L?L.getNumber(a,g):0}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Fr=new o.OlP("USERCONFIG"),Yo=()=>{if(typeof window<"u"){const s=window.Ionic;if(s?.config)return s.config}return null};let si=(()=>{class s{constructor(a,g){this.doc=a,this.backButton=new K.x,this.keyboardDidShow=new K.x,this.keyboardDidHide=new K.x,this.pause=new K.x,this.resume=new K.x,this.resize=new K.x,g.run(()=>{var L;let Me;this.win=a.defaultView,this.backButton.subscribeWithPriority=function(Je,at){return this.subscribe(Dt=>Dt.register(Je,Zt=>g.run(()=>at(Zt))))},Ur(this.pause,a,"pause"),Ur(this.resume,a,"resume"),Ur(this.backButton,a,"ionBackButton"),Ur(this.resize,this.win,"resize"),Ur(this.keyboardDidShow,this.win,"ionKeyboardDidShow"),Ur(this.keyboardDidHide,this.win,"ionKeyboardDidHide"),this._readyPromise=new Promise(Je=>{Me=Je}),null!==(L=this.win)&&void 0!==L&&L.cordova?a.addEventListener("deviceready",()=>{Me("cordova")},{once:!0}):Me("dom")})}is(a){return(0,oe.a)(this.win,a)}platforms(){return(0,oe.g)(this.win)}ready(){return this._readyPromise}get isRTL(){return"rtl"===this.doc.dir}getQueryParam(a){return Ro(this.win.location.href,a)}isLandscape(){return!this.isPortrait()}isPortrait(){var a,g;return null===(g=(a=this.win).matchMedia)||void 0===g?void 0:g.call(a,"(orientation: portrait)").matches}testUserAgent(a){const g=this.win.navigator;return!!(g?.userAgent&&g.userAgent.indexOf(a)>=0)}url(){return this.win.location.href}width(){return this.win.innerWidth}height(){return this.win.innerHeight}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(ze.K0),o.LFG(o.R0b))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Ro=(s,c)=>{c=c.replace(/[[\]\\]/g,"\\$&");const g=new RegExp("[\\?&]"+c+"=([^&#]*)").exec(s);return g?decodeURIComponent(g[1].replace(/\+/g," ")):null},Ur=(s,c,a)=>{c&&c.addEventListener(a,g=>{s.next(g?.detail)})};let zr=(()=>{class s{constructor(a,g,L,Me){this.location=g,this.serializer=L,this.router=Me,this.direction=Gr,this.animated=Yr,this.guessDirection="forward",this.lastNavId=-1,Me&&Me.events.subscribe(Je=>{if(Je instanceof ke.OD){const at=Je.restoredState?Je.restoredState.navigationId:Je.id;this.guessDirection=at{this.pop(),Je()})}navigateForward(a,g={}){return this.setDirection("forward",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}navigateBack(a,g={}){return this.setDirection("back",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}navigateRoot(a,g={}){return this.setDirection("root",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}back(a={animated:!0,animationDirection:"back"}){return this.setDirection("back",a.animated,a.animationDirection,a.animation),this.location.back()}pop(){return(0,N.mG)(this,void 0,void 0,function*(){let a=this.topOutlet;for(;a&&!(yield a.pop());)a=a.parentOutlet})}setDirection(a,g,L,Me){this.direction=a,this.animated=Do(a,g,L),this.animationBuilder=Me}setTopOutlet(a){this.topOutlet=a}consumeTransition(){let g,a="root";const L=this.animationBuilder;return"auto"===this.direction?(a=this.guessDirection,g=this.guessAnimation):(g=this.animated,a=this.direction),this.direction=Gr,this.animated=Yr,this.animationBuilder=void 0,{direction:a,animation:g,animationBuilder:L}}navigate(a,g){if(Array.isArray(a))return this.router.navigate(a,g);{const L=this.serializer.parse(a.toString());return void 0!==g.queryParams&&(L.queryParams=Object.assign({},g.queryParams)),void 0!==g.fragment&&(L.fragment=g.fragment),this.router.navigateByUrl(L,g)}}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(si),o.LFG(ze.Ye),o.LFG(ke.Hx),o.LFG(ke.F0,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Do=(s,c,a)=>{if(!1!==c){if(void 0!==a)return a;if("forward"===s||"back"===s)return s;if("root"===s&&!0===c)return"forward"}},Gr="auto",Yr=void 0;let fr=(()=>{class s{constructor(a,g,L,Me,Je,at,Dt,Zt,bn,Ve,At,yr,Dr){this.parentContexts=a,this.location=g,this.config=Je,this.navCtrl=at,this.componentFactoryResolver=Dt,this.parentOutlet=Dr,this.activated=null,this.activatedView=null,this._activatedRoute=null,this.proxyMap=new WeakMap,this.currentActivatedRoute$=new pe.X(null),this.stackEvents=new o.vpe,this.activateEvents=new o.vpe,this.deactivateEvents=new o.vpe,this.nativeEl=bn.nativeElement,this.name=L||ke.eC,this.tabsPrefix="true"===Me?vr(Ve,yr):void 0,this.stackCtrl=new yo(this.tabsPrefix,this.nativeEl,Ve,at,At,Zt),a.onChildOutletCreated(this.name,this)}set animation(a){this.nativeEl.animation=a}set animated(a){this.nativeEl.animated=a}set swipeGesture(a){this._swipeGesture=a,this.nativeEl.swipeHandler=a?{canStart:()=>this.stackCtrl.canGoBack(1)&&!this.stackCtrl.hasRunningTask(),onStart:()=>this.stackCtrl.startBackTransition(),onEnd:g=>this.stackCtrl.endBackTransition(g)}:void 0}ngOnDestroy(){this.stackCtrl.destroy()}getContext(){return this.parentContexts.getContext(this.name)}ngOnInit(){if(!this.activated){const a=this.getContext();a?.route&&this.activateWith(a.route,a.resolver||null)}new Promise(a=>(0,be.c)(this.nativeEl,a)).then(()=>{void 0===this._swipeGesture&&(this.swipeGesture=this.config.getBoolean("swipeBackEnabled","ios"===this.nativeEl.mode))})}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new Error("Outlet is not activated");return this.activated.instance}get activatedRoute(){if(!this.activated)throw new Error("Outlet is not activated");return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){throw new Error("incompatible reuse strategy")}attach(a,g){throw new Error("incompatible reuse strategy")}deactivate(){if(this.activated){if(this.activatedView){const g=this.getContext();this.activatedView.savedData=new Map(g.children.contexts);const L=this.activatedView.savedData.get("primary");if(L&&g.route&&(L.route=Object.assign({},g.route)),this.activatedView.savedExtras={},g.route){const Me=g.route.snapshot;this.activatedView.savedExtras.queryParams=Me.queryParams,this.activatedView.savedExtras.fragment=Me.fragment}}const a=this.component;this.activatedView=null,this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(a)}}activateWith(a,g){var L;if(this.isActivated)throw new Error("Cannot activate an already activated outlet");this._activatedRoute=a;let Me,Je=this.stackCtrl.getExistingView(a);if(Je){Me=this.activated=Je.ref;const at=Je.savedData;at&&(this.getContext().children.contexts=at),this.updateActivatedRouteProxy(Me.instance,a)}else{const at=a._futureSnapshot;if(null==at.routeConfig.component&&null==this.environmentInjector)return void console.warn('[Ionic Warning]: You must supply an environmentInjector to use standalone components with routing:\n\nIn your component class, add:\n\n import { EnvironmentInjector } from \'@angular/core\';\n constructor(public environmentInjector: EnvironmentInjector) {}\n\nIn your router outlet template, add:\n\n \n\nAlternatively, if you are routing within ion-tabs:\n\n ');const Dt=this.parentContexts.getOrCreateContext(this.name).children,Zt=new pe.X(null),bn=this.createActivatedRouteProxy(Zt,a),Ve=new hr(bn,Dt,this.location.injector),At=null!==(L=at.routeConfig.component)&&void 0!==L?L:at.component;if((g=g||this.componentFactoryResolver)&&Ut(g)){const yr=g.resolveComponentFactory(At);Me=this.activated=this.location.createComponent(yr,this.location.length,Ve)}else Me=this.activated=this.location.createComponent(At,{index:this.location.length,injector:Ve,environmentInjector:g??this.environmentInjector});Zt.next(Me.instance),Je=this.stackCtrl.createView(this.activated,a),this.proxyMap.set(Me.instance,bn),this.currentActivatedRoute$.next({component:Me.instance,activatedRoute:a})}this.activatedView=Je,this.navCtrl.setTopOutlet(this),this.stackCtrl.setActive(Je).then(at=>{this.activateEvents.emit(Me.instance),this.stackEvents.emit(at)})}canGoBack(a=1,g){return this.stackCtrl.canGoBack(a,g)}pop(a=1,g){return this.stackCtrl.pop(a,g)}getLastUrl(a){const g=this.stackCtrl.getLastUrl(a);return g?g.url:void 0}getLastRouteView(a){return this.stackCtrl.getLastUrl(a)}getRootView(a){return this.stackCtrl.getRootUrl(a)}getActiveStackId(){return this.stackCtrl.getActiveStackId()}createActivatedRouteProxy(a,g){const L=new ke.gz;return L._futureSnapshot=g._futureSnapshot,L._routerState=g._routerState,L.snapshot=g.snapshot,L.outlet=g.outlet,L.component=g.component,L._paramMap=this.proxyObservable(a,"paramMap"),L._queryParamMap=this.proxyObservable(a,"queryParamMap"),L.url=this.proxyObservable(a,"url"),L.params=this.proxyObservable(a,"params"),L.queryParams=this.proxyObservable(a,"queryParams"),L.fragment=this.proxyObservable(a,"fragment"),L.data=this.proxyObservable(a,"data"),L}proxyObservable(a,g){return a.pipe((0,ne.h)(L=>!!L),(0,Ee.w)(L=>this.currentActivatedRoute$.pipe((0,ne.h)(Me=>null!==Me&&Me.component===L),(0,Ee.w)(Me=>Me&&Me.activatedRoute[g]),(0,Ce.x)())))}updateActivatedRouteProxy(a,g){const L=this.proxyMap.get(a);if(!L)throw new Error("Could not find activated route proxy for view");L._futureSnapshot=g._futureSnapshot,L._routerState=g._routerState,L.snapshot=g.snapshot,L.outlet=g.outlet,L.component=g.component,this.currentActivatedRoute$.next({component:a,activatedRoute:g})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(ke.y6),o.Y36(o.s_b),o.$8M("name"),o.$8M("tabs"),o.Y36(Go),o.Y36(zr),o.Y36(o._Vd,8),o.Y36(ze.Ye),o.Y36(o.SBq),o.Y36(ke.F0),o.Y36(o.R0b),o.Y36(ke.gz),o.Y36(s,12))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-router-outlet"]],inputs:{animated:"animated",animation:"animation",mode:"mode",swipeGesture:"swipeGesture",environmentInjector:"environmentInjector"},outputs:{stackEvents:"stackEvents",activateEvents:"activate",deactivateEvents:"deactivate"},exportAs:["outlet"]}),s})();class hr{constructor(c,a,g){this.route=c,this.childContexts=a,this.parent=g}get(c,a){return c===ke.gz?this.route:c===ke.y6?this.childContexts:this.parent.get(c,a)}}let nr=(()=>{class s{constructor(a,g,L){this.routerOutlet=a,this.navCtrl=g,this.config=L}onClick(a){var g;const L=this.defaultHref||this.config.get("backButtonDefaultHref");null!==(g=this.routerOutlet)&&void 0!==g&&g.canGoBack()?(this.navCtrl.setDirection("back",void 0,void 0,this.routerAnimation),this.routerOutlet.pop(),a.preventDefault()):null!=L&&(this.navCtrl.navigateBack(L,{animation:this.routerAnimation}),a.preventDefault())}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(fr,8),o.Y36(zr),o.Y36(Go))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-back-button"]],hostBindings:function(a,g){1&a&&o.NdJ("click",function(Me){return g.onClick(Me)})},inputs:{defaultHref:"defaultHref",routerAnimation:"routerAnimation"}}),s})();class kn{constructor(c){this.ctrl=c}create(c){return this.ctrl.create(c||{})}dismiss(c,a,g){return this.ctrl.dismiss(c,a,g)}getTop(){return this.ctrl.getTop()}}let Nr=(()=>{class s extends kn{constructor(){super(T.b)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})(),Zn=(()=>{class s extends kn{constructor(){super(T.a)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})(),Lr=(()=>{class s extends kn{constructor(){super(T.l)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();class Sn{}let Fo=(()=>{class s extends kn{constructor(a,g,L,Me){super(T.m),this.angularDelegate=a,this.resolver=g,this.injector=L,this.environmentInjector=Me}create(a){var g;return super.create(Object.assign(Object.assign({},a),{delegate:this.angularDelegate.create(null!==(g=this.resolver)&&void 0!==g?g:this.environmentInjector,this.injector)}))}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(Or),o.LFG(o._Vd),o.LFG(o.zs3),o.LFG(Sn,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})(),wo=(()=>{class s extends kn{constructor(a,g,L,Me){super(T.c),this.angularDelegate=a,this.resolver=g,this.injector=L,this.environmentInjector=Me}create(a){var g;return super.create(Object.assign(Object.assign({},a),{delegate:this.angularDelegate.create(null!==(g=this.resolver)&&void 0!==g?g:this.environmentInjector,this.injector)}))}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(Or),o.LFG(o._Vd),o.LFG(o.zs3),o.LFG(Sn,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})(),ko=(()=>{class s extends kn{constructor(){super(T.t)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();class rr{shouldDetach(c){return!1}shouldAttach(c){return!1}store(c,a){}retrieve(c){return null}shouldReuseRoute(c,a){if(c.routeConfig!==a.routeConfig)return!1;const g=c.params,L=a.params,Me=Object.keys(g),Je=Object.keys(L);if(Me.length!==Je.length)return!1;for(const at of Me)if(L[at]!==g[at])return!1;return!0}}const ro=(s,c,a)=>()=>{if(c.defaultView&&typeof window<"u"){(s=>{const c=window,a=c.Ionic;a&&a.config&&"Object"!==a.config.constructor.name||(c.Ionic=c.Ionic||{},c.Ionic.config=Object.assign(Object.assign({},c.Ionic.config),s))})(Object.assign(Object.assign({},s),{_zoneGate:Me=>a.run(Me)}));const L="__zone_symbol__addEventListener"in c.body?"__zone_symbol__addEventListener":"addEventListener";return function dt(){var s=[];if(typeof window<"u"){var c=window;(!c.customElements||c.Element&&(!c.Element.prototype.closest||!c.Element.prototype.matches||!c.Element.prototype.remove||!c.Element.prototype.getRootNode))&&s.push(w.e(6748).then(w.t.bind(w,723,23))),("function"!=typeof Object.assign||!Object.entries||!Array.prototype.find||!Array.prototype.includes||!String.prototype.startsWith||!String.prototype.endsWith||c.NodeList&&!c.NodeList.prototype.forEach||!c.fetch||!function(){try{var g=new URL("b","http://a");return g.pathname="c%20d","http://a/c%20d"===g.href&&g.searchParams}catch{return!1}}()||typeof WeakMap>"u")&&s.push(w.e(2214).then(w.t.bind(w,4144,23)))}return Promise.all(s)}().then(()=>((s,c)=>typeof window>"u"?Promise.resolve():(0,te.p)().then(()=>(et(),(0,te.b)(JSON.parse('[["ion-menu_3",[[33,"ion-menu-button",{"color":[513],"disabled":[4],"menu":[1],"autoHide":[4,"auto-hide"],"type":[1],"visible":[32]},[[16,"ionMenuChange","visibilityChanged"],[16,"ionSplitPaneVisible","visibilityChanged"]]],[33,"ion-menu",{"contentId":[513,"content-id"],"menuId":[513,"menu-id"],"type":[1025],"disabled":[1028],"side":[513],"swipeGesture":[4,"swipe-gesture"],"maxEdgeStart":[2,"max-edge-start"],"isPaneVisible":[32],"isEndSide":[32],"isOpen":[64],"isActive":[64],"open":[64],"close":[64],"toggle":[64],"setOpen":[64]},[[16,"ionSplitPaneVisible","onSplitPaneChanged"],[2,"click","onBackdropClick"],[0,"keydown","onKeydown"]]],[1,"ion-menu-toggle",{"menu":[1],"autoHide":[4,"auto-hide"],"visible":[32]},[[16,"ionMenuChange","visibilityChanged"],[16,"ionSplitPaneVisible","visibilityChanged"]]]]],["ion-fab_3",[[33,"ion-fab-button",{"color":[513],"activated":[4],"disabled":[4],"download":[1],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1],"show":[4],"translucent":[4],"type":[1],"size":[1],"closeIcon":[1,"close-icon"]}],[1,"ion-fab",{"horizontal":[1],"vertical":[1],"edge":[4],"activated":[1028],"close":[64],"toggle":[64]}],[1,"ion-fab-list",{"activated":[4],"side":[1]}]]],["ion-refresher_2",[[0,"ion-refresher-content",{"pullingIcon":[1025,"pulling-icon"],"pullingText":[1,"pulling-text"],"refreshingSpinner":[1025,"refreshing-spinner"],"refreshingText":[1,"refreshing-text"]}],[32,"ion-refresher",{"pullMin":[2,"pull-min"],"pullMax":[2,"pull-max"],"closeDuration":[1,"close-duration"],"snapbackDuration":[1,"snapback-duration"],"pullFactor":[2,"pull-factor"],"disabled":[4],"nativeRefresher":[32],"state":[32],"complete":[64],"cancel":[64],"getProgress":[64]}]]],["ion-back-button",[[33,"ion-back-button",{"color":[513],"defaultHref":[1025,"default-href"],"disabled":[516],"icon":[1],"text":[1],"type":[1],"routerAnimation":[16]}]]],["ion-toast",[[33,"ion-toast",{"overlayIndex":[2,"overlay-index"],"color":[513],"enterAnimation":[16],"leaveAnimation":[16],"cssClass":[1,"css-class"],"duration":[2],"header":[1],"message":[1],"keyboardClose":[4,"keyboard-close"],"position":[1],"buttons":[16],"translucent":[4],"animated":[4],"icon":[1],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-card_5",[[33,"ion-card",{"color":[513],"button":[4],"type":[1],"disabled":[4],"download":[1],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1]}],[32,"ion-card-content"],[33,"ion-card-header",{"color":[513],"translucent":[4]}],[33,"ion-card-subtitle",{"color":[513]}],[33,"ion-card-title",{"color":[513]}]]],["ion-item-option_3",[[33,"ion-item-option",{"color":[513],"disabled":[4],"download":[1],"expandable":[4],"href":[1],"rel":[1],"target":[1],"type":[1]}],[32,"ion-item-options",{"side":[1],"fireSwipeEvent":[64]}],[0,"ion-item-sliding",{"disabled":[4],"state":[32],"getOpenAmount":[64],"getSlidingRatio":[64],"open":[64],"close":[64],"closeOpened":[64]}]]],["ion-accordion_2",[[49,"ion-accordion",{"value":[1],"disabled":[4],"readonly":[4],"toggleIcon":[1,"toggle-icon"],"toggleIconSlot":[1,"toggle-icon-slot"],"state":[32],"isNext":[32],"isPrevious":[32]}],[33,"ion-accordion-group",{"animated":[4],"multiple":[4],"value":[1025],"disabled":[4],"readonly":[4],"expand":[1],"requestAccordionToggle":[64],"getAccordions":[64]},[[0,"keydown","onKeydown"]]]]],["ion-breadcrumb_2",[[33,"ion-breadcrumb",{"collapsed":[4],"last":[4],"showCollapsedIndicator":[4,"show-collapsed-indicator"],"color":[1],"active":[4],"disabled":[4],"download":[1],"href":[1],"rel":[1],"separator":[4],"target":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16]}],[33,"ion-breadcrumbs",{"color":[1],"maxItems":[2,"max-items"],"itemsBeforeCollapse":[2,"items-before-collapse"],"itemsAfterCollapse":[2,"items-after-collapse"],"collapsed":[32],"activeChanged":[32]},[[0,"collapsedClick","onCollapsedClick"]]]]],["ion-infinite-scroll_2",[[32,"ion-infinite-scroll-content",{"loadingSpinner":[1025,"loading-spinner"],"loadingText":[1,"loading-text"]}],[0,"ion-infinite-scroll",{"threshold":[1],"disabled":[4],"position":[1],"isLoading":[32],"complete":[64]}]]],["ion-reorder_2",[[33,"ion-reorder",null,[[2,"click","onClick"]]],[0,"ion-reorder-group",{"disabled":[4],"state":[32],"complete":[64]}]]],["ion-segment_2",[[33,"ion-segment-button",{"disabled":[4],"layout":[1],"type":[1],"value":[1],"checked":[32]}],[33,"ion-segment",{"color":[513],"disabled":[4],"scrollable":[4],"swipeGesture":[4,"swipe-gesture"],"value":[1025],"selectOnFocus":[4,"select-on-focus"],"activated":[32]},[[0,"keydown","onKeyDown"]]]]],["ion-tab-bar_2",[[33,"ion-tab-button",{"disabled":[4],"download":[1],"href":[1],"rel":[1],"layout":[1025],"selected":[1028],"tab":[1],"target":[1]},[[8,"ionTabBarChanged","onTabBarChanged"]]],[33,"ion-tab-bar",{"color":[513],"selectedTab":[1,"selected-tab"],"translucent":[4],"keyboardVisible":[32]}]]],["ion-chip",[[1,"ion-chip",{"color":[513],"outline":[4],"disabled":[4]}]]],["ion-datetime-button",[[33,"ion-datetime-button",{"color":[513],"disabled":[516],"datetime":[1],"datetimePresentation":[32],"dateText":[32],"timeText":[32],"datetimeActive":[32],"selectedButton":[32]}]]],["ion-searchbar",[[34,"ion-searchbar",{"color":[513],"animated":[4],"autocomplete":[1],"autocorrect":[1],"cancelButtonIcon":[1,"cancel-button-icon"],"cancelButtonText":[1,"cancel-button-text"],"clearIcon":[1,"clear-icon"],"debounce":[2],"disabled":[4],"inputmode":[1],"enterkeyhint":[1],"placeholder":[1],"searchIcon":[1,"search-icon"],"showCancelButton":[1,"show-cancel-button"],"showClearButton":[1,"show-clear-button"],"spellcheck":[4],"type":[1],"value":[1025],"focused":[32],"noAnimate":[32],"setFocus":[64],"getInputElement":[64]}]]],["ion-toggle",[[33,"ion-toggle",{"color":[513],"name":[1],"checked":[1028],"disabled":[4],"value":[1],"enableOnOffLabels":[4,"enable-on-off-labels"],"activated":[32]}]]],["ion-nav_2",[[1,"ion-nav",{"delegate":[16],"swipeGesture":[1028,"swipe-gesture"],"animated":[4],"animation":[16],"rootParams":[16],"root":[1],"push":[64],"insert":[64],"insertPages":[64],"pop":[64],"popTo":[64],"popToRoot":[64],"removeIndex":[64],"setRoot":[64],"setPages":[64],"setRouteId":[64],"getRouteId":[64],"getActive":[64],"getByIndex":[64],"canGoBack":[64],"getPrevious":[64]}],[0,"ion-nav-link",{"component":[1],"componentProps":[16],"routerDirection":[1,"router-direction"],"routerAnimation":[16]}]]],["ion-input",[[34,"ion-input",{"fireFocusEvents":[4,"fire-focus-events"],"color":[513],"accept":[1],"autocapitalize":[1],"autocomplete":[1],"autocorrect":[1],"autofocus":[4],"clearInput":[4,"clear-input"],"clearOnEdit":[4,"clear-on-edit"],"debounce":[2],"disabled":[4],"enterkeyhint":[1],"inputmode":[1],"max":[8],"maxlength":[2],"min":[8],"minlength":[2],"multiple":[4],"name":[1],"pattern":[1],"placeholder":[1],"readonly":[4],"required":[4],"spellcheck":[4],"step":[1],"size":[2],"type":[1],"value":[1032],"hasFocus":[32],"setFocus":[64],"setBlur":[64],"getInputElement":[64]}]]],["ion-textarea",[[34,"ion-textarea",{"fireFocusEvents":[4,"fire-focus-events"],"color":[513],"autocapitalize":[1],"autofocus":[4],"clearOnEdit":[1028,"clear-on-edit"],"debounce":[2],"disabled":[4],"inputmode":[1],"enterkeyhint":[1],"maxlength":[2],"minlength":[2],"name":[1],"placeholder":[1],"readonly":[4],"required":[4],"spellcheck":[4],"cols":[2],"rows":[2],"wrap":[1],"autoGrow":[516,"auto-grow"],"value":[1025],"hasFocus":[32],"setFocus":[64],"setBlur":[64],"getInputElement":[64]}]]],["ion-backdrop",[[33,"ion-backdrop",{"visible":[4],"tappable":[4],"stopPropagation":[4,"stop-propagation"]},[[2,"click","onMouseDown"]]]]],["ion-loading",[[34,"ion-loading",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"message":[1],"cssClass":[1,"css-class"],"duration":[2],"backdropDismiss":[4,"backdrop-dismiss"],"showBackdrop":[4,"show-backdrop"],"spinner":[1025],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-modal",[[33,"ion-modal",{"hasController":[4,"has-controller"],"overlayIndex":[2,"overlay-index"],"delegate":[16],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"breakpoints":[16],"initialBreakpoint":[2,"initial-breakpoint"],"backdropBreakpoint":[2,"backdrop-breakpoint"],"handle":[4],"handleBehavior":[1,"handle-behavior"],"component":[1],"componentProps":[16],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"showBackdrop":[4,"show-backdrop"],"animated":[4],"swipeToClose":[4,"swipe-to-close"],"presentingElement":[16],"htmlAttributes":[16],"isOpen":[4,"is-open"],"trigger":[1],"keepContentsMounted":[4,"keep-contents-mounted"],"canDismiss":[4,"can-dismiss"],"presented":[32],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64],"setCurrentBreakpoint":[64],"getCurrentBreakpoint":[64]}]]],["ion-route_4",[[0,"ion-route",{"url":[1],"component":[1],"componentProps":[16],"beforeLeave":[16],"beforeEnter":[16]}],[0,"ion-route-redirect",{"from":[1],"to":[1]}],[0,"ion-router",{"root":[1],"useHash":[4,"use-hash"],"canTransition":[64],"push":[64],"back":[64],"printDebug":[64],"navChanged":[64]},[[8,"popstate","onPopState"],[4,"ionBackButton","onBackButton"]]],[1,"ion-router-link",{"color":[513],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1]}]]],["ion-avatar_3",[[33,"ion-avatar"],[33,"ion-badge",{"color":[513]}],[1,"ion-thumbnail"]]],["ion-col_3",[[1,"ion-col",{"offset":[1],"offsetXs":[1,"offset-xs"],"offsetSm":[1,"offset-sm"],"offsetMd":[1,"offset-md"],"offsetLg":[1,"offset-lg"],"offsetXl":[1,"offset-xl"],"pull":[1],"pullXs":[1,"pull-xs"],"pullSm":[1,"pull-sm"],"pullMd":[1,"pull-md"],"pullLg":[1,"pull-lg"],"pullXl":[1,"pull-xl"],"push":[1],"pushXs":[1,"push-xs"],"pushSm":[1,"push-sm"],"pushMd":[1,"push-md"],"pushLg":[1,"push-lg"],"pushXl":[1,"push-xl"],"size":[1],"sizeXs":[1,"size-xs"],"sizeSm":[1,"size-sm"],"sizeMd":[1,"size-md"],"sizeLg":[1,"size-lg"],"sizeXl":[1,"size-xl"]},[[9,"resize","onResize"]]],[1,"ion-grid",{"fixed":[4]}],[1,"ion-row"]]],["ion-slide_2",[[0,"ion-slide"],[36,"ion-slides",{"options":[8],"pager":[4],"scrollbar":[4],"update":[64],"updateAutoHeight":[64],"slideTo":[64],"slideNext":[64],"slidePrev":[64],"getActiveIndex":[64],"getPreviousIndex":[64],"length":[64],"isEnd":[64],"isBeginning":[64],"startAutoplay":[64],"stopAutoplay":[64],"lockSwipeToNext":[64],"lockSwipeToPrev":[64],"lockSwipes":[64],"getSwiper":[64]}]]],["ion-tab_2",[[1,"ion-tab",{"active":[1028],"delegate":[16],"tab":[1],"component":[1],"setActive":[64]}],[1,"ion-tabs",{"useRouter":[1028,"use-router"],"selectedTab":[32],"select":[64],"getTab":[64],"getSelected":[64],"setRouteId":[64],"getRouteId":[64]}]]],["ion-img",[[1,"ion-img",{"alt":[1],"src":[1],"loadSrc":[32],"loadError":[32]}]]],["ion-progress-bar",[[33,"ion-progress-bar",{"type":[1],"reversed":[4],"value":[2],"buffer":[2],"color":[513]}]]],["ion-range",[[33,"ion-range",{"color":[513],"debounce":[2],"name":[1],"dualKnobs":[4,"dual-knobs"],"min":[2],"max":[2],"pin":[4],"pinFormatter":[16],"snaps":[4],"step":[2],"ticks":[4],"activeBarStart":[1026,"active-bar-start"],"disabled":[4],"value":[1026],"ratioA":[32],"ratioB":[32],"pressedKnob":[32]}]]],["ion-split-pane",[[33,"ion-split-pane",{"contentId":[513,"content-id"],"disabled":[4],"when":[8],"visible":[32]}]]],["ion-text",[[1,"ion-text",{"color":[513]}]]],["ion-virtual-scroll",[[0,"ion-virtual-scroll",{"approxItemHeight":[2,"approx-item-height"],"approxHeaderHeight":[2,"approx-header-height"],"approxFooterHeight":[2,"approx-footer-height"],"headerFn":[16],"footerFn":[16],"items":[16],"itemHeight":[16],"headerHeight":[16],"footerHeight":[16],"renderItem":[16],"renderHeader":[16],"renderFooter":[16],"nodeRender":[16],"domRender":[16],"totalHeight":[32],"positionForItem":[64],"checkRange":[64],"checkEnd":[64]},[[9,"resize","onResize"]]]]],["ion-picker-column-internal",[[33,"ion-picker-column-internal",{"items":[16],"value":[1032],"color":[513],"numericInput":[4,"numeric-input"],"isActive":[32],"scrollActiveItemIntoView":[64],"setValue":[64]}]]],["ion-picker-internal",[[33,"ion-picker-internal",null,[[1,"touchstart","preventTouchStartPropagation"]]]]],["ion-radio_2",[[33,"ion-radio",{"color":[513],"name":[1],"disabled":[4],"value":[8],"checked":[32],"buttonTabindex":[32],"setFocus":[64],"setButtonTabindex":[64]}],[0,"ion-radio-group",{"allowEmptySelection":[4,"allow-empty-selection"],"name":[1],"value":[1032]},[[4,"keydown","onKeydown"]]]]],["ion-ripple-effect",[[1,"ion-ripple-effect",{"type":[1],"addRipple":[64]}]]],["ion-button_2",[[33,"ion-button",{"color":[513],"buttonType":[1025,"button-type"],"disabled":[516],"expand":[513],"fill":[1537],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"download":[1],"href":[1],"rel":[1],"shape":[513],"size":[513],"strong":[4],"target":[1],"type":[1],"form":[1]}],[1,"ion-icon",{"mode":[1025],"color":[1],"ios":[1],"md":[1],"flipRtl":[4,"flip-rtl"],"name":[513],"src":[1],"icon":[8],"size":[1],"lazy":[4],"sanitize":[4],"svgContent":[32],"isVisible":[32],"ariaLabel":[32]}]]],["ion-datetime_3",[[33,"ion-datetime",{"color":[1],"name":[1],"disabled":[4],"readonly":[4],"isDateEnabled":[16],"min":[1025],"max":[1025],"presentation":[1],"cancelText":[1,"cancel-text"],"doneText":[1,"done-text"],"clearText":[1,"clear-text"],"yearValues":[8,"year-values"],"monthValues":[8,"month-values"],"dayValues":[8,"day-values"],"hourValues":[8,"hour-values"],"minuteValues":[8,"minute-values"],"locale":[1],"firstDayOfWeek":[2,"first-day-of-week"],"titleSelectedDatesFormatter":[16],"multiple":[4],"value":[1025],"showDefaultTitle":[4,"show-default-title"],"showDefaultButtons":[4,"show-default-buttons"],"showClearButton":[4,"show-clear-button"],"showDefaultTimeLabel":[4,"show-default-time-label"],"hourCycle":[1,"hour-cycle"],"size":[1],"preferWheel":[4,"prefer-wheel"],"showMonthAndYear":[32],"activeParts":[32],"workingParts":[32],"isPresented":[32],"isTimePopoverOpen":[32],"confirm":[64],"reset":[64],"cancel":[64]}],[34,"ion-picker",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"buttons":[16],"columns":[16],"cssClass":[1,"css-class"],"duration":[2],"showBackdrop":[4,"show-backdrop"],"backdropDismiss":[4,"backdrop-dismiss"],"animated":[4],"htmlAttributes":[16],"presented":[32],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64],"getColumn":[64]}],[32,"ion-picker-column",{"col":[16]}]]],["ion-action-sheet",[[34,"ion-action-sheet",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"buttons":[16],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"header":[1],"subHeader":[1,"sub-header"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-alert",[[34,"ion-alert",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"cssClass":[1,"css-class"],"header":[1],"subHeader":[1,"sub-header"],"message":[1],"buttons":[16],"inputs":[1040],"backdropDismiss":[4,"backdrop-dismiss"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]},[[4,"keydown","onKeydown"]]]]],["ion-popover",[[33,"ion-popover",{"hasController":[4,"has-controller"],"delegate":[16],"overlayIndex":[2,"overlay-index"],"enterAnimation":[16],"leaveAnimation":[16],"component":[1],"componentProps":[16],"keyboardClose":[4,"keyboard-close"],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"event":[8],"showBackdrop":[4,"show-backdrop"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"triggerAction":[1,"trigger-action"],"trigger":[1],"size":[1],"dismissOnSelect":[4,"dismiss-on-select"],"reference":[1],"side":[1],"alignment":[1025],"arrow":[4],"isOpen":[4,"is-open"],"keyboardEvents":[4,"keyboard-events"],"keepContentsMounted":[4,"keep-contents-mounted"],"presented":[32],"presentFromTrigger":[64],"present":[64],"dismiss":[64],"getParentPopover":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-checkbox",[[33,"ion-checkbox",{"color":[513],"name":[1],"checked":[1028],"indeterminate":[1028],"disabled":[4],"value":[8]}]]],["ion-select_3",[[33,"ion-select",{"disabled":[4],"cancelText":[1,"cancel-text"],"okText":[1,"ok-text"],"placeholder":[1],"name":[1],"selectedText":[1,"selected-text"],"multiple":[4],"interface":[1],"interfaceOptions":[8,"interface-options"],"compareWith":[1,"compare-with"],"value":[1032],"isExpanded":[32],"open":[64]}],[1,"ion-select-option",{"disabled":[4],"value":[8]}],[34,"ion-select-popover",{"header":[1],"subHeader":[1,"sub-header"],"message":[1],"multiple":[4],"options":[16]},[[0,"ionChange","onSelect"]]]]],["ion-app_8",[[0,"ion-app",{"setFocus":[64]}],[1,"ion-content",{"color":[513],"fullscreen":[4],"forceOverscroll":[1028,"force-overscroll"],"scrollX":[4,"scroll-x"],"scrollY":[4,"scroll-y"],"scrollEvents":[4,"scroll-events"],"getScrollElement":[64],"getBackgroundElement":[64],"scrollToTop":[64],"scrollToBottom":[64],"scrollByPoint":[64],"scrollToPoint":[64]},[[8,"appload","onAppLoad"]]],[36,"ion-footer",{"collapse":[1],"translucent":[4],"keyboardVisible":[32]}],[36,"ion-header",{"collapse":[1],"translucent":[4]}],[1,"ion-router-outlet",{"mode":[1025],"delegate":[16],"animated":[4],"animation":[16],"swipeHandler":[16],"commit":[64],"setRouteId":[64],"getRouteId":[64]}],[33,"ion-title",{"color":[513],"size":[1]}],[33,"ion-toolbar",{"color":[513]},[[0,"ionStyle","childrenStyle"]]],[34,"ion-buttons",{"collapse":[4]}]]],["ion-spinner",[[1,"ion-spinner",{"color":[513],"duration":[2],"name":[1],"paused":[4]}]]],["ion-item_8",[[33,"ion-item-divider",{"color":[513],"sticky":[4]}],[32,"ion-item-group"],[1,"ion-skeleton-text",{"animated":[4]}],[32,"ion-list",{"lines":[1],"inset":[4],"closeSlidingItems":[64]}],[33,"ion-list-header",{"color":[513],"lines":[1]}],[49,"ion-item",{"color":[513],"button":[4],"detail":[4],"detailIcon":[1,"detail-icon"],"disabled":[4],"download":[1],"fill":[1],"shape":[1],"href":[1],"rel":[1],"lines":[1],"counter":[4],"routerAnimation":[16],"routerDirection":[1,"router-direction"],"target":[1],"type":[1],"counterFormatter":[16],"multipleInputs":[32],"focusable":[32],"counterString":[32]},[[0,"ionChange","handleIonChange"],[0,"ionColor","labelColorChanged"],[0,"ionStyle","itemStyle"]]],[34,"ion-label",{"color":[513],"position":[1],"noAnimate":[32]}],[33,"ion-note",{"color":[513]}]]]]'),c))))(0,{exclude:["ion-tabs","ion-tab"],syncQueue:!0,raf:Pt,jmp:Me=>a.runOutsideAngular(Me),ael(Me,Je,at,Dt){Me[L](Je,at,Dt)},rel(Me,Je,at,Dt){Me.removeEventListener(Je,at,Dt)}}))}};let C=(()=>{class s{static forRoot(a){return{ngModule:s,providers:[{provide:Fr,useValue:a},{provide:o.ip1,useFactory:ro,multi:!0,deps:[Fr,ze.K0,o.R0b]}]}}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275mod=o.oAB({type:s}),s.\u0275inj=o.cJS({providers:[Or,Fo,wo],imports:[[ze.ez]]}),s})()},8834:(Qe,Fe,w)=>{"use strict";w.d(Fe,{c:()=>j});var o=w(5730),x=w(3457);let N;const R=P=>P.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),W=P=>{if(void 0===N){const pe=void 0!==P.style.webkitAnimationName;N=void 0===P.style.animationName&&pe?"-webkit-":""}return N},M=(P,K,pe)=>{const ke=K.startsWith("animation")?W(P):"";P.style.setProperty(ke+K,pe)},U=(P,K)=>{const pe=K.startsWith("animation")?W(P):"";P.style.removeProperty(pe+K)},G=[],E=(P=[],K)=>{if(void 0!==K){const pe=Array.isArray(K)?K:[K];return[...P,...pe]}return P},j=P=>{let K,pe,ke,Te,ie,Be,Q,ue,de,ne,Ee,et,Ue,re=[],oe=[],be=[],Ne=!1,T={},k=[],O=[],te={},ce=0,Ae=!1,De=!1,Ce=!0,ze=!1,dt=!0,St=!1;const Ke=P,nn=[],wt=[],Rt=[],Kt=[],pn=[],Pt=[],Ut=[],it=[],Xt=[],kt=[],Vt="function"==typeof AnimationEffect||void 0!==x.w&&"function"==typeof x.w.AnimationEffect,rn="function"==typeof Element&&"function"==typeof Element.prototype.animate&&Vt,en=()=>kt,Et=(X,le)=>((le?.oneTimeCallback?wt:nn).push({c:X,o:le}),Ue),Ct=()=>{if(rn)kt.forEach(X=>{X.cancel()}),kt.length=0;else{const X=Rt.slice();(0,o.r)(()=>{X.forEach(le=>{U(le,"animation-name"),U(le,"animation-duration"),U(le,"animation-timing-function"),U(le,"animation-iteration-count"),U(le,"animation-delay"),U(le,"animation-play-state"),U(le,"animation-fill-mode"),U(le,"animation-direction")})})}},qe=()=>{pn.forEach(X=>{X?.parentNode&&X.parentNode.removeChild(X)}),pn.length=0},He=()=>void 0!==ie?ie:Q?Q.getFill():"both",Ye=()=>void 0!==de?de:void 0!==Be?Be:Q?Q.getDirection():"normal",pt=()=>Ae?"linear":void 0!==ke?ke:Q?Q.getEasing():"linear",vt=()=>De?0:void 0!==ne?ne:void 0!==pe?pe:Q?Q.getDuration():0,Ht=()=>void 0!==Te?Te:Q?Q.getIterations():1,_t=()=>void 0!==Ee?Ee:void 0!==K?K:Q?Q.getDelay():0,sn=()=>{0!==ce&&(ce--,0===ce&&((()=>{Qt(),it.forEach(Re=>Re()),Xt.forEach(Re=>Re());const X=Ce?1:0,le=k,Ie=O,je=te;Rt.forEach(Re=>{const ot=Re.classList;le.forEach(st=>ot.add(st)),Ie.forEach(st=>ot.remove(st));for(const st in je)je.hasOwnProperty(st)&&M(Re,st,je[st])}),nn.forEach(Re=>Re.c(X,Ue)),wt.forEach(Re=>Re.c(X,Ue)),wt.length=0,dt=!0,Ce&&(ze=!0),Ce=!0})(),Q&&Q.animationFinish()))},dn=(X=!0)=>{qe();const le=(P=>(P.forEach(K=>{for(const pe in K)if(K.hasOwnProperty(pe)){const ke=K[pe];if("easing"===pe)K["animation-timing-function"]=ke,delete K[pe];else{const Te=R(pe);Te!==pe&&(K[Te]=ke,delete K[pe])}}}),P))(re);Rt.forEach(Ie=>{if(le.length>0){const je=((P=[])=>P.map(K=>{const pe=K.offset,ke=[];for(const Te in K)K.hasOwnProperty(Te)&&"offset"!==Te&&ke.push(`${Te}: ${K[Te]};`);return`${100*pe}% { ${ke.join(" ")} }`}).join(" "))(le);et=void 0!==P?P:(P=>{let K=G.indexOf(P);return K<0&&(K=G.push(P)-1),`ion-animation-${K}`})(je);const Re=((P,K,pe)=>{var ke;const Te=(P=>{const K=void 0!==P.getRootNode?P.getRootNode():P;return K.head||K})(pe),ie=W(pe),Be=Te.querySelector("#"+P);if(Be)return Be;const re=(null!==(ke=pe.ownerDocument)&&void 0!==ke?ke:document).createElement("style");return re.id=P,re.textContent=`@${ie}keyframes ${P} { ${K} } @${ie}keyframes ${P}-alt { ${K} }`,Te.appendChild(re),re})(et,je,Ie);pn.push(Re),M(Ie,"animation-duration",`${vt()}ms`),M(Ie,"animation-timing-function",pt()),M(Ie,"animation-delay",`${_t()}ms`),M(Ie,"animation-fill-mode",He()),M(Ie,"animation-direction",Ye());const ot=Ht()===1/0?"infinite":Ht().toString();M(Ie,"animation-iteration-count",ot),M(Ie,"animation-play-state","paused"),X&&M(Ie,"animation-name",`${Re.id}-alt`),(0,o.r)(()=>{M(Ie,"animation-name",Re.id||null)})}})},sr=(X=!0)=>{(()=>{Pt.forEach(je=>je()),Ut.forEach(je=>je());const X=oe,le=be,Ie=T;Rt.forEach(je=>{const Re=je.classList;X.forEach(ot=>Re.add(ot)),le.forEach(ot=>Re.remove(ot));for(const ot in Ie)Ie.hasOwnProperty(ot)&&M(je,ot,Ie[ot])})})(),re.length>0&&(rn?(Rt.forEach(X=>{const le=X.animate(re,{id:Ke,delay:_t(),duration:vt(),easing:pt(),iterations:Ht(),fill:He(),direction:Ye()});le.pause(),kt.push(le)}),kt.length>0&&(kt[0].onfinish=()=>{sn()})):dn(X)),Ne=!0},$n=X=>{if(X=Math.min(Math.max(X,0),.9999),rn)kt.forEach(le=>{le.currentTime=le.effect.getComputedTiming().delay+vt()*X,le.pause()});else{const le=`-${vt()*X}ms`;Rt.forEach(Ie=>{re.length>0&&(M(Ie,"animation-delay",le),M(Ie,"animation-play-state","paused"))})}},Tn=X=>{kt.forEach(le=>{le.effect.updateTiming({delay:_t(),duration:vt(),easing:pt(),iterations:Ht(),fill:He(),direction:Ye()})}),void 0!==X&&$n(X)},xn=(X=!0,le)=>{(0,o.r)(()=>{Rt.forEach(Ie=>{M(Ie,"animation-name",et||null),M(Ie,"animation-duration",`${vt()}ms`),M(Ie,"animation-timing-function",pt()),M(Ie,"animation-delay",void 0!==le?`-${le*vt()}ms`:`${_t()}ms`),M(Ie,"animation-fill-mode",He()||null),M(Ie,"animation-direction",Ye()||null);const je=Ht()===1/0?"infinite":Ht().toString();M(Ie,"animation-iteration-count",je),X&&M(Ie,"animation-name",`${et}-alt`),(0,o.r)(()=>{M(Ie,"animation-name",et||null)})})})},vn=(X=!1,le=!0,Ie)=>(X&&Kt.forEach(je=>{je.update(X,le,Ie)}),rn?Tn(Ie):xn(le,Ie),Ue),gr=()=>{Ne&&(rn?kt.forEach(X=>{X.pause()}):Rt.forEach(X=>{M(X,"animation-play-state","paused")}),St=!0)},fn=()=>{ue=void 0,sn()},Qt=()=>{ue&&clearTimeout(ue)},F=X=>new Promise(le=>{X?.sync&&(De=!0,Et(()=>De=!1,{oneTimeCallback:!0})),Ne||sr(),ze&&(rn?($n(0),Tn()):xn(),ze=!1),dt&&(ce=Kt.length+1,dt=!1),Et(()=>le(),{oneTimeCallback:!0}),Kt.forEach(Ie=>{Ie.play()}),rn?(kt.forEach(X=>{X.play()}),(0===re.length||0===Rt.length)&&sn()):(()=>{if(Qt(),(0,o.r)(()=>{Rt.forEach(X=>{re.length>0&&M(X,"animation-play-state","running")})}),0===re.length||0===Rt.length)sn();else{const X=_t()||0,le=vt()||0,Ie=Ht()||1;isFinite(Ie)&&(ue=setTimeout(fn,X+le*Ie+100)),((P,K)=>{let pe;const ke={passive:!0},ie=Be=>{P===Be.target&&(pe&&pe(),Qt(),(0,o.r)(()=>{Rt.forEach(X=>{U(X,"animation-duration"),U(X,"animation-delay"),U(X,"animation-play-state")}),(0,o.r)(sn)}))};P&&(P.addEventListener("webkitAnimationEnd",ie,ke),P.addEventListener("animationend",ie,ke),pe=()=>{P.removeEventListener("webkitAnimationEnd",ie,ke),P.removeEventListener("animationend",ie,ke)})})(Rt[0])}})(),St=!1}),he=(X,le)=>{const Ie=re[0];return void 0===Ie||void 0!==Ie.offset&&0!==Ie.offset?re=[{offset:0,[X]:le},...re]:Ie[X]=le,Ue};return Ue={parentAnimation:Q,elements:Rt,childAnimations:Kt,id:Ke,animationFinish:sn,from:he,to:(X,le)=>{const Ie=re[re.length-1];return void 0===Ie||void 0!==Ie.offset&&1!==Ie.offset?re=[...re,{offset:1,[X]:le}]:Ie[X]=le,Ue},fromTo:(X,le,Ie)=>he(X,le).to(X,Ie),parent:X=>(Q=X,Ue),play:F,pause:()=>(Kt.forEach(X=>{X.pause()}),gr(),Ue),stop:()=>{Kt.forEach(X=>{X.stop()}),Ne&&(Ct(),Ne=!1),Ae=!1,De=!1,dt=!0,de=void 0,ne=void 0,Ee=void 0,ce=0,ze=!1,Ce=!0,St=!1},destroy:X=>(Kt.forEach(le=>{le.destroy(X)}),(X=>{Ct(),X&&qe()})(X),Rt.length=0,Kt.length=0,re.length=0,nn.length=0,wt.length=0,Ne=!1,dt=!0,Ue),keyframes:X=>{const le=re!==X;return re=X,le&&(X=>{rn?en().forEach(le=>{if(le.effect.setKeyframes)le.effect.setKeyframes(X);else{const Ie=new KeyframeEffect(le.effect.target,X,le.effect.getTiming());le.effect=Ie}}):dn()})(re),Ue},addAnimation:X=>{if(null!=X)if(Array.isArray(X))for(const le of X)le.parent(Ue),Kt.push(le);else X.parent(Ue),Kt.push(X);return Ue},addElement:X=>{if(null!=X)if(1===X.nodeType)Rt.push(X);else if(X.length>=0)for(let le=0;le(ie=X,vn(!0),Ue),direction:X=>(Be=X,vn(!0),Ue),iterations:X=>(Te=X,vn(!0),Ue),duration:X=>(!rn&&0===X&&(X=1),pe=X,vn(!0),Ue),easing:X=>(ke=X,vn(!0),Ue),delay:X=>(K=X,vn(!0),Ue),getWebAnimations:en,getKeyframes:()=>re,getFill:He,getDirection:Ye,getDelay:_t,getIterations:Ht,getEasing:pt,getDuration:vt,afterAddRead:X=>(it.push(X),Ue),afterAddWrite:X=>(Xt.push(X),Ue),afterClearStyles:(X=[])=>{for(const le of X)te[le]="";return Ue},afterStyles:(X={})=>(te=X,Ue),afterRemoveClass:X=>(O=E(O,X),Ue),afterAddClass:X=>(k=E(k,X),Ue),beforeAddRead:X=>(Pt.push(X),Ue),beforeAddWrite:X=>(Ut.push(X),Ue),beforeClearStyles:(X=[])=>{for(const le of X)T[le]="";return Ue},beforeStyles:(X={})=>(T=X,Ue),beforeRemoveClass:X=>(be=E(be,X),Ue),beforeAddClass:X=>(oe=E(oe,X),Ue),onFinish:Et,isRunning:()=>0!==ce&&!St,progressStart:(X=!1,le)=>(Kt.forEach(Ie=>{Ie.progressStart(X,le)}),gr(),Ae=X,Ne||sr(),vn(!1,!0,le),Ue),progressStep:X=>(Kt.forEach(le=>{le.progressStep(X)}),$n(X),Ue),progressEnd:(X,le,Ie)=>(Ae=!1,Kt.forEach(je=>{je.progressEnd(X,le,Ie)}),void 0!==Ie&&(ne=Ie),ze=!1,Ce=!0,0===X?(de="reverse"===Ye()?"normal":"reverse","reverse"===de&&(Ce=!1),rn?(vn(),$n(1-le)):(Ee=(1-le)*vt()*-1,vn(!1,!1))):1===X&&(rn?(vn(),$n(le)):(Ee=le*vt()*-1,vn(!1,!1))),void 0!==X&&(Et(()=>{ne=void 0,de=void 0,Ee=void 0},{oneTimeCallback:!0}),Q||F()),Ue)}}},4349:(Qe,Fe,w)=>{"use strict";w.d(Fe,{G:()=>R});class x{constructor(M,U,_,Y,G){this.id=U,this.name=_,this.disableScroll=G,this.priority=1e6*Y+U,this.ctrl=M}canStart(){return!!this.ctrl&&this.ctrl.canStart(this.name)}start(){return!!this.ctrl&&this.ctrl.start(this.name,this.id,this.priority)}capture(){if(!this.ctrl)return!1;const M=this.ctrl.capture(this.name,this.id,this.priority);return M&&this.disableScroll&&this.ctrl.disableScroll(this.id),M}release(){this.ctrl&&(this.ctrl.release(this.id),this.disableScroll&&this.ctrl.enableScroll(this.id))}destroy(){this.release(),this.ctrl=void 0}}class N{constructor(M,U,_,Y){this.id=U,this.disable=_,this.disableScroll=Y,this.ctrl=M}block(){if(this.ctrl){if(this.disable)for(const M of this.disable)this.ctrl.disableGesture(M,this.id);this.disableScroll&&this.ctrl.disableScroll(this.id)}}unblock(){if(this.ctrl){if(this.disable)for(const M of this.disable)this.ctrl.enableGesture(M,this.id);this.disableScroll&&this.ctrl.enableScroll(this.id)}}destroy(){this.unblock(),this.ctrl=void 0}}const ge="backdrop-no-scroll",R=new class o{constructor(){this.gestureId=0,this.requestedStart=new Map,this.disabledGestures=new Map,this.disabledScroll=new Set}createGesture(M){var U;return new x(this,this.newID(),M.name,null!==(U=M.priority)&&void 0!==U?U:0,!!M.disableScroll)}createBlocker(M={}){return new N(this,this.newID(),M.disable,!!M.disableScroll)}start(M,U,_){return this.canStart(M)?(this.requestedStart.set(U,_),!0):(this.requestedStart.delete(U),!1)}capture(M,U,_){if(!this.start(M,U,_))return!1;const Y=this.requestedStart;let G=-1e4;if(Y.forEach(Z=>{G=Math.max(G,Z)}),G===_){this.capturedId=U,Y.clear();const Z=new CustomEvent("ionGestureCaptured",{detail:{gestureName:M}});return document.dispatchEvent(Z),!0}return Y.delete(U),!1}release(M){this.requestedStart.delete(M),this.capturedId===M&&(this.capturedId=void 0)}disableGesture(M,U){let _=this.disabledGestures.get(M);void 0===_&&(_=new Set,this.disabledGestures.set(M,_)),_.add(U)}enableGesture(M,U){const _=this.disabledGestures.get(M);void 0!==_&&_.delete(U)}disableScroll(M){this.disabledScroll.add(M),1===this.disabledScroll.size&&document.body.classList.add(ge)}enableScroll(M){this.disabledScroll.delete(M),0===this.disabledScroll.size&&document.body.classList.remove(ge)}canStart(M){return!(void 0!==this.capturedId||this.isDisabled(M))}isCaptured(){return void 0!==this.capturedId}isScrollDisabled(){return this.disabledScroll.size>0}isDisabled(M){const U=this.disabledGestures.get(M);return!!(U&&U.size>0)}newID(){return this.gestureId++,this.gestureId}}},7593:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{MENU_BACK_BUTTON_PRIORITY:()=>R,OVERLAY_BACK_BUTTON_PRIORITY:()=>ge,blockHardwareBackButton:()=>x,startHardwareBackButton:()=>N});var o=w(5861);const x=()=>{document.addEventListener("backbutton",()=>{})},N=()=>{const W=document;let M=!1;W.addEventListener("backbutton",()=>{if(M)return;let U=0,_=[];const Y=new CustomEvent("ionBackButton",{bubbles:!1,detail:{register(S,B){_.push({priority:S,handler:B,id:U++})}}});W.dispatchEvent(Y);const G=function(){var S=(0,o.Z)(function*(B){try{if(B?.handler){const E=B.handler(Z);null!=E&&(yield E)}}catch(E){console.error(E)}});return function(E){return S.apply(this,arguments)}}(),Z=()=>{if(_.length>0){let S={priority:Number.MIN_SAFE_INTEGER,handler:()=>{},id:-1};_.forEach(B=>{B.priority>=S.priority&&(S=B)}),M=!0,_=_.filter(B=>B.id!==S.id),G(S).then(()=>M=!1)}};Z()})},ge=100,R=99},5730:(Qe,Fe,w)=>{"use strict";w.d(Fe,{a:()=>M,b:()=>U,c:()=>N,d:()=>B,e:()=>E,f:()=>S,g:()=>_,h:()=>Te,i:()=>W,j:()=>ge,k:()=>Z,l:()=>j,m:()=>G,n:()=>P,o:()=>ke,p:()=>pe,q:()=>ie,r:()=>Y,s:()=>Be,t:()=>o,u:()=>K});const o=(re,oe=0)=>new Promise(be=>{x(re,oe,be)}),x=(re,oe=0,be)=>{let Ne,Q;const T={passive:!0},O=()=>{Ne&&Ne()},te=ce=>{(void 0===ce||re===ce.target)&&(O(),be(ce))};return re&&(re.addEventListener("webkitTransitionEnd",te,T),re.addEventListener("transitionend",te,T),Q=setTimeout(te,oe+500),Ne=()=>{Q&&(clearTimeout(Q),Q=void 0),re.removeEventListener("webkitTransitionEnd",te,T),re.removeEventListener("transitionend",te,T)}),O},N=(re,oe)=>{re.componentOnReady?re.componentOnReady().then(be=>oe(be)):Y(()=>oe(re))},ge=(re,oe=[])=>{const be={};return oe.forEach(Ne=>{re.hasAttribute(Ne)&&(null!==re.getAttribute(Ne)&&(be[Ne]=re.getAttribute(Ne)),re.removeAttribute(Ne))}),be},R=["role","aria-activedescendant","aria-atomic","aria-autocomplete","aria-braillelabel","aria-brailleroledescription","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colindextext","aria-colspan","aria-controls","aria-current","aria-describedby","aria-description","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowindextext","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"],W=(re,oe)=>{let be=R;return oe&&oe.length>0&&(be=be.filter(Ne=>!oe.includes(Ne))),ge(re,be)},M=(re,oe,be,Ne)=>{var Q;if(typeof window<"u"){const k=null===(Q=window?.Ionic)||void 0===Q?void 0:Q.config;if(k){const O=k.get("_ael");if(O)return O(re,oe,be,Ne);if(k._ael)return k._ael(re,oe,be,Ne)}}return re.addEventListener(oe,be,Ne)},U=(re,oe,be,Ne)=>{var Q;if(typeof window<"u"){const k=null===(Q=window?.Ionic)||void 0===Q?void 0:Q.config;if(k){const O=k.get("_rel");if(O)return O(re,oe,be,Ne);if(k._rel)return k._rel(re,oe,be,Ne)}}return re.removeEventListener(oe,be,Ne)},_=(re,oe=re)=>re.shadowRoot||oe,Y=re=>"function"==typeof __zone_symbol__requestAnimationFrame?__zone_symbol__requestAnimationFrame(re):"function"==typeof requestAnimationFrame?requestAnimationFrame(re):setTimeout(re),G=re=>!!re.shadowRoot&&!!re.attachShadow,Z=re=>{const oe=re.closest("ion-item");return oe?oe.querySelector("ion-label"):null},S=re=>{if(re.focus(),re.classList.contains("ion-focusable")){const oe=re.closest("ion-app");oe&&oe.setFocus([re])}},B=(re,oe)=>{let be;const Ne=re.getAttribute("aria-labelledby"),Q=re.id;let T=null!==Ne&&""!==Ne.trim()?Ne:oe+"-lbl",k=null!==Ne&&""!==Ne.trim()?document.getElementById(Ne):Z(re);return k?(null===Ne&&(k.id=T),be=k.textContent,k.setAttribute("aria-hidden","true")):""!==Q.trim()&&(k=document.querySelector(`label[for="${Q}"]`),k&&(""!==k.id?T=k.id:k.id=T=`${Q}-lbl`,be=k.textContent)),{label:k,labelId:T,labelText:be}},E=(re,oe,be,Ne,Q)=>{if(re||G(oe)){let T=oe.querySelector("input.aux-input");T||(T=oe.ownerDocument.createElement("input"),T.type="hidden",T.classList.add("aux-input"),oe.appendChild(T)),T.disabled=Q,T.name=be,T.value=Ne||""}},j=(re,oe,be)=>Math.max(re,Math.min(oe,be)),P=(re,oe)=>{if(!re){const be="ASSERT: "+oe;throw console.error(be),new Error(be)}},K=re=>re.timeStamp||Date.now(),pe=re=>{if(re){const oe=re.changedTouches;if(oe&&oe.length>0){const be=oe[0];return{x:be.clientX,y:be.clientY}}if(void 0!==re.pageX)return{x:re.pageX,y:re.pageY}}return{x:0,y:0}},ke=re=>{const oe="rtl"===document.dir;switch(re){case"start":return oe;case"end":return!oe;default:throw new Error(`"${re}" is not a valid value for [side]. Use "start" or "end" instead.`)}},Te=(re,oe)=>{const be=re._original||re;return{_original:re,emit:ie(be.emit.bind(be),oe)}},ie=(re,oe=0)=>{let be;return(...Ne)=>{clearTimeout(be),be=setTimeout(re,oe,...Ne)}},Be=(re,oe)=>{if(re??(re={}),oe??(oe={}),re===oe)return!0;const be=Object.keys(re);if(be.length!==Object.keys(oe).length)return!1;for(const Ne of be)if(!(Ne in oe)||re[Ne]!==oe[Ne])return!1;return!0}},4292:(Qe,Fe,w)=>{"use strict";w.d(Fe,{m:()=>G});var o=w(5861),x=w(7593),N=w(5730),ge=w(9658),R=w(8834);const W=Z=>(0,R.c)().duration(Z?400:300),M=Z=>{let S,B;const E=Z.width+8,j=(0,R.c)(),P=(0,R.c)();Z.isEndSide?(S=E+"px",B="0px"):(S=-E+"px",B="0px"),j.addElement(Z.menuInnerEl).fromTo("transform",`translateX(${S})`,`translateX(${B})`);const pe="ios"===(0,ge.b)(Z),ke=pe?.2:.25;return P.addElement(Z.backdropEl).fromTo("opacity",.01,ke),W(pe).addAnimation([j,P])},U=Z=>{let S,B;const E=(0,ge.b)(Z),j=Z.width;Z.isEndSide?(S=-j+"px",B=j+"px"):(S=j+"px",B=-j+"px");const P=(0,R.c)().addElement(Z.menuInnerEl).fromTo("transform",`translateX(${B})`,"translateX(0px)"),K=(0,R.c)().addElement(Z.contentEl).fromTo("transform","translateX(0px)",`translateX(${S})`),pe=(0,R.c)().addElement(Z.backdropEl).fromTo("opacity",.01,.32);return W("ios"===E).addAnimation([P,K,pe])},_=Z=>{const S=(0,ge.b)(Z),B=Z.width*(Z.isEndSide?-1:1)+"px",E=(0,R.c)().addElement(Z.contentEl).fromTo("transform","translateX(0px)",`translateX(${B})`);return W("ios"===S).addAnimation(E)},G=(()=>{const Z=new Map,S=[],B=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&ne.open()});return function(ne){return ue.apply(this,arguments)}}(),E=function(){var ue=(0,o.Z)(function*(de){const ne=yield void 0!==de?Te(de):ie();return void 0!==ne&&ne.close()});return function(ne){return ue.apply(this,arguments)}}(),j=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&ne.toggle()});return function(ne){return ue.apply(this,arguments)}}(),P=function(){var ue=(0,o.Z)(function*(de,ne){const Ee=yield Te(ne);return Ee&&(Ee.disabled=!de),Ee});return function(ne,Ee){return ue.apply(this,arguments)}}(),K=function(){var ue=(0,o.Z)(function*(de,ne){const Ee=yield Te(ne);return Ee&&(Ee.swipeGesture=de),Ee});return function(ne,Ee){return ue.apply(this,arguments)}}(),pe=function(){var ue=(0,o.Z)(function*(de){if(null!=de){const ne=yield Te(de);return void 0!==ne&&ne.isOpen()}return void 0!==(yield ie())});return function(ne){return ue.apply(this,arguments)}}(),ke=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&!ne.disabled});return function(ne){return ue.apply(this,arguments)}}(),Te=function(){var ue=(0,o.Z)(function*(de){return yield De(),"start"===de||"end"===de?Ae(Ce=>Ce.side===de&&!Ce.disabled)||Ae(Ce=>Ce.side===de):null!=de?Ae(Ee=>Ee.menuId===de):Ae(Ee=>!Ee.disabled)||(S.length>0?S[0].el:void 0)});return function(ne){return ue.apply(this,arguments)}}(),ie=function(){var ue=(0,o.Z)(function*(){return yield De(),O()});return function(){return ue.apply(this,arguments)}}(),Be=function(){var ue=(0,o.Z)(function*(){return yield De(),te()});return function(){return ue.apply(this,arguments)}}(),re=function(){var ue=(0,o.Z)(function*(){return yield De(),ce()});return function(){return ue.apply(this,arguments)}}(),oe=(ue,de)=>{Z.set(ue,de)},Q=ue=>{const de=ue.side;S.filter(ne=>ne.side===de&&ne!==ue).forEach(ne=>ne.disabled=!0)},T=function(){var ue=(0,o.Z)(function*(de,ne,Ee){if(ce())return!1;if(ne){const Ce=yield ie();Ce&&de.el!==Ce&&(yield Ce.setOpen(!1,!1))}return de._setOpen(ne,Ee)});return function(ne,Ee,Ce){return ue.apply(this,arguments)}}(),O=()=>Ae(ue=>ue._isOpen),te=()=>S.map(ue=>ue.el),ce=()=>S.some(ue=>ue.isAnimating),Ae=ue=>{const de=S.find(ue);if(void 0!==de)return de.el},De=()=>Promise.all(Array.from(document.querySelectorAll("ion-menu")).map(ue=>new Promise(de=>(0,N.c)(ue,de))));return oe("reveal",_),oe("push",U),oe("overlay",M),typeof document<"u"&&document.addEventListener("ionBackButton",ue=>{const de=O();de&&ue.detail.register(x.MENU_BACK_BUTTON_PRIORITY,()=>de.close())}),{registerAnimation:oe,get:Te,getMenus:Be,getOpen:ie,isEnabled:ke,swipeGesture:K,isAnimating:re,isOpen:pe,enable:P,toggle:j,close:E,open:B,_getOpenSync:O,_createAnimation:(ue,de)=>{const ne=Z.get(ue);if(!ne)throw new Error("animation not registered");return ne(de)},_register:ue=>{S.indexOf(ue)<0&&(ue.disabled||Q(ue),S.push(ue))},_unregister:ue=>{const de=S.indexOf(ue);de>-1&&S.splice(de,1)},_setOpen:T,_setActiveMenu:Q}})()},3457:(Qe,Fe,w)=>{"use strict";w.d(Fe,{w:()=>o});const o=typeof window<"u"?window:void 0},1308:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>rt,H:()=>Rt,a:()=>Ce,b:()=>cn,c:()=>Cn,e:()=>Er,f:()=>On,g:()=>ze,h:()=>nn,i:()=>zt,j:()=>Ye,k:()=>Dn,p:()=>j,r:()=>er,s:()=>B});var o=w(5861);let N,ge,R,W=!1,M=!1,U=!1,_=!1,Y=!1;const G=typeof window<"u"?window:{},Z=G.document||{head:{}},S={$flags$:0,$resourcesUrl$:"",jmp:F=>F(),raf:F=>requestAnimationFrame(F),ael:(F,q,he,we)=>F.addEventListener(q,he,we),rel:(F,q,he,we)=>F.removeEventListener(q,he,we),ce:(F,q)=>new CustomEvent(F,q)},B=F=>{Object.assign(S,F)},j=F=>Promise.resolve(F),P=(()=>{try{return new CSSStyleSheet,"function"==typeof(new CSSStyleSheet).replaceSync}catch{}return!1})(),K=(F,q,he,we)=>{he&&he.map(([Pe,X,le])=>{const Ie=ke(F,Pe),je=pe(q,le),Re=Te(Pe);S.ael(Ie,X,je,Re),(q.$rmListeners$=q.$rmListeners$||[]).push(()=>S.rel(Ie,X,je,Re))})},pe=(F,q)=>he=>{try{256&F.$flags$?F.$lazyInstance$[q](he):(F.$queuedListeners$=F.$queuedListeners$||[]).push([q,he])}catch(we){Tn(we)}},ke=(F,q)=>4&q?Z:8&q?G:16&q?Z.body:F,Te=F=>0!=(2&F),be="s-id",Ne="sty-id",Q="c-id",k="http://www.w3.org/1999/xlink",ce=new WeakMap,Ae=(F,q,he)=>{let we=tr.get(F);P&&he?(we=we||new CSSStyleSheet,"string"==typeof we?we=q:we.replaceSync(q)):we=q,tr.set(F,we)},De=(F,q,he,we)=>{let Pe=de(q,he);const X=tr.get(Pe);if(F=11===F.nodeType?F:Z,X)if("string"==typeof X){let Ie,le=ce.get(F=F.head||F);le||ce.set(F,le=new Set),le.has(Pe)||(F.host&&(Ie=F.querySelector(`[${Ne}="${Pe}"]`))?Ie.innerHTML=X:(Ie=Z.createElement("style"),Ie.innerHTML=X,F.insertBefore(Ie,F.querySelector("link"))),le&&le.add(Pe))}else F.adoptedStyleSheets.includes(X)||(F.adoptedStyleSheets=[...F.adoptedStyleSheets,X]);return Pe},de=(F,q)=>"sc-"+(q&&32&F.$flags$?F.$tagName$+"-"+q:F.$tagName$),ne=F=>F.replace(/\/\*!@([^\/]+)\*\/[^\{]+\{/g,"$1{"),Ce=F=>Ir.push(F),ze=F=>dn(F).$modeName$,dt={},Ke=F=>"object"==(F=typeof F)||"function"===F,nn=(F,q,...he)=>{let we=null,Pe=null,X=null,le=!1,Ie=!1;const je=[],Re=st=>{for(let Mt=0;Mtst[Mt]).join(" "))}}if("function"==typeof F)return F(null===q?{}:q,je,pn);const ot=wt(F,null);return ot.$attrs$=q,je.length>0&&(ot.$children$=je),ot.$key$=Pe,ot.$name$=X,ot},wt=(F,q)=>({$flags$:0,$tag$:F,$text$:q,$elm$:null,$children$:null,$attrs$:null,$key$:null,$name$:null}),Rt={},pn={forEach:(F,q)=>F.map(Pt).forEach(q),map:(F,q)=>F.map(Pt).map(q).map(Ut)},Pt=F=>({vattrs:F.$attrs$,vchildren:F.$children$,vkey:F.$key$,vname:F.$name$,vtag:F.$tag$,vtext:F.$text$}),Ut=F=>{if("function"==typeof F.vtag){const he=Object.assign({},F.vattrs);return F.vkey&&(he.key=F.vkey),F.vname&&(he.name=F.vname),nn(F.vtag,he,...F.vchildren||[])}const q=wt(F.vtag,F.vtext);return q.$attrs$=F.vattrs,q.$children$=F.vchildren,q.$key$=F.vkey,q.$name$=F.vname,q},it=(F,q,he,we,Pe,X)=>{if(he!==we){let le=$n(F,q),Ie=q.toLowerCase();if("class"===q){const je=F.classList,Re=kt(he),ot=kt(we);je.remove(...Re.filter(st=>st&&!ot.includes(st))),je.add(...ot.filter(st=>st&&!Re.includes(st)))}else if("style"===q){for(const je in he)(!we||null==we[je])&&(je.includes("-")?F.style.removeProperty(je):F.style[je]="");for(const je in we)(!he||we[je]!==he[je])&&(je.includes("-")?F.style.setProperty(je,we[je]):F.style[je]=we[je])}else if("key"!==q)if("ref"===q)we&&we(F);else if(le||"o"!==q[0]||"n"!==q[1]){const je=Ke(we);if((le||je&&null!==we)&&!Pe)try{if(F.tagName.includes("-"))F[q]=we;else{const ot=we??"";"list"===q?le=!1:(null==he||F[q]!=ot)&&(F[q]=ot)}}catch{}let Re=!1;Ie!==(Ie=Ie.replace(/^xlink\:?/,""))&&(q=Ie,Re=!0),null==we||!1===we?(!1!==we||""===F.getAttribute(q))&&(Re?F.removeAttributeNS(k,q):F.removeAttribute(q)):(!le||4&X||Pe)&&!je&&(we=!0===we?"":we,Re?F.setAttributeNS(k,q,we):F.setAttribute(q,we))}else q="-"===q[2]?q.slice(3):$n(G,Ie)?Ie.slice(2):Ie[2]+q.slice(3),he&&S.rel(F,q,he,!1),we&&S.ael(F,q,we,!1)}},Xt=/\s/,kt=F=>F?F.split(Xt):[],Vt=(F,q,he,we)=>{const Pe=11===q.$elm$.nodeType&&q.$elm$.host?q.$elm$.host:q.$elm$,X=F&&F.$attrs$||dt,le=q.$attrs$||dt;for(we in X)we in le||it(Pe,we,X[we],void 0,he,q.$flags$);for(we in le)it(Pe,we,X[we],le[we],he,q.$flags$)},rn=(F,q,he,we)=>{const Pe=q.$children$[he];let le,Ie,je,X=0;if(W||(U=!0,"slot"===Pe.$tag$&&(N&&we.classList.add(N+"-s"),Pe.$flags$|=Pe.$children$?2:1)),null!==Pe.$text$)le=Pe.$elm$=Z.createTextNode(Pe.$text$);else if(1&Pe.$flags$)le=Pe.$elm$=Z.createTextNode("");else{if(_||(_="svg"===Pe.$tag$),le=Pe.$elm$=Z.createElementNS(_?"http://www.w3.org/2000/svg":"http://www.w3.org/1999/xhtml",2&Pe.$flags$?"slot-fb":Pe.$tag$),_&&"foreignObject"===Pe.$tag$&&(_=!1),Vt(null,Pe,_),(F=>null!=F)(N)&&le["s-si"]!==N&&le.classList.add(le["s-si"]=N),Pe.$children$)for(X=0;X{S.$flags$|=1;const he=F.childNodes;for(let we=he.length-1;we>=0;we--){const Pe=he[we];Pe["s-hn"]!==R&&Pe["s-ol"]&&(Et(Pe).insertBefore(Pe,nt(Pe)),Pe["s-ol"].remove(),Pe["s-ol"]=void 0,U=!0),q&&Vn(Pe,q)}S.$flags$&=-2},en=(F,q,he,we,Pe,X)=>{let Ie,le=F["s-cr"]&&F["s-cr"].parentNode||F;for(le.shadowRoot&&le.tagName===R&&(le=le.shadowRoot);Pe<=X;++Pe)we[Pe]&&(Ie=rn(null,he,Pe,F),Ie&&(we[Pe].$elm$=Ie,le.insertBefore(Ie,nt(q))))},gt=(F,q,he,we,Pe)=>{for(;q<=he;++q)(we=F[q])&&(Pe=we.$elm$,Nt(we),M=!0,Pe["s-ol"]?Pe["s-ol"].remove():Vn(Pe,!0),Pe.remove())},ht=(F,q)=>F.$tag$===q.$tag$&&("slot"===F.$tag$?F.$name$===q.$name$:F.$key$===q.$key$),nt=F=>F&&F["s-ol"]||F,Et=F=>(F["s-ol"]?F["s-ol"]:F).parentNode,ut=(F,q)=>{const he=q.$elm$=F.$elm$,we=F.$children$,Pe=q.$children$,X=q.$tag$,le=q.$text$;let Ie;null===le?(_="svg"===X||"foreignObject"!==X&&_,"slot"===X||Vt(F,q,_),null!==we&&null!==Pe?((F,q,he,we)=>{let Bt,An,Pe=0,X=0,le=0,Ie=0,je=q.length-1,Re=q[0],ot=q[je],st=we.length-1,Mt=we[0],Wt=we[st];for(;Pe<=je&&X<=st;)if(null==Re)Re=q[++Pe];else if(null==ot)ot=q[--je];else if(null==Mt)Mt=we[++X];else if(null==Wt)Wt=we[--st];else if(ht(Re,Mt))ut(Re,Mt),Re=q[++Pe],Mt=we[++X];else if(ht(ot,Wt))ut(ot,Wt),ot=q[--je],Wt=we[--st];else if(ht(Re,Wt))("slot"===Re.$tag$||"slot"===Wt.$tag$)&&Vn(Re.$elm$.parentNode,!1),ut(Re,Wt),F.insertBefore(Re.$elm$,ot.$elm$.nextSibling),Re=q[++Pe],Wt=we[--st];else if(ht(ot,Mt))("slot"===Re.$tag$||"slot"===Wt.$tag$)&&Vn(ot.$elm$.parentNode,!1),ut(ot,Mt),F.insertBefore(ot.$elm$,Re.$elm$),ot=q[--je],Mt=we[++X];else{for(le=-1,Ie=Pe;Ie<=je;++Ie)if(q[Ie]&&null!==q[Ie].$key$&&q[Ie].$key$===Mt.$key$){le=Ie;break}le>=0?(An=q[le],An.$tag$!==Mt.$tag$?Bt=rn(q&&q[X],he,le,F):(ut(An,Mt),q[le]=void 0,Bt=An.$elm$),Mt=we[++X]):(Bt=rn(q&&q[X],he,X,F),Mt=we[++X]),Bt&&Et(Re.$elm$).insertBefore(Bt,nt(Re.$elm$))}Pe>je?en(F,null==we[st+1]?null:we[st+1].$elm$,he,we,X,st):X>st&>(q,Pe,je)})(he,we,q,Pe):null!==Pe?(null!==F.$text$&&(he.textContent=""),en(he,null,q,Pe,0,Pe.length-1)):null!==we&>(we,0,we.length-1),_&&"svg"===X&&(_=!1)):(Ie=he["s-cr"])?Ie.parentNode.textContent=le:F.$text$!==le&&(he.data=le)},Ct=F=>{const q=F.childNodes;let he,we,Pe,X,le,Ie;for(we=0,Pe=q.length;we{let q,he,we,Pe,X,le,Ie=0;const je=F.childNodes,Re=je.length;for(;Ie=0;le--)he=we[le],!he["s-cn"]&&!he["s-nr"]&&he["s-hn"]!==q["s-hn"]&&(gn(he,Pe)?(X=qe.find(ot=>ot.$nodeToRelocate$===he),M=!0,he["s-sn"]=he["s-sn"]||Pe,X?X.$slotRefNode$=q:qe.push({$slotRefNode$:q,$nodeToRelocate$:he}),he["s-sr"]&&qe.map(ot=>{gn(ot.$nodeToRelocate$,he["s-sn"])&&(X=qe.find(st=>st.$nodeToRelocate$===he),X&&!ot.$slotRefNode$&&(ot.$slotRefNode$=X.$slotRefNode$))})):qe.some(ot=>ot.$nodeToRelocate$===he)||qe.push({$nodeToRelocate$:he}));1===q.nodeType&&on(q)}},gn=(F,q)=>1===F.nodeType?null===F.getAttribute("slot")&&""===q||F.getAttribute("slot")===q:F["s-sn"]===q||""===q,Nt=F=>{F.$attrs$&&F.$attrs$.ref&&F.$attrs$.ref(null),F.$children$&&F.$children$.map(Nt)},zt=F=>dn(F).$hostElement$,Er=(F,q,he)=>{const we=zt(F);return{emit:Pe=>jn(we,q,{bubbles:!!(4&he),composed:!!(2&he),cancelable:!!(1&he),detail:Pe})}},jn=(F,q,he)=>{const we=S.ce(q,he);return F.dispatchEvent(we),we},Xn=(F,q)=>{q&&!F.$onRenderResolve$&&q["s-p"]&&q["s-p"].push(new Promise(he=>F.$onRenderResolve$=he))},En=(F,q)=>{if(F.$flags$|=16,!(4&F.$flags$))return Xn(F,F.$ancestorComponent$),Cn(()=>xe(F,q));F.$flags$|=512},xe=(F,q)=>{const we=F.$lazyInstance$;let Pe;return q&&(F.$flags$|=256,F.$queuedListeners$&&(F.$queuedListeners$.map(([X,le])=>vt(we,X,le)),F.$queuedListeners$=null),Pe=vt(we,"componentWillLoad")),Pe=Ht(Pe,()=>vt(we,"componentWillRender")),Ht(Pe,()=>se(F,we,q))},se=function(){var F=(0,o.Z)(function*(q,he,we){const Pe=q.$hostElement$,le=Pe["s-rc"];we&&(F=>{const q=F.$cmpMeta$,he=F.$hostElement$,we=q.$flags$,X=De(he.shadowRoot?he.shadowRoot:he.getRootNode(),q,F.$modeName$);10&we&&(he["s-sc"]=X,he.classList.add(X+"-h"),2&we&&he.classList.add(X+"-s"))})(q);ye(q,he),le&&(le.map(je=>je()),Pe["s-rc"]=void 0);{const je=Pe["s-p"],Re=()=>He(q);0===je.length?Re():(Promise.all(je).then(Re),q.$flags$|=4,je.length=0)}});return function(he,we,Pe){return F.apply(this,arguments)}}(),ye=(F,q,he)=>{try{q=q.render&&q.render(),F.$flags$&=-17,F.$flags$|=2,((F,q)=>{const he=F.$hostElement$,we=F.$cmpMeta$,Pe=F.$vnode$||wt(null,null),X=(F=>F&&F.$tag$===Rt)(q)?q:nn(null,null,q);if(R=he.tagName,we.$attrsToReflect$&&(X.$attrs$=X.$attrs$||{},we.$attrsToReflect$.map(([le,Ie])=>X.$attrs$[Ie]=he[le])),X.$tag$=null,X.$flags$|=4,F.$vnode$=X,X.$elm$=Pe.$elm$=he.shadowRoot||he,N=he["s-sc"],ge=he["s-cr"],W=0!=(1&we.$flags$),M=!1,ut(Pe,X),S.$flags$|=1,U){on(X.$elm$);let le,Ie,je,Re,ot,st,Mt=0;for(;Mt{const he=F.$hostElement$,Pe=F.$lazyInstance$,X=F.$ancestorComponent$;vt(Pe,"componentDidRender"),64&F.$flags$?vt(Pe,"componentDidUpdate"):(F.$flags$|=64,_t(he),vt(Pe,"componentDidLoad"),F.$onReadyResolve$(he),X||pt()),F.$onInstanceResolve$(he),F.$onRenderResolve$&&(F.$onRenderResolve$(),F.$onRenderResolve$=void 0),512&F.$flags$&&Un(()=>En(F,!1)),F.$flags$&=-517},Ye=F=>{{const q=dn(F),he=q.$hostElement$.isConnected;return he&&2==(18&q.$flags$)&&En(q,!1),he}},pt=F=>{_t(Z.documentElement),Un(()=>jn(G,"appload",{detail:{namespace:"ionic"}}))},vt=(F,q,he)=>{if(F&&F[q])try{return F[q](he)}catch(we){Tn(we)}},Ht=(F,q)=>F&&F.then?F.then(q):q(),_t=F=>F.classList.add("hydrated"),Ln=(F,q,he,we,Pe,X,le)=>{let Ie,je,Re,ot;if(1===X.nodeType){for(Ie=X.getAttribute(Q),Ie&&(je=Ie.split("."),(je[0]===le||"0"===je[0])&&(Re={$flags$:0,$hostId$:je[0],$nodeId$:je[1],$depth$:je[2],$index$:je[3],$tag$:X.tagName.toLowerCase(),$elm$:X,$attrs$:null,$children$:null,$key$:null,$name$:null,$text$:null},q.push(Re),X.removeAttribute(Q),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re,F=Re,we&&"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$))),ot=X.childNodes.length-1;ot>=0;ot--)Ln(F,q,he,we,Pe,X.childNodes[ot],le);if(X.shadowRoot)for(ot=X.shadowRoot.childNodes.length-1;ot>=0;ot--)Ln(F,q,he,we,Pe,X.shadowRoot.childNodes[ot],le)}else if(8===X.nodeType)je=X.nodeValue.split("."),(je[1]===le||"0"===je[1])&&(Ie=je[0],Re={$flags$:0,$hostId$:je[1],$nodeId$:je[2],$depth$:je[3],$index$:je[4],$elm$:X,$attrs$:null,$children$:null,$key$:null,$name$:null,$tag$:null,$text$:null},"t"===Ie?(Re.$elm$=X.nextSibling,Re.$elm$&&3===Re.$elm$.nodeType&&(Re.$text$=Re.$elm$.textContent,q.push(Re),X.remove(),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re,we&&"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$))):Re.$hostId$===le&&("s"===Ie?(Re.$tag$="slot",X["s-sn"]=je[5]?Re.$name$=je[5]:"",X["s-sr"]=!0,we&&(Re.$elm$=Z.createElement(Re.$tag$),Re.$name$&&Re.$elm$.setAttribute("name",Re.$name$),X.parentNode.insertBefore(Re.$elm$,X),X.remove(),"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$)),he.push(Re),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re):"r"===Ie&&(we?X.remove():(Pe["s-cr"]=X,X["s-cn"]=!0))));else if(F&&"style"===F.$tag$){const st=wt(null,X.textContent);st.$elm$=X,st.$index$="0",F.$children$=[st]}},mn=(F,q)=>{if(1===F.nodeType){let he=0;for(;he{if(q.$members$){F.watchers&&(q.$watchers$=F.watchers);const we=Object.entries(q.$members$),Pe=F.prototype;if(we.map(([X,[le]])=>{31&le||2&he&&32&le?Object.defineProperty(Pe,X,{get(){return((F,q)=>dn(this).$instanceValues$.get(q))(0,X)},set(Ie){((F,q,he,we)=>{const Pe=dn(F),X=Pe.$hostElement$,le=Pe.$instanceValues$.get(q),Ie=Pe.$flags$,je=Pe.$lazyInstance$;he=((F,q)=>null==F||Ke(F)?F:4&q?"false"!==F&&(""===F||!!F):2&q?parseFloat(F):1&q?String(F):F)(he,we.$members$[q][0]);const Re=Number.isNaN(le)&&Number.isNaN(he);if((!(8&Ie)||void 0===le)&&he!==le&&!Re&&(Pe.$instanceValues$.set(q,he),je)){if(we.$watchers$&&128&Ie){const st=we.$watchers$[q];st&&st.map(Mt=>{try{je[Mt](he,le,q)}catch(Wt){Tn(Wt,X)}})}2==(18&Ie)&&En(Pe,!1)}})(this,X,Ie,q)},configurable:!0,enumerable:!0}):1&he&&64&le&&Object.defineProperty(Pe,X,{value(...Ie){const je=dn(this);return je.$onInstancePromise$.then(()=>je.$lazyInstance$[X](...Ie))}})}),1&he){const X=new Map;Pe.attributeChangedCallback=function(le,Ie,je){S.jmp(()=>{const Re=X.get(le);if(this.hasOwnProperty(Re))je=this[Re],delete this[Re];else if(Pe.hasOwnProperty(Re)&&"number"==typeof this[Re]&&this[Re]==je)return;this[Re]=(null!==je||"boolean"!=typeof this[Re])&&je})},F.observedAttributes=we.filter(([le,Ie])=>15&Ie[0]).map(([le,Ie])=>{const je=Ie[1]||le;return X.set(je,le),512&Ie[0]&&q.$attrsToReflect$.push([le,je]),je})}}return F},ee=function(){var F=(0,o.Z)(function*(q,he,we,Pe,X){if(0==(32&he.$flags$)){{if(he.$flags$|=32,(X=vn(we)).then){const Re=()=>{};X=yield X,Re()}X.isProxied||(we.$watchers$=X.watchers,fe(X,we,2),X.isProxied=!0);const je=()=>{};he.$flags$|=8;try{new X(he)}catch(Re){Tn(Re)}he.$flags$&=-9,he.$flags$|=128,je(),Se(he.$lazyInstance$)}if(X.style){let je=X.style;"string"!=typeof je&&(je=je[he.$modeName$=(F=>Ir.map(q=>q(F)).find(q=>!!q))(q)]);const Re=de(we,he.$modeName$);if(!tr.has(Re)){const ot=()=>{};Ae(Re,je,!!(1&we.$flags$)),ot()}}}const le=he.$ancestorComponent$,Ie=()=>En(he,!0);le&&le["s-rc"]?le["s-rc"].push(Ie):Ie()});return function(he,we,Pe,X,le){return F.apply(this,arguments)}}(),Se=F=>{vt(F,"connectedCallback")},yt=F=>{const q=F["s-cr"]=Z.createComment("");q["s-cn"]=!0,F.insertBefore(q,F.firstChild)},cn=(F,q={})=>{const we=[],Pe=q.exclude||[],X=G.customElements,le=Z.head,Ie=le.querySelector("meta[charset]"),je=Z.createElement("style"),Re=[],ot=Z.querySelectorAll(`[${Ne}]`);let st,Mt=!0,Wt=0;for(Object.assign(S,q),S.$resourcesUrl$=new URL(q.resourcesUrl||"./",Z.baseURI).href,S.$flags$|=2;Wt{Bt[1].map(An=>{const Rn={$flags$:An[0],$tagName$:An[1],$members$:An[2],$listeners$:An[3]};Rn.$members$=An[2],Rn.$listeners$=An[3],Rn.$attrsToReflect$=[],Rn.$watchers$={};const Pn=Rn.$tagName$,ur=class extends HTMLElement{constructor(mr){super(mr),sr(mr=this,Rn),1&Rn.$flags$&&mr.attachShadow({mode:"open",delegatesFocus:!!(16&Rn.$flags$)})}connectedCallback(){st&&(clearTimeout(st),st=null),Mt?Re.push(this):S.jmp(()=>(F=>{if(0==(1&S.$flags$)){const q=dn(F),he=q.$cmpMeta$,we=()=>{};if(1&q.$flags$)K(F,q,he.$listeners$),Se(q.$lazyInstance$);else{let Pe;if(q.$flags$|=1,Pe=F.getAttribute(be),Pe){if(1&he.$flags$){const X=De(F.shadowRoot,he,F.getAttribute("s-mode"));F.classList.remove(X+"-h",X+"-s")}((F,q,he,we)=>{const X=F.shadowRoot,le=[],je=X?[]:null,Re=we.$vnode$=wt(q,null);S.$orgLocNodes$||mn(Z.body,S.$orgLocNodes$=new Map),F[be]=he,F.removeAttribute(be),Ln(Re,le,[],je,F,F,he),le.map(ot=>{const st=ot.$hostId$+"."+ot.$nodeId$,Mt=S.$orgLocNodes$.get(st),Wt=ot.$elm$;Mt&&""===Mt["s-en"]&&Mt.parentNode.insertBefore(Wt,Mt.nextSibling),X||(Wt["s-hn"]=q,Mt&&(Wt["s-ol"]=Mt,Wt["s-ol"]["s-nr"]=Wt)),S.$orgLocNodes$.delete(st)}),X&&je.map(ot=>{ot&&X.appendChild(ot)})})(F,he.$tagName$,Pe,q)}Pe||12&he.$flags$&&yt(F);{let X=F;for(;X=X.parentNode||X.host;)if(1===X.nodeType&&X.hasAttribute("s-id")&&X["s-p"]||X["s-p"]){Xn(q,q.$ancestorComponent$=X);break}}he.$members$&&Object.entries(he.$members$).map(([X,[le]])=>{if(31&le&&F.hasOwnProperty(X)){const Ie=F[X];delete F[X],F[X]=Ie}}),Un(()=>ee(F,q,he))}we()}})(this))}disconnectedCallback(){S.jmp(()=>(F=>{if(0==(1&S.$flags$)){const q=dn(this),he=q.$lazyInstance$;q.$rmListeners$&&(q.$rmListeners$.map(we=>we()),q.$rmListeners$=void 0),vt(he,"disconnectedCallback")}})())}componentOnReady(){return dn(this).$onReadyPromise$}};Rn.$lazyBundleId$=Bt[0],!Pe.includes(Pn)&&!X.get(Pn)&&(we.push(Pn),X.define(Pn,fe(ur,Rn,1)))})}),je.innerHTML=we+"{visibility:hidden}.hydrated{visibility:inherit}",je.setAttribute("data-styles",""),le.insertBefore(je,Ie?Ie.nextSibling:le.firstChild),Mt=!1,Re.length?Re.map(Bt=>Bt.connectedCallback()):S.jmp(()=>st=setTimeout(pt,30))},Dn=F=>{const q=new URL(F,S.$resourcesUrl$);return q.origin!==G.location.origin?q.href:q.pathname},sn=new WeakMap,dn=F=>sn.get(F),er=(F,q)=>sn.set(q.$lazyInstance$=F,q),sr=(F,q)=>{const he={$flags$:0,$hostElement$:F,$cmpMeta$:q,$instanceValues$:new Map};return he.$onInstancePromise$=new Promise(we=>he.$onInstanceResolve$=we),he.$onReadyPromise$=new Promise(we=>he.$onReadyResolve$=we),F["s-p"]=[],F["s-rc"]=[],K(F,he,q.$listeners$),sn.set(F,he)},$n=(F,q)=>q in F,Tn=(F,q)=>(0,console.error)(F,q),xn=new Map,vn=(F,q,he)=>{const we=F.$tagName$.replace(/-/g,"_"),Pe=F.$lazyBundleId$,X=xn.get(Pe);return X?X[we]:w(863)(`./${Pe}.entry.js`).then(le=>(xn.set(Pe,le),le[we]),Tn)},tr=new Map,Ir=[],cr=[],gr=[],$t=(F,q)=>he=>{F.push(he),Y||(Y=!0,q&&4&S.$flags$?Un(Qt):S.raf(Qt))},fn=F=>{for(let q=0;q{fn(cr),fn(gr),(Y=cr.length>0)&&S.raf(Qt)},Un=F=>j().then(F),On=$t(cr,!1),Cn=$t(gr,!0),rt={isDev:!1,isBrowser:!0,isServer:!1,isTesting:!1}},697:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>ge,a:()=>R,b:()=>W,c:()=>M,d:()=>U,e:()=>oe,g:()=>Q,l:()=>Be,s:()=>be,t:()=>G});var o=w(5861),x=w(1308),N=w(5730);const ge="ionViewWillEnter",R="ionViewDidEnter",W="ionViewWillLeave",M="ionViewDidLeave",U="ionViewWillUnload",G=T=>new Promise((k,O)=>{(0,x.c)(()=>{Z(T),S(T).then(te=>{te.animation&&te.animation.destroy(),B(T),k(te)},te=>{B(T),O(te)})})}),Z=T=>{const k=T.enteringEl,O=T.leavingEl;Ne(k,O,T.direction),T.showGoBack?k.classList.add("can-go-back"):k.classList.remove("can-go-back"),be(k,!1),k.style.setProperty("pointer-events","none"),O&&(be(O,!1),O.style.setProperty("pointer-events","none"))},S=function(){var T=(0,o.Z)(function*(k){const O=yield E(k);return O&&x.B.isBrowser?j(O,k):P(k)});return function(O){return T.apply(this,arguments)}}(),B=T=>{const k=T.enteringEl,O=T.leavingEl;k.classList.remove("ion-page-invisible"),k.style.removeProperty("pointer-events"),void 0!==O&&(O.classList.remove("ion-page-invisible"),O.style.removeProperty("pointer-events"))},E=function(){var T=(0,o.Z)(function*(k){return k.leavingEl&&k.animated&&0!==k.duration?k.animationBuilder?k.animationBuilder:"ios"===k.mode?(yield Promise.resolve().then(w.bind(w,3953))).iosTransitionAnimation:(yield Promise.resolve().then(w.bind(w,3880))).mdTransitionAnimation:void 0});return function(O){return T.apply(this,arguments)}}(),j=function(){var T=(0,o.Z)(function*(k,O){yield K(O,!0);const te=k(O.baseEl,O);Te(O.enteringEl,O.leavingEl);const ce=yield ke(te,O);return O.progressCallback&&O.progressCallback(void 0),ce&&ie(O.enteringEl,O.leavingEl),{hasCompleted:ce,animation:te}});return function(O,te){return T.apply(this,arguments)}}(),P=function(){var T=(0,o.Z)(function*(k){const O=k.enteringEl,te=k.leavingEl;return yield K(k,!1),Te(O,te),ie(O,te),{hasCompleted:!0}});return function(O){return T.apply(this,arguments)}}(),K=function(){var T=(0,o.Z)(function*(k,O){const ce=(void 0!==k.deepWait?k.deepWait:O)?[oe(k.enteringEl),oe(k.leavingEl)]:[re(k.enteringEl),re(k.leavingEl)];yield Promise.all(ce),yield pe(k.viewIsReady,k.enteringEl)});return function(O,te){return T.apply(this,arguments)}}(),pe=function(){var T=(0,o.Z)(function*(k,O){k&&(yield k(O))});return function(O,te){return T.apply(this,arguments)}}(),ke=(T,k)=>{const O=k.progressCallback,te=new Promise(ce=>{T.onFinish(Ae=>ce(1===Ae))});return O?(T.progressStart(!0),O(T)):T.play(),te},Te=(T,k)=>{Be(k,W),Be(T,ge)},ie=(T,k)=>{Be(T,R),Be(k,M)},Be=(T,k)=>{if(T){const O=new CustomEvent(k,{bubbles:!1,cancelable:!1});T.dispatchEvent(O)}},re=T=>T?new Promise(k=>(0,N.c)(T,k)):Promise.resolve(),oe=function(){var T=(0,o.Z)(function*(k){const O=k;if(O){if(null!=O.componentOnReady){if(null!=(yield O.componentOnReady()))return}else if(null!=O.__registerHost)return void(yield new Promise(ce=>(0,N.r)(ce)));yield Promise.all(Array.from(O.children).map(oe))}});return function(O){return T.apply(this,arguments)}}(),be=(T,k)=>{k?(T.setAttribute("aria-hidden","true"),T.classList.add("ion-page-hidden")):(T.hidden=!1,T.removeAttribute("aria-hidden"),T.classList.remove("ion-page-hidden"))},Ne=(T,k,O)=>{void 0!==T&&(T.style.zIndex="back"===O?"99":"101"),void 0!==k&&(k.style.zIndex="100")},Q=T=>T.classList.contains("ion-page")?T:T.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")||T},1911:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{GESTURE_CONTROLLER:()=>o.G,createGesture:()=>_});var o=w(4349);const x=(S,B,E,j)=>{const P=N(S)?{capture:!!j.capture,passive:!!j.passive}:!!j.capture;let K,pe;return S.__zone_symbol__addEventListener?(K="__zone_symbol__addEventListener",pe="__zone_symbol__removeEventListener"):(K="addEventListener",pe="removeEventListener"),S[K](B,E,P),()=>{S[pe](B,E,P)}},N=S=>{if(void 0===ge)try{const B=Object.defineProperty({},"passive",{get:()=>{ge=!0}});S.addEventListener("optsTest",()=>{},B)}catch{ge=!1}return!!ge};let ge;const M=S=>S instanceof Document?S:S.ownerDocument,_=S=>{let B=!1,E=!1,j=!0,P=!1;const K=Object.assign({disableScroll:!1,direction:"x",gesturePriority:0,passive:!0,maxAngle:40,threshold:10},S),pe=K.canStart,ke=K.onWillStart,Te=K.onStart,ie=K.onEnd,Be=K.notCaptured,re=K.onMove,oe=K.threshold,be=K.passive,Ne=K.blurOnStart,Q={type:"pan",startX:0,startY:0,startTime:0,currentX:0,currentY:0,velocityX:0,velocityY:0,deltaX:0,deltaY:0,currentTime:0,event:void 0,data:void 0},T=((S,B,E)=>{const j=E*(Math.PI/180),P="x"===S,K=Math.cos(j),pe=B*B;let ke=0,Te=0,ie=!1,Be=0;return{start(re,oe){ke=re,Te=oe,Be=0,ie=!0},detect(re,oe){if(!ie)return!1;const be=re-ke,Ne=oe-Te,Q=be*be+Ne*Ne;if(QK?1:k<-K?-1:0,ie=!1,!0},isGesture:()=>0!==Be,getDirection:()=>Be}})(K.direction,K.threshold,K.maxAngle),k=o.G.createGesture({name:S.gestureName,priority:S.gesturePriority,disableScroll:S.disableScroll}),ce=()=>{!B||(P=!1,re&&re(Q))},Ae=()=>!!k.capture()&&(B=!0,j=!1,Q.startX=Q.currentX,Q.startY=Q.currentY,Q.startTime=Q.currentTime,ke?ke(Q).then(ue):ue(),!0),ue=()=>{Ne&&(()=>{if(typeof document<"u"){const ze=document.activeElement;ze?.blur&&ze.blur()}})(),Te&&Te(Q),j=!0},de=()=>{B=!1,E=!1,P=!1,j=!0,k.release()},ne=ze=>{const dt=B,et=j;if(de(),et){if(Y(Q,ze),dt)return void(ie&&ie(Q));Be&&Be(Q)}},Ee=((S,B,E,j,P)=>{let K,pe,ke,Te,ie,Be,re,oe=0;const be=De=>{oe=Date.now()+2e3,B(De)&&(!pe&&E&&(pe=x(S,"touchmove",E,P)),ke||(ke=x(De.target,"touchend",Q,P)),Te||(Te=x(De.target,"touchcancel",Q,P)))},Ne=De=>{oe>Date.now()||!B(De)||(!Be&&E&&(Be=x(M(S),"mousemove",E,P)),re||(re=x(M(S),"mouseup",T,P)))},Q=De=>{k(),j&&j(De)},T=De=>{O(),j&&j(De)},k=()=>{pe&&pe(),ke&&ke(),Te&&Te(),pe=ke=Te=void 0},O=()=>{Be&&Be(),re&&re(),Be=re=void 0},te=()=>{k(),O()},ce=(De=!0)=>{De?(K||(K=x(S,"touchstart",be,P)),ie||(ie=x(S,"mousedown",Ne,P))):(K&&K(),ie&&ie(),K=ie=void 0,te())};return{enable:ce,stop:te,destroy:()=>{ce(!1),j=E=B=void 0}}})(K.el,ze=>{const dt=Z(ze);return!(E||!j||(G(ze,Q),Q.startX=Q.currentX,Q.startY=Q.currentY,Q.startTime=Q.currentTime=dt,Q.velocityX=Q.velocityY=Q.deltaX=Q.deltaY=0,Q.event=ze,pe&&!1===pe(Q))||(k.release(),!k.start()))&&(E=!0,0===oe?Ae():(T.start(Q.startX,Q.startY),!0))},ze=>{B?!P&&j&&(P=!0,Y(Q,ze),requestAnimationFrame(ce)):(Y(Q,ze),T.detect(Q.currentX,Q.currentY)&&(!T.isGesture()||!Ae())&&Ce())},ne,{capture:!1,passive:be}),Ce=()=>{de(),Ee.stop(),Be&&Be(Q)};return{enable(ze=!0){ze||(B&&ne(void 0),de()),Ee.enable(ze)},destroy(){k.destroy(),Ee.destroy()}}},Y=(S,B)=>{if(!B)return;const E=S.currentX,j=S.currentY,P=S.currentTime;G(B,S);const K=S.currentX,pe=S.currentY,Te=(S.currentTime=Z(B))-P;if(Te>0&&Te<100){const Be=(pe-j)/Te;S.velocityX=(K-E)/Te*.7+.3*S.velocityX,S.velocityY=.7*Be+.3*S.velocityY}S.deltaX=K-S.startX,S.deltaY=pe-S.startY,S.event=B},G=(S,B)=>{let E=0,j=0;if(S){const P=S.changedTouches;if(P&&P.length>0){const K=P[0];E=K.clientX,j=K.clientY}else void 0!==S.pageX&&(E=S.pageX,j=S.pageY)}B.currentX=E,B.currentY=j},Z=S=>S.timeStamp||Date.now()},9658:(Qe,Fe,w)=>{"use strict";w.d(Fe,{a:()=>G,b:()=>ce,c:()=>N,g:()=>Y,i:()=>Ae});var o=w(1308);class x{constructor(){this.m=new Map}reset(ue){this.m=new Map(Object.entries(ue))}get(ue,de){const ne=this.m.get(ue);return void 0!==ne?ne:de}getBoolean(ue,de=!1){const ne=this.m.get(ue);return void 0===ne?de:"string"==typeof ne?"true"===ne:!!ne}getNumber(ue,de){const ne=parseFloat(this.m.get(ue));return isNaN(ne)?void 0!==de?de:NaN:ne}set(ue,de){this.m.set(ue,de)}}const N=new x,U="ionic:",_="ionic-persist-config",Y=De=>Z(De),G=(De,ue)=>("string"==typeof De&&(ue=De,De=void 0),Y(De).includes(ue)),Z=(De=window)=>{if(typeof De>"u")return[];De.Ionic=De.Ionic||{};let ue=De.Ionic.platforms;return null==ue&&(ue=De.Ionic.platforms=S(De),ue.forEach(de=>De.document.documentElement.classList.add(`plt-${de}`))),ue},S=De=>{const ue=N.get("platform");return Object.keys(O).filter(de=>{const ne=ue?.[de];return"function"==typeof ne?ne(De):O[de](De)})},E=De=>!!(T(De,/iPad/i)||T(De,/Macintosh/i)&&ie(De)),K=De=>T(De,/android|sink/i),ie=De=>k(De,"(any-pointer:coarse)"),re=De=>oe(De)||be(De),oe=De=>!!(De.cordova||De.phonegap||De.PhoneGap),be=De=>!!De.Capacitor?.isNative,T=(De,ue)=>ue.test(De.navigator.userAgent),k=(De,ue)=>{var de;return null===(de=De.matchMedia)||void 0===de?void 0:de.call(De,ue).matches},O={ipad:E,iphone:De=>T(De,/iPhone/i),ios:De=>T(De,/iPhone|iPod/i)||E(De),android:K,phablet:De=>{const ue=De.innerWidth,de=De.innerHeight,ne=Math.min(ue,de),Ee=Math.max(ue,de);return ne>390&&ne<520&&Ee>620&&Ee<800},tablet:De=>{const ue=De.innerWidth,de=De.innerHeight,ne=Math.min(ue,de),Ee=Math.max(ue,de);return E(De)||(De=>K(De)&&!T(De,/mobile/i))(De)||ne>460&&ne<820&&Ee>780&&Ee<1400},cordova:oe,capacitor:be,electron:De=>T(De,/electron/i),pwa:De=>{var ue;return!(!(null===(ue=De.matchMedia)||void 0===ue?void 0:ue.call(De,"(display-mode: standalone)").matches)&&!De.navigator.standalone)},mobile:ie,mobileweb:De=>ie(De)&&!re(De),desktop:De=>!ie(De),hybrid:re};let te;const ce=De=>De&&(0,o.g)(De)||te,Ae=(De={})=>{if(typeof window>"u")return;const ue=window.document,de=window,ne=de.Ionic=de.Ionic||{},Ee={};De._ael&&(Ee.ael=De._ael),De._rel&&(Ee.rel=De._rel),De._ce&&(Ee.ce=De._ce),(0,o.s)(Ee);const Ce=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(De=>{try{const ue=De.sessionStorage.getItem(_);return null!==ue?JSON.parse(ue):{}}catch{return{}}})(de)),{persistConfig:!1}),ne.config),(De=>{const ue={};return De.location.search.slice(1).split("&").map(de=>de.split("=")).map(([de,ne])=>[decodeURIComponent(de),decodeURIComponent(ne)]).filter(([de])=>((De,ue)=>De.substr(0,ue.length)===ue)(de,U)).map(([de,ne])=>[de.slice(U.length),ne]).forEach(([de,ne])=>{ue[de]=ne}),ue})(de)),De);N.reset(Ce),N.getBoolean("persistConfig")&&((De,ue)=>{try{De.sessionStorage.setItem(_,JSON.stringify(ue))}catch{return}})(de,Ce),Z(de),ne.config=N,ne.mode=te=N.get("mode",ue.documentElement.getAttribute("mode")||(G(de,"ios")?"ios":"md")),N.set("mode",te),ue.documentElement.setAttribute("mode",te),ue.documentElement.classList.add(te),N.getBoolean("_testing")&&N.set("animated",!1);const ze=et=>{var Ue;return null===(Ue=et.tagName)||void 0===Ue?void 0:Ue.startsWith("ION-")},dt=et=>["ios","md"].includes(et);(0,o.a)(et=>{for(;et;){const Ue=et.mode||et.getAttribute("mode");if(Ue){if(dt(Ue))return Ue;ze(et)&&console.warn('Invalid ionic mode: "'+Ue+'", expected: "ios" or "md"')}et=et.parentElement}return te})}},3953:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{iosTransitionAnimation:()=>S,shadow:()=>M});var o=w(8834),x=w(697);w(3457),w(1308);const W=B=>document.querySelector(`${B}.ion-cloned-element`),M=B=>B.shadowRoot||B,U=B=>{const E="ION-TABS"===B.tagName?B:B.querySelector("ion-tabs"),j="ion-content ion-header:not(.header-collapse-condense-inactive) ion-title.title-large";if(null!=E){const P=E.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");return null!=P?P.querySelector(j):null}return B.querySelector(j)},_=(B,E)=>{const j="ION-TABS"===B.tagName?B:B.querySelector("ion-tabs");let P=[];if(null!=j){const K=j.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");null!=K&&(P=K.querySelectorAll("ion-buttons"))}else P=B.querySelectorAll("ion-buttons");for(const K of P){const pe=K.closest("ion-header"),ke=pe&&!pe.classList.contains("header-collapse-condense-inactive"),Te=K.querySelector("ion-back-button"),ie=K.classList.contains("buttons-collapse"),Be="start"===K.slot||""===K.slot;if(null!==Te&&Be&&(ie&&ke&&E||!ie))return Te}return null},G=(B,E,j,P,K,pe)=>{const ke=E?`calc(100% - ${pe.right+4}px)`:pe.left-4+"px",Te=E?"7px":"-7px",ie=E?"-4px":"4px",Be=E?"-4px":"4px",re=E?"right":"left",oe=E?"left":"right",Q=j?[{offset:0,opacity:1,transform:`translate3d(${ie}, ${pe.top-46}px, 0) scale(1)`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${Te}, ${K.top-40}px, 0) scale(2.1)`}]:[{offset:0,opacity:0,transform:`translate3d(${Te}, ${K.top-40}px, 0) scale(2.1)`},{offset:1,opacity:1,transform:`translate3d(${ie}, ${pe.top-46}px, 0) scale(1)`}],O=j?[{offset:0,opacity:1,transform:`translate3d(${Be}, ${pe.top-46}px, 0) scale(1)`},{offset:.2,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`},{offset:1,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`}]:[{offset:0,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`},{offset:1,opacity:1,transform:`translate3d(${Be}, ${pe.top-46}px, 0) scale(1)`}],te=(0,o.c)(),ce=(0,o.c)(),Ae=W("ion-back-button"),De=M(Ae).querySelector(".button-text"),ue=M(Ae).querySelector("ion-icon");Ae.text=P.text,Ae.mode=P.mode,Ae.icon=P.icon,Ae.color=P.color,Ae.disabled=P.disabled,Ae.style.setProperty("display","block"),Ae.style.setProperty("position","fixed"),ce.addElement(ue),te.addElement(De),te.beforeStyles({"transform-origin":`${re} center`}).beforeAddWrite(()=>{P.style.setProperty("display","none"),Ae.style.setProperty(re,ke)}).afterAddWrite(()=>{P.style.setProperty("display",""),Ae.style.setProperty("display","none"),Ae.style.removeProperty(re)}).keyframes(Q),ce.beforeStyles({"transform-origin":`${oe} center`}).keyframes(O),B.addAnimation([te,ce])},Z=(B,E,j,P,K,pe)=>{const ke=E?`calc(100% - ${K.right}px)`:`${K.left}px`,Te=E?"-18px":"18px",ie=E?"right":"left",oe=j?[{offset:0,opacity:0,transform:`translate3d(${Te}, ${pe.top-4}px, 0) scale(0.49)`},{offset:.1,opacity:0},{offset:1,opacity:1,transform:`translate3d(0, ${K.top-2}px, 0) scale(1)`}]:[{offset:0,opacity:.99,transform:`translate3d(0, ${K.top-2}px, 0) scale(1)`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${Te}, ${pe.top-4}px, 0) scale(0.5)`}],be=W("ion-title"),Ne=(0,o.c)();be.innerText=P.innerText,be.size=P.size,be.color=P.color,Ne.addElement(be),Ne.beforeStyles({"transform-origin":`${ie} center`,height:"46px",display:"",position:"relative",[ie]:ke}).beforeAddWrite(()=>{P.style.setProperty("display","none")}).afterAddWrite(()=>{P.style.setProperty("display",""),be.style.setProperty("display","none")}).keyframes(oe),B.addAnimation(Ne)},S=(B,E)=>{var j;try{const P="cubic-bezier(0.32,0.72,0,1)",K="opacity",pe="transform",ke="0%",ie="rtl"===B.ownerDocument.dir,Be=ie?"-99.5%":"99.5%",re=ie?"33%":"-33%",oe=E.enteringEl,be=E.leavingEl,Ne="back"===E.direction,Q=oe.querySelector(":scope > ion-content"),T=oe.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *"),k=oe.querySelectorAll(":scope > ion-header > ion-toolbar"),O=(0,o.c)(),te=(0,o.c)();if(O.addElement(oe).duration((null!==(j=E.duration)&&void 0!==j?j:0)||540).easing(E.easing||P).fill("both").beforeRemoveClass("ion-page-invisible"),be&&null!=B){const ue=(0,o.c)();ue.addElement(B),O.addAnimation(ue)}if(Q||0!==k.length||0!==T.length?(te.addElement(Q),te.addElement(T)):te.addElement(oe.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),O.addAnimation(te),Ne?te.beforeClearStyles([K]).fromTo("transform",`translateX(${re})`,`translateX(${ke})`).fromTo(K,.8,1):te.beforeClearStyles([K]).fromTo("transform",`translateX(${Be})`,`translateX(${ke})`),Q){const ue=M(Q).querySelector(".transition-effect");if(ue){const de=ue.querySelector(".transition-cover"),ne=ue.querySelector(".transition-shadow"),Ee=(0,o.c)(),Ce=(0,o.c)(),ze=(0,o.c)();Ee.addElement(ue).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),Ce.addElement(de).beforeClearStyles([K]).fromTo(K,0,.1),ze.addElement(ne).beforeClearStyles([K]).fromTo(K,.03,.7),Ee.addAnimation([Ce,ze]),te.addAnimation([Ee])}}const ce=oe.querySelector("ion-header.header-collapse-condense"),{forward:Ae,backward:De}=((B,E,j,P,K)=>{const pe=_(P,j),ke=U(K),Te=U(P),ie=_(K,j),Be=null!==pe&&null!==ke&&!j,re=null!==Te&&null!==ie&&j;if(Be){const oe=ke.getBoundingClientRect(),be=pe.getBoundingClientRect();Z(B,E,j,ke,oe,be),G(B,E,j,pe,oe,be)}else if(re){const oe=Te.getBoundingClientRect(),be=ie.getBoundingClientRect();Z(B,E,j,Te,oe,be),G(B,E,j,ie,oe,be)}return{forward:Be,backward:re}})(O,ie,Ne,oe,be);if(k.forEach(ue=>{const de=(0,o.c)();de.addElement(ue),O.addAnimation(de);const ne=(0,o.c)();ne.addElement(ue.querySelector("ion-title"));const Ee=(0,o.c)(),Ce=Array.from(ue.querySelectorAll("ion-buttons,[menuToggle]")),ze=ue.closest("ion-header"),dt=ze?.classList.contains("header-collapse-condense-inactive");let et;et=Ce.filter(Ne?wt=>{const Rt=wt.classList.contains("buttons-collapse");return Rt&&!dt||!Rt}:wt=>!wt.classList.contains("buttons-collapse")),Ee.addElement(et);const Ue=(0,o.c)();Ue.addElement(ue.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])"));const St=(0,o.c)();St.addElement(M(ue).querySelector(".toolbar-background"));const Ke=(0,o.c)(),nn=ue.querySelector("ion-back-button");if(nn&&Ke.addElement(nn),de.addAnimation([ne,Ee,Ue,St,Ke]),Ee.fromTo(K,.01,1),Ue.fromTo(K,.01,1),Ne)dt||ne.fromTo("transform",`translateX(${re})`,`translateX(${ke})`).fromTo(K,.01,1),Ue.fromTo("transform",`translateX(${re})`,`translateX(${ke})`),Ke.fromTo(K,.01,1);else if(ce||ne.fromTo("transform",`translateX(${Be})`,`translateX(${ke})`).fromTo(K,.01,1),Ue.fromTo("transform",`translateX(${Be})`,`translateX(${ke})`),St.beforeClearStyles([K,"transform"]),ze?.translucent?St.fromTo("transform",ie?"translateX(-100%)":"translateX(100%)","translateX(0px)"):St.fromTo(K,.01,"var(--opacity)"),Ae||Ke.fromTo(K,.01,1),nn&&!Ae){const Rt=(0,o.c)();Rt.addElement(M(nn).querySelector(".button-text")).fromTo("transform",ie?"translateX(-100px)":"translateX(100px)","translateX(0px)"),de.addAnimation(Rt)}}),be){const ue=(0,o.c)(),de=be.querySelector(":scope > ion-content"),ne=be.querySelectorAll(":scope > ion-header > ion-toolbar"),Ee=be.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *");if(de||0!==ne.length||0!==Ee.length?(ue.addElement(de),ue.addElement(Ee)):ue.addElement(be.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),O.addAnimation(ue),Ne){ue.beforeClearStyles([K]).fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)");const Ce=(0,x.g)(be);O.afterAddWrite(()=>{"normal"===O.getDirection()&&Ce.style.setProperty("display","none")})}else ue.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).fromTo(K,1,.8);if(de){const Ce=M(de).querySelector(".transition-effect");if(Ce){const ze=Ce.querySelector(".transition-cover"),dt=Ce.querySelector(".transition-shadow"),et=(0,o.c)(),Ue=(0,o.c)(),St=(0,o.c)();et.addElement(Ce).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),Ue.addElement(ze).beforeClearStyles([K]).fromTo(K,.1,0),St.addElement(dt).beforeClearStyles([K]).fromTo(K,.7,.03),et.addAnimation([Ue,St]),ue.addAnimation([et])}}ne.forEach(Ce=>{const ze=(0,o.c)();ze.addElement(Ce);const dt=(0,o.c)();dt.addElement(Ce.querySelector("ion-title"));const et=(0,o.c)(),Ue=Ce.querySelectorAll("ion-buttons,[menuToggle]"),St=Ce.closest("ion-header"),Ke=St?.classList.contains("header-collapse-condense-inactive"),nn=Array.from(Ue).filter(Ut=>{const it=Ut.classList.contains("buttons-collapse");return it&&!Ke||!it});et.addElement(nn);const wt=(0,o.c)(),Rt=Ce.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])");Rt.length>0&&wt.addElement(Rt);const Kt=(0,o.c)();Kt.addElement(M(Ce).querySelector(".toolbar-background"));const pn=(0,o.c)(),Pt=Ce.querySelector("ion-back-button");if(Pt&&pn.addElement(Pt),ze.addAnimation([dt,et,wt,pn,Kt]),O.addAnimation(ze),pn.fromTo(K,.99,0),et.fromTo(K,.99,0),wt.fromTo(K,.99,0),Ne){if(Ke||dt.fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)").fromTo(K,.99,0),wt.fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)"),Kt.beforeClearStyles([K,"transform"]),St?.translucent?Kt.fromTo("transform","translateX(0px)",ie?"translateX(-100%)":"translateX(100%)"):Kt.fromTo(K,"var(--opacity)",0),Pt&&!De){const it=(0,o.c)();it.addElement(M(Pt).querySelector(".button-text")).fromTo("transform",`translateX(${ke})`,`translateX(${(ie?-124:124)+"px"})`),ze.addAnimation(it)}}else Ke||dt.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).fromTo(K,.99,0).afterClearStyles([pe,K]),wt.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).afterClearStyles([pe,K]),pn.afterClearStyles([K]),dt.afterClearStyles([K]),et.afterClearStyles([K])})}return O}catch(P){throw P}}},3880:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{mdTransitionAnimation:()=>R});var o=w(8834),x=w(697);w(3457),w(1308);const R=(W,M)=>{var U,_,Y;const S="back"===M.direction,E=M.leavingEl,j=(0,x.g)(M.enteringEl),P=j.querySelector("ion-toolbar"),K=(0,o.c)();if(K.addElement(j).fill("both").beforeRemoveClass("ion-page-invisible"),S?K.duration((null!==(U=M.duration)&&void 0!==U?U:0)||200).easing("cubic-bezier(0.47,0,0.745,0.715)"):K.duration((null!==(_=M.duration)&&void 0!==_?_:0)||280).easing("cubic-bezier(0.36,0.66,0.04,1)").fromTo("transform","translateY(40px)","translateY(0px)").fromTo("opacity",.01,1),P){const pe=(0,o.c)();pe.addElement(P),K.addAnimation(pe)}if(E&&S){K.duration((null!==(Y=M.duration)&&void 0!==Y?Y:0)||200).easing("cubic-bezier(0.47,0,0.745,0.715)");const pe=(0,o.c)();pe.addElement((0,x.g)(E)).onFinish(ke=>{1===ke&&pe.elements.length>0&&pe.elements[0].style.setProperty("display","none")}).fromTo("transform","translateY(0px)","translateY(40px)").fromTo("opacity",1,0),K.addAnimation(pe)}return K}},4414:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>de,a:()=>U,b:()=>_,c:()=>S,d:()=>Ne,e:()=>E,f:()=>T,g:()=>te,h:()=>W,i:()=>Ae,j:()=>K,k:()=>oe,l:()=>Y,m:()=>G,s:()=>ue,t:()=>B});var o=w(5861),x=w(9658),N=w(7593),ge=w(5730);let R=0;const W=new WeakMap,M=ne=>({create:Ee=>j(ne,Ee),dismiss:(Ee,Ce,ze)=>Be(document,Ee,Ce,ne,ze),getTop:()=>(0,o.Z)(function*(){return oe(document,ne)})()}),U=M("ion-alert"),_=M("ion-action-sheet"),Y=M("ion-loading"),G=M("ion-modal"),S=M("ion-popover"),B=M("ion-toast"),E=ne=>{typeof document<"u"&&ie(document);const Ee=R++;ne.overlayIndex=Ee,ne.hasAttribute("id")||(ne.id=`ion-overlay-${Ee}`)},j=(ne,Ee)=>typeof window<"u"&&typeof window.customElements<"u"?window.customElements.whenDefined(ne).then(()=>{const Ce=document.createElement(ne);return Ce.classList.add("overlay-hidden"),Object.assign(Ce,Object.assign(Object.assign({},Ee),{hasController:!0})),k(document).appendChild(Ce),new Promise(ze=>(0,ge.c)(Ce,ze))}):Promise.resolve(),P='[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])',K=(ne,Ee)=>{let Ce=ne.querySelector(P);const ze=Ce?.shadowRoot;ze&&(Ce=ze.querySelector(P)||Ce),Ce?(0,ge.f)(Ce):Ee.focus()},ke=(ne,Ee)=>{const Ce=Array.from(ne.querySelectorAll(P));let ze=Ce.length>0?Ce[Ce.length-1]:null;const dt=ze?.shadowRoot;dt&&(ze=dt.querySelector(P)||ze),ze?ze.focus():Ee.focus()},ie=ne=>{0===R&&(R=1,ne.addEventListener("focus",Ee=>{((ne,Ee)=>{const Ce=oe(Ee,"ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover"),ze=ne.target;Ce&&ze&&!Ce.classList.contains("ion-disable-focus-trap")&&(Ce.shadowRoot?(()=>{if(Ce.contains(ze))Ce.lastFocus=ze;else{const Ue=Ce.lastFocus;K(Ce,Ce),Ue===Ee.activeElement&&ke(Ce,Ce),Ce.lastFocus=Ee.activeElement}})():(()=>{if(Ce===ze)Ce.lastFocus=void 0;else{const Ue=(0,ge.g)(Ce);if(!Ue.contains(ze))return;const St=Ue.querySelector(".ion-overlay-wrapper");if(!St)return;if(St.contains(ze))Ce.lastFocus=ze;else{const Ke=Ce.lastFocus;K(St,Ce),Ke===Ee.activeElement&&ke(St,Ce),Ce.lastFocus=Ee.activeElement}}})())})(Ee,ne)},!0),ne.addEventListener("ionBackButton",Ee=>{const Ce=oe(ne);Ce?.backdropDismiss&&Ee.detail.register(N.OVERLAY_BACK_BUTTON_PRIORITY,()=>Ce.dismiss(void 0,de))}),ne.addEventListener("keyup",Ee=>{if("Escape"===Ee.key){const Ce=oe(ne);Ce?.backdropDismiss&&Ce.dismiss(void 0,de)}}))},Be=(ne,Ee,Ce,ze,dt)=>{const et=oe(ne,ze,dt);return et?et.dismiss(Ee,Ce):Promise.reject("overlay does not exist")},oe=(ne,Ee,Ce)=>{const ze=((ne,Ee)=>(void 0===Ee&&(Ee="ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover,ion-toast"),Array.from(ne.querySelectorAll(Ee)).filter(Ce=>Ce.overlayIndex>0)))(ne,Ee).filter(dt=>!(ne=>ne.classList.contains("overlay-hidden"))(dt));return void 0===Ce?ze[ze.length-1]:ze.find(dt=>dt.id===Ce)},be=(ne=!1)=>{const Ce=k(document).querySelector("ion-router-outlet, ion-nav, #ion-view-container-root");!Ce||(ne?Ce.setAttribute("aria-hidden","true"):Ce.removeAttribute("aria-hidden"))},Ne=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt,et){var Ue,St;if(Ee.presented)return;be(!0),Ee.presented=!0,Ee.willPresent.emit(),null===(Ue=Ee.willPresentShorthand)||void 0===Ue||Ue.emit();const Ke=(0,x.b)(Ee),nn=Ee.enterAnimation?Ee.enterAnimation:x.c.get(Ce,"ios"===Ke?ze:dt);(yield O(Ee,nn,Ee.el,et))&&(Ee.didPresent.emit(),null===(St=Ee.didPresentShorthand)||void 0===St||St.emit()),"ION-TOAST"!==Ee.el.tagName&&Q(Ee.el),Ee.keyboardClose&&(null===document.activeElement||!Ee.el.contains(document.activeElement))&&Ee.el.focus()});return function(Ce,ze,dt,et,Ue){return ne.apply(this,arguments)}}(),Q=function(){var ne=(0,o.Z)(function*(Ee){let Ce=document.activeElement;if(!Ce)return;const ze=Ce?.shadowRoot;ze&&(Ce=ze.querySelector(P)||Ce),yield Ee.onDidDismiss(),Ce.focus()});return function(Ce){return ne.apply(this,arguments)}}(),T=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt,et,Ue,St){var Ke,nn;if(!Ee.presented)return!1;be(!1),Ee.presented=!1;try{Ee.el.style.setProperty("pointer-events","none"),Ee.willDismiss.emit({data:Ce,role:ze}),null===(Ke=Ee.willDismissShorthand)||void 0===Ke||Ke.emit({data:Ce,role:ze});const wt=(0,x.b)(Ee),Rt=Ee.leaveAnimation?Ee.leaveAnimation:x.c.get(dt,"ios"===wt?et:Ue);"gesture"!==ze&&(yield O(Ee,Rt,Ee.el,St)),Ee.didDismiss.emit({data:Ce,role:ze}),null===(nn=Ee.didDismissShorthand)||void 0===nn||nn.emit({data:Ce,role:ze}),W.delete(Ee),Ee.el.classList.add("overlay-hidden"),Ee.el.style.removeProperty("pointer-events")}catch(wt){console.error(wt)}return Ee.el.remove(),!0});return function(Ce,ze,dt,et,Ue,St,Ke){return ne.apply(this,arguments)}}(),k=ne=>ne.querySelector("ion-app")||ne.body,O=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt){ze.classList.remove("overlay-hidden");const Ue=Ce(Ee.el,dt);(!Ee.animated||!x.c.getBoolean("animated",!0))&&Ue.duration(0),Ee.keyboardClose&&Ue.beforeAddWrite(()=>{const Ke=ze.ownerDocument.activeElement;Ke?.matches("input,ion-input, ion-textarea")&&Ke.blur()});const St=W.get(Ee)||[];return W.set(Ee,[...St,Ue]),yield Ue.play(),!0});return function(Ce,ze,dt,et){return ne.apply(this,arguments)}}(),te=(ne,Ee)=>{let Ce;const ze=new Promise(dt=>Ce=dt);return ce(ne,Ee,dt=>{Ce(dt.detail)}),ze},ce=(ne,Ee,Ce)=>{const ze=dt=>{(0,ge.b)(ne,Ee,ze),Ce(dt)};(0,ge.a)(ne,Ee,ze)},Ae=ne=>"cancel"===ne||ne===de,De=ne=>ne(),ue=(ne,Ee)=>{if("function"==typeof ne)return x.c.get("_zoneGate",De)(()=>{try{return ne(Ee)}catch(ze){throw ze}})},de="backdrop"},600:(Qe,Fe,w)=>{"use strict";w.d(Fe,{v:()=>Z});var o=w(9192),x=w(529),N=w(1135),ge=w(7579),R=w(9646),W=w(3900),M=w(3099),U=w(4004),_=w(7225),Y=w(8274),G=w(502);let Z=(()=>{class S extends o.iw{constructor(E,j){super(),this.http=E,this.loadingCtrl=j,this.loggedIn=!1,this.stationFreezed=!1,this.captionmode=!1,this.geraeteSubject=new N.X([]),this.wertungenSubject=new N.X([]),this.newLastResults=new N.X(void 0),this._clubregistrations=[],this.clubRegistrations=new N.X([]),this.askForUsername=new ge.x,this._competition=void 0,this._durchgang=void 0,this._geraet=void 0,this._step=void 0,this.lastJWTChecked=0,this.wertungenLoading=!1,this.isInitializing=!1,this._activeDurchgangList=[],this.durchgangStarted=new N.X([]),this.wertungUpdated=new ge.x,this.standardErrorHandler=P=>{if(console.log(P),this.resetLoading(),this.wertungenLoading=!1,this.isInitializing=!1,401===P.status)localStorage.removeItem("auth_token"),this.loggedIn=!1,this.showMessage.next({msg:"Die Berechtigung zum erfassen von Wertungen ist abgelaufen.",type:"Berechtigung"});else if(404===P.status)this.loggedIn=!1,this.stationFreezed=!1,this.captionmode=!1,this._competition=void 0,this._durchgang=void 0,this._geraet=void 0,this._step=void 0,localStorage.removeItem("auth_token"),localStorage.removeItem("current_competition"),localStorage.removeItem("current_station"),localStorage.removeItem("auth_clubid"),this.showMessage.next({msg:"Die aktuele Einstellung ist nicht mehr g\xfcltig und wird zur\xfcckgesetzt.",type:"Einstellung"});else{const K={msg:""+P.statusText+"
            "+P.message,type:P.name};(!this.lastMessageAck||this.lastMessageAck.msg!==K.msg)&&this.showMessage.next(K)}},this.clublist=[],this.showMessage.subscribe(P=>{this.resetLoading(),this.lastMessageAck=P}),this.resetLoading()}get competition(){return this._competition}get durchgang(){return this._durchgang}get geraet(){return this._geraet}get step(){return this._step}set currentUserName(E){localStorage.setItem("current_username",E)}get currentUserName(){return localStorage.getItem("current_username")}get activeDurchgangList(){return this._activeDurchgangList}get authenticatedClubId(){return localStorage.getItem("auth_clubid")}get competitionName(){if(!this.competitions)return"";const E=this.competitions.filter(j=>j.uuid===this.competition).map(j=>j.titel+", am "+(j.datum+"T").split("T")[0].split("-").reverse().join("-"));return 1===E.length?E[0]:""}getCurrentStation(){return localStorage.getItem("current_station")||this.competition+"/"+this.durchgang+"/"+this.geraet+"/"+this.step}resetLoading(){this.loadingInstance&&(this.loadingInstance.then(E=>E.dismiss()),this.loadingInstance=void 0)}startLoading(E,j){return this.resetLoading(),this.loadingInstance=this.loadingCtrl.create({message:E}),this.loadingInstance.then(P=>P.present()),j&&j.subscribe({next:()=>this.resetLoading(),error:P=>this.resetLoading()}),j}initWithQuery(E){this.isInitializing=!0;const j=new N.X(!1);return E&&E.startsWith("c=")?(this._step=1,E.split("&").forEach(P=>{const[K,pe]=P.split("=");switch(K){case"s":this.currentUserName||this.askForUsername.next(this),localStorage.setItem("auth_token",pe),localStorage.removeItem("auth_clubid"),this.checkJWT(pe);const ke=localStorage.getItem("current_station");ke&&this.initWithQuery(ke);break;case"c":this._competition=pe;break;case"ca":this._competition=void 0;break;case"d":this._durchgang=pe;break;case"st":this._step=parseInt(pe);break;case"g":this._geraet=parseInt(pe),localStorage.setItem("current_station",E),this.checkJWT(),this.stationFreezed=!0;break;case"rs":localStorage.setItem("auth_token",pe),this.unlock(),this.loggedIn=!0,console.log("club auth-token initialized");break;case"rid":localStorage.setItem("auth_clubid",pe),console.log("club id initialized",pe)}}),localStorage.removeItem("external_load"),this.startLoading("Bitte warten ..."),this._geraet?this.getCompetitions().pipe((0,W.w)(()=>this.loadDurchgaenge()),(0,W.w)(()=>this.loadGeraete()),(0,W.w)(()=>this.loadSteps()),(0,W.w)(()=>this.loadWertungen())).subscribe(P=>j.next(!0)):!this._competition||"undefined"===this._competition&&!localStorage.getItem("auth_clubid")?(console.log("initializing clubreg ..."),this.getClubRegistrations(this._competition).subscribe(P=>j.next(!0))):this._competition&&this.getCompetitions().pipe((0,W.w)(()=>this.loadDurchgaenge())).subscribe(P=>j.next(!0))):j.next(!0),j.subscribe(P=>{P&&(this.isInitializing=!1,this.resetLoading())}),j}checkJWT(E){if(E||(E=localStorage.getItem("auth_token")),!E)return void(this.loggedIn=!1);const P=(new Date).getTime()-36e5;(!E||E===localStorage.getItem("auth_token"))&&P{localStorage.setItem("auth_token",K.headers.get("x-access-token")),this.loggedIn=!0,this.competitions&&0!==this.competitions.length?this._competition&&this.getDurchgaenge(this._competition):this.getCompetitions().subscribe(pe=>{this._competition&&this.getDurchgaenge(this._competition)})},error:K=>{console.log(K),401===K.status?(localStorage.removeItem("auth_token"),this.loggedIn=!1,this.showMessage.next({msg:"Die Berechtigung ist abgelaufen. Bitte neu anmelden",type:"Berechtigung"})):this.standardErrorHandler(K)}}),this.lastJWTChecked=(new Date).getTime())}saveClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j.id,j).pipe((0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations.filter(pe=>pe.id!=j.id),K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}saveClubRegistrationPW(E,j){const P=this.startLoading("Neues Password wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j.id+"/pwchange",j).pipe((0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations.filter(pe=>pe.id!=j.id),K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}createClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird registriert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E,j,{observe:"response"}).pipe((0,U.U)(K=>(console.log(K),localStorage.setItem("auth_token",K.headers.get("x-access-token")),localStorage.setItem("auth_clubid",K.body.id+""),this.loggedIn=!0,K.body)),(0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations,K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}deleteClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird gel\xf6scht. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j,{responseType:"text"}).pipe((0,M.B)()));return P.subscribe({next:K=>{this.clublogout(),this._clubregistrations=this._clubregistrations.filter(pe=>pe.id!=j),this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}loadProgramsForCompetition(E){const j=this.startLoading("Programmliste zum Wettkampf wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/programmlist").pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}loadAthletListForClub(E,j){const P=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/athletlist").pipe((0,M.B)()));return P.subscribe({next:K=>{},error:this.standardErrorHandler}),P}loadAthletRegistrations(E,j){const P=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/athletes").pipe((0,M.B)()));return P.subscribe({error:this.standardErrorHandler}),P}createAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E+"/"+j+"/athletes",P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}saveAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j+"/athletes/"+P.id,P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}deleteAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j+"/athletes/"+P.id,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}findCompetitionsByVerein(E){const j=this.startLoading("Es werden fr\xfchere Anmeldungen gesucht. Bitte warten ...",this.http.get(_.AC+"api/competition/byVerein/"+E).pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}copyClubRegsFromCompetition(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+j+"/"+P+"/copyfrom",E,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}loadJudgeProgramDisziplinList(E){const j=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/programmdisziplinlist").pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}loadJudgeRegistrations(E,j){const P=this.startLoading("Wertungsrichter-Liste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/judges").pipe((0,M.B)()));return P.subscribe({error:this.standardErrorHandler}),P}createJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E+"/"+j+"/judges",P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}saveJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j+"/judges/"+P.id,P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}deleteJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j+"/judges/"+P.id,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}clublogout(){this.logout()}utf8_to_b64(E){return window.btoa(unescape(encodeURIComponent(E)))}b64_to_utf8(E){return decodeURIComponent(escape(window.atob(E)))}getClubList(){if(this.clublist&&this.clublist.length>0)return(0,R.of)(this.clublist);const E=this.startLoading("Clubliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/clubnames").pipe((0,M.B)()));return E.subscribe({next:j=>{this.clublist=j},error:this.standardErrorHandler}),E}resetRegistration(E){const j=new x.WM,P=this.http.options(_.AC+"api/registrations/"+this._competition+"/"+E+"/loginreset",{observe:"response",headers:j.set("Host",_.AC),responseType:"text"}).pipe((0,M.B)());return this.startLoading("Mail f\xfcr Login-Reset wird versendet. Bitte warten ...",P)}clublogin(E,j){this.clublogout();const P=new x.WM,K=this.startLoading("Login wird verarbeitet. Bitte warten ...",this.http.options(_.AC+"api/login",{observe:"response",headers:P.set("Authorization","Basic "+this.utf8_to_b64(`${E}:${j}`)),withCredentials:!0,responseType:"text"}).pipe((0,M.B)()));return K.subscribe({next:pe=>{console.log(pe),localStorage.setItem("auth_token",pe.headers.get("x-access-token")),localStorage.setItem("auth_clubid",E),this.loggedIn=!0},error:pe=>{console.log(pe),this.clublogout(),this.resetLoading(),401===pe.status?(localStorage.setItem("auth_token",pe.headers.get("x-access-token")),this.loggedIn=!1):this.standardErrorHandler(pe)}}),K}unlock(){localStorage.removeItem("current_station"),this.checkJWT(),this.stationFreezed=!1}logout(){localStorage.removeItem("auth_token"),localStorage.removeItem("auth_clubid"),this.loggedIn=!1,this.unlock()}getCompetitions(){const E=this.startLoading("Wettkampfliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/competition").pipe((0,M.B)()));return E.subscribe({next:j=>{this.competitions=j},error:this.standardErrorHandler}),E}getClubRegistrations(E){return this.checkJWT(),void 0!==this._clubregistrations&&this._competition===E||this.isInitializing||(this.durchgaenge=[],this._clubregistrations=[],this.geraete=void 0,this.steps=void 0,this.wertungen=void 0,this._competition=E,this._durchgang=void 0,this._geraet=void 0,this._step=void 0),this.loadClubRegistrations()}loadClubRegistrations(){return this._competition&&"undefined"!==this._competition?(this.startLoading("Clubanmeldungen werden geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+this._competition).pipe((0,M.B)())).subscribe({next:j=>{localStorage.setItem("current_competition",this._competition),this._clubregistrations=j,this.clubRegistrations.next(j)},error:this.standardErrorHandler}),this.clubRegistrations):(0,R.of)([])}loadRegistrationSyncActions(){if(!this._competition||"undefined"===this._competition)return(0,R.of)([]);const E=this.startLoading("Pendente An-/Abmeldungen werden geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+this._competition+"/syncactions").pipe((0,M.B)()));return E.subscribe({error:this.standardErrorHandler}),E}resetCompetition(E){console.log("reset data"),this.durchgaenge=[],this._clubregistrations=[],this.clubRegistrations.next([]),this.geraete=void 0,this.geraeteSubject.next([]),this.steps=void 0,this.wertungen=void 0,this.wertungenSubject.next([]),this._competition=E,this._durchgang=void 0,this._geraet=void 0,this._step=void 0}getDurchgaenge(E){return this.checkJWT(),void 0!==this.durchgaenge&&this._competition===E||this.isInitializing?(0,R.of)(this.durchgaenge||[]):(this.resetCompetition(E),this.loadDurchgaenge())}loadDurchgaenge(){if(!this._competition||"undefined"===this._competition)return(0,R.of)([]);const E=this.startLoading("Durchgangliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition).pipe((0,M.B)())),j=this._durchgang;return E.subscribe({next:P=>{if(localStorage.setItem("current_competition",this._competition),this.durchgaenge=P,j){const K=this.durchgaenge.filter(pe=>{const ke=(0,o._5)(pe);return j===pe||j===ke});1===K.length&&(this._durchgang=K[0])}},error:this.standardErrorHandler}),E}getGeraete(E,j){return void 0!==this.geraete&&this._competition===E&&this._durchgang===j||this.isInitializing?(0,R.of)(this.geraete||[]):(this.geraete=[],this.steps=void 0,this.wertungen=void 0,this._competition=E,this._durchgang=j,this._geraet=void 0,this._step=void 0,this.captionmode=!0,this.loadGeraete())}loadGeraete(){if(this.geraete=[],!this._competition||"undefined"===this._competition)return console.log("reusing geraetelist"),(0,R.of)([]);console.log("renewing geraetelist");let E="";E=this.captionmode&&this._durchgang&&"undefined"!==this._durchgang?_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang):_.AC+"api/durchgang/"+this._competition+"/geraete";const j=this.startLoading("Ger\xe4te zum Durchgang werden geladen. Bitte warten ...",this.http.get(E).pipe((0,M.B)()));return j.subscribe({next:P=>{this.geraete=P,this.geraeteSubject.next(this.geraete)},error:this.standardErrorHandler}),j}getSteps(E,j,P){if(void 0!==this.steps&&this._competition===E&&this._durchgang===j&&this._geraet===P||this.isInitializing)return(0,R.of)(this.steps||[]);this.steps=[],this.wertungen=void 0,this._competition=E,this._durchgang=j,this._geraet=P,this._step=void 0;const K=this.loadSteps();return K.subscribe({next:pe=>{this.steps=pe.map(ke=>parseInt(ke)),(void 0===this._step||this.steps.indexOf(this._step)<0)&&(this._step=this.steps[0],this.loadWertungen())},error:this.standardErrorHandler}),K}loadSteps(){if(this.steps=[],!this._competition||"undefined"===this._competition||!this._durchgang||"undefined"===this._durchgang||void 0===this._geraet)return(0,R.of)([]);const E=this.startLoading("Stationen zum Ger\xe4t werden geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/"+this._geraet).pipe((0,M.B)()));return E.subscribe({next:j=>{this.steps=j},error:this.standardErrorHandler}),E}getWertungen(E,j,P,K){void 0!==this.wertungen&&this._competition===E&&this._durchgang===j&&this._geraet===P&&this._step===K||this.isInitializing||(this.wertungen=[],this._competition=E,this._durchgang=j,this._geraet=P,this._step=K,this.loadWertungen())}activateCaptionMode(){this.competitions||this.getCompetitions(),this.durchgaenge||this.loadDurchgaenge(),(!this.captionmode||!this.geraete)&&(this.captionmode=!0,this.loadGeraete()),this.geraet&&!this.steps&&this.loadSteps(),this.geraet&&(this.disconnectWS(!0),this.initWebsocket())}loadWertungen(){if(this.wertungenLoading||void 0===this._geraet||void 0===this._step)return(0,R.of)([]);this.activateCaptionMode();const E=this._step;this.wertungenLoading=!0;const j=this.startLoading("Riegenteilnehmer werden geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/"+this._geraet+"/"+this._step).pipe((0,M.B)()));return j.subscribe({next:P=>{this.wertungenLoading=!1,this._step!==E?this.loadWertungen():(this.wertungen=P,this.wertungenSubject.next(this.wertungen))},error:this.standardErrorHandler}),j}loadAthletWertungen(E,j){return this.activateNonCaptionMode(E),this.startLoading("Wertungen werden geladen. Bitte warten ...",this.http.get(_.AC+`api/athlet/${this._competition}/${j}`).pipe((0,M.B)()))}activateNonCaptionMode(E){return this._competition!==E||this.captionmode||!this.geraete||0===this.geraete.length||E&&!this.isWebsocketConnected()?(this.captionmode=!1,this._competition=E,this.disconnectWS(!0),this.initWebsocket(),this.loadGeraete()):(0,R.of)(this.geraete)}loadStartlist(E){return this._competition?this.startLoading("Teilnehmerliste wird geladen. Bitte warten ...",E?this.http.get(_.AC+"api/report/"+this._competition+"/startlist?q="+E).pipe((0,M.B)()):this.http.get(_.AC+"api/report/"+this._competition+"/startlist").pipe((0,M.B)())):(0,R.of)()}isMessageAck(E){return"MessageAck"===E.type}updateWertung(E,j,P,K){const pe=K.wettkampfUUID,ke=new ge.x;return this.shouldConnectAgain()&&this.reconnect(),this.startLoading("Wertung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/durchgang/"+pe+"/"+(0,o.gT)(E)+"/"+P+"/"+j,K).pipe((0,M.B)())).subscribe({next:Te=>{if(!this.isMessageAck(Te)&&Te.wertung){let ie=!1;this.wertungen=this.wertungen.map(Be=>Be.wertung.id===Te.wertung.id?(ie=!0,Te):Be),this.wertungenSubject.next(this.wertungen),ke.next(Te),ie&&ke.complete()}else{const ie=Te;this.showMessage.next(ie),ke.error(ie.msg),ke.complete()}},error:this.standardErrorHandler}),ke}finishStation(E,j,P,K){const pe=new ge.x;return this.startLoading("Station wird abgeschlossen. Bitte warten ...",this.http.post(_.AC+"api/durchgang/"+E+"/finish",{type:"FinishDurchgangStation",wettkampfUUID:E,durchgang:j,geraet:P,step:K}).pipe((0,M.B)())).subscribe({next:ke=>{const Te=this.steps.filter(ie=>ie>K);Te.length>0?this._step=Te[0]:(localStorage.removeItem("current_station"),this.checkJWT(),this.stationFreezed=!1,this._step=this.steps[0]),this.loadWertungen().subscribe(ie=>{pe.next(Te)})},error:this.standardErrorHandler}),pe.asObservable()}nextStep(){const E=this.steps.filter(j=>j>this._step);return E.length>0?E[0]:this.steps[0]}prevStep(){const E=this.steps.filter(j=>j0?E[E.length-1]:this.steps[this.steps.length-1]}getPrevGeraet(){let E=this.geraete.indexOf(this.geraete.find(j=>j.id===this._geraet))-1;return E<0&&(E=this.geraete.length-1),this.geraete[E].id}getNextGeraet(){let E=this.geraete.indexOf(this.geraete.find(j=>j.id===this._geraet))+1;return E>=this.geraete.length&&(E=0),this.geraete[E].id}nextGeraet(){if(this.loggedIn){const E=this.steps.filter(j=>j>this._step);return(0,R.of)(E.length>0?E[0]:this.steps[0])}{const E=this._step;return this._geraet=this.getNextGeraet(),this.loadSteps().pipe((0,U.U)(j=>{const P=j.filter(K=>K>E);return P.length>0?P[0]:this.steps[0]}))}}prevGeraet(){if(this.loggedIn){const E=this.steps.filter(j=>j0?E[E.length-1]:this.steps[this.steps.length-1])}{const E=this._step;return this._geraet=this.getPrevGeraet(),this.loadSteps().pipe((0,U.U)(j=>{const P=this.steps.filter(K=>K0?P[P.length-1]:this.steps[this.steps.length-1]}))}}getScoreList(E){return this._competition?this.startLoading("Rangliste wird geladen. Bitte warten ...",this.http.get(`${_.AC}${E}`).pipe((0,M.B)())):(0,R.of)({})}getScoreLists(){return this._competition?this.startLoading("Ranglisten werden geladen. Bitte warten ...",this.http.get(`${_.AC}api/scores/${this._competition}`).pipe((0,M.B)())):(0,R.of)(Object.assign({}))}getWebsocketBackendUrl(){let E=location.host;const P="https:"===location.protocol?"wss:":"ws:";let K="api/";return K=this._durchgang&&this.captionmode?K+"durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/ws":K+"durchgang/"+this._competition+"/all/ws",E=E&&""!==E?(P+"//"+E+"/").replace("index.html",""):"wss://kutuapp.sharevic.net/",E+K}handleWebsocketMessage(E){switch(E.type){case"BulkEvent":return E.events.map(pe=>this.handleWebsocketMessage(pe)).reduce((pe,ke)=>pe&&ke);case"DurchgangStarted":return this._activeDurchgangList=[...this.activeDurchgangList,E],this.durchgangStarted.next(this.activeDurchgangList),!0;case"DurchgangFinished":const P=E;return this._activeDurchgangList=this.activeDurchgangList.filter(pe=>pe.durchgang!==P.durchgang||pe.wettkampfUUID!==P.wettkampfUUID),this.durchgangStarted.next(this.activeDurchgangList),!0;case"AthletWertungUpdatedSequenced":case"AthletWertungUpdated":const K=E;return this.wertungen=this.wertungen.map(pe=>pe.id===K.wertung.athletId&&pe.wertung.wettkampfdisziplinId===K.wertung.wettkampfdisziplinId?Object.assign({},pe,{wertung:K.wertung}):pe),this.wertungenSubject.next(this.wertungen),this.wertungUpdated.next(K),!0;case"AthletMovedInWettkampf":case"AthletRemovedFromWettkampf":return this.loadWertungen(),!0;case"NewLastResults":return this.newLastResults.next(E),!0;case"MessageAck":return console.log(E.msg),this.showMessage.next(E),!0;default:return!1}}}return S.\u0275fac=function(E){return new(E||S)(Y.LFG(x.eN),Y.LFG(G.HT))},S.\u0275prov=Y.Yz7({token:S,factory:S.\u0275fac,providedIn:"root"}),S})()},9192:(Qe,Fe,w)=>{"use strict";w.d(Fe,{iw:()=>B,_5:()=>Z,gT:()=>S});var o=w(1135),x=w(7579),N=w(1566),ge=w(9751),R=w(3532);var _=w(7225),Y=w(2529),G=w(8274);function Z(E){return E?E.replace(/[,&.*+?/^${}()|[\]\\]/g,"_"):""}function S(E){return E?encodeURIComponent(Z(E)):""}let B=(()=>{class E{constructor(){this.identifiedState=!1,this.connectedState=!1,this.explicitClosed=!0,this.reconnectInterval=3e4,this.reconnectAttempts=480,this.lstKeepAliveReceived=0,this.connected=new o.X(!1),this.identified=new o.X(!1),this.logMessages=new o.X(""),this.showMessage=new x.x,this.lastMessages=[]}get stopped(){return this.explicitClosed}startKeepAliveObservation(){setTimeout(()=>{const K=(new Date).getTime()-this.lstKeepAliveReceived;!this.explicitClosed&&!this.reconnectionObservable&&K>this.reconnectInterval?(this.logMessages.next("connection verified since "+K+"ms. It seems to be dead and need to be reconnected!"),this.disconnectWS(!1),this.reconnect()):this.logMessages.next("connection verified since "+K+"ms"),this.startKeepAliveObservation()},this.reconnectInterval)}sendMessage(P){this.websocket?this.connectedState&&this.websocket.send(P):this.connect(P)}disconnectWS(P=!0){this.explicitClosed=P,this.lstKeepAliveReceived=0,this.websocket?(this.websocket.close(),P&&this.close()):this.close()}close(){this.websocket&&(this.websocket.onerror=void 0,this.websocket.onclose=void 0,this.websocket.onopen=void 0,this.websocket.onmessage=void 0,this.websocket.close()),this.websocket=void 0,this.identifiedState=!1,this.lstKeepAliveReceived=0,this.identified.next(this.identifiedState),this.connectedState=!1,this.connected.next(this.connectedState)}isWebsocketConnected(){return this.websocket&&this.websocket.readyState===this.websocket.OPEN}isWebsocketConnecting(){return this.websocket&&this.websocket.readyState===this.websocket.CONNECTING}shouldConnectAgain(){return!(this.isWebsocketConnected()||this.isWebsocketConnecting())}reconnect(){if(!this.reconnectionObservable){this.logMessages.next("start try reconnection ..."),this.reconnectionObservable=function U(E=0,j=N.z){return E<0&&(E=0),function M(E=0,j,P=N.P){let K=-1;return null!=j&&((0,R.K)(j)?P=j:K=j),new ge.y(pe=>{let ke=function W(E){return E instanceof Date&&!isNaN(E)}(E)?+E-P.now():E;ke<0&&(ke=0);let Te=0;return P.schedule(function(){pe.closed||(pe.next(Te++),0<=K?this.schedule(void 0,K):pe.complete())},ke)})}(E,E,j)}(this.reconnectInterval).pipe((0,Y.o)((K,pe)=>pe{this.shouldConnectAgain()&&(this.logMessages.next("continue with reconnection ..."),this.connect(void 0))},null,()=>{this.reconnectionObservable=null,P.unsubscribe(),this.isWebsocketConnected()?this.logMessages.next("finish with reconnection (successfull)"):this.isWebsocketConnecting()?this.logMessages.next("continue with reconnection (CONNECTING)"):(!this.websocket||this.websocket.CLOSING||this.websocket.CLOSED)&&(this.disconnectWS(),this.logMessages.next("finish with reconnection (unsuccessfull)"))})}}initWebsocket(){this.logMessages.subscribe(P=>{this.lastMessages.push((0,_.sZ)(!0)+` - ${P}`),this.lastMessages=this.lastMessages.slice(Math.max(this.lastMessages.length-50,0))}),this.logMessages.next("init"),this.backendUrl=this.getWebsocketBackendUrl()+`?clientid=${(0,_.ix)()}`,this.logMessages.next("init with "+this.backendUrl),this.connect(void 0),this.startKeepAliveObservation()}connect(P){this.disconnectWS(),this.explicitClosed=!1,this.websocket=new WebSocket(this.backendUrl),this.websocket.onopen=()=>{this.connectedState=!0,this.connected.next(this.connectedState),P&&this.sendMessage(P)},this.websocket.onclose=pe=>{switch(this.close(),pe.code){case 1001:this.logMessages.next("Going Away"),this.explicitClosed||this.reconnect();break;case 1002:this.logMessages.next("Protocol error"),this.explicitClosed||this.reconnect();break;case 1003:this.logMessages.next("Unsupported Data"),this.explicitClosed||this.reconnect();break;case 1005:this.logMessages.next("No Status Rcvd"),this.explicitClosed||this.reconnect();break;case 1006:this.logMessages.next("Abnormal Closure"),this.explicitClosed||this.reconnect();break;case 1007:this.logMessages.next("Invalid frame payload data"),this.explicitClosed||this.reconnect();break;case 1008:this.logMessages.next("Policy Violation"),this.explicitClosed||this.reconnect();break;case 1009:this.logMessages.next("Message Too Big"),this.explicitClosed||this.reconnect();break;case 1010:this.logMessages.next("Mandatory Ext."),this.explicitClosed||this.reconnect();break;case 1011:this.logMessages.next("Internal Server Error"),this.explicitClosed||this.reconnect();break;case 1015:this.logMessages.next("TLS handshake")}},this.websocket.onmessage=pe=>{if(this.lstKeepAliveReceived=(new Date).getTime(),!pe.data.startsWith("Connection established.")&&"keepAlive"!==pe.data)try{const ke=JSON.parse(pe.data);"MessageAck"===ke.type?(console.log(ke.msg),this.showMessage.next(ke)):this.handleWebsocketMessage(ke)||(console.log(ke),this.logMessages.next("unknown message: "+pe.data))}catch(ke){this.logMessages.next(ke+": "+pe.data)}},this.websocket.onerror=pe=>{this.logMessages.next(pe.message+", "+pe.type)}}}return E.\u0275fac=function(P){return new(P||E)},E.\u0275prov=G.Yz7({token:E,factory:E.\u0275fac,providedIn:"root"}),E})()},7225:(Qe,Fe,w)=>{"use strict";w.d(Fe,{AC:()=>M,WZ:()=>B,ix:()=>S,sZ:()=>Y,tC:()=>_});const ge=location.host,M=(location.protocol+"//"+ge+"/").replace("index.html","");function _(E){let j=new Date;j=function U(E){return null!=E&&""!==E&&!isNaN(Number(E.toString()))}(E)?new Date(parseInt(E)):new Date(Date.parse(E));const P=`${j.getFullYear().toString()}-${("0"+(j.getMonth()+1)).slice(-2)}-${("0"+j.getDate()).slice(-2)}`;return console.log(P),P}function Y(E=!1){return function G(E,j=!1){const P=("0"+E.getDate()).slice(-2)+"-"+("0"+(E.getMonth()+1)).slice(-2)+"-"+E.getFullYear()+" "+("0"+E.getHours()).slice(-2)+":"+("0"+E.getMinutes()).slice(-2);return j?P+":"+("0"+E.getSeconds()).slice(-2):P}(new Date,E)}function S(){let E=localStorage.getItem("clientid");return E||(E=function Z(){function E(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return E()+E()+"-"+E()+"-"+E()+"-"+E()+"-"+E()+E()+E()}(),localStorage.setItem("clientid",E)),localStorage.getItem("current_username")+":"+E}const B={1:"boden.svg",2:"pferdpauschen.svg",3:"ringe.svg",4:"sprung.svg",5:"barren.svg",6:"reck.svg",26:"ringe.svg",27:"stufenbarren.svg",28:"schwebebalken.svg",29:"minitramp.svg",30:"minitramp.svg",31:"ringe.svg"}},1394:(Qe,Fe,w)=>{"use strict";var o=w(1481),x=w(8274),N=w(5472),ge=w(529),R=w(502);const M=(0,w(7423).fo)("SplashScreen",{web:()=>w.e(2680).then(w.bind(w,2680)).then(T=>new T.SplashScreenWeb)});var U=w(6895),_=w(3608);let Y=(()=>{class T{constructor(O){this.document=O;const te=localStorage.getItem("theme");te?this.setGlobalCSS(te):this.setTheme({})}setTheme(O){const te=function S(T){T={...G,...T};const{primary:k,secondary:O,tertiary:te,success:ce,warning:Ae,danger:De,dark:ue,medium:de,light:ne}=T,Ee=.2,Ce=.2;return`\n --ion-color-base: ${ne};\n --ion-color-contrast: ${ue};\n --ion-background-color: ${ne};\n --ion-card-background-color: ${E(ne,.4)};\n --ion-card-shadow-color1: ${E(ue,2).alpha(.2)};\n --ion-card-shadow-color2: ${E(ue,2).alpha(.14)};\n --ion-card-shadow-color3: ${E(ue,2).alpha(.12)};\n --ion-card-color: ${E(ue,2)};\n --ion-text-color: ${ue};\n --ion-toolbar-background-color: ${_(ne).lighten(Ce)};\n --ion-toolbar-text-color: ${B(ue,.2)};\n --ion-item-background-color: ${B(ne,.1)};\n --ion-item-background-activated: ${B(ne,.3)};\n --ion-item-text-color: ${B(ue,.1)};\n --ion-item-border-color: ${_(de).lighten(Ce)};\n --ion-overlay-background-color: ${E(ne,.1)};\n --ion-color-primary: ${k};\n --ion-color-primary-rgb: ${j(k)};\n --ion-color-primary-contrast: ${B(k)};\n --ion-color-primary-contrast-rgb: ${j(B(k))};\n --ion-color-primary-shade: ${_(k).darken(Ee)};\n --ion-color-primary-tint: ${_(k).lighten(Ce)};\n --ion-color-secondary: ${O};\n --ion-color-secondary-rgb: ${j(O)};\n --ion-color-secondary-contrast: ${B(O)};\n --ion-color-secondary-contrast-rgb: ${j(B(O))};\n --ion-color-secondary-shade: ${_(O).darken(Ee)};\n --ion-color-secondary-tint: ${_(O).lighten(Ce)};\n --ion-color-tertiary: ${te};\n --ion-color-tertiary-rgb: ${j(te)};\n --ion-color-tertiary-contrast: ${B(te)};\n --ion-color-tertiary-contrast-rgb: ${j(B(te))};\n --ion-color-tertiary-shade: ${_(te).darken(Ee)};\n --ion-color-tertiary-tint: ${_(te).lighten(Ce)};\n --ion-color-success: ${ce};\n --ion-color-success-rgb: ${j(ce)};\n --ion-color-success-contrast: ${B(ce)};\n --ion-color-success-contrast-rgb: ${j(B(ce))};\n --ion-color-success-shade: ${_(ce).darken(Ee)};\n --ion-color-success-tint: ${_(ce).lighten(Ce)};\n --ion-color-warning: ${Ae};\n --ion-color-warning-rgb: ${j(Ae)};\n --ion-color-warning-contrast: ${B(Ae)};\n --ion-color-warning-contrast-rgb: ${j(B(Ae))};\n --ion-color-warning-shade: ${_(Ae).darken(Ee)};\n --ion-color-warning-tint: ${_(Ae).lighten(Ce)};\n --ion-color-danger: ${De};\n --ion-color-danger-rgb: ${j(De)};\n --ion-color-danger-contrast: ${B(De)};\n --ion-color-danger-contrast-rgb: ${j(B(De))};\n --ion-color-danger-shade: ${_(De).darken(Ee)};\n --ion-color-danger-tint: ${_(De).lighten(Ce)};\n --ion-color-dark: ${ue};\n --ion-color-dark-rgb: ${j(ue)};\n --ion-color-dark-contrast: ${B(ue)};\n --ion-color-dark-contrast-rgb: ${j(B(ue))};\n --ion-color-dark-shade: ${_(ue).darken(Ee)};\n --ion-color-dark-tint: ${_(ue).lighten(Ce)};\n --ion-color-medium: ${de};\n --ion-color-medium-rgb: ${j(de)};\n --ion-color-medium-contrast: ${B(de)};\n --ion-color-medium-contrast-rgb: ${j(B(de))};\n --ion-color-medium-shade: ${_(de).darken(Ee)};\n --ion-color-medium-tint: ${_(de).lighten(Ce)};\n --ion-color-light: ${ne};\n --ion-color-light-rgb: ${j(ne)};\n --ion-color-light-contrast: ${B(ne)};\n --ion-color-light-contrast-rgb: ${j(B(ne))};\n --ion-color-light-shade: ${_(ne).darken(Ee)};\n --ion-color-light-tint: ${_(ne).lighten(Ce)};`+function Z(T,k){void 0===T&&(T="#ffffff"),void 0===k&&(k="#000000");const O=new _(T);let te="";for(let ce=5;ce<100;ce+=5){const De=ce/100;te+=` --ion-color-step-${ce+"0"}: ${O.mix(_(k),De).hex()};`,ce<95&&(te+="\n")}return te}(ue,ne)}(O);this.setGlobalCSS(te),localStorage.setItem("theme",te)}setVariable(O,te){this.document.documentElement.style.setProperty(O,te)}setGlobalCSS(O){this.document.documentElement.style.cssText=O}get storedTheme(){return localStorage.getItem("theme")}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(U.K0))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})();const G={primary:"#3880ff",secondary:"#0cd1e8",tertiary:"#7044ff",success:"#10dc60",warning:"#ff7b00",danger:"#f04141",dark:"#222428",medium:"#989aa2",light:"#fcfdff"};function B(T,k=.8){const O=_(T);return O.isDark()?O.lighten(k):O.darken(k)}function E(T,k=.8){const O=_(T);return O.isDark()?O.darken(k):O.lighten(k)}function j(T){const k=_(T);return`${k.red()}, ${k.green()}, ${k.blue()}`}var P=w(600);function K(T,k){if(1&T){const O=x.EpF();x.TgZ(0,"ion-item",4),x.NdJ("click",function(){const Ae=x.CHM(O).$implicit,De=x.oxw();return x.KtG(De.openPage(Ae.url))}),x._UZ(1,"ion-icon",9),x.TgZ(2,"ion-label"),x._uU(3),x.qZA()()}if(2&T){const O=k.$implicit;x.xp6(1),x.Q6J("name",O.icon),x.xp6(2),x.hij(" ",O.title," ")}}function pe(T,k){if(1&T){const O=x.EpF();x.TgZ(0,"ion-item",4),x.NdJ("click",function(){const Ae=x.CHM(O).$implicit,De=x.oxw();return x.KtG(De.changeTheme(Ae))}),x._UZ(1,"ion-icon",6),x.TgZ(2,"ion-label"),x._uU(3),x.qZA()()}if(2&T){const O=k.$implicit,te=x.oxw();x.Udp("background-color",te.themes[O].light)("color",te.themes[O].dark),x.xp6(2),x.Udp("background-color",te.themes[O].light)("color",te.themes[O].dark),x.xp6(1),x.hij(" ",O," ")}}let ke=(()=>{class T{constructor(O,te,ce,Ae,De,ue,de){this.platform=O,this.navController=te,this.route=ce,this.router=Ae,this.themeSwitcher=De,this.backendService=ue,this.alertCtrl=de,this.themes={Blau:{primary:"#ffa238",secondary:"#a19137",tertiary:"#421804",success:"#0eb651",warning:"#ff7b00",danger:"#f04141",dark:"#fffdf5",medium:"#454259",light:"#03163d"},Sport:{primary:"#ffa238",secondary:"#7dc0ff",tertiary:"#421804",success:"#0eb651",warning:"#ff7b00",danger:"#f04141",dark:"#03163d",medium:"#8092dd",light:"#fffdf5"},Dunkel:{primary:"#8DBB82",secondary:"#FCFF6C",tertiary:"#FE5F55",warning:"#ffce00",medium:"#BCC2C7",dark:"#DADFE1",light:"#363232"},Neon:{primary:"#23ff00",secondary:"#4CE0B3",tertiary:"#FF5E79",warning:"#ff7b00",light:"#F4EDF2",medium:"#B682A5",dark:"#34162A"}},this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"},{title:"Letzte Resultate",url:"last-results",icon:"radio"},{title:"Top Resultate",url:"top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"},{title:"Wettkampfanmeldungen",url:"/registration",icon:"people-outline"}],this.backendService.askForUsername.subscribe(ne=>{this.alertCtrl.create({header:"Settings",message:ne.currentUserName?"Dein Benutzername":"Du bist das erste Mal hier. Bitte gib einen Benutzernamen an",inputs:[{name:"username",placeholder:"Benutzername",value:ne.currentUserName}],buttons:[{text:"Abbrechen",role:"cancel",handler:()=>{console.log("Cancel clicked")}},{text:"Speichern",handler:Ce=>{if(!(Ce.username&&Ce.username.trim().length>1))return!1;ne.currentUserName=Ce.username.trim()}}]}).then(Ce=>Ce.present())}),this.backendService.showMessage.subscribe(ne=>{let Ee=ne.msg;(!Ee||0===Ee.trim().length)&&(Ee="Die gew\xfcnschte Aktion ist aktuell nicht m\xf6glich."),this.alertCtrl.create({header:"Achtung",message:Ee,buttons:["OK"]}).then(ze=>ze.present())}),this.initializeApp()}get themeKeys(){return Object.keys(this.themes)}clearPosParam(){this.router.navigate(["."],{relativeTo:this.route,queryParams:{}})}initializeApp(){this.platform.ready().then(()=>{if(M.show(),window.location.href.indexOf("?")>0)try{const O=window.location.href.split("?")[1],te=atob(O);O.startsWith("all")?(this.appPages=[{title:"Alle Resultate",url:"/all-results",icon:"radio"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/last-results")):O.startsWith("top")?(this.appPages=[{title:"Top Resultate",url:"/top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/top-results")):te.startsWith("last")?(this.appPages=[{title:"Aktuelle Resultate",url:"/last-results",icon:"radio"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/last-results"),this.backendService.initWithQuery(te.substring(5))):te.startsWith("top")?(this.appPages=[{title:"Top Resultate",url:"/top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/top-results"),this.backendService.initWithQuery(te.substring(4))):te.startsWith("registration")?(window.history.replaceState({},document.title,window.location.href.split("?")[0]),this.clearPosParam(),console.log("initializing with "+te),localStorage.setItem("external_load",te),this.backendService.initWithQuery(te.substring(13)).subscribe(ce=>{console.log("clubreg initialzed. navigate to clubreg-editor"),this.navController.navigateRoot("/registration/"+this.backendService.competition+"/"+localStorage.getItem("auth_clubid"))})):(window.history.replaceState({},document.title,window.location.href.split("?")[0]),this.clearPosParam(),console.log("initializing with "+te),localStorage.setItem("external_load",te),this.backendService.initWithQuery(te).subscribe(ce=>{te.startsWith("c=")&&te.indexOf("&st=")>-1&&te.indexOf("&g=")>-1&&(this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"}],this.navController.navigateRoot("/station"))}))}catch(O){console.log(O)}else if(localStorage.getItem("current_station")){const O=localStorage.getItem("current_station");this.backendService.initWithQuery(O).subscribe(te=>{O.startsWith("c=")&&O.indexOf("&st=")&&O.indexOf("&g=")&&(this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"}],this.navController.navigateRoot("/station"))})}else if(localStorage.getItem("current_competition")){const O=localStorage.getItem("current_competition");this.backendService.getDurchgaenge(O)}M.hide()})}askUserName(){this.backendService.askForUsername.next(this.backendService)}changeTheme(O){this.themeSwitcher.setTheme(this.themes[O])}openPage(O){this.navController.navigateRoot(O)}}return T.\u0275fac=function(O){return new(O||T)(x.Y36(R.t4),x.Y36(R.SH),x.Y36(N.gz),x.Y36(N.F0),x.Y36(Y),x.Y36(P.v),x.Y36(R.Br))},T.\u0275cmp=x.Xpm({type:T,selectors:[["app-root"]],decls:25,vars:2,consts:[["contentId","main","disabled","true"],["contentId","main"],["auto-hide","false"],["menuClose","",3,"click",4,"ngFor","ngForOf"],["menuClose","",3,"click"],["slot","start","name","settings"],["slot","start","name","color-palette"],["menuClose","",3,"background-color","color","click",4,"ngFor","ngForOf"],["id","main"],["slot","start",3,"name"]],template:function(O,te){1&O&&(x.TgZ(0,"ion-app")(1,"ion-split-pane",0)(2,"ion-menu",1)(3,"ion-header")(4,"ion-toolbar")(5,"ion-title"),x._uU(6,"Menu"),x.qZA()()(),x.TgZ(7,"ion-content")(8,"ion-list")(9,"ion-menu-toggle",2),x.YNc(10,K,4,2,"ion-item",3),x.TgZ(11,"ion-item",4),x.NdJ("click",function(){return te.askUserName()}),x._UZ(12,"ion-icon",5),x.TgZ(13,"ion-label"),x._uU(14," Settings "),x.qZA()(),x.TgZ(15,"ion-item-divider"),x._uU(16,"\xa0"),x._UZ(17,"br"),x._uU(18," Farbschema"),x.qZA(),x.TgZ(19,"ion-item",4),x.NdJ("click",function(){return te.changeTheme("")}),x._UZ(20,"ion-icon",6),x.TgZ(21,"ion-label"),x._uU(22," Standardfarben "),x.qZA()(),x.YNc(23,pe,4,9,"ion-item",7),x.qZA()()()(),x._UZ(24,"ion-router-outlet",8),x.qZA()()),2&O&&(x.xp6(10),x.Q6J("ngForOf",te.appPages),x.xp6(13),x.Q6J("ngForOf",te.themeKeys))},dependencies:[U.sg,R.dr,R.W2,R.Gu,R.gu,R.Ie,R.rH,R.Q$,R.q_,R.z0,R.zc,R.jI,R.wd,R.sr,R.jP],encapsulation:2}),T})(),Te=(()=>{class T{constructor(O,te){this.router=O,this.backendService=te}canActivate(O){return!(!this.backendService.geraet||!this.backendService.step)||(this.router.navigate(["home"]),!1)}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(N.F0),x.LFG(P.v))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})(),ie=(()=>{class T{constructor(O,te){this.router=O,this.backendService=te}canActivate(O){const te=O.paramMap.get("wkId"),ce=O.paramMap.get("regId");return!!("0"===ce||this.backendService.loggedIn&&this.backendService.authenticatedClubId===ce)||(this.router.navigate(["registration/"+te]),!1)}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(N.F0),x.LFG(P.v))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})();const Be=[{path:"",redirectTo:"home",pathMatch:"full"},{path:"home",loadChildren:()=>w.e(4902).then(w.bind(w,4902)).then(T=>T.HomePageModule)},{path:"station",canActivate:[Te],loadChildren:()=>Promise.all([w.e(8592),w.e(3050)]).then(w.bind(w,3050)).then(T=>T.StationPageModule)},{path:"wertung-editor/:itemId",canActivate:[Te],loadChildren:()=>w.e(9151).then(w.bind(w,9151)).then(T=>T.WertungEditorPageModule)},{path:"last-results",loadChildren:()=>Promise.all([w.e(8592),w.e(9946)]).then(w.bind(w,9946)).then(T=>T.LastResultsPageModule)},{path:"top-results",loadChildren:()=>Promise.all([w.e(8592),w.e(5332)]).then(w.bind(w,5332)).then(T=>T.LastTopResultsPageModule)},{path:"search-athlet",loadChildren:()=>Promise.all([w.e(8592),w.e(3375)]).then(w.bind(w,3375)).then(T=>T.SearchAthletPageModule)},{path:"search-athlet/:wkId",loadChildren:()=>Promise.all([w.e(8592),w.e(3375)]).then(w.bind(w,3375)).then(T=>T.SearchAthletPageModule)},{path:"athlet-view/:wkId/:athletId",loadChildren:()=>Promise.all([w.e(8592),w.e(5201)]).then(w.bind(w,5201)).then(T=>T.AthletViewPageModule)},{path:"registration",loadChildren:()=>Promise.all([w.e(8592),w.e(5323)]).then(w.bind(w,5323)).then(T=>T.RegistrationPageModule)},{path:"registration/:wkId",loadChildren:()=>Promise.all([w.e(8592),w.e(5323)]).then(w.bind(w,5323)).then(T=>T.RegistrationPageModule)},{path:"registration/:wkId/:regId",canActivate:[ie],loadChildren:()=>w.e(1994).then(w.bind(w,1994)).then(T=>T.ClubregEditorPageModule)},{path:"reg-athletlist/:wkId/:regId",canActivate:[ie],loadChildren:()=>Promise.all([w.e(8592),w.e(170)]).then(w.bind(w,170)).then(T=>T.RegAthletlistPageModule)},{path:"reg-athletlist/:wkId/:regId/:athletId",canActivate:[ie],loadChildren:()=>w.e(5231).then(w.bind(w,5231)).then(T=>T.RegAthletEditorPageModule)},{path:"reg-judgelist/:wkId/:regId",canActivate:[ie],loadChildren:()=>Promise.all([w.e(8592),w.e(6482)]).then(w.bind(w,6482)).then(T=>T.RegJudgelistPageModule)},{path:"reg-judgelist/:wkId/:regId/:judgeId",canActivate:[ie],loadChildren:()=>w.e(1053).then(w.bind(w,1053)).then(T=>T.RegJudgeEditorPageModule)}];let re=(()=>{class T{}return T.\u0275fac=function(O){return new(O||T)},T.\u0275mod=x.oAB({type:T}),T.\u0275inj=x.cJS({imports:[N.Bz.forRoot(Be,{preloadingStrategy:N.wm}),N.Bz]}),T})();var oe=w(7225);let be=(()=>{class T{constructor(){}intercept(O,te){const ce=O.headers.get("x-access-token")||localStorage.getItem("auth_token");return O=O.clone({setHeaders:{clientid:`${(0,oe.ix)()}`,"x-access-token":`${ce}`}}),te.handle(O)}}return T.\u0275fac=function(O){return new(O||T)},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})(),Ne=(()=>{class T{}return T.\u0275fac=function(O){return new(O||T)},T.\u0275mod=x.oAB({type:T,bootstrap:[ke]}),T.\u0275inj=x.cJS({providers:[Te,{provide:N.wN,useClass:R.r4},P.v,Y,be,{provide:ge.TP,useClass:be,multi:!0}],imports:[ge.JF,o.b2,R.Pc.forRoot(),re]}),T})();(0,x.G48)(),o.q6().bootstrapModule(Ne).catch(T=>console.log(T))},9914:Qe=>{"use strict";Qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},9655:(Qe,Fe,w)=>{var o=w(9914),x=w(6931),N=Object.hasOwnProperty,ge=Object.create(null);for(var R in o)N.call(o,R)&&(ge[o[R]]=R);var W=Qe.exports={to:{},get:{}};function M(_,Y,G){return Math.min(Math.max(Y,_),G)}function U(_){var Y=Math.round(_).toString(16).toUpperCase();return Y.length<2?"0"+Y:Y}W.get=function(_){var G,Z;switch(_.substring(0,3).toLowerCase()){case"hsl":G=W.get.hsl(_),Z="hsl";break;case"hwb":G=W.get.hwb(_),Z="hwb";break;default:G=W.get.rgb(_),Z="rgb"}return G?{model:Z,value:G}:null},W.get.rgb=function(_){if(!_)return null;var j,P,K,E=[0,0,0,1];if(j=_.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(K=j[2],j=j[1],P=0;P<3;P++){var pe=2*P;E[P]=parseInt(j.slice(pe,pe+2),16)}K&&(E[3]=parseInt(K,16)/255)}else if(j=_.match(/^#([a-f0-9]{3,4})$/i)){for(K=(j=j[1])[3],P=0;P<3;P++)E[P]=parseInt(j[P]+j[P],16);K&&(E[3]=parseInt(K+K,16)/255)}else if(j=_.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(P=0;P<3;P++)E[P]=parseInt(j[P+1],0);j[4]&&(E[3]=j[5]?.01*parseFloat(j[4]):parseFloat(j[4]))}else{if(!(j=_.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)))return(j=_.match(/^(\w+)$/))?"transparent"===j[1]?[0,0,0,0]:N.call(o,j[1])?((E=o[j[1]])[3]=1,E):null:null;for(P=0;P<3;P++)E[P]=Math.round(2.55*parseFloat(j[P+1]));j[4]&&(E[3]=j[5]?.01*parseFloat(j[4]):parseFloat(j[4]))}for(P=0;P<3;P++)E[P]=M(E[P],0,255);return E[3]=M(E[3],0,1),E},W.get.hsl=function(_){if(!_)return null;var G=_.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(G){var Z=parseFloat(G[4]);return[(parseFloat(G[1])%360+360)%360,M(parseFloat(G[2]),0,100),M(parseFloat(G[3]),0,100),M(isNaN(Z)?1:Z,0,1)]}return null},W.get.hwb=function(_){if(!_)return null;var G=_.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(G){var Z=parseFloat(G[4]);return[(parseFloat(G[1])%360+360)%360,M(parseFloat(G[2]),0,100),M(parseFloat(G[3]),0,100),M(isNaN(Z)?1:Z,0,1)]}return null},W.to.hex=function(){var _=x(arguments);return"#"+U(_[0])+U(_[1])+U(_[2])+(_[3]<1?U(Math.round(255*_[3])):"")},W.to.rgb=function(){var _=x(arguments);return _.length<4||1===_[3]?"rgb("+Math.round(_[0])+", "+Math.round(_[1])+", "+Math.round(_[2])+")":"rgba("+Math.round(_[0])+", "+Math.round(_[1])+", "+Math.round(_[2])+", "+_[3]+")"},W.to.rgb.percent=function(){var _=x(arguments),Y=Math.round(_[0]/255*100),G=Math.round(_[1]/255*100),Z=Math.round(_[2]/255*100);return _.length<4||1===_[3]?"rgb("+Y+"%, "+G+"%, "+Z+"%)":"rgba("+Y+"%, "+G+"%, "+Z+"%, "+_[3]+")"},W.to.hsl=function(){var _=x(arguments);return _.length<4||1===_[3]?"hsl("+_[0]+", "+_[1]+"%, "+_[2]+"%)":"hsla("+_[0]+", "+_[1]+"%, "+_[2]+"%, "+_[3]+")"},W.to.hwb=function(){var _=x(arguments),Y="";return _.length>=4&&1!==_[3]&&(Y=", "+_[3]),"hwb("+_[0]+", "+_[1]+"%, "+_[2]+"%"+Y+")"},W.to.keyword=function(_){return ge[_.slice(0,3)]}},3608:(Qe,Fe,w)=>{const o=w(9655),x=w(798),N=["keyword","gray","hex"],ge={};for(const S of Object.keys(x))ge[[...x[S].labels].sort().join("")]=S;const R={};function W(S,B){if(!(this instanceof W))return new W(S,B);if(B&&B in N&&(B=null),B&&!(B in x))throw new Error("Unknown model: "+B);let E,j;if(null==S)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(S instanceof W)this.model=S.model,this.color=[...S.color],this.valpha=S.valpha;else if("string"==typeof S){const P=o.get(S);if(null===P)throw new Error("Unable to parse color from string: "+S);this.model=P.model,j=x[this.model].channels,this.color=P.value.slice(0,j),this.valpha="number"==typeof P.value[j]?P.value[j]:1}else if(S.length>0){this.model=B||"rgb",j=x[this.model].channels;const P=Array.prototype.slice.call(S,0,j);this.color=Z(P,j),this.valpha="number"==typeof S[j]?S[j]:1}else if("number"==typeof S)this.model="rgb",this.color=[S>>16&255,S>>8&255,255&S],this.valpha=1;else{this.valpha=1;const P=Object.keys(S);"alpha"in S&&(P.splice(P.indexOf("alpha"),1),this.valpha="number"==typeof S.alpha?S.alpha:0);const K=P.sort().join("");if(!(K in ge))throw new Error("Unable to parse color from object: "+JSON.stringify(S));this.model=ge[K];const{labels:pe}=x[this.model],ke=[];for(E=0;E(S%360+360)%360),saturationl:_("hsl",1,Y(100)),lightness:_("hsl",2,Y(100)),saturationv:_("hsv",1,Y(100)),value:_("hsv",2,Y(100)),chroma:_("hcg",1,Y(100)),gray:_("hcg",2,Y(100)),white:_("hwb",1,Y(100)),wblack:_("hwb",2,Y(100)),cyan:_("cmyk",0,Y(100)),magenta:_("cmyk",1,Y(100)),yellow:_("cmyk",2,Y(100)),black:_("cmyk",3,Y(100)),x:_("xyz",0,Y(95.047)),y:_("xyz",1,Y(100)),z:_("xyz",2,Y(108.833)),l:_("lab",0,Y(100)),a:_("lab",1),b:_("lab",2),keyword(S){return void 0!==S?new W(S):x[this.model].keyword(this.color)},hex(S){return void 0!==S?new W(S):o.to.hex(this.rgb().round().color)},hexa(S){if(void 0!==S)return new W(S);const B=this.rgb().round().color;let E=Math.round(255*this.valpha).toString(16).toUpperCase();return 1===E.length&&(E="0"+E),o.to.hex(B)+E},rgbNumber(){const S=this.rgb().color;return(255&S[0])<<16|(255&S[1])<<8|255&S[2]},luminosity(){const S=this.rgb().color,B=[];for(const[E,j]of S.entries()){const P=j/255;B[E]=P<=.04045?P/12.92:((P+.055)/1.055)**2.4}return.2126*B[0]+.7152*B[1]+.0722*B[2]},contrast(S){const B=this.luminosity(),E=S.luminosity();return B>E?(B+.05)/(E+.05):(E+.05)/(B+.05)},level(S){const B=this.contrast(S);return B>=7?"AAA":B>=4.5?"AA":""},isDark(){const S=this.rgb().color;return(2126*S[0]+7152*S[1]+722*S[2])/1e4<128},isLight(){return!this.isDark()},negate(){const S=this.rgb();for(let B=0;B<3;B++)S.color[B]=255-S.color[B];return S},lighten(S){const B=this.hsl();return B.color[2]+=B.color[2]*S,B},darken(S){const B=this.hsl();return B.color[2]-=B.color[2]*S,B},saturate(S){const B=this.hsl();return B.color[1]+=B.color[1]*S,B},desaturate(S){const B=this.hsl();return B.color[1]-=B.color[1]*S,B},whiten(S){const B=this.hwb();return B.color[1]+=B.color[1]*S,B},blacken(S){const B=this.hwb();return B.color[2]+=B.color[2]*S,B},grayscale(){const S=this.rgb().color,B=.3*S[0]+.59*S[1]+.11*S[2];return W.rgb(B,B,B)},fade(S){return this.alpha(this.valpha-this.valpha*S)},opaquer(S){return this.alpha(this.valpha+this.valpha*S)},rotate(S){const B=this.hsl();let E=B.color[0];return E=(E+S)%360,E=E<0?360+E:E,B.color[0]=E,B},mix(S,B){if(!S||!S.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof S);const E=S.rgb(),j=this.rgb(),P=void 0===B?.5:B,K=2*P-1,pe=E.alpha()-j.alpha(),ke=((K*pe==-1?K:(K+pe)/(1+K*pe))+1)/2,Te=1-ke;return W.rgb(ke*E.red()+Te*j.red(),ke*E.green()+Te*j.green(),ke*E.blue()+Te*j.blue(),E.alpha()*P+j.alpha()*(1-P))}};for(const S of Object.keys(x)){if(N.includes(S))continue;const{channels:B}=x[S];W.prototype[S]=function(...E){return this.model===S?new W(this):new W(E.length>0?E:[...G(x[this.model][S].raw(this.color)),this.valpha],S)},W[S]=function(...E){let j=E[0];return"number"==typeof j&&(j=Z(E,B)),new W(j,S)}}function U(S){return function(B){return function M(S,B){return Number(S.toFixed(B))}(B,S)}}function _(S,B,E){S=Array.isArray(S)?S:[S];for(const j of S)(R[j]||(R[j]=[]))[B]=E;return S=S[0],function(j){let P;return void 0!==j?(E&&(j=E(j)),P=this[S](),P.color[B]=j,P):(P=this[S]().color[B],E&&(P=E(P)),P)}}function Y(S){return function(B){return Math.max(0,Math.min(S,B))}}function G(S){return Array.isArray(S)?S:[S]}function Z(S,B){for(let E=0;E{const o=w(1382),x={};for(const R of Object.keys(o))x[o[R]]=R;const N={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};Qe.exports=N;for(const R of Object.keys(N)){if(!("channels"in N[R]))throw new Error("missing channels property: "+R);if(!("labels"in N[R]))throw new Error("missing channel labels property: "+R);if(N[R].labels.length!==N[R].channels)throw new Error("channel and label counts mismatch: "+R);const{channels:W,labels:M}=N[R];delete N[R].channels,delete N[R].labels,Object.defineProperty(N[R],"channels",{value:W}),Object.defineProperty(N[R],"labels",{value:M})}function ge(R,W){return(R[0]-W[0])**2+(R[1]-W[1])**2+(R[2]-W[2])**2}N.rgb.hsl=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.min(W,M,U),Y=Math.max(W,M,U),G=Y-_;let Z,S;Y===_?Z=0:W===Y?Z=(M-U)/G:M===Y?Z=2+(U-W)/G:U===Y&&(Z=4+(W-M)/G),Z=Math.min(60*Z,360),Z<0&&(Z+=360);const B=(_+Y)/2;return S=Y===_?0:B<=.5?G/(Y+_):G/(2-Y-_),[Z,100*S,100*B]},N.rgb.hsv=function(R){let W,M,U,_,Y;const G=R[0]/255,Z=R[1]/255,S=R[2]/255,B=Math.max(G,Z,S),E=B-Math.min(G,Z,S),j=function(P){return(B-P)/6/E+.5};return 0===E?(_=0,Y=0):(Y=E/B,W=j(G),M=j(Z),U=j(S),G===B?_=U-M:Z===B?_=1/3+W-U:S===B&&(_=2/3+M-W),_<0?_+=1:_>1&&(_-=1)),[360*_,100*Y,100*B]},N.rgb.hwb=function(R){const W=R[0],M=R[1];let U=R[2];const _=N.rgb.hsl(R)[0],Y=1/255*Math.min(W,Math.min(M,U));return U=1-1/255*Math.max(W,Math.max(M,U)),[_,100*Y,100*U]},N.rgb.cmyk=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.min(1-W,1-M,1-U);return[100*((1-W-_)/(1-_)||0),100*((1-M-_)/(1-_)||0),100*((1-U-_)/(1-_)||0),100*_]},N.rgb.keyword=function(R){const W=x[R];if(W)return W;let U,M=1/0;for(const _ of Object.keys(o)){const G=ge(R,o[_]);G.04045?((W+.055)/1.055)**2.4:W/12.92,M=M>.04045?((M+.055)/1.055)**2.4:M/12.92,U=U>.04045?((U+.055)/1.055)**2.4:U/12.92,[100*(.4124*W+.3576*M+.1805*U),100*(.2126*W+.7152*M+.0722*U),100*(.0193*W+.1192*M+.9505*U)]},N.rgb.lab=function(R){const W=N.rgb.xyz(R);let M=W[0],U=W[1],_=W[2];return M/=95.047,U/=100,_/=108.883,M=M>.008856?M**(1/3):7.787*M+16/116,U=U>.008856?U**(1/3):7.787*U+16/116,_=_>.008856?_**(1/3):7.787*_+16/116,[116*U-16,500*(M-U),200*(U-_)]},N.hsl.rgb=function(R){const W=R[0]/360,M=R[1]/100,U=R[2]/100;let _,Y,G;if(0===M)return G=255*U,[G,G,G];_=U<.5?U*(1+M):U+M-U*M;const Z=2*U-_,S=[0,0,0];for(let B=0;B<3;B++)Y=W+1/3*-(B-1),Y<0&&Y++,Y>1&&Y--,G=6*Y<1?Z+6*(_-Z)*Y:2*Y<1?_:3*Y<2?Z+(_-Z)*(2/3-Y)*6:Z,S[B]=255*G;return S},N.hsl.hsv=function(R){const W=R[0];let M=R[1]/100,U=R[2]/100,_=M;const Y=Math.max(U,.01);return U*=2,M*=U<=1?U:2-U,_*=Y<=1?Y:2-Y,[W,100*(0===U?2*_/(Y+_):2*M/(U+M)),(U+M)/2*100]},N.hsv.rgb=function(R){const W=R[0]/60,M=R[1]/100;let U=R[2]/100;const _=Math.floor(W)%6,Y=W-Math.floor(W),G=255*U*(1-M),Z=255*U*(1-M*Y),S=255*U*(1-M*(1-Y));switch(U*=255,_){case 0:return[U,S,G];case 1:return[Z,U,G];case 2:return[G,U,S];case 3:return[G,Z,U];case 4:return[S,G,U];case 5:return[U,G,Z]}},N.hsv.hsl=function(R){const W=R[0],M=R[1]/100,U=R[2]/100,_=Math.max(U,.01);let Y,G;G=(2-M)*U;const Z=(2-M)*_;return Y=M*_,Y/=Z<=1?Z:2-Z,Y=Y||0,G/=2,[W,100*Y,100*G]},N.hwb.rgb=function(R){const W=R[0]/360;let M=R[1]/100,U=R[2]/100;const _=M+U;let Y;_>1&&(M/=_,U/=_);const G=Math.floor(6*W),Z=1-U;Y=6*W-G,0!=(1&G)&&(Y=1-Y);const S=M+Y*(Z-M);let B,E,j;switch(G){default:case 6:case 0:B=Z,E=S,j=M;break;case 1:B=S,E=Z,j=M;break;case 2:B=M,E=Z,j=S;break;case 3:B=M,E=S,j=Z;break;case 4:B=S,E=M,j=Z;break;case 5:B=Z,E=M,j=S}return[255*B,255*E,255*j]},N.cmyk.rgb=function(R){const M=R[1]/100,U=R[2]/100,_=R[3]/100;return[255*(1-Math.min(1,R[0]/100*(1-_)+_)),255*(1-Math.min(1,M*(1-_)+_)),255*(1-Math.min(1,U*(1-_)+_))]},N.xyz.rgb=function(R){const W=R[0]/100,M=R[1]/100,U=R[2]/100;let _,Y,G;return _=3.2406*W+-1.5372*M+-.4986*U,Y=-.9689*W+1.8758*M+.0415*U,G=.0557*W+-.204*M+1.057*U,_=_>.0031308?1.055*_**(1/2.4)-.055:12.92*_,Y=Y>.0031308?1.055*Y**(1/2.4)-.055:12.92*Y,G=G>.0031308?1.055*G**(1/2.4)-.055:12.92*G,_=Math.min(Math.max(0,_),1),Y=Math.min(Math.max(0,Y),1),G=Math.min(Math.max(0,G),1),[255*_,255*Y,255*G]},N.xyz.lab=function(R){let W=R[0],M=R[1],U=R[2];return W/=95.047,M/=100,U/=108.883,W=W>.008856?W**(1/3):7.787*W+16/116,M=M>.008856?M**(1/3):7.787*M+16/116,U=U>.008856?U**(1/3):7.787*U+16/116,[116*M-16,500*(W-M),200*(M-U)]},N.lab.xyz=function(R){let _,Y,G;Y=(R[0]+16)/116,_=R[1]/500+Y,G=Y-R[2]/200;const Z=Y**3,S=_**3,B=G**3;return Y=Z>.008856?Z:(Y-16/116)/7.787,_=S>.008856?S:(_-16/116)/7.787,G=B>.008856?B:(G-16/116)/7.787,_*=95.047,Y*=100,G*=108.883,[_,Y,G]},N.lab.lch=function(R){const W=R[0],M=R[1],U=R[2];let _;return _=360*Math.atan2(U,M)/2/Math.PI,_<0&&(_+=360),[W,Math.sqrt(M*M+U*U),_]},N.lch.lab=function(R){const M=R[1],_=R[2]/360*2*Math.PI;return[R[0],M*Math.cos(_),M*Math.sin(_)]},N.rgb.ansi16=function(R,W=null){const[M,U,_]=R;let Y=null===W?N.rgb.hsv(R)[2]:W;if(Y=Math.round(Y/50),0===Y)return 30;let G=30+(Math.round(_/255)<<2|Math.round(U/255)<<1|Math.round(M/255));return 2===Y&&(G+=60),G},N.hsv.ansi16=function(R){return N.rgb.ansi16(N.hsv.rgb(R),R[2])},N.rgb.ansi256=function(R){const W=R[0],M=R[1],U=R[2];return W===M&&M===U?W<8?16:W>248?231:Math.round((W-8)/247*24)+232:16+36*Math.round(W/255*5)+6*Math.round(M/255*5)+Math.round(U/255*5)},N.ansi16.rgb=function(R){let W=R%10;if(0===W||7===W)return R>50&&(W+=3.5),W=W/10.5*255,[W,W,W];const M=.5*(1+~~(R>50));return[(1&W)*M*255,(W>>1&1)*M*255,(W>>2&1)*M*255]},N.ansi256.rgb=function(R){if(R>=232){const Y=10*(R-232)+8;return[Y,Y,Y]}let W;return R-=16,[Math.floor(R/36)/5*255,Math.floor((W=R%36)/6)/5*255,W%6/5*255]},N.rgb.hex=function(R){const M=(((255&Math.round(R[0]))<<16)+((255&Math.round(R[1]))<<8)+(255&Math.round(R[2]))).toString(16).toUpperCase();return"000000".substring(M.length)+M},N.hex.rgb=function(R){const W=R.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!W)return[0,0,0];let M=W[0];3===W[0].length&&(M=M.split("").map(Z=>Z+Z).join(""));const U=parseInt(M,16);return[U>>16&255,U>>8&255,255&U]},N.rgb.hcg=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.max(Math.max(W,M),U),Y=Math.min(Math.min(W,M),U),G=_-Y;let Z,S;return Z=G<1?Y/(1-G):0,S=G<=0?0:_===W?(M-U)/G%6:_===M?2+(U-W)/G:4+(W-M)/G,S/=6,S%=1,[360*S,100*G,100*Z]},N.hsl.hcg=function(R){const W=R[1]/100,M=R[2]/100,U=M<.5?2*W*M:2*W*(1-M);let _=0;return U<1&&(_=(M-.5*U)/(1-U)),[R[0],100*U,100*_]},N.hsv.hcg=function(R){const M=R[2]/100,U=R[1]/100*M;let _=0;return U<1&&(_=(M-U)/(1-U)),[R[0],100*U,100*_]},N.hcg.rgb=function(R){const M=R[1]/100,U=R[2]/100;if(0===M)return[255*U,255*U,255*U];const _=[0,0,0],Y=R[0]/360%1*6,G=Y%1,Z=1-G;let S=0;switch(Math.floor(Y)){case 0:_[0]=1,_[1]=G,_[2]=0;break;case 1:_[0]=Z,_[1]=1,_[2]=0;break;case 2:_[0]=0,_[1]=1,_[2]=G;break;case 3:_[0]=0,_[1]=Z,_[2]=1;break;case 4:_[0]=G,_[1]=0,_[2]=1;break;default:_[0]=1,_[1]=0,_[2]=Z}return S=(1-M)*U,[255*(M*_[0]+S),255*(M*_[1]+S),255*(M*_[2]+S)]},N.hcg.hsv=function(R){const W=R[1]/100,U=W+R[2]/100*(1-W);let _=0;return U>0&&(_=W/U),[R[0],100*_,100*U]},N.hcg.hsl=function(R){const W=R[1]/100,U=R[2]/100*(1-W)+.5*W;let _=0;return U>0&&U<.5?_=W/(2*U):U>=.5&&U<1&&(_=W/(2*(1-U))),[R[0],100*_,100*U]},N.hcg.hwb=function(R){const W=R[1]/100,U=W+R[2]/100*(1-W);return[R[0],100*(U-W),100*(1-U)]},N.hwb.hcg=function(R){const U=1-R[2]/100,_=U-R[1]/100;let Y=0;return _<1&&(Y=(U-_)/(1-_)),[R[0],100*_,100*Y]},N.apple.rgb=function(R){return[R[0]/65535*255,R[1]/65535*255,R[2]/65535*255]},N.rgb.apple=function(R){return[R[0]/255*65535,R[1]/255*65535,R[2]/255*65535]},N.gray.rgb=function(R){return[R[0]/100*255,R[0]/100*255,R[0]/100*255]},N.gray.hsl=function(R){return[0,0,R[0]]},N.gray.hsv=N.gray.hsl,N.gray.hwb=function(R){return[0,100,R[0]]},N.gray.cmyk=function(R){return[0,0,0,R[0]]},N.gray.lab=function(R){return[R[0],0,0]},N.gray.hex=function(R){const W=255&Math.round(R[0]/100*255),U=((W<<16)+(W<<8)+W).toString(16).toUpperCase();return"000000".substring(U.length)+U},N.rgb.gray=function(R){return[(R[0]+R[1]+R[2])/3/255*100]}},798:(Qe,Fe,w)=>{const o=w(2539),x=w(2535),N={};Object.keys(o).forEach(M=>{N[M]={},Object.defineProperty(N[M],"channels",{value:o[M].channels}),Object.defineProperty(N[M],"labels",{value:o[M].labels});const U=x(M);Object.keys(U).forEach(Y=>{const G=U[Y];N[M][Y]=function W(M){const U=function(..._){const Y=_[0];if(null==Y)return Y;Y.length>1&&(_=Y);const G=M(_);if("object"==typeof G)for(let Z=G.length,S=0;S1&&(_=Y),M(_))};return"conversion"in M&&(U.conversion=M.conversion),U}(G)})}),Qe.exports=N},2535:(Qe,Fe,w)=>{const o=w(2539);function ge(W,M){return function(U){return M(W(U))}}function R(W,M){const U=[M[W].parent,W];let _=o[M[W].parent][W],Y=M[W].parent;for(;M[Y].parent;)U.unshift(M[Y].parent),_=ge(o[M[Y].parent][Y],_),Y=M[Y].parent;return _.conversion=U,_}Qe.exports=function(W){const M=function N(W){const M=function x(){const W={},M=Object.keys(o);for(let U=M.length,_=0;_{"use strict";Qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},1135:(Qe,Fe,w)=>{"use strict";w.d(Fe,{X:()=>x});var o=w(7579);class x extends o.x{constructor(ge){super(),this._value=ge}get value(){return this.getValue()}_subscribe(ge){const R=super._subscribe(ge);return!R.closed&&ge.next(this._value),R}getValue(){const{hasError:ge,thrownError:R,_value:W}=this;if(ge)throw R;return this._throwIfClosed(),W}next(ge){super.next(this._value=ge)}}},9751:(Qe,Fe,w)=>{"use strict";w.d(Fe,{y:()=>U});var o=w(2961),x=w(727),N=w(8822),ge=w(9635),R=w(2416),W=w(576),M=w(2806);let U=(()=>{class Z{constructor(B){B&&(this._subscribe=B)}lift(B){const E=new Z;return E.source=this,E.operator=B,E}subscribe(B,E,j){const P=function G(Z){return Z&&Z instanceof o.Lv||function Y(Z){return Z&&(0,W.m)(Z.next)&&(0,W.m)(Z.error)&&(0,W.m)(Z.complete)}(Z)&&(0,x.Nn)(Z)}(B)?B:new o.Hp(B,E,j);return(0,M.x)(()=>{const{operator:K,source:pe}=this;P.add(K?K.call(P,pe):pe?this._subscribe(P):this._trySubscribe(P))}),P}_trySubscribe(B){try{return this._subscribe(B)}catch(E){B.error(E)}}forEach(B,E){return new(E=_(E))((j,P)=>{const K=new o.Hp({next:pe=>{try{B(pe)}catch(ke){P(ke),K.unsubscribe()}},error:P,complete:j});this.subscribe(K)})}_subscribe(B){var E;return null===(E=this.source)||void 0===E?void 0:E.subscribe(B)}[N.L](){return this}pipe(...B){return(0,ge.U)(B)(this)}toPromise(B){return new(B=_(B))((E,j)=>{let P;this.subscribe(K=>P=K,K=>j(K),()=>E(P))})}}return Z.create=S=>new Z(S),Z})();function _(Z){var S;return null!==(S=Z??R.v.Promise)&&void 0!==S?S:Promise}},7579:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>M});var o=w(9751),x=w(727);const ge=(0,w(3888).d)(_=>function(){_(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var R=w(8737),W=w(2806);let M=(()=>{class _ extends o.y{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(G){const Z=new U(this,this);return Z.operator=G,Z}_throwIfClosed(){if(this.closed)throw new ge}next(G){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const Z of this.currentObservers)Z.next(G)}})}error(G){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=G;const{observers:Z}=this;for(;Z.length;)Z.shift().error(G)}})}complete(){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:G}=this;for(;G.length;)G.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var G;return(null===(G=this.observers)||void 0===G?void 0:G.length)>0}_trySubscribe(G){return this._throwIfClosed(),super._trySubscribe(G)}_subscribe(G){return this._throwIfClosed(),this._checkFinalizedStatuses(G),this._innerSubscribe(G)}_innerSubscribe(G){const{hasError:Z,isStopped:S,observers:B}=this;return Z||S?x.Lc:(this.currentObservers=null,B.push(G),new x.w0(()=>{this.currentObservers=null,(0,R.P)(B,G)}))}_checkFinalizedStatuses(G){const{hasError:Z,thrownError:S,isStopped:B}=this;Z?G.error(S):B&&G.complete()}asObservable(){const G=new o.y;return G.source=this,G}}return _.create=(Y,G)=>new U(Y,G),_})();class U extends M{constructor(Y,G){super(),this.destination=Y,this.source=G}next(Y){var G,Z;null===(Z=null===(G=this.destination)||void 0===G?void 0:G.next)||void 0===Z||Z.call(G,Y)}error(Y){var G,Z;null===(Z=null===(G=this.destination)||void 0===G?void 0:G.error)||void 0===Z||Z.call(G,Y)}complete(){var Y,G;null===(G=null===(Y=this.destination)||void 0===Y?void 0:Y.complete)||void 0===G||G.call(Y)}_subscribe(Y){var G,Z;return null!==(Z=null===(G=this.source)||void 0===G?void 0:G.subscribe(Y))&&void 0!==Z?Z:x.Lc}}},2961:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Hp:()=>j,Lv:()=>Z});var o=w(576),x=w(727),N=w(2416),ge=w(7849);function R(){}const W=_("C",void 0,void 0);function _(Te,ie,Be){return{kind:Te,value:ie,error:Be}}var Y=w(3410),G=w(2806);class Z extends x.w0{constructor(ie){super(),this.isStopped=!1,ie?(this.destination=ie,(0,x.Nn)(ie)&&ie.add(this)):this.destination=ke}static create(ie,Be,re){return new j(ie,Be,re)}next(ie){this.isStopped?pe(function U(Te){return _("N",Te,void 0)}(ie),this):this._next(ie)}error(ie){this.isStopped?pe(function M(Te){return _("E",void 0,Te)}(ie),this):(this.isStopped=!0,this._error(ie))}complete(){this.isStopped?pe(W,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(ie){this.destination.next(ie)}_error(ie){try{this.destination.error(ie)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const S=Function.prototype.bind;function B(Te,ie){return S.call(Te,ie)}class E{constructor(ie){this.partialObserver=ie}next(ie){const{partialObserver:Be}=this;if(Be.next)try{Be.next(ie)}catch(re){P(re)}}error(ie){const{partialObserver:Be}=this;if(Be.error)try{Be.error(ie)}catch(re){P(re)}else P(ie)}complete(){const{partialObserver:ie}=this;if(ie.complete)try{ie.complete()}catch(Be){P(Be)}}}class j extends Z{constructor(ie,Be,re){let oe;if(super(),(0,o.m)(ie)||!ie)oe={next:ie??void 0,error:Be??void 0,complete:re??void 0};else{let be;this&&N.v.useDeprecatedNextContext?(be=Object.create(ie),be.unsubscribe=()=>this.unsubscribe(),oe={next:ie.next&&B(ie.next,be),error:ie.error&&B(ie.error,be),complete:ie.complete&&B(ie.complete,be)}):oe=ie}this.destination=new E(oe)}}function P(Te){N.v.useDeprecatedSynchronousErrorHandling?(0,G.O)(Te):(0,ge.h)(Te)}function pe(Te,ie){const{onStoppedNotification:Be}=N.v;Be&&Y.z.setTimeout(()=>Be(Te,ie))}const ke={closed:!0,next:R,error:function K(Te){throw Te},complete:R}},727:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Lc:()=>W,w0:()=>R,Nn:()=>M});var o=w(576);const N=(0,w(3888).d)(_=>function(G){_(this),this.message=G?`${G.length} errors occurred during unsubscription:\n${G.map((Z,S)=>`${S+1}) ${Z.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=G});var ge=w(8737);class R{constructor(Y){this.initialTeardown=Y,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let Y;if(!this.closed){this.closed=!0;const{_parentage:G}=this;if(G)if(this._parentage=null,Array.isArray(G))for(const B of G)B.remove(this);else G.remove(this);const{initialTeardown:Z}=this;if((0,o.m)(Z))try{Z()}catch(B){Y=B instanceof N?B.errors:[B]}const{_finalizers:S}=this;if(S){this._finalizers=null;for(const B of S)try{U(B)}catch(E){Y=Y??[],E instanceof N?Y=[...Y,...E.errors]:Y.push(E)}}if(Y)throw new N(Y)}}add(Y){var G;if(Y&&Y!==this)if(this.closed)U(Y);else{if(Y instanceof R){if(Y.closed||Y._hasParent(this))return;Y._addParent(this)}(this._finalizers=null!==(G=this._finalizers)&&void 0!==G?G:[]).push(Y)}}_hasParent(Y){const{_parentage:G}=this;return G===Y||Array.isArray(G)&&G.includes(Y)}_addParent(Y){const{_parentage:G}=this;this._parentage=Array.isArray(G)?(G.push(Y),G):G?[G,Y]:Y}_removeParent(Y){const{_parentage:G}=this;G===Y?this._parentage=null:Array.isArray(G)&&(0,ge.P)(G,Y)}remove(Y){const{_finalizers:G}=this;G&&(0,ge.P)(G,Y),Y instanceof R&&Y._removeParent(this)}}R.EMPTY=(()=>{const _=new R;return _.closed=!0,_})();const W=R.EMPTY;function M(_){return _ instanceof R||_&&"closed"in _&&(0,o.m)(_.remove)&&(0,o.m)(_.add)&&(0,o.m)(_.unsubscribe)}function U(_){(0,o.m)(_)?_():_.unsubscribe()}},2416:(Qe,Fe,w)=>{"use strict";w.d(Fe,{v:()=>o});const o={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1}},515:(Qe,Fe,w)=>{"use strict";w.d(Fe,{E:()=>x});const x=new(w(9751).y)(R=>R.complete())},2076:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>re});var o=w(8421),x=w(9672),N=w(4482),ge=w(5403);function R(oe,be=0){return(0,N.e)((Ne,Q)=>{Ne.subscribe((0,ge.x)(Q,T=>(0,x.f)(Q,oe,()=>Q.next(T),be),()=>(0,x.f)(Q,oe,()=>Q.complete(),be),T=>(0,x.f)(Q,oe,()=>Q.error(T),be)))})}function W(oe,be=0){return(0,N.e)((Ne,Q)=>{Q.add(oe.schedule(()=>Ne.subscribe(Q),be))})}var _=w(9751),G=w(2202),Z=w(576);function B(oe,be){if(!oe)throw new Error("Iterable cannot be null");return new _.y(Ne=>{(0,x.f)(Ne,be,()=>{const Q=oe[Symbol.asyncIterator]();(0,x.f)(Ne,be,()=>{Q.next().then(T=>{T.done?Ne.complete():Ne.next(T.value)})},0,!0)})})}var E=w(3670),j=w(8239),P=w(1144),K=w(6495),pe=w(2206),ke=w(4532),Te=w(3260);function re(oe,be){return be?function Be(oe,be){if(null!=oe){if((0,E.c)(oe))return function M(oe,be){return(0,o.Xf)(oe).pipe(W(be),R(be))}(oe,be);if((0,P.z)(oe))return function Y(oe,be){return new _.y(Ne=>{let Q=0;return be.schedule(function(){Q===oe.length?Ne.complete():(Ne.next(oe[Q++]),Ne.closed||this.schedule())})})}(oe,be);if((0,j.t)(oe))return function U(oe,be){return(0,o.Xf)(oe).pipe(W(be),R(be))}(oe,be);if((0,pe.D)(oe))return B(oe,be);if((0,K.T)(oe))return function S(oe,be){return new _.y(Ne=>{let Q;return(0,x.f)(Ne,be,()=>{Q=oe[G.h](),(0,x.f)(Ne,be,()=>{let T,k;try{({value:T,done:k}=Q.next())}catch(O){return void Ne.error(O)}k?Ne.complete():Ne.next(T)},0,!0)}),()=>(0,Z.m)(Q?.return)&&Q.return()})}(oe,be);if((0,Te.L)(oe))return function ie(oe,be){return B((0,Te.Q)(oe),be)}(oe,be)}throw(0,ke.z)(oe)}(oe,be):(0,o.Xf)(oe)}},8421:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Xf:()=>S});var o=w(655),x=w(1144),N=w(8239),ge=w(9751),R=w(3670),W=w(2206),M=w(4532),U=w(6495),_=w(3260),Y=w(576),G=w(7849),Z=w(8822);function S(Te){if(Te instanceof ge.y)return Te;if(null!=Te){if((0,R.c)(Te))return function B(Te){return new ge.y(ie=>{const Be=Te[Z.L]();if((0,Y.m)(Be.subscribe))return Be.subscribe(ie);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(Te);if((0,x.z)(Te))return function E(Te){return new ge.y(ie=>{for(let Be=0;Be{Te.then(Be=>{ie.closed||(ie.next(Be),ie.complete())},Be=>ie.error(Be)).then(null,G.h)})}(Te);if((0,W.D)(Te))return K(Te);if((0,U.T)(Te))return function P(Te){return new ge.y(ie=>{for(const Be of Te)if(ie.next(Be),ie.closed)return;ie.complete()})}(Te);if((0,_.L)(Te))return function pe(Te){return K((0,_.Q)(Te))}(Te)}throw(0,M.z)(Te)}function K(Te){return new ge.y(ie=>{(function ke(Te,ie){var Be,re,oe,be;return(0,o.mG)(this,void 0,void 0,function*(){try{for(Be=(0,o.KL)(Te);!(re=yield Be.next()).done;)if(ie.next(re.value),ie.closed)return}catch(Ne){oe={error:Ne}}finally{try{re&&!re.done&&(be=Be.return)&&(yield be.call(Be))}finally{if(oe)throw oe.error}}ie.complete()})})(Te,ie).catch(Be=>ie.error(Be))})}},9646:(Qe,Fe,w)=>{"use strict";w.d(Fe,{of:()=>N});var o=w(3269),x=w(2076);function N(...ge){const R=(0,o.yG)(ge);return(0,x.D)(ge,R)}},5403:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>x});var o=w(2961);function x(ge,R,W,M,U){return new N(ge,R,W,M,U)}class N extends o.Lv{constructor(R,W,M,U,_,Y){super(R),this.onFinalize=_,this.shouldUnsubscribe=Y,this._next=W?function(G){try{W(G)}catch(Z){R.error(Z)}}:super._next,this._error=U?function(G){try{U(G)}catch(Z){R.error(Z)}finally{this.unsubscribe()}}:super._error,this._complete=M?function(){try{M()}catch(G){R.error(G)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var R;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:W}=this;super.unsubscribe(),!W&&(null===(R=this.onFinalize)||void 0===R||R.call(this))}}}},4351:(Qe,Fe,w)=>{"use strict";w.d(Fe,{b:()=>N});var o=w(5577),x=w(576);function N(ge,R){return(0,x.m)(R)?(0,o.z)(ge,R,1):(0,o.z)(ge,1)}},1884:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>ge});var o=w(4671),x=w(4482),N=w(5403);function ge(W,M=o.y){return W=W??R,(0,x.e)((U,_)=>{let Y,G=!0;U.subscribe((0,N.x)(_,Z=>{const S=M(Z);(G||!W(Y,S))&&(G=!1,Y=S,_.next(Z))}))})}function R(W,M){return W===M}},9300:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>N});var o=w(4482),x=w(5403);function N(ge,R){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>ge.call(R,_,U++)&&M.next(_)))})}},8746:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>x});var o=w(4482);function x(N){return(0,o.e)((ge,R)=>{try{ge.subscribe(R)}finally{R.add(N)}})}},4004:(Qe,Fe,w)=>{"use strict";w.d(Fe,{U:()=>N});var o=w(4482),x=w(5403);function N(ge,R){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>{M.next(ge.call(R,_,U++))}))})}},8189:(Qe,Fe,w)=>{"use strict";w.d(Fe,{J:()=>N});var o=w(5577),x=w(4671);function N(ge=1/0){return(0,o.z)(x.y,ge)}},5577:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>U});var o=w(4004),x=w(8421),N=w(4482),ge=w(9672),R=w(5403),M=w(576);function U(_,Y,G=1/0){return(0,M.m)(Y)?U((Z,S)=>(0,o.U)((B,E)=>Y(Z,B,S,E))((0,x.Xf)(_(Z,S))),G):("number"==typeof Y&&(G=Y),(0,N.e)((Z,S)=>function W(_,Y,G,Z,S,B,E,j){const P=[];let K=0,pe=0,ke=!1;const Te=()=>{ke&&!P.length&&!K&&Y.complete()},ie=re=>K{B&&Y.next(re),K++;let oe=!1;(0,x.Xf)(G(re,pe++)).subscribe((0,R.x)(Y,be=>{S?.(be),B?ie(be):Y.next(be)},()=>{oe=!0},void 0,()=>{if(oe)try{for(K--;P.length&&KBe(be)):Be(be)}Te()}catch(be){Y.error(be)}}))};return _.subscribe((0,R.x)(Y,ie,()=>{ke=!0,Te()})),()=>{j?.()}}(Z,S,_,G)))}},3099:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>R});var o=w(8421),x=w(7579),N=w(2961),ge=w(4482);function R(M={}){const{connector:U=(()=>new x.x),resetOnError:_=!0,resetOnComplete:Y=!0,resetOnRefCountZero:G=!0}=M;return Z=>{let S,B,E,j=0,P=!1,K=!1;const pe=()=>{B?.unsubscribe(),B=void 0},ke=()=>{pe(),S=E=void 0,P=K=!1},Te=()=>{const ie=S;ke(),ie?.unsubscribe()};return(0,ge.e)((ie,Be)=>{j++,!K&&!P&&pe();const re=E=E??U();Be.add(()=>{j--,0===j&&!K&&!P&&(B=W(Te,G))}),re.subscribe(Be),!S&&j>0&&(S=new N.Hp({next:oe=>re.next(oe),error:oe=>{K=!0,pe(),B=W(ke,_,oe),re.error(oe)},complete:()=>{P=!0,pe(),B=W(ke,Y),re.complete()}}),(0,o.Xf)(ie).subscribe(S))})(Z)}}function W(M,U,..._){if(!0===U)return void M();if(!1===U)return;const Y=new N.Hp({next:()=>{Y.unsubscribe(),M()}});return U(..._).subscribe(Y)}},3900:(Qe,Fe,w)=>{"use strict";w.d(Fe,{w:()=>ge});var o=w(8421),x=w(4482),N=w(5403);function ge(R,W){return(0,x.e)((M,U)=>{let _=null,Y=0,G=!1;const Z=()=>G&&!_&&U.complete();M.subscribe((0,N.x)(U,S=>{_?.unsubscribe();let B=0;const E=Y++;(0,o.Xf)(R(S,E)).subscribe(_=(0,N.x)(U,j=>U.next(W?W(S,j,E,B++):j),()=>{_=null,Z()}))},()=>{G=!0,Z()}))})}},5698:(Qe,Fe,w)=>{"use strict";w.d(Fe,{q:()=>ge});var o=w(515),x=w(4482),N=w(5403);function ge(R){return R<=0?()=>o.E:(0,x.e)((W,M)=>{let U=0;W.subscribe((0,N.x)(M,_=>{++U<=R&&(M.next(_),R<=U&&M.complete())}))})}},2529:(Qe,Fe,w)=>{"use strict";w.d(Fe,{o:()=>N});var o=w(4482),x=w(5403);function N(ge,R=!1){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>{const Y=ge(_,U++);(Y||R)&&M.next(_),!Y&&M.complete()}))})}},8505:(Qe,Fe,w)=>{"use strict";w.d(Fe,{b:()=>R});var o=w(576),x=w(4482),N=w(5403),ge=w(4671);function R(W,M,U){const _=(0,o.m)(W)||M||U?{next:W,error:M,complete:U}:W;return _?(0,x.e)((Y,G)=>{var Z;null===(Z=_.subscribe)||void 0===Z||Z.call(_);let S=!0;Y.subscribe((0,N.x)(G,B=>{var E;null===(E=_.next)||void 0===E||E.call(_,B),G.next(B)},()=>{var B;S=!1,null===(B=_.complete)||void 0===B||B.call(_),G.complete()},B=>{var E;S=!1,null===(E=_.error)||void 0===E||E.call(_,B),G.error(B)},()=>{var B,E;S&&(null===(B=_.unsubscribe)||void 0===B||B.call(_)),null===(E=_.finalize)||void 0===E||E.call(_)}))}):ge.y}},1566:(Qe,Fe,w)=>{"use strict";w.d(Fe,{P:()=>Y,z:()=>_});var o=w(727);class x extends o.w0{constructor(Z,S){super()}schedule(Z,S=0){return this}}const N={setInterval(G,Z,...S){const{delegate:B}=N;return B?.setInterval?B.setInterval(G,Z,...S):setInterval(G,Z,...S)},clearInterval(G){const{delegate:Z}=N;return(Z?.clearInterval||clearInterval)(G)},delegate:void 0};var ge=w(8737);const W={now:()=>(W.delegate||Date).now(),delegate:void 0};class M{constructor(Z,S=M.now){this.schedulerActionCtor=Z,this.now=S}schedule(Z,S=0,B){return new this.schedulerActionCtor(this,Z).schedule(B,S)}}M.now=W.now;const _=new class U extends M{constructor(Z,S=M.now){super(Z,S),this.actions=[],this._active=!1}flush(Z){const{actions:S}=this;if(this._active)return void S.push(Z);let B;this._active=!0;do{if(B=Z.execute(Z.state,Z.delay))break}while(Z=S.shift());if(this._active=!1,B){for(;Z=S.shift();)Z.unsubscribe();throw B}}}(class R extends x{constructor(Z,S){super(Z,S),this.scheduler=Z,this.work=S,this.pending=!1}schedule(Z,S=0){var B;if(this.closed)return this;this.state=Z;const E=this.id,j=this.scheduler;return null!=E&&(this.id=this.recycleAsyncId(j,E,S)),this.pending=!0,this.delay=S,this.id=null!==(B=this.id)&&void 0!==B?B:this.requestAsyncId(j,this.id,S),this}requestAsyncId(Z,S,B=0){return N.setInterval(Z.flush.bind(Z,this),B)}recycleAsyncId(Z,S,B=0){if(null!=B&&this.delay===B&&!1===this.pending)return S;null!=S&&N.clearInterval(S)}execute(Z,S){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const B=this._execute(Z,S);if(B)return B;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(Z,S){let E,B=!1;try{this.work(Z)}catch(j){B=!0,E=j||new Error("Scheduled action threw falsy error")}if(B)return this.unsubscribe(),E}unsubscribe(){if(!this.closed){const{id:Z,scheduler:S}=this,{actions:B}=S;this.work=this.state=this.scheduler=null,this.pending=!1,(0,ge.P)(B,this),null!=Z&&(this.id=this.recycleAsyncId(S,Z,null)),this.delay=null,super.unsubscribe()}}}),Y=_},3410:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>o});const o={setTimeout(x,N,...ge){const{delegate:R}=o;return R?.setTimeout?R.setTimeout(x,N,...ge):setTimeout(x,N,...ge)},clearTimeout(x){const{delegate:N}=o;return(N?.clearTimeout||clearTimeout)(x)},delegate:void 0}},2202:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>x});const x=function o(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}()},8822:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>o});const o="function"==typeof Symbol&&Symbol.observable||"@@observable"},3269:(Qe,Fe,w)=>{"use strict";w.d(Fe,{_6:()=>W,jO:()=>ge,yG:()=>R});var o=w(576),x=w(3532);function N(M){return M[M.length-1]}function ge(M){return(0,o.m)(N(M))?M.pop():void 0}function R(M){return(0,x.K)(N(M))?M.pop():void 0}function W(M,U){return"number"==typeof N(M)?M.pop():U}},4742:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>R});const{isArray:o}=Array,{getPrototypeOf:x,prototype:N,keys:ge}=Object;function R(M){if(1===M.length){const U=M[0];if(o(U))return{args:U,keys:null};if(function W(M){return M&&"object"==typeof M&&x(M)===N}(U)){const _=ge(U);return{args:_.map(Y=>U[Y]),keys:_}}}return{args:M,keys:null}}},8737:(Qe,Fe,w)=>{"use strict";function o(x,N){if(x){const ge=x.indexOf(N);0<=ge&&x.splice(ge,1)}}w.d(Fe,{P:()=>o})},3888:(Qe,Fe,w)=>{"use strict";function o(x){const ge=x(R=>{Error.call(R),R.stack=(new Error).stack});return ge.prototype=Object.create(Error.prototype),ge.prototype.constructor=ge,ge}w.d(Fe,{d:()=>o})},1810:(Qe,Fe,w)=>{"use strict";function o(x,N){return x.reduce((ge,R,W)=>(ge[R]=N[W],ge),{})}w.d(Fe,{n:()=>o})},2806:(Qe,Fe,w)=>{"use strict";w.d(Fe,{O:()=>ge,x:()=>N});var o=w(2416);let x=null;function N(R){if(o.v.useDeprecatedSynchronousErrorHandling){const W=!x;if(W&&(x={errorThrown:!1,error:null}),R(),W){const{errorThrown:M,error:U}=x;if(x=null,M)throw U}}else R()}function ge(R){o.v.useDeprecatedSynchronousErrorHandling&&x&&(x.errorThrown=!0,x.error=R)}},9672:(Qe,Fe,w)=>{"use strict";function o(x,N,ge,R=0,W=!1){const M=N.schedule(function(){ge(),W?x.add(this.schedule(null,R)):this.unsubscribe()},R);if(x.add(M),!W)return M}w.d(Fe,{f:()=>o})},4671:(Qe,Fe,w)=>{"use strict";function o(x){return x}w.d(Fe,{y:()=>o})},1144:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>o});const o=x=>x&&"number"==typeof x.length&&"function"!=typeof x},2206:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>x});var o=w(576);function x(N){return Symbol.asyncIterator&&(0,o.m)(N?.[Symbol.asyncIterator])}},576:(Qe,Fe,w)=>{"use strict";function o(x){return"function"==typeof x}w.d(Fe,{m:()=>o})},3670:(Qe,Fe,w)=>{"use strict";w.d(Fe,{c:()=>N});var o=w(8822),x=w(576);function N(ge){return(0,x.m)(ge[o.L])}},6495:(Qe,Fe,w)=>{"use strict";w.d(Fe,{T:()=>N});var o=w(2202),x=w(576);function N(ge){return(0,x.m)(ge?.[o.h])}},8239:(Qe,Fe,w)=>{"use strict";w.d(Fe,{t:()=>x});var o=w(576);function x(N){return(0,o.m)(N?.then)}},3260:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>ge,Q:()=>N});var o=w(655),x=w(576);function N(R){return(0,o.FC)(this,arguments,function*(){const M=R.getReader();try{for(;;){const{value:U,done:_}=yield(0,o.qq)(M.read());if(_)return yield(0,o.qq)(void 0);yield yield(0,o.qq)(U)}}finally{M.releaseLock()}})}function ge(R){return(0,x.m)(R?.getReader)}},3532:(Qe,Fe,w)=>{"use strict";w.d(Fe,{K:()=>x});var o=w(576);function x(N){return N&&(0,o.m)(N.schedule)}},4482:(Qe,Fe,w)=>{"use strict";w.d(Fe,{A:()=>x,e:()=>N});var o=w(576);function x(ge){return(0,o.m)(ge?.lift)}function N(ge){return R=>{if(x(R))return R.lift(function(W){try{return ge(W,this)}catch(M){this.error(M)}});throw new TypeError("Unable to lift unknown Observable type")}}},3268:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Z:()=>ge});var o=w(4004);const{isArray:x}=Array;function ge(R){return(0,o.U)(W=>function N(R,W){return x(W)?R(...W):R(W)}(R,W))}},9635:(Qe,Fe,w)=>{"use strict";w.d(Fe,{U:()=>N,z:()=>x});var o=w(4671);function x(...ge){return N(ge)}function N(ge){return 0===ge.length?o.y:1===ge.length?ge[0]:function(W){return ge.reduce((M,U)=>U(M),W)}}},7849:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>N});var o=w(2416),x=w(3410);function N(ge){x.z.setTimeout(()=>{const{onUnhandledError:R}=o.v;if(!R)throw ge;R(ge)})}},4532:(Qe,Fe,w)=>{"use strict";function o(x){return new TypeError(`You provided ${null!==x&&"object"==typeof x?"an invalid object":`'${x}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}w.d(Fe,{z:()=>o})},6931:(Qe,Fe,w)=>{"use strict";var o=w(1708),x=Array.prototype.concat,N=Array.prototype.slice,ge=Qe.exports=function(W){for(var M=[],U=0,_=W.length;U<_;U++){var Y=W[U];o(Y)?M=x.call(M,N.call(Y)):M.push(Y)}return M};ge.wrap=function(R){return function(){return R(ge(arguments))}}},1708:Qe=>{Qe.exports=function(w){return!(!w||"string"==typeof w)&&(w instanceof Array||Array.isArray(w)||w.length>=0&&(w.splice instanceof Function||Object.getOwnPropertyDescriptor(w,w.length-1)&&"String"!==w.constructor.name))}},863:(Qe,Fe,w)=>{var o={"./ion-accordion_2.entry.js":[9654,8592,9654],"./ion-action-sheet.entry.js":[3648,8592,3648],"./ion-alert.entry.js":[1118,8592,1118],"./ion-app_8.entry.js":[53,8592,3236],"./ion-avatar_3.entry.js":[4753,4753],"./ion-back-button.entry.js":[2073,8592,2073],"./ion-backdrop.entry.js":[8939,8939],"./ion-breadcrumb_2.entry.js":[7544,8592,7544],"./ion-button_2.entry.js":[5652,5652],"./ion-card_5.entry.js":[388,388],"./ion-checkbox.entry.js":[9922,9922],"./ion-chip.entry.js":[657,657],"./ion-col_3.entry.js":[9824,9824],"./ion-datetime-button.entry.js":[9230,1435,9230],"./ion-datetime_3.entry.js":[4959,1435,8592,4959],"./ion-fab_3.entry.js":[5836,8592,5836],"./ion-img.entry.js":[1033,1033],"./ion-infinite-scroll_2.entry.js":[8034,8592,5817],"./ion-input.entry.js":[1217,1217],"./ion-item-option_3.entry.js":[2933,8592,4651],"./ion-item_8.entry.js":[4711,8592,4711],"./ion-loading.entry.js":[9434,8592,9434],"./ion-menu_3.entry.js":[8136,8592,8136],"./ion-modal.entry.js":[2349,8592,2349],"./ion-nav_2.entry.js":[5349,8592,5349],"./ion-picker-column-internal.entry.js":[7602,8592,7602],"./ion-picker-internal.entry.js":[9016,9016],"./ion-popover.entry.js":[3804,8592,3804],"./ion-progress-bar.entry.js":[4174,4174],"./ion-radio_2.entry.js":[4432,4432],"./ion-range.entry.js":[1709,8592,1709],"./ion-refresher_2.entry.js":[3326,8592,2175],"./ion-reorder_2.entry.js":[3583,8592,1186],"./ion-ripple-effect.entry.js":[9958,9958],"./ion-route_4.entry.js":[4330,4330],"./ion-searchbar.entry.js":[8628,8592,8628],"./ion-segment_2.entry.js":[9325,8592,9325],"./ion-select_3.entry.js":[2773,2773],"./ion-slide_2.entry.js":[1650,1650],"./ion-spinner.entry.js":[4908,8592,4908],"./ion-split-pane.entry.js":[9536,9536],"./ion-tab-bar_2.entry.js":[438,8592,438],"./ion-tab_2.entry.js":[1536,8592,1536],"./ion-text.entry.js":[4376,4376],"./ion-textarea.entry.js":[6560,6560],"./ion-toast.entry.js":[6120,8592,6120],"./ion-toggle.entry.js":[5168,8592,5168],"./ion-virtual-scroll.entry.js":[2289,2289]};function x(N){if(!w.o(o,N))return Promise.resolve().then(()=>{var W=new Error("Cannot find module '"+N+"'");throw W.code="MODULE_NOT_FOUND",W});var ge=o[N],R=ge[0];return Promise.all(ge.slice(1).map(w.e)).then(()=>w(R))}x.keys=()=>Object.keys(o),x.id=863,Qe.exports=x},655:(Qe,Fe,w)=>{"use strict";function R(Q,T,k,O){var Ae,te=arguments.length,ce=te<3?T:null===O?O=Object.getOwnPropertyDescriptor(T,k):O;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)ce=Reflect.decorate(Q,T,k,O);else for(var De=Q.length-1;De>=0;De--)(Ae=Q[De])&&(ce=(te<3?Ae(ce):te>3?Ae(T,k,ce):Ae(T,k))||ce);return te>3&&ce&&Object.defineProperty(T,k,ce),ce}function U(Q,T,k,O){return new(k||(k=Promise))(function(ce,Ae){function De(ne){try{de(O.next(ne))}catch(Ee){Ae(Ee)}}function ue(ne){try{de(O.throw(ne))}catch(Ee){Ae(Ee)}}function de(ne){ne.done?ce(ne.value):function te(ce){return ce instanceof k?ce:new k(function(Ae){Ae(ce)})}(ne.value).then(De,ue)}de((O=O.apply(Q,T||[])).next())})}function P(Q){return this instanceof P?(this.v=Q,this):new P(Q)}function K(Q,T,k){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var te,O=k.apply(Q,T||[]),ce=[];return te={},Ae("next"),Ae("throw"),Ae("return"),te[Symbol.asyncIterator]=function(){return this},te;function Ae(Ce){O[Ce]&&(te[Ce]=function(ze){return new Promise(function(dt,et){ce.push([Ce,ze,dt,et])>1||De(Ce,ze)})})}function De(Ce,ze){try{!function ue(Ce){Ce.value instanceof P?Promise.resolve(Ce.value.v).then(de,ne):Ee(ce[0][2],Ce)}(O[Ce](ze))}catch(dt){Ee(ce[0][3],dt)}}function de(Ce){De("next",Ce)}function ne(Ce){De("throw",Ce)}function Ee(Ce,ze){Ce(ze),ce.shift(),ce.length&&De(ce[0][0],ce[0][1])}}function ke(Q){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var k,T=Q[Symbol.asyncIterator];return T?T.call(Q):(Q=function Z(Q){var T="function"==typeof Symbol&&Symbol.iterator,k=T&&Q[T],O=0;if(k)return k.call(Q);if(Q&&"number"==typeof Q.length)return{next:function(){return Q&&O>=Q.length&&(Q=void 0),{value:Q&&Q[O++],done:!Q}}};throw new TypeError(T?"Object is not iterable.":"Symbol.iterator is not defined.")}(Q),k={},O("next"),O("throw"),O("return"),k[Symbol.asyncIterator]=function(){return this},k);function O(ce){k[ce]=Q[ce]&&function(Ae){return new Promise(function(De,ue){!function te(ce,Ae,De,ue){Promise.resolve(ue).then(function(de){ce({value:de,done:De})},Ae)}(De,ue,(Ae=Q[ce](Ae)).done,Ae.value)})}}}w.d(Fe,{FC:()=>K,KL:()=>ke,gn:()=>R,mG:()=>U,qq:()=>P})},6895:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Do:()=>ke,EM:()=>zr,HT:()=>R,JF:()=>hr,JJ:()=>Gn,K0:()=>M,Mx:()=>gr,O5:()=>q,OU:()=>Pr,Ov:()=>mr,PC:()=>st,S$:()=>P,V_:()=>Y,Ye:()=>Te,b0:()=>pe,bD:()=>yo,ez:()=>vo,mk:()=>$t,q:()=>N,sg:()=>Cn,tP:()=>Mt,uU:()=>ar,w_:()=>W});var o=w(8274);let x=null;function N(){return x}function R(v){x||(x=v)}class W{}const M=new o.OlP("DocumentToken");let U=(()=>{class v{historyGo(D){throw new Error("Not implemented")}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275prov=o.Yz7({token:v,factory:function(){return function _(){return(0,o.LFG)(G)}()},providedIn:"platform"}),v})();const Y=new o.OlP("Location Initialized");let G=(()=>{class v extends U{constructor(D){super(),this._doc=D,this._init()}_init(){this.location=window.location,this._history=window.history}getBaseHrefFromDOM(){return N().getBaseHref(this._doc)}onPopState(D){const H=N().getGlobalEventTarget(this._doc,"window");return H.addEventListener("popstate",D,!1),()=>H.removeEventListener("popstate",D)}onHashChange(D){const H=N().getGlobalEventTarget(this._doc,"window");return H.addEventListener("hashchange",D,!1),()=>H.removeEventListener("hashchange",D)}get href(){return this.location.href}get protocol(){return this.location.protocol}get hostname(){return this.location.hostname}get port(){return this.location.port}get pathname(){return this.location.pathname}get search(){return this.location.search}get hash(){return this.location.hash}set pathname(D){this.location.pathname=D}pushState(D,H,ae){Z()?this._history.pushState(D,H,ae):this.location.hash=ae}replaceState(D,H,ae){Z()?this._history.replaceState(D,H,ae):this.location.hash=ae}forward(){this._history.forward()}back(){this._history.back()}historyGo(D=0){this._history.go(D)}getState(){return this._history.state}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(M))},v.\u0275prov=o.Yz7({token:v,factory:function(){return function S(){return new G((0,o.LFG)(M))}()},providedIn:"platform"}),v})();function Z(){return!!window.history.pushState}function B(v,A){if(0==v.length)return A;if(0==A.length)return v;let D=0;return v.endsWith("/")&&D++,A.startsWith("/")&&D++,2==D?v+A.substring(1):1==D?v+A:v+"/"+A}function E(v){const A=v.match(/#|\?|$/),D=A&&A.index||v.length;return v.slice(0,D-("/"===v[D-1]?1:0))+v.slice(D)}function j(v){return v&&"?"!==v[0]?"?"+v:v}let P=(()=>{class v{historyGo(D){throw new Error("Not implemented")}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275prov=o.Yz7({token:v,factory:function(){return(0,o.f3M)(pe)},providedIn:"root"}),v})();const K=new o.OlP("appBaseHref");let pe=(()=>{class v extends P{constructor(D,H){super(),this._platformLocation=D,this._removeListenerFns=[],this._baseHref=H??this._platformLocation.getBaseHrefFromDOM()??(0,o.f3M)(M).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(D){this._removeListenerFns.push(this._platformLocation.onPopState(D),this._platformLocation.onHashChange(D))}getBaseHref(){return this._baseHref}prepareExternalUrl(D){return B(this._baseHref,D)}path(D=!1){const H=this._platformLocation.pathname+j(this._platformLocation.search),ae=this._platformLocation.hash;return ae&&D?`${H}${ae}`:H}pushState(D,H,ae,$e){const Xe=this.prepareExternalUrl(ae+j($e));this._platformLocation.pushState(D,H,Xe)}replaceState(D,H,ae,$e){const Xe=this.prepareExternalUrl(ae+j($e));this._platformLocation.replaceState(D,H,Xe)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(D=0){this._platformLocation.historyGo?.(D)}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(U),o.LFG(K,8))},v.\u0275prov=o.Yz7({token:v,factory:v.\u0275fac,providedIn:"root"}),v})(),ke=(()=>{class v extends P{constructor(D,H){super(),this._platformLocation=D,this._baseHref="",this._removeListenerFns=[],null!=H&&(this._baseHref=H)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(D){this._removeListenerFns.push(this._platformLocation.onPopState(D),this._platformLocation.onHashChange(D))}getBaseHref(){return this._baseHref}path(D=!1){let H=this._platformLocation.hash;return null==H&&(H="#"),H.length>0?H.substring(1):H}prepareExternalUrl(D){const H=B(this._baseHref,D);return H.length>0?"#"+H:H}pushState(D,H,ae,$e){let Xe=this.prepareExternalUrl(ae+j($e));0==Xe.length&&(Xe=this._platformLocation.pathname),this._platformLocation.pushState(D,H,Xe)}replaceState(D,H,ae,$e){let Xe=this.prepareExternalUrl(ae+j($e));0==Xe.length&&(Xe=this._platformLocation.pathname),this._platformLocation.replaceState(D,H,Xe)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(D=0){this._platformLocation.historyGo?.(D)}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(U),o.LFG(K,8))},v.\u0275prov=o.Yz7({token:v,factory:v.\u0275fac}),v})(),Te=(()=>{class v{constructor(D){this._subject=new o.vpe,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=D;const H=this._locationStrategy.getBaseHref();this._baseHref=E(re(H)),this._locationStrategy.onPopState(ae=>{this._subject.emit({url:this.path(!0),pop:!0,state:ae.state,type:ae.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(D=!1){return this.normalize(this._locationStrategy.path(D))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(D,H=""){return this.path()==this.normalize(D+j(H))}normalize(D){return v.stripTrailingSlash(function Be(v,A){return v&&A.startsWith(v)?A.substring(v.length):A}(this._baseHref,re(D)))}prepareExternalUrl(D){return D&&"/"!==D[0]&&(D="/"+D),this._locationStrategy.prepareExternalUrl(D)}go(D,H="",ae=null){this._locationStrategy.pushState(ae,"",D,H),this._notifyUrlChangeListeners(this.prepareExternalUrl(D+j(H)),ae)}replaceState(D,H="",ae=null){this._locationStrategy.replaceState(ae,"",D,H),this._notifyUrlChangeListeners(this.prepareExternalUrl(D+j(H)),ae)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(D=0){this._locationStrategy.historyGo?.(D)}onUrlChange(D){return this._urlChangeListeners.push(D),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(H=>{this._notifyUrlChangeListeners(H.url,H.state)})),()=>{const H=this._urlChangeListeners.indexOf(D);this._urlChangeListeners.splice(H,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(D="",H){this._urlChangeListeners.forEach(ae=>ae(D,H))}subscribe(D,H,ae){return this._subject.subscribe({next:D,error:H,complete:ae})}}return v.normalizeQueryParams=j,v.joinWithSlash=B,v.stripTrailingSlash=E,v.\u0275fac=function(D){return new(D||v)(o.LFG(P))},v.\u0275prov=o.Yz7({token:v,factory:function(){return function ie(){return new Te((0,o.LFG)(P))}()},providedIn:"root"}),v})();function re(v){return v.replace(/\/index.html$/,"")}var be=(()=>((be=be||{})[be.Decimal=0]="Decimal",be[be.Percent=1]="Percent",be[be.Currency=2]="Currency",be[be.Scientific=3]="Scientific",be))(),Q=(()=>((Q=Q||{})[Q.Format=0]="Format",Q[Q.Standalone=1]="Standalone",Q))(),T=(()=>((T=T||{})[T.Narrow=0]="Narrow",T[T.Abbreviated=1]="Abbreviated",T[T.Wide=2]="Wide",T[T.Short=3]="Short",T))(),k=(()=>((k=k||{})[k.Short=0]="Short",k[k.Medium=1]="Medium",k[k.Long=2]="Long",k[k.Full=3]="Full",k))(),O=(()=>((O=O||{})[O.Decimal=0]="Decimal",O[O.Group=1]="Group",O[O.List=2]="List",O[O.PercentSign=3]="PercentSign",O[O.PlusSign=4]="PlusSign",O[O.MinusSign=5]="MinusSign",O[O.Exponential=6]="Exponential",O[O.SuperscriptingExponent=7]="SuperscriptingExponent",O[O.PerMille=8]="PerMille",O[O.Infinity=9]="Infinity",O[O.NaN=10]="NaN",O[O.TimeSeparator=11]="TimeSeparator",O[O.CurrencyDecimal=12]="CurrencyDecimal",O[O.CurrencyGroup=13]="CurrencyGroup",O))();function Ce(v,A){return it((0,o.cg1)(v)[o.wAp.DateFormat],A)}function ze(v,A){return it((0,o.cg1)(v)[o.wAp.TimeFormat],A)}function dt(v,A){return it((0,o.cg1)(v)[o.wAp.DateTimeFormat],A)}function et(v,A){const D=(0,o.cg1)(v),H=D[o.wAp.NumberSymbols][A];if(typeof H>"u"){if(A===O.CurrencyDecimal)return D[o.wAp.NumberSymbols][O.Decimal];if(A===O.CurrencyGroup)return D[o.wAp.NumberSymbols][O.Group]}return H}function Kt(v){if(!v[o.wAp.ExtraData])throw new Error(`Missing extra locale data for the locale "${v[o.wAp.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function it(v,A){for(let D=A;D>-1;D--)if(typeof v[D]<"u")return v[D];throw new Error("Locale data API: locale data undefined")}function Xt(v){const[A,D]=v.split(":");return{hours:+A,minutes:+D}}const Vn=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,en={},gt=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;var Yt=(()=>((Yt=Yt||{})[Yt.Short=0]="Short",Yt[Yt.ShortGMT=1]="ShortGMT",Yt[Yt.Long=2]="Long",Yt[Yt.Extended=3]="Extended",Yt))(),ht=(()=>((ht=ht||{})[ht.FullYear=0]="FullYear",ht[ht.Month=1]="Month",ht[ht.Date=2]="Date",ht[ht.Hours=3]="Hours",ht[ht.Minutes=4]="Minutes",ht[ht.Seconds=5]="Seconds",ht[ht.FractionalSeconds=6]="FractionalSeconds",ht[ht.Day=7]="Day",ht))(),nt=(()=>((nt=nt||{})[nt.DayPeriods=0]="DayPeriods",nt[nt.Days=1]="Days",nt[nt.Months=2]="Months",nt[nt.Eras=3]="Eras",nt))();function Et(v,A,D,H){let ae=function tn(v){if(mn(v))return v;if("number"==typeof v&&!isNaN(v))return new Date(v);if("string"==typeof v){if(v=v.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(v)){const[ae,$e=1,Xe=1]=v.split("-").map(lt=>+lt);return ut(ae,$e-1,Xe)}const D=parseFloat(v);if(!isNaN(v-D))return new Date(D);let H;if(H=v.match(Vn))return function Ln(v){const A=new Date(0);let D=0,H=0;const ae=v[8]?A.setUTCFullYear:A.setFullYear,$e=v[8]?A.setUTCHours:A.setHours;v[9]&&(D=Number(v[9]+v[10]),H=Number(v[9]+v[11])),ae.call(A,Number(v[1]),Number(v[2])-1,Number(v[3]));const Xe=Number(v[4]||0)-D,lt=Number(v[5]||0)-H,qt=Number(v[6]||0),Tt=Math.floor(1e3*parseFloat("0."+(v[7]||0)));return $e.call(A,Xe,lt,qt,Tt),A}(H)}const A=new Date(v);if(!mn(A))throw new Error(`Unable to convert "${v}" into a date`);return A}(v);A=Ct(D,A)||A;let lt,Xe=[];for(;A;){if(lt=gt.exec(A),!lt){Xe.push(A);break}{Xe=Xe.concat(lt.slice(1));const un=Xe.pop();if(!un)break;A=un}}let qt=ae.getTimezoneOffset();H&&(qt=vt(H,qt),ae=function _t(v,A,D){const H=D?-1:1,ae=v.getTimezoneOffset();return function Ht(v,A){return(v=new Date(v.getTime())).setMinutes(v.getMinutes()+A),v}(v,H*(vt(A,ae)-ae))}(ae,H,!0));let Tt="";return Xe.forEach(un=>{const Jt=function pt(v){if(Ye[v])return Ye[v];let A;switch(v){case"G":case"GG":case"GGG":A=zt(nt.Eras,T.Abbreviated);break;case"GGGG":A=zt(nt.Eras,T.Wide);break;case"GGGGG":A=zt(nt.Eras,T.Narrow);break;case"y":A=Nt(ht.FullYear,1,0,!1,!0);break;case"yy":A=Nt(ht.FullYear,2,0,!0,!0);break;case"yyy":A=Nt(ht.FullYear,3,0,!1,!0);break;case"yyyy":A=Nt(ht.FullYear,4,0,!1,!0);break;case"Y":A=He(1);break;case"YY":A=He(2,!0);break;case"YYY":A=He(3);break;case"YYYY":A=He(4);break;case"M":case"L":A=Nt(ht.Month,1,1);break;case"MM":case"LL":A=Nt(ht.Month,2,1);break;case"MMM":A=zt(nt.Months,T.Abbreviated);break;case"MMMM":A=zt(nt.Months,T.Wide);break;case"MMMMM":A=zt(nt.Months,T.Narrow);break;case"LLL":A=zt(nt.Months,T.Abbreviated,Q.Standalone);break;case"LLLL":A=zt(nt.Months,T.Wide,Q.Standalone);break;case"LLLLL":A=zt(nt.Months,T.Narrow,Q.Standalone);break;case"w":A=ye(1);break;case"ww":A=ye(2);break;case"W":A=ye(1,!0);break;case"d":A=Nt(ht.Date,1);break;case"dd":A=Nt(ht.Date,2);break;case"c":case"cc":A=Nt(ht.Day,1);break;case"ccc":A=zt(nt.Days,T.Abbreviated,Q.Standalone);break;case"cccc":A=zt(nt.Days,T.Wide,Q.Standalone);break;case"ccccc":A=zt(nt.Days,T.Narrow,Q.Standalone);break;case"cccccc":A=zt(nt.Days,T.Short,Q.Standalone);break;case"E":case"EE":case"EEE":A=zt(nt.Days,T.Abbreviated);break;case"EEEE":A=zt(nt.Days,T.Wide);break;case"EEEEE":A=zt(nt.Days,T.Narrow);break;case"EEEEEE":A=zt(nt.Days,T.Short);break;case"a":case"aa":case"aaa":A=zt(nt.DayPeriods,T.Abbreviated);break;case"aaaa":A=zt(nt.DayPeriods,T.Wide);break;case"aaaaa":A=zt(nt.DayPeriods,T.Narrow);break;case"b":case"bb":case"bbb":A=zt(nt.DayPeriods,T.Abbreviated,Q.Standalone,!0);break;case"bbbb":A=zt(nt.DayPeriods,T.Wide,Q.Standalone,!0);break;case"bbbbb":A=zt(nt.DayPeriods,T.Narrow,Q.Standalone,!0);break;case"B":case"BB":case"BBB":A=zt(nt.DayPeriods,T.Abbreviated,Q.Format,!0);break;case"BBBB":A=zt(nt.DayPeriods,T.Wide,Q.Format,!0);break;case"BBBBB":A=zt(nt.DayPeriods,T.Narrow,Q.Format,!0);break;case"h":A=Nt(ht.Hours,1,-12);break;case"hh":A=Nt(ht.Hours,2,-12);break;case"H":A=Nt(ht.Hours,1);break;case"HH":A=Nt(ht.Hours,2);break;case"m":A=Nt(ht.Minutes,1);break;case"mm":A=Nt(ht.Minutes,2);break;case"s":A=Nt(ht.Seconds,1);break;case"ss":A=Nt(ht.Seconds,2);break;case"S":A=Nt(ht.FractionalSeconds,1);break;case"SS":A=Nt(ht.FractionalSeconds,2);break;case"SSS":A=Nt(ht.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":A=jn(Yt.Short);break;case"ZZZZZ":A=jn(Yt.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":A=jn(Yt.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":A=jn(Yt.Long);break;default:return null}return Ye[v]=A,A}(un);Tt+=Jt?Jt(ae,D,qt):"''"===un?"'":un.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),Tt}function ut(v,A,D){const H=new Date(0);return H.setFullYear(v,A,D),H.setHours(0,0,0),H}function Ct(v,A){const D=function ce(v){return(0,o.cg1)(v)[o.wAp.LocaleId]}(v);if(en[D]=en[D]||{},en[D][A])return en[D][A];let H="";switch(A){case"shortDate":H=Ce(v,k.Short);break;case"mediumDate":H=Ce(v,k.Medium);break;case"longDate":H=Ce(v,k.Long);break;case"fullDate":H=Ce(v,k.Full);break;case"shortTime":H=ze(v,k.Short);break;case"mediumTime":H=ze(v,k.Medium);break;case"longTime":H=ze(v,k.Long);break;case"fullTime":H=ze(v,k.Full);break;case"short":const ae=Ct(v,"shortTime"),$e=Ct(v,"shortDate");H=qe(dt(v,k.Short),[ae,$e]);break;case"medium":const Xe=Ct(v,"mediumTime"),lt=Ct(v,"mediumDate");H=qe(dt(v,k.Medium),[Xe,lt]);break;case"long":const qt=Ct(v,"longTime"),Tt=Ct(v,"longDate");H=qe(dt(v,k.Long),[qt,Tt]);break;case"full":const un=Ct(v,"fullTime"),Jt=Ct(v,"fullDate");H=qe(dt(v,k.Full),[un,Jt])}return H&&(en[D][A]=H),H}function qe(v,A){return A&&(v=v.replace(/\{([^}]+)}/g,function(D,H){return null!=A&&H in A?A[H]:D})),v}function on(v,A,D="-",H,ae){let $e="";(v<0||ae&&v<=0)&&(ae?v=1-v:(v=-v,$e=D));let Xe=String(v);for(;Xe.length0||lt>-D)&&(lt+=D),v===ht.Hours)0===lt&&-12===D&&(lt=12);else if(v===ht.FractionalSeconds)return function gn(v,A){return on(v,3).substring(0,A)}(lt,A);const qt=et(Xe,O.MinusSign);return on(lt,A,qt,H,ae)}}function zt(v,A,D=Q.Format,H=!1){return function(ae,$e){return function Er(v,A,D,H,ae,$e){switch(D){case nt.Months:return function ue(v,A,D){const H=(0,o.cg1)(v),$e=it([H[o.wAp.MonthsFormat],H[o.wAp.MonthsStandalone]],A);return it($e,D)}(A,ae,H)[v.getMonth()];case nt.Days:return function De(v,A,D){const H=(0,o.cg1)(v),$e=it([H[o.wAp.DaysFormat],H[o.wAp.DaysStandalone]],A);return it($e,D)}(A,ae,H)[v.getDay()];case nt.DayPeriods:const Xe=v.getHours(),lt=v.getMinutes();if($e){const Tt=function pn(v){const A=(0,o.cg1)(v);return Kt(A),(A[o.wAp.ExtraData][2]||[]).map(H=>"string"==typeof H?Xt(H):[Xt(H[0]),Xt(H[1])])}(A),un=function Pt(v,A,D){const H=(0,o.cg1)(v);Kt(H);const $e=it([H[o.wAp.ExtraData][0],H[o.wAp.ExtraData][1]],A)||[];return it($e,D)||[]}(A,ae,H),Jt=Tt.findIndex(Yn=>{if(Array.isArray(Yn)){const[yn,Wn]=Yn,Eo=Xe>=yn.hours&<>=yn.minutes,pr=Xe0?Math.floor(ae/60):Math.ceil(ae/60);switch(v){case Yt.Short:return(ae>=0?"+":"")+on(Xe,2,$e)+on(Math.abs(ae%60),2,$e);case Yt.ShortGMT:return"GMT"+(ae>=0?"+":"")+on(Xe,1,$e);case Yt.Long:return"GMT"+(ae>=0?"+":"")+on(Xe,2,$e)+":"+on(Math.abs(ae%60),2,$e);case Yt.Extended:return 0===H?"Z":(ae>=0?"+":"")+on(Xe,2,$e)+":"+on(Math.abs(ae%60),2,$e);default:throw new Error(`Unknown zone width "${v}"`)}}}function se(v){return ut(v.getFullYear(),v.getMonth(),v.getDate()+(4-v.getDay()))}function ye(v,A=!1){return function(D,H){let ae;if(A){const $e=new Date(D.getFullYear(),D.getMonth(),1).getDay()-1,Xe=D.getDate();ae=1+Math.floor((Xe+$e)/7)}else{const $e=se(D),Xe=function xe(v){const A=ut(v,0,1).getDay();return ut(v,0,1+(A<=4?4:11)-A)}($e.getFullYear()),lt=$e.getTime()-Xe.getTime();ae=1+Math.round(lt/6048e5)}return on(ae,v,et(H,O.MinusSign))}}function He(v,A=!1){return function(D,H){return on(se(D).getFullYear(),v,et(H,O.MinusSign),A)}}const Ye={};function vt(v,A){v=v.replace(/:/g,"");const D=Date.parse("Jan 01, 1970 00:00:00 "+v)/6e4;return isNaN(D)?A:D}function mn(v){return v instanceof Date&&!isNaN(v.valueOf())}const ln=/^(\d+)?\.((\d+)(-(\d+))?)?$/;function xn(v){const A=parseInt(v);if(isNaN(A))throw new Error("Invalid integer literal when parsing "+v);return A}function gr(v,A){A=encodeURIComponent(A);for(const D of v.split(";")){const H=D.indexOf("="),[ae,$e]=-1==H?[D,""]:[D.slice(0,H),D.slice(H+1)];if(ae.trim()===A)return decodeURIComponent($e)}return null}let $t=(()=>{class v{constructor(D,H,ae,$e){this._iterableDiffers=D,this._keyValueDiffers=H,this._ngEl=ae,this._renderer=$e,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(D){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof D?D.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(D){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof D?D.split(/\s+/):D,this._rawClass&&((0,o.sIi)(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const D=this._iterableDiffer.diff(this._rawClass);D&&this._applyIterableChanges(D)}else if(this._keyValueDiffer){const D=this._keyValueDiffer.diff(this._rawClass);D&&this._applyKeyValueChanges(D)}}_applyKeyValueChanges(D){D.forEachAddedItem(H=>this._toggleClass(H.key,H.currentValue)),D.forEachChangedItem(H=>this._toggleClass(H.key,H.currentValue)),D.forEachRemovedItem(H=>{H.previousValue&&this._toggleClass(H.key,!1)})}_applyIterableChanges(D){D.forEachAddedItem(H=>{if("string"!=typeof H.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${(0,o.AaK)(H.item)}`);this._toggleClass(H.item,!0)}),D.forEachRemovedItem(H=>this._toggleClass(H.item,!1))}_applyClasses(D){D&&(Array.isArray(D)||D instanceof Set?D.forEach(H=>this._toggleClass(H,!0)):Object.keys(D).forEach(H=>this._toggleClass(H,!!D[H])))}_removeClasses(D){D&&(Array.isArray(D)||D instanceof Set?D.forEach(H=>this._toggleClass(H,!1)):Object.keys(D).forEach(H=>this._toggleClass(H,!1)))}_toggleClass(D,H){(D=D.trim())&&D.split(/\s+/g).forEach(ae=>{H?this._renderer.addClass(this._ngEl.nativeElement,ae):this._renderer.removeClass(this._ngEl.nativeElement,ae)})}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.ZZ4),o.Y36(o.aQg),o.Y36(o.SBq),o.Y36(o.Qsj))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0}),v})();class On{constructor(A,D,H,ae){this.$implicit=A,this.ngForOf=D,this.index=H,this.count=ae}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Cn=(()=>{class v{constructor(D,H,ae){this._viewContainer=D,this._template=H,this._differs=ae,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(D){this._ngForOf=D,this._ngForOfDirty=!0}set ngForTrackBy(D){this._trackByFn=D}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(D){D&&(this._template=D)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const D=this._ngForOf;!this._differ&&D&&(this._differ=this._differs.find(D).create(this.ngForTrackBy))}if(this._differ){const D=this._differ.diff(this._ngForOf);D&&this._applyChanges(D)}}_applyChanges(D){const H=this._viewContainer;D.forEachOperation((ae,$e,Xe)=>{if(null==ae.previousIndex)H.createEmbeddedView(this._template,new On(ae.item,this._ngForOf,-1,-1),null===Xe?void 0:Xe);else if(null==Xe)H.remove(null===$e?void 0:$e);else if(null!==$e){const lt=H.get($e);H.move(lt,Xe),rt(lt,ae)}});for(let ae=0,$e=H.length;ae<$e;ae++){const lt=H.get(ae).context;lt.index=ae,lt.count=$e,lt.ngForOf=this._ngForOf}D.forEachIdentityChange(ae=>{rt(H.get(ae.currentIndex),ae)})}static ngTemplateContextGuard(D,H){return!0}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b),o.Y36(o.Rgc),o.Y36(o.ZZ4))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0}),v})();function rt(v,A){v.context.$implicit=A.item}let q=(()=>{class v{constructor(D,H){this._viewContainer=D,this._context=new he,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=H}set ngIf(D){this._context.$implicit=this._context.ngIf=D,this._updateView()}set ngIfThen(D){we("ngIfThen",D),this._thenTemplateRef=D,this._thenViewRef=null,this._updateView()}set ngIfElse(D){we("ngIfElse",D),this._elseTemplateRef=D,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(D,H){return!0}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b),o.Y36(o.Rgc))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0}),v})();class he{constructor(){this.$implicit=null,this.ngIf=null}}function we(v,A){if(A&&!A.createEmbeddedView)throw new Error(`${v} must be a TemplateRef, but received '${(0,o.AaK)(A)}'.`)}let st=(()=>{class v{constructor(D,H,ae){this._ngEl=D,this._differs=H,this._renderer=ae,this._ngStyle=null,this._differ=null}set ngStyle(D){this._ngStyle=D,!this._differ&&D&&(this._differ=this._differs.find(D).create())}ngDoCheck(){if(this._differ){const D=this._differ.diff(this._ngStyle);D&&this._applyChanges(D)}}_setStyle(D,H){const[ae,$e]=D.split("."),Xe=-1===ae.indexOf("-")?void 0:o.JOm.DashCase;null!=H?this._renderer.setStyle(this._ngEl.nativeElement,ae,$e?`${H}${$e}`:H,Xe):this._renderer.removeStyle(this._ngEl.nativeElement,ae,Xe)}_applyChanges(D){D.forEachRemovedItem(H=>this._setStyle(H.key,null)),D.forEachAddedItem(H=>this._setStyle(H.key,H.currentValue)),D.forEachChangedItem(H=>this._setStyle(H.key,H.currentValue))}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.SBq),o.Y36(o.aQg),o.Y36(o.Qsj))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0}),v})(),Mt=(()=>{class v{constructor(D){this._viewContainerRef=D,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null,this.ngTemplateOutletInjector=null}ngOnChanges(D){if(D.ngTemplateOutlet||D.ngTemplateOutletInjector){const H=this._viewContainerRef;if(this._viewRef&&H.remove(H.indexOf(this._viewRef)),this.ngTemplateOutlet){const{ngTemplateOutlet:ae,ngTemplateOutletContext:$e,ngTemplateOutletInjector:Xe}=this;this._viewRef=H.createEmbeddedView(ae,$e,Xe?{injector:Xe}:void 0)}else this._viewRef=null}else this._viewRef&&D.ngTemplateOutletContext&&this.ngTemplateOutletContext&&(this._viewRef.context=this.ngTemplateOutletContext)}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},standalone:!0,features:[o.TTD]}),v})();function Bt(v,A){return new o.vHH(2100,!1)}class An{createSubscription(A,D){return A.subscribe({next:D,error:H=>{throw H}})}dispose(A){A.unsubscribe()}}class Rn{createSubscription(A,D){return A.then(D,H=>{throw H})}dispose(A){}}const Pn=new Rn,ur=new An;let mr=(()=>{class v{constructor(D){this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null,this._ref=D}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(D){return this._obj?D!==this._obj?(this._dispose(),this.transform(D)):this._latestValue:(D&&this._subscribe(D),this._latestValue)}_subscribe(D){this._obj=D,this._strategy=this._selectStrategy(D),this._subscription=this._strategy.createSubscription(D,H=>this._updateLatestValue(D,H))}_selectStrategy(D){if((0,o.QGY)(D))return Pn;if((0,o.F4k)(D))return ur;throw Bt()}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(D,H){D===this._obj&&(this._latestValue=H,this._ref.markForCheck())}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.sBO,16))},v.\u0275pipe=o.Yjl({name:"async",type:v,pure:!1,standalone:!0}),v})();const xr=new o.OlP("DATE_PIPE_DEFAULT_TIMEZONE"),Or=new o.OlP("DATE_PIPE_DEFAULT_OPTIONS");let ar=(()=>{class v{constructor(D,H,ae){this.locale=D,this.defaultTimezone=H,this.defaultOptions=ae}transform(D,H,ae,$e){if(null==D||""===D||D!=D)return null;try{return Et(D,H??this.defaultOptions?.dateFormat??"mediumDate",$e||this.locale,ae??this.defaultOptions?.timezone??this.defaultTimezone??void 0)}catch(Xe){throw Bt()}}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.soG,16),o.Y36(xr,24),o.Y36(Or,24))},v.\u0275pipe=o.Yjl({name:"date",type:v,pure:!0,standalone:!0}),v})(),Gn=(()=>{class v{constructor(D){this._locale=D}transform(D,H,ae){if(!function vr(v){return!(null==v||""===v||v!=v)}(D))return null;ae=ae||this._locale;try{return function dn(v,A,D){return function cn(v,A,D,H,ae,$e,Xe=!1){let lt="",qt=!1;if(isFinite(v)){let Tt=function $n(v){let H,ae,$e,Xe,lt,A=Math.abs(v)+"",D=0;for((ae=A.indexOf("."))>-1&&(A=A.replace(".","")),($e=A.search(/e/i))>0?(ae<0&&(ae=$e),ae+=+A.slice($e+1),A=A.substring(0,$e)):ae<0&&(ae=A.length),$e=0;"0"===A.charAt($e);$e++);if($e===(lt=A.length))H=[0],ae=1;else{for(lt--;"0"===A.charAt(lt);)lt--;for(ae-=$e,H=[],Xe=0;$e<=lt;$e++,Xe++)H[Xe]=Number(A.charAt($e))}return ae>22&&(H=H.splice(0,21),D=ae-1,ae=1),{digits:H,exponent:D,integerLen:ae}}(v);Xe&&(Tt=function sr(v){if(0===v.digits[0])return v;const A=v.digits.length-v.integerLen;return v.exponent?v.exponent+=2:(0===A?v.digits.push(0,0):1===A&&v.digits.push(0),v.integerLen+=2),v}(Tt));let un=A.minInt,Jt=A.minFrac,Yn=A.maxFrac;if($e){const Mr=$e.match(ln);if(null===Mr)throw new Error(`${$e} is not a valid digit info`);const Lo=Mr[1],di=Mr[3],Ai=Mr[5];null!=Lo&&(un=xn(Lo)),null!=di&&(Jt=xn(di)),null!=Ai?Yn=xn(Ai):null!=di&&Jt>Yn&&(Yn=Jt)}!function Tn(v,A,D){if(A>D)throw new Error(`The minimum number of digits after fraction (${A}) is higher than the maximum (${D}).`);let H=v.digits,ae=H.length-v.integerLen;const $e=Math.min(Math.max(A,ae),D);let Xe=$e+v.integerLen,lt=H[Xe];if(Xe>0){H.splice(Math.max(v.integerLen,Xe));for(let Jt=Xe;Jt=5)if(Xe-1<0){for(let Jt=0;Jt>Xe;Jt--)H.unshift(0),v.integerLen++;H.unshift(1),v.integerLen++}else H[Xe-1]++;for(;ae=Tt?Wn.pop():qt=!1),Yn>=10?1:0},0);un&&(H.unshift(un),v.integerLen++)}(Tt,Jt,Yn);let yn=Tt.digits,Wn=Tt.integerLen;const Eo=Tt.exponent;let pr=[];for(qt=yn.every(Mr=>!Mr);Wn0?pr=yn.splice(Wn,yn.length):(pr=yn,yn=[0]);const Vr=[];for(yn.length>=A.lgSize&&Vr.unshift(yn.splice(-A.lgSize,yn.length).join(""));yn.length>A.gSize;)Vr.unshift(yn.splice(-A.gSize,yn.length).join(""));yn.length&&Vr.unshift(yn.join("")),lt=Vr.join(et(D,H)),pr.length&&(lt+=et(D,ae)+pr.join("")),Eo&&(lt+=et(D,O.Exponential)+"+"+Eo)}else lt=et(D,O.Infinity);return lt=v<0&&!qt?A.negPre+lt+A.negSuf:A.posPre+lt+A.posSuf,lt}(v,function er(v,A="-"){const D={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},H=v.split(";"),ae=H[0],$e=H[1],Xe=-1!==ae.indexOf(".")?ae.split("."):[ae.substring(0,ae.lastIndexOf("0")+1),ae.substring(ae.lastIndexOf("0")+1)],lt=Xe[0],qt=Xe[1]||"";D.posPre=lt.substring(0,lt.indexOf("#"));for(let un=0;un{class v{transform(D,H,ae){if(null==D)return null;if(!this.supports(D))throw Bt();return D.slice(H,ae)}supports(D){return"string"==typeof D||Array.isArray(D)}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275pipe=o.Yjl({name:"slice",type:v,pure:!1,standalone:!0}),v})(),vo=(()=>{class v{}return v.\u0275fac=function(D){return new(D||v)},v.\u0275mod=o.oAB({type:v}),v.\u0275inj=o.cJS({}),v})();const yo="browser";let zr=(()=>{class v{}return v.\u0275prov=(0,o.Yz7)({token:v,providedIn:"root",factory:()=>new Do((0,o.LFG)(M),window)}),v})();class Do{constructor(A,D){this.document=A,this.window=D,this.offset=()=>[0,0]}setOffset(A){this.offset=Array.isArray(A)?()=>A:A}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(A){this.supportsScrolling()&&this.window.scrollTo(A[0],A[1])}scrollToAnchor(A){if(!this.supportsScrolling())return;const D=function Yr(v,A){const D=v.getElementById(A)||v.getElementsByName(A)[0];if(D)return D;if("function"==typeof v.createTreeWalker&&v.body&&(v.body.createShadowRoot||v.body.attachShadow)){const H=v.createTreeWalker(v.body,NodeFilter.SHOW_ELEMENT);let ae=H.currentNode;for(;ae;){const $e=ae.shadowRoot;if($e){const Xe=$e.getElementById(A)||$e.querySelector(`[name="${A}"]`);if(Xe)return Xe}ae=H.nextNode()}}return null}(this.document,A);D&&(this.scrollToElement(D),D.focus())}setHistoryScrollRestoration(A){if(this.supportScrollRestoration()){const D=this.window.history;D&&D.scrollRestoration&&(D.scrollRestoration=A)}}scrollToElement(A){const D=A.getBoundingClientRect(),H=D.left+this.window.pageXOffset,ae=D.top+this.window.pageYOffset,$e=this.offset();this.window.scrollTo(H-$e[0],ae-$e[1])}supportScrollRestoration(){try{if(!this.supportsScrolling())return!1;const A=Gr(this.window.history)||Gr(Object.getPrototypeOf(this.window.history));return!(!A||!A.writable&&!A.set)}catch{return!1}}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}function Gr(v){return Object.getOwnPropertyDescriptor(v,"scrollRestoration")}class hr{}},529:(Qe,Fe,w)=>{"use strict";w.d(Fe,{JF:()=>jn,TP:()=>de,WM:()=>Y,eN:()=>ce});var o=w(6895),x=w(8274),N=w(9646),ge=w(9751),R=w(4351),W=w(9300),M=w(4004);class U{}class _{}class Y{constructor(se){this.normalizedNames=new Map,this.lazyUpdate=null,se?this.lazyInit="string"==typeof se?()=>{this.headers=new Map,se.split("\n").forEach(ye=>{const He=ye.indexOf(":");if(He>0){const Ye=ye.slice(0,He),pt=Ye.toLowerCase(),vt=ye.slice(He+1).trim();this.maybeSetNormalizedName(Ye,pt),this.headers.has(pt)?this.headers.get(pt).push(vt):this.headers.set(pt,[vt])}})}:()=>{this.headers=new Map,Object.keys(se).forEach(ye=>{let He=se[ye];const Ye=ye.toLowerCase();"string"==typeof He&&(He=[He]),He.length>0&&(this.headers.set(Ye,He),this.maybeSetNormalizedName(ye,Ye))})}:this.headers=new Map}has(se){return this.init(),this.headers.has(se.toLowerCase())}get(se){this.init();const ye=this.headers.get(se.toLowerCase());return ye&&ye.length>0?ye[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(se){return this.init(),this.headers.get(se.toLowerCase())||null}append(se,ye){return this.clone({name:se,value:ye,op:"a"})}set(se,ye){return this.clone({name:se,value:ye,op:"s"})}delete(se,ye){return this.clone({name:se,value:ye,op:"d"})}maybeSetNormalizedName(se,ye){this.normalizedNames.has(ye)||this.normalizedNames.set(ye,se)}init(){this.lazyInit&&(this.lazyInit instanceof Y?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(se=>this.applyUpdate(se)),this.lazyUpdate=null))}copyFrom(se){se.init(),Array.from(se.headers.keys()).forEach(ye=>{this.headers.set(ye,se.headers.get(ye)),this.normalizedNames.set(ye,se.normalizedNames.get(ye))})}clone(se){const ye=new Y;return ye.lazyInit=this.lazyInit&&this.lazyInit instanceof Y?this.lazyInit:this,ye.lazyUpdate=(this.lazyUpdate||[]).concat([se]),ye}applyUpdate(se){const ye=se.name.toLowerCase();switch(se.op){case"a":case"s":let He=se.value;if("string"==typeof He&&(He=[He]),0===He.length)return;this.maybeSetNormalizedName(se.name,ye);const Ye=("a"===se.op?this.headers.get(ye):void 0)||[];Ye.push(...He),this.headers.set(ye,Ye);break;case"d":const pt=se.value;if(pt){let vt=this.headers.get(ye);if(!vt)return;vt=vt.filter(Ht=>-1===pt.indexOf(Ht)),0===vt.length?(this.headers.delete(ye),this.normalizedNames.delete(ye)):this.headers.set(ye,vt)}else this.headers.delete(ye),this.normalizedNames.delete(ye)}}forEach(se){this.init(),Array.from(this.normalizedNames.keys()).forEach(ye=>se(this.normalizedNames.get(ye),this.headers.get(ye)))}}class Z{encodeKey(se){return j(se)}encodeValue(se){return j(se)}decodeKey(se){return decodeURIComponent(se)}decodeValue(se){return decodeURIComponent(se)}}const B=/%(\d[a-f0-9])/gi,E={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function j(xe){return encodeURIComponent(xe).replace(B,(se,ye)=>E[ye]??se)}function P(xe){return`${xe}`}class K{constructor(se={}){if(this.updates=null,this.cloneFrom=null,this.encoder=se.encoder||new Z,se.fromString){if(se.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function S(xe,se){const ye=new Map;return xe.length>0&&xe.replace(/^\?/,"").split("&").forEach(Ye=>{const pt=Ye.indexOf("="),[vt,Ht]=-1==pt?[se.decodeKey(Ye),""]:[se.decodeKey(Ye.slice(0,pt)),se.decodeValue(Ye.slice(pt+1))],_t=ye.get(vt)||[];_t.push(Ht),ye.set(vt,_t)}),ye}(se.fromString,this.encoder)}else se.fromObject?(this.map=new Map,Object.keys(se.fromObject).forEach(ye=>{const He=se.fromObject[ye],Ye=Array.isArray(He)?He.map(P):[P(He)];this.map.set(ye,Ye)})):this.map=null}has(se){return this.init(),this.map.has(se)}get(se){this.init();const ye=this.map.get(se);return ye?ye[0]:null}getAll(se){return this.init(),this.map.get(se)||null}keys(){return this.init(),Array.from(this.map.keys())}append(se,ye){return this.clone({param:se,value:ye,op:"a"})}appendAll(se){const ye=[];return Object.keys(se).forEach(He=>{const Ye=se[He];Array.isArray(Ye)?Ye.forEach(pt=>{ye.push({param:He,value:pt,op:"a"})}):ye.push({param:He,value:Ye,op:"a"})}),this.clone(ye)}set(se,ye){return this.clone({param:se,value:ye,op:"s"})}delete(se,ye){return this.clone({param:se,value:ye,op:"d"})}toString(){return this.init(),this.keys().map(se=>{const ye=this.encoder.encodeKey(se);return this.map.get(se).map(He=>ye+"="+this.encoder.encodeValue(He)).join("&")}).filter(se=>""!==se).join("&")}clone(se){const ye=new K({encoder:this.encoder});return ye.cloneFrom=this.cloneFrom||this,ye.updates=(this.updates||[]).concat(se),ye}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(se=>this.map.set(se,this.cloneFrom.map.get(se))),this.updates.forEach(se=>{switch(se.op){case"a":case"s":const ye=("a"===se.op?this.map.get(se.param):void 0)||[];ye.push(P(se.value)),this.map.set(se.param,ye);break;case"d":if(void 0===se.value){this.map.delete(se.param);break}{let He=this.map.get(se.param)||[];const Ye=He.indexOf(P(se.value));-1!==Ye&&He.splice(Ye,1),He.length>0?this.map.set(se.param,He):this.map.delete(se.param)}}}),this.cloneFrom=this.updates=null)}}class ke{constructor(){this.map=new Map}set(se,ye){return this.map.set(se,ye),this}get(se){return this.map.has(se)||this.map.set(se,se.defaultValue()),this.map.get(se)}delete(se){return this.map.delete(se),this}has(se){return this.map.has(se)}keys(){return this.map.keys()}}function ie(xe){return typeof ArrayBuffer<"u"&&xe instanceof ArrayBuffer}function Be(xe){return typeof Blob<"u"&&xe instanceof Blob}function re(xe){return typeof FormData<"u"&&xe instanceof FormData}class be{constructor(se,ye,He,Ye){let pt;if(this.url=ye,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=se.toUpperCase(),function Te(xe){switch(xe){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||Ye?(this.body=void 0!==He?He:null,pt=Ye):pt=He,pt&&(this.reportProgress=!!pt.reportProgress,this.withCredentials=!!pt.withCredentials,pt.responseType&&(this.responseType=pt.responseType),pt.headers&&(this.headers=pt.headers),pt.context&&(this.context=pt.context),pt.params&&(this.params=pt.params)),this.headers||(this.headers=new Y),this.context||(this.context=new ke),this.params){const vt=this.params.toString();if(0===vt.length)this.urlWithParams=ye;else{const Ht=ye.indexOf("?");this.urlWithParams=ye+(-1===Ht?"?":Htmn.set(ln,se.setHeaders[ln]),_t)),se.setParams&&(tn=Object.keys(se.setParams).reduce((mn,ln)=>mn.set(ln,se.setParams[ln]),tn)),new be(ye,He,pt,{params:tn,headers:_t,context:Ln,reportProgress:Ht,responseType:Ye,withCredentials:vt})}}var Ne=(()=>((Ne=Ne||{})[Ne.Sent=0]="Sent",Ne[Ne.UploadProgress=1]="UploadProgress",Ne[Ne.ResponseHeader=2]="ResponseHeader",Ne[Ne.DownloadProgress=3]="DownloadProgress",Ne[Ne.Response=4]="Response",Ne[Ne.User=5]="User",Ne))();class Q{constructor(se,ye=200,He="OK"){this.headers=se.headers||new Y,this.status=void 0!==se.status?se.status:ye,this.statusText=se.statusText||He,this.url=se.url||null,this.ok=this.status>=200&&this.status<300}}class T extends Q{constructor(se={}){super(se),this.type=Ne.ResponseHeader}clone(se={}){return new T({headers:se.headers||this.headers,status:void 0!==se.status?se.status:this.status,statusText:se.statusText||this.statusText,url:se.url||this.url||void 0})}}class k extends Q{constructor(se={}){super(se),this.type=Ne.Response,this.body=void 0!==se.body?se.body:null}clone(se={}){return new k({body:void 0!==se.body?se.body:this.body,headers:se.headers||this.headers,status:void 0!==se.status?se.status:this.status,statusText:se.statusText||this.statusText,url:se.url||this.url||void 0})}}class O extends Q{constructor(se){super(se,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${se.url||"(unknown url)"}`:`Http failure response for ${se.url||"(unknown url)"}: ${se.status} ${se.statusText}`,this.error=se.error||null}}function te(xe,se){return{body:se,headers:xe.headers,context:xe.context,observe:xe.observe,params:xe.params,reportProgress:xe.reportProgress,responseType:xe.responseType,withCredentials:xe.withCredentials}}let ce=(()=>{class xe{constructor(ye){this.handler=ye}request(ye,He,Ye={}){let pt;if(ye instanceof be)pt=ye;else{let _t,tn;_t=Ye.headers instanceof Y?Ye.headers:new Y(Ye.headers),Ye.params&&(tn=Ye.params instanceof K?Ye.params:new K({fromObject:Ye.params})),pt=new be(ye,He,void 0!==Ye.body?Ye.body:null,{headers:_t,context:Ye.context,params:tn,reportProgress:Ye.reportProgress,responseType:Ye.responseType||"json",withCredentials:Ye.withCredentials})}const vt=(0,N.of)(pt).pipe((0,R.b)(_t=>this.handler.handle(_t)));if(ye instanceof be||"events"===Ye.observe)return vt;const Ht=vt.pipe((0,W.h)(_t=>_t instanceof k));switch(Ye.observe||"body"){case"body":switch(pt.responseType){case"arraybuffer":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&!(_t.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return _t.body}));case"blob":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&!(_t.body instanceof Blob))throw new Error("Response is not a Blob.");return _t.body}));case"text":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&"string"!=typeof _t.body)throw new Error("Response is not a string.");return _t.body}));default:return Ht.pipe((0,M.U)(_t=>_t.body))}case"response":return Ht;default:throw new Error(`Unreachable: unhandled observe type ${Ye.observe}}`)}}delete(ye,He={}){return this.request("DELETE",ye,He)}get(ye,He={}){return this.request("GET",ye,He)}head(ye,He={}){return this.request("HEAD",ye,He)}jsonp(ye,He){return this.request("JSONP",ye,{params:(new K).append(He,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(ye,He={}){return this.request("OPTIONS",ye,He)}patch(ye,He,Ye={}){return this.request("PATCH",ye,te(Ye,He))}post(ye,He,Ye={}){return this.request("POST",ye,te(Ye,He))}put(ye,He,Ye={}){return this.request("PUT",ye,te(Ye,He))}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(U))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();function Ae(xe,se){return se(xe)}function De(xe,se){return(ye,He)=>se.intercept(ye,{handle:Ye=>xe(Ye,He)})}const de=new x.OlP("HTTP_INTERCEPTORS"),ne=new x.OlP("HTTP_INTERCEPTOR_FNS");function Ee(){let xe=null;return(se,ye)=>(null===xe&&(xe=((0,x.f3M)(de,{optional:!0})??[]).reduceRight(De,Ae)),xe(se,ye))}let Ce=(()=>{class xe extends U{constructor(ye,He){super(),this.backend=ye,this.injector=He,this.chain=null}handle(ye){if(null===this.chain){const He=Array.from(new Set(this.injector.get(ne)));this.chain=He.reduceRight((Ye,pt)=>function ue(xe,se,ye){return(He,Ye)=>ye.runInContext(()=>se(He,pt=>xe(pt,Ye)))}(Ye,pt,this.injector),Ae)}return this.chain(ye,He=>this.backend.handle(He))}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(_),x.LFG(x.lqb))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();const Pt=/^\)\]\}',?\n/;let it=(()=>{class xe{constructor(ye){this.xhrFactory=ye}handle(ye){if("JSONP"===ye.method)throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");return new ge.y(He=>{const Ye=this.xhrFactory.build();if(Ye.open(ye.method,ye.urlWithParams),ye.withCredentials&&(Ye.withCredentials=!0),ye.headers.forEach((Ft,_e)=>Ye.setRequestHeader(Ft,_e.join(","))),ye.headers.has("Accept")||Ye.setRequestHeader("Accept","application/json, text/plain, */*"),!ye.headers.has("Content-Type")){const Ft=ye.detectContentTypeHeader();null!==Ft&&Ye.setRequestHeader("Content-Type",Ft)}if(ye.responseType){const Ft=ye.responseType.toLowerCase();Ye.responseType="json"!==Ft?Ft:"text"}const pt=ye.serializeBody();let vt=null;const Ht=()=>{if(null!==vt)return vt;const Ft=Ye.statusText||"OK",_e=new Y(Ye.getAllResponseHeaders()),fe=function Ut(xe){return"responseURL"in xe&&xe.responseURL?xe.responseURL:/^X-Request-URL:/m.test(xe.getAllResponseHeaders())?xe.getResponseHeader("X-Request-URL"):null}(Ye)||ye.url;return vt=new T({headers:_e,status:Ye.status,statusText:Ft,url:fe}),vt},_t=()=>{let{headers:Ft,status:_e,statusText:fe,url:ee}=Ht(),Se=null;204!==_e&&(Se=typeof Ye.response>"u"?Ye.responseText:Ye.response),0===_e&&(_e=Se?200:0);let Le=_e>=200&&_e<300;if("json"===ye.responseType&&"string"==typeof Se){const yt=Se;Se=Se.replace(Pt,"");try{Se=""!==Se?JSON.parse(Se):null}catch(It){Se=yt,Le&&(Le=!1,Se={error:It,text:Se})}}Le?(He.next(new k({body:Se,headers:Ft,status:_e,statusText:fe,url:ee||void 0})),He.complete()):He.error(new O({error:Se,headers:Ft,status:_e,statusText:fe,url:ee||void 0}))},tn=Ft=>{const{url:_e}=Ht(),fe=new O({error:Ft,status:Ye.status||0,statusText:Ye.statusText||"Unknown Error",url:_e||void 0});He.error(fe)};let Ln=!1;const mn=Ft=>{Ln||(He.next(Ht()),Ln=!0);let _e={type:Ne.DownloadProgress,loaded:Ft.loaded};Ft.lengthComputable&&(_e.total=Ft.total),"text"===ye.responseType&&!!Ye.responseText&&(_e.partialText=Ye.responseText),He.next(_e)},ln=Ft=>{let _e={type:Ne.UploadProgress,loaded:Ft.loaded};Ft.lengthComputable&&(_e.total=Ft.total),He.next(_e)};return Ye.addEventListener("load",_t),Ye.addEventListener("error",tn),Ye.addEventListener("timeout",tn),Ye.addEventListener("abort",tn),ye.reportProgress&&(Ye.addEventListener("progress",mn),null!==pt&&Ye.upload&&Ye.upload.addEventListener("progress",ln)),Ye.send(pt),He.next({type:Ne.Sent}),()=>{Ye.removeEventListener("error",tn),Ye.removeEventListener("abort",tn),Ye.removeEventListener("load",_t),Ye.removeEventListener("timeout",tn),ye.reportProgress&&(Ye.removeEventListener("progress",mn),null!==pt&&Ye.upload&&Ye.upload.removeEventListener("progress",ln)),Ye.readyState!==Ye.DONE&&Ye.abort()}})}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(o.JF))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();const Xt=new x.OlP("XSRF_ENABLED"),kt="XSRF-TOKEN",Vt=new x.OlP("XSRF_COOKIE_NAME",{providedIn:"root",factory:()=>kt}),rn="X-XSRF-TOKEN",Vn=new x.OlP("XSRF_HEADER_NAME",{providedIn:"root",factory:()=>rn});class en{}let gt=(()=>{class xe{constructor(ye,He,Ye){this.doc=ye,this.platform=He,this.cookieName=Ye,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const ye=this.doc.cookie||"";return ye!==this.lastCookieString&&(this.parseCount++,this.lastToken=(0,o.Mx)(ye,this.cookieName),this.lastCookieString=ye),this.lastToken}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(o.K0),x.LFG(x.Lbi),x.LFG(Vt))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();function Yt(xe,se){const ye=xe.url.toLowerCase();if(!(0,x.f3M)(Xt)||"GET"===xe.method||"HEAD"===xe.method||ye.startsWith("http://")||ye.startsWith("https://"))return se(xe);const He=(0,x.f3M)(en).getToken(),Ye=(0,x.f3M)(Vn);return null!=He&&!xe.headers.has(Ye)&&(xe=xe.clone({headers:xe.headers.set(Ye,He)})),se(xe)}var nt=(()=>((nt=nt||{})[nt.Interceptors=0]="Interceptors",nt[nt.LegacyInterceptors=1]="LegacyInterceptors",nt[nt.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",nt[nt.NoXsrfProtection=3]="NoXsrfProtection",nt[nt.JsonpSupport=4]="JsonpSupport",nt[nt.RequestsMadeViaParent=5]="RequestsMadeViaParent",nt))();function Et(xe,se){return{\u0275kind:xe,\u0275providers:se}}function ut(...xe){const se=[ce,it,Ce,{provide:U,useExisting:Ce},{provide:_,useExisting:it},{provide:ne,useValue:Yt,multi:!0},{provide:Xt,useValue:!0},{provide:en,useClass:gt}];for(const ye of xe)se.push(...ye.\u0275providers);return(0,x.MR2)(se)}const qe=new x.OlP("LEGACY_INTERCEPTOR_FN");function gn({cookieName:xe,headerName:se}){const ye=[];return void 0!==xe&&ye.push({provide:Vt,useValue:xe}),void 0!==se&&ye.push({provide:Vn,useValue:se}),Et(nt.CustomXsrfConfiguration,ye)}let jn=(()=>{class xe{}return xe.\u0275fac=function(ye){return new(ye||xe)},xe.\u0275mod=x.oAB({type:xe}),xe.\u0275inj=x.cJS({providers:[ut(Et(nt.LegacyInterceptors,[{provide:qe,useFactory:Ee},{provide:ne,useExisting:qe,multi:!0}]),gn({cookieName:kt,headerName:rn}))]}),xe})()},8274:(Qe,Fe,w)=>{"use strict";w.d(Fe,{tb:()=>qg,AFp:()=>Wg,ip1:()=>Yg,CZH:()=>ll,hGG:()=>T_,z2F:()=>ul,sBO:()=>h_,Sil:()=>KC,_Vd:()=>Zs,EJc:()=>YC,Xts:()=>Jl,SBq:()=>Js,lqb:()=>Ni,qLn:()=>Qs,vpe:()=>zo,XFs:()=>gt,OlP:()=>_n,zs3:()=>Li,ZZ4:()=>Fu,aQg:()=>ku,soG:()=>cl,YKP:()=>Wp,h0i:()=>Es,PXZ:()=>a_,R0b:()=>uo,FiY:()=>Hs,Lbi:()=>UC,g9A:()=>Xg,Qsj:()=>sy,FYo:()=>ff,JOm:()=>Bo,tp0:()=>js,Rgc:()=>ha,dDg:()=>r_,eoX:()=>rm,GfV:()=>hf,s_b:()=>il,ifc:()=>ee,MMx:()=>cu,Lck:()=>Ub,eFA:()=>sm,G48:()=>f_,Gpc:()=>j,f3M:()=>pt,MR2:()=>Gv,_c5:()=>A_,c2e:()=>zC,zSh:()=>nc,wAp:()=>Ot,vHH:()=>ie,lri:()=>tm,rWj:()=>nm,D6c:()=>x_,cg1:()=>tu,kL8:()=>yp,dqk:()=>Ct,Z0I:()=>Pt,sIi:()=>ra,CqO:()=>wh,QGY:()=>Wc,QP$:()=>Un,F4k:()=>_h,RDi:()=>wv,AaK:()=>S,qOj:()=>Lc,TTD:()=>kr,_Bn:()=>Yp,jDz:()=>Xp,xp6:()=>Cf,uIk:()=>Vc,Tol:()=>Wh,ekj:()=>qc,Suo:()=>_g,Xpm:()=>sr,lG2:()=>cr,Yz7:()=>wt,cJS:()=>Kt,oAB:()=>vn,Yjl:()=>gr,Y36:()=>us,_UZ:()=>Uc,GkF:()=>Yc,qZA:()=>qa,TgZ:()=>Xa,EpF:()=>Ch,n5z:()=>$s,LFG:()=>He,$8M:()=>Vs,$Z:()=>Ff,NdJ:()=>Kc,CRH:()=>wg,oxw:()=>Ah,ALo:()=>dg,lcZ:()=>fg,xi3:()=>hg,Dn7:()=>pg,Hsn:()=>xh,F$t:()=>Th,Q6J:()=>Hc,MGl:()=>Za,VKq:()=>ng,WLB:()=>rg,kEZ:()=>og,HTZ:()=>ig,iGM:()=>bg,MAs:()=>bh,KtG:()=>Dr,evT:()=>pf,CHM:()=>yr,oJD:()=>Xd,P3R:()=>Jd,kYT:()=>tr,Udp:()=>Xc,YNc:()=>Dh,W1O:()=>Mg,_uU:()=>ep,Oqu:()=>Jc,hij:()=>Qa,AsE:()=>Qc,lnq:()=>eu,Gf:()=>Cg});var o=w(7579),x=w(727),N=w(9751),ge=w(8189),R=w(8421),W=w(515),M=w(3269),U=w(2076),Y=w(3099);function G(e){for(let t in e)if(e[t]===G)return t;throw Error("Could not find renamed property on target object.")}function Z(e,t){for(const n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function S(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(S).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function B(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const E=G({__forward_ref__:G});function j(e){return e.__forward_ref__=j,e.toString=function(){return S(this())},e}function P(e){return K(e)?e():e}function K(e){return"function"==typeof e&&e.hasOwnProperty(E)&&e.__forward_ref__===j}function pe(e){return e&&!!e.\u0275providers}const Te="https://g.co/ng/security#xss";class ie extends Error{constructor(t,n){super(function Be(e,t){return`NG0${Math.abs(e)}${t?": "+t.trim():""}`}(t,n)),this.code=t}}function re(e){return"string"==typeof e?e:null==e?"":String(e)}function T(e,t){throw new ie(-201,!1)}function et(e,t){null==e&&function Ue(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function wt(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Kt(e){return{providers:e.providers||[],imports:e.imports||[]}}function pn(e){return Ut(e,Vt)||Ut(e,Vn)}function Pt(e){return null!==pn(e)}function Ut(e,t){return e.hasOwnProperty(t)?e[t]:null}function kt(e){return e&&(e.hasOwnProperty(rn)||e.hasOwnProperty(en))?e[rn]:null}const Vt=G({\u0275prov:G}),rn=G({\u0275inj:G}),Vn=G({ngInjectableDef:G}),en=G({ngInjectorDef:G});var gt=(()=>((gt=gt||{})[gt.Default=0]="Default",gt[gt.Host=1]="Host",gt[gt.Self=2]="Self",gt[gt.SkipSelf=4]="SkipSelf",gt[gt.Optional=8]="Optional",gt))();let Yt;function nt(e){const t=Yt;return Yt=e,t}function Et(e,t,n){const r=pn(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n>.Optional?null:void 0!==t?t:void T(S(e))}const Ct=(()=>typeof globalThis<"u"&&globalThis||typeof global<"u"&&global||typeof window<"u"&&window||typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self)(),Nt={},Hn="__NG_DI_FLAG__",zt="ngTempTokenPath",jn=/\n/gm,En="__source";let xe;function se(e){const t=xe;return xe=e,t}function ye(e,t=gt.Default){if(void 0===xe)throw new ie(-203,!1);return null===xe?Et(e,void 0,t):xe.get(e,t>.Optional?null:void 0,t)}function He(e,t=gt.Default){return(function ht(){return Yt}()||ye)(P(e),t)}function pt(e,t=gt.Default){return He(e,vt(t))}function vt(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Ht(e){const t=[];for(let n=0;n((Ft=Ft||{})[Ft.OnPush=0]="OnPush",Ft[Ft.Default=1]="Default",Ft))(),ee=(()=>{return(e=ee||(ee={}))[e.Emulated=0]="Emulated",e[e.None=2]="None",e[e.ShadowDom=3]="ShadowDom",ee;var e})();const Se={},Le=[],yt=G({\u0275cmp:G}),It=G({\u0275dir:G}),cn=G({\u0275pipe:G}),Dn=G({\u0275mod:G}),sn=G({\u0275fac:G}),dn=G({__NG_ELEMENT_ID__:G});let er=0;function sr(e){return ln(()=>{const n=!0===e.standalone,r={},i={type:e.type,providersResolver:null,decls:e.decls,vars:e.vars,factory:null,template:e.template||null,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:r,inputs:null,outputs:null,exportAs:e.exportAs||null,onPush:e.changeDetection===Ft.OnPush,directiveDefs:null,pipeDefs:null,standalone:n,dependencies:n&&e.dependencies||null,getStandaloneInjector:null,selectors:e.selectors||Le,viewQuery:e.viewQuery||null,features:e.features||null,data:e.data||{},encapsulation:e.encapsulation||ee.Emulated,id:"c"+er++,styles:e.styles||Le,_:null,setInput:null,schemas:e.schemas||null,tView:null,findHostDirectiveDefs:null,hostDirectives:null},l=e.dependencies,u=e.features;return i.inputs=Ir(e.inputs,r),i.outputs=Ir(e.outputs),u&&u.forEach(p=>p(i)),i.directiveDefs=l?()=>("function"==typeof l?l():l).map(Tn).filter(xn):null,i.pipeDefs=l?()=>("function"==typeof l?l():l).map(Qt).filter(xn):null,i})}function Tn(e){return $t(e)||fn(e)}function xn(e){return null!==e}function vn(e){return ln(()=>({type:e.type,bootstrap:e.bootstrap||Le,declarations:e.declarations||Le,imports:e.imports||Le,exports:e.exports||Le,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function tr(e,t){return ln(()=>{const n=On(e,!0);n.declarations=t.declarations||Le,n.imports=t.imports||Le,n.exports=t.exports||Le})}function Ir(e,t){if(null==e)return Se;const n={};for(const r in e)if(e.hasOwnProperty(r)){let i=e[r],l=i;Array.isArray(i)&&(l=i[1],i=i[0]),n[i]=r,t&&(t[i]=l)}return n}const cr=sr;function gr(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,standalone:!0===e.standalone,onDestroy:e.type.prototype.ngOnDestroy||null}}function $t(e){return e[yt]||null}function fn(e){return e[It]||null}function Qt(e){return e[cn]||null}function Un(e){const t=$t(e)||fn(e)||Qt(e);return null!==t&&t.standalone}function On(e,t){const n=e[Dn]||null;if(!n&&!0===t)throw new Error(`Type ${S(e)} does not have '\u0275mod' property.`);return n}function Fn(e){return Array.isArray(e)&&"object"==typeof e[1]}function zn(e){return Array.isArray(e)&&!0===e[1]}function qn(e){return 0!=(4&e.flags)}function dr(e){return e.componentOffset>-1}function Sr(e){return 1==(1&e.flags)}function Gn(e){return null!==e.template}function go(e){return 0!=(256&e[2])}function nr(e,t){return e.hasOwnProperty(sn)?e[sn]:null}class li{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function kr(){return bo}function bo(e){return e.type.prototype.ngOnChanges&&(e.setInput=Wr),Wo}function Wo(){const e=Qr(this),t=e?.current;if(t){const n=e.previous;if(n===Se)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function Wr(e,t,n,r){const i=this.declaredInputs[n],l=Qr(e)||function eo(e,t){return e[Co]=t}(e,{previous:Se,current:null}),u=l.current||(l.current={}),p=l.previous,y=p[i];u[i]=new li(y&&y.currentValue,t,p===Se),e[r]=t}kr.ngInherit=!0;const Co="__ngSimpleChanges__";function Qr(e){return e[Co]||null}function Sn(e){for(;Array.isArray(e);)e=e[0];return e}function ko(e,t){return Sn(t[e])}function Jn(e,t){return Sn(t[e.index])}function Kr(e,t){return e.data[t]}function no(e,t){return e[t]}function rr(e,t){const n=t[e];return Fn(n)?n:n[0]}function hn(e){return 64==(64&e[2])}function C(e,t){return null==t?null:e[t]}function s(e){e[18]=0}function c(e,t){e[5]+=t;let n=e,r=e[3];for(;null!==r&&(1===t&&1===n[5]||-1===t&&0===n[5]);)r[5]+=t,n=r,r=r[3]}const a={lFrame:A(null),bindingsEnabled:!0};function Dt(){return a.bindingsEnabled}function Ve(){return a.lFrame.lView}function At(){return a.lFrame.tView}function yr(e){return a.lFrame.contextLView=e,e[8]}function Dr(e){return a.lFrame.contextLView=null,e}function Mn(){let e=$r();for(;null!==e&&64===e.type;)e=e.parent;return e}function $r(){return a.lFrame.currentTNode}function br(e,t){const n=a.lFrame;n.currentTNode=e,n.isParent=t}function zi(){return a.lFrame.isParent}function ci(){a.lFrame.isParent=!1}function lr(){const e=a.lFrame;let t=e.bindingRootIndex;return-1===t&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function oo(){return a.lFrame.bindingIndex}function io(){return a.lFrame.bindingIndex++}function Br(e){const t=a.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function ui(e,t){const n=a.lFrame;n.bindingIndex=n.bindingRootIndex=e,No(t)}function No(e){a.lFrame.currentDirectiveIndex=e}function Os(){return a.lFrame.currentQueryIndex}function Wi(e){a.lFrame.currentQueryIndex=e}function ma(e){const t=e[1];return 2===t.type?t.declTNode:1===t.type?e[6]:null}function Rs(e,t,n){if(n>.SkipSelf){let i=t,l=e;for(;!(i=i.parent,null!==i||n>.Host||(i=ma(l),null===i||(l=l[15],10&i.type))););if(null===i)return!1;t=i,e=l}const r=a.lFrame=v();return r.currentTNode=t,r.lView=e,!0}function Ki(e){const t=v(),n=e[1];a.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function v(){const e=a.lFrame,t=null===e?null:e.child;return null===t?A(e):t}function A(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function D(){const e=a.lFrame;return a.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const H=D;function ae(){const e=D();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function lt(){return a.lFrame.selectedIndex}function qt(e){a.lFrame.selectedIndex=e}function Tt(){const e=a.lFrame;return Kr(e.tView,e.selectedIndex)}function pr(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[y]<0&&(e[18]+=65536),(p>11>16&&(3&e[2])===t){e[2]+=2048;try{l.call(p)}finally{}}}else try{l.call(p)}finally{}}class fi{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function pi(e,t,n){let r=0;for(;rt){u=l-1;break}}}for(;l>16}(e),r=t;for(;n>0;)r=r[15],n--;return r}let qi=!0;function Zi(e){const t=qi;return qi=e,t}let yl=0;const Xr={};function Ji(e,t){const n=ks(e,t);if(-1!==n)return n;const r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,mi(r.data,e),mi(t,null),mi(r.blueprint,null));const i=Qi(e,t),l=e.injectorIndex;if(ba(i)){const u=Zo(i),p=gi(i,t),y=p[1].data;for(let I=0;I<8;I++)t[l+I]=p[u+I]|y[u+I]}return t[l+8]=i,l}function mi(e,t){e.push(0,0,0,0,0,0,0,0,t)}function ks(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function Qi(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,i=t;for(;null!==i;){if(r=Ia(i),null===r)return-1;if(n++,i=i[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return-1}function es(e,t,n){!function or(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(dn)&&(r=n[dn]),null==r&&(r=n[dn]=yl++);const i=255&r;t.data[e+(i>>5)]|=1<=0?255&t:Ku:t}(n);if("function"==typeof l){if(!Rs(t,e,r))return r>.Host?bl(i,0,r):wa(t,n,r,i);try{const u=l(r);if(null!=u||r>.Optional)return u;T()}finally{H()}}else if("number"==typeof l){let u=null,p=ks(e,t),y=-1,I=r>.Host?t[16][6]:null;for((-1===p||r>.SkipSelf)&&(y=-1===p?Qi(e,t):t[p+8],-1!==y&&Ea(r,!1)?(u=t[1],p=Zo(y),t=gi(y,t)):p=-1);-1!==p;){const V=t[1];if(ns(l,p,V.data)){const J=vi(p,t,n,u,r,I);if(J!==Xr)return J}y=t[p+8],-1!==y&&Ea(r,t[1].data[p+8]===I)&&ns(l,p,t)?(u=V,p=Zo(y),t=gi(y,t)):p=-1}}return i}function vi(e,t,n,r,i,l){const u=t[1],p=u.data[e+8],V=Ls(p,u,n,null==r?dr(p)&&qi:r!=u&&0!=(3&p.type),i>.Host&&l===p);return null!==V?Jo(t,u,V,p):Xr}function Ls(e,t,n,r,i){const l=e.providerIndexes,u=t.data,p=1048575&l,y=e.directiveStart,V=l>>20,me=i?p+V:e.directiveEnd;for(let Oe=r?p:p+V;Oe=y&&Ge.type===n)return Oe}if(i){const Oe=u[y];if(Oe&&Gn(Oe)&&Oe.type===n)return y}return null}function Jo(e,t,n,r){let i=e[n];const l=t.data;if(function gl(e){return e instanceof fi}(i)){const u=i;u.resolving&&function be(e,t){const n=t?`. Dependency path: ${t.join(" > ")} > ${e}`:"";throw new ie(-200,`Circular dependency in DI detected for ${e}${n}`)}(function oe(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():re(e)}(l[n]));const p=Zi(u.canSeeViewProviders);u.resolving=!0;const y=u.injectImpl?nt(u.injectImpl):null;Rs(e,r,gt.Default);try{i=e[n]=u.factory(void 0,l,e,r),t.firstCreatePass&&n>=r.directiveStart&&function Eo(e,t,n){const{ngOnChanges:r,ngOnInit:i,ngDoCheck:l}=t.type.prototype;if(r){const u=bo(t);(n.preOrderHooks||(n.preOrderHooks=[])).push(e,u),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,u)}i&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-e,i),l&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,l),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,l))}(n,l[n],t)}finally{null!==y&&nt(y),Zi(p),u.resolving=!1,H()}}return i}function ns(e,t,n){return!!(n[t+(e>>5)]&1<{const t=e.prototype.constructor,n=t[sn]||rs(t),r=Object.prototype;let i=Object.getPrototypeOf(e.prototype).constructor;for(;i&&i!==r;){const l=i[sn]||rs(i);if(l&&l!==n)return l;i=Object.getPrototypeOf(i)}return l=>new l})}function rs(e){return K(e)?()=>{const t=rs(P(e));return t&&t()}:nr(e)}function Ia(e){const t=e[1],n=t.type;return 2===n?t.declTNode:1===n?e[6]:null}function Vs(e){return function Dl(e,t){if("class"===t)return e.classes;if("style"===t)return e.styles;const n=e.attrs;if(n){const r=n.length;let i=0;for(;i{const r=function ei(e){return function(...n){if(e){const r=e(...n);for(const i in r)this[i]=r[i]}}}(t);function i(...l){if(this instanceof i)return r.apply(this,l),this;const u=new i(...l);return p.annotation=u,p;function p(y,I,V){const J=y.hasOwnProperty(Qo)?y[Qo]:Object.defineProperty(y,Qo,{value:[]})[Qo];for(;J.length<=V;)J.push(null);return(J[V]=J[V]||[]).push(u),y}}return n&&(i.prototype=Object.create(n.prototype)),i.prototype.ngMetadataName=e,i.annotationCls=i,i})}class _n{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=wt({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}function z(e,t){void 0===t&&(t=e);for(let n=0;nArray.isArray(n)?ve(n,t):t(n))}function We(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function ft(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function bt(e,t){const n=[];for(let r=0;r=0?e[1|r]=n:(r=~r,function lo(e,t,n,r){let i=e.length;if(i==t)e.push(n,r);else if(1===i)e.push(r,e[0]),e[0]=n;else{for(i--,e.push(e[i-1],e[i]);i>t;)e[i]=e[i-2],i--;e[t]=n,e[t+1]=r}}(e,r,t,n)),r}function Ri(e,t){const n=_i(e,t);if(n>=0)return e[1|n]}function _i(e,t){return function td(e,t,n){let r=0,i=e.length>>n;for(;i!==r;){const l=r+(i-r>>1),u=e[l<t?i=l:r=l+1}return~(i<((Bo=Bo||{})[Bo.Important=1]="Important",Bo[Bo.DashCase=2]="DashCase",Bo))();const xl=new Map;let Gm=0;const Rl="__ngContext__";function _r(e,t){Fn(t)?(e[Rl]=t[20],function Wm(e){xl.set(e[20],e)}(t)):e[Rl]=t}function Fl(e,t){return undefined(e,t)}function Ys(e){const t=e[3];return zn(t)?t[3]:t}function kl(e){return _d(e[13])}function Nl(e){return _d(e[4])}function _d(e){for(;null!==e&&!zn(e);)e=e[4];return e}function is(e,t,n,r,i){if(null!=r){let l,u=!1;zn(r)?l=r:Fn(r)&&(u=!0,r=r[0]);const p=Sn(r);0===e&&null!==n?null==i?Ad(t,n,p):Pi(t,n,p,i||null,!0):1===e&&null!==n?Pi(t,n,p,i||null,!0):2===e?function Ul(e,t,n){const r=Ta(e,t);r&&function pv(e,t,n,r){e.removeChild(t,n,r)}(e,r,t,n)}(t,p,u):3===e&&t.destroyNode(p),null!=l&&function vv(e,t,n,r,i){const l=n[7];l!==Sn(n)&&is(t,e,r,l,i);for(let p=10;p0&&(e[n-1][4]=r[4]);const l=ft(e,10+t);!function sv(e,t){Ws(e,t,t[11],2,null,null),t[0]=null,t[6]=null}(r[1],r);const u=l[19];null!==u&&u.detachView(l[1]),r[3]=null,r[4]=null,r[2]&=-65}return r}function Id(e,t){if(!(128&t[2])){const n=t[11];n.destroyNode&&Ws(e,t,n,3,null,null),function cv(e){let t=e[13];if(!t)return Vl(e[1],e);for(;t;){let n=null;if(Fn(t))n=t[13];else{const r=t[10];r&&(n=r)}if(!n){for(;t&&!t[4]&&t!==e;)Fn(t)&&Vl(t[1],t),t=t[3];null===t&&(t=e),Fn(t)&&Vl(t[1],t),n=t&&t[4]}t=n}}(t)}}function Vl(e,t){if(!(128&t[2])){t[2]&=-65,t[2]|=128,function hv(e,t){let n;if(null!=e&&null!=(n=e.destroyHooks))for(let r=0;r=0?r[i=u]():r[i=-u].unsubscribe(),l+=2}else{const u=r[i=n[l+1]];n[l].call(u)}if(null!==r){for(let l=i+1;l-1){const{encapsulation:l}=e.data[r.directiveStart+i];if(l===ee.None||l===ee.Emulated)return null}return Jn(r,n)}}(e,t.parent,n)}function Pi(e,t,n,r,i){e.insertBefore(t,n,r,i)}function Ad(e,t,n){e.appendChild(t,n)}function Td(e,t,n,r,i){null!==r?Pi(e,t,n,r,i):Ad(e,t,n)}function Ta(e,t){return e.parentNode(t)}function xd(e,t,n){return Rd(e,t,n)}let Ra,Yl,Pa,Rd=function Od(e,t,n){return 40&e.type?Jn(e,n):null};function xa(e,t,n,r){const i=Sd(e,r,t),l=t[11],p=xd(r.parent||t[6],r,t);if(null!=i)if(Array.isArray(n))for(let y=0;ye,createScript:e=>e,createScriptURL:e=>e})}catch{}return Ra}()?.createHTML(e)||e}function wv(e){Yl=e}function Wl(){if(void 0===Pa&&(Pa=null,Ct.trustedTypes))try{Pa=Ct.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return Pa}function Bd(e){return Wl()?.createHTML(e)||e}function Hd(e){return Wl()?.createScriptURL(e)||e}class jd{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Te})`}}function wi(e){return e instanceof jd?e.changingThisBreaksApplicationSecurity:e}function Ks(e,t){const n=function Tv(e){return e instanceof jd&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${Te})`)}return n===t}class xv{constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{const n=(new window.DOMParser).parseFromString(Fi(t),"text/html").body;return null===n?this.inertDocumentHelper.getInertBodyElement(t):(n.removeChild(n.firstChild),n)}catch{return null}}}class Ov{constructor(t){if(this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),null==this.inertDocument.body){const n=this.inertDocument.createElement("html");this.inertDocument.appendChild(n);const r=this.inertDocument.createElement("body");n.appendChild(r)}}getInertBodyElement(t){const n=this.inertDocument.createElement("template");if("content"in n)return n.innerHTML=Fi(t),n;const r=this.inertDocument.createElement("body");return r.innerHTML=Fi(t),this.defaultDoc.documentMode&&this.stripCustomNsAttrs(r),r}stripCustomNsAttrs(t){const n=t.attributes;for(let i=n.length-1;0"),!0}endElement(t){const n=t.nodeName.toLowerCase();Xl.hasOwnProperty(n)&&!zd.hasOwnProperty(n)&&(this.buf.push(""))}chars(t){this.buf.push(Kd(t))}checkClobberedElement(t,n){if(n&&(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${t.outerHTML}`);return n}}const Nv=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Lv=/([^\#-~ |!])/g;function Kd(e){return e.replace(/&/g,"&").replace(Nv,function(t){return"&#"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+";"}).replace(Lv,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}let Fa;function Zl(e){return"content"in e&&function Bv(e){return e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.nodeName}(e)?e.content:null}var Qn=(()=>((Qn=Qn||{})[Qn.NONE=0]="NONE",Qn[Qn.HTML=1]="HTML",Qn[Qn.STYLE=2]="STYLE",Qn[Qn.SCRIPT=3]="SCRIPT",Qn[Qn.URL=4]="URL",Qn[Qn.RESOURCE_URL=5]="RESOURCE_URL",Qn))();function Xd(e){const t=qs();return t?Bd(t.sanitize(Qn.HTML,e)||""):Ks(e,"HTML")?Bd(wi(e)):function $v(e,t){let n=null;try{Fa=Fa||function Ud(e){const t=new Ov(e);return function Rv(){try{return!!(new window.DOMParser).parseFromString(Fi(""),"text/html")}catch{return!1}}()?new xv(t):t}(e);let r=t?String(t):"";n=Fa.getInertBodyElement(r);let i=5,l=r;do{if(0===i)throw new Error("Failed to sanitize html because the input is unstable");i--,r=l,l=n.innerHTML,n=Fa.getInertBodyElement(r)}while(r!==l);return Fi((new kv).sanitizeChildren(Zl(n)||n))}finally{if(n){const r=Zl(n)||n;for(;r.firstChild;)r.removeChild(r.firstChild)}}}(function $d(){return void 0!==Yl?Yl:typeof document<"u"?document:void 0}(),re(e))}function qd(e){const t=qs();return t?t.sanitize(Qn.URL,e)||"":Ks(e,"URL")?wi(e):Kl(re(e))}function Zd(e){const t=qs();if(t)return Hd(t.sanitize(Qn.RESOURCE_URL,e)||"");if(Ks(e,"ResourceURL"))return Hd(wi(e));throw new ie(904,!1)}function Jd(e,t,n){return function zv(e,t){return"src"===t&&("embed"===e||"frame"===e||"iframe"===e||"media"===e||"script"===e)||"href"===t&&("base"===e||"link"===e)?Zd:qd}(t,n)(e)}function qs(){const e=Ve();return e&&e[12]}const Jl=new _n("ENVIRONMENT_INITIALIZER"),Qd=new _n("INJECTOR",-1),ef=new _n("INJECTOR_DEF_TYPES");class tf{get(t,n=Nt){if(n===Nt){const r=new Error(`NullInjectorError: No provider for ${S(t)}!`);throw r.name="NullInjectorError",r}return n}}function Gv(e){return{\u0275providers:e}}function Yv(...e){return{\u0275providers:nf(0,e),\u0275fromNgModule:!0}}function nf(e,...t){const n=[],r=new Set;let i;return ve(t,l=>{const u=l;Ql(u,n,[],r)&&(i||(i=[]),i.push(u))}),void 0!==i&&rf(i,n),n}function rf(e,t){for(let n=0;n{t.push(l)})}}function Ql(e,t,n,r){if(!(e=P(e)))return!1;let i=null,l=kt(e);const u=!l&&$t(e);if(l||u){if(u&&!u.standalone)return!1;i=e}else{const y=e.ngModule;if(l=kt(y),!l)return!1;i=y}const p=r.has(i);if(u){if(p)return!1;if(r.add(i),u.dependencies){const y="function"==typeof u.dependencies?u.dependencies():u.dependencies;for(const I of y)Ql(I,t,n,r)}}else{if(!l)return!1;{if(null!=l.imports&&!p){let I;r.add(i);try{ve(l.imports,V=>{Ql(V,t,n,r)&&(I||(I=[]),I.push(V))})}finally{}void 0!==I&&rf(I,t)}if(!p){const I=nr(i)||(()=>new i);t.push({provide:i,useFactory:I,deps:Le},{provide:ef,useValue:i,multi:!0},{provide:Jl,useValue:()=>He(i),multi:!0})}const y=l.providers;null==y||p||ec(y,V=>{t.push(V)})}}return i!==e&&void 0!==e.providers}function ec(e,t){for(let n of e)pe(n)&&(n=n.\u0275providers),Array.isArray(n)?ec(n,t):t(n)}const Wv=G({provide:String,useValue:G});function tc(e){return null!==e&&"object"==typeof e&&Wv in e}function ki(e){return"function"==typeof e}const nc=new _n("Set Injector scope."),ka={},Xv={};let rc;function Na(){return void 0===rc&&(rc=new tf),rc}class Ni{}class lf extends Ni{constructor(t,n,r,i){super(),this.parent=n,this.source=r,this.scopes=i,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,ic(t,u=>this.processProvider(u)),this.records.set(Qd,ss(void 0,this)),i.has("environment")&&this.records.set(Ni,ss(void 0,this));const l=this.records.get(nc);null!=l&&"string"==typeof l.value&&this.scopes.add(l.value),this.injectorDefTypes=new Set(this.get(ef.multi,Le,gt.Self))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const t of this._ngOnDestroyHooks)t.ngOnDestroy();for(const t of this._onDestroyHooks)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),this._onDestroyHooks.length=0}}onDestroy(t){this._onDestroyHooks.push(t)}runInContext(t){this.assertNotDestroyed();const n=se(this),r=nt(void 0);try{return t()}finally{se(n),nt(r)}}get(t,n=Nt,r=gt.Default){this.assertNotDestroyed(),r=vt(r);const i=se(this),l=nt(void 0);try{if(!(r>.SkipSelf)){let p=this.records.get(t);if(void 0===p){const y=function ey(e){return"function"==typeof e||"object"==typeof e&&e instanceof _n}(t)&&pn(t);p=y&&this.injectableDefInScope(y)?ss(oc(t),ka):null,this.records.set(t,p)}if(null!=p)return this.hydrate(t,p)}return(r>.Self?Na():this.parent).get(t,n=r>.Optional&&n===Nt?null:n)}catch(u){if("NullInjectorError"===u.name){if((u[zt]=u[zt]||[]).unshift(S(t)),i)throw u;return function Ln(e,t,n,r){const i=e[zt];throw t[En]&&i.unshift(t[En]),e.message=function mn(e,t,n,r=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let i=S(t);if(Array.isArray(t))i=t.map(S).join(" -> ");else if("object"==typeof t){let l=[];for(let u in t)if(t.hasOwnProperty(u)){let p=t[u];l.push(u+":"+("string"==typeof p?JSON.stringify(p):S(p)))}i=`{${l.join(", ")}}`}return`${n}${r?"("+r+")":""}[${i}]: ${e.replace(jn,"\n ")}`}("\n"+e.message,i,n,r),e.ngTokenPath=i,e[zt]=null,e}(u,t,"R3InjectorError",this.source)}throw u}finally{nt(l),se(i)}}resolveInjectorInitializers(){const t=se(this),n=nt(void 0);try{const r=this.get(Jl.multi,Le,gt.Self);for(const i of r)i()}finally{se(t),nt(n)}}toString(){const t=[],n=this.records;for(const r of n.keys())t.push(S(r));return`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new ie(205,!1)}processProvider(t){let n=ki(t=P(t))?t:P(t&&t.provide);const r=function Zv(e){return tc(e)?ss(void 0,e.useValue):ss(cf(e),ka)}(t);if(ki(t)||!0!==t.multi)this.records.get(n);else{let i=this.records.get(n);i||(i=ss(void 0,ka,!0),i.factory=()=>Ht(i.multi),this.records.set(n,i)),n=t,i.multi.push(t)}this.records.set(n,r)}hydrate(t,n){return n.value===ka&&(n.value=Xv,n.value=n.factory()),"object"==typeof n.value&&n.value&&function Qv(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=P(t.providedIn);return"string"==typeof n?"any"===n||this.scopes.has(n):this.injectorDefTypes.has(n)}}function oc(e){const t=pn(e),n=null!==t?t.factory:nr(e);if(null!==n)return n;if(e instanceof _n)throw new ie(204,!1);if(e instanceof Function)return function qv(e){const t=e.length;if(t>0)throw bt(t,"?"),new ie(204,!1);const n=function it(e){const t=e&&(e[Vt]||e[Vn]);if(t){const n=function Xt(e){if(e.hasOwnProperty("name"))return e.name;const t=(""+e).match(/^function\s*([^\s(]+)/);return null===t?"":t[1]}(e);return console.warn(`DEPRECATED: DI is instantiating a token "${n}" that inherits its @Injectable decorator but does not provide one itself.\nThis will become an error in a future version of Angular. Please add @Injectable() to the "${n}" class.`),t}return null}(e);return null!==n?()=>n.factory(e):()=>new e}(e);throw new ie(204,!1)}function cf(e,t,n){let r;if(ki(e)){const i=P(e);return nr(i)||oc(i)}if(tc(e))r=()=>P(e.useValue);else if(function af(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...Ht(e.deps||[]));else if(function sf(e){return!(!e||!e.useExisting)}(e))r=()=>He(P(e.useExisting));else{const i=P(e&&(e.useClass||e.provide));if(!function Jv(e){return!!e.deps}(e))return nr(i)||oc(i);r=()=>new i(...Ht(e.deps))}return r}function ss(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function ic(e,t){for(const n of e)Array.isArray(n)?ic(n,t):n&&pe(n)?ic(n.\u0275providers,t):t(n)}class ty{}class uf{}class ry{resolveComponentFactory(t){throw function ny(e){const t=Error(`No component factory found for ${S(e)}. Did you add it to @NgModule.entryComponents?`);return t.ngComponent=e,t}(t)}}let Zs=(()=>{class e{}return e.NULL=new ry,e})();function oy(){return as(Mn(),Ve())}function as(e,t){return new Js(Jn(e,t))}let Js=(()=>{class e{constructor(n){this.nativeElement=n}}return e.__NG_ELEMENT_ID__=oy,e})();function iy(e){return e instanceof Js?e.nativeElement:e}class ff{}let sy=(()=>{class e{}return e.__NG_ELEMENT_ID__=()=>function ay(){const e=Ve(),n=rr(Mn().index,e);return(Fn(n)?n:e)[11]}(),e})(),ly=(()=>{class e{}return e.\u0275prov=wt({token:e,providedIn:"root",factory:()=>null}),e})();class hf{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const cy=new hf("15.0.1"),sc={};function lc(e){return e.ngOriginalError}class Qs{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t);this._console.error("ERROR",t),n&&this._console.error("ORIGINAL ERROR",n)}_findOriginalError(t){let n=t&&lc(t);for(;n&&lc(n);)n=lc(n);return n||null}}function pf(e){return e.ownerDocument}function ni(e){return e instanceof Function?e():e}function mf(e,t,n){let r=e.length;for(;;){const i=e.indexOf(t,n);if(-1===i)return i;if(0===i||e.charCodeAt(i-1)<=32){const l=t.length;if(i+l===r||e.charCodeAt(i+l)<=32)return i}n=i+1}}const vf="ng-template";function Dy(e,t,n){let r=0;for(;rl?"":i[J+1].toLowerCase();const Oe=8&r?me:null;if(Oe&&-1!==mf(Oe,I,0)||2&r&&I!==me){if(Io(r))return!1;u=!0}}}}else{if(!u&&!Io(r)&&!Io(y))return!1;if(u&&Io(y))continue;u=!1,r=y|1&r}}return Io(r)||u}function Io(e){return 0==(1&e)}function _y(e,t,n,r){if(null===t)return-1;let i=0;if(r||!n){let l=!1;for(;i-1)for(n++;n0?'="'+p+'"':"")+"]"}else 8&r?i+="."+u:4&r&&(i+=" "+u);else""!==i&&!Io(u)&&(t+=bf(l,i),i=""),r=u,l=l||!Io(r);n++}return""!==i&&(t+=bf(l,i)),t}const Gt={};function Cf(e){_f(At(),Ve(),lt()+e,!1)}function _f(e,t,n,r){if(!r)if(3==(3&t[2])){const l=e.preOrderCheckHooks;null!==l&&Vr(t,l,n)}else{const l=e.preOrderHooks;null!==l&&Mr(t,l,0,n)}qt(n)}function Sf(e,t=null,n=null,r){const i=Mf(e,t,n,r);return i.resolveInjectorInitializers(),i}function Mf(e,t=null,n=null,r,i=new Set){const l=[n||Le,Yv(e)];return r=r||("object"==typeof e?void 0:S(e)),new lf(l,t||Na(),r||null,i)}let Li=(()=>{class e{static create(n,r){if(Array.isArray(n))return Sf({name:""},r,n,"");{const i=n.name??"";return Sf({name:i},n.parent,n.providers,i)}}}return e.THROW_IF_NOT_FOUND=Nt,e.NULL=new tf,e.\u0275prov=wt({token:e,providedIn:"any",factory:()=>He(Qd)}),e.__NG_ELEMENT_ID__=-1,e})();function us(e,t=gt.Default){const n=Ve();return null===n?He(e,t):ts(Mn(),n,P(e),t)}function Ff(){throw new Error("invalid")}function $a(e,t){return e<<17|t<<2}function So(e){return e>>17&32767}function hc(e){return 2|e}function ri(e){return(131068&e)>>2}function pc(e,t){return-131069&e|t<<2}function gc(e){return 1|e}function Gf(e,t){const n=e.contentQueries;if(null!==n)for(let r=0;r22&&_f(e,t,22,!1),n(r,i)}finally{qt(l)}}function Ic(e,t,n){if(qn(t)){const i=t.directiveEnd;for(let l=t.directiveStart;l0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(u)!=p&&u.push(p),u.push(n,r,l)}}(e,t,r,ea(e,n,i.hostVars,Gt),i)}function w0(e,t,n){const r=Jn(t,e),i=Wf(n),l=e[10],u=Ua(e,Ha(e,i,null,n.onPush?32:16,r,t,l,l.createRenderer(r,n),null,null,null));e[t.index]=u}function Vo(e,t,n,r,i,l){const u=Jn(e,t);!function Oc(e,t,n,r,i,l,u){if(null==l)e.removeAttribute(t,i,n);else{const p=null==u?re(l):u(l,r||"",i);e.setAttribute(t,i,p,n)}}(t[11],u,l,e.value,n,r,i)}function E0(e,t,n,r,i,l){const u=l[t];if(null!==u){const p=r.setInput;for(let y=0;y0&&Rc(n)}}function Rc(e){for(let r=kl(e);null!==r;r=Nl(r))for(let i=10;i0&&Rc(l)}const n=e[1].components;if(null!==n)for(let r=0;r0&&Rc(i)}}function T0(e,t){const n=rr(t,e),r=n[1];(function x0(e,t){for(let n=t.length;n-1&&(Bl(t,r),ft(n,r))}this._attachedToViewContainer=!1}Id(this._lView[1],this._lView)}onDestroy(t){Kf(this._lView[1],this._lView,null,t)}markForCheck(){Pc(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-65}reattach(){this._lView[2]|=64}detectChanges(){za(this._lView[1],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new ie(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function lv(e,t){Ws(e,t,t[11],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new ie(902,!1);this._appRef=t}}class O0 extends ta{constructor(t){super(t),this._view=t}detectChanges(){const t=this._view;za(t[1],t,t[8],!1)}checkNoChanges(){}get context(){return null}}class Nc extends Zs{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const n=$t(t);return new na(n,this.ngModule)}}function ih(e){const t=[];for(let n in e)e.hasOwnProperty(n)&&t.push({propName:e[n],templateName:n});return t}class P0{constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){r=vt(r);const i=this.injector.get(t,sc,r);return i!==sc||n===sc?i:this.parentInjector.get(t,n,r)}}class na extends uf{constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function Ay(e){return e.map(My).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}get inputs(){return ih(this.componentDef.inputs)}get outputs(){return ih(this.componentDef.outputs)}create(t,n,r,i){let l=(i=i||this.ngModule)instanceof Ni?i:i?.injector;l&&null!==this.componentDef.getStandaloneInjector&&(l=this.componentDef.getStandaloneInjector(l)||l);const u=l?new P0(t,l):t,p=u.get(ff,null);if(null===p)throw new ie(407,!1);const y=u.get(ly,null),I=p.createRenderer(null,this.componentDef),V=this.componentDef.selectors[0][0]||"div",J=r?function c0(e,t,n){return e.selectRootElement(t,n===ee.ShadowDom)}(I,r,this.componentDef.encapsulation):$l(I,V,function R0(e){const t=e.toLowerCase();return"svg"===t?"svg":"math"===t?"math":null}(V)),me=this.componentDef.onPush?288:272,Oe=Ac(0,null,null,1,0,null,null,null,null,null),Ge=Ha(null,Oe,null,me,null,null,p,I,y,u,null);let tt,ct;Ki(Ge);try{const mt=this.componentDef;let xt,Ze=null;mt.findHostDirectiveDefs?(xt=[],Ze=new Map,mt.findHostDirectiveDefs(mt,xt,Ze),xt.push(mt)):xt=[mt];const Lt=function N0(e,t){const n=e[1];return e[22]=t,ds(n,22,2,"#host",null)}(Ge,J),In=function L0(e,t,n,r,i,l,u,p){const y=i[1];!function $0(e,t,n,r){for(const i of e)t.mergedAttrs=ao(t.mergedAttrs,i.hostAttrs);null!==t.mergedAttrs&&(Ga(t,t.mergedAttrs,!0),null!==n&&Ld(r,n,t))}(r,e,t,u);const I=l.createRenderer(t,n),V=Ha(i,Wf(n),null,n.onPush?32:16,i[e.index],e,l,I,p||null,null,null);return y.firstCreatePass&&xc(y,e,r.length-1),Ua(i,V),i[e.index]=V}(Lt,J,mt,xt,Ge,p,I);ct=Kr(Oe,22),J&&function V0(e,t,n,r){if(r)pi(e,n,["ng-version",cy.full]);else{const{attrs:i,classes:l}=function Ty(e){const t=[],n=[];let r=1,i=2;for(;r0&&Nd(e,n,l.join(" "))}}(I,mt,J,r),void 0!==n&&function H0(e,t,n){const r=e.projection=[];for(let i=0;i=0;r--){const i=e[r];i.hostVars=t+=i.hostVars,i.hostAttrs=ao(i.hostAttrs,n=ao(n,i.hostAttrs))}}(r)}function $c(e){return e===Se?{}:e===Le?[]:e}function z0(e,t){const n=e.viewQuery;e.viewQuery=n?(r,i)=>{t(r,i),n(r,i)}:t}function G0(e,t){const n=e.contentQueries;e.contentQueries=n?(r,i,l)=>{t(r,i,l),n(r,i,l)}:t}function Y0(e,t){const n=e.hostBindings;e.hostBindings=n?(r,i)=>{t(r,i),n(r,i)}:t}let Wa=null;function $i(){if(!Wa){const e=Ct.Symbol;if(e&&e.iterator)Wa=e.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let n=0;nu(Sn(Lt[r.index])):r.index;let Ze=null;if(!u&&p&&(Ze=function sD(e,t,n,r){const i=e.cleanup;if(null!=i)for(let l=0;ly?p[y]:null}"string"==typeof u&&(l+=2)}return null}(e,t,i,r.index)),null!==Ze)(Ze.__ngLastListenerFn__||Ze).__ngNextListenerFn__=l,Ze.__ngLastListenerFn__=l,me=!1;else{l=Mh(r,t,V,l,!1);const Lt=n.listen(ct,i,l);J.push(l,Lt),I&&I.push(i,xt,mt,mt+1)}}else l=Mh(r,t,V,l,!1);const Oe=r.outputs;let Ge;if(me&&null!==Oe&&(Ge=Oe[i])){const tt=Ge.length;if(tt)for(let ct=0;ct-1?rr(e.index,t):t);let y=Sh(t,0,r,u),I=l.__ngNextListenerFn__;for(;I;)y=Sh(t,0,I,u)&&y,I=I.__ngNextListenerFn__;return i&&!1===y&&(u.preventDefault(),u.returnValue=!1),y}}function Ah(e=1){return function $e(e){return(a.lFrame.contextLView=function Xe(e,t){for(;e>0;)t=t[15],e--;return t}(e,a.lFrame.contextLView))[8]}(e)}function aD(e,t){let n=null;const r=function wy(e){const t=e.attrs;if(null!=t){const n=t.indexOf(5);if(0==(1&n))return t[n+1]}return null}(e);for(let i=0;i=0}const ir={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Hh(e){return e.substring(ir.key,ir.keyEnd)}function jh(e,t){const n=ir.textEnd;return n===t?-1:(t=ir.keyEnd=function pD(e,t,n){for(;t32;)t++;return t}(e,ir.key=t,n),Cs(e,t,n))}function Cs(e,t,n){for(;t=0;n=jh(t,n))Cr(e,Hh(t),!0)}function Mo(e,t,n,r){const i=Ve(),l=At(),u=Br(2);l.firstUpdatePass&&Xh(l,e,u,r),t!==Gt&&wr(i,u,t)&&Zh(l,l.data[lt()],i,i[11],e,i[u+1]=function ED(e,t){return null==e||("string"==typeof t?e+=t:"object"==typeof e&&(e=S(wi(e)))),e}(t,n),r,u)}function Kh(e,t){return t>=e.expandoStartIndex}function Xh(e,t,n,r){const i=e.data;if(null===i[n+1]){const l=i[lt()],u=Kh(e,n);Qh(l,r)&&null===t&&!u&&(t=!1),t=function yD(e,t,n,r){const i=function Mi(e){const t=a.lFrame.currentDirectiveIndex;return-1===t?null:e[t]}(e);let l=r?t.residualClasses:t.residualStyles;if(null===i)0===(r?t.classBindings:t.styleBindings)&&(n=ia(n=Zc(null,e,t,n,r),t.attrs,r),l=null);else{const u=t.directiveStylingLast;if(-1===u||e[u]!==i)if(n=Zc(i,e,t,n,r),null===l){let y=function DD(e,t,n){const r=n?t.classBindings:t.styleBindings;if(0!==ri(r))return e[So(r)]}(e,t,r);void 0!==y&&Array.isArray(y)&&(y=Zc(null,e,t,y[1],r),y=ia(y,t.attrs,r),function bD(e,t,n,r){e[So(n?t.classBindings:t.styleBindings)]=r}(e,t,r,y))}else l=function CD(e,t,n){let r;const i=t.directiveEnd;for(let l=1+t.directiveStylingLast;l0)&&(I=!0)}else V=n;if(i)if(0!==y){const me=So(e[p+1]);e[r+1]=$a(me,p),0!==me&&(e[me+1]=pc(e[me+1],r)),e[p+1]=function Ky(e,t){return 131071&e|t<<17}(e[p+1],r)}else e[r+1]=$a(p,0),0!==p&&(e[p+1]=pc(e[p+1],r)),p=r;else e[r+1]=$a(y,0),0===p?p=r:e[y+1]=pc(e[y+1],r),y=r;I&&(e[r+1]=hc(e[r+1])),Vh(e,V,r,!0),Vh(e,V,r,!1),function cD(e,t,n,r,i){const l=i?e.residualClasses:e.residualStyles;null!=l&&"string"==typeof t&&_i(l,t)>=0&&(n[r+1]=gc(n[r+1]))}(t,V,e,r,l),u=$a(p,y),l?t.classBindings=u:t.styleBindings=u}(i,l,t,n,u,r)}}function Zc(e,t,n,r,i){let l=null;const u=n.directiveEnd;let p=n.directiveStylingLast;for(-1===p?p=n.directiveStart:p++;p0;){const y=e[i],I=Array.isArray(y),V=I?y[1]:y,J=null===V;let me=n[i+1];me===Gt&&(me=J?Le:void 0);let Oe=J?Ri(me,r):V===r?me:void 0;if(I&&!Ja(Oe)&&(Oe=Ri(y,r)),Ja(Oe)&&(p=Oe,u))return p;const Ge=e[i+1];i=u?So(Ge):ri(Ge)}if(null!==t){let y=l?t.residualClasses:t.residualStyles;null!=y&&(p=Ri(y,r))}return p}function Ja(e){return void 0!==e}function Qh(e,t){return 0!=(e.flags&(t?8:16))}function ep(e,t=""){const n=Ve(),r=At(),i=e+22,l=r.firstCreatePass?ds(r,i,1,t,null):r.data[i],u=n[i]=function Ll(e,t){return e.createText(t)}(n[11],t);xa(r,n,u,l),br(l,!1)}function Jc(e){return Qa("",e,""),Jc}function Qa(e,t,n){const r=Ve(),i=hs(r,e,t,n);return i!==Gt&&oi(r,lt(),i),Qa}function Qc(e,t,n,r,i){const l=Ve(),u=function ps(e,t,n,r,i,l){const p=Bi(e,oo(),n,i);return Br(2),p?t+re(n)+r+re(i)+l:Gt}(l,e,t,n,r,i);return u!==Gt&&oi(l,lt(),u),Qc}function eu(e,t,n,r,i,l,u){const p=Ve(),y=function gs(e,t,n,r,i,l,u,p){const I=Ka(e,oo(),n,i,u);return Br(3),I?t+re(n)+r+re(i)+l+re(u)+p:Gt}(p,e,t,n,r,i,l,u);return y!==Gt&&oi(p,lt(),y),eu}const Vi=void 0;var zD=["en",[["a","p"],["AM","PM"],Vi],[["AM","PM"],Vi,Vi],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],Vi,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],Vi,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",Vi,"{1} 'at' {0}",Vi],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",function UD(e){const n=Math.floor(Math.abs(e)),r=e.toString().replace(/^[^.]*\.?/,"").length;return 1===n&&0===r?1:5}];let _s={};function tu(e){const t=function GD(e){return e.toLowerCase().replace(/_/g,"-")}(e);let n=Dp(t);if(n)return n;const r=t.split("-")[0];if(n=Dp(r),n)return n;if("en"===r)return zD;throw new ie(701,!1)}function yp(e){return tu(e)[Ot.PluralCase]}function Dp(e){return e in _s||(_s[e]=Ct.ng&&Ct.ng.common&&Ct.ng.common.locales&&Ct.ng.common.locales[e]),_s[e]}var Ot=(()=>((Ot=Ot||{})[Ot.LocaleId=0]="LocaleId",Ot[Ot.DayPeriodsFormat=1]="DayPeriodsFormat",Ot[Ot.DayPeriodsStandalone=2]="DayPeriodsStandalone",Ot[Ot.DaysFormat=3]="DaysFormat",Ot[Ot.DaysStandalone=4]="DaysStandalone",Ot[Ot.MonthsFormat=5]="MonthsFormat",Ot[Ot.MonthsStandalone=6]="MonthsStandalone",Ot[Ot.Eras=7]="Eras",Ot[Ot.FirstDayOfWeek=8]="FirstDayOfWeek",Ot[Ot.WeekendRange=9]="WeekendRange",Ot[Ot.DateFormat=10]="DateFormat",Ot[Ot.TimeFormat=11]="TimeFormat",Ot[Ot.DateTimeFormat=12]="DateTimeFormat",Ot[Ot.NumberSymbols=13]="NumberSymbols",Ot[Ot.NumberFormats=14]="NumberFormats",Ot[Ot.CurrencyCode=15]="CurrencyCode",Ot[Ot.CurrencySymbol=16]="CurrencySymbol",Ot[Ot.CurrencyName=17]="CurrencyName",Ot[Ot.Currencies=18]="Currencies",Ot[Ot.Directionality=19]="Directionality",Ot[Ot.PluralCase=20]="PluralCase",Ot[Ot.ExtraData=21]="ExtraData",Ot))();const ws="en-US";let bp=ws;function ou(e,t,n,r,i){if(e=P(e),Array.isArray(e))for(let l=0;l>20;if(ki(e)||!e.multi){const Oe=new fi(y,i,us),Ge=su(p,t,i?V:V+me,J);-1===Ge?(es(Ji(I,u),l,p),iu(l,e,t.length),t.push(p),I.directiveStart++,I.directiveEnd++,i&&(I.providerIndexes+=1048576),n.push(Oe),u.push(Oe)):(n[Ge]=Oe,u[Ge]=Oe)}else{const Oe=su(p,t,V+me,J),Ge=su(p,t,V,V+me),tt=Oe>=0&&n[Oe],ct=Ge>=0&&n[Ge];if(i&&!ct||!i&&!tt){es(Ji(I,u),l,p);const mt=function jb(e,t,n,r,i){const l=new fi(e,n,us);return l.multi=[],l.index=t,l.componentProviders=0,Gp(l,i,r&&!n),l}(i?Hb:Vb,n.length,i,r,y);!i&&ct&&(n[Ge].providerFactory=mt),iu(l,e,t.length,0),t.push(p),I.directiveStart++,I.directiveEnd++,i&&(I.providerIndexes+=1048576),n.push(mt),u.push(mt)}else iu(l,e,Oe>-1?Oe:Ge,Gp(n[i?Ge:Oe],y,!i&&r));!i&&r&&ct&&n[Ge].componentProviders++}}}function iu(e,t,n,r){const i=ki(t),l=function Kv(e){return!!e.useClass}(t);if(i||l){const y=(l?P(t.useClass):t).prototype.ngOnDestroy;if(y){const I=e.destroyHooks||(e.destroyHooks=[]);if(!i&&t.multi){const V=I.indexOf(n);-1===V?I.push(n,[r,y]):I[V+1].push(r,y)}else I.push(n,y)}}}function Gp(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function su(e,t,n,r){for(let i=n;i{n.providersResolver=(r,i)=>function Bb(e,t,n){const r=At();if(r.firstCreatePass){const i=Gn(e);ou(n,r.data,r.blueprint,i,!0),ou(t,r.data,r.blueprint,i,!1)}}(r,i?i(e):e,t)}}class Es{}class Wp{}function Ub(e,t){return new Kp(e,t??null)}class Kp extends Es{constructor(t,n){super(),this._parent=n,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Nc(this);const r=On(t);this._bootstrapComponents=ni(r.bootstrap),this._r3Injector=Mf(t,n,[{provide:Es,useValue:this},{provide:Zs,useValue:this.componentFactoryResolver}],S(t),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(t)}get injector(){return this._r3Injector}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class lu extends Wp{constructor(t){super(),this.moduleType=t}create(t){return new Kp(this.moduleType,t)}}class zb extends Es{constructor(t,n,r){super(),this.componentFactoryResolver=new Nc(this),this.instance=null;const i=new lf([...t,{provide:Es,useValue:this},{provide:Zs,useValue:this.componentFactoryResolver}],n||Na(),r,new Set(["environment"]));this.injector=i,i.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}}function cu(e,t,n=null){return new zb(e,t,n).injector}let Gb=(()=>{class e{constructor(n){this._injector=n,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n.id)){const r=nf(0,n.type),i=r.length>0?cu([r],this._injector,`Standalone[${n.type.name}]`):null;this.cachedInjectors.set(n.id,i)}return this.cachedInjectors.get(n.id)}ngOnDestroy(){try{for(const n of this.cachedInjectors.values())null!==n&&n.destroy()}finally{this.cachedInjectors.clear()}}}return e.\u0275prov=wt({token:e,providedIn:"environment",factory:()=>new e(He(Ni))}),e})();function Xp(e){e.getStandaloneInjector=t=>t.get(Gb).getOrCreateStandaloneInjector(e)}function ng(e,t,n,r){return sg(Ve(),lr(),e,t,n,r)}function rg(e,t,n,r,i){return ag(Ve(),lr(),e,t,n,r,i)}function og(e,t,n,r,i,l){return lg(Ve(),lr(),e,t,n,r,i,l)}function ig(e,t,n,r,i,l,u,p,y){const I=lr()+e,V=Ve(),J=function co(e,t,n,r,i,l){const u=Bi(e,t,n,r);return Bi(e,t+2,i,l)||u}(V,I,n,r,i,l);return Bi(V,I+4,u,p)||J?Ho(V,I+6,y?t.call(y,n,r,i,l,u,p):t(n,r,i,l,u,p)):function oa(e,t){return e[t]}(V,I+6)}function da(e,t){const n=e[t];return n===Gt?void 0:n}function sg(e,t,n,r,i,l){const u=t+n;return wr(e,u,i)?Ho(e,u+1,l?r.call(l,i):r(i)):da(e,u+1)}function ag(e,t,n,r,i,l,u){const p=t+n;return Bi(e,p,i,l)?Ho(e,p+2,u?r.call(u,i,l):r(i,l)):da(e,p+2)}function lg(e,t,n,r,i,l,u,p){const y=t+n;return Ka(e,y,i,l,u)?Ho(e,y+3,p?r.call(p,i,l,u):r(i,l,u)):da(e,y+3)}function dg(e,t){const n=At();let r;const i=e+22;n.firstCreatePass?(r=function sC(e,t){if(t)for(let n=t.length-1;n>=0;n--){const r=t[n];if(e===r.name)return r}}(t,n.pipeRegistry),n.data[i]=r,r.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(i,r.onDestroy)):r=n.data[i];const l=r.factory||(r.factory=nr(r.type)),u=nt(us);try{const p=Zi(!1),y=l();return Zi(p),function rD(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}(n,Ve(),i,y),y}finally{nt(u)}}function fg(e,t,n){const r=e+22,i=Ve(),l=no(i,r);return fa(i,r)?sg(i,lr(),t,l.transform,n,l):l.transform(n)}function hg(e,t,n,r){const i=e+22,l=Ve(),u=no(l,i);return fa(l,i)?ag(l,lr(),t,u.transform,n,r,u):u.transform(n,r)}function pg(e,t,n,r,i){const l=e+22,u=Ve(),p=no(u,l);return fa(u,l)?lg(u,lr(),t,p.transform,n,r,i,p):p.transform(n,r,i)}function fa(e,t){return e[1].data[t].pure}function du(e){return t=>{setTimeout(e,void 0,t)}}const zo=class cC extends o.x{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){let i=t,l=n||(()=>null),u=r;if(t&&"object"==typeof t){const y=t;i=y.next?.bind(y),l=y.error?.bind(y),u=y.complete?.bind(y)}this.__isAsync&&(l=du(l),i&&(i=du(i)),u&&(u=du(u)));const p=super.subscribe({next:i,error:l,complete:u});return t instanceof x.w0&&t.add(p),p}};function uC(){return this._results[$i()]()}class fu{constructor(t=!1){this._emitDistinctChangesOnly=t,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const n=$i(),r=fu.prototype;r[n]||(r[n]=uC)}get changes(){return this._changes||(this._changes=new zo)}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){const r=this;r.dirty=!1;const i=z(t);(this._changesDetected=!function $(e,t,n){if(e.length!==t.length)return!1;for(let r=0;r{class e{}return e.__NG_ELEMENT_ID__=hC,e})();const dC=ha,fC=class extends dC{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}createEmbeddedView(t,n){const r=this._declarationTContainer.tViews,i=Ha(this._declarationLView,r,t,16,null,r.declTNode,null,null,null,null,n||null);i[17]=this._declarationLView[this._declarationTContainer.index];const u=this._declarationLView[19];return null!==u&&(i[19]=u.createEmbeddedView(r)),Ec(r,i,t),new ta(i)}};function hC(){return ol(Mn(),Ve())}function ol(e,t){return 4&e.type?new fC(t,e,as(e,t)):null}let il=(()=>{class e{}return e.__NG_ELEMENT_ID__=pC,e})();function pC(){return vg(Mn(),Ve())}const gC=il,gg=class extends gC{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return as(this._hostTNode,this._hostLView)}get injector(){return new Ti(this._hostTNode,this._hostLView)}get parentInjector(){const t=Qi(this._hostTNode,this._hostLView);if(ba(t)){const n=gi(t,this._hostLView),r=Zo(t);return new Ti(n[1].data[r+8],n)}return new Ti(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=mg(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-10}createEmbeddedView(t,n,r){let i,l;"number"==typeof r?i=r:null!=r&&(i=r.index,l=r.injector);const u=t.createEmbeddedView(n||{},l);return this.insert(u,i),u}createComponent(t,n,r,i,l){const u=t&&!function m(e){return"function"==typeof e}(t);let p;if(u)p=n;else{const J=n||{};p=J.index,r=J.injector,i=J.projectableNodes,l=J.environmentInjector||J.ngModuleRef}const y=u?t:new na($t(t)),I=r||this.parentInjector;if(!l&&null==y.ngModule){const me=(u?I:this.parentInjector).get(Ni,null);me&&(l=me)}const V=y.create(I,i,void 0,l);return this.insert(V.hostView,p),V}insert(t,n){const r=t._lView,i=r[1];if(function Ui(e){return zn(e[3])}(r)){const V=this.indexOf(t);if(-1!==V)this.detach(V);else{const J=r[3],me=new gg(J,J[6],J[3]);me.detach(me.indexOf(t))}}const l=this._adjustIndex(n),u=this._lContainer;!function uv(e,t,n,r){const i=10+r,l=n.length;r>0&&(n[i-1][4]=t),r0)r.push(u[p/2]);else{const I=l[p+1],V=t[-y];for(let J=10;J{class e{constructor(n){this.appInits=n,this.resolve=al,this.reject=al,this.initialized=!1,this.done=!1,this.donePromise=new Promise((r,i)=>{this.resolve=r,this.reject=i})}runInitializers(){if(this.initialized)return;const n=[],r=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let i=0;i{l.subscribe({complete:p,error:y})});n.push(u)}}Promise.all(n).then(()=>{r()}).catch(i=>{this.reject(i)}),0===n.length&&r(),this.initialized=!0}}return e.\u0275fac=function(n){return new(n||e)(He(Yg,8))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const Wg=new _n("AppId",{providedIn:"root",factory:function Kg(){return`${wu()}${wu()}${wu()}`}});function wu(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const Xg=new _n("Platform Initializer"),UC=new _n("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),qg=new _n("appBootstrapListener");let zC=(()=>{class e{log(n){console.log(n)}warn(n){console.warn(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();const cl=new _n("LocaleId",{providedIn:"root",factory:()=>pt(cl,gt.Optional|gt.SkipSelf)||function GC(){return typeof $localize<"u"&&$localize.locale||ws}()}),YC=new _n("DefaultCurrencyCode",{providedIn:"root",factory:()=>"USD"});class WC{constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}}let KC=(()=>{class e{compileModuleSync(n){return new lu(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){const r=this.compileModuleSync(n),l=ni(On(n).declarations).reduce((u,p)=>{const y=$t(p);return y&&u.push(new na(y)),u},[]);return new WC(r,l)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const ZC=(()=>Promise.resolve(0))();function Eu(e){typeof Zone>"u"?ZC.then(()=>{e&&e.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",e)}class uo{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new zo(!1),this.onMicrotaskEmpty=new zo(!1),this.onStable=new zo(!1),this.onError=new zo(!1),typeof Zone>"u")throw new ie(908,!1);Zone.assertZonePatched();const i=this;i._nesting=0,i._outer=i._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(i._inner=i._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(i._inner=i._inner.fork(Zone.longStackTraceZoneSpec)),i.shouldCoalesceEventChangeDetection=!r&&n,i.shouldCoalesceRunChangeDetection=r,i.lastRequestAnimationFrameId=-1,i.nativeRequestAnimationFrame=function JC(){let e=Ct.requestAnimationFrame,t=Ct.cancelAnimationFrame;if(typeof Zone<"u"&&e&&t){const n=e[Zone.__symbol__("OriginalDelegate")];n&&(e=n);const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r)}return{nativeRequestAnimationFrame:e,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function t_(e){const t=()=>{!function e_(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(Ct,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,Su(e),e.isCheckStableRunning=!0,Iu(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),Su(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,i,l,u,p)=>{try{return Qg(e),n.invokeTask(i,l,u,p)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===l.type||e.shouldCoalesceRunChangeDetection)&&t(),em(e)}},onInvoke:(n,r,i,l,u,p,y)=>{try{return Qg(e),n.invoke(i,l,u,p,y)}finally{e.shouldCoalesceRunChangeDetection&&t(),em(e)}},onHasTask:(n,r,i,l)=>{n.hasTask(i,l),r===i&&("microTask"==l.change?(e._hasPendingMicrotasks=l.microTask,Su(e),Iu(e)):"macroTask"==l.change&&(e.hasPendingMacrotasks=l.macroTask))},onHandleError:(n,r,i,l)=>(n.handleError(i,l),e.runOutsideAngular(()=>e.onError.emit(l)),!1)})}(i)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!uo.isInAngularZone())throw new ie(909,!1)}static assertNotInAngularZone(){if(uo.isInAngularZone())throw new ie(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,i){const l=this._inner,u=l.scheduleEventTask("NgZoneEvent: "+i,t,QC,al,al);try{return l.runTask(u,n,r)}finally{l.cancelTask(u)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const QC={};function Iu(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function Su(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function Qg(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function em(e){e._nesting--,Iu(e)}class n_{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new zo,this.onMicrotaskEmpty=new zo,this.onStable=new zo,this.onError=new zo}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,i){return t.apply(n,r)}}const tm=new _n(""),nm=new _n("");let Mu,r_=(()=>{class e{constructor(n,r,i){this._ngZone=n,this.registry=r,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,Mu||(function o_(e){Mu=e}(i),i.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{uo.assertNotInAngularZone(),Eu(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())Eu(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,i){let l=-1;r&&r>0&&(l=setTimeout(()=>{this._callbacks=this._callbacks.filter(u=>u.timeoutId!==l),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:l,updateCb:i})}whenStable(n,r,i){if(i&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,i),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,i){return[]}}return e.\u0275fac=function(n){return new(n||e)(He(uo),He(rm),He(nm))},e.\u0275prov=wt({token:e,factory:e.\u0275fac}),e})(),rm=(()=>{class e{constructor(){this._applications=new Map}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return Mu?.findTestabilityInTree(this,n,r)??null}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})(),Si=null;const om=new _n("AllowMultipleToken"),Au=new _n("PlatformDestroyListeners");class a_{constructor(t,n){this.name=t,this.token=n}}function sm(e,t,n=[]){const r=`Platform: ${t}`,i=new _n(r);return(l=[])=>{let u=Tu();if(!u||u.injector.get(om,!1)){const p=[...n,...l,{provide:i,useValue:!0}];e?e(p):function l_(e){if(Si&&!Si.get(om,!1))throw new ie(400,!1);Si=e;const t=e.get(lm);(function im(e){const t=e.get(Xg,null);t&&t.forEach(n=>n())})(e)}(function am(e=[],t){return Li.create({name:t,providers:[{provide:nc,useValue:"platform"},{provide:Au,useValue:new Set([()=>Si=null])},...e]})}(p,r))}return function u_(e){const t=Tu();if(!t)throw new ie(401,!1);return t}()}}function Tu(){return Si?.get(lm)??null}let lm=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const i=function um(e,t){let n;return n="noop"===e?new n_:("zone.js"===e?void 0:e)||new uo(t),n}(r?.ngZone,function cm(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!(!e||!e.ngZoneEventCoalescing)||!1,shouldCoalesceRunChangeDetection:!(!e||!e.ngZoneRunCoalescing)||!1}}(r)),l=[{provide:uo,useValue:i}];return i.run(()=>{const u=Li.create({providers:l,parent:this.injector,name:n.moduleType.name}),p=n.create(u),y=p.injector.get(Qs,null);if(!y)throw new ie(402,!1);return i.runOutsideAngular(()=>{const I=i.onError.subscribe({next:V=>{y.handleError(V)}});p.onDestroy(()=>{dl(this._modules,p),I.unsubscribe()})}),function dm(e,t,n){try{const r=n();return Wc(r)?r.catch(i=>{throw t.runOutsideAngular(()=>e.handleError(i)),i}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(y,i,()=>{const I=p.injector.get(ll);return I.runInitializers(),I.donePromise.then(()=>(function Cp(e){et(e,"Expected localeId to be defined"),"string"==typeof e&&(bp=e.toLowerCase().replace(/_/g,"-"))}(p.injector.get(cl,ws)||ws),this._moduleDoBootstrap(p),p))})})}bootstrapModule(n,r=[]){const i=fm({},r);return function i_(e,t,n){const r=new lu(n);return Promise.resolve(r)}(0,0,n).then(l=>this.bootstrapModuleFactory(l,i))}_moduleDoBootstrap(n){const r=n.injector.get(ul);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(i=>r.bootstrap(i));else{if(!n.instance.ngDoBootstrap)throw new ie(403,!1);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new ie(404,!1);this._modules.slice().forEach(r=>r.destroy()),this._destroyListeners.forEach(r=>r());const n=this._injector.get(Au,null);n&&(n.forEach(r=>r()),n.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}}return e.\u0275fac=function(n){return new(n||e)(He(Li))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();function fm(e,t){return Array.isArray(t)?t.reduce(fm,e):{...e,...t}}let ul=(()=>{class e{constructor(n,r,i){this._zone=n,this._injector=r,this._exceptionHandler=i,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this._destroyed=!1,this._destroyListeners=[],this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const l=new N.y(p=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{p.next(this._stable),p.complete()})}),u=new N.y(p=>{let y;this._zone.runOutsideAngular(()=>{y=this._zone.onStable.subscribe(()=>{uo.assertNotInAngularZone(),Eu(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,p.next(!0))})})});const I=this._zone.onUnstable.subscribe(()=>{uo.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{p.next(!1)}))});return()=>{y.unsubscribe(),I.unsubscribe()}});this.isStable=function _(...e){const t=(0,M.yG)(e),n=(0,M._6)(e,1/0),r=e;return r.length?1===r.length?(0,R.Xf)(r[0]):(0,ge.J)(n)((0,U.D)(r,t)):W.E}(l,u.pipe((0,Y.B)()))}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(n,r){const i=n instanceof uf;if(!this._injector.get(ll).done)throw!i&&Un(n),new ie(405,false);let u;u=i?n:this._injector.get(Zs).resolveComponentFactory(n),this.componentTypes.push(u.componentType);const p=function s_(e){return e.isBoundToModule}(u)?void 0:this._injector.get(Es),I=u.create(Li.NULL,[],r||u.selector,p),V=I.location.nativeElement,J=I.injector.get(tm,null);return J?.registerApplication(V),I.onDestroy(()=>{this.detachView(I.hostView),dl(this.components,I),J?.unregisterApplication(V)}),this._loadComponent(I),I}tick(){if(this._runningTick)throw new ie(101,!1);try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;dl(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n),this._injector.get(qg,[]).concat(this._bootstrapListeners).forEach(i=>i(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>dl(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new ie(406,!1);const n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return e.\u0275fac=function(n){return new(n||e)(He(uo),He(Ni),He(Qs))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();function dl(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}function f_(){}let h_=(()=>{class e{}return e.__NG_ELEMENT_ID__=p_,e})();function p_(e){return function g_(e,t,n){if(dr(e)&&!n){const r=rr(e.index,t);return new ta(r,r)}return 47&e.type?new ta(t[16],t):null}(Mn(),Ve(),16==(16&e))}class vm{constructor(){}supports(t){return ra(t)}create(t){return new C_(t)}}const b_=(e,t)=>t;class C_{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||b_}forEachItem(t){let n;for(n=this._itHead;null!==n;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,i=0,l=null;for(;n||r;){const u=!r||n&&n.currentIndex{u=this._trackByFn(i,p),null!==n&&Object.is(n.trackById,u)?(r&&(n=this._verifyReinsertion(n,p,u,i)),Object.is(n.item,p)||this._addIdentityChange(n,p)):(n=this._mismatch(n,p,u,i),r=!0),n=n._next,i++}),this.length=i;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,i){let l;return null===t?l=this._itTail:(l=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,l,i)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(r,i))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,l,i)):t=this._addAfter(new __(n,r),l,i),t}_verifyReinsertion(t,n,r,i){let l=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null);return null!==l?t=this._reinsertAfter(l,t._prev,i):t.currentIndex!=i&&(t.currentIndex=i,this._addToMoves(t,i)),t}_truncate(t){for(;null!==t;){const n=t._next;this._addToRemovals(this._unlink(t)),t=n}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const i=t._prevRemoved,l=t._nextRemoved;return null===i?this._removalsHead=l:i._nextRemoved=l,null===l?this._removalsTail=i:l._prevRemoved=i,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){const i=null===n?this._itHead:n._next;return t._next=i,t._prev=n,null===i?this._itTail=t:i._prev=t,null===n?this._itHead=t:n._next=t,null===this._linkedRecords&&(this._linkedRecords=new ym),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const n=t._prev,r=t._next;return null===n?this._itHead=r:n._next=r,null===r?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new ym),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class __{constructor(t,n){this.item=t,this.trackById=n,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class w_{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;null!==r;r=r._nextDup)if((null===n||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){const n=t._prevDup,r=t._nextDup;return null===n?this._head=r:n._nextDup=r,null===r?this._tail=n:r._prevDup=n,null===this._head}}class ym{constructor(){this.map=new Map}put(t){const n=t.trackById;let r=this.map.get(n);r||(r=new w_,this.map.set(n,r)),r.add(t)}get(t,n){const i=this.map.get(t);return i?i.get(t,n):null}remove(t){const n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function Dm(e,t,n){const r=e.previousIndex;if(null===r)return r;let i=0;return n&&r{if(n&&n.key===i)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{const l=this._getOrCreateRecordForKey(i,r);n=this._insertBeforeOrAppend(n,l)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){const r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){const i=this._records.get(t);this._maybeAddToChanges(i,n);const l=i._prev,u=i._next;return l&&(l._next=u),u&&(u._prev=l),i._next=null,i._prev=null,i}const r=new I_(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}}class I_{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function Cm(){return new Fu([new vm])}let Fu=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(null!=r){const i=r.factories.slice();n=n.concat(i)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||Cm()),deps:[[e,new js,new Hs]]}}find(n){const r=this.factories.find(i=>i.supports(n));if(null!=r)return r;throw new ie(901,!1)}}return e.\u0275prov=wt({token:e,providedIn:"root",factory:Cm}),e})();function _m(){return new ku([new bm])}let ku=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(r){const i=r.factories.slice();n=n.concat(i)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||_m()),deps:[[e,new js,new Hs]]}}find(n){const r=this.factories.find(i=>i.supports(n));if(r)return r;throw new ie(901,!1)}}return e.\u0275prov=wt({token:e,providedIn:"root",factory:_m}),e})();const A_=sm(null,"core",[]);let T_=(()=>{class e{constructor(n){}}return e.\u0275fac=function(n){return new(n||e)(He(ul))},e.\u0275mod=vn({type:e}),e.\u0275inj=Kt({}),e})();function x_(e){return"boolean"==typeof e?e:null!=e&&"false"!==e}},433:(Qe,Fe,w)=>{"use strict";w.d(Fe,{u5:()=>wo,JU:()=>E,a5:()=>Vt,JJ:()=>gt,JL:()=>Yt,F:()=>le,On:()=>fo,c5:()=>Lr,Q7:()=>Wr,_Y:()=>ho});var o=w(8274),x=w(6895),N=w(2076),ge=w(9751),R=w(4742),W=w(8421),M=w(3269),U=w(5403),_=w(3268),Y=w(1810),Z=w(4004);let S=(()=>{class C{constructor(c,a){this._renderer=c,this._elementRef=a,this.onChange=g=>{},this.onTouched=()=>{}}setProperty(c,a){this._renderer.setProperty(this._elementRef.nativeElement,c,a)}registerOnTouched(c){this.onTouched=c}registerOnChange(c){this.onChange=c}setDisabledState(c){this.setProperty("disabled",c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(o.Qsj),o.Y36(o.SBq))},C.\u0275dir=o.lG2({type:C}),C})(),B=(()=>{class C extends S{}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,features:[o.qOj]}),C})();const E=new o.OlP("NgValueAccessor"),K={provide:E,useExisting:(0,o.Gpc)(()=>Te),multi:!0},ke=new o.OlP("CompositionEventMode");let Te=(()=>{class C extends S{constructor(c,a,g){super(c,a),this._compositionMode=g,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function pe(){const C=(0,x.q)()?(0,x.q)().getUserAgent():"";return/android (\d+)/.test(C.toLowerCase())}())}writeValue(c){this.setProperty("value",c??"")}_handleInput(c){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(c)}_compositionStart(){this._composing=!0}_compositionEnd(c){this._composing=!1,this._compositionMode&&this.onChange(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(o.Qsj),o.Y36(o.SBq),o.Y36(ke,8))},C.\u0275dir=o.lG2({type:C,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(c,a){1&c&&o.NdJ("input",function(L){return a._handleInput(L.target.value)})("blur",function(){return a.onTouched()})("compositionstart",function(){return a._compositionStart()})("compositionend",function(L){return a._compositionEnd(L.target.value)})},features:[o._Bn([K]),o.qOj]}),C})();function Be(C){return null==C||("string"==typeof C||Array.isArray(C))&&0===C.length}const oe=new o.OlP("NgValidators"),be=new o.OlP("NgAsyncValidators");function O(C){return Be(C.value)?{required:!0}:null}function de(C){return null}function ne(C){return null!=C}function Ee(C){return(0,o.QGY)(C)?(0,N.D)(C):C}function Ce(C){let s={};return C.forEach(c=>{s=null!=c?{...s,...c}:s}),0===Object.keys(s).length?null:s}function ze(C,s){return s.map(c=>c(C))}function et(C){return C.map(s=>function dt(C){return!C.validate}(s)?s:c=>s.validate(c))}function St(C){return null!=C?function Ue(C){if(!C)return null;const s=C.filter(ne);return 0==s.length?null:function(c){return Ce(ze(c,s))}}(et(C)):null}function nn(C){return null!=C?function Ke(C){if(!C)return null;const s=C.filter(ne);return 0==s.length?null:function(c){return function G(...C){const s=(0,M.jO)(C),{args:c,keys:a}=(0,R.D)(C),g=new ge.y(L=>{const{length:Me}=c;if(!Me)return void L.complete();const Je=new Array(Me);let at=Me,Dt=Me;for(let Zt=0;Zt{bn||(bn=!0,Dt--),Je[Zt]=Ve},()=>at--,void 0,()=>{(!at||!bn)&&(Dt||L.next(a?(0,Y.n)(a,Je):Je),L.complete())}))}});return s?g.pipe((0,_.Z)(s)):g}(ze(c,s).map(Ee)).pipe((0,Z.U)(Ce))}}(et(C)):null}function wt(C,s){return null===C?[s]:Array.isArray(C)?[...C,s]:[C,s]}function pn(C){return C?Array.isArray(C)?C:[C]:[]}function Pt(C,s){return Array.isArray(C)?C.includes(s):C===s}function Ut(C,s){const c=pn(s);return pn(C).forEach(g=>{Pt(c,g)||c.push(g)}),c}function it(C,s){return pn(s).filter(c=>!Pt(C,c))}class Xt{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(s){this._rawValidators=s||[],this._composedValidatorFn=St(this._rawValidators)}_setAsyncValidators(s){this._rawAsyncValidators=s||[],this._composedAsyncValidatorFn=nn(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(s){this._onDestroyCallbacks.push(s)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(s=>s()),this._onDestroyCallbacks=[]}reset(s){this.control&&this.control.reset(s)}hasError(s,c){return!!this.control&&this.control.hasError(s,c)}getError(s,c){return this.control?this.control.getError(s,c):null}}class kt extends Xt{get formDirective(){return null}get path(){return null}}class Vt extends Xt{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class rn{constructor(s){this._cd=s}get isTouched(){return!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return!!this._cd?.submitted}}let gt=(()=>{class C extends rn{constructor(c){super(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(Vt,2))},C.\u0275dir=o.lG2({type:C,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(c,a){2&c&&o.ekj("ng-untouched",a.isUntouched)("ng-touched",a.isTouched)("ng-pristine",a.isPristine)("ng-dirty",a.isDirty)("ng-valid",a.isValid)("ng-invalid",a.isInvalid)("ng-pending",a.isPending)},features:[o.qOj]}),C})(),Yt=(()=>{class C extends rn{constructor(c){super(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(kt,10))},C.\u0275dir=o.lG2({type:C,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(c,a){2&c&&o.ekj("ng-untouched",a.isUntouched)("ng-touched",a.isTouched)("ng-pristine",a.isPristine)("ng-dirty",a.isDirty)("ng-valid",a.isValid)("ng-invalid",a.isInvalid)("ng-pending",a.isPending)("ng-submitted",a.isSubmitted)},features:[o.qOj]}),C})();const He="VALID",Ye="INVALID",pt="PENDING",vt="DISABLED";function Ht(C){return(mn(C)?C.validators:C)||null}function tn(C,s){return(mn(s)?s.asyncValidators:C)||null}function mn(C){return null!=C&&!Array.isArray(C)&&"object"==typeof C}class _e{constructor(s,c){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._assignValidators(s),this._assignAsyncValidators(c)}get validator(){return this._composedValidatorFn}set validator(s){this._rawValidators=this._composedValidatorFn=s}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(s){this._rawAsyncValidators=this._composedAsyncValidatorFn=s}get parent(){return this._parent}get valid(){return this.status===He}get invalid(){return this.status===Ye}get pending(){return this.status==pt}get disabled(){return this.status===vt}get enabled(){return this.status!==vt}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(s){this._assignValidators(s)}setAsyncValidators(s){this._assignAsyncValidators(s)}addValidators(s){this.setValidators(Ut(s,this._rawValidators))}addAsyncValidators(s){this.setAsyncValidators(Ut(s,this._rawAsyncValidators))}removeValidators(s){this.setValidators(it(s,this._rawValidators))}removeAsyncValidators(s){this.setAsyncValidators(it(s,this._rawAsyncValidators))}hasValidator(s){return Pt(this._rawValidators,s)}hasAsyncValidator(s){return Pt(this._rawAsyncValidators,s)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(s={}){this.touched=!0,this._parent&&!s.onlySelf&&this._parent.markAsTouched(s)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(s=>s.markAllAsTouched())}markAsUntouched(s={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(c=>{c.markAsUntouched({onlySelf:!0})}),this._parent&&!s.onlySelf&&this._parent._updateTouched(s)}markAsDirty(s={}){this.pristine=!1,this._parent&&!s.onlySelf&&this._parent.markAsDirty(s)}markAsPristine(s={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(c=>{c.markAsPristine({onlySelf:!0})}),this._parent&&!s.onlySelf&&this._parent._updatePristine(s)}markAsPending(s={}){this.status=pt,!1!==s.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!s.onlySelf&&this._parent.markAsPending(s)}disable(s={}){const c=this._parentMarkedDirty(s.onlySelf);this.status=vt,this.errors=null,this._forEachChild(a=>{a.disable({...s,onlySelf:!0})}),this._updateValue(),!1!==s.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors({...s,skipPristineCheck:c}),this._onDisabledChange.forEach(a=>a(!0))}enable(s={}){const c=this._parentMarkedDirty(s.onlySelf);this.status=He,this._forEachChild(a=>{a.enable({...s,onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:s.emitEvent}),this._updateAncestors({...s,skipPristineCheck:c}),this._onDisabledChange.forEach(a=>a(!1))}_updateAncestors(s){this._parent&&!s.onlySelf&&(this._parent.updateValueAndValidity(s),s.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(s){this._parent=s}getRawValue(){return this.value}updateValueAndValidity(s={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===He||this.status===pt)&&this._runAsyncValidator(s.emitEvent)),!1!==s.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!s.onlySelf&&this._parent.updateValueAndValidity(s)}_updateTreeValidity(s={emitEvent:!0}){this._forEachChild(c=>c._updateTreeValidity(s)),this.updateValueAndValidity({onlySelf:!0,emitEvent:s.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?vt:He}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(s){if(this.asyncValidator){this.status=pt,this._hasOwnPendingAsyncValidator=!0;const c=Ee(this.asyncValidator(this));this._asyncValidationSubscription=c.subscribe(a=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(a,{emitEvent:s})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(s,c={}){this.errors=s,this._updateControlsErrors(!1!==c.emitEvent)}get(s){let c=s;return null==c||(Array.isArray(c)||(c=c.split(".")),0===c.length)?null:c.reduce((a,g)=>a&&a._find(g),this)}getError(s,c){const a=c?this.get(c):this;return a&&a.errors?a.errors[s]:null}hasError(s,c){return!!this.getError(s,c)}get root(){let s=this;for(;s._parent;)s=s._parent;return s}_updateControlsErrors(s){this.status=this._calculateStatus(),s&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(s)}_initObservables(){this.valueChanges=new o.vpe,this.statusChanges=new o.vpe}_calculateStatus(){return this._allControlsDisabled()?vt:this.errors?Ye:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(pt)?pt:this._anyControlsHaveStatus(Ye)?Ye:He}_anyControlsHaveStatus(s){return this._anyControls(c=>c.status===s)}_anyControlsDirty(){return this._anyControls(s=>s.dirty)}_anyControlsTouched(){return this._anyControls(s=>s.touched)}_updatePristine(s={}){this.pristine=!this._anyControlsDirty(),this._parent&&!s.onlySelf&&this._parent._updatePristine(s)}_updateTouched(s={}){this.touched=this._anyControlsTouched(),this._parent&&!s.onlySelf&&this._parent._updateTouched(s)}_registerOnCollectionChange(s){this._onCollectionChange=s}_setUpdateStrategy(s){mn(s)&&null!=s.updateOn&&(this._updateOn=s.updateOn)}_parentMarkedDirty(s){return!s&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}_find(s){return null}_assignValidators(s){this._rawValidators=Array.isArray(s)?s.slice():s,this._composedValidatorFn=function _t(C){return Array.isArray(C)?St(C):C||null}(this._rawValidators)}_assignAsyncValidators(s){this._rawAsyncValidators=Array.isArray(s)?s.slice():s,this._composedAsyncValidatorFn=function Ln(C){return Array.isArray(C)?nn(C):C||null}(this._rawAsyncValidators)}}class fe extends _e{constructor(s,c,a){super(Ht(c),tn(a,c)),this.controls=s,this._initObservables(),this._setUpdateStrategy(c),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(s,c){return this.controls[s]?this.controls[s]:(this.controls[s]=c,c.setParent(this),c._registerOnCollectionChange(this._onCollectionChange),c)}addControl(s,c,a={}){this.registerControl(s,c),this.updateValueAndValidity({emitEvent:a.emitEvent}),this._onCollectionChange()}removeControl(s,c={}){this.controls[s]&&this.controls[s]._registerOnCollectionChange(()=>{}),delete this.controls[s],this.updateValueAndValidity({emitEvent:c.emitEvent}),this._onCollectionChange()}setControl(s,c,a={}){this.controls[s]&&this.controls[s]._registerOnCollectionChange(()=>{}),delete this.controls[s],c&&this.registerControl(s,c),this.updateValueAndValidity({emitEvent:a.emitEvent}),this._onCollectionChange()}contains(s){return this.controls.hasOwnProperty(s)&&this.controls[s].enabled}setValue(s,c={}){(function Ft(C,s,c){C._forEachChild((a,g)=>{if(void 0===c[g])throw new o.vHH(1002,"")})})(this,0,s),Object.keys(s).forEach(a=>{(function ln(C,s,c){const a=C.controls;if(!(s?Object.keys(a):a).length)throw new o.vHH(1e3,"");if(!a[c])throw new o.vHH(1001,"")})(this,!0,a),this.controls[a].setValue(s[a],{onlySelf:!0,emitEvent:c.emitEvent})}),this.updateValueAndValidity(c)}patchValue(s,c={}){null!=s&&(Object.keys(s).forEach(a=>{const g=this.controls[a];g&&g.patchValue(s[a],{onlySelf:!0,emitEvent:c.emitEvent})}),this.updateValueAndValidity(c))}reset(s={},c={}){this._forEachChild((a,g)=>{a.reset(s[g],{onlySelf:!0,emitEvent:c.emitEvent})}),this._updatePristine(c),this._updateTouched(c),this.updateValueAndValidity(c)}getRawValue(){return this._reduceChildren({},(s,c,a)=>(s[a]=c.getRawValue(),s))}_syncPendingControls(){let s=this._reduceChildren(!1,(c,a)=>!!a._syncPendingControls()||c);return s&&this.updateValueAndValidity({onlySelf:!0}),s}_forEachChild(s){Object.keys(this.controls).forEach(c=>{const a=this.controls[c];a&&s(a,c)})}_setUpControls(){this._forEachChild(s=>{s.setParent(this),s._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(s){for(const[c,a]of Object.entries(this.controls))if(this.contains(c)&&s(a))return!0;return!1}_reduceValue(){return this._reduceChildren({},(c,a,g)=>((a.enabled||this.disabled)&&(c[g]=a.value),c))}_reduceChildren(s,c){let a=s;return this._forEachChild((g,L)=>{a=c(a,g,L)}),a}_allControlsDisabled(){for(const s of Object.keys(this.controls))if(this.controls[s].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(s){return this.controls.hasOwnProperty(s)?this.controls[s]:null}}const It=new o.OlP("CallSetDisabledState",{providedIn:"root",factory:()=>cn}),cn="always";function sn(C,s,c=cn){$n(C,s),s.valueAccessor.writeValue(C.value),(C.disabled||"always"===c)&&s.valueAccessor.setDisabledState?.(C.disabled),function xn(C,s){s.valueAccessor.registerOnChange(c=>{C._pendingValue=c,C._pendingChange=!0,C._pendingDirty=!0,"change"===C.updateOn&&tr(C,s)})}(C,s),function Ir(C,s){const c=(a,g)=>{s.valueAccessor.writeValue(a),g&&s.viewToModelUpdate(a)};C.registerOnChange(c),s._registerOnDestroy(()=>{C._unregisterOnChange(c)})}(C,s),function vn(C,s){s.valueAccessor.registerOnTouched(()=>{C._pendingTouched=!0,"blur"===C.updateOn&&C._pendingChange&&tr(C,s),"submit"!==C.updateOn&&C.markAsTouched()})}(C,s),function sr(C,s){if(s.valueAccessor.setDisabledState){const c=a=>{s.valueAccessor.setDisabledState(a)};C.registerOnDisabledChange(c),s._registerOnDestroy(()=>{C._unregisterOnDisabledChange(c)})}}(C,s)}function er(C,s){C.forEach(c=>{c.registerOnValidatorChange&&c.registerOnValidatorChange(s)})}function $n(C,s){const c=function Rt(C){return C._rawValidators}(C);null!==s.validator?C.setValidators(wt(c,s.validator)):"function"==typeof c&&C.setValidators([c]);const a=function Kt(C){return C._rawAsyncValidators}(C);null!==s.asyncValidator?C.setAsyncValidators(wt(a,s.asyncValidator)):"function"==typeof a&&C.setAsyncValidators([a]);const g=()=>C.updateValueAndValidity();er(s._rawValidators,g),er(s._rawAsyncValidators,g)}function tr(C,s){C._pendingDirty&&C.markAsDirty(),C.setValue(C._pendingValue,{emitModelToViewChange:!1}),s.viewToModelUpdate(C._pendingValue),C._pendingChange=!1}const Pe={provide:kt,useExisting:(0,o.Gpc)(()=>le)},X=(()=>Promise.resolve())();let le=(()=>{class C extends kt{constructor(c,a,g){super(),this.callSetDisabledState=g,this.submitted=!1,this._directives=new Set,this.ngSubmit=new o.vpe,this.form=new fe({},St(c),nn(a))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(c){X.then(()=>{const a=this._findContainer(c.path);c.control=a.registerControl(c.name,c.control),sn(c.control,c,this.callSetDisabledState),c.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(c)})}getControl(c){return this.form.get(c.path)}removeControl(c){X.then(()=>{const a=this._findContainer(c.path);a&&a.removeControl(c.name),this._directives.delete(c)})}addFormGroup(c){X.then(()=>{const a=this._findContainer(c.path),g=new fe({});(function cr(C,s){$n(C,s)})(g,c),a.registerControl(c.name,g),g.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(c){X.then(()=>{const a=this._findContainer(c.path);a&&a.removeControl(c.name)})}getFormGroup(c){return this.form.get(c.path)}updateModel(c,a){X.then(()=>{this.form.get(c.path).setValue(a)})}setValue(c){this.control.setValue(c)}onSubmit(c){return this.submitted=!0,function F(C,s){C._syncPendingControls(),s.forEach(c=>{const a=c.control;"submit"===a.updateOn&&a._pendingChange&&(c.viewToModelUpdate(a._pendingValue),a._pendingChange=!1)})}(this.form,this._directives),this.ngSubmit.emit(c),"dialog"===c?.target?.method}onReset(){this.resetForm()}resetForm(c){this.form.reset(c),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(c){return c.pop(),c.length?this.form.get(c):this.form}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(oe,10),o.Y36(be,10),o.Y36(It,8))},C.\u0275dir=o.lG2({type:C,selectors:[["form",3,"ngNoForm","",3,"formGroup",""],["ng-form"],["","ngForm",""]],hostBindings:function(c,a){1&c&&o.NdJ("submit",function(L){return a.onSubmit(L)})("reset",function(){return a.onReset()})},inputs:{options:["ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[o._Bn([Pe]),o.qOj]}),C})();function Ie(C,s){const c=C.indexOf(s);c>-1&&C.splice(c,1)}function je(C){return"object"==typeof C&&null!==C&&2===Object.keys(C).length&&"value"in C&&"disabled"in C}const Re=class extends _e{constructor(s=null,c,a){super(Ht(c),tn(a,c)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(s),this._setUpdateStrategy(c),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),mn(c)&&(c.nonNullable||c.initialValueIsDefault)&&(this.defaultValue=je(s)?s.value:s)}setValue(s,c={}){this.value=this._pendingValue=s,this._onChange.length&&!1!==c.emitModelToViewChange&&this._onChange.forEach(a=>a(this.value,!1!==c.emitViewToModelChange)),this.updateValueAndValidity(c)}patchValue(s,c={}){this.setValue(s,c)}reset(s=this.defaultValue,c={}){this._applyFormState(s),this.markAsPristine(c),this.markAsUntouched(c),this.setValue(this.value,c),this._pendingChange=!1}_updateValue(){}_anyControls(s){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(s){this._onChange.push(s)}_unregisterOnChange(s){Ie(this._onChange,s)}registerOnDisabledChange(s){this._onDisabledChange.push(s)}_unregisterOnDisabledChange(s){Ie(this._onDisabledChange,s)}_forEachChild(s){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(s){je(s)?(this.value=this._pendingValue=s.value,s.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=s}},mr={provide:Vt,useExisting:(0,o.Gpc)(()=>fo)},an=(()=>Promise.resolve())();let fo=(()=>{class C extends Vt{constructor(c,a,g,L,Me,Je){super(),this._changeDetectorRef=Me,this.callSetDisabledState=Je,this.control=new Re,this._registered=!1,this.update=new o.vpe,this._parent=c,this._setValidators(a),this._setAsyncValidators(g),this.valueAccessor=function q(C,s){if(!s)return null;let c,a,g;return Array.isArray(s),s.forEach(L=>{L.constructor===Te?c=L:function rt(C){return Object.getPrototypeOf(C.constructor)===B}(L)?a=L:g=L}),g||a||c||null}(0,L)}ngOnChanges(c){if(this._checkForErrors(),!this._registered||"name"in c){if(this._registered&&(this._checkName(),this.formDirective)){const a=c.name.previousValue;this.formDirective.removeControl({name:a,path:this._getPath(a)})}this._setUpControl()}"isDisabled"in c&&this._updateDisabled(c),function Cn(C,s){if(!C.hasOwnProperty("model"))return!1;const c=C.model;return!!c.isFirstChange()||!Object.is(s,c.currentValue)}(c,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(c){this.viewModel=c,this.update.emit(c)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){sn(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(c){an.then(()=>{this.control.setValue(c,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(c){const a=c.isDisabled.currentValue,g=0!==a&&(0,o.D6c)(a);an.then(()=>{g&&!this.control.disabled?this.control.disable():!g&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(c){return this._parent?function Dn(C,s){return[...s.path,C]}(c,this._parent):[c]}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(kt,9),o.Y36(oe,10),o.Y36(be,10),o.Y36(E,10),o.Y36(o.sBO,8),o.Y36(It,8))},C.\u0275dir=o.lG2({type:C,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[o._Bn([mr]),o.qOj,o.TTD]}),C})(),ho=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275dir=o.lG2({type:C,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""]}),C})(),ar=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({}),C})(),hr=(()=>{class C{constructor(){this._validator=de}ngOnChanges(c){if(this.inputName in c){const a=this.normalizeInput(c[this.inputName].currentValue);this._enabled=this.enabled(a),this._validator=this._enabled?this.createValidator(a):de,this._onChange&&this._onChange()}}validate(c){return this._validator(c)}registerOnValidatorChange(c){this._onChange=c}enabled(c){return null!=c}}return C.\u0275fac=function(c){return new(c||C)},C.\u0275dir=o.lG2({type:C,features:[o.TTD]}),C})();const bo={provide:oe,useExisting:(0,o.Gpc)(()=>Wr),multi:!0};let Wr=(()=>{class C extends hr{constructor(){super(...arguments),this.inputName="required",this.normalizeInput=o.D6c,this.createValidator=c=>O}enabled(c){return c}}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,selectors:[["","required","","formControlName","",3,"type","checkbox"],["","required","","formControl","",3,"type","checkbox"],["","required","","ngModel","",3,"type","checkbox"]],hostVars:1,hostBindings:function(c,a){2&c&&o.uIk("required",a._enabled?"":null)},inputs:{required:"required"},features:[o._Bn([bo]),o.qOj]}),C})();const Zn={provide:oe,useExisting:(0,o.Gpc)(()=>Lr),multi:!0};let Lr=(()=>{class C extends hr{constructor(){super(...arguments),this.inputName="pattern",this.normalizeInput=c=>c,this.createValidator=c=>function ue(C){if(!C)return de;let s,c;return"string"==typeof C?(c="","^"!==C.charAt(0)&&(c+="^"),c+=C,"$"!==C.charAt(C.length-1)&&(c+="$"),s=new RegExp(c)):(c=C.toString(),s=C),a=>{if(Be(a.value))return null;const g=a.value;return s.test(g)?null:{pattern:{requiredPattern:c,actualValue:g}}}}(c)}}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,selectors:[["","pattern","","formControlName",""],["","pattern","","formControl",""],["","pattern","","ngModel",""]],hostVars:1,hostBindings:function(c,a){2&c&&o.uIk("pattern",a._enabled?a.pattern:null)},inputs:{pattern:"pattern"},features:[o._Bn([Zn]),o.qOj]}),C})(),Fo=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({imports:[ar]}),C})(),wo=(()=>{class C{static withConfig(c){return{ngModule:C,providers:[{provide:It,useValue:c.callSetDisabledState??cn}]}}}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({imports:[Fo]}),C})()},1481:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Dx:()=>gt,b2:()=>kt,q6:()=>Pt});var o=w(6895),x=w(8274);class N extends o.w_{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class ge extends N{static makeCurrent(){(0,o.HT)(new ge)}onAndCancel(fe,ee,Se){return fe.addEventListener(ee,Se,!1),()=>{fe.removeEventListener(ee,Se,!1)}}dispatchEvent(fe,ee){fe.dispatchEvent(ee)}remove(fe){fe.parentNode&&fe.parentNode.removeChild(fe)}createElement(fe,ee){return(ee=ee||this.getDefaultDocument()).createElement(fe)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(fe){return fe.nodeType===Node.ELEMENT_NODE}isShadowRoot(fe){return fe instanceof DocumentFragment}getGlobalEventTarget(fe,ee){return"window"===ee?window:"document"===ee?fe:"body"===ee?fe.body:null}getBaseHref(fe){const ee=function W(){return R=R||document.querySelector("base"),R?R.getAttribute("href"):null}();return null==ee?null:function U(_e){M=M||document.createElement("a"),M.setAttribute("href",_e);const fe=M.pathname;return"/"===fe.charAt(0)?fe:`/${fe}`}(ee)}resetBaseElement(){R=null}getUserAgent(){return window.navigator.userAgent}getCookie(fe){return(0,o.Mx)(document.cookie,fe)}}let M,R=null;const _=new x.OlP("TRANSITION_ID"),G=[{provide:x.ip1,useFactory:function Y(_e,fe,ee){return()=>{ee.get(x.CZH).donePromise.then(()=>{const Se=(0,o.q)(),Le=fe.querySelectorAll(`style[ng-transition="${_e}"]`);for(let yt=0;yt{class _e{build(){return new XMLHttpRequest}}return _e.\u0275fac=function(ee){return new(ee||_e)},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const B=new x.OlP("EventManagerPlugins");let E=(()=>{class _e{constructor(ee,Se){this._zone=Se,this._eventNameToPlugin=new Map,ee.forEach(Le=>Le.manager=this),this._plugins=ee.slice().reverse()}addEventListener(ee,Se,Le){return this._findPluginFor(Se).addEventListener(ee,Se,Le)}addGlobalEventListener(ee,Se,Le){return this._findPluginFor(Se).addGlobalEventListener(ee,Se,Le)}getZone(){return this._zone}_findPluginFor(ee){const Se=this._eventNameToPlugin.get(ee);if(Se)return Se;const Le=this._plugins;for(let yt=0;yt{class _e{constructor(){this._stylesSet=new Set}addStyles(ee){const Se=new Set;ee.forEach(Le=>{this._stylesSet.has(Le)||(this._stylesSet.add(Le),Se.add(Le))}),this.onStylesAdded(Se)}onStylesAdded(ee){}getAllStyles(){return Array.from(this._stylesSet)}}return _e.\u0275fac=function(ee){return new(ee||_e)},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})(),K=(()=>{class _e extends P{constructor(ee){super(),this._doc=ee,this._hostNodes=new Map,this._hostNodes.set(ee.head,[])}_addStylesToHost(ee,Se,Le){ee.forEach(yt=>{const It=this._doc.createElement("style");It.textContent=yt,Le.push(Se.appendChild(It))})}addHost(ee){const Se=[];this._addStylesToHost(this._stylesSet,ee,Se),this._hostNodes.set(ee,Se)}removeHost(ee){const Se=this._hostNodes.get(ee);Se&&Se.forEach(pe),this._hostNodes.delete(ee)}onStylesAdded(ee){this._hostNodes.forEach((Se,Le)=>{this._addStylesToHost(ee,Le,Se)})}ngOnDestroy(){this._hostNodes.forEach(ee=>ee.forEach(pe))}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();function pe(_e){(0,o.q)().remove(_e)}const ke={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},Te=/%COMP%/g;function Q(_e,fe,ee){for(let Se=0;Se{if("__ngUnwrap__"===fe)return _e;!1===_e(fe)&&(fe.preventDefault(),fe.returnValue=!1)}}let O=(()=>{class _e{constructor(ee,Se,Le){this.eventManager=ee,this.sharedStylesHost=Se,this.appId=Le,this.rendererByCompId=new Map,this.defaultRenderer=new te(ee)}createRenderer(ee,Se){if(!ee||!Se)return this.defaultRenderer;switch(Se.encapsulation){case x.ifc.Emulated:{let Le=this.rendererByCompId.get(Se.id);return Le||(Le=new ue(this.eventManager,this.sharedStylesHost,Se,this.appId),this.rendererByCompId.set(Se.id,Le)),Le.applyToHost(ee),Le}case 1:case x.ifc.ShadowDom:return new de(this.eventManager,this.sharedStylesHost,ee,Se);default:if(!this.rendererByCompId.has(Se.id)){const Le=Q(Se.id,Se.styles,[]);this.sharedStylesHost.addStyles(Le),this.rendererByCompId.set(Se.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(E),x.LFG(K),x.LFG(x.AFp))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();class te{constructor(fe){this.eventManager=fe,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(fe,ee){return ee?document.createElementNS(ke[ee]||ee,fe):document.createElement(fe)}createComment(fe){return document.createComment(fe)}createText(fe){return document.createTextNode(fe)}appendChild(fe,ee){(De(fe)?fe.content:fe).appendChild(ee)}insertBefore(fe,ee,Se){fe&&(De(fe)?fe.content:fe).insertBefore(ee,Se)}removeChild(fe,ee){fe&&fe.removeChild(ee)}selectRootElement(fe,ee){let Se="string"==typeof fe?document.querySelector(fe):fe;if(!Se)throw new Error(`The selector "${fe}" did not match any elements`);return ee||(Se.textContent=""),Se}parentNode(fe){return fe.parentNode}nextSibling(fe){return fe.nextSibling}setAttribute(fe,ee,Se,Le){if(Le){ee=Le+":"+ee;const yt=ke[Le];yt?fe.setAttributeNS(yt,ee,Se):fe.setAttribute(ee,Se)}else fe.setAttribute(ee,Se)}removeAttribute(fe,ee,Se){if(Se){const Le=ke[Se];Le?fe.removeAttributeNS(Le,ee):fe.removeAttribute(`${Se}:${ee}`)}else fe.removeAttribute(ee)}addClass(fe,ee){fe.classList.add(ee)}removeClass(fe,ee){fe.classList.remove(ee)}setStyle(fe,ee,Se,Le){Le&(x.JOm.DashCase|x.JOm.Important)?fe.style.setProperty(ee,Se,Le&x.JOm.Important?"important":""):fe.style[ee]=Se}removeStyle(fe,ee,Se){Se&x.JOm.DashCase?fe.style.removeProperty(ee):fe.style[ee]=""}setProperty(fe,ee,Se){fe[ee]=Se}setValue(fe,ee){fe.nodeValue=ee}listen(fe,ee,Se){return"string"==typeof fe?this.eventManager.addGlobalEventListener(fe,ee,T(Se)):this.eventManager.addEventListener(fe,ee,T(Se))}}function De(_e){return"TEMPLATE"===_e.tagName&&void 0!==_e.content}class ue extends te{constructor(fe,ee,Se,Le){super(fe),this.component=Se;const yt=Q(Le+"-"+Se.id,Se.styles,[]);ee.addStyles(yt),this.contentAttr=function be(_e){return"_ngcontent-%COMP%".replace(Te,_e)}(Le+"-"+Se.id),this.hostAttr=function Ne(_e){return"_nghost-%COMP%".replace(Te,_e)}(Le+"-"+Se.id)}applyToHost(fe){super.setAttribute(fe,this.hostAttr,"")}createElement(fe,ee){const Se=super.createElement(fe,ee);return super.setAttribute(Se,this.contentAttr,""),Se}}class de extends te{constructor(fe,ee,Se,Le){super(fe),this.sharedStylesHost=ee,this.hostEl=Se,this.shadowRoot=Se.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const yt=Q(Le.id,Le.styles,[]);for(let It=0;It{class _e extends j{constructor(ee){super(ee)}supports(ee){return!0}addEventListener(ee,Se,Le){return ee.addEventListener(Se,Le,!1),()=>this.removeEventListener(ee,Se,Le)}removeEventListener(ee,Se,Le){return ee.removeEventListener(Se,Le)}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const Ee=["alt","control","meta","shift"],Ce={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},ze={alt:_e=>_e.altKey,control:_e=>_e.ctrlKey,meta:_e=>_e.metaKey,shift:_e=>_e.shiftKey};let dt=(()=>{class _e extends j{constructor(ee){super(ee)}supports(ee){return null!=_e.parseEventName(ee)}addEventListener(ee,Se,Le){const yt=_e.parseEventName(Se),It=_e.eventCallback(yt.fullKey,Le,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>(0,o.q)().onAndCancel(ee,yt.domEventName,It))}static parseEventName(ee){const Se=ee.toLowerCase().split("."),Le=Se.shift();if(0===Se.length||"keydown"!==Le&&"keyup"!==Le)return null;const yt=_e._normalizeKey(Se.pop());let It="",cn=Se.indexOf("code");if(cn>-1&&(Se.splice(cn,1),It="code."),Ee.forEach(sn=>{const dn=Se.indexOf(sn);dn>-1&&(Se.splice(dn,1),It+=sn+".")}),It+=yt,0!=Se.length||0===yt.length)return null;const Dn={};return Dn.domEventName=Le,Dn.fullKey=It,Dn}static matchEventFullKeyCode(ee,Se){let Le=Ce[ee.key]||ee.key,yt="";return Se.indexOf("code.")>-1&&(Le=ee.code,yt="code."),!(null==Le||!Le)&&(Le=Le.toLowerCase()," "===Le?Le="space":"."===Le&&(Le="dot"),Ee.forEach(It=>{It!==Le&&(0,ze[It])(ee)&&(yt+=It+".")}),yt+=Le,yt===Se)}static eventCallback(ee,Se,Le){return yt=>{_e.matchEventFullKeyCode(yt,ee)&&Le.runGuarded(()=>Se(yt))}}static _normalizeKey(ee){return"esc"===ee?"escape":ee}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const Pt=(0,x.eFA)(x._c5,"browser",[{provide:x.Lbi,useValue:o.bD},{provide:x.g9A,useValue:function wt(){ge.makeCurrent()},multi:!0},{provide:o.K0,useFactory:function Kt(){return(0,x.RDi)(document),document},deps:[]}]),Ut=new x.OlP(""),it=[{provide:x.rWj,useClass:class Z{addToWindow(fe){x.dqk.getAngularTestability=(Se,Le=!0)=>{const yt=fe.findTestabilityInTree(Se,Le);if(null==yt)throw new Error("Could not find testability for element.");return yt},x.dqk.getAllAngularTestabilities=()=>fe.getAllTestabilities(),x.dqk.getAllAngularRootElements=()=>fe.getAllRootElements(),x.dqk.frameworkStabilizers||(x.dqk.frameworkStabilizers=[]),x.dqk.frameworkStabilizers.push(Se=>{const Le=x.dqk.getAllAngularTestabilities();let yt=Le.length,It=!1;const cn=function(Dn){It=It||Dn,yt--,0==yt&&Se(It)};Le.forEach(function(Dn){Dn.whenStable(cn)})})}findTestabilityInTree(fe,ee,Se){return null==ee?null:fe.getTestability(ee)??(Se?(0,o.q)().isShadowRoot(ee)?this.findTestabilityInTree(fe,ee.host,!0):this.findTestabilityInTree(fe,ee.parentElement,!0):null)}},deps:[]},{provide:x.lri,useClass:x.dDg,deps:[x.R0b,x.eoX,x.rWj]},{provide:x.dDg,useClass:x.dDg,deps:[x.R0b,x.eoX,x.rWj]}],Xt=[{provide:x.zSh,useValue:"root"},{provide:x.qLn,useFactory:function Rt(){return new x.qLn},deps:[]},{provide:B,useClass:ne,multi:!0,deps:[o.K0,x.R0b,x.Lbi]},{provide:B,useClass:dt,multi:!0,deps:[o.K0]},{provide:O,useClass:O,deps:[E,K,x.AFp]},{provide:x.FYo,useExisting:O},{provide:P,useExisting:K},{provide:K,useClass:K,deps:[o.K0]},{provide:E,useClass:E,deps:[B,x.R0b]},{provide:o.JF,useClass:S,deps:[]},[]];let kt=(()=>{class _e{constructor(ee){}static withServerTransition(ee){return{ngModule:_e,providers:[{provide:x.AFp,useValue:ee.appId},{provide:_,useExisting:x.AFp},G]}}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(Ut,12))},_e.\u0275mod=x.oAB({type:_e}),_e.\u0275inj=x.cJS({providers:[...Xt,...it],imports:[o.ez,x.hGG]}),_e})(),gt=(()=>{class _e{constructor(ee){this._doc=ee}getTitle(){return this._doc.title}setTitle(ee){this._doc.title=ee||""}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:function(ee){let Se=null;return Se=ee?new ee:function en(){return new gt((0,x.LFG)(o.K0))}(),Se},providedIn:"root"}),_e})();typeof window<"u"&&window},5472:(Qe,Fe,w)=>{"use strict";w.d(Fe,{gz:()=>Rr,y6:()=>fr,OD:()=>Mt,eC:()=>it,wm:()=>Dl,wN:()=>ya,F0:()=>or,rH:()=>mi,Bz:()=>Xu,Hx:()=>pt});var o=w(8274),x=w(2076),N=w(9646),ge=w(1135);const W=(0,w(3888).d)(f=>function(){f(this),this.name="EmptyError",this.message="no elements in sequence"});var M=w(9751),U=w(4742),_=w(4671),Y=w(3268),G=w(3269),Z=w(1810),S=w(5403),B=w(9672);function E(...f){const h=(0,G.yG)(f),d=(0,G.jO)(f),{args:m,keys:b}=(0,U.D)(f);if(0===m.length)return(0,x.D)([],h);const $=new M.y(function j(f,h,d=_.y){return m=>{P(h,()=>{const{length:b}=f,$=new Array(b);let z=b,ve=b;for(let We=0;We{const ft=(0,x.D)(f[We],h);let bt=!1;ft.subscribe((0,S.x)(m,jt=>{$[We]=jt,bt||(bt=!0,ve--),ve||m.next(d($.slice()))},()=>{--z||m.complete()}))},m)},m)}}(m,h,b?z=>(0,Z.n)(b,z):_.y));return d?$.pipe((0,Y.Z)(d)):$}function P(f,h,d){f?(0,B.f)(d,f,h):h()}var K=w(8189);function ke(...f){return function pe(){return(0,K.J)(1)}()((0,x.D)(f,(0,G.yG)(f)))}var Te=w(8421);function ie(f){return new M.y(h=>{(0,Te.Xf)(f()).subscribe(h)})}var Be=w(9635),re=w(576);function oe(f,h){const d=(0,re.m)(f)?f:()=>f,m=b=>b.error(d());return new M.y(h?b=>h.schedule(m,0,b):m)}var be=w(515),Ne=w(727),Q=w(4482);function T(){return(0,Q.e)((f,h)=>{let d=null;f._refCount++;const m=(0,S.x)(h,void 0,void 0,void 0,()=>{if(!f||f._refCount<=0||0<--f._refCount)return void(d=null);const b=f._connection,$=d;d=null,b&&(!$||b===$)&&b.unsubscribe(),h.unsubscribe()});f.subscribe(m),m.closed||(d=f.connect())})}class k extends M.y{constructor(h,d){super(),this.source=h,this.subjectFactory=d,this._subject=null,this._refCount=0,this._connection=null,(0,Q.A)(h)&&(this.lift=h.lift)}_subscribe(h){return this.getSubject().subscribe(h)}getSubject(){const h=this._subject;return(!h||h.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:h}=this;this._subject=this._connection=null,h?.unsubscribe()}connect(){let h=this._connection;if(!h){h=this._connection=new Ne.w0;const d=this.getSubject();h.add(this.source.subscribe((0,S.x)(d,void 0,()=>{this._teardown(),d.complete()},m=>{this._teardown(),d.error(m)},()=>this._teardown()))),h.closed&&(this._connection=null,h=Ne.w0.EMPTY)}return h}refCount(){return T()(this)}}var O=w(7579),te=w(6895),ce=w(4004),Ae=w(3900),De=w(5698),de=w(9300),ne=w(5577);function Ee(f){return(0,Q.e)((h,d)=>{let m=!1;h.subscribe((0,S.x)(d,b=>{m=!0,d.next(b)},()=>{m||d.next(f),d.complete()}))})}function Ce(f=ze){return(0,Q.e)((h,d)=>{let m=!1;h.subscribe((0,S.x)(d,b=>{m=!0,d.next(b)},()=>m?d.complete():d.error(f())))})}function ze(){return new W}function dt(f,h){const d=arguments.length>=2;return m=>m.pipe(f?(0,de.h)((b,$)=>f(b,$,m)):_.y,(0,De.q)(1),d?Ee(h):Ce(()=>new W))}var et=w(4351),Ue=w(8505);function St(f){return(0,Q.e)((h,d)=>{let $,m=null,b=!1;m=h.subscribe((0,S.x)(d,void 0,void 0,z=>{$=(0,Te.Xf)(f(z,St(f)(h))),m?(m.unsubscribe(),m=null,$.subscribe(d)):b=!0})),b&&(m.unsubscribe(),m=null,$.subscribe(d))})}function Ke(f,h,d,m,b){return($,z)=>{let ve=d,We=h,ft=0;$.subscribe((0,S.x)(z,bt=>{const jt=ft++;We=ve?f(We,bt,jt):(ve=!0,bt),m&&z.next(We)},b&&(()=>{ve&&z.next(We),z.complete()})))}}function nn(f,h){return(0,Q.e)(Ke(f,h,arguments.length>=2,!0))}function wt(f){return f<=0?()=>be.E:(0,Q.e)((h,d)=>{let m=[];h.subscribe((0,S.x)(d,b=>{m.push(b),f{for(const b of m)d.next(b);d.complete()},void 0,()=>{m=null}))})}function Rt(f,h){const d=arguments.length>=2;return m=>m.pipe(f?(0,de.h)((b,$)=>f(b,$,m)):_.y,wt(1),d?Ee(h):Ce(()=>new W))}var Kt=w(2529),Pt=w(8746),Ut=w(1481);const it="primary",Xt=Symbol("RouteTitle");class kt{constructor(h){this.params=h||{}}has(h){return Object.prototype.hasOwnProperty.call(this.params,h)}get(h){if(this.has(h)){const d=this.params[h];return Array.isArray(d)?d[0]:d}return null}getAll(h){if(this.has(h)){const d=this.params[h];return Array.isArray(d)?d:[d]}return[]}get keys(){return Object.keys(this.params)}}function Vt(f){return new kt(f)}function rn(f,h,d){const m=d.path.split("/");if(m.length>f.length||"full"===d.pathMatch&&(h.hasChildren()||m.lengthm[$]===b)}return f===h}function Yt(f){return Array.prototype.concat.apply([],f)}function ht(f){return f.length>0?f[f.length-1]:null}function Et(f,h){for(const d in f)f.hasOwnProperty(d)&&h(f[d],d)}function ut(f){return(0,o.CqO)(f)?f:(0,o.QGY)(f)?(0,x.D)(Promise.resolve(f)):(0,N.of)(f)}const Ct=!1,qe={exact:function Hn(f,h,d){if(!He(f.segments,h.segments)||!Xn(f.segments,h.segments,d)||f.numberOfChildren!==h.numberOfChildren)return!1;for(const m in h.children)if(!f.children[m]||!Hn(f.children[m],h.children[m],d))return!1;return!0},subset:Er},on={exact:function Nt(f,h){return en(f,h)},subset:function zt(f,h){return Object.keys(h).length<=Object.keys(f).length&&Object.keys(h).every(d=>gt(f[d],h[d]))},ignored:()=>!0};function gn(f,h,d){return qe[d.paths](f.root,h.root,d.matrixParams)&&on[d.queryParams](f.queryParams,h.queryParams)&&!("exact"===d.fragment&&f.fragment!==h.fragment)}function Er(f,h,d){return jn(f,h,h.segments,d)}function jn(f,h,d,m){if(f.segments.length>d.length){const b=f.segments.slice(0,d.length);return!(!He(b,d)||h.hasChildren()||!Xn(b,d,m))}if(f.segments.length===d.length){if(!He(f.segments,d)||!Xn(f.segments,d,m))return!1;for(const b in h.children)if(!f.children[b]||!Er(f.children[b],h.children[b],m))return!1;return!0}{const b=d.slice(0,f.segments.length),$=d.slice(f.segments.length);return!!(He(f.segments,b)&&Xn(f.segments,b,m)&&f.children[it])&&jn(f.children[it],h,$,m)}}function Xn(f,h,d){return h.every((m,b)=>on[d](f[b].parameters,m.parameters))}class En{constructor(h=new xe([],{}),d={},m=null){this.root=h,this.queryParams=d,this.fragment=m}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Vt(this.queryParams)),this._queryParamMap}toString(){return Ht.serialize(this)}}class xe{constructor(h,d){this.segments=h,this.children=d,this.parent=null,Et(d,(m,b)=>m.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return _t(this)}}class se{constructor(h,d){this.path=h,this.parameters=d}get parameterMap(){return this._parameterMap||(this._parameterMap=Vt(this.parameters)),this._parameterMap}toString(){return ee(this)}}function He(f,h){return f.length===h.length&&f.every((d,m)=>d.path===h[m].path)}let pt=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return new vt},providedIn:"root"}),f})();class vt{parse(h){const d=new er(h);return new En(d.parseRootSegment(),d.parseQueryParams(),d.parseFragment())}serialize(h){const d=`/${tn(h.root,!0)}`,m=function Le(f){const h=Object.keys(f).map(d=>{const m=f[d];return Array.isArray(m)?m.map(b=>`${mn(d)}=${mn(b)}`).join("&"):`${mn(d)}=${mn(m)}`}).filter(d=>!!d);return h.length?`?${h.join("&")}`:""}(h.queryParams);return`${d}${m}${"string"==typeof h.fragment?`#${function ln(f){return encodeURI(f)}(h.fragment)}`:""}`}}const Ht=new vt;function _t(f){return f.segments.map(h=>ee(h)).join("/")}function tn(f,h){if(!f.hasChildren())return _t(f);if(h){const d=f.children[it]?tn(f.children[it],!1):"",m=[];return Et(f.children,(b,$)=>{$!==it&&m.push(`${$}:${tn(b,!1)}`)}),m.length>0?`${d}(${m.join("//")})`:d}{const d=function Ye(f,h){let d=[];return Et(f.children,(m,b)=>{b===it&&(d=d.concat(h(m,b)))}),Et(f.children,(m,b)=>{b!==it&&(d=d.concat(h(m,b)))}),d}(f,(m,b)=>b===it?[tn(f.children[it],!1)]:[`${b}:${tn(m,!1)}`]);return 1===Object.keys(f.children).length&&null!=f.children[it]?`${_t(f)}/${d[0]}`:`${_t(f)}/(${d.join("//")})`}}function Ln(f){return encodeURIComponent(f).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function mn(f){return Ln(f).replace(/%3B/gi,";")}function Ft(f){return Ln(f).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function _e(f){return decodeURIComponent(f)}function fe(f){return _e(f.replace(/\+/g,"%20"))}function ee(f){return`${Ft(f.path)}${function Se(f){return Object.keys(f).map(h=>`;${Ft(h)}=${Ft(f[h])}`).join("")}(f.parameters)}`}const yt=/^[^\/()?;=#]+/;function It(f){const h=f.match(yt);return h?h[0]:""}const cn=/^[^=?&#]+/,sn=/^[^&#]+/;class er{constructor(h){this.url=h,this.remaining=h}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new xe([],{}):new xe([],this.parseChildren())}parseQueryParams(){const h={};if(this.consumeOptional("?"))do{this.parseQueryParam(h)}while(this.consumeOptional("&"));return h}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const h=[];for(this.peekStartsWith("(")||h.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),h.push(this.parseSegment());let d={};this.peekStartsWith("/(")&&(this.capture("/"),d=this.parseParens(!0));let m={};return this.peekStartsWith("(")&&(m=this.parseParens(!1)),(h.length>0||Object.keys(d).length>0)&&(m[it]=new xe(h,d)),m}parseSegment(){const h=It(this.remaining);if(""===h&&this.peekStartsWith(";"))throw new o.vHH(4009,Ct);return this.capture(h),new se(_e(h),this.parseMatrixParams())}parseMatrixParams(){const h={};for(;this.consumeOptional(";");)this.parseParam(h);return h}parseParam(h){const d=It(this.remaining);if(!d)return;this.capture(d);let m="";if(this.consumeOptional("=")){const b=It(this.remaining);b&&(m=b,this.capture(m))}h[_e(d)]=_e(m)}parseQueryParam(h){const d=function Dn(f){const h=f.match(cn);return h?h[0]:""}(this.remaining);if(!d)return;this.capture(d);let m="";if(this.consumeOptional("=")){const z=function dn(f){const h=f.match(sn);return h?h[0]:""}(this.remaining);z&&(m=z,this.capture(m))}const b=fe(d),$=fe(m);if(h.hasOwnProperty(b)){let z=h[b];Array.isArray(z)||(z=[z],h[b]=z),z.push($)}else h[b]=$}parseParens(h){const d={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const m=It(this.remaining),b=this.remaining[m.length];if("/"!==b&&")"!==b&&";"!==b)throw new o.vHH(4010,Ct);let $;m.indexOf(":")>-1?($=m.slice(0,m.indexOf(":")),this.capture($),this.capture(":")):h&&($=it);const z=this.parseChildren();d[$]=1===Object.keys(z).length?z[it]:new xe([],z),this.consumeOptional("//")}return d}peekStartsWith(h){return this.remaining.startsWith(h)}consumeOptional(h){return!!this.peekStartsWith(h)&&(this.remaining=this.remaining.substring(h.length),!0)}capture(h){if(!this.consumeOptional(h))throw new o.vHH(4011,Ct)}}function sr(f){return f.segments.length>0?new xe([],{[it]:f}):f}function $n(f){const h={};for(const m of Object.keys(f.children)){const $=$n(f.children[m]);($.segments.length>0||$.hasChildren())&&(h[m]=$)}return function Tn(f){if(1===f.numberOfChildren&&f.children[it]){const h=f.children[it];return new xe(f.segments.concat(h.segments),h.children)}return f}(new xe(f.segments,h))}function xn(f){return f instanceof En}function gr(f,h,d,m,b){if(0===d.length)return Qt(h.root,h.root,h.root,m,b);const $=function Cn(f){if("string"==typeof f[0]&&1===f.length&&"/"===f[0])return new On(!0,0,f);let h=0,d=!1;const m=f.reduce((b,$,z)=>{if("object"==typeof $&&null!=$){if($.outlets){const ve={};return Et($.outlets,(We,ft)=>{ve[ft]="string"==typeof We?We.split("/"):We}),[...b,{outlets:ve}]}if($.segmentPath)return[...b,$.segmentPath]}return"string"!=typeof $?[...b,$]:0===z?($.split("/").forEach((ve,We)=>{0==We&&"."===ve||(0==We&&""===ve?d=!0:".."===ve?h++:""!=ve&&b.push(ve))}),b):[...b,$]},[]);return new On(d,h,m)}(d);return $.toRoot()?Qt(h.root,h.root,new xe([],{}),m,b):function z(We){const ft=function q(f,h,d,m){if(f.isAbsolute)return new rt(h.root,!0,0);if(-1===m)return new rt(d,d===h.root,0);return function he(f,h,d){let m=f,b=h,$=d;for(;$>b;){if($-=b,m=m.parent,!m)throw new o.vHH(4005,!1);b=m.segments.length}return new rt(m,!1,b-$)}(d,m+($t(f.commands[0])?0:1),f.numberOfDoubleDots)}($,h,f.snapshot?._urlSegment,We),bt=ft.processChildren?X(ft.segmentGroup,ft.index,$.commands):Pe(ft.segmentGroup,ft.index,$.commands);return Qt(h.root,ft.segmentGroup,bt,m,b)}(f.snapshot?._lastPathIndex)}function $t(f){return"object"==typeof f&&null!=f&&!f.outlets&&!f.segmentPath}function fn(f){return"object"==typeof f&&null!=f&&f.outlets}function Qt(f,h,d,m,b){let z,$={};m&&Et(m,(We,ft)=>{$[ft]=Array.isArray(We)?We.map(bt=>`${bt}`):`${We}`}),z=f===h?d:Un(f,h,d);const ve=sr($n(z));return new En(ve,$,b)}function Un(f,h,d){const m={};return Et(f.children,(b,$)=>{m[$]=b===h?d:Un(b,h,d)}),new xe(f.segments,m)}class On{constructor(h,d,m){if(this.isAbsolute=h,this.numberOfDoubleDots=d,this.commands=m,h&&m.length>0&&$t(m[0]))throw new o.vHH(4003,!1);const b=m.find(fn);if(b&&b!==ht(m))throw new o.vHH(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class rt{constructor(h,d,m){this.segmentGroup=h,this.processChildren=d,this.index=m}}function Pe(f,h,d){if(f||(f=new xe([],{})),0===f.segments.length&&f.hasChildren())return X(f,h,d);const m=function le(f,h,d){let m=0,b=h;const $={match:!1,pathIndex:0,commandIndex:0};for(;b=d.length)return $;const z=f.segments[b],ve=d[m];if(fn(ve))break;const We=`${ve}`,ft=m0&&void 0===We)break;if(We&&ft&&"object"==typeof ft&&void 0===ft.outlets){if(!ot(We,ft,z))return $;m+=2}else{if(!ot(We,{},z))return $;m++}b++}return{match:!0,pathIndex:b,commandIndex:m}}(f,h,d),b=d.slice(m.commandIndex);if(m.match&&m.pathIndex{"string"==typeof $&&($=[$]),null!==$&&(b[z]=Pe(f.children[z],h,$))}),Et(f.children,($,z)=>{void 0===m[z]&&(b[z]=$)}),new xe(f.segments,b)}}function Ie(f,h,d){const m=f.segments.slice(0,h);let b=0;for(;b{"string"==typeof d&&(d=[d]),null!==d&&(h[m]=Ie(new xe([],{}),0,d))}),h}function Re(f){const h={};return Et(f,(d,m)=>h[m]=`${d}`),h}function ot(f,h,d){return f==d.path&&en(h,d.parameters)}class st{constructor(h,d){this.id=h,this.url=d}}class Mt extends st{constructor(h,d,m="imperative",b=null){super(h,d),this.type=0,this.navigationTrigger=m,this.restoredState=b}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class Wt extends st{constructor(h,d,m){super(h,d),this.urlAfterRedirects=m,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class Bt extends st{constructor(h,d,m,b){super(h,d),this.reason=m,this.code=b,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class An extends st{constructor(h,d,m,b){super(h,d),this.error=m,this.target=b,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class Rn extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Pn extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class ur extends st{constructor(h,d,m,b,$){super(h,d),this.urlAfterRedirects=m,this.state=b,this.shouldActivate=$,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class mr extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class an extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class fo{constructor(h){this.route=h,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class ho{constructor(h){this.route=h,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class Zr{constructor(h){this.snapshot=h,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class jr{constructor(h){this.snapshot=h,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class xr{constructor(h){this.snapshot=h,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Or{constructor(h){this.snapshot=h,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class ar{constructor(h,d,m){this.routerEvent=h,this.position=d,this.anchor=m,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class po{constructor(h){this._root=h}get root(){return this._root.value}parent(h){const d=this.pathFromRoot(h);return d.length>1?d[d.length-2]:null}children(h){const d=Fn(h,this._root);return d?d.children.map(m=>m.value):[]}firstChild(h){const d=Fn(h,this._root);return d&&d.children.length>0?d.children[0].value:null}siblings(h){const d=zn(h,this._root);return d.length<2?[]:d[d.length-2].children.map(b=>b.value).filter(b=>b!==h)}pathFromRoot(h){return zn(h,this._root).map(d=>d.value)}}function Fn(f,h){if(f===h.value)return h;for(const d of h.children){const m=Fn(f,d);if(m)return m}return null}function zn(f,h){if(f===h.value)return[h];for(const d of h.children){const m=zn(f,d);if(m.length)return m.unshift(h),m}return[]}class qn{constructor(h,d){this.value=h,this.children=d}toString(){return`TreeNode(${this.value})`}}function dr(f){const h={};return f&&f.children.forEach(d=>h[d.value.outlet]=d),h}class Sr extends po{constructor(h,d){super(h),this.snapshot=d,vo(this,h)}toString(){return this.snapshot.toString()}}function Gn(f,h){const d=function go(f,h){const z=new Pr([],{},{},"",{},it,h,null,f.root,-1,{});return new xo("",new qn(z,[]))}(f,h),m=new ge.X([new se("",{})]),b=new ge.X({}),$=new ge.X({}),z=new ge.X({}),ve=new ge.X(""),We=new Rr(m,b,z,ve,$,it,h,d.root);return We.snapshot=d.root,new Sr(new qn(We,[]),d)}class Rr{constructor(h,d,m,b,$,z,ve,We){this.url=h,this.params=d,this.queryParams=m,this.fragment=b,this.data=$,this.outlet=z,this.component=ve,this.title=this.data?.pipe((0,ce.U)(ft=>ft[Xt]))??(0,N.of)(void 0),this._futureSnapshot=We}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe((0,ce.U)(h=>Vt(h)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe((0,ce.U)(h=>Vt(h)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function vr(f,h="emptyOnly"){const d=f.pathFromRoot;let m=0;if("always"!==h)for(m=d.length-1;m>=1;){const b=d[m],$=d[m-1];if(b.routeConfig&&""===b.routeConfig.path)m--;else{if($.component)break;m--}}return function mo(f){return f.reduce((h,d)=>({params:{...h.params,...d.params},data:{...h.data,...d.data},resolve:{...d.data,...h.resolve,...d.routeConfig?.data,...d._resolvedData}}),{params:{},data:{},resolve:{}})}(d.slice(m))}class Pr{constructor(h,d,m,b,$,z,ve,We,ft,bt,jt){this.url=h,this.params=d,this.queryParams=m,this.fragment=b,this.data=$,this.outlet=z,this.component=ve,this.routeConfig=We,this._urlSegment=ft,this._lastPathIndex=bt,this._resolve=jt}get title(){return this.data?.[Xt]}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=Vt(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Vt(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(m=>m.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class xo extends po{constructor(h,d){super(d),this.url=h,vo(this,d)}toString(){return yo(this._root)}}function vo(f,h){h.value._routerState=f,h.children.forEach(d=>vo(f,d))}function yo(f){const h=f.children.length>0?` { ${f.children.map(yo).join(", ")} } `:"";return`${f.value}${h}`}function Oo(f){if(f.snapshot){const h=f.snapshot,d=f._futureSnapshot;f.snapshot=d,en(h.queryParams,d.queryParams)||f.queryParams.next(d.queryParams),h.fragment!==d.fragment&&f.fragment.next(d.fragment),en(h.params,d.params)||f.params.next(d.params),function Vn(f,h){if(f.length!==h.length)return!1;for(let d=0;den(d.parameters,h[m].parameters))}(f.url,h.url);return d&&!(!f.parent!=!h.parent)&&(!f.parent||Jr(f.parent,h.parent))}function Fr(f,h,d){if(d&&f.shouldReuseRoute(h.value,d.value.snapshot)){const m=d.value;m._futureSnapshot=h.value;const b=function Yo(f,h,d){return h.children.map(m=>{for(const b of d.children)if(f.shouldReuseRoute(m.value,b.value.snapshot))return Fr(f,m,b);return Fr(f,m)})}(f,h,d);return new qn(m,b)}{if(f.shouldAttach(h.value)){const $=f.retrieve(h.value);if(null!==$){const z=$.route;return z.value._futureSnapshot=h.value,z.children=h.children.map(ve=>Fr(f,ve)),z}}const m=function si(f){return new Rr(new ge.X(f.url),new ge.X(f.params),new ge.X(f.queryParams),new ge.X(f.fragment),new ge.X(f.data),f.outlet,f.component,f)}(h.value),b=h.children.map($=>Fr(f,$));return new qn(m,b)}}const Ro="ngNavigationCancelingError";function Ur(f,h){const{redirectTo:d,navigationBehaviorOptions:m}=xn(h)?{redirectTo:h,navigationBehaviorOptions:void 0}:h,b=zr(!1,0,h);return b.url=d,b.navigationBehaviorOptions=m,b}function zr(f,h,d){const m=new Error("NavigationCancelingError: "+(f||""));return m[Ro]=!0,m.cancellationCode=h,d&&(m.url=d),m}function Do(f){return Gr(f)&&xn(f.url)}function Gr(f){return f&&f[Ro]}class Yr{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.injector=null,this.children=new fr,this.attachRef=null}}let fr=(()=>{class f{constructor(){this.contexts=new Map}onChildOutletCreated(d,m){const b=this.getOrCreateContext(d);b.outlet=m,this.contexts.set(d,b)}onChildOutletDestroyed(d){const m=this.getContext(d);m&&(m.outlet=null,m.attachRef=null)}onOutletDeactivated(){const d=this.contexts;return this.contexts=new Map,d}onOutletReAttached(d){this.contexts=d}getOrCreateContext(d){let m=this.getContext(d);return m||(m=new Yr,this.contexts.set(d,m)),m}getContext(d){return this.contexts.get(d)||null}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const hr=!1;let ai=(()=>{class f{constructor(){this.activated=null,this._activatedRoute=null,this.name=it,this.activateEvents=new o.vpe,this.deactivateEvents=new o.vpe,this.attachEvents=new o.vpe,this.detachEvents=new o.vpe,this.parentContexts=(0,o.f3M)(fr),this.location=(0,o.f3M)(o.s_b),this.changeDetector=(0,o.f3M)(o.sBO),this.environmentInjector=(0,o.f3M)(o.lqb)}ngOnChanges(d){if(d.name){const{firstChange:m,previousValue:b}=d.name;if(m)return;this.isTrackedInParentContexts(b)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(b)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name)}isTrackedInParentContexts(d){return this.parentContexts.getContext(d)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const d=this.parentContexts.getContext(this.name);d?.route&&(d.attachRef?this.attach(d.attachRef,d.route):this.activateWith(d.route,d.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new o.vHH(4012,hr);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new o.vHH(4012,hr);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new o.vHH(4012,hr);this.location.detach();const d=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(d.instance),d}attach(d,m){this.activated=d,this._activatedRoute=m,this.location.insert(d.hostView),this.attachEvents.emit(d.instance)}deactivate(){if(this.activated){const d=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(d)}}activateWith(d,m){if(this.isActivated)throw new o.vHH(4013,hr);this._activatedRoute=d;const b=this.location,z=d.snapshot.component,ve=this.parentContexts.getOrCreateContext(this.name).children,We=new nr(d,ve,b.injector);if(m&&function li(f){return!!f.resolveComponentFactory}(m)){const ft=m.resolveComponentFactory(z);this.activated=b.createComponent(ft,b.length,We)}else this.activated=b.createComponent(z,{index:b.length,injector:We,environmentInjector:m??this.environmentInjector});this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275dir=o.lG2({type:f,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[o.TTD]}),f})();class nr{constructor(h,d,m){this.route=h,this.childContexts=d,this.parent=m}get(h,d){return h===Rr?this.route:h===fr?this.childContexts:this.parent.get(h,d)}}let kr=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275cmp=o.Xpm({type:f,selectors:[["ng-component"]],standalone:!0,features:[o.jDz],decls:1,vars:0,template:function(d,m){1&d&&o._UZ(0,"router-outlet")},dependencies:[ai],encapsulation:2}),f})();function bo(f,h){return f.providers&&!f._injector&&(f._injector=(0,o.MMx)(f.providers,h,`Route: ${f.path}`)),f._injector??h}function Nr(f){const h=f.children&&f.children.map(Nr),d=h?{...f,children:h}:{...f};return!d.component&&!d.loadComponent&&(h||d.loadChildren)&&d.outlet&&d.outlet!==it&&(d.component=kr),d}function Zn(f){return f.outlet||it}function Lr(f,h){const d=f.filter(m=>Zn(m)===h);return d.push(...f.filter(m=>Zn(m)!==h)),d}function Po(f){if(!f)return null;if(f.routeConfig?._injector)return f.routeConfig._injector;for(let h=f.parent;h;h=h.parent){const d=h.routeConfig;if(d?._loadedInjector)return d._loadedInjector;if(d?._injector)return d._injector}return null}class Sn{constructor(h,d,m,b){this.routeReuseStrategy=h,this.futureState=d,this.currState=m,this.forwardEvent=b}activate(h){const d=this.futureState._root,m=this.currState?this.currState._root:null;this.deactivateChildRoutes(d,m,h),Oo(this.futureState.root),this.activateChildRoutes(d,m,h)}deactivateChildRoutes(h,d,m){const b=dr(d);h.children.forEach($=>{const z=$.value.outlet;this.deactivateRoutes($,b[z],m),delete b[z]}),Et(b,($,z)=>{this.deactivateRouteAndItsChildren($,m)})}deactivateRoutes(h,d,m){const b=h.value,$=d?d.value:null;if(b===$)if(b.component){const z=m.getContext(b.outlet);z&&this.deactivateChildRoutes(h,d,z.children)}else this.deactivateChildRoutes(h,d,m);else $&&this.deactivateRouteAndItsChildren(d,m)}deactivateRouteAndItsChildren(h,d){h.value.component&&this.routeReuseStrategy.shouldDetach(h.value.snapshot)?this.detachAndStoreRouteSubtree(h,d):this.deactivateRouteAndOutlet(h,d)}detachAndStoreRouteSubtree(h,d){const m=d.getContext(h.value.outlet),b=m&&h.value.component?m.children:d,$=dr(h);for(const z of Object.keys($))this.deactivateRouteAndItsChildren($[z],b);if(m&&m.outlet){const z=m.outlet.detach(),ve=m.children.onOutletDeactivated();this.routeReuseStrategy.store(h.value.snapshot,{componentRef:z,route:h,contexts:ve})}}deactivateRouteAndOutlet(h,d){const m=d.getContext(h.value.outlet),b=m&&h.value.component?m.children:d,$=dr(h);for(const z of Object.keys($))this.deactivateRouteAndItsChildren($[z],b);m&&m.outlet&&(m.outlet.deactivate(),m.children.onOutletDeactivated(),m.attachRef=null,m.resolver=null,m.route=null)}activateChildRoutes(h,d,m){const b=dr(d);h.children.forEach($=>{this.activateRoutes($,b[$.value.outlet],m),this.forwardEvent(new Or($.value.snapshot))}),h.children.length&&this.forwardEvent(new jr(h.value.snapshot))}activateRoutes(h,d,m){const b=h.value,$=d?d.value:null;if(Oo(b),b===$)if(b.component){const z=m.getOrCreateContext(b.outlet);this.activateChildRoutes(h,d,z.children)}else this.activateChildRoutes(h,d,m);else if(b.component){const z=m.getOrCreateContext(b.outlet);if(this.routeReuseStrategy.shouldAttach(b.snapshot)){const ve=this.routeReuseStrategy.retrieve(b.snapshot);this.routeReuseStrategy.store(b.snapshot,null),z.children.onOutletReAttached(ve.contexts),z.attachRef=ve.componentRef,z.route=ve.route.value,z.outlet&&z.outlet.attach(ve.componentRef,ve.route.value),Oo(ve.route.value),this.activateChildRoutes(h,null,z.children)}else{const ve=Po(b.snapshot),We=ve?.get(o._Vd)??null;z.attachRef=null,z.route=b,z.resolver=We,z.injector=ve,z.outlet&&z.outlet.activateWith(b,z.injector),this.activateChildRoutes(h,null,z.children)}}else this.activateChildRoutes(h,null,m)}}class Fo{constructor(h){this.path=h,this.route=this.path[this.path.length-1]}}class wo{constructor(h,d){this.component=h,this.route=d}}function ko(f,h,d){const m=f._root;return Kr(m,h?h._root:null,d,[m.value])}function to(f,h){const d=Symbol(),m=h.get(f,d);return m===d?"function"!=typeof f||(0,o.Z0I)(f)?h.get(f):f:m}function Kr(f,h,d,m,b={canDeactivateChecks:[],canActivateChecks:[]}){const $=dr(h);return f.children.forEach(z=>{(function no(f,h,d,m,b={canDeactivateChecks:[],canActivateChecks:[]}){const $=f.value,z=h?h.value:null,ve=d?d.getContext(f.value.outlet):null;if(z&&$.routeConfig===z.routeConfig){const We=function rr(f,h,d){if("function"==typeof d)return d(f,h);switch(d){case"pathParamsChange":return!He(f.url,h.url);case"pathParamsOrQueryParamsChange":return!He(f.url,h.url)||!en(f.queryParams,h.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Jr(f,h)||!en(f.queryParams,h.queryParams);default:return!Jr(f,h)}}(z,$,$.routeConfig.runGuardsAndResolvers);We?b.canActivateChecks.push(new Fo(m)):($.data=z.data,$._resolvedData=z._resolvedData),Kr(f,h,$.component?ve?ve.children:null:d,m,b),We&&ve&&ve.outlet&&ve.outlet.isActivated&&b.canDeactivateChecks.push(new wo(ve.outlet.component,z))}else z&&ro(h,ve,b),b.canActivateChecks.push(new Fo(m)),Kr(f,null,$.component?ve?ve.children:null:d,m,b)})(z,$[z.value.outlet],d,m.concat([z.value]),b),delete $[z.value.outlet]}),Et($,(z,ve)=>ro(z,d.getContext(ve),b)),b}function ro(f,h,d){const m=dr(f),b=f.value;Et(m,($,z)=>{ro($,b.component?h?h.children.getContext(z):null:h,d)}),d.canDeactivateChecks.push(new wo(b.component&&h&&h.outlet&&h.outlet.isActivated?h.outlet.component:null,b))}function hn(f){return"function"==typeof f}function Je(f){return f instanceof W||"EmptyError"===f?.name}const at=Symbol("INITIAL_VALUE");function Dt(){return(0,Ae.w)(f=>E(f.map(h=>h.pipe((0,De.q)(1),function ue(...f){const h=(0,G.yG)(f);return(0,Q.e)((d,m)=>{(h?ke(f,d,h):ke(f,d)).subscribe(m)})}(at)))).pipe((0,ce.U)(h=>{for(const d of h)if(!0!==d){if(d===at)return at;if(!1===d||d instanceof En)return d}return!0}),(0,de.h)(h=>h!==at),(0,De.q)(1)))}function br(f){return(0,Be.z)((0,Ue.b)(h=>{if(xn(h))throw Ur(0,h)}),(0,ce.U)(h=>!0===h))}const ci={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function ga(f,h,d,m,b){const $=Gi(f,h,d);return $.matched?function zi(f,h,d,m){const b=h.canMatch;if(!b||0===b.length)return(0,N.of)(!0);const $=b.map(z=>{const ve=to(z,f);return ut(function g(f){return f&&hn(f.canMatch)}(ve)?ve.canMatch(h,d):f.runInContext(()=>ve(h,d)))});return(0,N.of)($).pipe(Dt(),br())}(m=bo(h,m),h,d).pipe((0,ce.U)(z=>!0===z?$:{...ci})):(0,N.of)($)}function Gi(f,h,d){if(""===h.path)return"full"===h.pathMatch&&(f.hasChildren()||d.length>0)?{...ci}:{matched:!0,consumedSegments:[],remainingSegments:d,parameters:{},positionalParamSegments:{}};const b=(h.matcher||rn)(d,f,h);if(!b)return{...ci};const $={};Et(b.posParams,(ve,We)=>{$[We]=ve.path});const z=b.consumed.length>0?{...$,...b.consumed[b.consumed.length-1].parameters}:$;return{matched:!0,consumedSegments:b.consumed,remainingSegments:d.slice(b.consumed.length),parameters:z,positionalParamSegments:b.posParams??{}}}function Yi(f,h,d,m){if(d.length>0&&function oo(f,h,d){return d.some(m=>io(f,h,m)&&Zn(m)!==it)}(f,d,m)){const $=new xe(h,function lr(f,h,d,m){const b={};b[it]=m,m._sourceSegment=f,m._segmentIndexShift=h.length;for(const $ of d)if(""===$.path&&Zn($)!==it){const z=new xe([],{});z._sourceSegment=f,z._segmentIndexShift=h.length,b[Zn($)]=z}return b}(f,h,m,new xe(d,f.children)));return $._sourceSegment=f,$._segmentIndexShift=h.length,{segmentGroup:$,slicedSegments:[]}}if(0===d.length&&function As(f,h,d){return d.some(m=>io(f,h,m))}(f,d,m)){const $=new xe(f.segments,function Ms(f,h,d,m,b){const $={};for(const z of m)if(io(f,d,z)&&!b[Zn(z)]){const ve=new xe([],{});ve._sourceSegment=f,ve._segmentIndexShift=h.length,$[Zn(z)]=ve}return{...b,...$}}(f,h,d,m,f.children));return $._sourceSegment=f,$._segmentIndexShift=h.length,{segmentGroup:$,slicedSegments:d}}const b=new xe(f.segments,f.children);return b._sourceSegment=f,b._segmentIndexShift=h.length,{segmentGroup:b,slicedSegments:d}}function io(f,h,d){return(!(f.hasChildren()||h.length>0)||"full"!==d.pathMatch)&&""===d.path}function Br(f,h,d,m){return!!(Zn(f)===m||m!==it&&io(h,d,f))&&("**"===f.path||Gi(h,f,d).matched)}function Ts(f,h,d){return 0===h.length&&!f.children[d]}const qo=!1;class ui{constructor(h){this.segmentGroup=h||null}}class xs{constructor(h){this.urlTree=h}}function No(f){return oe(new ui(f))}function Mi(f){return oe(new xs(f))}class Rs{constructor(h,d,m,b,$){this.injector=h,this.configLoader=d,this.urlSerializer=m,this.urlTree=b,this.config=$,this.allowRedirects=!0}apply(){const h=Yi(this.urlTree.root,[],[],this.config).segmentGroup,d=new xe(h.segments,h.children);return this.expandSegmentGroup(this.injector,this.config,d,it).pipe((0,ce.U)($=>this.createUrlTree($n($),this.urlTree.queryParams,this.urlTree.fragment))).pipe(St($=>{if($ instanceof xs)return this.allowRedirects=!1,this.match($.urlTree);throw $ instanceof ui?this.noMatchError($):$}))}match(h){return this.expandSegmentGroup(this.injector,this.config,h.root,it).pipe((0,ce.U)(b=>this.createUrlTree($n(b),h.queryParams,h.fragment))).pipe(St(b=>{throw b instanceof ui?this.noMatchError(b):b}))}noMatchError(h){return new o.vHH(4002,qo)}createUrlTree(h,d,m){const b=sr(h);return new En(b,d,m)}expandSegmentGroup(h,d,m,b){return 0===m.segments.length&&m.hasChildren()?this.expandChildren(h,d,m).pipe((0,ce.U)($=>new xe([],$))):this.expandSegment(h,m,d,m.segments,b,!0)}expandChildren(h,d,m){const b=[];for(const $ of Object.keys(m.children))"primary"===$?b.unshift($):b.push($);return(0,x.D)(b).pipe((0,et.b)($=>{const z=m.children[$],ve=Lr(d,$);return this.expandSegmentGroup(h,ve,z,$).pipe((0,ce.U)(We=>({segment:We,outlet:$})))}),nn(($,z)=>($[z.outlet]=z.segment,$),{}),Rt())}expandSegment(h,d,m,b,$,z){return(0,x.D)(m).pipe((0,et.b)(ve=>this.expandSegmentAgainstRoute(h,d,m,ve,b,$,z).pipe(St(ft=>{if(ft instanceof ui)return(0,N.of)(null);throw ft}))),dt(ve=>!!ve),St((ve,We)=>{if(Je(ve))return Ts(d,b,$)?(0,N.of)(new xe([],{})):No(d);throw ve}))}expandSegmentAgainstRoute(h,d,m,b,$,z,ve){return Br(b,d,$,z)?void 0===b.redirectTo?this.matchSegmentAgainstRoute(h,d,b,$,z):ve&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z):No(d):No(d)}expandSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z){return"**"===b.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(h,m,b,z):this.expandRegularSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z)}expandWildCardWithParamsAgainstRouteUsingRedirect(h,d,m,b){const $=this.applyRedirectCommands([],m.redirectTo,{});return m.redirectTo.startsWith("/")?Mi($):this.lineralizeSegments(m,$).pipe((0,ne.z)(z=>{const ve=new xe(z,{});return this.expandSegment(h,ve,d,z,b,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z){const{matched:ve,consumedSegments:We,remainingSegments:ft,positionalParamSegments:bt}=Gi(d,b,$);if(!ve)return No(d);const jt=this.applyRedirectCommands(We,b.redirectTo,bt);return b.redirectTo.startsWith("/")?Mi(jt):this.lineralizeSegments(b,jt).pipe((0,ne.z)(wn=>this.expandSegment(h,d,m,wn.concat(ft),z,!1)))}matchSegmentAgainstRoute(h,d,m,b,$){return"**"===m.path?(h=bo(m,h),m.loadChildren?(m._loadedRoutes?(0,N.of)({routes:m._loadedRoutes,injector:m._loadedInjector}):this.configLoader.loadChildren(h,m)).pipe((0,ce.U)(ve=>(m._loadedRoutes=ve.routes,m._loadedInjector=ve.injector,new xe(b,{})))):(0,N.of)(new xe(b,{}))):ga(d,m,b,h).pipe((0,Ae.w)(({matched:z,consumedSegments:ve,remainingSegments:We})=>z?this.getChildConfig(h=m._injector??h,m,b).pipe((0,ne.z)(bt=>{const jt=bt.injector??h,wn=bt.routes,{segmentGroup:lo,slicedSegments:$o}=Yi(d,ve,We,wn),Ci=new xe(lo.segments,lo.children);if(0===$o.length&&Ci.hasChildren())return this.expandChildren(jt,wn,Ci).pipe((0,ce.U)(_i=>new xe(ve,_i)));if(0===wn.length&&0===$o.length)return(0,N.of)(new xe(ve,{}));const Hr=Zn(m)===$;return this.expandSegment(jt,Ci,wn,$o,Hr?it:$,!0).pipe((0,ce.U)(Ri=>new xe(ve.concat(Ri.segments),Ri.children)))})):No(d)))}getChildConfig(h,d,m){return d.children?(0,N.of)({routes:d.children,injector:h}):d.loadChildren?void 0!==d._loadedRoutes?(0,N.of)({routes:d._loadedRoutes,injector:d._loadedInjector}):function Xo(f,h,d,m){const b=h.canLoad;if(void 0===b||0===b.length)return(0,N.of)(!0);const $=b.map(z=>{const ve=to(z,f);return ut(function C(f){return f&&hn(f.canLoad)}(ve)?ve.canLoad(h,d):f.runInContext(()=>ve(h,d)))});return(0,N.of)($).pipe(Dt(),br())}(h,d,m).pipe((0,ne.z)(b=>b?this.configLoader.loadChildren(h,d).pipe((0,Ue.b)($=>{d._loadedRoutes=$.routes,d._loadedInjector=$.injector})):function Wi(f){return oe(zr(qo,3))}())):(0,N.of)({routes:[],injector:h})}lineralizeSegments(h,d){let m=[],b=d.root;for(;;){if(m=m.concat(b.segments),0===b.numberOfChildren)return(0,N.of)(m);if(b.numberOfChildren>1||!b.children[it])return oe(new o.vHH(4e3,qo));b=b.children[it]}}applyRedirectCommands(h,d,m){return this.applyRedirectCreateUrlTree(d,this.urlSerializer.parse(d),h,m)}applyRedirectCreateUrlTree(h,d,m,b){const $=this.createSegmentGroup(h,d.root,m,b);return new En($,this.createQueryParams(d.queryParams,this.urlTree.queryParams),d.fragment)}createQueryParams(h,d){const m={};return Et(h,(b,$)=>{if("string"==typeof b&&b.startsWith(":")){const ve=b.substring(1);m[$]=d[ve]}else m[$]=b}),m}createSegmentGroup(h,d,m,b){const $=this.createSegments(h,d.segments,m,b);let z={};return Et(d.children,(ve,We)=>{z[We]=this.createSegmentGroup(h,ve,m,b)}),new xe($,z)}createSegments(h,d,m,b){return d.map($=>$.path.startsWith(":")?this.findPosParam(h,$,b):this.findOrReturn($,m))}findPosParam(h,d,m){const b=m[d.path.substring(1)];if(!b)throw new o.vHH(4001,qo);return b}findOrReturn(h,d){let m=0;for(const b of d){if(b.path===h.path)return d.splice(m),b;m++}return h}}class A{}class ae{constructor(h,d,m,b,$,z,ve){this.injector=h,this.rootComponentType=d,this.config=m,this.urlTree=b,this.url=$,this.paramsInheritanceStrategy=z,this.urlSerializer=ve}recognize(){const h=Yi(this.urlTree.root,[],[],this.config.filter(d=>void 0===d.redirectTo)).segmentGroup;return this.processSegmentGroup(this.injector,this.config,h,it).pipe((0,ce.U)(d=>{if(null===d)return null;const m=new Pr([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},it,this.rootComponentType,null,this.urlTree.root,-1,{}),b=new qn(m,d),$=new xo(this.url,b);return this.inheritParamsAndData($._root),$}))}inheritParamsAndData(h){const d=h.value,m=vr(d,this.paramsInheritanceStrategy);d.params=Object.freeze(m.params),d.data=Object.freeze(m.data),h.children.forEach(b=>this.inheritParamsAndData(b))}processSegmentGroup(h,d,m,b){return 0===m.segments.length&&m.hasChildren()?this.processChildren(h,d,m):this.processSegment(h,d,m,m.segments,b)}processChildren(h,d,m){return(0,x.D)(Object.keys(m.children)).pipe((0,et.b)(b=>{const $=m.children[b],z=Lr(d,b);return this.processSegmentGroup(h,z,$,b)}),nn((b,$)=>b&&$?(b.push(...$),b):null),(0,Kt.o)(b=>null!==b),Ee(null),Rt(),(0,ce.U)(b=>{if(null===b)return null;const $=qt(b);return function $e(f){f.sort((h,d)=>h.value.outlet===it?-1:d.value.outlet===it?1:h.value.outlet.localeCompare(d.value.outlet))}($),$}))}processSegment(h,d,m,b,$){return(0,x.D)(d).pipe((0,et.b)(z=>this.processSegmentAgainstRoute(z._injector??h,z,m,b,$)),dt(z=>!!z),St(z=>{if(Je(z))return Ts(m,b,$)?(0,N.of)([]):(0,N.of)(null);throw z}))}processSegmentAgainstRoute(h,d,m,b,$){if(d.redirectTo||!Br(d,m,b,$))return(0,N.of)(null);let z;if("**"===d.path){const ve=b.length>0?ht(b).parameters:{},We=Jt(m)+b.length,ft=new Pr(b,ve,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,yn(d),Zn(d),d.component??d._loadedComponent??null,d,un(m),We,Wn(d));z=(0,N.of)({snapshot:ft,consumedSegments:[],remainingSegments:[]})}else z=ga(m,d,b,h).pipe((0,ce.U)(({matched:ve,consumedSegments:We,remainingSegments:ft,parameters:bt})=>{if(!ve)return null;const jt=Jt(m)+We.length;return{snapshot:new Pr(We,bt,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,yn(d),Zn(d),d.component??d._loadedComponent??null,d,un(m),jt,Wn(d)),consumedSegments:We,remainingSegments:ft}}));return z.pipe((0,Ae.w)(ve=>{if(null===ve)return(0,N.of)(null);const{snapshot:We,consumedSegments:ft,remainingSegments:bt}=ve;h=d._injector??h;const jt=d._loadedInjector??h,wn=function Xe(f){return f.children?f.children:f.loadChildren?f._loadedRoutes:[]}(d),{segmentGroup:lo,slicedSegments:$o}=Yi(m,ft,bt,wn.filter(Hr=>void 0===Hr.redirectTo));if(0===$o.length&&lo.hasChildren())return this.processChildren(jt,wn,lo).pipe((0,ce.U)(Hr=>null===Hr?null:[new qn(We,Hr)]));if(0===wn.length&&0===$o.length)return(0,N.of)([new qn(We,[])]);const Ci=Zn(d)===$;return this.processSegment(jt,wn,lo,$o,Ci?it:$).pipe((0,ce.U)(Hr=>null===Hr?null:[new qn(We,Hr)]))}))}}function lt(f){const h=f.value.routeConfig;return h&&""===h.path&&void 0===h.redirectTo}function qt(f){const h=[],d=new Set;for(const m of f){if(!lt(m)){h.push(m);continue}const b=h.find($=>m.value.routeConfig===$.value.routeConfig);void 0!==b?(b.children.push(...m.children),d.add(b)):h.push(m)}for(const m of d){const b=qt(m.children);h.push(new qn(m.value,b))}return h.filter(m=>!d.has(m))}function un(f){let h=f;for(;h._sourceSegment;)h=h._sourceSegment;return h}function Jt(f){let h=f,d=h._segmentIndexShift??0;for(;h._sourceSegment;)h=h._sourceSegment,d+=h._segmentIndexShift??0;return d-1}function yn(f){return f.data||{}}function Wn(f){return f.resolve||{}}function Ai(f){return"string"==typeof f.title||null===f.title}function so(f){return(0,Ae.w)(h=>{const d=f(h);return d?(0,x.D)(d).pipe((0,ce.U)(()=>h)):(0,N.of)(h)})}class gl{constructor(h){this.router=h,this.currentNavigation=null}setupNavigations(h){const d=this.router.events;return h.pipe((0,de.h)(m=>0!==m.id),(0,ce.U)(m=>({...m,extractedUrl:this.router.urlHandlingStrategy.extract(m.rawUrl)})),(0,Ae.w)(m=>{let b=!1,$=!1;return(0,N.of)(m).pipe((0,Ue.b)(z=>{this.currentNavigation={id:z.id,initialUrl:z.rawUrl,extractedUrl:z.extractedUrl,trigger:z.source,extras:z.extras,previousNavigation:this.router.lastSuccessfulNavigation?{...this.router.lastSuccessfulNavigation,previousNavigation:null}:null}}),(0,Ae.w)(z=>{const ve=this.router.browserUrlTree.toString(),We=!this.router.navigated||z.extractedUrl.toString()!==ve||ve!==this.router.currentUrlTree.toString();if(("reload"===this.router.onSameUrlNavigation||We)&&this.router.urlHandlingStrategy.shouldProcessUrl(z.rawUrl))return va(z.source)&&(this.router.browserUrlTree=z.extractedUrl),(0,N.of)(z).pipe((0,Ae.w)(bt=>{const jt=this.router.transitions.getValue();return d.next(new Mt(bt.id,this.router.serializeUrl(bt.extractedUrl),bt.source,bt.restoredState)),jt!==this.router.transitions.getValue()?be.E:Promise.resolve(bt)}),function Ki(f,h,d,m){return(0,Ae.w)(b=>function ma(f,h,d,m,b){return new Rs(f,h,d,m,b).apply()}(f,h,d,b.extractedUrl,m).pipe((0,ce.U)($=>({...b,urlAfterRedirects:$}))))}(this.router.ngModule.injector,this.router.configLoader,this.router.urlSerializer,this.router.config),(0,Ue.b)(bt=>{this.currentNavigation={...this.currentNavigation,finalUrl:bt.urlAfterRedirects},m.urlAfterRedirects=bt.urlAfterRedirects}),function Eo(f,h,d,m,b){return(0,ne.z)($=>function H(f,h,d,m,b,$,z="emptyOnly"){return new ae(f,h,d,m,b,z,$).recognize().pipe((0,Ae.w)(ve=>null===ve?function D(f){return new M.y(h=>h.error(f))}(new A):(0,N.of)(ve)))}(f,h,d,$.urlAfterRedirects,m.serialize($.urlAfterRedirects),m,b).pipe((0,ce.U)(z=>({...$,targetSnapshot:z}))))}(this.router.ngModule.injector,this.router.rootComponentType,this.router.config,this.router.urlSerializer,this.router.paramsInheritanceStrategy),(0,Ue.b)(bt=>{if(m.targetSnapshot=bt.targetSnapshot,"eager"===this.router.urlUpdateStrategy){if(!bt.extras.skipLocationChange){const wn=this.router.urlHandlingStrategy.merge(bt.urlAfterRedirects,bt.rawUrl);this.router.setBrowserUrl(wn,bt)}this.router.browserUrlTree=bt.urlAfterRedirects}const jt=new Rn(bt.id,this.router.serializeUrl(bt.extractedUrl),this.router.serializeUrl(bt.urlAfterRedirects),bt.targetSnapshot);d.next(jt)}));if(We&&this.router.rawUrlTree&&this.router.urlHandlingStrategy.shouldProcessUrl(this.router.rawUrlTree)){const{id:jt,extractedUrl:wn,source:lo,restoredState:$o,extras:Ci}=z,Hr=new Mt(jt,this.router.serializeUrl(wn),lo,$o);d.next(Hr);const Cr=Gn(wn,this.router.rootComponentType).snapshot;return m={...z,targetSnapshot:Cr,urlAfterRedirects:wn,extras:{...Ci,skipLocationChange:!1,replaceUrl:!1}},(0,N.of)(m)}return this.router.rawUrlTree=z.rawUrl,z.resolve(null),be.E}),(0,Ue.b)(z=>{const ve=new Pn(z.id,this.router.serializeUrl(z.extractedUrl),this.router.serializeUrl(z.urlAfterRedirects),z.targetSnapshot);this.router.triggerEvent(ve)}),(0,ce.U)(z=>m={...z,guards:ko(z.targetSnapshot,z.currentSnapshot,this.router.rootContexts)}),function Zt(f,h){return(0,ne.z)(d=>{const{targetSnapshot:m,currentSnapshot:b,guards:{canActivateChecks:$,canDeactivateChecks:z}}=d;return 0===z.length&&0===$.length?(0,N.of)({...d,guardsResult:!0}):function bn(f,h,d,m){return(0,x.D)(f).pipe((0,ne.z)(b=>function $r(f,h,d,m,b){const $=h&&h.routeConfig?h.routeConfig.canDeactivate:null;if(!$||0===$.length)return(0,N.of)(!0);const z=$.map(ve=>{const We=Po(h)??b,ft=to(ve,We);return ut(function a(f){return f&&hn(f.canDeactivate)}(ft)?ft.canDeactivate(f,h,d,m):We.runInContext(()=>ft(f,h,d,m))).pipe(dt())});return(0,N.of)(z).pipe(Dt())}(b.component,b.route,d,h,m)),dt(b=>!0!==b,!0))}(z,m,b,f).pipe((0,ne.z)(ve=>ve&&function Ui(f){return"boolean"==typeof f}(ve)?function Ve(f,h,d,m){return(0,x.D)(h).pipe((0,et.b)(b=>ke(function yr(f,h){return null!==f&&h&&h(new Zr(f)),(0,N.of)(!0)}(b.route.parent,m),function At(f,h){return null!==f&&h&&h(new xr(f)),(0,N.of)(!0)}(b.route,m),function Mn(f,h,d){const m=h[h.length-1],$=h.slice(0,h.length-1).reverse().map(z=>function Jn(f){const h=f.routeConfig?f.routeConfig.canActivateChild:null;return h&&0!==h.length?{node:f,guards:h}:null}(z)).filter(z=>null!==z).map(z=>ie(()=>{const ve=z.guards.map(We=>{const ft=Po(z.node)??d,bt=to(We,ft);return ut(function c(f){return f&&hn(f.canActivateChild)}(bt)?bt.canActivateChild(m,f):ft.runInContext(()=>bt(m,f))).pipe(dt())});return(0,N.of)(ve).pipe(Dt())}));return(0,N.of)($).pipe(Dt())}(f,b.path,d),function Dr(f,h,d){const m=h.routeConfig?h.routeConfig.canActivate:null;if(!m||0===m.length)return(0,N.of)(!0);const b=m.map($=>ie(()=>{const z=Po(h)??d,ve=to($,z);return ut(function s(f){return f&&hn(f.canActivate)}(ve)?ve.canActivate(h,f):z.runInContext(()=>ve(h,f))).pipe(dt())}));return(0,N.of)(b).pipe(Dt())}(f,b.route,d))),dt(b=>!0!==b,!0))}(m,$,f,h):(0,N.of)(ve)),(0,ce.U)(ve=>({...d,guardsResult:ve})))})}(this.router.ngModule.injector,z=>this.router.triggerEvent(z)),(0,Ue.b)(z=>{if(m.guardsResult=z.guardsResult,xn(z.guardsResult))throw Ur(0,z.guardsResult);const ve=new ur(z.id,this.router.serializeUrl(z.extractedUrl),this.router.serializeUrl(z.urlAfterRedirects),z.targetSnapshot,!!z.guardsResult);this.router.triggerEvent(ve)}),(0,de.h)(z=>!!z.guardsResult||(this.router.restoreHistory(z),this.router.cancelNavigationTransition(z,"",3),!1)),so(z=>{if(z.guards.canActivateChecks.length)return(0,N.of)(z).pipe((0,Ue.b)(ve=>{const We=new mr(ve.id,this.router.serializeUrl(ve.extractedUrl),this.router.serializeUrl(ve.urlAfterRedirects),ve.targetSnapshot);this.router.triggerEvent(We)}),(0,Ae.w)(ve=>{let We=!1;return(0,N.of)(ve).pipe(function pr(f,h){return(0,ne.z)(d=>{const{targetSnapshot:m,guards:{canActivateChecks:b}}=d;if(!b.length)return(0,N.of)(d);let $=0;return(0,x.D)(b).pipe((0,et.b)(z=>function Vr(f,h,d,m){const b=f.routeConfig,$=f._resolve;return void 0!==b?.title&&!Ai(b)&&($[Xt]=b.title),function Mr(f,h,d,m){const b=function Lo(f){return[...Object.keys(f),...Object.getOwnPropertySymbols(f)]}(f);if(0===b.length)return(0,N.of)({});const $={};return(0,x.D)(b).pipe((0,ne.z)(z=>function di(f,h,d,m){const b=Po(h)??m,$=to(f,b);return ut($.resolve?$.resolve(h,d):b.runInContext(()=>$(h,d)))}(f[z],h,d,m).pipe(dt(),(0,Ue.b)(ve=>{$[z]=ve}))),wt(1),function pn(f){return(0,ce.U)(()=>f)}($),St(z=>Je(z)?be.E:oe(z)))}($,f,h,m).pipe((0,ce.U)(z=>(f._resolvedData=z,f.data=vr(f,d).resolve,b&&Ai(b)&&(f.data[Xt]=b.title),null)))}(z.route,m,f,h)),(0,Ue.b)(()=>$++),wt(1),(0,ne.z)(z=>$===b.length?(0,N.of)(d):be.E))})}(this.router.paramsInheritanceStrategy,this.router.ngModule.injector),(0,Ue.b)({next:()=>We=!0,complete:()=>{We||(this.router.restoreHistory(ve),this.router.cancelNavigationTransition(ve,"",2))}}))}),(0,Ue.b)(ve=>{const We=new an(ve.id,this.router.serializeUrl(ve.extractedUrl),this.router.serializeUrl(ve.urlAfterRedirects),ve.targetSnapshot);this.router.triggerEvent(We)}))}),so(z=>{const ve=We=>{const ft=[];We.routeConfig?.loadComponent&&!We.routeConfig._loadedComponent&&ft.push(this.router.configLoader.loadComponent(We.routeConfig).pipe((0,Ue.b)(bt=>{We.component=bt}),(0,ce.U)(()=>{})));for(const bt of We.children)ft.push(...ve(bt));return ft};return E(ve(z.targetSnapshot.root)).pipe(Ee(),(0,De.q)(1))}),so(()=>this.router.afterPreactivation()),(0,ce.U)(z=>{const ve=function Go(f,h,d){const m=Fr(f,h._root,d?d._root:void 0);return new Sr(m,h)}(this.router.routeReuseStrategy,z.targetSnapshot,z.currentRouterState);return m={...z,targetRouterState:ve}}),(0,Ue.b)(z=>{this.router.currentUrlTree=z.urlAfterRedirects,this.router.rawUrlTree=this.router.urlHandlingStrategy.merge(z.urlAfterRedirects,z.rawUrl),this.router.routerState=z.targetRouterState,"deferred"===this.router.urlUpdateStrategy&&(z.extras.skipLocationChange||this.router.setBrowserUrl(this.router.rawUrlTree,z),this.router.browserUrlTree=z.urlAfterRedirects)}),((f,h,d)=>(0,ce.U)(m=>(new Sn(h,m.targetRouterState,m.currentRouterState,d).activate(f),m)))(this.router.rootContexts,this.router.routeReuseStrategy,z=>this.router.triggerEvent(z)),(0,Ue.b)({next(){b=!0},complete(){b=!0}}),(0,Pt.x)(()=>{b||$||this.router.cancelNavigationTransition(m,"",1),this.currentNavigation?.id===m.id&&(this.currentNavigation=null)}),St(z=>{if($=!0,Gr(z)){Do(z)||(this.router.navigated=!0,this.router.restoreHistory(m,!0));const ve=new Bt(m.id,this.router.serializeUrl(m.extractedUrl),z.message,z.cancellationCode);if(d.next(ve),Do(z)){const We=this.router.urlHandlingStrategy.merge(z.url,this.router.rawUrlTree),ft={skipLocationChange:m.extras.skipLocationChange,replaceUrl:"eager"===this.router.urlUpdateStrategy||va(m.source)};this.router.scheduleNavigation(We,"imperative",null,ft,{resolve:m.resolve,reject:m.reject,promise:m.promise})}else m.resolve(!1)}else{this.router.restoreHistory(m,!0);const ve=new An(m.id,this.router.serializeUrl(m.extractedUrl),z,m.targetSnapshot??void 0);d.next(ve);try{m.resolve(this.router.errorHandler(z))}catch(We){m.reject(We)}}return be.E}))}))}}function va(f){return"imperative"!==f}let hi=(()=>{class f{buildTitle(d){let m,b=d.root;for(;void 0!==b;)m=this.getResolvedTitleForRoute(b)??m,b=b.children.find($=>$.outlet===it);return m}getResolvedTitleForRoute(d){return d.data[Xt]}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(Ps)},providedIn:"root"}),f})(),Ps=(()=>{class f extends hi{constructor(d){super(),this.title=d}updateTitle(d){const m=this.buildTitle(d);void 0!==m&&this.title.setTitle(m)}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(Ut.Dx))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})(),ya=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(Gu)},providedIn:"root"}),f})();class ml{shouldDetach(h){return!1}store(h,d){}shouldAttach(h){return!1}retrieve(h){return null}shouldReuseRoute(h,d){return h.routeConfig===d.routeConfig}}let Gu=(()=>{class f extends ml{}return f.\u0275fac=function(){let h;return function(m){return(h||(h=o.n5z(f)))(m||f)}}(),f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const pi=new o.OlP("",{providedIn:"root",factory:()=>({})}),ao=new o.OlP("ROUTES");let Xi=(()=>{class f{constructor(d,m){this.injector=d,this.compiler=m,this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap}loadComponent(d){if(this.componentLoaders.get(d))return this.componentLoaders.get(d);if(d._loadedComponent)return(0,N.of)(d._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(d);const m=ut(d.loadComponent()).pipe((0,ce.U)(Zo),(0,Ue.b)($=>{this.onLoadEndListener&&this.onLoadEndListener(d),d._loadedComponent=$}),(0,Pt.x)(()=>{this.componentLoaders.delete(d)})),b=new k(m,()=>new O.x).pipe(T());return this.componentLoaders.set(d,b),b}loadChildren(d,m){if(this.childrenLoaders.get(m))return this.childrenLoaders.get(m);if(m._loadedRoutes)return(0,N.of)({routes:m._loadedRoutes,injector:m._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(m);const $=this.loadModuleFactoryOrRoutes(m.loadChildren).pipe((0,ce.U)(ve=>{this.onLoadEndListener&&this.onLoadEndListener(m);let We,ft,bt=!1;Array.isArray(ve)?ft=ve:(We=ve.create(d).injector,ft=Yt(We.get(ao,[],o.XFs.Self|o.XFs.Optional)));return{routes:ft.map(Nr),injector:We}}),(0,Pt.x)(()=>{this.childrenLoaders.delete(m)})),z=new k($,()=>new O.x).pipe(T());return this.childrenLoaders.set(m,z),z}loadModuleFactoryOrRoutes(d){return ut(d()).pipe((0,ce.U)(Zo),(0,ne.z)(b=>b instanceof o.YKP||Array.isArray(b)?(0,N.of)(b):(0,x.D)(this.compiler.compileModuleAsync(b))))}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(o.zs3),o.LFG(o.Sil))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();function Zo(f){return function ba(f){return f&&"object"==typeof f&&"default"in f}(f)?f.default:f}let vl=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(gi)},providedIn:"root"}),f})(),gi=(()=>{class f{shouldProcessUrl(d){return!0}extract(d){return d}merge(d,m){return d}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();function Zi(f){throw f}function Wu(f,h,d){return h.parse("/")}const Ca={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},_a={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};function Xr(){const f=(0,o.f3M)(pt),h=(0,o.f3M)(fr),d=(0,o.f3M)(te.Ye),m=(0,o.f3M)(o.zs3),b=(0,o.f3M)(o.Sil),$=(0,o.f3M)(ao,{optional:!0})??[],z=(0,o.f3M)(pi,{optional:!0})??{},ve=new or(null,f,h,d,m,b,Yt($));return function yl(f,h){f.errorHandler&&(h.errorHandler=f.errorHandler),f.malformedUriErrorHandler&&(h.malformedUriErrorHandler=f.malformedUriErrorHandler),f.onSameUrlNavigation&&(h.onSameUrlNavigation=f.onSameUrlNavigation),f.paramsInheritanceStrategy&&(h.paramsInheritanceStrategy=f.paramsInheritanceStrategy),f.urlUpdateStrategy&&(h.urlUpdateStrategy=f.urlUpdateStrategy),f.canceledNavigationResolution&&(h.canceledNavigationResolution=f.canceledNavigationResolution)}(z,ve),ve}let or=(()=>{class f{constructor(d,m,b,$,z,ve,We){this.rootComponentType=d,this.urlSerializer=m,this.rootContexts=b,this.location=$,this.config=We,this.lastSuccessfulNavigation=null,this.disposed=!1,this.navigationId=0,this.currentPageId=0,this.isNgZoneEnabled=!1,this.events=new O.x,this.errorHandler=Zi,this.malformedUriErrorHandler=Wu,this.navigated=!1,this.lastSuccessfulId=-1,this.afterPreactivation=()=>(0,N.of)(void 0),this.urlHandlingStrategy=(0,o.f3M)(vl),this.routeReuseStrategy=(0,o.f3M)(ya),this.titleStrategy=(0,o.f3M)(hi),this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.canceledNavigationResolution="replace",this.navigationTransitions=new gl(this),this.configLoader=z.get(Xi),this.configLoader.onLoadEndListener=wn=>this.triggerEvent(new ho(wn)),this.configLoader.onLoadStartListener=wn=>this.triggerEvent(new fo(wn)),this.ngModule=z.get(o.h0i),this.console=z.get(o.c2e);const jt=z.get(o.R0b);this.isNgZoneEnabled=jt instanceof o.R0b&&o.R0b.isInAngularZone(),this.resetConfig(We),this.currentUrlTree=new En,this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=Gn(this.currentUrlTree,this.rootComponentType),this.transitions=new ge.X({id:0,targetPageId:0,currentUrlTree:this.currentUrlTree,extractedUrl:this.urlHandlingStrategy.extract(this.currentUrlTree),urlAfterRedirects:this.urlHandlingStrategy.extract(this.currentUrlTree),rawUrl:this.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:"imperative",restoredState:null,currentSnapshot:this.routerState.snapshot,targetSnapshot:null,currentRouterState:this.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.navigations=this.navigationTransitions.setupNavigations(this.transitions),this.processNavigations()}get browserPageId(){return this.location.getState()?.\u0275routerPageId}resetRootComponentType(d){this.rootComponentType=d,this.routerState.root.component=this.rootComponentType}setTransition(d){this.transitions.next({...this.transitions.value,...d})}initialNavigation(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(d=>{const m="popstate"===d.type?"popstate":"hashchange";"popstate"===m&&setTimeout(()=>{const b={replaceUrl:!0},$=d.state?.navigationId?d.state:null;if(d.state){const ve={...d.state};delete ve.navigationId,delete ve.\u0275routerPageId,0!==Object.keys(ve).length&&(b.state=ve)}const z=this.parseUrl(d.url);this.scheduleNavigation(z,m,$,b)},0)}))}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}triggerEvent(d){this.events.next(d)}resetConfig(d){this.config=d.map(Nr),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.transitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0}createUrlTree(d,m={}){const{relativeTo:b,queryParams:$,fragment:z,queryParamsHandling:ve,preserveFragment:We}=m,ft=b||this.routerState.root,bt=We?this.currentUrlTree.fragment:z;let jt=null;switch(ve){case"merge":jt={...this.currentUrlTree.queryParams,...$};break;case"preserve":jt=this.currentUrlTree.queryParams;break;default:jt=$||null}return null!==jt&&(jt=this.removeEmptyProps(jt)),gr(ft,this.currentUrlTree,d,jt,bt??null)}navigateByUrl(d,m={skipLocationChange:!1}){const b=xn(d)?d:this.parseUrl(d),$=this.urlHandlingStrategy.merge(b,this.rawUrlTree);return this.scheduleNavigation($,"imperative",null,m)}navigate(d,m={skipLocationChange:!1}){return function Ji(f){for(let h=0;h{const $=d[b];return null!=$&&(m[b]=$),m},{})}processNavigations(){this.navigations.subscribe(d=>{this.navigated=!0,this.lastSuccessfulId=d.id,this.currentPageId=d.targetPageId,this.events.next(new Wt(d.id,this.serializeUrl(d.extractedUrl),this.serializeUrl(this.currentUrlTree))),this.lastSuccessfulNavigation=this.getCurrentNavigation(),this.titleStrategy?.updateTitle(this.routerState.snapshot),d.resolve(!0)},d=>{this.console.warn(`Unhandled Navigation Error: ${d}`)})}scheduleNavigation(d,m,b,$,z){if(this.disposed)return Promise.resolve(!1);let ve,We,ft;z?(ve=z.resolve,We=z.reject,ft=z.promise):ft=new Promise((wn,lo)=>{ve=wn,We=lo});const bt=++this.navigationId;let jt;return"computed"===this.canceledNavigationResolution?(0===this.currentPageId&&(b=this.location.getState()),jt=b&&b.\u0275routerPageId?b.\u0275routerPageId:$.replaceUrl||$.skipLocationChange?this.browserPageId??0:(this.browserPageId??0)+1):jt=0,this.setTransition({id:bt,targetPageId:jt,source:m,restoredState:b,currentUrlTree:this.currentUrlTree,rawUrl:d,extras:$,resolve:ve,reject:We,promise:ft,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),ft.catch(wn=>Promise.reject(wn))}setBrowserUrl(d,m){const b=this.urlSerializer.serialize(d),$={...m.extras.state,...this.generateNgRouterState(m.id,m.targetPageId)};this.location.isCurrentPathEqualTo(b)||m.extras.replaceUrl?this.location.replaceState(b,"",$):this.location.go(b,"",$)}restoreHistory(d,m=!1){if("computed"===this.canceledNavigationResolution){const b=this.currentPageId-d.targetPageId;"popstate"!==d.source&&"eager"!==this.urlUpdateStrategy&&this.currentUrlTree!==this.getCurrentNavigation()?.finalUrl||0===b?this.currentUrlTree===this.getCurrentNavigation()?.finalUrl&&0===b&&(this.resetState(d),this.browserUrlTree=d.currentUrlTree,this.resetUrlToCurrentUrlTree()):this.location.historyGo(b)}else"replace"===this.canceledNavigationResolution&&(m&&this.resetState(d),this.resetUrlToCurrentUrlTree())}resetState(d){this.routerState=d.currentRouterState,this.currentUrlTree=d.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,d.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}cancelNavigationTransition(d,m,b){const $=new Bt(d.id,this.serializeUrl(d.extractedUrl),m,b);this.triggerEvent($),d.resolve(!1)}generateNgRouterState(d,m){return"computed"===this.canceledNavigationResolution?{navigationId:d,\u0275routerPageId:m}:{navigationId:d}}}return f.\u0275fac=function(d){o.$Z()},f.\u0275prov=o.Yz7({token:f,factory:function(){return Xr()},providedIn:"root"}),f})(),mi=(()=>{class f{constructor(d,m,b,$,z,ve){this.router=d,this.route=m,this.tabIndexAttribute=b,this.renderer=$,this.el=z,this.locationStrategy=ve,this._preserveFragment=!1,this._skipLocationChange=!1,this._replaceUrl=!1,this.href=null,this.commands=null,this.onChanges=new O.x;const We=z.nativeElement.tagName;this.isAnchorElement="A"===We||"AREA"===We,this.isAnchorElement?this.subscription=d.events.subscribe(ft=>{ft instanceof Wt&&this.updateHref()}):this.setTabIndexIfNotOnNativeEl("0")}set preserveFragment(d){this._preserveFragment=(0,o.D6c)(d)}get preserveFragment(){return this._preserveFragment}set skipLocationChange(d){this._skipLocationChange=(0,o.D6c)(d)}get skipLocationChange(){return this._skipLocationChange}set replaceUrl(d){this._replaceUrl=(0,o.D6c)(d)}get replaceUrl(){return this._replaceUrl}setTabIndexIfNotOnNativeEl(d){null!=this.tabIndexAttribute||this.isAnchorElement||this.applyAttributeValue("tabindex",d)}ngOnChanges(d){this.isAnchorElement&&this.updateHref(),this.onChanges.next(this)}set routerLink(d){null!=d?(this.commands=Array.isArray(d)?d:[d],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(d,m,b,$,z){return!!(null===this.urlTree||this.isAnchorElement&&(0!==d||m||b||$||z||"string"==typeof this.target&&"_self"!=this.target))||(this.router.navigateByUrl(this.urlTree,{skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state}),!this.isAnchorElement)}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){this.href=null!==this.urlTree&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(this.urlTree)):null;const d=null===this.href?null:(0,o.P3R)(this.href,this.el.nativeElement.tagName.toLowerCase(),"href");this.applyAttributeValue("href",d)}applyAttributeValue(d,m){const b=this.renderer,$=this.el.nativeElement;null!==m?b.setAttribute($,d,m):b.removeAttribute($,d)}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}}return f.\u0275fac=function(d){return new(d||f)(o.Y36(or),o.Y36(Rr),o.$8M("tabindex"),o.Y36(o.Qsj),o.Y36(o.SBq),o.Y36(te.S$))},f.\u0275dir=o.lG2({type:f,selectors:[["","routerLink",""]],hostVars:1,hostBindings:function(d,m){1&d&&o.NdJ("click",function($){return m.onClick($.button,$.ctrlKey,$.shiftKey,$.altKey,$.metaKey)}),2&d&&o.uIk("target",m.target)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",relativeTo:"relativeTo",preserveFragment:"preserveFragment",skipLocationChange:"skipLocationChange",replaceUrl:"replaceUrl",routerLink:"routerLink"},standalone:!0,features:[o.TTD]}),f})();class es{}let Dl=(()=>{class f{preload(d,m){return m().pipe(St(()=>(0,N.of)(null)))}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})(),wa=(()=>{class f{constructor(d,m,b,$,z){this.router=d,this.injector=b,this.preloadingStrategy=$,this.loader=z}setUpPreloading(){this.subscription=this.router.events.pipe((0,de.h)(d=>d instanceof Wt),(0,et.b)(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(d,m){const b=[];for(const $ of m){$.providers&&!$._injector&&($._injector=(0,o.MMx)($.providers,d,`Route: ${$.path}`));const z=$._injector??d,ve=$._loadedInjector??z;$.loadChildren&&!$._loadedRoutes&&void 0===$.canLoad||$.loadComponent&&!$._loadedComponent?b.push(this.preloadConfig(z,$)):($.children||$._loadedRoutes)&&b.push(this.processRoutes(ve,$.children??$._loadedRoutes))}return(0,x.D)(b).pipe((0,K.J)())}preloadConfig(d,m){return this.preloadingStrategy.preload(m,()=>{let b;b=m.loadChildren&&void 0===m.canLoad?this.loader.loadChildren(d,m):(0,N.of)(null);const $=b.pipe((0,ne.z)(z=>null===z?(0,N.of)(void 0):(m._loadedRoutes=z.routes,m._loadedInjector=z.injector,this.processRoutes(z.injector??d,z.routes))));if(m.loadComponent&&!m._loadedComponent){const z=this.loader.loadComponent(m);return(0,x.D)([$,z]).pipe((0,K.J)())}return $})}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(or),o.LFG(o.Sil),o.LFG(o.lqb),o.LFG(es),o.LFG(Xi))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const ts=new o.OlP("");let Ns=(()=>{class f{constructor(d,m,b,$={}){this.router=d,this.viewportScroller=m,this.zone=b,this.options=$,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},$.scrollPositionRestoration=$.scrollPositionRestoration||"disabled",$.anchorScrolling=$.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.router.events.subscribe(d=>{d instanceof Mt?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=d.navigationTrigger,this.restoredId=d.restoredState?d.restoredState.navigationId:0):d instanceof Wt&&(this.lastId=d.id,this.scheduleScrollEvent(d,this.router.parseUrl(d.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.router.events.subscribe(d=>{d instanceof ar&&(d.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(d.position):d.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(d.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(d,m){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.router.triggerEvent(new ar(d,"popstate"===this.lastSource?this.store[this.restoredId]:null,m))})},0)})}ngOnDestroy(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()}}return f.\u0275fac=function(d){o.$Z()},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac}),f})();function yi(f,h){return{\u0275kind:f,\u0275providers:h}}function $s(){const f=(0,o.f3M)(o.zs3);return h=>{const d=f.get(o.z2F);if(h!==d.components[0])return;const m=f.get(or),b=f.get(rs);1===f.get(Bs)&&m.initialNavigation(),f.get(Qo,null,o.XFs.Optional)?.setUpPreloading(),f.get(ts,null,o.XFs.Optional)?.init(),m.resetRootComponentType(d.componentTypes[0]),b.closed||(b.next(),b.unsubscribe())}}const rs=new o.OlP("",{factory:()=>new O.x}),Bs=new o.OlP("",{providedIn:"root",factory:()=>1});const Qo=new o.OlP("");function bi(f){return yi(0,[{provide:Qo,useExisting:wa},{provide:es,useExisting:f}])}const _l=new o.OlP("ROUTER_FORROOT_GUARD"),wl=[te.Ye,{provide:pt,useClass:vt},{provide:or,useFactory:Xr},fr,{provide:Rr,useFactory:function Jo(f){return f.routerState.root},deps:[or]},Xi,[]];function _n(){return new o.PXZ("Router",or)}let Xu=(()=>{class f{constructor(d){}static forRoot(d,m){return{ngModule:f,providers:[wl,[],{provide:ao,multi:!0,useValue:d},{provide:_l,useFactory:Qu,deps:[[or,new o.FiY,new o.tp0]]},{provide:pi,useValue:m||{}},m?.useHash?{provide:te.S$,useClass:te.Do}:{provide:te.S$,useClass:te.b0},{provide:ts,useFactory:()=>{const f=(0,o.f3M)(or),h=(0,o.f3M)(te.EM),d=(0,o.f3M)(o.R0b),m=(0,o.f3M)(pi);return m.scrollOffset&&h.setOffset(m.scrollOffset),new Ns(f,h,d,m)}},m?.preloadingStrategy?bi(m.preloadingStrategy).\u0275providers:[],{provide:o.PXZ,multi:!0,useFactory:_n},m?.initialNavigation?ed(m):[],[{provide:El,useFactory:$s},{provide:o.tb,multi:!0,useExisting:El}]]}}static forChild(d){return{ngModule:f,providers:[{provide:ao,multi:!0,useValue:d}]}}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(_l,8))},f.\u0275mod=o.oAB({type:f}),f.\u0275inj=o.cJS({imports:[kr]}),f})();function Qu(f){return"guarded"}function ed(f){return["disabled"===f.initialNavigation?yi(3,[{provide:o.ip1,multi:!0,useFactory:()=>{const h=(0,o.f3M)(or);return()=>{h.setUpLocationChangeListener()}}},{provide:Bs,useValue:2}]).\u0275providers:[],"enabledBlocking"===f.initialNavigation?yi(2,[{provide:Bs,useValue:0},{provide:o.ip1,multi:!0,deps:[o.zs3],useFactory:h=>{const d=h.get(te.V_,Promise.resolve());return()=>d.then(()=>new Promise(b=>{const $=h.get(or),z=h.get(rs);(function m(b){h.get(or).events.pipe((0,de.h)(z=>z instanceof Wt||z instanceof Bt||z instanceof An),(0,ce.U)(z=>z instanceof Wt||z instanceof Bt&&(0===z.code||1===z.code)&&null),(0,de.h)(z=>null!==z),(0,De.q)(1)).subscribe(()=>{b()})})(()=>{b(!0)}),$.afterPreactivation=()=>(b(!0),z.closed?(0,N.of)(void 0):z),$.initialNavigation()}))}}]).\u0275providers:[]]}const El=new o.OlP("")},5861:(Qe,Fe,w)=>{"use strict";function o(N,ge,R,W,M,U,_){try{var Y=N[U](_),G=Y.value}catch(Z){return void R(Z)}Y.done?ge(G):Promise.resolve(G).then(W,M)}function x(N){return function(){var ge=this,R=arguments;return new Promise(function(W,M){var U=N.apply(ge,R);function _(G){o(U,W,M,_,Y,"next",G)}function Y(G){o(U,W,M,_,Y,"throw",G)}_(void 0)})}}w.d(Fe,{Z:()=>x})}},Qe=>{Qe(Qe.s=1394)}]); \ No newline at end of file diff --git a/src/main/resources/app/runtime.bf11d3681906b638.js b/src/main/resources/app/runtime.bf11d3681906b638.js new file mode 100644 index 000000000..bc0256c32 --- /dev/null +++ b/src/main/resources/app/runtime.bf11d3681906b638.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,v={},g={};function f(e){var d=g[e];if(void 0!==d)return d.exports;var a=g[e]={exports:{}};return v[e].call(a.exports,a,a.exports,f),a.exports}f.m=v,e=[],f.O=(d,a,r,b)=>{if(!a){var t=1/0;for(c=0;c=b)&&Object.keys(f.O).every(p=>f.O[p](a[n]))?a.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[a,r,b]},f.n=e=>{var d=e&&e.__esModule?()=>e.default:()=>e;return f.d(d,{a:d}),d},(()=>{var d,e=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;f.t=function(a,r){if(1&r&&(a=this(a)),8&r||"object"==typeof a&&a&&(4&r&&a.__esModule||16&r&&"function"==typeof a.then))return a;var b=Object.create(null);f.r(b);var c={};d=d||[null,e({}),e([]),e(e)];for(var t=2&r&&a;"object"==typeof t&&!~d.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>a[l]);return c.default=()=>a,f.d(b,c),b}})(),f.d=(e,d)=>{for(var a in d)f.o(d,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:d[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((d,a)=>(f.f[a](e,d),d),[])),f.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"fc6a678bdb89d268",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2539:"044258b00f51d3ab",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"6d41065e22e54a84",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),f.miniCssF=e=>{},f.o=(e,d)=>Object.prototype.hasOwnProperty.call(e,d),(()=>{var e={},d="app:";f.l=(a,r,b,c)=>{if(e[a])e[a].push(r);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[a];if(delete e[a],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),f.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;f.tt=()=>(void 0===e&&(e={createScriptURL:d=>d},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),f.tu=e=>f.tt().createScriptURL(e),f.p="",(()=>{var e={3666:0};f.f.j=(r,b)=>{var c=f.o(e,r)?e[r]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=r){var t=new Promise((o,s)=>c=e[r]=[o,s]);b.push(c[2]=t);var l=f.p+f.u(r),n=new Error;f.l(l,o=>{if(f.o(e,r)&&(0!==(c=e[r])&&(e[r]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+r+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+r,r)}else e[r]=0},f.O.j=r=>0===e[r];var d=(r,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)f.o(t,n)&&(f.m[n]=t[n]);if(l)var s=l(f)}for(r&&r(b);o{"use strict";var e,v={},g={};function f(e){var r=g[e];if(void 0!==r)return r.exports;var a=g[e]={exports:{}};return v[e].call(a.exports,a,a.exports,f),a.exports}f.m=v,e=[],f.O=(r,a,d,b)=>{if(!a){var t=1/0;for(c=0;c=b)&&Object.keys(f.O).every(p=>f.O[p](a[n]))?a.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[a,d,b]},f.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return f.d(r,{a:r}),r},(()=>{var r,e=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;f.t=function(a,d){if(1&d&&(a=this(a)),8&d||"object"==typeof a&&a&&(4&d&&a.__esModule||16&d&&"function"==typeof a.then))return a;var b=Object.create(null);f.r(b);var c={};r=r||[null,e({}),e([]),e(e)];for(var t=2&d&&a;"object"==typeof t&&!~r.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>a[l]);return c.default=()=>a,f.d(b,c),b}})(),f.d=(e,r)=>{for(var a in r)f.o(r,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:r[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((r,a)=>(f.f[a](e,r),r),[])),f.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"fc6a678bdb89d268",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"6d41065e22e54a84",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9151:"21577e63c2cd66c2",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),f.miniCssF=e=>{},f.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e={},r="app:";f.l=(a,d,b,c)=>{if(e[a])e[a].push(d);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[a];if(delete e[a],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),f.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;f.tt=()=>(void 0===e&&(e={createScriptURL:r=>r},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),f.tu=e=>f.tt().createScriptURL(e),f.p="",(()=>{var e={3666:0};f.f.j=(d,b)=>{var c=f.o(e,d)?e[d]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=d){var t=new Promise((o,s)=>c=e[d]=[o,s]);b.push(c[2]=t);var l=f.p+f.u(d),n=new Error;f.l(l,o=>{if(f.o(e,d)&&(0!==(c=e[d])&&(e[d]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+d+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+d,d)}else e[d]=0},f.O.j=d=>0===e[d];var r=(d,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)f.o(t,n)&&(f.m[n]=t[n]);if(l)var s=l(f)}for(d&&d(b);o Date: Sun, 28 May 2023 01:05:33 +0200 Subject: [PATCH 92/99] fix pg db-script --- .../dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql | 2 +- .../dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql b/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql index 6bf6fc86e..3835be5d2 100644 --- a/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql +++ b/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-pg.sql @@ -2,4 +2,4 @@ -- Table wettkampf -- ----------------------------------------------------- ALTER TABLE wettkampf ADD punktegleichstandsregel varchar(254) DEFAULT ''; -ALTER TABLE wettkampf ADD rotation varchar(254) DEFAULT ""; +ALTER TABLE wettkampf ADD rotation varchar(254) DEFAULT ''; diff --git a/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql b/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql index 02bd5ed9c..1c891189f 100644 --- a/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql +++ b/src/main/resources/dbscripts/AddPunktegleichstandsregelToWettkampf-sqllite.sql @@ -7,4 +7,4 @@ --ALTER TABLE wettkampf ADD ort varchar(255) DEFAULT ''; --ALTER TABLE wettkampf ADD adresse varchar(255) DEFAULT ''; ALTER TABLE wettkampf ADD punktegleichstandsregel varchar(254) DEFAULT ''; -ALTER TABLE wettkampf ADD rotation varchar(254) DEFAULT ""; \ No newline at end of file +ALTER TABLE wettkampf ADD rotation varchar(254) DEFAULT ''; \ No newline at end of file From e6d94910f50e9ce2854ef3bcc4bb7346f31e0b48 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sun, 28 May 2023 17:36:12 +0200 Subject: [PATCH 93/99] #698 add avg score-editor - refactor to form-control --- .../wertung-avg-calc.component.html | 38 ++++-- .../wertung-avg-calc.component.scss | 16 ++- .../wertung-avg-calc.component.ts | 124 ++++++++++++++---- .../wertung-editor/wertung-editor.page.html | 4 +- .../app/wertung-editor/wertung-editor.page.ts | 16 ++- 5 files changed, 155 insertions(+), 43 deletions(-) diff --git a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.html b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.html index 6b2b4c268..08d0cd28b 100644 --- a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.html +++ b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.html @@ -1,32 +1,48 @@ {{title}} - + - - {{title}} - ø {{calcAvg()}} + + {{title}} - ø {{avgValue}} +
            Kommastellen
            {{i+1}}. Wertung
            - + +
            - +
            - + diff --git a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.scss b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.scss index 6536568b9..62b03c395 100644 --- a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.scss +++ b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.scss @@ -17,7 +17,10 @@ flex-wrap: nowrap; ion-col { //flex-basis: 20%; - &.table-subject { + &.decimals { + flex: 0 0 6em; + } + &.table-action { flex: 0 0 1.5em; } &.number { @@ -36,6 +39,17 @@ } } +#decimals-group { + height: 70%; + overflow: hidden; + ion-input { + height: 100%; + width: 100%; + outline: none; + text-align: right; + border: 1px solid #a9a9a9; + } +} #input-group { height: 70%; diff --git a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.ts b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.ts index d2cd115a6..4605a7bbd 100644 --- a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.ts +++ b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.ts @@ -1,11 +1,36 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { Component, EventEmitter, HostBinding, Input, OnInit, Output, ViewChild } from '@angular/core'; +import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { Subject } from 'rxjs'; @Component({ selector: 'app-wertung-avg-calc', templateUrl: './wertung-avg-calc.component.html', styleUrls: ['./wertung-avg-calc.component.scss'], + providers: [ + { + provide: NG_VALUE_ACCESSOR, + multi:true, + useExisting: WertungAvgCalcComponent + } + ] }) -export class WertungAvgCalcComponent implements OnInit { +export class WertungAvgCalcComponent implements ControlValueAccessor { + static nextId = 0; + + @HostBinding() id = `avg-calc-input-${WertungAvgCalcComponent.nextId++}`; + + _fixed: number = 3; + + get fixed(): number { + return this._fixed; + } + + @Input() + set fixed(value: number) { + this._fixed = value; + this.calcAvg(); + this.markAsTouched(); + } @Input() hidden: boolean; @@ -22,50 +47,103 @@ export class WertungAvgCalcComponent implements OnInit { @Input() valueDescription: string; - @Input() - singleValue: number; - - @Output() - avgValue: EventEmitter = new EventEmitter(); + avgValue: number; singleValues: {value:number}[] = []; - ngOnInit() { - this.singleValues = [{value: this.singleValue}]; - } - get title(): string { return this.valueTitle; } get singleValueContainer() { - return this.singleValues[0]; + return this.singleValues[0]?.value || this.avgValue; + } + + set singleValueContainer(value: number) { + this.writeValue(value); + this.calcAvg(); + this.markAsTouched(); } add() { - this.singleValues = [...this.singleValues, {value: 0.000}]; + if (!this.disabled) { + this.singleValues = [...this.singleValues, {value: 0.000}]; + this.markAsTouched(); + } } remove(index) { - if (index > -1) { + if (!this.disabled && index > -1) { this.singleValues.splice(index, 1); + this.calcAvg(); + this.markAsTouched(); } } - onChange(event, item) { - item.value = event.target.value; - } - onBlur(event, item) { - item.value = Number(event.target.value).toFixed(3); - } - calcAvg(): number { const avg1 = this.singleValues .filter(item => !!item.value) .map(item => Number(item.value)) .filter(item => item > 0) - const avg2 = Number((avg1.reduce((sum, current) => sum + current, 0) / avg1.length).toFixed(3)); - this.avgValue.emit(avg2); + const avg2 = Number((avg1.reduce((sum, current) => sum + current, 0) / avg1.length).toFixed(this.fixed)); + if (!this.disabled && this.avgValue !== avg2) { + this.avgValue = avg2; + this.onChange(avg2); + console.log('value updated: ' + avg2); + } return avg2; } + + onTouched = () => {}; + + onChange = (avgValue: number) => {}; + + onItemChange(event, item) { + item.value = event.target.value; + this.calcAvg(); + this.markAsTouched(); + } + + onBlur(event, item) { + item.value = Number(event.target.value).toFixed(this.fixed); + this.calcAvg(); + this.markAsTouched(); + } + + touched = false; + + disabled = false; + + writeValue(avgValue: number) { + console.log('writValue ' + avgValue); + this.avgValue = avgValue; + this.singleValues = [{value: avgValue}]; + } + + registerOnChange(onChange: any) { + this.onChange = onChange; + } + + registerOnTouched(onTouched: any) { + this.onTouched = onTouched; + } + + markAsTouched() { + if (!this.touched) { + this.onTouched(); + this.touched = true; + } + } + + setDisabledState(disabled: boolean) { + this.disabled = disabled; + } + + @ViewChild('noteInput') public noteInput: { setFocus: () => void; }; + + focused = false; + + setFocus() { + this.noteInput.setFocus(); + } } diff --git a/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.page.html b/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.page.html index a3ec40182..006df7079 100644 --- a/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.page.html +++ b/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.page.html @@ -12,9 +12,9 @@ - + - + Endnote diff --git a/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.page.ts b/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.page.ts index 2e8c24808..e7671a821 100644 --- a/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.page.ts +++ b/newclient/resultcatcher/src/app/wertung-editor/wertung-editor.page.ts @@ -6,6 +6,7 @@ import { BackendService } from '../services/backend.service'; import { NgForm } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { Keyboard } from '@capacitor/keyboard'; +import { Capacitor, Plugins } from '@capacitor/core'; @Component({ selector: 'app-wertung-editor', @@ -83,9 +84,12 @@ export class WertungEditorPage { // We need to use a timeout in order to set the focus on load setTimeout(() => { - if (Keyboard.show) { - Keyboard.show(); // Needed for android. Call in a platform ready function - console.log('keyboard called'); + let Keyboard; + if (Capacitor.getPlatform() !== "web") { + if (Keyboard.show) { + Keyboard.show(); // Needed for android. Call in a platform ready function + console.log('keyboard called'); + } } if (this.isDNoteUsed && this.dnote) { this.dnote.setFocus(); @@ -132,7 +136,7 @@ export class WertungEditorPage { this.navCtrl.pop(); }, error: (err) => { - this.updateUI(this.itemOriginal); + this.waiting = false; console.log(err); }}); } @@ -145,7 +149,7 @@ export class WertungEditorPage { this.updateUI(wc); }, error: (err) => { - this.updateUI(this.itemOriginal); + this.waiting = false; console.log(err); }}); } @@ -178,7 +182,7 @@ export class WertungEditorPage { this.updateUI(this.backendService.wertungen[nextItemIndex]); }, error: (err) => { - this.updateUI(this.itemOriginal); + this.waiting = false; console.log(err); }}); } From dc4d9624f5e3ad5d4f5dc4c02277adb9b84b3c39 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sun, 28 May 2023 15:38:09 +0000 Subject: [PATCH 94/99] update with generated Client from Github Actions CI for build with [skip ci] --- .../resources/app/2539.044258b00f51d3ab.js | 1 - .../resources/app/3195.2459a55b1d9db929.js | 1 + src/main/resources/app/3rdpartylicenses.txt | 27 ------------------- src/main/resources/app/index.html | 2 +- .../resources/app/main.170bd5e529b54339.js | 1 - .../resources/app/main.34bd895345441af0.js | 1 + .../resources/app/runtime.bf11d3681906b638.js | 1 - .../resources/app/runtime.ffe888036bd0294d.js | 1 + 8 files changed, 4 insertions(+), 31 deletions(-) delete mode 100644 src/main/resources/app/2539.044258b00f51d3ab.js create mode 100644 src/main/resources/app/3195.2459a55b1d9db929.js delete mode 100644 src/main/resources/app/main.170bd5e529b54339.js create mode 100644 src/main/resources/app/main.34bd895345441af0.js delete mode 100644 src/main/resources/app/runtime.bf11d3681906b638.js create mode 100644 src/main/resources/app/runtime.ffe888036bd0294d.js diff --git a/src/main/resources/app/2539.044258b00f51d3ab.js b/src/main/resources/app/2539.044258b00f51d3ab.js deleted file mode 100644 index baf48e4a1..000000000 --- a/src/main/resources/app/2539.044258b00f51d3ab.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[2539],{58:(J,p,u)=>{u.r(p),u.d(p,{WertungEditorPageModule:()=>E});var d=u(6895),g=u(433),h=u(5472),r=u(502),m=u(5861);const _=(0,u(7423).fo)("Keyboard");var e=u(8274),v=u(600);function f(o,l){if(1&o&&(e.TgZ(0,"ion-label"),e._uU(1),e.qZA()),2&o){const t=e.oxw();e.xp6(1),e.Oqu(t.title)}}function w(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-input",5,6),e.NdJ("ngModelChange",function(i){e.CHM(t);const s=e.oxw();return e.KtG(s.singleValueContainer.value=i)}),e.qZA()}if(2&o){const t=e.oxw();e.MGl("name","",t.valueTitle,"0"),e.Q6J("disabled",t.waiting)("ngModel",t.singleValueContainer.value)}}function C(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-button",7),e.NdJ("click",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.add())}),e._UZ(1,"ion-icon",8),e.qZA()}}function x(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-row")(1,"ion-col",13),e._uU(2),e.qZA(),e.TgZ(3,"ion-col",14),e._UZ(4,"div",15),e.TgZ(5,"ion-input",16),e.NdJ("ionChange",function(i){const a=e.CHM(t).$implicit,c=e.oxw(2);return e.KtG(c.onChange(i,a))})("ionBlur",function(i){const a=e.CHM(t).$implicit,c=e.oxw(2);return e.KtG(c.onBlur(i,a))}),e.qZA()(),e.TgZ(6,"ion-col",17)(7,"ion-button",18),e.NdJ("click",function(){const s=e.CHM(t).index,a=e.oxw(2);return e.KtG(a.remove(s))}),e._UZ(8,"ion-icon",19),e.qZA()()()}if(2&o){const t=l.$implicit,n=l.index,i=e.oxw(2);e.xp6(2),e.hij("",n+1,". Wertung"),e.xp6(3),e.hYB("name","",i.valueTitle,"",n,""),e.Q6J("disabled",i.waiting)("ngModel",t.value)}}function M(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-grid",9)(1,"ion-row",10)(2,"ion-col"),e._uU(3),e.qZA()(),e.YNc(4,x,9,5,"ion-row",11),e.TgZ(5,"ion-row",10)(6,"ion-col")(7,"ion-button",12),e.NdJ("click",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.add())}),e._UZ(8,"ion-icon",8),e.qZA()()()()}if(2&o){const t=e.oxw();e.xp6(3),e.AsE("",t.title," - \xf8 ",t.calcAvg(),""),e.xp6(1),e.Q6J("ngForOf",t.singleValues)}}let k=(()=>{class o{constructor(){this.avgValue=new e.vpe,this.singleValues=[]}ngOnInit(){this.singleValues=[{value:this.singleValue}]}get title(){return this.valueTitle}get singleValueContainer(){return this.singleValues[0]}add(){this.singleValues=[...this.singleValues,{value:0}]}remove(t){t>-1&&this.singleValues.splice(t,1)}onChange(t,n){n.value=t.target.value}onBlur(t,n){n.value=Number(t.target.value).toFixed(3)}calcAvg(){const t=this.singleValues.filter(i=>!!i.value).map(i=>Number(i.value)).filter(i=>i>0),n=Number((t.reduce((i,s)=>i+s,0)/t.length).toFixed(3));return this.avgValue.emit(n),n}}return o.\u0275fac=function(t){return new(t||o)},o.\u0275cmp=e.Xpm({type:o,selectors:[["app-wertung-avg-calc"]],inputs:{hidden:"hidden",readonly:"readonly",waiting:"waiting",valueTitle:"valueTitle",valueDescription:"valueDescription",singleValue:"singleValue"},outputs:{avgValue:"avgValue"},decls:5,vars:5,consts:[[3,"hidden"],[4,"ngIf"],["autofocus","","placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","step","0.050","min","0.000","max","100.000","required","",3,"disabled","ngModel","name","ngModelChange",4,"ngIf"],["slot","end","expand","block","color","secondary",3,"click",4,"ngIf"],["class","table","no-padding","",4,"ngIf"],["autofocus","","placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","step","0.050","min","0.000","max","100.000","required","",3,"disabled","ngModel","name","ngModelChange"],["enote",""],["slot","end","expand","block","color","secondary",3,"click"],["name","add-circle-outline"],["no-padding","",1,"table"],[1,"table-header"],[4,"ngFor","ngForOf"],["expand","block","color","secondary",3,"click"],[1,"number"],["id","input-group","no-padding",""],["id","validity"],["placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","step","0.050","min","0.000","max","100.000","required","",3,"name","disabled","ngModel","ionChange","ionBlur"],[1,"table-subject"],["color","danger",3,"click"],["name","trash-outline"]],template:function(t,n){1&t&&(e.TgZ(0,"ion-item",0),e.YNc(1,f,2,1,"ion-label",1),e.YNc(2,w,2,3,"ion-input",2),e.YNc(3,C,2,0,"ion-button",3),e.YNc(4,M,9,3,"ion-grid",4),e.qZA()),2&t&&(e.Q6J("hidden",n.hidden),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length>1))},dependencies:[d.sg,d.O5,g.JJ,g.Q7,g.On,r.YG,r.wI,r.jY,r.gu,r.pK,r.Ie,r.Q$,r.Nd,r.as],styles:[".table[_ngcontent-%COMP%]{background-color:var(--ion-background-color);height:100%;overflow:hidden;overflow-y:auto}.table[_ngcontent-%COMP%] .table-header[_ngcontent-%COMP%], .table[_ngcontent-%COMP%] .table-subject[_ngcontent-%COMP%]{color:var(--ion-color-primary);font-weight:700}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;flex-wrap:nowrap}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.table-subject[_ngcontent-%COMP%]{flex:0 0 1.5em}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.number[_ngcontent-%COMP%]{flex:0 0 6em;letter-spacing:.5px}@media all and (min-height: 720px){.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%]{margin:10px}}#input-group[_ngcontent-%COMP%]{height:70%;overflow:hidden}#input-group[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{width:0;height:0;position:absolute;top:0%;right:0%;border-left:15px solid transparent;border-top:15px solid transparent}#input-group[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{height:100%;width:100%;outline:none;text-align:right;border:1px solid #a9a9a9}#input-group.valid[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{border-left:15px solid transparent;border-top:15px solid var(--ion-color-success)}#input-group.valid[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{border:1px solid var(--ion-color-success)}#input-group.invalid[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{border-left:15px solid transparent;border-top:15px solid var(--ion-color-danger)}#input-group.invalid[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{border:1px solid var(--ion-color-danger)}"]}),o})();const O=["wertungsform"],I=["enote"],Z=["dnote"];function T(o,l){1&o&&(e.TgZ(0,"ion-item"),e._uU(1," Ung\xfcltige Eingabe. Die Werte m\xfcssen im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt) eingegeben werden. "),e.qZA())}function P(o,l){if(1&o&&(e.TgZ(0,"ion-button",13,14),e._UZ(2,"ion-icon",15),e._uU(3,"Speichern & Weiter"),e.qZA()),2&o){const t=e.oxw(),n=e.MAs(13);e.Q6J("disabled",t.waiting||!n.valid)}}function A(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-button",16),e.NdJ("click",function(){e.CHM(t);const i=e.oxw(),s=e.MAs(13);return e.KtG(i.saveClose(s))}),e._UZ(1,"ion-icon",17),e._uU(2,"Speichern"),e.qZA()}if(2&o){const t=e.oxw(),n=e.MAs(13);e.Q6J("disabled",t.waiting||!n.valid)}}let y=(()=>{class o{constructor(t,n,i,s,a,c,U){this.navCtrl=t,this.route=n,this.alertCtrl=i,this.toastController=s,this.backendService=a,this.platform=c,this.zone=U,this.waiting=!1,this.isDNoteUsed=!0,this.durchgang=a.durchgang,this.step=a.step,this.geraetId=a.geraet;const V=parseInt(this.route.snapshot.paramMap.get("itemId"));this.updateUI(a.wertungen.find(F=>F.id===V)),this.isDNoteUsed=this.item.isDNoteUsed}ionViewWillLeave(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}ionViewWillEnter(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0),this.subscription=this.backendService.wertungUpdated.subscribe(t=>{console.log("incoming wertung from service",t),t.wertung.athletId===this.wertung.athletId&&t.wertung.wettkampfdisziplinId===this.wertung.wettkampfdisziplinId&&t.wertung.endnote!==this.wertung.endnote&&(console.log("updateing wertung from service"),this.item.wertung=Object.assign({},t.wertung),this.itemOriginal.wertung=Object.assign({},t.wertung),this.wertung=Object.assign({noteD:0,noteE:0,endnote:0},this.item.wertung))}),this.platform.ready().then(()=>{setTimeout(()=>{_.show&&(_.show(),console.log("keyboard called")),this.isDNoteUsed&&this.dnote?(this.dnote.setFocus(),console.log("dnote focused")):this.enote&&(this.enote.setFocus(),console.log("enote focused"))},400)})}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.item=Object.assign({},t),this.itemOriginal=Object.assign({},t),this.wertung=Object.assign({noteD:0,noteE:0,endnote:0},this.itemOriginal.wertung),this.ionViewWillEnter()})}ensureInitialValues(t){return Object.assign(this.wertung,t)}saveClose(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.updateUI(n),this.navCtrl.pop()},error:n=>{this.updateUI(this.itemOriginal),console.log(n)}}))}save(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.updateUI(n)},error:n=>{this.updateUI(this.itemOriginal),console.log(n)}}))}saveNext(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.waiting=!1;const i=this.backendService.wertungen.findIndex(a=>a.wertung.id===n.wertung.id);i<0&&console.log("unexpected wertung - id matches not with current wertung: "+n.wertung.id);let s=i+1;if(i<0)s=0;else if(i>=this.backendService.wertungen.length-1){if(0===this.backendService.wertungen.filter(a=>void 0===a.wertung.endnote).length)return this.navCtrl.pop(),void this.toastSuggestCompletnessCheck();s=this.backendService.wertungen.findIndex(a=>void 0===a.wertung.endnote),this.toastMissingResult(t,this.backendService.wertungen[s].vorname+" "+this.backendService.wertungen[s].name)}t.resetForm(),this.updateUI(this.backendService.wertungen[s])},error:n=>{this.updateUI(this.itemOriginal),console.log(n)}}))}nextEmptyOrFinish(t){const n=this.backendService.wertungen.findIndex(i=>i.wertung.id===this.wertung.id);if(0===this.backendService.wertungen.filter((i,s)=>s>n&&void 0===i.wertung.endnote).length)return this.navCtrl.pop(),void this.toastSuggestCompletnessCheck();{const i=this.backendService.wertungen.findIndex((s,a)=>a>n&&void 0===s.wertung.endnote);this.toastMissingResult(t,this.backendService.wertungen[i].vorname+" "+this.backendService.wertungen[i].name),t.resetForm(),this.updateUI(this.backendService.wertungen[i])}}geraetName(){return this.backendService.geraete?this.backendService.geraete.find(t=>t.id===this.geraetId).name:""}toastSuggestCompletnessCheck(){var t=this;return(0,m.Z)(function*(){(yield t.toastController.create({header:"Qualit\xe4tskontrolle",message:"Es sind jetzt alle Resultate erfasst. Bitte ZU ZWEIT die Resultate pr\xfcfen und abschliessen!",animated:!0,position:"middle",buttons:[{text:"OK, gelesen.",icon:"checkmark-circle",role:"cancel",handler:()=>{console.log("OK, gelesen. clicked")}}]})).present()})()}toastMissingResult(t,n){var i=this;return(0,m.Z)(function*(){(yield i.alertCtrl.create({header:"Achtung",subHeader:"Fehlendes Resultat!",message:"Nach der Erfassung der letzten Wertung in dieser Riege scheint es noch leere Wertungen zu geben. Bitte pr\xfcfen, ob "+n.toUpperCase()+" geturnt hat.",buttons:[{text:"Nicht geturnt",role:"edit",handler:()=>{i.nextEmptyOrFinish(t)}},{text:"Korrigieren",role:"cancel",handler:()=>{console.log("Korrigieren clicked")}}]})).present()})()}}return o.\u0275fac=function(t){return new(t||o)(e.Y36(r.SH),e.Y36(h.gz),e.Y36(r.Br),e.Y36(r.yF),e.Y36(v.v),e.Y36(r.t4),e.Y36(e.R0b))},o.\u0275cmp=e.Xpm({type:o,selectors:[["app-wertung-editor"]],viewQuery:function(t,n){if(1&t&&(e.Gf(O,5),e.Gf(I,5),e.Gf(Z,5)),2&t){let i;e.iGM(i=e.CRH())&&(n.form=i.first),e.iGM(i=e.CRH())&&(n.enote=i.first),e.iGM(i=e.CRH())&&(n.dnote=i.first)}},decls:26,vars:15,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[1,"riege"],[3,"ngSubmit","keyup.enter"],["wertungsform","ngForm"],[3,"hidden","waiting","valueTitle","singleValue","avgValue"],["type","number","readonly","","name","endnote",3,"ngModel"],["endnote",""],[4,"ngIf"],["size","large","expand","block","type","submit","color","success",3,"disabled",4,"ngIf"],["size","large","expand","block","color","secondary",3,"disabled","click",4,"ngIf"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name","arrow-forward-circle-outline"],["size","large","expand","block","color","secondary",3,"disabled","click"],["slot","start","name","checkmark-circle"]],template:function(t,n){if(1&t){const i=e.EpF();e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA(),e.TgZ(9,"div",4),e._uU(10),e.qZA()()()(),e.TgZ(11,"ion-content")(12,"form",5,6),e.NdJ("ngSubmit",function(){e.CHM(i);const a=e.MAs(13);return e.KtG(n.saveNext(a))})("keyup.enter",function(){e.CHM(i);const a=e.MAs(13);return e.KtG(n.saveNext(a))}),e.TgZ(14,"ion-list")(15,"app-wertung-avg-calc",7),e.NdJ("avgValue",function(){return n.wertung.noteD}),e.qZA(),e.TgZ(16,"app-wertung-avg-calc",7),e.NdJ("avgValue",function(){return n.wertung.noteE}),e.qZA(),e.TgZ(17,"ion-item")(18,"ion-label"),e._uU(19,"Endnote"),e.qZA(),e._UZ(20,"ion-input",8,9),e.qZA()(),e.TgZ(22,"ion-list"),e.YNc(23,T,2,0,"ion-item",10),e.YNc(24,P,4,1,"ion-button",11),e.YNc(25,A,3,1,"ion-button",12),e.qZA()()()}if(2&t){const i=e.MAs(13);e.xp6(5),e.Oqu(n.geraetName()),e.xp6(3),e.Oqu(n.item.vorname+" "+n.item.name),e.xp6(2),e.Oqu(n.wertung.riege),e.xp6(5),e.Q6J("hidden",!n.isDNoteUsed)("waiting",n.waiting)("valueTitle","D-Note")("singleValue",n.wertung.noteD),e.xp6(1),e.Q6J("hidden",!1)("waiting",n.waiting)("valueTitle","E-Note")("singleValue",n.wertung.noteE),e.xp6(4),e.Q6J("ngModel",n.wertung.endnote),e.xp6(3),e.Q6J("ngIf",!i.valid),e.xp6(1),e.Q6J("ngIf",n.editable()),e.xp6(1),e.Q6J("ngIf",n.editable())}},dependencies:[d.O5,g._Y,g.JJ,g.JL,g.On,g.F,r.oU,r.YG,r.Sm,r.W2,r.Gu,r.gu,r.pK,r.Ie,r.Q$,r.q_,r.uN,r.wd,r.sr,r.as,r.cs,k],styles:[".riege[_ngcontent-%COMP%]{font-size:small;padding-right:16px;color:var(--ion-color-medium)}.athlet[_ngcontent-%COMP%]{font-size:larger;padding-right:16px;font-weight:bolder;color:var(--ion-color-primary)}"]}),o})();var W=u(5051);const N=[{path:"",component:y}];let E=(()=>{class o{}return o.\u0275fac=function(t){return new(t||o)},o.\u0275mod=e.oAB({type:o}),o.\u0275inj=e.cJS({imports:[d.ez,g.u5,r.Pc,h.Bz.forChild(N),W.K]}),o})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/3195.2459a55b1d9db929.js b/src/main/resources/app/3195.2459a55b1d9db929.js new file mode 100644 index 000000000..d77cc0f8f --- /dev/null +++ b/src/main/resources/app/3195.2459a55b1d9db929.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[3195],{3195:(q,d,g)=>{g.r(d),g.d(d,{WertungEditorPageModule:()=>F});var c=g(6895),u=g(433),h=g(5472),a=g(502),p=g(5861),_=g(7423),e=g(8274),m=g(600);const f=["noteInput"];function b(o,l){if(1&o&&(e.TgZ(0,"ion-label"),e._uU(1),e.qZA()),2&o){const t=e.oxw();e.xp6(1),e.Oqu(t.title)}}function v(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-input",5,6),e.NdJ("ngModelChange",function(i){e.CHM(t);const r=e.oxw();return e.KtG(r.singleValueContainer=i)}),e.qZA()}if(2&o){const t=e.oxw();e.Q6J("disabled",t.waiting||t.disabled)("ngModel",t.singleValueContainer)}}function C(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-button",7),e.NdJ("click",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.add())}),e._UZ(1,"ion-icon",8),e.qZA()}}function w(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-input",22,6),e.NdJ("ionChange",function(i){e.CHM(t);const r=e.oxw().$implicit,s=e.oxw(2);return e.KtG(s.onItemChange(i,r))})("ionBlur",function(i){e.CHM(t);const r=e.oxw().$implicit,s=e.oxw(2);return e.KtG(s.onBlur(i,r))}),e.qZA()}if(2&o){const t=e.oxw(),n=t.index,i=t.$implicit,r=e.oxw(2);e.hYB("name","",r.valueTitle,"",n,""),e.Q6J("disabled",r.waiting||r.disabled)("ngModel",i.value)}}function x(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-input",22),e.NdJ("ionChange",function(i){e.CHM(t);const r=e.oxw().$implicit,s=e.oxw(2);return e.KtG(s.onItemChange(i,r))})("ionBlur",function(i){e.CHM(t);const r=e.oxw().$implicit,s=e.oxw(2);return e.KtG(s.onBlur(i,r))}),e.qZA()}if(2&o){const t=e.oxw(),n=t.index,i=t.$implicit,r=e.oxw(2);e.hYB("name","",r.valueTitle,"",n,""),e.Q6J("disabled",r.waiting||r.disabled)("ngModel",i.value)}}function M(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-row")(1,"ion-col",15),e._uU(2),e.qZA(),e.TgZ(3,"ion-col",16),e._UZ(4,"div",17),e.YNc(5,w,2,4,"ion-input",18),e.YNc(6,x,1,4,"ion-input",18),e.qZA(),e.TgZ(7,"ion-col",19)(8,"ion-button",20),e.NdJ("click",function(){const r=e.CHM(t).index,s=e.oxw(2);return e.KtG(s.remove(r))}),e._UZ(9,"ion-icon",21),e.qZA()()()}if(2&o){const t=l.index;e.xp6(2),e.hij("",t+1,". Wertung"),e.xp6(3),e.Q6J("ngIf",0===t),e.xp6(1),e.Q6J("ngIf",t>0)}}function T(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-row",10)(1,"ion-col")(2,"ion-button",23),e.NdJ("click",function(){e.CHM(t);const i=e.oxw(2);return e.KtG(i.add())}),e._UZ(3,"ion-icon",8),e.qZA()()()}}function k(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-grid",9)(1,"ion-row")(2,"ion-col",10),e._uU(3),e.qZA(),e.TgZ(4,"ion-col",11)(5,"div"),e._uU(6,"Kommastellen"),e.qZA(),e.TgZ(7,"ion-input",12),e.NdJ("ngModelChange",function(i){e.CHM(t);const r=e.oxw();return e.KtG(r.fixed=i)}),e.qZA()()(),e.YNc(8,M,10,3,"ion-row",13),e.YNc(9,T,4,0,"ion-row",14),e.qZA()}if(2&o){const t=e.oxw();e.xp6(3),e.AsE("",t.title," - \xf8 ",t.avgValue,""),e.xp6(4),e.Q6J("ngModel",t.fixed)("disabled",t.waiting||t.disabled),e.xp6(1),e.Q6J("ngForOf",t.singleValues),e.xp6(1),e.Q6J("ngIf",!t.disabled)}}let A=(()=>{class o{constructor(){this.id="avg-calc-input-"+o.nextId++,this._fixed=3,this.singleValues=[],this.onTouched=()=>{},this.onChange=t=>{},this.touched=!1,this.disabled=!1,this.focused=!1}get fixed(){return this._fixed}set fixed(t){this._fixed=t,this.calcAvg(),this.markAsTouched()}get title(){return this.valueTitle}get singleValueContainer(){return this.singleValues[0]?.value||this.avgValue}set singleValueContainer(t){this.writeValue(t),this.calcAvg(),this.markAsTouched()}add(){this.disabled||(this.singleValues=[...this.singleValues,{value:0}],this.markAsTouched())}remove(t){!this.disabled&&t>-1&&(this.singleValues.splice(t,1),this.calcAvg(),this.markAsTouched())}calcAvg(){const t=this.singleValues.filter(i=>!!i.value).map(i=>Number(i.value)).filter(i=>i>0),n=Number((t.reduce((i,r)=>i+r,0)/t.length).toFixed(this.fixed));return!this.disabled&&this.avgValue!==n&&(this.avgValue=n,this.onChange(n),console.log("value updated: "+n)),n}onItemChange(t,n){n.value=t.target.value,this.calcAvg(),this.markAsTouched()}onBlur(t,n){n.value=Number(t.target.value).toFixed(this.fixed),this.calcAvg(),this.markAsTouched()}writeValue(t){console.log("writValue "+t),this.avgValue=t,this.singleValues=[{value:t}]}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}markAsTouched(){this.touched||(this.onTouched(),this.touched=!0)}setDisabledState(t){this.disabled=t}setFocus(){this.noteInput.setFocus()}}return o.nextId=0,o.\u0275fac=function(t){return new(t||o)},o.\u0275cmp=e.Xpm({type:o,selectors:[["app-wertung-avg-calc"]],viewQuery:function(t,n){if(1&t&&e.Gf(f,5),2&t){let i;e.iGM(i=e.CRH())&&(n.noteInput=i.first)}},hostVars:1,hostBindings:function(t,n){2&t&&e.Ikx("id",n.id)},inputs:{fixed:"fixed",hidden:"hidden",readonly:"readonly",waiting:"waiting",valueTitle:"valueTitle",valueDescription:"valueDescription"},features:[e._Bn([{provide:u.JU,multi:!0,useExisting:o}])],decls:5,vars:5,consts:[[3,"hidden"],[4,"ngIf"],["autofocus","","placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","name","noteInput","step","0.05","min","0.00","max","100.00","required","",3,"disabled","ngModel","ngModelChange",4,"ngIf"],["slot","end","expand","block","color","secondary",3,"click",4,"ngIf"],["class","table","no-padding","",4,"ngIf"],["autofocus","","placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","name","noteInput","step","0.05","min","0.00","max","100.00","required","",3,"disabled","ngModel","ngModelChange"],["noteInput",""],["slot","end","expand","block","color","secondary",3,"click"],["name","add-circle-outline"],["no-padding","",1,"table"],[1,"table-header"],["no-padding","",1,"decimals"],["type","number","name","decimals","step","1","min","0","max","3","required","",3,"ngModel","disabled","ngModelChange"],[4,"ngFor","ngForOf"],["class","table-header",4,"ngIf"],[1,"number"],["id","input-group","no-padding",""],["id","validity"],["placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","step","0.05","min","0.00","max","100.00","required","",3,"name","disabled","ngModel","ionChange","ionBlur",4,"ngIf"],[1,"table-action"],["color","danger",3,"click"],["name","trash-outline"],["placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","step","0.05","min","0.00","max","100.00","required","",3,"name","disabled","ngModel","ionChange","ionBlur"],["expand","block","color","secondary",3,"click"]],template:function(t,n){1&t&&(e.TgZ(0,"ion-item",0),e.YNc(1,b,2,1,"ion-label",1),e.YNc(2,v,2,2,"ion-input",2),e.YNc(3,C,2,0,"ion-button",3),e.YNc(4,k,10,6,"ion-grid",4),e.qZA()),2&t&&(e.Q6J("hidden",n.hidden),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length>1))},dependencies:[c.sg,c.O5,u.JJ,u.Q7,u.On,a.YG,a.wI,a.jY,a.gu,a.pK,a.Ie,a.Q$,a.Nd,a.as],styles:[".table[_ngcontent-%COMP%]{background-color:var(--ion-background-color);height:100%;overflow:hidden;overflow-y:auto}.table[_ngcontent-%COMP%] .table-header[_ngcontent-%COMP%], .table[_ngcontent-%COMP%] .table-subject[_ngcontent-%COMP%]{color:var(--ion-color-primary);font-weight:700}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;flex-wrap:nowrap}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.decimals[_ngcontent-%COMP%]{flex:0 0 6em}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.table-action[_ngcontent-%COMP%]{flex:0 0 1.5em}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.number[_ngcontent-%COMP%]{flex:0 0 6em;letter-spacing:.5px}@media all and (min-height: 720px){.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%]{margin:10px}}#decimals-group[_ngcontent-%COMP%]{height:70%;overflow:hidden}#decimals-group[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{height:100%;width:100%;outline:none;text-align:right;border:1px solid #a9a9a9}#input-group[_ngcontent-%COMP%]{height:70%;overflow:hidden}#input-group[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{width:0;height:0;position:absolute;top:0%;right:0%;border-left:15px solid transparent;border-top:15px solid transparent}#input-group[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{height:100%;width:100%;outline:none;text-align:right;border:1px solid #a9a9a9}#input-group.valid[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{border-left:15px solid transparent;border-top:15px solid var(--ion-color-success)}#input-group.valid[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{border:1px solid var(--ion-color-success)}#input-group.invalid[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{border-left:15px solid transparent;border-top:15px solid var(--ion-color-danger)}#input-group.invalid[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{border:1px solid var(--ion-color-danger)}"]}),o})();const I=["wertungsform"],Z=["enote"],O=["dnote"];function P(o,l){1&o&&(e.TgZ(0,"ion-item"),e._uU(1," Ung\xfcltige Eingabe. Die Werte m\xfcssen im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt) eingegeben werden. "),e.qZA())}function W(o,l){if(1&o&&(e.TgZ(0,"ion-button",16,17),e._UZ(2,"ion-icon",18),e._uU(3,"Speichern & Weiter"),e.qZA()),2&o){const t=e.oxw(),n=e.MAs(13);e.Q6J("disabled",t.waiting||!n.valid)}}function N(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-button",19),e.NdJ("click",function(){e.CHM(t);const i=e.oxw(),r=e.MAs(13);return e.KtG(i.saveClose(r))}),e._UZ(1,"ion-icon",20),e._uU(2,"Speichern"),e.qZA()}if(2&o){const t=e.oxw(),n=e.MAs(13);e.Q6J("disabled",t.waiting||!n.valid)}}let y=(()=>{class o{constructor(t,n,i,r,s,U,V){this.navCtrl=t,this.route=n,this.alertCtrl=i,this.toastController=r,this.backendService=s,this.platform=U,this.zone=V,this.waiting=!1,this.isDNoteUsed=!0,this.durchgang=s.durchgang,this.step=s.step,this.geraetId=s.geraet;const S=parseInt(this.route.snapshot.paramMap.get("itemId"));this.updateUI(s.wertungen.find(Q=>Q.id===S)),this.isDNoteUsed=this.item.isDNoteUsed}ionViewWillLeave(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}ionViewWillEnter(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0),this.subscription=this.backendService.wertungUpdated.subscribe(t=>{console.log("incoming wertung from service",t),t.wertung.athletId===this.wertung.athletId&&t.wertung.wettkampfdisziplinId===this.wertung.wettkampfdisziplinId&&t.wertung.endnote!==this.wertung.endnote&&(console.log("updateing wertung from service"),this.item.wertung=Object.assign({},t.wertung),this.itemOriginal.wertung=Object.assign({},t.wertung),this.wertung=Object.assign({noteD:0,noteE:0,endnote:0},this.item.wertung))}),this.platform.ready().then(()=>{setTimeout(()=>{let t;"web"!==_.dV.getPlatform()&&t.show&&(t.show(),console.log("keyboard called")),this.isDNoteUsed&&this.dnote?(this.dnote.setFocus(),console.log("dnote focused")):this.enote&&(this.enote.setFocus(),console.log("enote focused"))},400)})}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.item=Object.assign({},t),this.itemOriginal=Object.assign({},t),this.wertung=Object.assign({noteD:0,noteE:0,endnote:0},this.itemOriginal.wertung),this.ionViewWillEnter()})}ensureInitialValues(t){return Object.assign(this.wertung,t)}saveClose(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.updateUI(n),this.navCtrl.pop()},error:n=>{this.waiting=!1,console.log(n)}}))}save(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.updateUI(n)},error:n=>{this.waiting=!1,console.log(n)}}))}saveNext(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.waiting=!1;const i=this.backendService.wertungen.findIndex(s=>s.wertung.id===n.wertung.id);i<0&&console.log("unexpected wertung - id matches not with current wertung: "+n.wertung.id);let r=i+1;if(i<0)r=0;else if(i>=this.backendService.wertungen.length-1){if(0===this.backendService.wertungen.filter(s=>void 0===s.wertung.endnote).length)return this.navCtrl.pop(),void this.toastSuggestCompletnessCheck();r=this.backendService.wertungen.findIndex(s=>void 0===s.wertung.endnote),this.toastMissingResult(t,this.backendService.wertungen[r].vorname+" "+this.backendService.wertungen[r].name)}t.resetForm(),this.updateUI(this.backendService.wertungen[r])},error:n=>{this.waiting=!1,console.log(n)}}))}nextEmptyOrFinish(t){const n=this.backendService.wertungen.findIndex(i=>i.wertung.id===this.wertung.id);if(0===this.backendService.wertungen.filter((i,r)=>r>n&&void 0===i.wertung.endnote).length)return this.navCtrl.pop(),void this.toastSuggestCompletnessCheck();{const i=this.backendService.wertungen.findIndex((r,s)=>s>n&&void 0===r.wertung.endnote);this.toastMissingResult(t,this.backendService.wertungen[i].vorname+" "+this.backendService.wertungen[i].name),t.resetForm(),this.updateUI(this.backendService.wertungen[i])}}geraetName(){return this.backendService.geraete?this.backendService.geraete.find(t=>t.id===this.geraetId).name:""}toastSuggestCompletnessCheck(){var t=this;return(0,p.Z)(function*(){(yield t.toastController.create({header:"Qualit\xe4tskontrolle",message:"Es sind jetzt alle Resultate erfasst. Bitte ZU ZWEIT die Resultate pr\xfcfen und abschliessen!",animated:!0,position:"middle",buttons:[{text:"OK, gelesen.",icon:"checkmark-circle",role:"cancel",handler:()=>{console.log("OK, gelesen. clicked")}}]})).present()})()}toastMissingResult(t,n){var i=this;return(0,p.Z)(function*(){(yield i.alertCtrl.create({header:"Achtung",subHeader:"Fehlendes Resultat!",message:"Nach der Erfassung der letzten Wertung in dieser Riege scheint es noch leere Wertungen zu geben. Bitte pr\xfcfen, ob "+n.toUpperCase()+" geturnt hat.",buttons:[{text:"Nicht geturnt",role:"edit",handler:()=>{i.nextEmptyOrFinish(t)}},{text:"Korrigieren",role:"cancel",handler:()=>{console.log("Korrigieren clicked")}}]})).present()})()}}return o.\u0275fac=function(t){return new(t||o)(e.Y36(a.SH),e.Y36(h.gz),e.Y36(a.Br),e.Y36(a.yF),e.Y36(m.v),e.Y36(a.t4),e.Y36(e.R0b))},o.\u0275cmp=e.Xpm({type:o,selectors:[["app-wertung-editor"]],viewQuery:function(t,n){if(1&t&&(e.Gf(I,5),e.Gf(Z,5),e.Gf(O,5)),2&t){let i;e.iGM(i=e.CRH())&&(n.form=i.first),e.iGM(i=e.CRH())&&(n.enote=i.first),e.iGM(i=e.CRH())&&(n.dnote=i.first)}},decls:28,vars:15,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[1,"riege"],[3,"ngSubmit","keyup.enter"],["wertungsform","ngForm"],["name","noteD",3,"hidden","waiting","valueTitle","ngModel","ngModelChange"],["dnote",""],["name","noteE",3,"hidden","waiting","valueTitle","ngModel","ngModelChange"],["enote",""],["type","number","readonly","","name","endnote",3,"ngModel"],["endnote",""],[4,"ngIf"],["size","large","expand","block","type","submit","color","success",3,"disabled",4,"ngIf"],["size","large","expand","block","color","secondary",3,"disabled","click",4,"ngIf"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name","arrow-forward-circle-outline"],["size","large","expand","block","color","secondary",3,"disabled","click"],["slot","start","name","checkmark-circle"]],template:function(t,n){if(1&t){const i=e.EpF();e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA(),e.TgZ(9,"div",4),e._uU(10),e.qZA()()()(),e.TgZ(11,"ion-content")(12,"form",5,6),e.NdJ("ngSubmit",function(){e.CHM(i);const s=e.MAs(13);return e.KtG(n.saveNext(s))})("keyup.enter",function(){e.CHM(i);const s=e.MAs(13);return e.KtG(n.saveNext(s))}),e.TgZ(14,"ion-list")(15,"app-wertung-avg-calc",7,8),e.NdJ("ngModelChange",function(s){return n.wertung.noteD=s}),e.qZA(),e.TgZ(17,"app-wertung-avg-calc",9,10),e.NdJ("ngModelChange",function(s){return n.wertung.noteE=s}),e.qZA(),e.TgZ(19,"ion-item")(20,"ion-label"),e._uU(21,"Endnote"),e.qZA(),e._UZ(22,"ion-input",11,12),e.qZA()(),e.TgZ(24,"ion-list"),e.YNc(25,P,2,0,"ion-item",13),e.YNc(26,W,4,1,"ion-button",14),e.YNc(27,N,3,1,"ion-button",15),e.qZA()()()}if(2&t){const i=e.MAs(13);e.xp6(5),e.Oqu(n.geraetName()),e.xp6(3),e.Oqu(n.item.vorname+" "+n.item.name),e.xp6(2),e.Oqu(n.wertung.riege),e.xp6(5),e.Q6J("hidden",!n.isDNoteUsed)("waiting",n.waiting)("valueTitle","D-Note")("ngModel",n.wertung.noteD),e.xp6(2),e.Q6J("hidden",!1)("waiting",n.waiting)("valueTitle","E-Note")("ngModel",n.wertung.noteE),e.xp6(5),e.Q6J("ngModel",n.wertung.endnote),e.xp6(3),e.Q6J("ngIf",!i.valid),e.xp6(1),e.Q6J("ngIf",n.editable()),e.xp6(1),e.Q6J("ngIf",n.editable())}},dependencies:[c.O5,u._Y,u.JJ,u.JL,u.On,u.F,a.oU,a.YG,a.Sm,a.W2,a.Gu,a.gu,a.pK,a.Ie,a.Q$,a.q_,a.uN,a.wd,a.sr,a.as,a.cs,A],styles:[".riege[_ngcontent-%COMP%]{font-size:small;padding-right:16px;color:var(--ion-color-medium)}.athlet[_ngcontent-%COMP%]{font-size:larger;padding-right:16px;font-weight:bolder;color:var(--ion-color-primary)}"]}),o})();var E=g(5051);const J=[{path:"",component:y}];let F=(()=>{class o{}return o.\u0275fac=function(t){return new(t||o)},o.\u0275mod=e.oAB({type:o}),o.\u0275inj=e.cJS({imports:[c.ez,u.u5,a.Pc,h.Bz.forChild(J),E.K]}),o})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/3rdpartylicenses.txt b/src/main/resources/app/3rdpartylicenses.txt index 60c74ea33..c7a53965d 100644 --- a/src/main/resources/app/3rdpartylicenses.txt +++ b/src/main/resources/app/3rdpartylicenses.txt @@ -64,33 +64,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@capacitor/keyboard -MIT -Copyright 2020-present Ionic -https://ionic.io - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @capacitor/splash-screen MIT Copyright 2020-present Ionic diff --git a/src/main/resources/app/index.html b/src/main/resources/app/index.html index e0cddfe64..65033c647 100644 --- a/src/main/resources/app/index.html +++ b/src/main/resources/app/index.html @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/src/main/resources/app/main.170bd5e529b54339.js b/src/main/resources/app/main.170bd5e529b54339.js deleted file mode 100644 index 653cbb013..000000000 --- a/src/main/resources/app/main.170bd5e529b54339.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkapp=self.webpackChunkapp||[]).push([[179],{7423:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Uw:()=>P,fo:()=>B});var o=w(5861);typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"&&global;var U=(()=>{return(T=U||(U={})).Unimplemented="UNIMPLEMENTED",T.Unavailable="UNAVAILABLE",U;var T})();class _ extends Error{constructor(k,O,te){super(k),this.message=k,this.code=O,this.data=te}}const G=T=>{var k,O,te,ce,Ae;const De=T.CapacitorCustomPlatform||null,ue=T.Capacitor||{},de=ue.Plugins=ue.Plugins||{},ne=T.CapacitorPlatforms,Ce=(null===(k=ne?.currentPlatform)||void 0===k?void 0:k.getPlatform)||(()=>null!==De?De.name:(T=>{var k,O;return T?.androidBridge?"android":null!==(O=null===(k=T?.webkit)||void 0===k?void 0:k.messageHandlers)&&void 0!==O&&O.bridge?"ios":"web"})(T)),dt=(null===(O=ne?.currentPlatform)||void 0===O?void 0:O.isNativePlatform)||(()=>"web"!==Ce()),Ue=(null===(te=ne?.currentPlatform)||void 0===te?void 0:te.isPluginAvailable)||(Pt=>!(!Rt.get(Pt)?.platforms.has(Ce())&&!Ke(Pt))),Ke=(null===(ce=ne?.currentPlatform)||void 0===ce?void 0:ce.getPluginHeader)||(Pt=>{var Ut;return null===(Ut=ue.PluginHeaders)||void 0===Ut?void 0:Ut.find(it=>it.name===Pt)}),Rt=new Map,pn=(null===(Ae=ne?.currentPlatform)||void 0===Ae?void 0:Ae.registerPlugin)||((Pt,Ut={})=>{const it=Rt.get(Pt);if(it)return console.warn(`Capacitor plugin "${Pt}" already registered. Cannot register plugins twice.`),it.proxy;const Xt=Ce(),kt=Ke(Pt);let Vt;const rn=function(){var Et=(0,o.Z)(function*(){return!Vt&&Xt in Ut?Vt=Vt="function"==typeof Ut[Xt]?yield Ut[Xt]():Ut[Xt]:null!==De&&!Vt&&"web"in Ut&&(Vt=Vt="function"==typeof Ut.web?yield Ut.web():Ut.web),Vt});return function(){return Et.apply(this,arguments)}}(),en=Et=>{let ut;const Ct=(...qe)=>{const on=rn().then(gn=>{const Nt=((Et,ut)=>{var Ct,qe;if(!kt){if(Et)return null===(qe=Et[ut])||void 0===qe?void 0:qe.bind(Et);throw new _(`"${Pt}" plugin is not implemented on ${Xt}`,U.Unimplemented)}{const on=kt?.methods.find(gn=>ut===gn.name);if(on)return"promise"===on.rtype?gn=>ue.nativePromise(Pt,ut.toString(),gn):(gn,Nt)=>ue.nativeCallback(Pt,ut.toString(),gn,Nt);if(Et)return null===(Ct=Et[ut])||void 0===Ct?void 0:Ct.bind(Et)}})(gn,Et);if(Nt){const Hn=Nt(...qe);return ut=Hn?.remove,Hn}throw new _(`"${Pt}.${Et}()" is not implemented on ${Xt}`,U.Unimplemented)});return"addListener"===Et&&(on.remove=(0,o.Z)(function*(){return ut()})),on};return Ct.toString=()=>`${Et.toString()}() { [capacitor code] }`,Object.defineProperty(Ct,"name",{value:Et,writable:!1,configurable:!1}),Ct},gt=en("addListener"),Yt=en("removeListener"),ht=(Et,ut)=>{const Ct=gt({eventName:Et},ut),qe=function(){var gn=(0,o.Z)(function*(){const Nt=yield Ct;Yt({eventName:Et,callbackId:Nt},ut)});return function(){return gn.apply(this,arguments)}}(),on=new Promise(gn=>Ct.then(()=>gn({remove:qe})));return on.remove=(0,o.Z)(function*(){console.warn("Using addListener() without 'await' is deprecated."),yield qe()}),on},nt=new Proxy({},{get(Et,ut){switch(ut){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return kt?ht:gt;case"removeListener":return Yt;default:return en(ut)}}});return de[Pt]=nt,Rt.set(Pt,{name:Pt,proxy:nt,platforms:new Set([...Object.keys(Ut),...kt?[Xt]:[]])}),nt});return ue.convertFileSrc||(ue.convertFileSrc=Pt=>Pt),ue.getPlatform=Ce,ue.handleError=Pt=>T.console.error(Pt),ue.isNativePlatform=dt,ue.isPluginAvailable=Ue,ue.pluginMethodNoop=(Pt,Ut,it)=>Promise.reject(`${it} does not have an implementation of "${Ut}".`),ue.registerPlugin=pn,ue.Exception=_,ue.DEBUG=!!ue.DEBUG,ue.isLoggingEnabled=!!ue.isLoggingEnabled,ue.platform=ue.getPlatform(),ue.isNative=ue.isNativePlatform(),ue},S=(T=>T.Capacitor=G(T))(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),B=S.registerPlugin;class P{constructor(k){this.listeners={},this.windowListeners={},k&&(console.warn(`Capacitor WebPlugin "${k.name}" config object was deprecated in v3 and will be removed in v4.`),this.config=k)}addListener(k,O){var te=this;this.listeners[k]||(this.listeners[k]=[]),this.listeners[k].push(O);const Ae=this.windowListeners[k];Ae&&!Ae.registered&&this.addWindowListener(Ae);const De=function(){var de=(0,o.Z)(function*(){return te.removeListener(k,O)});return function(){return de.apply(this,arguments)}}(),ue=Promise.resolve({remove:De});return Object.defineProperty(ue,"remove",{value:(de=(0,o.Z)(function*(){console.warn("Using addListener() without 'await' is deprecated."),yield De()}),function(){return de.apply(this,arguments)})}),ue;var de}removeAllListeners(){var k=this;return(0,o.Z)(function*(){k.listeners={};for(const O in k.windowListeners)k.removeWindowListener(k.windowListeners[O]);k.windowListeners={}})()}notifyListeners(k,O){const te=this.listeners[k];te&&te.forEach(ce=>ce(O))}hasListeners(k){return!!this.listeners[k].length}registerWindowListener(k,O){this.windowListeners[O]={registered:!1,windowEventName:k,pluginEventName:O,handler:te=>{this.notifyListeners(O,te)}}}unimplemented(k="not implemented"){return new S.Exception(k,U.Unimplemented)}unavailable(k="not available"){return new S.Exception(k,U.Unavailable)}removeListener(k,O){var te=this;return(0,o.Z)(function*(){const ce=te.listeners[k];if(!ce)return;const Ae=ce.indexOf(O);te.listeners[k].splice(Ae,1),te.listeners[k].length||te.removeWindowListener(te.windowListeners[k])})()}addWindowListener(k){window.addEventListener(k.windowEventName,k.handler),k.registered=!0}removeWindowListener(k){!k||(window.removeEventListener(k.windowEventName,k.handler),k.registered=!1)}}const pe=T=>encodeURIComponent(T).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),ke=T=>T.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class Te extends P{getCookies(){return(0,o.Z)(function*(){const k=document.cookie,O={};return k.split(";").forEach(te=>{if(te.length<=0)return;let[ce,Ae]=te.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");ce=ke(ce).trim(),Ae=ke(Ae).trim(),O[ce]=Ae}),O})()}setCookie(k){return(0,o.Z)(function*(){try{const O=pe(k.key),te=pe(k.value),ce=`; expires=${(k.expires||"").replace("expires=","")}`,Ae=(k.path||"/").replace("path=","");document.cookie=`${O}=${te||""}${ce}; path=${Ae}`}catch(O){return Promise.reject(O)}})()}deleteCookie(k){return(0,o.Z)(function*(){try{document.cookie=`${k.key}=; Max-Age=0`}catch(O){return Promise.reject(O)}})()}clearCookies(){return(0,o.Z)(function*(){try{const k=document.cookie.split(";")||[];for(const O of k)document.cookie=O.replace(/^ +/,"").replace(/=.*/,`=;expires=${(new Date).toUTCString()};path=/`)}catch(k){return Promise.reject(k)}})()}clearAllCookies(){var k=this;return(0,o.Z)(function*(){try{yield k.clearCookies()}catch(O){return Promise.reject(O)}})()}}B("CapacitorCookies",{web:()=>new Te});const Be=function(){var T=(0,o.Z)(function*(k){return new Promise((O,te)=>{const ce=new FileReader;ce.onload=()=>{const Ae=ce.result;O(Ae.indexOf(",")>=0?Ae.split(",")[1]:Ae)},ce.onerror=Ae=>te(Ae),ce.readAsDataURL(k)})});return function(O){return T.apply(this,arguments)}}();class Ne extends P{request(k){return(0,o.Z)(function*(){const O=((T,k={})=>{const O=Object.assign({method:T.method||"GET",headers:T.headers},k),ce=((T={})=>{const k=Object.keys(T);return Object.keys(T).map(ce=>ce.toLocaleLowerCase()).reduce((ce,Ae,De)=>(ce[Ae]=T[k[De]],ce),{})})(T.headers)["content-type"]||"";if("string"==typeof T.data)O.body=T.data;else if(ce.includes("application/x-www-form-urlencoded")){const Ae=new URLSearchParams;for(const[De,ue]of Object.entries(T.data||{}))Ae.set(De,ue);O.body=Ae.toString()}else if(ce.includes("multipart/form-data")){const Ae=new FormData;if(T.data instanceof FormData)T.data.forEach((ue,de)=>{Ae.append(de,ue)});else for(const ue of Object.keys(T.data))Ae.append(ue,T.data[ue]);O.body=Ae;const De=new Headers(O.headers);De.delete("content-type"),O.headers=De}else(ce.includes("application/json")||"object"==typeof T.data)&&(O.body=JSON.stringify(T.data));return O})(k,k.webFetchExtra),te=((T,k=!0)=>T?Object.entries(T).reduce((te,ce)=>{const[Ae,De]=ce;let ue,de;return Array.isArray(De)?(de="",De.forEach(ne=>{ue=k?encodeURIComponent(ne):ne,de+=`${Ae}=${ue}&`}),de.slice(0,-1)):(ue=k?encodeURIComponent(De):De,de=`${Ae}=${ue}`),`${te}&${de}`},"").substr(1):null)(k.params,k.shouldEncodeUrlParams),ce=te?`${k.url}?${te}`:k.url,Ae=yield fetch(ce,O),De=Ae.headers.get("content-type")||"";let de,ne,{responseType:ue="text"}=Ae.ok?k:{};switch(De.includes("application/json")&&(ue="json"),ue){case"arraybuffer":case"blob":ne=yield Ae.blob(),de=yield Be(ne);break;case"json":de=yield Ae.json();break;default:de=yield Ae.text()}const Ee={};return Ae.headers.forEach((Ce,ze)=>{Ee[ze]=Ce}),{data:de,headers:Ee,status:Ae.status,url:Ae.url}})()}get(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"GET"}))})()}post(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"POST"}))})()}put(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"PUT"}))})()}patch(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"PATCH"}))})()}delete(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"DELETE"}))})()}}B("CapacitorHttp",{web:()=>new Ne})},502:(Qe,Fe,w)=>{"use strict";w.d(Fe,{BX:()=>Nr,Br:()=>Zn,dr:()=>Nt,BJ:()=>Hn,oU:()=>zt,cs:()=>nr,yp:()=>jn,YG:()=>xe,Sm:()=>se,PM:()=>ye,hM:()=>_t,wI:()=>tn,W2:()=>Ln,fr:()=>ee,jY:()=>Se,Gu:()=>Le,gu:()=>yt,pK:()=>sn,Ie:()=>dn,rH:()=>er,u8:()=>$n,IK:()=>Tn,td:()=>xn,Q$:()=>vn,q_:()=>tr,z0:()=>cr,zc:()=>$t,uN:()=>Un,jP:()=>fr,Nd:()=>le,VI:()=>Ie,t9:()=>ot,n0:()=>st,PQ:()=>An,jI:()=>Rn,g2:()=>an,wd:()=>ho,sr:()=>jr,Pc:()=>C,r4:()=>rr,HT:()=>Lr,SH:()=>zr,as:()=>en,t4:()=>si,QI:()=>Yt,j9:()=>ht,yF:()=>ko});var o=w(8274),x=w(433),N=w(655),ge=w(8421),R=w(9751),W=w(5577),M=w(1144),U=w(576),_=w(3268);const Y=["addListener","removeListener"],G=["addEventListener","removeEventListener"],Z=["on","off"];function S(s,c,a,g){if((0,U.m)(a)&&(g=a,a=void 0),g)return S(s,c,a).pipe((0,_.Z)(g));const[L,Me]=function P(s){return(0,U.m)(s.addEventListener)&&(0,U.m)(s.removeEventListener)}(s)?G.map(Je=>at=>s[Je](c,at,a)):function E(s){return(0,U.m)(s.addListener)&&(0,U.m)(s.removeListener)}(s)?Y.map(B(s,c)):function j(s){return(0,U.m)(s.on)&&(0,U.m)(s.off)}(s)?Z.map(B(s,c)):[];if(!L&&(0,M.z)(s))return(0,W.z)(Je=>S(Je,c,a))((0,ge.Xf)(s));if(!L)throw new TypeError("Invalid event target");return new R.y(Je=>{const at=(...Dt)=>Je.next(1Me(at)})}function B(s,c){return a=>g=>s[a](c,g)}var K=w(7579),pe=w(1135),ke=w(5472),oe=(w(8834),w(3953),w(3880),w(1911),w(9658)),be=w(5730),Ne=w(697),T=(w(4292),w(4414)),te=(w(3457),w(4349),w(1308)),ne=w(9300),Ee=w(3900),Ce=w(1884),ze=w(6895);const et=oe.i,Ke=["*"],Pt=s=>"function"==typeof __zone_symbol__requestAnimationFrame?__zone_symbol__requestAnimationFrame(s):"function"==typeof requestAnimationFrame?requestAnimationFrame(s):setTimeout(s),Ut=s=>!!s.resolveComponentFactory;let it=(()=>{class s{constructor(a,g){this.injector=a,this.el=g,this.onChange=()=>{},this.onTouched=()=>{}}writeValue(a){this.el.nativeElement.value=this.lastValue=a??"",Xt(this.el)}handleChangeEvent(a,g){a===this.el.nativeElement&&(g!==this.lastValue&&(this.lastValue=g,this.onChange(g)),Xt(this.el))}_handleBlurEvent(a){a===this.el.nativeElement&&(this.onTouched(),Xt(this.el))}registerOnChange(a){this.onChange=a}registerOnTouched(a){this.onTouched=a}setDisabledState(a){this.el.nativeElement.disabled=a}ngOnDestroy(){this.statusChanges&&this.statusChanges.unsubscribe()}ngAfterViewInit(){let a;try{a=this.injector.get(x.a5)}catch{}if(!a)return;a.statusChanges&&(this.statusChanges=a.statusChanges.subscribe(()=>Xt(this.el)));const g=a.control;g&&["markAsTouched","markAllAsTouched","markAsUntouched","markAsDirty","markAsPristine"].forEach(Me=>{if(typeof g[Me]<"u"){const Je=g[Me].bind(g);g[Me]=(...at)=>{Je(...at),Xt(this.el)}}})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,hostBindings:function(a,g){1&a&&o.NdJ("ionBlur",function(Me){return g._handleBlurEvent(Me.target)})}}),s})();const Xt=s=>{Pt(()=>{const c=s.nativeElement,a=null!=c.value&&c.value.toString().length>0,g=kt(c);Vt(c,g);const L=c.closest("ion-item");L&&Vt(L,a?[...g,"item-has-value"]:g)})},kt=s=>{const c=s.classList,a=[];for(let g=0;g{const a=s.classList;a.remove("ion-valid","ion-invalid","ion-touched","ion-untouched","ion-dirty","ion-pristine"),a.add(...c)},rn=(s,c)=>s.substring(0,c.length)===c;let en=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleIonChange(a){this.handleChangeEvent(a,a.value)}registerOnChange(a){super.registerOnChange(g=>{a(""===g?null:parseFloat(g))})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-input","type","number"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleIonChange(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})(),Yt=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleChangeEvent(a){this.handleChangeEvent(a,a.value)}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-range"],["ion-select"],["ion-radio-group"],["ion-segment"],["ion-datetime"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleChangeEvent(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})(),ht=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleInputEvent(a){this.handleChangeEvent(a,a.value)}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-input",3,"type","number"],["ion-textarea"],["ion-searchbar"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleInputEvent(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})();const nt=(s,c)=>{const a=s.prototype;c.forEach(g=>{Object.defineProperty(a,g,{get(){return this.el[g]},set(L){this.z.runOutsideAngular(()=>this.el[g]=L)}})})},Et=(s,c)=>{const a=s.prototype;c.forEach(g=>{a[g]=function(){const L=arguments;return this.z.runOutsideAngular(()=>this.el[g].apply(this.el,L))}})},ut=(s,c,a)=>{a.forEach(g=>s[g]=S(c,g))};function qe(s){return function(a){const{defineCustomElementFn:g,inputs:L,methods:Me}=s;return void 0!==g&&g(),L&&nt(a,L),Me&&Et(a,Me),a}}let Nt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-app"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),Hn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-avatar"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),zt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-back-button"]],inputs:{color:"color",defaultHref:"defaultHref",disabled:"disabled",icon:"icon",mode:"mode",routerAnimation:"routerAnimation",text:"text",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","defaultHref","disabled","icon","mode","routerAnimation","text","type"]})],s),s})(),jn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-badge"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})(),xe=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionFocus","ionBlur"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-button"]],inputs:{buttonType:"buttonType",color:"color",disabled:"disabled",download:"download",expand:"expand",fill:"fill",form:"form",href:"href",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",shape:"shape",size:"size",strong:"strong",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]})],s),s})(),se=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-buttons"]],inputs:{collapse:"collapse"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse"]})],s),s})(),ye=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-card"]],inputs:{button:"button",color:"color",disabled:"disabled",download:"download",href:"href",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]})],s),s})(),_t=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-chip"]],inputs:{color:"color",disabled:"disabled",mode:"mode",outline:"outline"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","disabled","mode","outline"]})],s),s})(),tn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-col"]],inputs:{offset:"offset",offsetLg:"offsetLg",offsetMd:"offsetMd",offsetSm:"offsetSm",offsetXl:"offsetXl",offsetXs:"offsetXs",pull:"pull",pullLg:"pullLg",pullMd:"pullMd",pullSm:"pullSm",pullXl:"pullXl",pullXs:"pullXs",push:"push",pushLg:"pushLg",pushMd:"pushMd",pushSm:"pushSm",pushXl:"pushXl",pushXs:"pushXs",size:"size",sizeLg:"sizeLg",sizeMd:"sizeMd",sizeSm:"sizeSm",sizeXl:"sizeXl",sizeXs:"sizeXs"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["offset","offsetLg","offsetMd","offsetSm","offsetXl","offsetXs","pull","pullLg","pullMd","pullSm","pullXl","pullXs","push","pushLg","pushMd","pushSm","pushXl","pushXs","size","sizeLg","sizeMd","sizeSm","sizeXl","sizeXs"]})],s),s})(),Ln=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionScrollStart","ionScroll","ionScrollEnd"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-content"]],inputs:{color:"color",forceOverscroll:"forceOverscroll",fullscreen:"fullscreen",scrollEvents:"scrollEvents",scrollX:"scrollX",scrollY:"scrollY"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"],methods:["getScrollElement","scrollToTop","scrollToBottom","scrollByPoint","scrollToPoint"]})],s),s})(),ee=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-footer"]],inputs:{collapse:"collapse",mode:"mode",translucent:"translucent"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse","mode","translucent"]})],s),s})(),Se=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-grid"]],inputs:{fixed:"fixed"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["fixed"]})],s),s})(),Le=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-header"]],inputs:{collapse:"collapse",mode:"mode",translucent:"translucent"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse","mode","translucent"]})],s),s})(),yt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-icon"]],inputs:{color:"color",flipRtl:"flipRtl",icon:"icon",ios:"ios",lazy:"lazy",md:"md",mode:"mode",name:"name",sanitize:"sanitize",size:"size",src:"src"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]})],s),s})(),sn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionInput","ionChange","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-input"]],inputs:{accept:"accept",autocapitalize:"autocapitalize",autocomplete:"autocomplete",autocorrect:"autocorrect",autofocus:"autofocus",clearInput:"clearInput",clearOnEdit:"clearOnEdit",color:"color",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",max:"max",maxlength:"maxlength",min:"min",minlength:"minlength",mode:"mode",multiple:"multiple",name:"name",pattern:"pattern",placeholder:"placeholder",readonly:"readonly",required:"required",size:"size",spellcheck:"spellcheck",step:"step",type:"type",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["accept","autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearOnEdit","color","debounce","disabled","enterkeyhint","inputmode","max","maxlength","min","minlength","mode","multiple","name","pattern","placeholder","readonly","required","size","spellcheck","step","type","value"],methods:["setFocus","getInputElement"]})],s),s})(),dn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item"]],inputs:{button:"button",color:"color",counter:"counter",counterFormatter:"counterFormatter",detail:"detail",detailIcon:"detailIcon",disabled:"disabled",download:"download",fill:"fill",href:"href",lines:"lines",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",shape:"shape",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["button","color","counter","counterFormatter","detail","detailIcon","disabled","download","fill","href","lines","mode","rel","routerAnimation","routerDirection","shape","target","type"]})],s),s})(),er=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-divider"]],inputs:{color:"color",mode:"mode",sticky:"sticky"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode","sticky"]})],s),s})(),$n=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-option"]],inputs:{color:"color",disabled:"disabled",download:"download",expandable:"expandable",href:"href",mode:"mode",rel:"rel",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","disabled","download","expandable","href","mode","rel","target","type"]})],s),s})(),Tn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionSwipe"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-options"]],inputs:{side:"side"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["side"]})],s),s})(),xn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionDrag"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-sliding"]],inputs:{disabled:"disabled"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["disabled"],methods:["getOpenAmount","getSlidingRatio","open","close","closeOpened"]})],s),s})(),vn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-label"]],inputs:{color:"color",mode:"mode",position:"position"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode","position"]})],s),s})(),tr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-list"]],inputs:{inset:"inset",lines:"lines",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["inset","lines","mode"],methods:["closeSlidingItems"]})],s),s})(),cr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionWillOpen","ionWillClose","ionDidOpen","ionDidClose"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-menu"]],inputs:{contentId:"contentId",disabled:"disabled",maxEdgeStart:"maxEdgeStart",menuId:"menuId",side:"side",swipeGesture:"swipeGesture",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["contentId","disabled","maxEdgeStart","menuId","side","swipeGesture","type"],methods:["isOpen","isActive","open","close","toggle","setOpen"]})],s),s})(),$t=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-menu-toggle"]],inputs:{autoHide:"autoHide",menu:"menu"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["autoHide","menu"]})],s),s})(),Un=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-note"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})(),le=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-row"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),Ie=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionInput","ionChange","ionCancel","ionClear","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-searchbar"]],inputs:{animated:"animated",autocomplete:"autocomplete",autocorrect:"autocorrect",cancelButtonIcon:"cancelButtonIcon",cancelButtonText:"cancelButtonText",clearIcon:"clearIcon",color:"color",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",mode:"mode",placeholder:"placeholder",searchIcon:"searchIcon",showCancelButton:"showCancelButton",showClearButton:"showClearButton",spellcheck:"spellcheck",type:"type",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["animated","autocomplete","autocorrect","cancelButtonIcon","cancelButtonText","clearIcon","color","debounce","disabled","enterkeyhint","inputmode","mode","placeholder","searchIcon","showCancelButton","showClearButton","spellcheck","type","value"],methods:["setFocus","getInputElement"]})],s),s})(),ot=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionChange","ionCancel","ionDismiss","ionFocus","ionBlur"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-select"]],inputs:{cancelText:"cancelText",compareWith:"compareWith",disabled:"disabled",interface:"interface",interfaceOptions:"interfaceOptions",mode:"mode",multiple:"multiple",name:"name",okText:"okText",placeholder:"placeholder",selectedText:"selectedText",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["cancelText","compareWith","disabled","interface","interfaceOptions","mode","multiple","name","okText","placeholder","selectedText","value"],methods:["open"]})],s),s})(),st=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-select-option"]],inputs:{disabled:"disabled",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["disabled","value"]})],s),s})(),An=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-spinner"]],inputs:{color:"color",duration:"duration",name:"name",paused:"paused"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","duration","name","paused"]})],s),s})(),Rn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionSplitPaneVisible"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-split-pane"]],inputs:{contentId:"contentId",disabled:"disabled",when:"when"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["contentId","disabled","when"]})],s),s})(),an=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionChange","ionInput","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-textarea"]],inputs:{autoGrow:"autoGrow",autocapitalize:"autocapitalize",autofocus:"autofocus",clearOnEdit:"clearOnEdit",color:"color",cols:"cols",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",maxlength:"maxlength",minlength:"minlength",mode:"mode",name:"name",placeholder:"placeholder",readonly:"readonly",required:"required",rows:"rows",spellcheck:"spellcheck",value:"value",wrap:"wrap"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["autoGrow","autocapitalize","autofocus","clearOnEdit","color","cols","debounce","disabled","enterkeyhint","inputmode","maxlength","minlength","mode","name","placeholder","readonly","required","rows","spellcheck","value","wrap"],methods:["setFocus","getInputElement"]})],s),s})(),ho=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-title"]],inputs:{color:"color",size:"size"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","size"]})],s),s})(),jr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-toolbar"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})();class xr{constructor(c={}){this.data=c}get(c){return this.data[c]}}let Or=(()=>{class s{constructor(a,g){this.zone=a,this.appRef=g}create(a,g,L){return new ar(a,g,L,this.appRef,this.zone)}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(o.R0b),o.LFG(o.z2F))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})();class ar{constructor(c,a,g,L,Me){this.resolverOrInjector=c,this.injector=a,this.location=g,this.appRef=L,this.zone=Me,this.elRefMap=new WeakMap,this.elEventsMap=new WeakMap}attachViewToDom(c,a,g,L){return this.zone.run(()=>new Promise(Me=>{Me(Bn(this.zone,this.resolverOrInjector,this.injector,this.location,this.appRef,this.elRefMap,this.elEventsMap,c,a,g,L))}))}removeViewFromDom(c,a){return this.zone.run(()=>new Promise(g=>{const L=this.elRefMap.get(a);if(L){L.destroy(),this.elRefMap.delete(a);const Me=this.elEventsMap.get(a);Me&&(Me(),this.elEventsMap.delete(a))}g()}))}}const Bn=(s,c,a,g,L,Me,Je,at,Dt,Zt,bn)=>{let Ve;const At=o.zs3.create({providers:qn(Zt),parent:a});if(c&&Ut(c)){const $r=c.resolveComponentFactory(Dt);Ve=g?g.createComponent($r,g.length,At):$r.create(At)}else{if(!g)return null;Ve=g.createComponent(Dt,{index:g.indexOf,injector:At,environmentInjector:c})}const yr=Ve.instance,Dr=Ve.location.nativeElement;if(Zt&&Object.assign(yr,Zt),bn)for(const $r of bn)Dr.classList.add($r);const Mn=Fn(s,yr,Dr);return at.appendChild(Dr),g||L.attachView(Ve.hostView),Ve.changeDetectorRef.reattach(),Me.set(Dr,Ve),Je.set(Dr,Mn),Dr},po=[Ne.L,Ne.a,Ne.b,Ne.c,Ne.d],Fn=(s,c,a)=>s.run(()=>{const g=po.filter(L=>"function"==typeof c[L]).map(L=>{const Me=Je=>c[L](Je.detail);return a.addEventListener(L,Me),()=>a.removeEventListener(L,Me)});return()=>g.forEach(L=>L())}),zn=new o.OlP("NavParamsToken"),qn=s=>[{provide:zn,useValue:s},{provide:xr,useFactory:dr,deps:[zn]}],dr=s=>new xr(s),Gn=(s,c)=>((s=s.filter(a=>a.stackId!==c.stackId)).push(c),s),vr=(s,c)=>{const a=s.createUrlTree(["."],{relativeTo:c});return s.serializeUrl(a)},Pr=(s,c)=>{if(!s)return;const a=xo(c);for(let g=0;g=s.length)return a[g];if(a[g]!==s[g])return}},xo=s=>s.split("/").map(c=>c.trim()).filter(c=>""!==c),vo=s=>{s&&(s.ref.destroy(),s.unlistenEvents())};class yo{constructor(c,a,g,L,Me,Je){this.containerEl=a,this.router=g,this.navCtrl=L,this.zone=Me,this.location=Je,this.views=[],this.skipTransition=!1,this.nextId=0,this.tabsPrefix=void 0!==c?xo(c):void 0}createView(c,a){var g;const L=vr(this.router,a),Me=null===(g=c?.location)||void 0===g?void 0:g.nativeElement,Je=Fn(this.zone,c.instance,Me);return{id:this.nextId++,stackId:Pr(this.tabsPrefix,L),unlistenEvents:Je,element:Me,ref:c,url:L}}getExistingView(c){const a=vr(this.router,c),g=this.views.find(L=>L.url===a);return g&&g.ref.changeDetectorRef.reattach(),g}setActive(c){var a,g;const L=this.navCtrl.consumeTransition();let{direction:Me,animation:Je,animationBuilder:at}=L;const Dt=this.activeView,Zt=((s,c)=>!c||s.stackId!==c.stackId)(c,Dt);Zt&&(Me="back",Je=void 0);const bn=this.views.slice();let Ve;const At=this.router;At.getCurrentNavigation?Ve=At.getCurrentNavigation():!(null===(a=At.navigations)||void 0===a)&&a.value&&(Ve=At.navigations.value),null!==(g=Ve?.extras)&&void 0!==g&&g.replaceUrl&&this.views.length>0&&this.views.splice(-1,1);const yr=this.views.includes(c),Dr=this.insertView(c,Me);yr||c.ref.changeDetectorRef.detectChanges();const Mn=c.animationBuilder;return void 0===at&&"back"===Me&&!Zt&&void 0!==Mn&&(at=Mn),Dt&&(Dt.animationBuilder=at),this.zone.runOutsideAngular(()=>this.wait(()=>(Dt&&Dt.ref.changeDetectorRef.detach(),c.ref.changeDetectorRef.reattach(),this.transition(c,Dt,Je,this.canGoBack(1),!1,at).then(()=>Oo(c,Dr,bn,this.location,this.zone)).then(()=>({enteringView:c,direction:Me,animation:Je,tabSwitch:Zt})))))}canGoBack(c,a=this.getActiveStackId()){return this.getStack(a).length>c}pop(c,a=this.getActiveStackId()){return this.zone.run(()=>{var g,L;const Me=this.getStack(a);if(Me.length<=c)return Promise.resolve(!1);const Je=Me[Me.length-c-1];let at=Je.url;const Dt=Je.savedData;if(Dt){const bn=Dt.get("primary");null!==(L=null===(g=bn?.route)||void 0===g?void 0:g._routerState)&&void 0!==L&&L.snapshot.url&&(at=bn.route._routerState.snapshot.url)}const{animationBuilder:Zt}=this.navCtrl.consumeTransition();return this.navCtrl.navigateBack(at,Object.assign(Object.assign({},Je.savedExtras),{animation:Zt})).then(()=>!0)})}startBackTransition(){const c=this.activeView;if(c){const a=this.getStack(c.stackId),g=a[a.length-2],L=g.animationBuilder;return this.wait(()=>this.transition(g,c,"back",this.canGoBack(2),!0,L))}return Promise.resolve()}endBackTransition(c){c?(this.skipTransition=!0,this.pop(1)):this.activeView&&Jr(this.activeView,this.views,this.views,this.location,this.zone)}getLastUrl(c){const a=this.getStack(c);return a.length>0?a[a.length-1]:void 0}getRootUrl(c){const a=this.getStack(c);return a.length>0?a[0]:void 0}getActiveStackId(){return this.activeView?this.activeView.stackId:void 0}hasRunningTask(){return void 0!==this.runningTask}destroy(){this.containerEl=void 0,this.views.forEach(vo),this.activeView=void 0,this.views=[]}getStack(c){return this.views.filter(a=>a.stackId===c)}insertView(c,a){return this.activeView=c,this.views=((s,c,a)=>"root"===a?Gn(s,c):"forward"===a?((s,c)=>(s.indexOf(c)>=0?s=s.filter(g=>g.stackId!==c.stackId||g.id<=c.id):s.push(c),s))(s,c):((s,c)=>s.indexOf(c)>=0?s.filter(g=>g.stackId!==c.stackId||g.id<=c.id):Gn(s,c))(s,c))(this.views,c,a),this.views.slice()}transition(c,a,g,L,Me,Je){if(this.skipTransition)return this.skipTransition=!1,Promise.resolve(!1);if(a===c)return Promise.resolve(!1);const at=c?c.element:void 0,Dt=a?a.element:void 0,Zt=this.containerEl;return at&&at!==Dt&&(at.classList.add("ion-page"),at.classList.add("ion-page-invisible"),at.parentElement!==Zt&&Zt.appendChild(at),Zt.commit)?Zt.commit(at,Dt,{deepWait:!0,duration:void 0===g?0:void 0,direction:g,showGoBack:L,progressAnimation:Me,animationBuilder:Je}):Promise.resolve(!1)}wait(c){return(0,N.mG)(this,void 0,void 0,function*(){void 0!==this.runningTask&&(yield this.runningTask,this.runningTask=void 0);const a=this.runningTask=c();return a.finally(()=>this.runningTask=void 0),a})}}const Oo=(s,c,a,g,L)=>"function"==typeof requestAnimationFrame?new Promise(Me=>{requestAnimationFrame(()=>{Jr(s,c,a,g,L),Me()})}):Promise.resolve(),Jr=(s,c,a,g,L)=>{L.run(()=>a.filter(Me=>!c.includes(Me)).forEach(vo)),c.forEach(Me=>{const at=g.path().split("?")[0].split("#")[0];if(Me!==s&&Me.url!==at){const Dt=Me.element;Dt.setAttribute("aria-hidden","true"),Dt.classList.add("ion-page-hidden"),Me.ref.changeDetectorRef.detach()}})};let Go=(()=>{class s{get(a,g){const L=Yo();return L?L.get(a,g):null}getBoolean(a,g){const L=Yo();return!!L&&L.getBoolean(a,g)}getNumber(a,g){const L=Yo();return L?L.getNumber(a,g):0}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Fr=new o.OlP("USERCONFIG"),Yo=()=>{if(typeof window<"u"){const s=window.Ionic;if(s?.config)return s.config}return null};let si=(()=>{class s{constructor(a,g){this.doc=a,this.backButton=new K.x,this.keyboardDidShow=new K.x,this.keyboardDidHide=new K.x,this.pause=new K.x,this.resume=new K.x,this.resize=new K.x,g.run(()=>{var L;let Me;this.win=a.defaultView,this.backButton.subscribeWithPriority=function(Je,at){return this.subscribe(Dt=>Dt.register(Je,Zt=>g.run(()=>at(Zt))))},Ur(this.pause,a,"pause"),Ur(this.resume,a,"resume"),Ur(this.backButton,a,"ionBackButton"),Ur(this.resize,this.win,"resize"),Ur(this.keyboardDidShow,this.win,"ionKeyboardDidShow"),Ur(this.keyboardDidHide,this.win,"ionKeyboardDidHide"),this._readyPromise=new Promise(Je=>{Me=Je}),null!==(L=this.win)&&void 0!==L&&L.cordova?a.addEventListener("deviceready",()=>{Me("cordova")},{once:!0}):Me("dom")})}is(a){return(0,oe.a)(this.win,a)}platforms(){return(0,oe.g)(this.win)}ready(){return this._readyPromise}get isRTL(){return"rtl"===this.doc.dir}getQueryParam(a){return Ro(this.win.location.href,a)}isLandscape(){return!this.isPortrait()}isPortrait(){var a,g;return null===(g=(a=this.win).matchMedia)||void 0===g?void 0:g.call(a,"(orientation: portrait)").matches}testUserAgent(a){const g=this.win.navigator;return!!(g?.userAgent&&g.userAgent.indexOf(a)>=0)}url(){return this.win.location.href}width(){return this.win.innerWidth}height(){return this.win.innerHeight}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(ze.K0),o.LFG(o.R0b))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Ro=(s,c)=>{c=c.replace(/[[\]\\]/g,"\\$&");const g=new RegExp("[\\?&]"+c+"=([^&#]*)").exec(s);return g?decodeURIComponent(g[1].replace(/\+/g," ")):null},Ur=(s,c,a)=>{c&&c.addEventListener(a,g=>{s.next(g?.detail)})};let zr=(()=>{class s{constructor(a,g,L,Me){this.location=g,this.serializer=L,this.router=Me,this.direction=Gr,this.animated=Yr,this.guessDirection="forward",this.lastNavId=-1,Me&&Me.events.subscribe(Je=>{if(Je instanceof ke.OD){const at=Je.restoredState?Je.restoredState.navigationId:Je.id;this.guessDirection=at{this.pop(),Je()})}navigateForward(a,g={}){return this.setDirection("forward",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}navigateBack(a,g={}){return this.setDirection("back",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}navigateRoot(a,g={}){return this.setDirection("root",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}back(a={animated:!0,animationDirection:"back"}){return this.setDirection("back",a.animated,a.animationDirection,a.animation),this.location.back()}pop(){return(0,N.mG)(this,void 0,void 0,function*(){let a=this.topOutlet;for(;a&&!(yield a.pop());)a=a.parentOutlet})}setDirection(a,g,L,Me){this.direction=a,this.animated=Do(a,g,L),this.animationBuilder=Me}setTopOutlet(a){this.topOutlet=a}consumeTransition(){let g,a="root";const L=this.animationBuilder;return"auto"===this.direction?(a=this.guessDirection,g=this.guessAnimation):(g=this.animated,a=this.direction),this.direction=Gr,this.animated=Yr,this.animationBuilder=void 0,{direction:a,animation:g,animationBuilder:L}}navigate(a,g){if(Array.isArray(a))return this.router.navigate(a,g);{const L=this.serializer.parse(a.toString());return void 0!==g.queryParams&&(L.queryParams=Object.assign({},g.queryParams)),void 0!==g.fragment&&(L.fragment=g.fragment),this.router.navigateByUrl(L,g)}}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(si),o.LFG(ze.Ye),o.LFG(ke.Hx),o.LFG(ke.F0,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Do=(s,c,a)=>{if(!1!==c){if(void 0!==a)return a;if("forward"===s||"back"===s)return s;if("root"===s&&!0===c)return"forward"}},Gr="auto",Yr=void 0;let fr=(()=>{class s{constructor(a,g,L,Me,Je,at,Dt,Zt,bn,Ve,At,yr,Dr){this.parentContexts=a,this.location=g,this.config=Je,this.navCtrl=at,this.componentFactoryResolver=Dt,this.parentOutlet=Dr,this.activated=null,this.activatedView=null,this._activatedRoute=null,this.proxyMap=new WeakMap,this.currentActivatedRoute$=new pe.X(null),this.stackEvents=new o.vpe,this.activateEvents=new o.vpe,this.deactivateEvents=new o.vpe,this.nativeEl=bn.nativeElement,this.name=L||ke.eC,this.tabsPrefix="true"===Me?vr(Ve,yr):void 0,this.stackCtrl=new yo(this.tabsPrefix,this.nativeEl,Ve,at,At,Zt),a.onChildOutletCreated(this.name,this)}set animation(a){this.nativeEl.animation=a}set animated(a){this.nativeEl.animated=a}set swipeGesture(a){this._swipeGesture=a,this.nativeEl.swipeHandler=a?{canStart:()=>this.stackCtrl.canGoBack(1)&&!this.stackCtrl.hasRunningTask(),onStart:()=>this.stackCtrl.startBackTransition(),onEnd:g=>this.stackCtrl.endBackTransition(g)}:void 0}ngOnDestroy(){this.stackCtrl.destroy()}getContext(){return this.parentContexts.getContext(this.name)}ngOnInit(){if(!this.activated){const a=this.getContext();a?.route&&this.activateWith(a.route,a.resolver||null)}new Promise(a=>(0,be.c)(this.nativeEl,a)).then(()=>{void 0===this._swipeGesture&&(this.swipeGesture=this.config.getBoolean("swipeBackEnabled","ios"===this.nativeEl.mode))})}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new Error("Outlet is not activated");return this.activated.instance}get activatedRoute(){if(!this.activated)throw new Error("Outlet is not activated");return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){throw new Error("incompatible reuse strategy")}attach(a,g){throw new Error("incompatible reuse strategy")}deactivate(){if(this.activated){if(this.activatedView){const g=this.getContext();this.activatedView.savedData=new Map(g.children.contexts);const L=this.activatedView.savedData.get("primary");if(L&&g.route&&(L.route=Object.assign({},g.route)),this.activatedView.savedExtras={},g.route){const Me=g.route.snapshot;this.activatedView.savedExtras.queryParams=Me.queryParams,this.activatedView.savedExtras.fragment=Me.fragment}}const a=this.component;this.activatedView=null,this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(a)}}activateWith(a,g){var L;if(this.isActivated)throw new Error("Cannot activate an already activated outlet");this._activatedRoute=a;let Me,Je=this.stackCtrl.getExistingView(a);if(Je){Me=this.activated=Je.ref;const at=Je.savedData;at&&(this.getContext().children.contexts=at),this.updateActivatedRouteProxy(Me.instance,a)}else{const at=a._futureSnapshot;if(null==at.routeConfig.component&&null==this.environmentInjector)return void console.warn('[Ionic Warning]: You must supply an environmentInjector to use standalone components with routing:\n\nIn your component class, add:\n\n import { EnvironmentInjector } from \'@angular/core\';\n constructor(public environmentInjector: EnvironmentInjector) {}\n\nIn your router outlet template, add:\n\n \n\nAlternatively, if you are routing within ion-tabs:\n\n ');const Dt=this.parentContexts.getOrCreateContext(this.name).children,Zt=new pe.X(null),bn=this.createActivatedRouteProxy(Zt,a),Ve=new hr(bn,Dt,this.location.injector),At=null!==(L=at.routeConfig.component)&&void 0!==L?L:at.component;if((g=g||this.componentFactoryResolver)&&Ut(g)){const yr=g.resolveComponentFactory(At);Me=this.activated=this.location.createComponent(yr,this.location.length,Ve)}else Me=this.activated=this.location.createComponent(At,{index:this.location.length,injector:Ve,environmentInjector:g??this.environmentInjector});Zt.next(Me.instance),Je=this.stackCtrl.createView(this.activated,a),this.proxyMap.set(Me.instance,bn),this.currentActivatedRoute$.next({component:Me.instance,activatedRoute:a})}this.activatedView=Je,this.navCtrl.setTopOutlet(this),this.stackCtrl.setActive(Je).then(at=>{this.activateEvents.emit(Me.instance),this.stackEvents.emit(at)})}canGoBack(a=1,g){return this.stackCtrl.canGoBack(a,g)}pop(a=1,g){return this.stackCtrl.pop(a,g)}getLastUrl(a){const g=this.stackCtrl.getLastUrl(a);return g?g.url:void 0}getLastRouteView(a){return this.stackCtrl.getLastUrl(a)}getRootView(a){return this.stackCtrl.getRootUrl(a)}getActiveStackId(){return this.stackCtrl.getActiveStackId()}createActivatedRouteProxy(a,g){const L=new ke.gz;return L._futureSnapshot=g._futureSnapshot,L._routerState=g._routerState,L.snapshot=g.snapshot,L.outlet=g.outlet,L.component=g.component,L._paramMap=this.proxyObservable(a,"paramMap"),L._queryParamMap=this.proxyObservable(a,"queryParamMap"),L.url=this.proxyObservable(a,"url"),L.params=this.proxyObservable(a,"params"),L.queryParams=this.proxyObservable(a,"queryParams"),L.fragment=this.proxyObservable(a,"fragment"),L.data=this.proxyObservable(a,"data"),L}proxyObservable(a,g){return a.pipe((0,ne.h)(L=>!!L),(0,Ee.w)(L=>this.currentActivatedRoute$.pipe((0,ne.h)(Me=>null!==Me&&Me.component===L),(0,Ee.w)(Me=>Me&&Me.activatedRoute[g]),(0,Ce.x)())))}updateActivatedRouteProxy(a,g){const L=this.proxyMap.get(a);if(!L)throw new Error("Could not find activated route proxy for view");L._futureSnapshot=g._futureSnapshot,L._routerState=g._routerState,L.snapshot=g.snapshot,L.outlet=g.outlet,L.component=g.component,this.currentActivatedRoute$.next({component:a,activatedRoute:g})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(ke.y6),o.Y36(o.s_b),o.$8M("name"),o.$8M("tabs"),o.Y36(Go),o.Y36(zr),o.Y36(o._Vd,8),o.Y36(ze.Ye),o.Y36(o.SBq),o.Y36(ke.F0),o.Y36(o.R0b),o.Y36(ke.gz),o.Y36(s,12))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-router-outlet"]],inputs:{animated:"animated",animation:"animation",mode:"mode",swipeGesture:"swipeGesture",environmentInjector:"environmentInjector"},outputs:{stackEvents:"stackEvents",activateEvents:"activate",deactivateEvents:"deactivate"},exportAs:["outlet"]}),s})();class hr{constructor(c,a,g){this.route=c,this.childContexts=a,this.parent=g}get(c,a){return c===ke.gz?this.route:c===ke.y6?this.childContexts:this.parent.get(c,a)}}let nr=(()=>{class s{constructor(a,g,L){this.routerOutlet=a,this.navCtrl=g,this.config=L}onClick(a){var g;const L=this.defaultHref||this.config.get("backButtonDefaultHref");null!==(g=this.routerOutlet)&&void 0!==g&&g.canGoBack()?(this.navCtrl.setDirection("back",void 0,void 0,this.routerAnimation),this.routerOutlet.pop(),a.preventDefault()):null!=L&&(this.navCtrl.navigateBack(L,{animation:this.routerAnimation}),a.preventDefault())}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(fr,8),o.Y36(zr),o.Y36(Go))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-back-button"]],hostBindings:function(a,g){1&a&&o.NdJ("click",function(Me){return g.onClick(Me)})},inputs:{defaultHref:"defaultHref",routerAnimation:"routerAnimation"}}),s})();class kn{constructor(c){this.ctrl=c}create(c){return this.ctrl.create(c||{})}dismiss(c,a,g){return this.ctrl.dismiss(c,a,g)}getTop(){return this.ctrl.getTop()}}let Nr=(()=>{class s extends kn{constructor(){super(T.b)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})(),Zn=(()=>{class s extends kn{constructor(){super(T.a)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})(),Lr=(()=>{class s extends kn{constructor(){super(T.l)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();class Sn{}let Fo=(()=>{class s extends kn{constructor(a,g,L,Me){super(T.m),this.angularDelegate=a,this.resolver=g,this.injector=L,this.environmentInjector=Me}create(a){var g;return super.create(Object.assign(Object.assign({},a),{delegate:this.angularDelegate.create(null!==(g=this.resolver)&&void 0!==g?g:this.environmentInjector,this.injector)}))}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(Or),o.LFG(o._Vd),o.LFG(o.zs3),o.LFG(Sn,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})(),wo=(()=>{class s extends kn{constructor(a,g,L,Me){super(T.c),this.angularDelegate=a,this.resolver=g,this.injector=L,this.environmentInjector=Me}create(a){var g;return super.create(Object.assign(Object.assign({},a),{delegate:this.angularDelegate.create(null!==(g=this.resolver)&&void 0!==g?g:this.environmentInjector,this.injector)}))}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(Or),o.LFG(o._Vd),o.LFG(o.zs3),o.LFG(Sn,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})(),ko=(()=>{class s extends kn{constructor(){super(T.t)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();class rr{shouldDetach(c){return!1}shouldAttach(c){return!1}store(c,a){}retrieve(c){return null}shouldReuseRoute(c,a){if(c.routeConfig!==a.routeConfig)return!1;const g=c.params,L=a.params,Me=Object.keys(g),Je=Object.keys(L);if(Me.length!==Je.length)return!1;for(const at of Me)if(L[at]!==g[at])return!1;return!0}}const ro=(s,c,a)=>()=>{if(c.defaultView&&typeof window<"u"){(s=>{const c=window,a=c.Ionic;a&&a.config&&"Object"!==a.config.constructor.name||(c.Ionic=c.Ionic||{},c.Ionic.config=Object.assign(Object.assign({},c.Ionic.config),s))})(Object.assign(Object.assign({},s),{_zoneGate:Me=>a.run(Me)}));const L="__zone_symbol__addEventListener"in c.body?"__zone_symbol__addEventListener":"addEventListener";return function dt(){var s=[];if(typeof window<"u"){var c=window;(!c.customElements||c.Element&&(!c.Element.prototype.closest||!c.Element.prototype.matches||!c.Element.prototype.remove||!c.Element.prototype.getRootNode))&&s.push(w.e(6748).then(w.t.bind(w,723,23))),("function"!=typeof Object.assign||!Object.entries||!Array.prototype.find||!Array.prototype.includes||!String.prototype.startsWith||!String.prototype.endsWith||c.NodeList&&!c.NodeList.prototype.forEach||!c.fetch||!function(){try{var g=new URL("b","http://a");return g.pathname="c%20d","http://a/c%20d"===g.href&&g.searchParams}catch{return!1}}()||typeof WeakMap>"u")&&s.push(w.e(2214).then(w.t.bind(w,4144,23)))}return Promise.all(s)}().then(()=>((s,c)=>typeof window>"u"?Promise.resolve():(0,te.p)().then(()=>(et(),(0,te.b)(JSON.parse('[["ion-menu_3",[[33,"ion-menu-button",{"color":[513],"disabled":[4],"menu":[1],"autoHide":[4,"auto-hide"],"type":[1],"visible":[32]},[[16,"ionMenuChange","visibilityChanged"],[16,"ionSplitPaneVisible","visibilityChanged"]]],[33,"ion-menu",{"contentId":[513,"content-id"],"menuId":[513,"menu-id"],"type":[1025],"disabled":[1028],"side":[513],"swipeGesture":[4,"swipe-gesture"],"maxEdgeStart":[2,"max-edge-start"],"isPaneVisible":[32],"isEndSide":[32],"isOpen":[64],"isActive":[64],"open":[64],"close":[64],"toggle":[64],"setOpen":[64]},[[16,"ionSplitPaneVisible","onSplitPaneChanged"],[2,"click","onBackdropClick"],[0,"keydown","onKeydown"]]],[1,"ion-menu-toggle",{"menu":[1],"autoHide":[4,"auto-hide"],"visible":[32]},[[16,"ionMenuChange","visibilityChanged"],[16,"ionSplitPaneVisible","visibilityChanged"]]]]],["ion-fab_3",[[33,"ion-fab-button",{"color":[513],"activated":[4],"disabled":[4],"download":[1],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1],"show":[4],"translucent":[4],"type":[1],"size":[1],"closeIcon":[1,"close-icon"]}],[1,"ion-fab",{"horizontal":[1],"vertical":[1],"edge":[4],"activated":[1028],"close":[64],"toggle":[64]}],[1,"ion-fab-list",{"activated":[4],"side":[1]}]]],["ion-refresher_2",[[0,"ion-refresher-content",{"pullingIcon":[1025,"pulling-icon"],"pullingText":[1,"pulling-text"],"refreshingSpinner":[1025,"refreshing-spinner"],"refreshingText":[1,"refreshing-text"]}],[32,"ion-refresher",{"pullMin":[2,"pull-min"],"pullMax":[2,"pull-max"],"closeDuration":[1,"close-duration"],"snapbackDuration":[1,"snapback-duration"],"pullFactor":[2,"pull-factor"],"disabled":[4],"nativeRefresher":[32],"state":[32],"complete":[64],"cancel":[64],"getProgress":[64]}]]],["ion-back-button",[[33,"ion-back-button",{"color":[513],"defaultHref":[1025,"default-href"],"disabled":[516],"icon":[1],"text":[1],"type":[1],"routerAnimation":[16]}]]],["ion-toast",[[33,"ion-toast",{"overlayIndex":[2,"overlay-index"],"color":[513],"enterAnimation":[16],"leaveAnimation":[16],"cssClass":[1,"css-class"],"duration":[2],"header":[1],"message":[1],"keyboardClose":[4,"keyboard-close"],"position":[1],"buttons":[16],"translucent":[4],"animated":[4],"icon":[1],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-card_5",[[33,"ion-card",{"color":[513],"button":[4],"type":[1],"disabled":[4],"download":[1],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1]}],[32,"ion-card-content"],[33,"ion-card-header",{"color":[513],"translucent":[4]}],[33,"ion-card-subtitle",{"color":[513]}],[33,"ion-card-title",{"color":[513]}]]],["ion-item-option_3",[[33,"ion-item-option",{"color":[513],"disabled":[4],"download":[1],"expandable":[4],"href":[1],"rel":[1],"target":[1],"type":[1]}],[32,"ion-item-options",{"side":[1],"fireSwipeEvent":[64]}],[0,"ion-item-sliding",{"disabled":[4],"state":[32],"getOpenAmount":[64],"getSlidingRatio":[64],"open":[64],"close":[64],"closeOpened":[64]}]]],["ion-accordion_2",[[49,"ion-accordion",{"value":[1],"disabled":[4],"readonly":[4],"toggleIcon":[1,"toggle-icon"],"toggleIconSlot":[1,"toggle-icon-slot"],"state":[32],"isNext":[32],"isPrevious":[32]}],[33,"ion-accordion-group",{"animated":[4],"multiple":[4],"value":[1025],"disabled":[4],"readonly":[4],"expand":[1],"requestAccordionToggle":[64],"getAccordions":[64]},[[0,"keydown","onKeydown"]]]]],["ion-breadcrumb_2",[[33,"ion-breadcrumb",{"collapsed":[4],"last":[4],"showCollapsedIndicator":[4,"show-collapsed-indicator"],"color":[1],"active":[4],"disabled":[4],"download":[1],"href":[1],"rel":[1],"separator":[4],"target":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16]}],[33,"ion-breadcrumbs",{"color":[1],"maxItems":[2,"max-items"],"itemsBeforeCollapse":[2,"items-before-collapse"],"itemsAfterCollapse":[2,"items-after-collapse"],"collapsed":[32],"activeChanged":[32]},[[0,"collapsedClick","onCollapsedClick"]]]]],["ion-infinite-scroll_2",[[32,"ion-infinite-scroll-content",{"loadingSpinner":[1025,"loading-spinner"],"loadingText":[1,"loading-text"]}],[0,"ion-infinite-scroll",{"threshold":[1],"disabled":[4],"position":[1],"isLoading":[32],"complete":[64]}]]],["ion-reorder_2",[[33,"ion-reorder",null,[[2,"click","onClick"]]],[0,"ion-reorder-group",{"disabled":[4],"state":[32],"complete":[64]}]]],["ion-segment_2",[[33,"ion-segment-button",{"disabled":[4],"layout":[1],"type":[1],"value":[1],"checked":[32]}],[33,"ion-segment",{"color":[513],"disabled":[4],"scrollable":[4],"swipeGesture":[4,"swipe-gesture"],"value":[1025],"selectOnFocus":[4,"select-on-focus"],"activated":[32]},[[0,"keydown","onKeyDown"]]]]],["ion-tab-bar_2",[[33,"ion-tab-button",{"disabled":[4],"download":[1],"href":[1],"rel":[1],"layout":[1025],"selected":[1028],"tab":[1],"target":[1]},[[8,"ionTabBarChanged","onTabBarChanged"]]],[33,"ion-tab-bar",{"color":[513],"selectedTab":[1,"selected-tab"],"translucent":[4],"keyboardVisible":[32]}]]],["ion-chip",[[1,"ion-chip",{"color":[513],"outline":[4],"disabled":[4]}]]],["ion-datetime-button",[[33,"ion-datetime-button",{"color":[513],"disabled":[516],"datetime":[1],"datetimePresentation":[32],"dateText":[32],"timeText":[32],"datetimeActive":[32],"selectedButton":[32]}]]],["ion-searchbar",[[34,"ion-searchbar",{"color":[513],"animated":[4],"autocomplete":[1],"autocorrect":[1],"cancelButtonIcon":[1,"cancel-button-icon"],"cancelButtonText":[1,"cancel-button-text"],"clearIcon":[1,"clear-icon"],"debounce":[2],"disabled":[4],"inputmode":[1],"enterkeyhint":[1],"placeholder":[1],"searchIcon":[1,"search-icon"],"showCancelButton":[1,"show-cancel-button"],"showClearButton":[1,"show-clear-button"],"spellcheck":[4],"type":[1],"value":[1025],"focused":[32],"noAnimate":[32],"setFocus":[64],"getInputElement":[64]}]]],["ion-toggle",[[33,"ion-toggle",{"color":[513],"name":[1],"checked":[1028],"disabled":[4],"value":[1],"enableOnOffLabels":[4,"enable-on-off-labels"],"activated":[32]}]]],["ion-nav_2",[[1,"ion-nav",{"delegate":[16],"swipeGesture":[1028,"swipe-gesture"],"animated":[4],"animation":[16],"rootParams":[16],"root":[1],"push":[64],"insert":[64],"insertPages":[64],"pop":[64],"popTo":[64],"popToRoot":[64],"removeIndex":[64],"setRoot":[64],"setPages":[64],"setRouteId":[64],"getRouteId":[64],"getActive":[64],"getByIndex":[64],"canGoBack":[64],"getPrevious":[64]}],[0,"ion-nav-link",{"component":[1],"componentProps":[16],"routerDirection":[1,"router-direction"],"routerAnimation":[16]}]]],["ion-input",[[34,"ion-input",{"fireFocusEvents":[4,"fire-focus-events"],"color":[513],"accept":[1],"autocapitalize":[1],"autocomplete":[1],"autocorrect":[1],"autofocus":[4],"clearInput":[4,"clear-input"],"clearOnEdit":[4,"clear-on-edit"],"debounce":[2],"disabled":[4],"enterkeyhint":[1],"inputmode":[1],"max":[8],"maxlength":[2],"min":[8],"minlength":[2],"multiple":[4],"name":[1],"pattern":[1],"placeholder":[1],"readonly":[4],"required":[4],"spellcheck":[4],"step":[1],"size":[2],"type":[1],"value":[1032],"hasFocus":[32],"setFocus":[64],"setBlur":[64],"getInputElement":[64]}]]],["ion-textarea",[[34,"ion-textarea",{"fireFocusEvents":[4,"fire-focus-events"],"color":[513],"autocapitalize":[1],"autofocus":[4],"clearOnEdit":[1028,"clear-on-edit"],"debounce":[2],"disabled":[4],"inputmode":[1],"enterkeyhint":[1],"maxlength":[2],"minlength":[2],"name":[1],"placeholder":[1],"readonly":[4],"required":[4],"spellcheck":[4],"cols":[2],"rows":[2],"wrap":[1],"autoGrow":[516,"auto-grow"],"value":[1025],"hasFocus":[32],"setFocus":[64],"setBlur":[64],"getInputElement":[64]}]]],["ion-backdrop",[[33,"ion-backdrop",{"visible":[4],"tappable":[4],"stopPropagation":[4,"stop-propagation"]},[[2,"click","onMouseDown"]]]]],["ion-loading",[[34,"ion-loading",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"message":[1],"cssClass":[1,"css-class"],"duration":[2],"backdropDismiss":[4,"backdrop-dismiss"],"showBackdrop":[4,"show-backdrop"],"spinner":[1025],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-modal",[[33,"ion-modal",{"hasController":[4,"has-controller"],"overlayIndex":[2,"overlay-index"],"delegate":[16],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"breakpoints":[16],"initialBreakpoint":[2,"initial-breakpoint"],"backdropBreakpoint":[2,"backdrop-breakpoint"],"handle":[4],"handleBehavior":[1,"handle-behavior"],"component":[1],"componentProps":[16],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"showBackdrop":[4,"show-backdrop"],"animated":[4],"swipeToClose":[4,"swipe-to-close"],"presentingElement":[16],"htmlAttributes":[16],"isOpen":[4,"is-open"],"trigger":[1],"keepContentsMounted":[4,"keep-contents-mounted"],"canDismiss":[4,"can-dismiss"],"presented":[32],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64],"setCurrentBreakpoint":[64],"getCurrentBreakpoint":[64]}]]],["ion-route_4",[[0,"ion-route",{"url":[1],"component":[1],"componentProps":[16],"beforeLeave":[16],"beforeEnter":[16]}],[0,"ion-route-redirect",{"from":[1],"to":[1]}],[0,"ion-router",{"root":[1],"useHash":[4,"use-hash"],"canTransition":[64],"push":[64],"back":[64],"printDebug":[64],"navChanged":[64]},[[8,"popstate","onPopState"],[4,"ionBackButton","onBackButton"]]],[1,"ion-router-link",{"color":[513],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1]}]]],["ion-avatar_3",[[33,"ion-avatar"],[33,"ion-badge",{"color":[513]}],[1,"ion-thumbnail"]]],["ion-col_3",[[1,"ion-col",{"offset":[1],"offsetXs":[1,"offset-xs"],"offsetSm":[1,"offset-sm"],"offsetMd":[1,"offset-md"],"offsetLg":[1,"offset-lg"],"offsetXl":[1,"offset-xl"],"pull":[1],"pullXs":[1,"pull-xs"],"pullSm":[1,"pull-sm"],"pullMd":[1,"pull-md"],"pullLg":[1,"pull-lg"],"pullXl":[1,"pull-xl"],"push":[1],"pushXs":[1,"push-xs"],"pushSm":[1,"push-sm"],"pushMd":[1,"push-md"],"pushLg":[1,"push-lg"],"pushXl":[1,"push-xl"],"size":[1],"sizeXs":[1,"size-xs"],"sizeSm":[1,"size-sm"],"sizeMd":[1,"size-md"],"sizeLg":[1,"size-lg"],"sizeXl":[1,"size-xl"]},[[9,"resize","onResize"]]],[1,"ion-grid",{"fixed":[4]}],[1,"ion-row"]]],["ion-slide_2",[[0,"ion-slide"],[36,"ion-slides",{"options":[8],"pager":[4],"scrollbar":[4],"update":[64],"updateAutoHeight":[64],"slideTo":[64],"slideNext":[64],"slidePrev":[64],"getActiveIndex":[64],"getPreviousIndex":[64],"length":[64],"isEnd":[64],"isBeginning":[64],"startAutoplay":[64],"stopAutoplay":[64],"lockSwipeToNext":[64],"lockSwipeToPrev":[64],"lockSwipes":[64],"getSwiper":[64]}]]],["ion-tab_2",[[1,"ion-tab",{"active":[1028],"delegate":[16],"tab":[1],"component":[1],"setActive":[64]}],[1,"ion-tabs",{"useRouter":[1028,"use-router"],"selectedTab":[32],"select":[64],"getTab":[64],"getSelected":[64],"setRouteId":[64],"getRouteId":[64]}]]],["ion-img",[[1,"ion-img",{"alt":[1],"src":[1],"loadSrc":[32],"loadError":[32]}]]],["ion-progress-bar",[[33,"ion-progress-bar",{"type":[1],"reversed":[4],"value":[2],"buffer":[2],"color":[513]}]]],["ion-range",[[33,"ion-range",{"color":[513],"debounce":[2],"name":[1],"dualKnobs":[4,"dual-knobs"],"min":[2],"max":[2],"pin":[4],"pinFormatter":[16],"snaps":[4],"step":[2],"ticks":[4],"activeBarStart":[1026,"active-bar-start"],"disabled":[4],"value":[1026],"ratioA":[32],"ratioB":[32],"pressedKnob":[32]}]]],["ion-split-pane",[[33,"ion-split-pane",{"contentId":[513,"content-id"],"disabled":[4],"when":[8],"visible":[32]}]]],["ion-text",[[1,"ion-text",{"color":[513]}]]],["ion-virtual-scroll",[[0,"ion-virtual-scroll",{"approxItemHeight":[2,"approx-item-height"],"approxHeaderHeight":[2,"approx-header-height"],"approxFooterHeight":[2,"approx-footer-height"],"headerFn":[16],"footerFn":[16],"items":[16],"itemHeight":[16],"headerHeight":[16],"footerHeight":[16],"renderItem":[16],"renderHeader":[16],"renderFooter":[16],"nodeRender":[16],"domRender":[16],"totalHeight":[32],"positionForItem":[64],"checkRange":[64],"checkEnd":[64]},[[9,"resize","onResize"]]]]],["ion-picker-column-internal",[[33,"ion-picker-column-internal",{"items":[16],"value":[1032],"color":[513],"numericInput":[4,"numeric-input"],"isActive":[32],"scrollActiveItemIntoView":[64],"setValue":[64]}]]],["ion-picker-internal",[[33,"ion-picker-internal",null,[[1,"touchstart","preventTouchStartPropagation"]]]]],["ion-radio_2",[[33,"ion-radio",{"color":[513],"name":[1],"disabled":[4],"value":[8],"checked":[32],"buttonTabindex":[32],"setFocus":[64],"setButtonTabindex":[64]}],[0,"ion-radio-group",{"allowEmptySelection":[4,"allow-empty-selection"],"name":[1],"value":[1032]},[[4,"keydown","onKeydown"]]]]],["ion-ripple-effect",[[1,"ion-ripple-effect",{"type":[1],"addRipple":[64]}]]],["ion-button_2",[[33,"ion-button",{"color":[513],"buttonType":[1025,"button-type"],"disabled":[516],"expand":[513],"fill":[1537],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"download":[1],"href":[1],"rel":[1],"shape":[513],"size":[513],"strong":[4],"target":[1],"type":[1],"form":[1]}],[1,"ion-icon",{"mode":[1025],"color":[1],"ios":[1],"md":[1],"flipRtl":[4,"flip-rtl"],"name":[513],"src":[1],"icon":[8],"size":[1],"lazy":[4],"sanitize":[4],"svgContent":[32],"isVisible":[32],"ariaLabel":[32]}]]],["ion-datetime_3",[[33,"ion-datetime",{"color":[1],"name":[1],"disabled":[4],"readonly":[4],"isDateEnabled":[16],"min":[1025],"max":[1025],"presentation":[1],"cancelText":[1,"cancel-text"],"doneText":[1,"done-text"],"clearText":[1,"clear-text"],"yearValues":[8,"year-values"],"monthValues":[8,"month-values"],"dayValues":[8,"day-values"],"hourValues":[8,"hour-values"],"minuteValues":[8,"minute-values"],"locale":[1],"firstDayOfWeek":[2,"first-day-of-week"],"titleSelectedDatesFormatter":[16],"multiple":[4],"value":[1025],"showDefaultTitle":[4,"show-default-title"],"showDefaultButtons":[4,"show-default-buttons"],"showClearButton":[4,"show-clear-button"],"showDefaultTimeLabel":[4,"show-default-time-label"],"hourCycle":[1,"hour-cycle"],"size":[1],"preferWheel":[4,"prefer-wheel"],"showMonthAndYear":[32],"activeParts":[32],"workingParts":[32],"isPresented":[32],"isTimePopoverOpen":[32],"confirm":[64],"reset":[64],"cancel":[64]}],[34,"ion-picker",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"buttons":[16],"columns":[16],"cssClass":[1,"css-class"],"duration":[2],"showBackdrop":[4,"show-backdrop"],"backdropDismiss":[4,"backdrop-dismiss"],"animated":[4],"htmlAttributes":[16],"presented":[32],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64],"getColumn":[64]}],[32,"ion-picker-column",{"col":[16]}]]],["ion-action-sheet",[[34,"ion-action-sheet",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"buttons":[16],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"header":[1],"subHeader":[1,"sub-header"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-alert",[[34,"ion-alert",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"cssClass":[1,"css-class"],"header":[1],"subHeader":[1,"sub-header"],"message":[1],"buttons":[16],"inputs":[1040],"backdropDismiss":[4,"backdrop-dismiss"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]},[[4,"keydown","onKeydown"]]]]],["ion-popover",[[33,"ion-popover",{"hasController":[4,"has-controller"],"delegate":[16],"overlayIndex":[2,"overlay-index"],"enterAnimation":[16],"leaveAnimation":[16],"component":[1],"componentProps":[16],"keyboardClose":[4,"keyboard-close"],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"event":[8],"showBackdrop":[4,"show-backdrop"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"triggerAction":[1,"trigger-action"],"trigger":[1],"size":[1],"dismissOnSelect":[4,"dismiss-on-select"],"reference":[1],"side":[1],"alignment":[1025],"arrow":[4],"isOpen":[4,"is-open"],"keyboardEvents":[4,"keyboard-events"],"keepContentsMounted":[4,"keep-contents-mounted"],"presented":[32],"presentFromTrigger":[64],"present":[64],"dismiss":[64],"getParentPopover":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-checkbox",[[33,"ion-checkbox",{"color":[513],"name":[1],"checked":[1028],"indeterminate":[1028],"disabled":[4],"value":[8]}]]],["ion-select_3",[[33,"ion-select",{"disabled":[4],"cancelText":[1,"cancel-text"],"okText":[1,"ok-text"],"placeholder":[1],"name":[1],"selectedText":[1,"selected-text"],"multiple":[4],"interface":[1],"interfaceOptions":[8,"interface-options"],"compareWith":[1,"compare-with"],"value":[1032],"isExpanded":[32],"open":[64]}],[1,"ion-select-option",{"disabled":[4],"value":[8]}],[34,"ion-select-popover",{"header":[1],"subHeader":[1,"sub-header"],"message":[1],"multiple":[4],"options":[16]},[[0,"ionChange","onSelect"]]]]],["ion-app_8",[[0,"ion-app",{"setFocus":[64]}],[1,"ion-content",{"color":[513],"fullscreen":[4],"forceOverscroll":[1028,"force-overscroll"],"scrollX":[4,"scroll-x"],"scrollY":[4,"scroll-y"],"scrollEvents":[4,"scroll-events"],"getScrollElement":[64],"getBackgroundElement":[64],"scrollToTop":[64],"scrollToBottom":[64],"scrollByPoint":[64],"scrollToPoint":[64]},[[8,"appload","onAppLoad"]]],[36,"ion-footer",{"collapse":[1],"translucent":[4],"keyboardVisible":[32]}],[36,"ion-header",{"collapse":[1],"translucent":[4]}],[1,"ion-router-outlet",{"mode":[1025],"delegate":[16],"animated":[4],"animation":[16],"swipeHandler":[16],"commit":[64],"setRouteId":[64],"getRouteId":[64]}],[33,"ion-title",{"color":[513],"size":[1]}],[33,"ion-toolbar",{"color":[513]},[[0,"ionStyle","childrenStyle"]]],[34,"ion-buttons",{"collapse":[4]}]]],["ion-spinner",[[1,"ion-spinner",{"color":[513],"duration":[2],"name":[1],"paused":[4]}]]],["ion-item_8",[[33,"ion-item-divider",{"color":[513],"sticky":[4]}],[32,"ion-item-group"],[1,"ion-skeleton-text",{"animated":[4]}],[32,"ion-list",{"lines":[1],"inset":[4],"closeSlidingItems":[64]}],[33,"ion-list-header",{"color":[513],"lines":[1]}],[49,"ion-item",{"color":[513],"button":[4],"detail":[4],"detailIcon":[1,"detail-icon"],"disabled":[4],"download":[1],"fill":[1],"shape":[1],"href":[1],"rel":[1],"lines":[1],"counter":[4],"routerAnimation":[16],"routerDirection":[1,"router-direction"],"target":[1],"type":[1],"counterFormatter":[16],"multipleInputs":[32],"focusable":[32],"counterString":[32]},[[0,"ionChange","handleIonChange"],[0,"ionColor","labelColorChanged"],[0,"ionStyle","itemStyle"]]],[34,"ion-label",{"color":[513],"position":[1],"noAnimate":[32]}],[33,"ion-note",{"color":[513]}]]]]'),c))))(0,{exclude:["ion-tabs","ion-tab"],syncQueue:!0,raf:Pt,jmp:Me=>a.runOutsideAngular(Me),ael(Me,Je,at,Dt){Me[L](Je,at,Dt)},rel(Me,Je,at,Dt){Me.removeEventListener(Je,at,Dt)}}))}};let C=(()=>{class s{static forRoot(a){return{ngModule:s,providers:[{provide:Fr,useValue:a},{provide:o.ip1,useFactory:ro,multi:!0,deps:[Fr,ze.K0,o.R0b]}]}}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275mod=o.oAB({type:s}),s.\u0275inj=o.cJS({providers:[Or,Fo,wo],imports:[[ze.ez]]}),s})()},8834:(Qe,Fe,w)=>{"use strict";w.d(Fe,{c:()=>j});var o=w(5730),x=w(3457);let N;const R=P=>P.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),W=P=>{if(void 0===N){const pe=void 0!==P.style.webkitAnimationName;N=void 0===P.style.animationName&&pe?"-webkit-":""}return N},M=(P,K,pe)=>{const ke=K.startsWith("animation")?W(P):"";P.style.setProperty(ke+K,pe)},U=(P,K)=>{const pe=K.startsWith("animation")?W(P):"";P.style.removeProperty(pe+K)},G=[],E=(P=[],K)=>{if(void 0!==K){const pe=Array.isArray(K)?K:[K];return[...P,...pe]}return P},j=P=>{let K,pe,ke,Te,ie,Be,Q,ue,de,ne,Ee,et,Ue,re=[],oe=[],be=[],Ne=!1,T={},k=[],O=[],te={},ce=0,Ae=!1,De=!1,Ce=!0,ze=!1,dt=!0,St=!1;const Ke=P,nn=[],wt=[],Rt=[],Kt=[],pn=[],Pt=[],Ut=[],it=[],Xt=[],kt=[],Vt="function"==typeof AnimationEffect||void 0!==x.w&&"function"==typeof x.w.AnimationEffect,rn="function"==typeof Element&&"function"==typeof Element.prototype.animate&&Vt,en=()=>kt,Et=(X,le)=>((le?.oneTimeCallback?wt:nn).push({c:X,o:le}),Ue),Ct=()=>{if(rn)kt.forEach(X=>{X.cancel()}),kt.length=0;else{const X=Rt.slice();(0,o.r)(()=>{X.forEach(le=>{U(le,"animation-name"),U(le,"animation-duration"),U(le,"animation-timing-function"),U(le,"animation-iteration-count"),U(le,"animation-delay"),U(le,"animation-play-state"),U(le,"animation-fill-mode"),U(le,"animation-direction")})})}},qe=()=>{pn.forEach(X=>{X?.parentNode&&X.parentNode.removeChild(X)}),pn.length=0},He=()=>void 0!==ie?ie:Q?Q.getFill():"both",Ye=()=>void 0!==de?de:void 0!==Be?Be:Q?Q.getDirection():"normal",pt=()=>Ae?"linear":void 0!==ke?ke:Q?Q.getEasing():"linear",vt=()=>De?0:void 0!==ne?ne:void 0!==pe?pe:Q?Q.getDuration():0,Ht=()=>void 0!==Te?Te:Q?Q.getIterations():1,_t=()=>void 0!==Ee?Ee:void 0!==K?K:Q?Q.getDelay():0,sn=()=>{0!==ce&&(ce--,0===ce&&((()=>{Qt(),it.forEach(Re=>Re()),Xt.forEach(Re=>Re());const X=Ce?1:0,le=k,Ie=O,je=te;Rt.forEach(Re=>{const ot=Re.classList;le.forEach(st=>ot.add(st)),Ie.forEach(st=>ot.remove(st));for(const st in je)je.hasOwnProperty(st)&&M(Re,st,je[st])}),nn.forEach(Re=>Re.c(X,Ue)),wt.forEach(Re=>Re.c(X,Ue)),wt.length=0,dt=!0,Ce&&(ze=!0),Ce=!0})(),Q&&Q.animationFinish()))},dn=(X=!0)=>{qe();const le=(P=>(P.forEach(K=>{for(const pe in K)if(K.hasOwnProperty(pe)){const ke=K[pe];if("easing"===pe)K["animation-timing-function"]=ke,delete K[pe];else{const Te=R(pe);Te!==pe&&(K[Te]=ke,delete K[pe])}}}),P))(re);Rt.forEach(Ie=>{if(le.length>0){const je=((P=[])=>P.map(K=>{const pe=K.offset,ke=[];for(const Te in K)K.hasOwnProperty(Te)&&"offset"!==Te&&ke.push(`${Te}: ${K[Te]};`);return`${100*pe}% { ${ke.join(" ")} }`}).join(" "))(le);et=void 0!==P?P:(P=>{let K=G.indexOf(P);return K<0&&(K=G.push(P)-1),`ion-animation-${K}`})(je);const Re=((P,K,pe)=>{var ke;const Te=(P=>{const K=void 0!==P.getRootNode?P.getRootNode():P;return K.head||K})(pe),ie=W(pe),Be=Te.querySelector("#"+P);if(Be)return Be;const re=(null!==(ke=pe.ownerDocument)&&void 0!==ke?ke:document).createElement("style");return re.id=P,re.textContent=`@${ie}keyframes ${P} { ${K} } @${ie}keyframes ${P}-alt { ${K} }`,Te.appendChild(re),re})(et,je,Ie);pn.push(Re),M(Ie,"animation-duration",`${vt()}ms`),M(Ie,"animation-timing-function",pt()),M(Ie,"animation-delay",`${_t()}ms`),M(Ie,"animation-fill-mode",He()),M(Ie,"animation-direction",Ye());const ot=Ht()===1/0?"infinite":Ht().toString();M(Ie,"animation-iteration-count",ot),M(Ie,"animation-play-state","paused"),X&&M(Ie,"animation-name",`${Re.id}-alt`),(0,o.r)(()=>{M(Ie,"animation-name",Re.id||null)})}})},sr=(X=!0)=>{(()=>{Pt.forEach(je=>je()),Ut.forEach(je=>je());const X=oe,le=be,Ie=T;Rt.forEach(je=>{const Re=je.classList;X.forEach(ot=>Re.add(ot)),le.forEach(ot=>Re.remove(ot));for(const ot in Ie)Ie.hasOwnProperty(ot)&&M(je,ot,Ie[ot])})})(),re.length>0&&(rn?(Rt.forEach(X=>{const le=X.animate(re,{id:Ke,delay:_t(),duration:vt(),easing:pt(),iterations:Ht(),fill:He(),direction:Ye()});le.pause(),kt.push(le)}),kt.length>0&&(kt[0].onfinish=()=>{sn()})):dn(X)),Ne=!0},$n=X=>{if(X=Math.min(Math.max(X,0),.9999),rn)kt.forEach(le=>{le.currentTime=le.effect.getComputedTiming().delay+vt()*X,le.pause()});else{const le=`-${vt()*X}ms`;Rt.forEach(Ie=>{re.length>0&&(M(Ie,"animation-delay",le),M(Ie,"animation-play-state","paused"))})}},Tn=X=>{kt.forEach(le=>{le.effect.updateTiming({delay:_t(),duration:vt(),easing:pt(),iterations:Ht(),fill:He(),direction:Ye()})}),void 0!==X&&$n(X)},xn=(X=!0,le)=>{(0,o.r)(()=>{Rt.forEach(Ie=>{M(Ie,"animation-name",et||null),M(Ie,"animation-duration",`${vt()}ms`),M(Ie,"animation-timing-function",pt()),M(Ie,"animation-delay",void 0!==le?`-${le*vt()}ms`:`${_t()}ms`),M(Ie,"animation-fill-mode",He()||null),M(Ie,"animation-direction",Ye()||null);const je=Ht()===1/0?"infinite":Ht().toString();M(Ie,"animation-iteration-count",je),X&&M(Ie,"animation-name",`${et}-alt`),(0,o.r)(()=>{M(Ie,"animation-name",et||null)})})})},vn=(X=!1,le=!0,Ie)=>(X&&Kt.forEach(je=>{je.update(X,le,Ie)}),rn?Tn(Ie):xn(le,Ie),Ue),gr=()=>{Ne&&(rn?kt.forEach(X=>{X.pause()}):Rt.forEach(X=>{M(X,"animation-play-state","paused")}),St=!0)},fn=()=>{ue=void 0,sn()},Qt=()=>{ue&&clearTimeout(ue)},F=X=>new Promise(le=>{X?.sync&&(De=!0,Et(()=>De=!1,{oneTimeCallback:!0})),Ne||sr(),ze&&(rn?($n(0),Tn()):xn(),ze=!1),dt&&(ce=Kt.length+1,dt=!1),Et(()=>le(),{oneTimeCallback:!0}),Kt.forEach(Ie=>{Ie.play()}),rn?(kt.forEach(X=>{X.play()}),(0===re.length||0===Rt.length)&&sn()):(()=>{if(Qt(),(0,o.r)(()=>{Rt.forEach(X=>{re.length>0&&M(X,"animation-play-state","running")})}),0===re.length||0===Rt.length)sn();else{const X=_t()||0,le=vt()||0,Ie=Ht()||1;isFinite(Ie)&&(ue=setTimeout(fn,X+le*Ie+100)),((P,K)=>{let pe;const ke={passive:!0},ie=Be=>{P===Be.target&&(pe&&pe(),Qt(),(0,o.r)(()=>{Rt.forEach(X=>{U(X,"animation-duration"),U(X,"animation-delay"),U(X,"animation-play-state")}),(0,o.r)(sn)}))};P&&(P.addEventListener("webkitAnimationEnd",ie,ke),P.addEventListener("animationend",ie,ke),pe=()=>{P.removeEventListener("webkitAnimationEnd",ie,ke),P.removeEventListener("animationend",ie,ke)})})(Rt[0])}})(),St=!1}),he=(X,le)=>{const Ie=re[0];return void 0===Ie||void 0!==Ie.offset&&0!==Ie.offset?re=[{offset:0,[X]:le},...re]:Ie[X]=le,Ue};return Ue={parentAnimation:Q,elements:Rt,childAnimations:Kt,id:Ke,animationFinish:sn,from:he,to:(X,le)=>{const Ie=re[re.length-1];return void 0===Ie||void 0!==Ie.offset&&1!==Ie.offset?re=[...re,{offset:1,[X]:le}]:Ie[X]=le,Ue},fromTo:(X,le,Ie)=>he(X,le).to(X,Ie),parent:X=>(Q=X,Ue),play:F,pause:()=>(Kt.forEach(X=>{X.pause()}),gr(),Ue),stop:()=>{Kt.forEach(X=>{X.stop()}),Ne&&(Ct(),Ne=!1),Ae=!1,De=!1,dt=!0,de=void 0,ne=void 0,Ee=void 0,ce=0,ze=!1,Ce=!0,St=!1},destroy:X=>(Kt.forEach(le=>{le.destroy(X)}),(X=>{Ct(),X&&qe()})(X),Rt.length=0,Kt.length=0,re.length=0,nn.length=0,wt.length=0,Ne=!1,dt=!0,Ue),keyframes:X=>{const le=re!==X;return re=X,le&&(X=>{rn?en().forEach(le=>{if(le.effect.setKeyframes)le.effect.setKeyframes(X);else{const Ie=new KeyframeEffect(le.effect.target,X,le.effect.getTiming());le.effect=Ie}}):dn()})(re),Ue},addAnimation:X=>{if(null!=X)if(Array.isArray(X))for(const le of X)le.parent(Ue),Kt.push(le);else X.parent(Ue),Kt.push(X);return Ue},addElement:X=>{if(null!=X)if(1===X.nodeType)Rt.push(X);else if(X.length>=0)for(let le=0;le(ie=X,vn(!0),Ue),direction:X=>(Be=X,vn(!0),Ue),iterations:X=>(Te=X,vn(!0),Ue),duration:X=>(!rn&&0===X&&(X=1),pe=X,vn(!0),Ue),easing:X=>(ke=X,vn(!0),Ue),delay:X=>(K=X,vn(!0),Ue),getWebAnimations:en,getKeyframes:()=>re,getFill:He,getDirection:Ye,getDelay:_t,getIterations:Ht,getEasing:pt,getDuration:vt,afterAddRead:X=>(it.push(X),Ue),afterAddWrite:X=>(Xt.push(X),Ue),afterClearStyles:(X=[])=>{for(const le of X)te[le]="";return Ue},afterStyles:(X={})=>(te=X,Ue),afterRemoveClass:X=>(O=E(O,X),Ue),afterAddClass:X=>(k=E(k,X),Ue),beforeAddRead:X=>(Pt.push(X),Ue),beforeAddWrite:X=>(Ut.push(X),Ue),beforeClearStyles:(X=[])=>{for(const le of X)T[le]="";return Ue},beforeStyles:(X={})=>(T=X,Ue),beforeRemoveClass:X=>(be=E(be,X),Ue),beforeAddClass:X=>(oe=E(oe,X),Ue),onFinish:Et,isRunning:()=>0!==ce&&!St,progressStart:(X=!1,le)=>(Kt.forEach(Ie=>{Ie.progressStart(X,le)}),gr(),Ae=X,Ne||sr(),vn(!1,!0,le),Ue),progressStep:X=>(Kt.forEach(le=>{le.progressStep(X)}),$n(X),Ue),progressEnd:(X,le,Ie)=>(Ae=!1,Kt.forEach(je=>{je.progressEnd(X,le,Ie)}),void 0!==Ie&&(ne=Ie),ze=!1,Ce=!0,0===X?(de="reverse"===Ye()?"normal":"reverse","reverse"===de&&(Ce=!1),rn?(vn(),$n(1-le)):(Ee=(1-le)*vt()*-1,vn(!1,!1))):1===X&&(rn?(vn(),$n(le)):(Ee=le*vt()*-1,vn(!1,!1))),void 0!==X&&(Et(()=>{ne=void 0,de=void 0,Ee=void 0},{oneTimeCallback:!0}),Q||F()),Ue)}}},4349:(Qe,Fe,w)=>{"use strict";w.d(Fe,{G:()=>R});class x{constructor(M,U,_,Y,G){this.id=U,this.name=_,this.disableScroll=G,this.priority=1e6*Y+U,this.ctrl=M}canStart(){return!!this.ctrl&&this.ctrl.canStart(this.name)}start(){return!!this.ctrl&&this.ctrl.start(this.name,this.id,this.priority)}capture(){if(!this.ctrl)return!1;const M=this.ctrl.capture(this.name,this.id,this.priority);return M&&this.disableScroll&&this.ctrl.disableScroll(this.id),M}release(){this.ctrl&&(this.ctrl.release(this.id),this.disableScroll&&this.ctrl.enableScroll(this.id))}destroy(){this.release(),this.ctrl=void 0}}class N{constructor(M,U,_,Y){this.id=U,this.disable=_,this.disableScroll=Y,this.ctrl=M}block(){if(this.ctrl){if(this.disable)for(const M of this.disable)this.ctrl.disableGesture(M,this.id);this.disableScroll&&this.ctrl.disableScroll(this.id)}}unblock(){if(this.ctrl){if(this.disable)for(const M of this.disable)this.ctrl.enableGesture(M,this.id);this.disableScroll&&this.ctrl.enableScroll(this.id)}}destroy(){this.unblock(),this.ctrl=void 0}}const ge="backdrop-no-scroll",R=new class o{constructor(){this.gestureId=0,this.requestedStart=new Map,this.disabledGestures=new Map,this.disabledScroll=new Set}createGesture(M){var U;return new x(this,this.newID(),M.name,null!==(U=M.priority)&&void 0!==U?U:0,!!M.disableScroll)}createBlocker(M={}){return new N(this,this.newID(),M.disable,!!M.disableScroll)}start(M,U,_){return this.canStart(M)?(this.requestedStart.set(U,_),!0):(this.requestedStart.delete(U),!1)}capture(M,U,_){if(!this.start(M,U,_))return!1;const Y=this.requestedStart;let G=-1e4;if(Y.forEach(Z=>{G=Math.max(G,Z)}),G===_){this.capturedId=U,Y.clear();const Z=new CustomEvent("ionGestureCaptured",{detail:{gestureName:M}});return document.dispatchEvent(Z),!0}return Y.delete(U),!1}release(M){this.requestedStart.delete(M),this.capturedId===M&&(this.capturedId=void 0)}disableGesture(M,U){let _=this.disabledGestures.get(M);void 0===_&&(_=new Set,this.disabledGestures.set(M,_)),_.add(U)}enableGesture(M,U){const _=this.disabledGestures.get(M);void 0!==_&&_.delete(U)}disableScroll(M){this.disabledScroll.add(M),1===this.disabledScroll.size&&document.body.classList.add(ge)}enableScroll(M){this.disabledScroll.delete(M),0===this.disabledScroll.size&&document.body.classList.remove(ge)}canStart(M){return!(void 0!==this.capturedId||this.isDisabled(M))}isCaptured(){return void 0!==this.capturedId}isScrollDisabled(){return this.disabledScroll.size>0}isDisabled(M){const U=this.disabledGestures.get(M);return!!(U&&U.size>0)}newID(){return this.gestureId++,this.gestureId}}},7593:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{MENU_BACK_BUTTON_PRIORITY:()=>R,OVERLAY_BACK_BUTTON_PRIORITY:()=>ge,blockHardwareBackButton:()=>x,startHardwareBackButton:()=>N});var o=w(5861);const x=()=>{document.addEventListener("backbutton",()=>{})},N=()=>{const W=document;let M=!1;W.addEventListener("backbutton",()=>{if(M)return;let U=0,_=[];const Y=new CustomEvent("ionBackButton",{bubbles:!1,detail:{register(S,B){_.push({priority:S,handler:B,id:U++})}}});W.dispatchEvent(Y);const G=function(){var S=(0,o.Z)(function*(B){try{if(B?.handler){const E=B.handler(Z);null!=E&&(yield E)}}catch(E){console.error(E)}});return function(E){return S.apply(this,arguments)}}(),Z=()=>{if(_.length>0){let S={priority:Number.MIN_SAFE_INTEGER,handler:()=>{},id:-1};_.forEach(B=>{B.priority>=S.priority&&(S=B)}),M=!0,_=_.filter(B=>B.id!==S.id),G(S).then(()=>M=!1)}};Z()})},ge=100,R=99},5730:(Qe,Fe,w)=>{"use strict";w.d(Fe,{a:()=>M,b:()=>U,c:()=>N,d:()=>B,e:()=>E,f:()=>S,g:()=>_,h:()=>Te,i:()=>W,j:()=>ge,k:()=>Z,l:()=>j,m:()=>G,n:()=>P,o:()=>ke,p:()=>pe,q:()=>ie,r:()=>Y,s:()=>Be,t:()=>o,u:()=>K});const o=(re,oe=0)=>new Promise(be=>{x(re,oe,be)}),x=(re,oe=0,be)=>{let Ne,Q;const T={passive:!0},O=()=>{Ne&&Ne()},te=ce=>{(void 0===ce||re===ce.target)&&(O(),be(ce))};return re&&(re.addEventListener("webkitTransitionEnd",te,T),re.addEventListener("transitionend",te,T),Q=setTimeout(te,oe+500),Ne=()=>{Q&&(clearTimeout(Q),Q=void 0),re.removeEventListener("webkitTransitionEnd",te,T),re.removeEventListener("transitionend",te,T)}),O},N=(re,oe)=>{re.componentOnReady?re.componentOnReady().then(be=>oe(be)):Y(()=>oe(re))},ge=(re,oe=[])=>{const be={};return oe.forEach(Ne=>{re.hasAttribute(Ne)&&(null!==re.getAttribute(Ne)&&(be[Ne]=re.getAttribute(Ne)),re.removeAttribute(Ne))}),be},R=["role","aria-activedescendant","aria-atomic","aria-autocomplete","aria-braillelabel","aria-brailleroledescription","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colindextext","aria-colspan","aria-controls","aria-current","aria-describedby","aria-description","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowindextext","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"],W=(re,oe)=>{let be=R;return oe&&oe.length>0&&(be=be.filter(Ne=>!oe.includes(Ne))),ge(re,be)},M=(re,oe,be,Ne)=>{var Q;if(typeof window<"u"){const k=null===(Q=window?.Ionic)||void 0===Q?void 0:Q.config;if(k){const O=k.get("_ael");if(O)return O(re,oe,be,Ne);if(k._ael)return k._ael(re,oe,be,Ne)}}return re.addEventListener(oe,be,Ne)},U=(re,oe,be,Ne)=>{var Q;if(typeof window<"u"){const k=null===(Q=window?.Ionic)||void 0===Q?void 0:Q.config;if(k){const O=k.get("_rel");if(O)return O(re,oe,be,Ne);if(k._rel)return k._rel(re,oe,be,Ne)}}return re.removeEventListener(oe,be,Ne)},_=(re,oe=re)=>re.shadowRoot||oe,Y=re=>"function"==typeof __zone_symbol__requestAnimationFrame?__zone_symbol__requestAnimationFrame(re):"function"==typeof requestAnimationFrame?requestAnimationFrame(re):setTimeout(re),G=re=>!!re.shadowRoot&&!!re.attachShadow,Z=re=>{const oe=re.closest("ion-item");return oe?oe.querySelector("ion-label"):null},S=re=>{if(re.focus(),re.classList.contains("ion-focusable")){const oe=re.closest("ion-app");oe&&oe.setFocus([re])}},B=(re,oe)=>{let be;const Ne=re.getAttribute("aria-labelledby"),Q=re.id;let T=null!==Ne&&""!==Ne.trim()?Ne:oe+"-lbl",k=null!==Ne&&""!==Ne.trim()?document.getElementById(Ne):Z(re);return k?(null===Ne&&(k.id=T),be=k.textContent,k.setAttribute("aria-hidden","true")):""!==Q.trim()&&(k=document.querySelector(`label[for="${Q}"]`),k&&(""!==k.id?T=k.id:k.id=T=`${Q}-lbl`,be=k.textContent)),{label:k,labelId:T,labelText:be}},E=(re,oe,be,Ne,Q)=>{if(re||G(oe)){let T=oe.querySelector("input.aux-input");T||(T=oe.ownerDocument.createElement("input"),T.type="hidden",T.classList.add("aux-input"),oe.appendChild(T)),T.disabled=Q,T.name=be,T.value=Ne||""}},j=(re,oe,be)=>Math.max(re,Math.min(oe,be)),P=(re,oe)=>{if(!re){const be="ASSERT: "+oe;throw console.error(be),new Error(be)}},K=re=>re.timeStamp||Date.now(),pe=re=>{if(re){const oe=re.changedTouches;if(oe&&oe.length>0){const be=oe[0];return{x:be.clientX,y:be.clientY}}if(void 0!==re.pageX)return{x:re.pageX,y:re.pageY}}return{x:0,y:0}},ke=re=>{const oe="rtl"===document.dir;switch(re){case"start":return oe;case"end":return!oe;default:throw new Error(`"${re}" is not a valid value for [side]. Use "start" or "end" instead.`)}},Te=(re,oe)=>{const be=re._original||re;return{_original:re,emit:ie(be.emit.bind(be),oe)}},ie=(re,oe=0)=>{let be;return(...Ne)=>{clearTimeout(be),be=setTimeout(re,oe,...Ne)}},Be=(re,oe)=>{if(re??(re={}),oe??(oe={}),re===oe)return!0;const be=Object.keys(re);if(be.length!==Object.keys(oe).length)return!1;for(const Ne of be)if(!(Ne in oe)||re[Ne]!==oe[Ne])return!1;return!0}},4292:(Qe,Fe,w)=>{"use strict";w.d(Fe,{m:()=>G});var o=w(5861),x=w(7593),N=w(5730),ge=w(9658),R=w(8834);const W=Z=>(0,R.c)().duration(Z?400:300),M=Z=>{let S,B;const E=Z.width+8,j=(0,R.c)(),P=(0,R.c)();Z.isEndSide?(S=E+"px",B="0px"):(S=-E+"px",B="0px"),j.addElement(Z.menuInnerEl).fromTo("transform",`translateX(${S})`,`translateX(${B})`);const pe="ios"===(0,ge.b)(Z),ke=pe?.2:.25;return P.addElement(Z.backdropEl).fromTo("opacity",.01,ke),W(pe).addAnimation([j,P])},U=Z=>{let S,B;const E=(0,ge.b)(Z),j=Z.width;Z.isEndSide?(S=-j+"px",B=j+"px"):(S=j+"px",B=-j+"px");const P=(0,R.c)().addElement(Z.menuInnerEl).fromTo("transform",`translateX(${B})`,"translateX(0px)"),K=(0,R.c)().addElement(Z.contentEl).fromTo("transform","translateX(0px)",`translateX(${S})`),pe=(0,R.c)().addElement(Z.backdropEl).fromTo("opacity",.01,.32);return W("ios"===E).addAnimation([P,K,pe])},_=Z=>{const S=(0,ge.b)(Z),B=Z.width*(Z.isEndSide?-1:1)+"px",E=(0,R.c)().addElement(Z.contentEl).fromTo("transform","translateX(0px)",`translateX(${B})`);return W("ios"===S).addAnimation(E)},G=(()=>{const Z=new Map,S=[],B=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&ne.open()});return function(ne){return ue.apply(this,arguments)}}(),E=function(){var ue=(0,o.Z)(function*(de){const ne=yield void 0!==de?Te(de):ie();return void 0!==ne&&ne.close()});return function(ne){return ue.apply(this,arguments)}}(),j=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&ne.toggle()});return function(ne){return ue.apply(this,arguments)}}(),P=function(){var ue=(0,o.Z)(function*(de,ne){const Ee=yield Te(ne);return Ee&&(Ee.disabled=!de),Ee});return function(ne,Ee){return ue.apply(this,arguments)}}(),K=function(){var ue=(0,o.Z)(function*(de,ne){const Ee=yield Te(ne);return Ee&&(Ee.swipeGesture=de),Ee});return function(ne,Ee){return ue.apply(this,arguments)}}(),pe=function(){var ue=(0,o.Z)(function*(de){if(null!=de){const ne=yield Te(de);return void 0!==ne&&ne.isOpen()}return void 0!==(yield ie())});return function(ne){return ue.apply(this,arguments)}}(),ke=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&!ne.disabled});return function(ne){return ue.apply(this,arguments)}}(),Te=function(){var ue=(0,o.Z)(function*(de){return yield De(),"start"===de||"end"===de?Ae(Ce=>Ce.side===de&&!Ce.disabled)||Ae(Ce=>Ce.side===de):null!=de?Ae(Ee=>Ee.menuId===de):Ae(Ee=>!Ee.disabled)||(S.length>0?S[0].el:void 0)});return function(ne){return ue.apply(this,arguments)}}(),ie=function(){var ue=(0,o.Z)(function*(){return yield De(),O()});return function(){return ue.apply(this,arguments)}}(),Be=function(){var ue=(0,o.Z)(function*(){return yield De(),te()});return function(){return ue.apply(this,arguments)}}(),re=function(){var ue=(0,o.Z)(function*(){return yield De(),ce()});return function(){return ue.apply(this,arguments)}}(),oe=(ue,de)=>{Z.set(ue,de)},Q=ue=>{const de=ue.side;S.filter(ne=>ne.side===de&&ne!==ue).forEach(ne=>ne.disabled=!0)},T=function(){var ue=(0,o.Z)(function*(de,ne,Ee){if(ce())return!1;if(ne){const Ce=yield ie();Ce&&de.el!==Ce&&(yield Ce.setOpen(!1,!1))}return de._setOpen(ne,Ee)});return function(ne,Ee,Ce){return ue.apply(this,arguments)}}(),O=()=>Ae(ue=>ue._isOpen),te=()=>S.map(ue=>ue.el),ce=()=>S.some(ue=>ue.isAnimating),Ae=ue=>{const de=S.find(ue);if(void 0!==de)return de.el},De=()=>Promise.all(Array.from(document.querySelectorAll("ion-menu")).map(ue=>new Promise(de=>(0,N.c)(ue,de))));return oe("reveal",_),oe("push",U),oe("overlay",M),typeof document<"u"&&document.addEventListener("ionBackButton",ue=>{const de=O();de&&ue.detail.register(x.MENU_BACK_BUTTON_PRIORITY,()=>de.close())}),{registerAnimation:oe,get:Te,getMenus:Be,getOpen:ie,isEnabled:ke,swipeGesture:K,isAnimating:re,isOpen:pe,enable:P,toggle:j,close:E,open:B,_getOpenSync:O,_createAnimation:(ue,de)=>{const ne=Z.get(ue);if(!ne)throw new Error("animation not registered");return ne(de)},_register:ue=>{S.indexOf(ue)<0&&(ue.disabled||Q(ue),S.push(ue))},_unregister:ue=>{const de=S.indexOf(ue);de>-1&&S.splice(de,1)},_setOpen:T,_setActiveMenu:Q}})()},3457:(Qe,Fe,w)=>{"use strict";w.d(Fe,{w:()=>o});const o=typeof window<"u"?window:void 0},1308:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>rt,H:()=>Rt,a:()=>Ce,b:()=>cn,c:()=>Cn,e:()=>Er,f:()=>On,g:()=>ze,h:()=>nn,i:()=>zt,j:()=>Ye,k:()=>Dn,p:()=>j,r:()=>er,s:()=>B});var o=w(5861);let N,ge,R,W=!1,M=!1,U=!1,_=!1,Y=!1;const G=typeof window<"u"?window:{},Z=G.document||{head:{}},S={$flags$:0,$resourcesUrl$:"",jmp:F=>F(),raf:F=>requestAnimationFrame(F),ael:(F,q,he,we)=>F.addEventListener(q,he,we),rel:(F,q,he,we)=>F.removeEventListener(q,he,we),ce:(F,q)=>new CustomEvent(F,q)},B=F=>{Object.assign(S,F)},j=F=>Promise.resolve(F),P=(()=>{try{return new CSSStyleSheet,"function"==typeof(new CSSStyleSheet).replaceSync}catch{}return!1})(),K=(F,q,he,we)=>{he&&he.map(([Pe,X,le])=>{const Ie=ke(F,Pe),je=pe(q,le),Re=Te(Pe);S.ael(Ie,X,je,Re),(q.$rmListeners$=q.$rmListeners$||[]).push(()=>S.rel(Ie,X,je,Re))})},pe=(F,q)=>he=>{try{256&F.$flags$?F.$lazyInstance$[q](he):(F.$queuedListeners$=F.$queuedListeners$||[]).push([q,he])}catch(we){Tn(we)}},ke=(F,q)=>4&q?Z:8&q?G:16&q?Z.body:F,Te=F=>0!=(2&F),be="s-id",Ne="sty-id",Q="c-id",k="http://www.w3.org/1999/xlink",ce=new WeakMap,Ae=(F,q,he)=>{let we=tr.get(F);P&&he?(we=we||new CSSStyleSheet,"string"==typeof we?we=q:we.replaceSync(q)):we=q,tr.set(F,we)},De=(F,q,he,we)=>{let Pe=de(q,he);const X=tr.get(Pe);if(F=11===F.nodeType?F:Z,X)if("string"==typeof X){let Ie,le=ce.get(F=F.head||F);le||ce.set(F,le=new Set),le.has(Pe)||(F.host&&(Ie=F.querySelector(`[${Ne}="${Pe}"]`))?Ie.innerHTML=X:(Ie=Z.createElement("style"),Ie.innerHTML=X,F.insertBefore(Ie,F.querySelector("link"))),le&&le.add(Pe))}else F.adoptedStyleSheets.includes(X)||(F.adoptedStyleSheets=[...F.adoptedStyleSheets,X]);return Pe},de=(F,q)=>"sc-"+(q&&32&F.$flags$?F.$tagName$+"-"+q:F.$tagName$),ne=F=>F.replace(/\/\*!@([^\/]+)\*\/[^\{]+\{/g,"$1{"),Ce=F=>Ir.push(F),ze=F=>dn(F).$modeName$,dt={},Ke=F=>"object"==(F=typeof F)||"function"===F,nn=(F,q,...he)=>{let we=null,Pe=null,X=null,le=!1,Ie=!1;const je=[],Re=st=>{for(let Mt=0;Mtst[Mt]).join(" "))}}if("function"==typeof F)return F(null===q?{}:q,je,pn);const ot=wt(F,null);return ot.$attrs$=q,je.length>0&&(ot.$children$=je),ot.$key$=Pe,ot.$name$=X,ot},wt=(F,q)=>({$flags$:0,$tag$:F,$text$:q,$elm$:null,$children$:null,$attrs$:null,$key$:null,$name$:null}),Rt={},pn={forEach:(F,q)=>F.map(Pt).forEach(q),map:(F,q)=>F.map(Pt).map(q).map(Ut)},Pt=F=>({vattrs:F.$attrs$,vchildren:F.$children$,vkey:F.$key$,vname:F.$name$,vtag:F.$tag$,vtext:F.$text$}),Ut=F=>{if("function"==typeof F.vtag){const he=Object.assign({},F.vattrs);return F.vkey&&(he.key=F.vkey),F.vname&&(he.name=F.vname),nn(F.vtag,he,...F.vchildren||[])}const q=wt(F.vtag,F.vtext);return q.$attrs$=F.vattrs,q.$children$=F.vchildren,q.$key$=F.vkey,q.$name$=F.vname,q},it=(F,q,he,we,Pe,X)=>{if(he!==we){let le=$n(F,q),Ie=q.toLowerCase();if("class"===q){const je=F.classList,Re=kt(he),ot=kt(we);je.remove(...Re.filter(st=>st&&!ot.includes(st))),je.add(...ot.filter(st=>st&&!Re.includes(st)))}else if("style"===q){for(const je in he)(!we||null==we[je])&&(je.includes("-")?F.style.removeProperty(je):F.style[je]="");for(const je in we)(!he||we[je]!==he[je])&&(je.includes("-")?F.style.setProperty(je,we[je]):F.style[je]=we[je])}else if("key"!==q)if("ref"===q)we&&we(F);else if(le||"o"!==q[0]||"n"!==q[1]){const je=Ke(we);if((le||je&&null!==we)&&!Pe)try{if(F.tagName.includes("-"))F[q]=we;else{const ot=we??"";"list"===q?le=!1:(null==he||F[q]!=ot)&&(F[q]=ot)}}catch{}let Re=!1;Ie!==(Ie=Ie.replace(/^xlink\:?/,""))&&(q=Ie,Re=!0),null==we||!1===we?(!1!==we||""===F.getAttribute(q))&&(Re?F.removeAttributeNS(k,q):F.removeAttribute(q)):(!le||4&X||Pe)&&!je&&(we=!0===we?"":we,Re?F.setAttributeNS(k,q,we):F.setAttribute(q,we))}else q="-"===q[2]?q.slice(3):$n(G,Ie)?Ie.slice(2):Ie[2]+q.slice(3),he&&S.rel(F,q,he,!1),we&&S.ael(F,q,we,!1)}},Xt=/\s/,kt=F=>F?F.split(Xt):[],Vt=(F,q,he,we)=>{const Pe=11===q.$elm$.nodeType&&q.$elm$.host?q.$elm$.host:q.$elm$,X=F&&F.$attrs$||dt,le=q.$attrs$||dt;for(we in X)we in le||it(Pe,we,X[we],void 0,he,q.$flags$);for(we in le)it(Pe,we,X[we],le[we],he,q.$flags$)},rn=(F,q,he,we)=>{const Pe=q.$children$[he];let le,Ie,je,X=0;if(W||(U=!0,"slot"===Pe.$tag$&&(N&&we.classList.add(N+"-s"),Pe.$flags$|=Pe.$children$?2:1)),null!==Pe.$text$)le=Pe.$elm$=Z.createTextNode(Pe.$text$);else if(1&Pe.$flags$)le=Pe.$elm$=Z.createTextNode("");else{if(_||(_="svg"===Pe.$tag$),le=Pe.$elm$=Z.createElementNS(_?"http://www.w3.org/2000/svg":"http://www.w3.org/1999/xhtml",2&Pe.$flags$?"slot-fb":Pe.$tag$),_&&"foreignObject"===Pe.$tag$&&(_=!1),Vt(null,Pe,_),(F=>null!=F)(N)&&le["s-si"]!==N&&le.classList.add(le["s-si"]=N),Pe.$children$)for(X=0;X{S.$flags$|=1;const he=F.childNodes;for(let we=he.length-1;we>=0;we--){const Pe=he[we];Pe["s-hn"]!==R&&Pe["s-ol"]&&(Et(Pe).insertBefore(Pe,nt(Pe)),Pe["s-ol"].remove(),Pe["s-ol"]=void 0,U=!0),q&&Vn(Pe,q)}S.$flags$&=-2},en=(F,q,he,we,Pe,X)=>{let Ie,le=F["s-cr"]&&F["s-cr"].parentNode||F;for(le.shadowRoot&&le.tagName===R&&(le=le.shadowRoot);Pe<=X;++Pe)we[Pe]&&(Ie=rn(null,he,Pe,F),Ie&&(we[Pe].$elm$=Ie,le.insertBefore(Ie,nt(q))))},gt=(F,q,he,we,Pe)=>{for(;q<=he;++q)(we=F[q])&&(Pe=we.$elm$,Nt(we),M=!0,Pe["s-ol"]?Pe["s-ol"].remove():Vn(Pe,!0),Pe.remove())},ht=(F,q)=>F.$tag$===q.$tag$&&("slot"===F.$tag$?F.$name$===q.$name$:F.$key$===q.$key$),nt=F=>F&&F["s-ol"]||F,Et=F=>(F["s-ol"]?F["s-ol"]:F).parentNode,ut=(F,q)=>{const he=q.$elm$=F.$elm$,we=F.$children$,Pe=q.$children$,X=q.$tag$,le=q.$text$;let Ie;null===le?(_="svg"===X||"foreignObject"!==X&&_,"slot"===X||Vt(F,q,_),null!==we&&null!==Pe?((F,q,he,we)=>{let Bt,An,Pe=0,X=0,le=0,Ie=0,je=q.length-1,Re=q[0],ot=q[je],st=we.length-1,Mt=we[0],Wt=we[st];for(;Pe<=je&&X<=st;)if(null==Re)Re=q[++Pe];else if(null==ot)ot=q[--je];else if(null==Mt)Mt=we[++X];else if(null==Wt)Wt=we[--st];else if(ht(Re,Mt))ut(Re,Mt),Re=q[++Pe],Mt=we[++X];else if(ht(ot,Wt))ut(ot,Wt),ot=q[--je],Wt=we[--st];else if(ht(Re,Wt))("slot"===Re.$tag$||"slot"===Wt.$tag$)&&Vn(Re.$elm$.parentNode,!1),ut(Re,Wt),F.insertBefore(Re.$elm$,ot.$elm$.nextSibling),Re=q[++Pe],Wt=we[--st];else if(ht(ot,Mt))("slot"===Re.$tag$||"slot"===Wt.$tag$)&&Vn(ot.$elm$.parentNode,!1),ut(ot,Mt),F.insertBefore(ot.$elm$,Re.$elm$),ot=q[--je],Mt=we[++X];else{for(le=-1,Ie=Pe;Ie<=je;++Ie)if(q[Ie]&&null!==q[Ie].$key$&&q[Ie].$key$===Mt.$key$){le=Ie;break}le>=0?(An=q[le],An.$tag$!==Mt.$tag$?Bt=rn(q&&q[X],he,le,F):(ut(An,Mt),q[le]=void 0,Bt=An.$elm$),Mt=we[++X]):(Bt=rn(q&&q[X],he,X,F),Mt=we[++X]),Bt&&Et(Re.$elm$).insertBefore(Bt,nt(Re.$elm$))}Pe>je?en(F,null==we[st+1]?null:we[st+1].$elm$,he,we,X,st):X>st&>(q,Pe,je)})(he,we,q,Pe):null!==Pe?(null!==F.$text$&&(he.textContent=""),en(he,null,q,Pe,0,Pe.length-1)):null!==we&>(we,0,we.length-1),_&&"svg"===X&&(_=!1)):(Ie=he["s-cr"])?Ie.parentNode.textContent=le:F.$text$!==le&&(he.data=le)},Ct=F=>{const q=F.childNodes;let he,we,Pe,X,le,Ie;for(we=0,Pe=q.length;we{let q,he,we,Pe,X,le,Ie=0;const je=F.childNodes,Re=je.length;for(;Ie=0;le--)he=we[le],!he["s-cn"]&&!he["s-nr"]&&he["s-hn"]!==q["s-hn"]&&(gn(he,Pe)?(X=qe.find(ot=>ot.$nodeToRelocate$===he),M=!0,he["s-sn"]=he["s-sn"]||Pe,X?X.$slotRefNode$=q:qe.push({$slotRefNode$:q,$nodeToRelocate$:he}),he["s-sr"]&&qe.map(ot=>{gn(ot.$nodeToRelocate$,he["s-sn"])&&(X=qe.find(st=>st.$nodeToRelocate$===he),X&&!ot.$slotRefNode$&&(ot.$slotRefNode$=X.$slotRefNode$))})):qe.some(ot=>ot.$nodeToRelocate$===he)||qe.push({$nodeToRelocate$:he}));1===q.nodeType&&on(q)}},gn=(F,q)=>1===F.nodeType?null===F.getAttribute("slot")&&""===q||F.getAttribute("slot")===q:F["s-sn"]===q||""===q,Nt=F=>{F.$attrs$&&F.$attrs$.ref&&F.$attrs$.ref(null),F.$children$&&F.$children$.map(Nt)},zt=F=>dn(F).$hostElement$,Er=(F,q,he)=>{const we=zt(F);return{emit:Pe=>jn(we,q,{bubbles:!!(4&he),composed:!!(2&he),cancelable:!!(1&he),detail:Pe})}},jn=(F,q,he)=>{const we=S.ce(q,he);return F.dispatchEvent(we),we},Xn=(F,q)=>{q&&!F.$onRenderResolve$&&q["s-p"]&&q["s-p"].push(new Promise(he=>F.$onRenderResolve$=he))},En=(F,q)=>{if(F.$flags$|=16,!(4&F.$flags$))return Xn(F,F.$ancestorComponent$),Cn(()=>xe(F,q));F.$flags$|=512},xe=(F,q)=>{const we=F.$lazyInstance$;let Pe;return q&&(F.$flags$|=256,F.$queuedListeners$&&(F.$queuedListeners$.map(([X,le])=>vt(we,X,le)),F.$queuedListeners$=null),Pe=vt(we,"componentWillLoad")),Pe=Ht(Pe,()=>vt(we,"componentWillRender")),Ht(Pe,()=>se(F,we,q))},se=function(){var F=(0,o.Z)(function*(q,he,we){const Pe=q.$hostElement$,le=Pe["s-rc"];we&&(F=>{const q=F.$cmpMeta$,he=F.$hostElement$,we=q.$flags$,X=De(he.shadowRoot?he.shadowRoot:he.getRootNode(),q,F.$modeName$);10&we&&(he["s-sc"]=X,he.classList.add(X+"-h"),2&we&&he.classList.add(X+"-s"))})(q);ye(q,he),le&&(le.map(je=>je()),Pe["s-rc"]=void 0);{const je=Pe["s-p"],Re=()=>He(q);0===je.length?Re():(Promise.all(je).then(Re),q.$flags$|=4,je.length=0)}});return function(he,we,Pe){return F.apply(this,arguments)}}(),ye=(F,q,he)=>{try{q=q.render&&q.render(),F.$flags$&=-17,F.$flags$|=2,((F,q)=>{const he=F.$hostElement$,we=F.$cmpMeta$,Pe=F.$vnode$||wt(null,null),X=(F=>F&&F.$tag$===Rt)(q)?q:nn(null,null,q);if(R=he.tagName,we.$attrsToReflect$&&(X.$attrs$=X.$attrs$||{},we.$attrsToReflect$.map(([le,Ie])=>X.$attrs$[Ie]=he[le])),X.$tag$=null,X.$flags$|=4,F.$vnode$=X,X.$elm$=Pe.$elm$=he.shadowRoot||he,N=he["s-sc"],ge=he["s-cr"],W=0!=(1&we.$flags$),M=!1,ut(Pe,X),S.$flags$|=1,U){on(X.$elm$);let le,Ie,je,Re,ot,st,Mt=0;for(;Mt{const he=F.$hostElement$,Pe=F.$lazyInstance$,X=F.$ancestorComponent$;vt(Pe,"componentDidRender"),64&F.$flags$?vt(Pe,"componentDidUpdate"):(F.$flags$|=64,_t(he),vt(Pe,"componentDidLoad"),F.$onReadyResolve$(he),X||pt()),F.$onInstanceResolve$(he),F.$onRenderResolve$&&(F.$onRenderResolve$(),F.$onRenderResolve$=void 0),512&F.$flags$&&Un(()=>En(F,!1)),F.$flags$&=-517},Ye=F=>{{const q=dn(F),he=q.$hostElement$.isConnected;return he&&2==(18&q.$flags$)&&En(q,!1),he}},pt=F=>{_t(Z.documentElement),Un(()=>jn(G,"appload",{detail:{namespace:"ionic"}}))},vt=(F,q,he)=>{if(F&&F[q])try{return F[q](he)}catch(we){Tn(we)}},Ht=(F,q)=>F&&F.then?F.then(q):q(),_t=F=>F.classList.add("hydrated"),Ln=(F,q,he,we,Pe,X,le)=>{let Ie,je,Re,ot;if(1===X.nodeType){for(Ie=X.getAttribute(Q),Ie&&(je=Ie.split("."),(je[0]===le||"0"===je[0])&&(Re={$flags$:0,$hostId$:je[0],$nodeId$:je[1],$depth$:je[2],$index$:je[3],$tag$:X.tagName.toLowerCase(),$elm$:X,$attrs$:null,$children$:null,$key$:null,$name$:null,$text$:null},q.push(Re),X.removeAttribute(Q),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re,F=Re,we&&"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$))),ot=X.childNodes.length-1;ot>=0;ot--)Ln(F,q,he,we,Pe,X.childNodes[ot],le);if(X.shadowRoot)for(ot=X.shadowRoot.childNodes.length-1;ot>=0;ot--)Ln(F,q,he,we,Pe,X.shadowRoot.childNodes[ot],le)}else if(8===X.nodeType)je=X.nodeValue.split("."),(je[1]===le||"0"===je[1])&&(Ie=je[0],Re={$flags$:0,$hostId$:je[1],$nodeId$:je[2],$depth$:je[3],$index$:je[4],$elm$:X,$attrs$:null,$children$:null,$key$:null,$name$:null,$tag$:null,$text$:null},"t"===Ie?(Re.$elm$=X.nextSibling,Re.$elm$&&3===Re.$elm$.nodeType&&(Re.$text$=Re.$elm$.textContent,q.push(Re),X.remove(),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re,we&&"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$))):Re.$hostId$===le&&("s"===Ie?(Re.$tag$="slot",X["s-sn"]=je[5]?Re.$name$=je[5]:"",X["s-sr"]=!0,we&&(Re.$elm$=Z.createElement(Re.$tag$),Re.$name$&&Re.$elm$.setAttribute("name",Re.$name$),X.parentNode.insertBefore(Re.$elm$,X),X.remove(),"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$)),he.push(Re),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re):"r"===Ie&&(we?X.remove():(Pe["s-cr"]=X,X["s-cn"]=!0))));else if(F&&"style"===F.$tag$){const st=wt(null,X.textContent);st.$elm$=X,st.$index$="0",F.$children$=[st]}},mn=(F,q)=>{if(1===F.nodeType){let he=0;for(;he{if(q.$members$){F.watchers&&(q.$watchers$=F.watchers);const we=Object.entries(q.$members$),Pe=F.prototype;if(we.map(([X,[le]])=>{31&le||2&he&&32&le?Object.defineProperty(Pe,X,{get(){return((F,q)=>dn(this).$instanceValues$.get(q))(0,X)},set(Ie){((F,q,he,we)=>{const Pe=dn(F),X=Pe.$hostElement$,le=Pe.$instanceValues$.get(q),Ie=Pe.$flags$,je=Pe.$lazyInstance$;he=((F,q)=>null==F||Ke(F)?F:4&q?"false"!==F&&(""===F||!!F):2&q?parseFloat(F):1&q?String(F):F)(he,we.$members$[q][0]);const Re=Number.isNaN(le)&&Number.isNaN(he);if((!(8&Ie)||void 0===le)&&he!==le&&!Re&&(Pe.$instanceValues$.set(q,he),je)){if(we.$watchers$&&128&Ie){const st=we.$watchers$[q];st&&st.map(Mt=>{try{je[Mt](he,le,q)}catch(Wt){Tn(Wt,X)}})}2==(18&Ie)&&En(Pe,!1)}})(this,X,Ie,q)},configurable:!0,enumerable:!0}):1&he&&64&le&&Object.defineProperty(Pe,X,{value(...Ie){const je=dn(this);return je.$onInstancePromise$.then(()=>je.$lazyInstance$[X](...Ie))}})}),1&he){const X=new Map;Pe.attributeChangedCallback=function(le,Ie,je){S.jmp(()=>{const Re=X.get(le);if(this.hasOwnProperty(Re))je=this[Re],delete this[Re];else if(Pe.hasOwnProperty(Re)&&"number"==typeof this[Re]&&this[Re]==je)return;this[Re]=(null!==je||"boolean"!=typeof this[Re])&&je})},F.observedAttributes=we.filter(([le,Ie])=>15&Ie[0]).map(([le,Ie])=>{const je=Ie[1]||le;return X.set(je,le),512&Ie[0]&&q.$attrsToReflect$.push([le,je]),je})}}return F},ee=function(){var F=(0,o.Z)(function*(q,he,we,Pe,X){if(0==(32&he.$flags$)){{if(he.$flags$|=32,(X=vn(we)).then){const Re=()=>{};X=yield X,Re()}X.isProxied||(we.$watchers$=X.watchers,fe(X,we,2),X.isProxied=!0);const je=()=>{};he.$flags$|=8;try{new X(he)}catch(Re){Tn(Re)}he.$flags$&=-9,he.$flags$|=128,je(),Se(he.$lazyInstance$)}if(X.style){let je=X.style;"string"!=typeof je&&(je=je[he.$modeName$=(F=>Ir.map(q=>q(F)).find(q=>!!q))(q)]);const Re=de(we,he.$modeName$);if(!tr.has(Re)){const ot=()=>{};Ae(Re,je,!!(1&we.$flags$)),ot()}}}const le=he.$ancestorComponent$,Ie=()=>En(he,!0);le&&le["s-rc"]?le["s-rc"].push(Ie):Ie()});return function(he,we,Pe,X,le){return F.apply(this,arguments)}}(),Se=F=>{vt(F,"connectedCallback")},yt=F=>{const q=F["s-cr"]=Z.createComment("");q["s-cn"]=!0,F.insertBefore(q,F.firstChild)},cn=(F,q={})=>{const we=[],Pe=q.exclude||[],X=G.customElements,le=Z.head,Ie=le.querySelector("meta[charset]"),je=Z.createElement("style"),Re=[],ot=Z.querySelectorAll(`[${Ne}]`);let st,Mt=!0,Wt=0;for(Object.assign(S,q),S.$resourcesUrl$=new URL(q.resourcesUrl||"./",Z.baseURI).href,S.$flags$|=2;Wt{Bt[1].map(An=>{const Rn={$flags$:An[0],$tagName$:An[1],$members$:An[2],$listeners$:An[3]};Rn.$members$=An[2],Rn.$listeners$=An[3],Rn.$attrsToReflect$=[],Rn.$watchers$={};const Pn=Rn.$tagName$,ur=class extends HTMLElement{constructor(mr){super(mr),sr(mr=this,Rn),1&Rn.$flags$&&mr.attachShadow({mode:"open",delegatesFocus:!!(16&Rn.$flags$)})}connectedCallback(){st&&(clearTimeout(st),st=null),Mt?Re.push(this):S.jmp(()=>(F=>{if(0==(1&S.$flags$)){const q=dn(F),he=q.$cmpMeta$,we=()=>{};if(1&q.$flags$)K(F,q,he.$listeners$),Se(q.$lazyInstance$);else{let Pe;if(q.$flags$|=1,Pe=F.getAttribute(be),Pe){if(1&he.$flags$){const X=De(F.shadowRoot,he,F.getAttribute("s-mode"));F.classList.remove(X+"-h",X+"-s")}((F,q,he,we)=>{const X=F.shadowRoot,le=[],je=X?[]:null,Re=we.$vnode$=wt(q,null);S.$orgLocNodes$||mn(Z.body,S.$orgLocNodes$=new Map),F[be]=he,F.removeAttribute(be),Ln(Re,le,[],je,F,F,he),le.map(ot=>{const st=ot.$hostId$+"."+ot.$nodeId$,Mt=S.$orgLocNodes$.get(st),Wt=ot.$elm$;Mt&&""===Mt["s-en"]&&Mt.parentNode.insertBefore(Wt,Mt.nextSibling),X||(Wt["s-hn"]=q,Mt&&(Wt["s-ol"]=Mt,Wt["s-ol"]["s-nr"]=Wt)),S.$orgLocNodes$.delete(st)}),X&&je.map(ot=>{ot&&X.appendChild(ot)})})(F,he.$tagName$,Pe,q)}Pe||12&he.$flags$&&yt(F);{let X=F;for(;X=X.parentNode||X.host;)if(1===X.nodeType&&X.hasAttribute("s-id")&&X["s-p"]||X["s-p"]){Xn(q,q.$ancestorComponent$=X);break}}he.$members$&&Object.entries(he.$members$).map(([X,[le]])=>{if(31&le&&F.hasOwnProperty(X)){const Ie=F[X];delete F[X],F[X]=Ie}}),Un(()=>ee(F,q,he))}we()}})(this))}disconnectedCallback(){S.jmp(()=>(F=>{if(0==(1&S.$flags$)){const q=dn(this),he=q.$lazyInstance$;q.$rmListeners$&&(q.$rmListeners$.map(we=>we()),q.$rmListeners$=void 0),vt(he,"disconnectedCallback")}})())}componentOnReady(){return dn(this).$onReadyPromise$}};Rn.$lazyBundleId$=Bt[0],!Pe.includes(Pn)&&!X.get(Pn)&&(we.push(Pn),X.define(Pn,fe(ur,Rn,1)))})}),je.innerHTML=we+"{visibility:hidden}.hydrated{visibility:inherit}",je.setAttribute("data-styles",""),le.insertBefore(je,Ie?Ie.nextSibling:le.firstChild),Mt=!1,Re.length?Re.map(Bt=>Bt.connectedCallback()):S.jmp(()=>st=setTimeout(pt,30))},Dn=F=>{const q=new URL(F,S.$resourcesUrl$);return q.origin!==G.location.origin?q.href:q.pathname},sn=new WeakMap,dn=F=>sn.get(F),er=(F,q)=>sn.set(q.$lazyInstance$=F,q),sr=(F,q)=>{const he={$flags$:0,$hostElement$:F,$cmpMeta$:q,$instanceValues$:new Map};return he.$onInstancePromise$=new Promise(we=>he.$onInstanceResolve$=we),he.$onReadyPromise$=new Promise(we=>he.$onReadyResolve$=we),F["s-p"]=[],F["s-rc"]=[],K(F,he,q.$listeners$),sn.set(F,he)},$n=(F,q)=>q in F,Tn=(F,q)=>(0,console.error)(F,q),xn=new Map,vn=(F,q,he)=>{const we=F.$tagName$.replace(/-/g,"_"),Pe=F.$lazyBundleId$,X=xn.get(Pe);return X?X[we]:w(863)(`./${Pe}.entry.js`).then(le=>(xn.set(Pe,le),le[we]),Tn)},tr=new Map,Ir=[],cr=[],gr=[],$t=(F,q)=>he=>{F.push(he),Y||(Y=!0,q&&4&S.$flags$?Un(Qt):S.raf(Qt))},fn=F=>{for(let q=0;q{fn(cr),fn(gr),(Y=cr.length>0)&&S.raf(Qt)},Un=F=>j().then(F),On=$t(cr,!1),Cn=$t(gr,!0),rt={isDev:!1,isBrowser:!0,isServer:!1,isTesting:!1}},697:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>ge,a:()=>R,b:()=>W,c:()=>M,d:()=>U,e:()=>oe,g:()=>Q,l:()=>Be,s:()=>be,t:()=>G});var o=w(5861),x=w(1308),N=w(5730);const ge="ionViewWillEnter",R="ionViewDidEnter",W="ionViewWillLeave",M="ionViewDidLeave",U="ionViewWillUnload",G=T=>new Promise((k,O)=>{(0,x.c)(()=>{Z(T),S(T).then(te=>{te.animation&&te.animation.destroy(),B(T),k(te)},te=>{B(T),O(te)})})}),Z=T=>{const k=T.enteringEl,O=T.leavingEl;Ne(k,O,T.direction),T.showGoBack?k.classList.add("can-go-back"):k.classList.remove("can-go-back"),be(k,!1),k.style.setProperty("pointer-events","none"),O&&(be(O,!1),O.style.setProperty("pointer-events","none"))},S=function(){var T=(0,o.Z)(function*(k){const O=yield E(k);return O&&x.B.isBrowser?j(O,k):P(k)});return function(O){return T.apply(this,arguments)}}(),B=T=>{const k=T.enteringEl,O=T.leavingEl;k.classList.remove("ion-page-invisible"),k.style.removeProperty("pointer-events"),void 0!==O&&(O.classList.remove("ion-page-invisible"),O.style.removeProperty("pointer-events"))},E=function(){var T=(0,o.Z)(function*(k){return k.leavingEl&&k.animated&&0!==k.duration?k.animationBuilder?k.animationBuilder:"ios"===k.mode?(yield Promise.resolve().then(w.bind(w,3953))).iosTransitionAnimation:(yield Promise.resolve().then(w.bind(w,3880))).mdTransitionAnimation:void 0});return function(O){return T.apply(this,arguments)}}(),j=function(){var T=(0,o.Z)(function*(k,O){yield K(O,!0);const te=k(O.baseEl,O);Te(O.enteringEl,O.leavingEl);const ce=yield ke(te,O);return O.progressCallback&&O.progressCallback(void 0),ce&&ie(O.enteringEl,O.leavingEl),{hasCompleted:ce,animation:te}});return function(O,te){return T.apply(this,arguments)}}(),P=function(){var T=(0,o.Z)(function*(k){const O=k.enteringEl,te=k.leavingEl;return yield K(k,!1),Te(O,te),ie(O,te),{hasCompleted:!0}});return function(O){return T.apply(this,arguments)}}(),K=function(){var T=(0,o.Z)(function*(k,O){const ce=(void 0!==k.deepWait?k.deepWait:O)?[oe(k.enteringEl),oe(k.leavingEl)]:[re(k.enteringEl),re(k.leavingEl)];yield Promise.all(ce),yield pe(k.viewIsReady,k.enteringEl)});return function(O,te){return T.apply(this,arguments)}}(),pe=function(){var T=(0,o.Z)(function*(k,O){k&&(yield k(O))});return function(O,te){return T.apply(this,arguments)}}(),ke=(T,k)=>{const O=k.progressCallback,te=new Promise(ce=>{T.onFinish(Ae=>ce(1===Ae))});return O?(T.progressStart(!0),O(T)):T.play(),te},Te=(T,k)=>{Be(k,W),Be(T,ge)},ie=(T,k)=>{Be(T,R),Be(k,M)},Be=(T,k)=>{if(T){const O=new CustomEvent(k,{bubbles:!1,cancelable:!1});T.dispatchEvent(O)}},re=T=>T?new Promise(k=>(0,N.c)(T,k)):Promise.resolve(),oe=function(){var T=(0,o.Z)(function*(k){const O=k;if(O){if(null!=O.componentOnReady){if(null!=(yield O.componentOnReady()))return}else if(null!=O.__registerHost)return void(yield new Promise(ce=>(0,N.r)(ce)));yield Promise.all(Array.from(O.children).map(oe))}});return function(O){return T.apply(this,arguments)}}(),be=(T,k)=>{k?(T.setAttribute("aria-hidden","true"),T.classList.add("ion-page-hidden")):(T.hidden=!1,T.removeAttribute("aria-hidden"),T.classList.remove("ion-page-hidden"))},Ne=(T,k,O)=>{void 0!==T&&(T.style.zIndex="back"===O?"99":"101"),void 0!==k&&(k.style.zIndex="100")},Q=T=>T.classList.contains("ion-page")?T:T.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")||T},1911:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{GESTURE_CONTROLLER:()=>o.G,createGesture:()=>_});var o=w(4349);const x=(S,B,E,j)=>{const P=N(S)?{capture:!!j.capture,passive:!!j.passive}:!!j.capture;let K,pe;return S.__zone_symbol__addEventListener?(K="__zone_symbol__addEventListener",pe="__zone_symbol__removeEventListener"):(K="addEventListener",pe="removeEventListener"),S[K](B,E,P),()=>{S[pe](B,E,P)}},N=S=>{if(void 0===ge)try{const B=Object.defineProperty({},"passive",{get:()=>{ge=!0}});S.addEventListener("optsTest",()=>{},B)}catch{ge=!1}return!!ge};let ge;const M=S=>S instanceof Document?S:S.ownerDocument,_=S=>{let B=!1,E=!1,j=!0,P=!1;const K=Object.assign({disableScroll:!1,direction:"x",gesturePriority:0,passive:!0,maxAngle:40,threshold:10},S),pe=K.canStart,ke=K.onWillStart,Te=K.onStart,ie=K.onEnd,Be=K.notCaptured,re=K.onMove,oe=K.threshold,be=K.passive,Ne=K.blurOnStart,Q={type:"pan",startX:0,startY:0,startTime:0,currentX:0,currentY:0,velocityX:0,velocityY:0,deltaX:0,deltaY:0,currentTime:0,event:void 0,data:void 0},T=((S,B,E)=>{const j=E*(Math.PI/180),P="x"===S,K=Math.cos(j),pe=B*B;let ke=0,Te=0,ie=!1,Be=0;return{start(re,oe){ke=re,Te=oe,Be=0,ie=!0},detect(re,oe){if(!ie)return!1;const be=re-ke,Ne=oe-Te,Q=be*be+Ne*Ne;if(QK?1:k<-K?-1:0,ie=!1,!0},isGesture:()=>0!==Be,getDirection:()=>Be}})(K.direction,K.threshold,K.maxAngle),k=o.G.createGesture({name:S.gestureName,priority:S.gesturePriority,disableScroll:S.disableScroll}),ce=()=>{!B||(P=!1,re&&re(Q))},Ae=()=>!!k.capture()&&(B=!0,j=!1,Q.startX=Q.currentX,Q.startY=Q.currentY,Q.startTime=Q.currentTime,ke?ke(Q).then(ue):ue(),!0),ue=()=>{Ne&&(()=>{if(typeof document<"u"){const ze=document.activeElement;ze?.blur&&ze.blur()}})(),Te&&Te(Q),j=!0},de=()=>{B=!1,E=!1,P=!1,j=!0,k.release()},ne=ze=>{const dt=B,et=j;if(de(),et){if(Y(Q,ze),dt)return void(ie&&ie(Q));Be&&Be(Q)}},Ee=((S,B,E,j,P)=>{let K,pe,ke,Te,ie,Be,re,oe=0;const be=De=>{oe=Date.now()+2e3,B(De)&&(!pe&&E&&(pe=x(S,"touchmove",E,P)),ke||(ke=x(De.target,"touchend",Q,P)),Te||(Te=x(De.target,"touchcancel",Q,P)))},Ne=De=>{oe>Date.now()||!B(De)||(!Be&&E&&(Be=x(M(S),"mousemove",E,P)),re||(re=x(M(S),"mouseup",T,P)))},Q=De=>{k(),j&&j(De)},T=De=>{O(),j&&j(De)},k=()=>{pe&&pe(),ke&&ke(),Te&&Te(),pe=ke=Te=void 0},O=()=>{Be&&Be(),re&&re(),Be=re=void 0},te=()=>{k(),O()},ce=(De=!0)=>{De?(K||(K=x(S,"touchstart",be,P)),ie||(ie=x(S,"mousedown",Ne,P))):(K&&K(),ie&&ie(),K=ie=void 0,te())};return{enable:ce,stop:te,destroy:()=>{ce(!1),j=E=B=void 0}}})(K.el,ze=>{const dt=Z(ze);return!(E||!j||(G(ze,Q),Q.startX=Q.currentX,Q.startY=Q.currentY,Q.startTime=Q.currentTime=dt,Q.velocityX=Q.velocityY=Q.deltaX=Q.deltaY=0,Q.event=ze,pe&&!1===pe(Q))||(k.release(),!k.start()))&&(E=!0,0===oe?Ae():(T.start(Q.startX,Q.startY),!0))},ze=>{B?!P&&j&&(P=!0,Y(Q,ze),requestAnimationFrame(ce)):(Y(Q,ze),T.detect(Q.currentX,Q.currentY)&&(!T.isGesture()||!Ae())&&Ce())},ne,{capture:!1,passive:be}),Ce=()=>{de(),Ee.stop(),Be&&Be(Q)};return{enable(ze=!0){ze||(B&&ne(void 0),de()),Ee.enable(ze)},destroy(){k.destroy(),Ee.destroy()}}},Y=(S,B)=>{if(!B)return;const E=S.currentX,j=S.currentY,P=S.currentTime;G(B,S);const K=S.currentX,pe=S.currentY,Te=(S.currentTime=Z(B))-P;if(Te>0&&Te<100){const Be=(pe-j)/Te;S.velocityX=(K-E)/Te*.7+.3*S.velocityX,S.velocityY=.7*Be+.3*S.velocityY}S.deltaX=K-S.startX,S.deltaY=pe-S.startY,S.event=B},G=(S,B)=>{let E=0,j=0;if(S){const P=S.changedTouches;if(P&&P.length>0){const K=P[0];E=K.clientX,j=K.clientY}else void 0!==S.pageX&&(E=S.pageX,j=S.pageY)}B.currentX=E,B.currentY=j},Z=S=>S.timeStamp||Date.now()},9658:(Qe,Fe,w)=>{"use strict";w.d(Fe,{a:()=>G,b:()=>ce,c:()=>N,g:()=>Y,i:()=>Ae});var o=w(1308);class x{constructor(){this.m=new Map}reset(ue){this.m=new Map(Object.entries(ue))}get(ue,de){const ne=this.m.get(ue);return void 0!==ne?ne:de}getBoolean(ue,de=!1){const ne=this.m.get(ue);return void 0===ne?de:"string"==typeof ne?"true"===ne:!!ne}getNumber(ue,de){const ne=parseFloat(this.m.get(ue));return isNaN(ne)?void 0!==de?de:NaN:ne}set(ue,de){this.m.set(ue,de)}}const N=new x,U="ionic:",_="ionic-persist-config",Y=De=>Z(De),G=(De,ue)=>("string"==typeof De&&(ue=De,De=void 0),Y(De).includes(ue)),Z=(De=window)=>{if(typeof De>"u")return[];De.Ionic=De.Ionic||{};let ue=De.Ionic.platforms;return null==ue&&(ue=De.Ionic.platforms=S(De),ue.forEach(de=>De.document.documentElement.classList.add(`plt-${de}`))),ue},S=De=>{const ue=N.get("platform");return Object.keys(O).filter(de=>{const ne=ue?.[de];return"function"==typeof ne?ne(De):O[de](De)})},E=De=>!!(T(De,/iPad/i)||T(De,/Macintosh/i)&&ie(De)),K=De=>T(De,/android|sink/i),ie=De=>k(De,"(any-pointer:coarse)"),re=De=>oe(De)||be(De),oe=De=>!!(De.cordova||De.phonegap||De.PhoneGap),be=De=>!!De.Capacitor?.isNative,T=(De,ue)=>ue.test(De.navigator.userAgent),k=(De,ue)=>{var de;return null===(de=De.matchMedia)||void 0===de?void 0:de.call(De,ue).matches},O={ipad:E,iphone:De=>T(De,/iPhone/i),ios:De=>T(De,/iPhone|iPod/i)||E(De),android:K,phablet:De=>{const ue=De.innerWidth,de=De.innerHeight,ne=Math.min(ue,de),Ee=Math.max(ue,de);return ne>390&&ne<520&&Ee>620&&Ee<800},tablet:De=>{const ue=De.innerWidth,de=De.innerHeight,ne=Math.min(ue,de),Ee=Math.max(ue,de);return E(De)||(De=>K(De)&&!T(De,/mobile/i))(De)||ne>460&&ne<820&&Ee>780&&Ee<1400},cordova:oe,capacitor:be,electron:De=>T(De,/electron/i),pwa:De=>{var ue;return!(!(null===(ue=De.matchMedia)||void 0===ue?void 0:ue.call(De,"(display-mode: standalone)").matches)&&!De.navigator.standalone)},mobile:ie,mobileweb:De=>ie(De)&&!re(De),desktop:De=>!ie(De),hybrid:re};let te;const ce=De=>De&&(0,o.g)(De)||te,Ae=(De={})=>{if(typeof window>"u")return;const ue=window.document,de=window,ne=de.Ionic=de.Ionic||{},Ee={};De._ael&&(Ee.ael=De._ael),De._rel&&(Ee.rel=De._rel),De._ce&&(Ee.ce=De._ce),(0,o.s)(Ee);const Ce=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(De=>{try{const ue=De.sessionStorage.getItem(_);return null!==ue?JSON.parse(ue):{}}catch{return{}}})(de)),{persistConfig:!1}),ne.config),(De=>{const ue={};return De.location.search.slice(1).split("&").map(de=>de.split("=")).map(([de,ne])=>[decodeURIComponent(de),decodeURIComponent(ne)]).filter(([de])=>((De,ue)=>De.substr(0,ue.length)===ue)(de,U)).map(([de,ne])=>[de.slice(U.length),ne]).forEach(([de,ne])=>{ue[de]=ne}),ue})(de)),De);N.reset(Ce),N.getBoolean("persistConfig")&&((De,ue)=>{try{De.sessionStorage.setItem(_,JSON.stringify(ue))}catch{return}})(de,Ce),Z(de),ne.config=N,ne.mode=te=N.get("mode",ue.documentElement.getAttribute("mode")||(G(de,"ios")?"ios":"md")),N.set("mode",te),ue.documentElement.setAttribute("mode",te),ue.documentElement.classList.add(te),N.getBoolean("_testing")&&N.set("animated",!1);const ze=et=>{var Ue;return null===(Ue=et.tagName)||void 0===Ue?void 0:Ue.startsWith("ION-")},dt=et=>["ios","md"].includes(et);(0,o.a)(et=>{for(;et;){const Ue=et.mode||et.getAttribute("mode");if(Ue){if(dt(Ue))return Ue;ze(et)&&console.warn('Invalid ionic mode: "'+Ue+'", expected: "ios" or "md"')}et=et.parentElement}return te})}},3953:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{iosTransitionAnimation:()=>S,shadow:()=>M});var o=w(8834),x=w(697);w(3457),w(1308);const W=B=>document.querySelector(`${B}.ion-cloned-element`),M=B=>B.shadowRoot||B,U=B=>{const E="ION-TABS"===B.tagName?B:B.querySelector("ion-tabs"),j="ion-content ion-header:not(.header-collapse-condense-inactive) ion-title.title-large";if(null!=E){const P=E.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");return null!=P?P.querySelector(j):null}return B.querySelector(j)},_=(B,E)=>{const j="ION-TABS"===B.tagName?B:B.querySelector("ion-tabs");let P=[];if(null!=j){const K=j.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");null!=K&&(P=K.querySelectorAll("ion-buttons"))}else P=B.querySelectorAll("ion-buttons");for(const K of P){const pe=K.closest("ion-header"),ke=pe&&!pe.classList.contains("header-collapse-condense-inactive"),Te=K.querySelector("ion-back-button"),ie=K.classList.contains("buttons-collapse"),Be="start"===K.slot||""===K.slot;if(null!==Te&&Be&&(ie&&ke&&E||!ie))return Te}return null},G=(B,E,j,P,K,pe)=>{const ke=E?`calc(100% - ${pe.right+4}px)`:pe.left-4+"px",Te=E?"7px":"-7px",ie=E?"-4px":"4px",Be=E?"-4px":"4px",re=E?"right":"left",oe=E?"left":"right",Q=j?[{offset:0,opacity:1,transform:`translate3d(${ie}, ${pe.top-46}px, 0) scale(1)`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${Te}, ${K.top-40}px, 0) scale(2.1)`}]:[{offset:0,opacity:0,transform:`translate3d(${Te}, ${K.top-40}px, 0) scale(2.1)`},{offset:1,opacity:1,transform:`translate3d(${ie}, ${pe.top-46}px, 0) scale(1)`}],O=j?[{offset:0,opacity:1,transform:`translate3d(${Be}, ${pe.top-46}px, 0) scale(1)`},{offset:.2,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`},{offset:1,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`}]:[{offset:0,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`},{offset:1,opacity:1,transform:`translate3d(${Be}, ${pe.top-46}px, 0) scale(1)`}],te=(0,o.c)(),ce=(0,o.c)(),Ae=W("ion-back-button"),De=M(Ae).querySelector(".button-text"),ue=M(Ae).querySelector("ion-icon");Ae.text=P.text,Ae.mode=P.mode,Ae.icon=P.icon,Ae.color=P.color,Ae.disabled=P.disabled,Ae.style.setProperty("display","block"),Ae.style.setProperty("position","fixed"),ce.addElement(ue),te.addElement(De),te.beforeStyles({"transform-origin":`${re} center`}).beforeAddWrite(()=>{P.style.setProperty("display","none"),Ae.style.setProperty(re,ke)}).afterAddWrite(()=>{P.style.setProperty("display",""),Ae.style.setProperty("display","none"),Ae.style.removeProperty(re)}).keyframes(Q),ce.beforeStyles({"transform-origin":`${oe} center`}).keyframes(O),B.addAnimation([te,ce])},Z=(B,E,j,P,K,pe)=>{const ke=E?`calc(100% - ${K.right}px)`:`${K.left}px`,Te=E?"-18px":"18px",ie=E?"right":"left",oe=j?[{offset:0,opacity:0,transform:`translate3d(${Te}, ${pe.top-4}px, 0) scale(0.49)`},{offset:.1,opacity:0},{offset:1,opacity:1,transform:`translate3d(0, ${K.top-2}px, 0) scale(1)`}]:[{offset:0,opacity:.99,transform:`translate3d(0, ${K.top-2}px, 0) scale(1)`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${Te}, ${pe.top-4}px, 0) scale(0.5)`}],be=W("ion-title"),Ne=(0,o.c)();be.innerText=P.innerText,be.size=P.size,be.color=P.color,Ne.addElement(be),Ne.beforeStyles({"transform-origin":`${ie} center`,height:"46px",display:"",position:"relative",[ie]:ke}).beforeAddWrite(()=>{P.style.setProperty("display","none")}).afterAddWrite(()=>{P.style.setProperty("display",""),be.style.setProperty("display","none")}).keyframes(oe),B.addAnimation(Ne)},S=(B,E)=>{var j;try{const P="cubic-bezier(0.32,0.72,0,1)",K="opacity",pe="transform",ke="0%",ie="rtl"===B.ownerDocument.dir,Be=ie?"-99.5%":"99.5%",re=ie?"33%":"-33%",oe=E.enteringEl,be=E.leavingEl,Ne="back"===E.direction,Q=oe.querySelector(":scope > ion-content"),T=oe.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *"),k=oe.querySelectorAll(":scope > ion-header > ion-toolbar"),O=(0,o.c)(),te=(0,o.c)();if(O.addElement(oe).duration((null!==(j=E.duration)&&void 0!==j?j:0)||540).easing(E.easing||P).fill("both").beforeRemoveClass("ion-page-invisible"),be&&null!=B){const ue=(0,o.c)();ue.addElement(B),O.addAnimation(ue)}if(Q||0!==k.length||0!==T.length?(te.addElement(Q),te.addElement(T)):te.addElement(oe.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),O.addAnimation(te),Ne?te.beforeClearStyles([K]).fromTo("transform",`translateX(${re})`,`translateX(${ke})`).fromTo(K,.8,1):te.beforeClearStyles([K]).fromTo("transform",`translateX(${Be})`,`translateX(${ke})`),Q){const ue=M(Q).querySelector(".transition-effect");if(ue){const de=ue.querySelector(".transition-cover"),ne=ue.querySelector(".transition-shadow"),Ee=(0,o.c)(),Ce=(0,o.c)(),ze=(0,o.c)();Ee.addElement(ue).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),Ce.addElement(de).beforeClearStyles([K]).fromTo(K,0,.1),ze.addElement(ne).beforeClearStyles([K]).fromTo(K,.03,.7),Ee.addAnimation([Ce,ze]),te.addAnimation([Ee])}}const ce=oe.querySelector("ion-header.header-collapse-condense"),{forward:Ae,backward:De}=((B,E,j,P,K)=>{const pe=_(P,j),ke=U(K),Te=U(P),ie=_(K,j),Be=null!==pe&&null!==ke&&!j,re=null!==Te&&null!==ie&&j;if(Be){const oe=ke.getBoundingClientRect(),be=pe.getBoundingClientRect();Z(B,E,j,ke,oe,be),G(B,E,j,pe,oe,be)}else if(re){const oe=Te.getBoundingClientRect(),be=ie.getBoundingClientRect();Z(B,E,j,Te,oe,be),G(B,E,j,ie,oe,be)}return{forward:Be,backward:re}})(O,ie,Ne,oe,be);if(k.forEach(ue=>{const de=(0,o.c)();de.addElement(ue),O.addAnimation(de);const ne=(0,o.c)();ne.addElement(ue.querySelector("ion-title"));const Ee=(0,o.c)(),Ce=Array.from(ue.querySelectorAll("ion-buttons,[menuToggle]")),ze=ue.closest("ion-header"),dt=ze?.classList.contains("header-collapse-condense-inactive");let et;et=Ce.filter(Ne?wt=>{const Rt=wt.classList.contains("buttons-collapse");return Rt&&!dt||!Rt}:wt=>!wt.classList.contains("buttons-collapse")),Ee.addElement(et);const Ue=(0,o.c)();Ue.addElement(ue.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])"));const St=(0,o.c)();St.addElement(M(ue).querySelector(".toolbar-background"));const Ke=(0,o.c)(),nn=ue.querySelector("ion-back-button");if(nn&&Ke.addElement(nn),de.addAnimation([ne,Ee,Ue,St,Ke]),Ee.fromTo(K,.01,1),Ue.fromTo(K,.01,1),Ne)dt||ne.fromTo("transform",`translateX(${re})`,`translateX(${ke})`).fromTo(K,.01,1),Ue.fromTo("transform",`translateX(${re})`,`translateX(${ke})`),Ke.fromTo(K,.01,1);else if(ce||ne.fromTo("transform",`translateX(${Be})`,`translateX(${ke})`).fromTo(K,.01,1),Ue.fromTo("transform",`translateX(${Be})`,`translateX(${ke})`),St.beforeClearStyles([K,"transform"]),ze?.translucent?St.fromTo("transform",ie?"translateX(-100%)":"translateX(100%)","translateX(0px)"):St.fromTo(K,.01,"var(--opacity)"),Ae||Ke.fromTo(K,.01,1),nn&&!Ae){const Rt=(0,o.c)();Rt.addElement(M(nn).querySelector(".button-text")).fromTo("transform",ie?"translateX(-100px)":"translateX(100px)","translateX(0px)"),de.addAnimation(Rt)}}),be){const ue=(0,o.c)(),de=be.querySelector(":scope > ion-content"),ne=be.querySelectorAll(":scope > ion-header > ion-toolbar"),Ee=be.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *");if(de||0!==ne.length||0!==Ee.length?(ue.addElement(de),ue.addElement(Ee)):ue.addElement(be.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),O.addAnimation(ue),Ne){ue.beforeClearStyles([K]).fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)");const Ce=(0,x.g)(be);O.afterAddWrite(()=>{"normal"===O.getDirection()&&Ce.style.setProperty("display","none")})}else ue.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).fromTo(K,1,.8);if(de){const Ce=M(de).querySelector(".transition-effect");if(Ce){const ze=Ce.querySelector(".transition-cover"),dt=Ce.querySelector(".transition-shadow"),et=(0,o.c)(),Ue=(0,o.c)(),St=(0,o.c)();et.addElement(Ce).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),Ue.addElement(ze).beforeClearStyles([K]).fromTo(K,.1,0),St.addElement(dt).beforeClearStyles([K]).fromTo(K,.7,.03),et.addAnimation([Ue,St]),ue.addAnimation([et])}}ne.forEach(Ce=>{const ze=(0,o.c)();ze.addElement(Ce);const dt=(0,o.c)();dt.addElement(Ce.querySelector("ion-title"));const et=(0,o.c)(),Ue=Ce.querySelectorAll("ion-buttons,[menuToggle]"),St=Ce.closest("ion-header"),Ke=St?.classList.contains("header-collapse-condense-inactive"),nn=Array.from(Ue).filter(Ut=>{const it=Ut.classList.contains("buttons-collapse");return it&&!Ke||!it});et.addElement(nn);const wt=(0,o.c)(),Rt=Ce.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])");Rt.length>0&&wt.addElement(Rt);const Kt=(0,o.c)();Kt.addElement(M(Ce).querySelector(".toolbar-background"));const pn=(0,o.c)(),Pt=Ce.querySelector("ion-back-button");if(Pt&&pn.addElement(Pt),ze.addAnimation([dt,et,wt,pn,Kt]),O.addAnimation(ze),pn.fromTo(K,.99,0),et.fromTo(K,.99,0),wt.fromTo(K,.99,0),Ne){if(Ke||dt.fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)").fromTo(K,.99,0),wt.fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)"),Kt.beforeClearStyles([K,"transform"]),St?.translucent?Kt.fromTo("transform","translateX(0px)",ie?"translateX(-100%)":"translateX(100%)"):Kt.fromTo(K,"var(--opacity)",0),Pt&&!De){const it=(0,o.c)();it.addElement(M(Pt).querySelector(".button-text")).fromTo("transform",`translateX(${ke})`,`translateX(${(ie?-124:124)+"px"})`),ze.addAnimation(it)}}else Ke||dt.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).fromTo(K,.99,0).afterClearStyles([pe,K]),wt.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).afterClearStyles([pe,K]),pn.afterClearStyles([K]),dt.afterClearStyles([K]),et.afterClearStyles([K])})}return O}catch(P){throw P}}},3880:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{mdTransitionAnimation:()=>R});var o=w(8834),x=w(697);w(3457),w(1308);const R=(W,M)=>{var U,_,Y;const S="back"===M.direction,E=M.leavingEl,j=(0,x.g)(M.enteringEl),P=j.querySelector("ion-toolbar"),K=(0,o.c)();if(K.addElement(j).fill("both").beforeRemoveClass("ion-page-invisible"),S?K.duration((null!==(U=M.duration)&&void 0!==U?U:0)||200).easing("cubic-bezier(0.47,0,0.745,0.715)"):K.duration((null!==(_=M.duration)&&void 0!==_?_:0)||280).easing("cubic-bezier(0.36,0.66,0.04,1)").fromTo("transform","translateY(40px)","translateY(0px)").fromTo("opacity",.01,1),P){const pe=(0,o.c)();pe.addElement(P),K.addAnimation(pe)}if(E&&S){K.duration((null!==(Y=M.duration)&&void 0!==Y?Y:0)||200).easing("cubic-bezier(0.47,0,0.745,0.715)");const pe=(0,o.c)();pe.addElement((0,x.g)(E)).onFinish(ke=>{1===ke&&pe.elements.length>0&&pe.elements[0].style.setProperty("display","none")}).fromTo("transform","translateY(0px)","translateY(40px)").fromTo("opacity",1,0),K.addAnimation(pe)}return K}},4414:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>de,a:()=>U,b:()=>_,c:()=>S,d:()=>Ne,e:()=>E,f:()=>T,g:()=>te,h:()=>W,i:()=>Ae,j:()=>K,k:()=>oe,l:()=>Y,m:()=>G,s:()=>ue,t:()=>B});var o=w(5861),x=w(9658),N=w(7593),ge=w(5730);let R=0;const W=new WeakMap,M=ne=>({create:Ee=>j(ne,Ee),dismiss:(Ee,Ce,ze)=>Be(document,Ee,Ce,ne,ze),getTop:()=>(0,o.Z)(function*(){return oe(document,ne)})()}),U=M("ion-alert"),_=M("ion-action-sheet"),Y=M("ion-loading"),G=M("ion-modal"),S=M("ion-popover"),B=M("ion-toast"),E=ne=>{typeof document<"u"&&ie(document);const Ee=R++;ne.overlayIndex=Ee,ne.hasAttribute("id")||(ne.id=`ion-overlay-${Ee}`)},j=(ne,Ee)=>typeof window<"u"&&typeof window.customElements<"u"?window.customElements.whenDefined(ne).then(()=>{const Ce=document.createElement(ne);return Ce.classList.add("overlay-hidden"),Object.assign(Ce,Object.assign(Object.assign({},Ee),{hasController:!0})),k(document).appendChild(Ce),new Promise(ze=>(0,ge.c)(Ce,ze))}):Promise.resolve(),P='[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])',K=(ne,Ee)=>{let Ce=ne.querySelector(P);const ze=Ce?.shadowRoot;ze&&(Ce=ze.querySelector(P)||Ce),Ce?(0,ge.f)(Ce):Ee.focus()},ke=(ne,Ee)=>{const Ce=Array.from(ne.querySelectorAll(P));let ze=Ce.length>0?Ce[Ce.length-1]:null;const dt=ze?.shadowRoot;dt&&(ze=dt.querySelector(P)||ze),ze?ze.focus():Ee.focus()},ie=ne=>{0===R&&(R=1,ne.addEventListener("focus",Ee=>{((ne,Ee)=>{const Ce=oe(Ee,"ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover"),ze=ne.target;Ce&&ze&&!Ce.classList.contains("ion-disable-focus-trap")&&(Ce.shadowRoot?(()=>{if(Ce.contains(ze))Ce.lastFocus=ze;else{const Ue=Ce.lastFocus;K(Ce,Ce),Ue===Ee.activeElement&&ke(Ce,Ce),Ce.lastFocus=Ee.activeElement}})():(()=>{if(Ce===ze)Ce.lastFocus=void 0;else{const Ue=(0,ge.g)(Ce);if(!Ue.contains(ze))return;const St=Ue.querySelector(".ion-overlay-wrapper");if(!St)return;if(St.contains(ze))Ce.lastFocus=ze;else{const Ke=Ce.lastFocus;K(St,Ce),Ke===Ee.activeElement&&ke(St,Ce),Ce.lastFocus=Ee.activeElement}}})())})(Ee,ne)},!0),ne.addEventListener("ionBackButton",Ee=>{const Ce=oe(ne);Ce?.backdropDismiss&&Ee.detail.register(N.OVERLAY_BACK_BUTTON_PRIORITY,()=>Ce.dismiss(void 0,de))}),ne.addEventListener("keyup",Ee=>{if("Escape"===Ee.key){const Ce=oe(ne);Ce?.backdropDismiss&&Ce.dismiss(void 0,de)}}))},Be=(ne,Ee,Ce,ze,dt)=>{const et=oe(ne,ze,dt);return et?et.dismiss(Ee,Ce):Promise.reject("overlay does not exist")},oe=(ne,Ee,Ce)=>{const ze=((ne,Ee)=>(void 0===Ee&&(Ee="ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover,ion-toast"),Array.from(ne.querySelectorAll(Ee)).filter(Ce=>Ce.overlayIndex>0)))(ne,Ee).filter(dt=>!(ne=>ne.classList.contains("overlay-hidden"))(dt));return void 0===Ce?ze[ze.length-1]:ze.find(dt=>dt.id===Ce)},be=(ne=!1)=>{const Ce=k(document).querySelector("ion-router-outlet, ion-nav, #ion-view-container-root");!Ce||(ne?Ce.setAttribute("aria-hidden","true"):Ce.removeAttribute("aria-hidden"))},Ne=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt,et){var Ue,St;if(Ee.presented)return;be(!0),Ee.presented=!0,Ee.willPresent.emit(),null===(Ue=Ee.willPresentShorthand)||void 0===Ue||Ue.emit();const Ke=(0,x.b)(Ee),nn=Ee.enterAnimation?Ee.enterAnimation:x.c.get(Ce,"ios"===Ke?ze:dt);(yield O(Ee,nn,Ee.el,et))&&(Ee.didPresent.emit(),null===(St=Ee.didPresentShorthand)||void 0===St||St.emit()),"ION-TOAST"!==Ee.el.tagName&&Q(Ee.el),Ee.keyboardClose&&(null===document.activeElement||!Ee.el.contains(document.activeElement))&&Ee.el.focus()});return function(Ce,ze,dt,et,Ue){return ne.apply(this,arguments)}}(),Q=function(){var ne=(0,o.Z)(function*(Ee){let Ce=document.activeElement;if(!Ce)return;const ze=Ce?.shadowRoot;ze&&(Ce=ze.querySelector(P)||Ce),yield Ee.onDidDismiss(),Ce.focus()});return function(Ce){return ne.apply(this,arguments)}}(),T=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt,et,Ue,St){var Ke,nn;if(!Ee.presented)return!1;be(!1),Ee.presented=!1;try{Ee.el.style.setProperty("pointer-events","none"),Ee.willDismiss.emit({data:Ce,role:ze}),null===(Ke=Ee.willDismissShorthand)||void 0===Ke||Ke.emit({data:Ce,role:ze});const wt=(0,x.b)(Ee),Rt=Ee.leaveAnimation?Ee.leaveAnimation:x.c.get(dt,"ios"===wt?et:Ue);"gesture"!==ze&&(yield O(Ee,Rt,Ee.el,St)),Ee.didDismiss.emit({data:Ce,role:ze}),null===(nn=Ee.didDismissShorthand)||void 0===nn||nn.emit({data:Ce,role:ze}),W.delete(Ee),Ee.el.classList.add("overlay-hidden"),Ee.el.style.removeProperty("pointer-events")}catch(wt){console.error(wt)}return Ee.el.remove(),!0});return function(Ce,ze,dt,et,Ue,St,Ke){return ne.apply(this,arguments)}}(),k=ne=>ne.querySelector("ion-app")||ne.body,O=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt){ze.classList.remove("overlay-hidden");const Ue=Ce(Ee.el,dt);(!Ee.animated||!x.c.getBoolean("animated",!0))&&Ue.duration(0),Ee.keyboardClose&&Ue.beforeAddWrite(()=>{const Ke=ze.ownerDocument.activeElement;Ke?.matches("input,ion-input, ion-textarea")&&Ke.blur()});const St=W.get(Ee)||[];return W.set(Ee,[...St,Ue]),yield Ue.play(),!0});return function(Ce,ze,dt,et){return ne.apply(this,arguments)}}(),te=(ne,Ee)=>{let Ce;const ze=new Promise(dt=>Ce=dt);return ce(ne,Ee,dt=>{Ce(dt.detail)}),ze},ce=(ne,Ee,Ce)=>{const ze=dt=>{(0,ge.b)(ne,Ee,ze),Ce(dt)};(0,ge.a)(ne,Ee,ze)},Ae=ne=>"cancel"===ne||ne===de,De=ne=>ne(),ue=(ne,Ee)=>{if("function"==typeof ne)return x.c.get("_zoneGate",De)(()=>{try{return ne(Ee)}catch(ze){throw ze}})},de="backdrop"},600:(Qe,Fe,w)=>{"use strict";w.d(Fe,{v:()=>Z});var o=w(9192),x=w(529),N=w(1135),ge=w(7579),R=w(9646),W=w(3900),M=w(3099),U=w(4004),_=w(7225),Y=w(8274),G=w(502);let Z=(()=>{class S extends o.iw{constructor(E,j){super(),this.http=E,this.loadingCtrl=j,this.loggedIn=!1,this.stationFreezed=!1,this.captionmode=!1,this.geraeteSubject=new N.X([]),this.wertungenSubject=new N.X([]),this.newLastResults=new N.X(void 0),this._clubregistrations=[],this.clubRegistrations=new N.X([]),this.askForUsername=new ge.x,this._competition=void 0,this._durchgang=void 0,this._geraet=void 0,this._step=void 0,this.lastJWTChecked=0,this.wertungenLoading=!1,this.isInitializing=!1,this._activeDurchgangList=[],this.durchgangStarted=new N.X([]),this.wertungUpdated=new ge.x,this.standardErrorHandler=P=>{if(console.log(P),this.resetLoading(),this.wertungenLoading=!1,this.isInitializing=!1,401===P.status)localStorage.removeItem("auth_token"),this.loggedIn=!1,this.showMessage.next({msg:"Die Berechtigung zum erfassen von Wertungen ist abgelaufen.",type:"Berechtigung"});else if(404===P.status)this.loggedIn=!1,this.stationFreezed=!1,this.captionmode=!1,this._competition=void 0,this._durchgang=void 0,this._geraet=void 0,this._step=void 0,localStorage.removeItem("auth_token"),localStorage.removeItem("current_competition"),localStorage.removeItem("current_station"),localStorage.removeItem("auth_clubid"),this.showMessage.next({msg:"Die aktuele Einstellung ist nicht mehr g\xfcltig und wird zur\xfcckgesetzt.",type:"Einstellung"});else{const K={msg:""+P.statusText+"
            "+P.message,type:P.name};(!this.lastMessageAck||this.lastMessageAck.msg!==K.msg)&&this.showMessage.next(K)}},this.clublist=[],this.showMessage.subscribe(P=>{this.resetLoading(),this.lastMessageAck=P}),this.resetLoading()}get competition(){return this._competition}get durchgang(){return this._durchgang}get geraet(){return this._geraet}get step(){return this._step}set currentUserName(E){localStorage.setItem("current_username",E)}get currentUserName(){return localStorage.getItem("current_username")}get activeDurchgangList(){return this._activeDurchgangList}get authenticatedClubId(){return localStorage.getItem("auth_clubid")}get competitionName(){if(!this.competitions)return"";const E=this.competitions.filter(j=>j.uuid===this.competition).map(j=>j.titel+", am "+(j.datum+"T").split("T")[0].split("-").reverse().join("-"));return 1===E.length?E[0]:""}getCurrentStation(){return localStorage.getItem("current_station")||this.competition+"/"+this.durchgang+"/"+this.geraet+"/"+this.step}resetLoading(){this.loadingInstance&&(this.loadingInstance.then(E=>E.dismiss()),this.loadingInstance=void 0)}startLoading(E,j){return this.resetLoading(),this.loadingInstance=this.loadingCtrl.create({message:E}),this.loadingInstance.then(P=>P.present()),j&&j.subscribe({next:()=>this.resetLoading(),error:P=>this.resetLoading()}),j}initWithQuery(E){this.isInitializing=!0;const j=new N.X(!1);return E&&E.startsWith("c=")?(this._step=1,E.split("&").forEach(P=>{const[K,pe]=P.split("=");switch(K){case"s":this.currentUserName||this.askForUsername.next(this),localStorage.setItem("auth_token",pe),localStorage.removeItem("auth_clubid"),this.checkJWT(pe);const ke=localStorage.getItem("current_station");ke&&this.initWithQuery(ke);break;case"c":this._competition=pe;break;case"ca":this._competition=void 0;break;case"d":this._durchgang=pe;break;case"st":this._step=parseInt(pe);break;case"g":this._geraet=parseInt(pe),localStorage.setItem("current_station",E),this.checkJWT(),this.stationFreezed=!0;break;case"rs":localStorage.setItem("auth_token",pe),this.unlock(),this.loggedIn=!0,console.log("club auth-token initialized");break;case"rid":localStorage.setItem("auth_clubid",pe),console.log("club id initialized",pe)}}),localStorage.removeItem("external_load"),this.startLoading("Bitte warten ..."),this._geraet?this.getCompetitions().pipe((0,W.w)(()=>this.loadDurchgaenge()),(0,W.w)(()=>this.loadGeraete()),(0,W.w)(()=>this.loadSteps()),(0,W.w)(()=>this.loadWertungen())).subscribe(P=>j.next(!0)):!this._competition||"undefined"===this._competition&&!localStorage.getItem("auth_clubid")?(console.log("initializing clubreg ..."),this.getClubRegistrations(this._competition).subscribe(P=>j.next(!0))):this._competition&&this.getCompetitions().pipe((0,W.w)(()=>this.loadDurchgaenge())).subscribe(P=>j.next(!0))):j.next(!0),j.subscribe(P=>{P&&(this.isInitializing=!1,this.resetLoading())}),j}checkJWT(E){if(E||(E=localStorage.getItem("auth_token")),!E)return void(this.loggedIn=!1);const P=(new Date).getTime()-36e5;(!E||E===localStorage.getItem("auth_token"))&&P{localStorage.setItem("auth_token",K.headers.get("x-access-token")),this.loggedIn=!0,this.competitions&&0!==this.competitions.length?this._competition&&this.getDurchgaenge(this._competition):this.getCompetitions().subscribe(pe=>{this._competition&&this.getDurchgaenge(this._competition)})},error:K=>{console.log(K),401===K.status?(localStorage.removeItem("auth_token"),this.loggedIn=!1,this.showMessage.next({msg:"Die Berechtigung ist abgelaufen. Bitte neu anmelden",type:"Berechtigung"})):this.standardErrorHandler(K)}}),this.lastJWTChecked=(new Date).getTime())}saveClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j.id,j).pipe((0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations.filter(pe=>pe.id!=j.id),K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}saveClubRegistrationPW(E,j){const P=this.startLoading("Neues Password wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j.id+"/pwchange",j).pipe((0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations.filter(pe=>pe.id!=j.id),K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}createClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird registriert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E,j,{observe:"response"}).pipe((0,U.U)(K=>(console.log(K),localStorage.setItem("auth_token",K.headers.get("x-access-token")),localStorage.setItem("auth_clubid",K.body.id+""),this.loggedIn=!0,K.body)),(0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations,K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}deleteClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird gel\xf6scht. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j,{responseType:"text"}).pipe((0,M.B)()));return P.subscribe({next:K=>{this.clublogout(),this._clubregistrations=this._clubregistrations.filter(pe=>pe.id!=j),this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}loadProgramsForCompetition(E){const j=this.startLoading("Programmliste zum Wettkampf wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/programmlist").pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}loadAthletListForClub(E,j){const P=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/athletlist").pipe((0,M.B)()));return P.subscribe({next:K=>{},error:this.standardErrorHandler}),P}loadAthletRegistrations(E,j){const P=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/athletes").pipe((0,M.B)()));return P.subscribe({error:this.standardErrorHandler}),P}createAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E+"/"+j+"/athletes",P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}saveAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j+"/athletes/"+P.id,P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}deleteAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j+"/athletes/"+P.id,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}findCompetitionsByVerein(E){const j=this.startLoading("Es werden fr\xfchere Anmeldungen gesucht. Bitte warten ...",this.http.get(_.AC+"api/competition/byVerein/"+E).pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}copyClubRegsFromCompetition(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+j+"/"+P+"/copyfrom",E,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}loadJudgeProgramDisziplinList(E){const j=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/programmdisziplinlist").pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}loadJudgeRegistrations(E,j){const P=this.startLoading("Wertungsrichter-Liste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/judges").pipe((0,M.B)()));return P.subscribe({error:this.standardErrorHandler}),P}createJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E+"/"+j+"/judges",P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}saveJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j+"/judges/"+P.id,P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}deleteJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j+"/judges/"+P.id,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}clublogout(){this.logout()}utf8_to_b64(E){return window.btoa(unescape(encodeURIComponent(E)))}b64_to_utf8(E){return decodeURIComponent(escape(window.atob(E)))}getClubList(){if(this.clublist&&this.clublist.length>0)return(0,R.of)(this.clublist);const E=this.startLoading("Clubliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/clubnames").pipe((0,M.B)()));return E.subscribe({next:j=>{this.clublist=j},error:this.standardErrorHandler}),E}resetRegistration(E){const j=new x.WM,P=this.http.options(_.AC+"api/registrations/"+this._competition+"/"+E+"/loginreset",{observe:"response",headers:j.set("Host",_.AC),responseType:"text"}).pipe((0,M.B)());return this.startLoading("Mail f\xfcr Login-Reset wird versendet. Bitte warten ...",P)}clublogin(E,j){this.clublogout();const P=new x.WM,K=this.startLoading("Login wird verarbeitet. Bitte warten ...",this.http.options(_.AC+"api/login",{observe:"response",headers:P.set("Authorization","Basic "+this.utf8_to_b64(`${E}:${j}`)),withCredentials:!0,responseType:"text"}).pipe((0,M.B)()));return K.subscribe({next:pe=>{console.log(pe),localStorage.setItem("auth_token",pe.headers.get("x-access-token")),localStorage.setItem("auth_clubid",E),this.loggedIn=!0},error:pe=>{console.log(pe),this.clublogout(),this.resetLoading(),401===pe.status?(localStorage.setItem("auth_token",pe.headers.get("x-access-token")),this.loggedIn=!1):this.standardErrorHandler(pe)}}),K}unlock(){localStorage.removeItem("current_station"),this.checkJWT(),this.stationFreezed=!1}logout(){localStorage.removeItem("auth_token"),localStorage.removeItem("auth_clubid"),this.loggedIn=!1,this.unlock()}getCompetitions(){const E=this.startLoading("Wettkampfliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/competition").pipe((0,M.B)()));return E.subscribe({next:j=>{this.competitions=j},error:this.standardErrorHandler}),E}getClubRegistrations(E){return this.checkJWT(),void 0!==this._clubregistrations&&this._competition===E||this.isInitializing||(this.durchgaenge=[],this._clubregistrations=[],this.geraete=void 0,this.steps=void 0,this.wertungen=void 0,this._competition=E,this._durchgang=void 0,this._geraet=void 0,this._step=void 0),this.loadClubRegistrations()}loadClubRegistrations(){return this._competition&&"undefined"!==this._competition?(this.startLoading("Clubanmeldungen werden geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+this._competition).pipe((0,M.B)())).subscribe({next:j=>{localStorage.setItem("current_competition",this._competition),this._clubregistrations=j,this.clubRegistrations.next(j)},error:this.standardErrorHandler}),this.clubRegistrations):(0,R.of)([])}loadRegistrationSyncActions(){if(!this._competition||"undefined"===this._competition)return(0,R.of)([]);const E=this.startLoading("Pendente An-/Abmeldungen werden geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+this._competition+"/syncactions").pipe((0,M.B)()));return E.subscribe({error:this.standardErrorHandler}),E}resetCompetition(E){console.log("reset data"),this.durchgaenge=[],this._clubregistrations=[],this.clubRegistrations.next([]),this.geraete=void 0,this.geraeteSubject.next([]),this.steps=void 0,this.wertungen=void 0,this.wertungenSubject.next([]),this._competition=E,this._durchgang=void 0,this._geraet=void 0,this._step=void 0}getDurchgaenge(E){return this.checkJWT(),void 0!==this.durchgaenge&&this._competition===E||this.isInitializing?(0,R.of)(this.durchgaenge||[]):(this.resetCompetition(E),this.loadDurchgaenge())}loadDurchgaenge(){if(!this._competition||"undefined"===this._competition)return(0,R.of)([]);const E=this.startLoading("Durchgangliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition).pipe((0,M.B)())),j=this._durchgang;return E.subscribe({next:P=>{if(localStorage.setItem("current_competition",this._competition),this.durchgaenge=P,j){const K=this.durchgaenge.filter(pe=>{const ke=(0,o._5)(pe);return j===pe||j===ke});1===K.length&&(this._durchgang=K[0])}},error:this.standardErrorHandler}),E}getGeraete(E,j){return void 0!==this.geraete&&this._competition===E&&this._durchgang===j||this.isInitializing?(0,R.of)(this.geraete||[]):(this.geraete=[],this.steps=void 0,this.wertungen=void 0,this._competition=E,this._durchgang=j,this._geraet=void 0,this._step=void 0,this.captionmode=!0,this.loadGeraete())}loadGeraete(){if(this.geraete=[],!this._competition||"undefined"===this._competition)return console.log("reusing geraetelist"),(0,R.of)([]);console.log("renewing geraetelist");let E="";E=this.captionmode&&this._durchgang&&"undefined"!==this._durchgang?_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang):_.AC+"api/durchgang/"+this._competition+"/geraete";const j=this.startLoading("Ger\xe4te zum Durchgang werden geladen. Bitte warten ...",this.http.get(E).pipe((0,M.B)()));return j.subscribe({next:P=>{this.geraete=P,this.geraeteSubject.next(this.geraete)},error:this.standardErrorHandler}),j}getSteps(E,j,P){if(void 0!==this.steps&&this._competition===E&&this._durchgang===j&&this._geraet===P||this.isInitializing)return(0,R.of)(this.steps||[]);this.steps=[],this.wertungen=void 0,this._competition=E,this._durchgang=j,this._geraet=P,this._step=void 0;const K=this.loadSteps();return K.subscribe({next:pe=>{this.steps=pe.map(ke=>parseInt(ke)),(void 0===this._step||this.steps.indexOf(this._step)<0)&&(this._step=this.steps[0],this.loadWertungen())},error:this.standardErrorHandler}),K}loadSteps(){if(this.steps=[],!this._competition||"undefined"===this._competition||!this._durchgang||"undefined"===this._durchgang||void 0===this._geraet)return(0,R.of)([]);const E=this.startLoading("Stationen zum Ger\xe4t werden geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/"+this._geraet).pipe((0,M.B)()));return E.subscribe({next:j=>{this.steps=j},error:this.standardErrorHandler}),E}getWertungen(E,j,P,K){void 0!==this.wertungen&&this._competition===E&&this._durchgang===j&&this._geraet===P&&this._step===K||this.isInitializing||(this.wertungen=[],this._competition=E,this._durchgang=j,this._geraet=P,this._step=K,this.loadWertungen())}activateCaptionMode(){this.competitions||this.getCompetitions(),this.durchgaenge||this.loadDurchgaenge(),(!this.captionmode||!this.geraete)&&(this.captionmode=!0,this.loadGeraete()),this.geraet&&!this.steps&&this.loadSteps(),this.geraet&&(this.disconnectWS(!0),this.initWebsocket())}loadWertungen(){if(this.wertungenLoading||void 0===this._geraet||void 0===this._step)return(0,R.of)([]);this.activateCaptionMode();const E=this._step;this.wertungenLoading=!0;const j=this.startLoading("Riegenteilnehmer werden geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/"+this._geraet+"/"+this._step).pipe((0,M.B)()));return j.subscribe({next:P=>{this.wertungenLoading=!1,this._step!==E?this.loadWertungen():(this.wertungen=P,this.wertungenSubject.next(this.wertungen))},error:this.standardErrorHandler}),j}loadAthletWertungen(E,j){return this.activateNonCaptionMode(E),this.startLoading("Wertungen werden geladen. Bitte warten ...",this.http.get(_.AC+`api/athlet/${this._competition}/${j}`).pipe((0,M.B)()))}activateNonCaptionMode(E){return this._competition!==E||this.captionmode||!this.geraete||0===this.geraete.length||E&&!this.isWebsocketConnected()?(this.captionmode=!1,this._competition=E,this.disconnectWS(!0),this.initWebsocket(),this.loadGeraete()):(0,R.of)(this.geraete)}loadStartlist(E){return this._competition?this.startLoading("Teilnehmerliste wird geladen. Bitte warten ...",E?this.http.get(_.AC+"api/report/"+this._competition+"/startlist?q="+E).pipe((0,M.B)()):this.http.get(_.AC+"api/report/"+this._competition+"/startlist").pipe((0,M.B)())):(0,R.of)()}isMessageAck(E){return"MessageAck"===E.type}updateWertung(E,j,P,K){const pe=K.wettkampfUUID,ke=new ge.x;return this.shouldConnectAgain()&&this.reconnect(),this.startLoading("Wertung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/durchgang/"+pe+"/"+(0,o.gT)(E)+"/"+P+"/"+j,K).pipe((0,M.B)())).subscribe({next:Te=>{if(!this.isMessageAck(Te)&&Te.wertung){let ie=!1;this.wertungen=this.wertungen.map(Be=>Be.wertung.id===Te.wertung.id?(ie=!0,Te):Be),this.wertungenSubject.next(this.wertungen),ke.next(Te),ie&&ke.complete()}else{const ie=Te;this.showMessage.next(ie),ke.error(ie.msg),ke.complete()}},error:this.standardErrorHandler}),ke}finishStation(E,j,P,K){const pe=new ge.x;return this.startLoading("Station wird abgeschlossen. Bitte warten ...",this.http.post(_.AC+"api/durchgang/"+E+"/finish",{type:"FinishDurchgangStation",wettkampfUUID:E,durchgang:j,geraet:P,step:K}).pipe((0,M.B)())).subscribe({next:ke=>{const Te=this.steps.filter(ie=>ie>K);Te.length>0?this._step=Te[0]:(localStorage.removeItem("current_station"),this.checkJWT(),this.stationFreezed=!1,this._step=this.steps[0]),this.loadWertungen().subscribe(ie=>{pe.next(Te)})},error:this.standardErrorHandler}),pe.asObservable()}nextStep(){const E=this.steps.filter(j=>j>this._step);return E.length>0?E[0]:this.steps[0]}prevStep(){const E=this.steps.filter(j=>j0?E[E.length-1]:this.steps[this.steps.length-1]}getPrevGeraet(){let E=this.geraete.indexOf(this.geraete.find(j=>j.id===this._geraet))-1;return E<0&&(E=this.geraete.length-1),this.geraete[E].id}getNextGeraet(){let E=this.geraete.indexOf(this.geraete.find(j=>j.id===this._geraet))+1;return E>=this.geraete.length&&(E=0),this.geraete[E].id}nextGeraet(){if(this.loggedIn){const E=this.steps.filter(j=>j>this._step);return(0,R.of)(E.length>0?E[0]:this.steps[0])}{const E=this._step;return this._geraet=this.getNextGeraet(),this.loadSteps().pipe((0,U.U)(j=>{const P=j.filter(K=>K>E);return P.length>0?P[0]:this.steps[0]}))}}prevGeraet(){if(this.loggedIn){const E=this.steps.filter(j=>j0?E[E.length-1]:this.steps[this.steps.length-1])}{const E=this._step;return this._geraet=this.getPrevGeraet(),this.loadSteps().pipe((0,U.U)(j=>{const P=this.steps.filter(K=>K0?P[P.length-1]:this.steps[this.steps.length-1]}))}}getScoreList(E){return this._competition?this.startLoading("Rangliste wird geladen. Bitte warten ...",this.http.get(`${_.AC}${E}`).pipe((0,M.B)())):(0,R.of)({})}getScoreLists(){return this._competition?this.startLoading("Ranglisten werden geladen. Bitte warten ...",this.http.get(`${_.AC}api/scores/${this._competition}`).pipe((0,M.B)())):(0,R.of)(Object.assign({}))}getWebsocketBackendUrl(){let E=location.host;const P="https:"===location.protocol?"wss:":"ws:";let K="api/";return K=this._durchgang&&this.captionmode?K+"durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/ws":K+"durchgang/"+this._competition+"/all/ws",E=E&&""!==E?(P+"//"+E+"/").replace("index.html",""):"wss://kutuapp.sharevic.net/",E+K}handleWebsocketMessage(E){switch(E.type){case"BulkEvent":return E.events.map(pe=>this.handleWebsocketMessage(pe)).reduce((pe,ke)=>pe&&ke);case"DurchgangStarted":return this._activeDurchgangList=[...this.activeDurchgangList,E],this.durchgangStarted.next(this.activeDurchgangList),!0;case"DurchgangFinished":const P=E;return this._activeDurchgangList=this.activeDurchgangList.filter(pe=>pe.durchgang!==P.durchgang||pe.wettkampfUUID!==P.wettkampfUUID),this.durchgangStarted.next(this.activeDurchgangList),!0;case"AthletWertungUpdatedSequenced":case"AthletWertungUpdated":const K=E;return this.wertungen=this.wertungen.map(pe=>pe.id===K.wertung.athletId&&pe.wertung.wettkampfdisziplinId===K.wertung.wettkampfdisziplinId?Object.assign({},pe,{wertung:K.wertung}):pe),this.wertungenSubject.next(this.wertungen),this.wertungUpdated.next(K),!0;case"AthletMovedInWettkampf":case"AthletRemovedFromWettkampf":return this.loadWertungen(),!0;case"NewLastResults":return this.newLastResults.next(E),!0;case"MessageAck":return console.log(E.msg),this.showMessage.next(E),!0;default:return!1}}}return S.\u0275fac=function(E){return new(E||S)(Y.LFG(x.eN),Y.LFG(G.HT))},S.\u0275prov=Y.Yz7({token:S,factory:S.\u0275fac,providedIn:"root"}),S})()},9192:(Qe,Fe,w)=>{"use strict";w.d(Fe,{iw:()=>B,_5:()=>Z,gT:()=>S});var o=w(1135),x=w(7579),N=w(1566),ge=w(9751),R=w(3532);var _=w(7225),Y=w(2529),G=w(8274);function Z(E){return E?E.replace(/[,&.*+?/^${}()|[\]\\]/g,"_"):""}function S(E){return E?encodeURIComponent(Z(E)):""}let B=(()=>{class E{constructor(){this.identifiedState=!1,this.connectedState=!1,this.explicitClosed=!0,this.reconnectInterval=3e4,this.reconnectAttempts=480,this.lstKeepAliveReceived=0,this.connected=new o.X(!1),this.identified=new o.X(!1),this.logMessages=new o.X(""),this.showMessage=new x.x,this.lastMessages=[]}get stopped(){return this.explicitClosed}startKeepAliveObservation(){setTimeout(()=>{const K=(new Date).getTime()-this.lstKeepAliveReceived;!this.explicitClosed&&!this.reconnectionObservable&&K>this.reconnectInterval?(this.logMessages.next("connection verified since "+K+"ms. It seems to be dead and need to be reconnected!"),this.disconnectWS(!1),this.reconnect()):this.logMessages.next("connection verified since "+K+"ms"),this.startKeepAliveObservation()},this.reconnectInterval)}sendMessage(P){this.websocket?this.connectedState&&this.websocket.send(P):this.connect(P)}disconnectWS(P=!0){this.explicitClosed=P,this.lstKeepAliveReceived=0,this.websocket?(this.websocket.close(),P&&this.close()):this.close()}close(){this.websocket&&(this.websocket.onerror=void 0,this.websocket.onclose=void 0,this.websocket.onopen=void 0,this.websocket.onmessage=void 0,this.websocket.close()),this.websocket=void 0,this.identifiedState=!1,this.lstKeepAliveReceived=0,this.identified.next(this.identifiedState),this.connectedState=!1,this.connected.next(this.connectedState)}isWebsocketConnected(){return this.websocket&&this.websocket.readyState===this.websocket.OPEN}isWebsocketConnecting(){return this.websocket&&this.websocket.readyState===this.websocket.CONNECTING}shouldConnectAgain(){return!(this.isWebsocketConnected()||this.isWebsocketConnecting())}reconnect(){if(!this.reconnectionObservable){this.logMessages.next("start try reconnection ..."),this.reconnectionObservable=function U(E=0,j=N.z){return E<0&&(E=0),function M(E=0,j,P=N.P){let K=-1;return null!=j&&((0,R.K)(j)?P=j:K=j),new ge.y(pe=>{let ke=function W(E){return E instanceof Date&&!isNaN(E)}(E)?+E-P.now():E;ke<0&&(ke=0);let Te=0;return P.schedule(function(){pe.closed||(pe.next(Te++),0<=K?this.schedule(void 0,K):pe.complete())},ke)})}(E,E,j)}(this.reconnectInterval).pipe((0,Y.o)((K,pe)=>pe{this.shouldConnectAgain()&&(this.logMessages.next("continue with reconnection ..."),this.connect(void 0))},null,()=>{this.reconnectionObservable=null,P.unsubscribe(),this.isWebsocketConnected()?this.logMessages.next("finish with reconnection (successfull)"):this.isWebsocketConnecting()?this.logMessages.next("continue with reconnection (CONNECTING)"):(!this.websocket||this.websocket.CLOSING||this.websocket.CLOSED)&&(this.disconnectWS(),this.logMessages.next("finish with reconnection (unsuccessfull)"))})}}initWebsocket(){this.logMessages.subscribe(P=>{this.lastMessages.push((0,_.sZ)(!0)+` - ${P}`),this.lastMessages=this.lastMessages.slice(Math.max(this.lastMessages.length-50,0))}),this.logMessages.next("init"),this.backendUrl=this.getWebsocketBackendUrl()+`?clientid=${(0,_.ix)()}`,this.logMessages.next("init with "+this.backendUrl),this.connect(void 0),this.startKeepAliveObservation()}connect(P){this.disconnectWS(),this.explicitClosed=!1,this.websocket=new WebSocket(this.backendUrl),this.websocket.onopen=()=>{this.connectedState=!0,this.connected.next(this.connectedState),P&&this.sendMessage(P)},this.websocket.onclose=pe=>{switch(this.close(),pe.code){case 1001:this.logMessages.next("Going Away"),this.explicitClosed||this.reconnect();break;case 1002:this.logMessages.next("Protocol error"),this.explicitClosed||this.reconnect();break;case 1003:this.logMessages.next("Unsupported Data"),this.explicitClosed||this.reconnect();break;case 1005:this.logMessages.next("No Status Rcvd"),this.explicitClosed||this.reconnect();break;case 1006:this.logMessages.next("Abnormal Closure"),this.explicitClosed||this.reconnect();break;case 1007:this.logMessages.next("Invalid frame payload data"),this.explicitClosed||this.reconnect();break;case 1008:this.logMessages.next("Policy Violation"),this.explicitClosed||this.reconnect();break;case 1009:this.logMessages.next("Message Too Big"),this.explicitClosed||this.reconnect();break;case 1010:this.logMessages.next("Mandatory Ext."),this.explicitClosed||this.reconnect();break;case 1011:this.logMessages.next("Internal Server Error"),this.explicitClosed||this.reconnect();break;case 1015:this.logMessages.next("TLS handshake")}},this.websocket.onmessage=pe=>{if(this.lstKeepAliveReceived=(new Date).getTime(),!pe.data.startsWith("Connection established.")&&"keepAlive"!==pe.data)try{const ke=JSON.parse(pe.data);"MessageAck"===ke.type?(console.log(ke.msg),this.showMessage.next(ke)):this.handleWebsocketMessage(ke)||(console.log(ke),this.logMessages.next("unknown message: "+pe.data))}catch(ke){this.logMessages.next(ke+": "+pe.data)}},this.websocket.onerror=pe=>{this.logMessages.next(pe.message+", "+pe.type)}}}return E.\u0275fac=function(P){return new(P||E)},E.\u0275prov=G.Yz7({token:E,factory:E.\u0275fac,providedIn:"root"}),E})()},7225:(Qe,Fe,w)=>{"use strict";w.d(Fe,{AC:()=>M,WZ:()=>B,ix:()=>S,sZ:()=>Y,tC:()=>_});const ge=location.host,M=(location.protocol+"//"+ge+"/").replace("index.html","");function _(E){let j=new Date;j=function U(E){return null!=E&&""!==E&&!isNaN(Number(E.toString()))}(E)?new Date(parseInt(E)):new Date(Date.parse(E));const P=`${j.getFullYear().toString()}-${("0"+(j.getMonth()+1)).slice(-2)}-${("0"+j.getDate()).slice(-2)}`;return console.log(P),P}function Y(E=!1){return function G(E,j=!1){const P=("0"+E.getDate()).slice(-2)+"-"+("0"+(E.getMonth()+1)).slice(-2)+"-"+E.getFullYear()+" "+("0"+E.getHours()).slice(-2)+":"+("0"+E.getMinutes()).slice(-2);return j?P+":"+("0"+E.getSeconds()).slice(-2):P}(new Date,E)}function S(){let E=localStorage.getItem("clientid");return E||(E=function Z(){function E(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return E()+E()+"-"+E()+"-"+E()+"-"+E()+"-"+E()+E()+E()}(),localStorage.setItem("clientid",E)),localStorage.getItem("current_username")+":"+E}const B={1:"boden.svg",2:"pferdpauschen.svg",3:"ringe.svg",4:"sprung.svg",5:"barren.svg",6:"reck.svg",26:"ringe.svg",27:"stufenbarren.svg",28:"schwebebalken.svg",29:"minitramp.svg",30:"minitramp.svg",31:"ringe.svg"}},1394:(Qe,Fe,w)=>{"use strict";var o=w(1481),x=w(8274),N=w(5472),ge=w(529),R=w(502);const M=(0,w(7423).fo)("SplashScreen",{web:()=>w.e(2680).then(w.bind(w,2680)).then(T=>new T.SplashScreenWeb)});var U=w(6895),_=w(3608);let Y=(()=>{class T{constructor(O){this.document=O;const te=localStorage.getItem("theme");te?this.setGlobalCSS(te):this.setTheme({})}setTheme(O){const te=function S(T){T={...G,...T};const{primary:k,secondary:O,tertiary:te,success:ce,warning:Ae,danger:De,dark:ue,medium:de,light:ne}=T,Ee=.2,Ce=.2;return`\n --ion-color-base: ${ne};\n --ion-color-contrast: ${ue};\n --ion-background-color: ${ne};\n --ion-card-background-color: ${E(ne,.4)};\n --ion-card-shadow-color1: ${E(ue,2).alpha(.2)};\n --ion-card-shadow-color2: ${E(ue,2).alpha(.14)};\n --ion-card-shadow-color3: ${E(ue,2).alpha(.12)};\n --ion-card-color: ${E(ue,2)};\n --ion-text-color: ${ue};\n --ion-toolbar-background-color: ${_(ne).lighten(Ce)};\n --ion-toolbar-text-color: ${B(ue,.2)};\n --ion-item-background-color: ${B(ne,.1)};\n --ion-item-background-activated: ${B(ne,.3)};\n --ion-item-text-color: ${B(ue,.1)};\n --ion-item-border-color: ${_(de).lighten(Ce)};\n --ion-overlay-background-color: ${E(ne,.1)};\n --ion-color-primary: ${k};\n --ion-color-primary-rgb: ${j(k)};\n --ion-color-primary-contrast: ${B(k)};\n --ion-color-primary-contrast-rgb: ${j(B(k))};\n --ion-color-primary-shade: ${_(k).darken(Ee)};\n --ion-color-primary-tint: ${_(k).lighten(Ce)};\n --ion-color-secondary: ${O};\n --ion-color-secondary-rgb: ${j(O)};\n --ion-color-secondary-contrast: ${B(O)};\n --ion-color-secondary-contrast-rgb: ${j(B(O))};\n --ion-color-secondary-shade: ${_(O).darken(Ee)};\n --ion-color-secondary-tint: ${_(O).lighten(Ce)};\n --ion-color-tertiary: ${te};\n --ion-color-tertiary-rgb: ${j(te)};\n --ion-color-tertiary-contrast: ${B(te)};\n --ion-color-tertiary-contrast-rgb: ${j(B(te))};\n --ion-color-tertiary-shade: ${_(te).darken(Ee)};\n --ion-color-tertiary-tint: ${_(te).lighten(Ce)};\n --ion-color-success: ${ce};\n --ion-color-success-rgb: ${j(ce)};\n --ion-color-success-contrast: ${B(ce)};\n --ion-color-success-contrast-rgb: ${j(B(ce))};\n --ion-color-success-shade: ${_(ce).darken(Ee)};\n --ion-color-success-tint: ${_(ce).lighten(Ce)};\n --ion-color-warning: ${Ae};\n --ion-color-warning-rgb: ${j(Ae)};\n --ion-color-warning-contrast: ${B(Ae)};\n --ion-color-warning-contrast-rgb: ${j(B(Ae))};\n --ion-color-warning-shade: ${_(Ae).darken(Ee)};\n --ion-color-warning-tint: ${_(Ae).lighten(Ce)};\n --ion-color-danger: ${De};\n --ion-color-danger-rgb: ${j(De)};\n --ion-color-danger-contrast: ${B(De)};\n --ion-color-danger-contrast-rgb: ${j(B(De))};\n --ion-color-danger-shade: ${_(De).darken(Ee)};\n --ion-color-danger-tint: ${_(De).lighten(Ce)};\n --ion-color-dark: ${ue};\n --ion-color-dark-rgb: ${j(ue)};\n --ion-color-dark-contrast: ${B(ue)};\n --ion-color-dark-contrast-rgb: ${j(B(ue))};\n --ion-color-dark-shade: ${_(ue).darken(Ee)};\n --ion-color-dark-tint: ${_(ue).lighten(Ce)};\n --ion-color-medium: ${de};\n --ion-color-medium-rgb: ${j(de)};\n --ion-color-medium-contrast: ${B(de)};\n --ion-color-medium-contrast-rgb: ${j(B(de))};\n --ion-color-medium-shade: ${_(de).darken(Ee)};\n --ion-color-medium-tint: ${_(de).lighten(Ce)};\n --ion-color-light: ${ne};\n --ion-color-light-rgb: ${j(ne)};\n --ion-color-light-contrast: ${B(ne)};\n --ion-color-light-contrast-rgb: ${j(B(ne))};\n --ion-color-light-shade: ${_(ne).darken(Ee)};\n --ion-color-light-tint: ${_(ne).lighten(Ce)};`+function Z(T,k){void 0===T&&(T="#ffffff"),void 0===k&&(k="#000000");const O=new _(T);let te="";for(let ce=5;ce<100;ce+=5){const De=ce/100;te+=` --ion-color-step-${ce+"0"}: ${O.mix(_(k),De).hex()};`,ce<95&&(te+="\n")}return te}(ue,ne)}(O);this.setGlobalCSS(te),localStorage.setItem("theme",te)}setVariable(O,te){this.document.documentElement.style.setProperty(O,te)}setGlobalCSS(O){this.document.documentElement.style.cssText=O}get storedTheme(){return localStorage.getItem("theme")}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(U.K0))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})();const G={primary:"#3880ff",secondary:"#0cd1e8",tertiary:"#7044ff",success:"#10dc60",warning:"#ff7b00",danger:"#f04141",dark:"#222428",medium:"#989aa2",light:"#fcfdff"};function B(T,k=.8){const O=_(T);return O.isDark()?O.lighten(k):O.darken(k)}function E(T,k=.8){const O=_(T);return O.isDark()?O.darken(k):O.lighten(k)}function j(T){const k=_(T);return`${k.red()}, ${k.green()}, ${k.blue()}`}var P=w(600);function K(T,k){if(1&T){const O=x.EpF();x.TgZ(0,"ion-item",4),x.NdJ("click",function(){const Ae=x.CHM(O).$implicit,De=x.oxw();return x.KtG(De.openPage(Ae.url))}),x._UZ(1,"ion-icon",9),x.TgZ(2,"ion-label"),x._uU(3),x.qZA()()}if(2&T){const O=k.$implicit;x.xp6(1),x.Q6J("name",O.icon),x.xp6(2),x.hij(" ",O.title," ")}}function pe(T,k){if(1&T){const O=x.EpF();x.TgZ(0,"ion-item",4),x.NdJ("click",function(){const Ae=x.CHM(O).$implicit,De=x.oxw();return x.KtG(De.changeTheme(Ae))}),x._UZ(1,"ion-icon",6),x.TgZ(2,"ion-label"),x._uU(3),x.qZA()()}if(2&T){const O=k.$implicit,te=x.oxw();x.Udp("background-color",te.themes[O].light)("color",te.themes[O].dark),x.xp6(2),x.Udp("background-color",te.themes[O].light)("color",te.themes[O].dark),x.xp6(1),x.hij(" ",O," ")}}let ke=(()=>{class T{constructor(O,te,ce,Ae,De,ue,de){this.platform=O,this.navController=te,this.route=ce,this.router=Ae,this.themeSwitcher=De,this.backendService=ue,this.alertCtrl=de,this.themes={Blau:{primary:"#ffa238",secondary:"#a19137",tertiary:"#421804",success:"#0eb651",warning:"#ff7b00",danger:"#f04141",dark:"#fffdf5",medium:"#454259",light:"#03163d"},Sport:{primary:"#ffa238",secondary:"#7dc0ff",tertiary:"#421804",success:"#0eb651",warning:"#ff7b00",danger:"#f04141",dark:"#03163d",medium:"#8092dd",light:"#fffdf5"},Dunkel:{primary:"#8DBB82",secondary:"#FCFF6C",tertiary:"#FE5F55",warning:"#ffce00",medium:"#BCC2C7",dark:"#DADFE1",light:"#363232"},Neon:{primary:"#23ff00",secondary:"#4CE0B3",tertiary:"#FF5E79",warning:"#ff7b00",light:"#F4EDF2",medium:"#B682A5",dark:"#34162A"}},this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"},{title:"Letzte Resultate",url:"last-results",icon:"radio"},{title:"Top Resultate",url:"top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"},{title:"Wettkampfanmeldungen",url:"/registration",icon:"people-outline"}],this.backendService.askForUsername.subscribe(ne=>{this.alertCtrl.create({header:"Settings",message:ne.currentUserName?"Dein Benutzername":"Du bist das erste Mal hier. Bitte gib einen Benutzernamen an",inputs:[{name:"username",placeholder:"Benutzername",value:ne.currentUserName}],buttons:[{text:"Abbrechen",role:"cancel",handler:()=>{console.log("Cancel clicked")}},{text:"Speichern",handler:Ce=>{if(!(Ce.username&&Ce.username.trim().length>1))return!1;ne.currentUserName=Ce.username.trim()}}]}).then(Ce=>Ce.present())}),this.backendService.showMessage.subscribe(ne=>{let Ee=ne.msg;(!Ee||0===Ee.trim().length)&&(Ee="Die gew\xfcnschte Aktion ist aktuell nicht m\xf6glich."),this.alertCtrl.create({header:"Achtung",message:Ee,buttons:["OK"]}).then(ze=>ze.present())}),this.initializeApp()}get themeKeys(){return Object.keys(this.themes)}clearPosParam(){this.router.navigate(["."],{relativeTo:this.route,queryParams:{}})}initializeApp(){this.platform.ready().then(()=>{if(M.show(),window.location.href.indexOf("?")>0)try{const O=window.location.href.split("?")[1],te=atob(O);O.startsWith("all")?(this.appPages=[{title:"Alle Resultate",url:"/all-results",icon:"radio"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/last-results")):O.startsWith("top")?(this.appPages=[{title:"Top Resultate",url:"/top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/top-results")):te.startsWith("last")?(this.appPages=[{title:"Aktuelle Resultate",url:"/last-results",icon:"radio"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/last-results"),this.backendService.initWithQuery(te.substring(5))):te.startsWith("top")?(this.appPages=[{title:"Top Resultate",url:"/top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/top-results"),this.backendService.initWithQuery(te.substring(4))):te.startsWith("registration")?(window.history.replaceState({},document.title,window.location.href.split("?")[0]),this.clearPosParam(),console.log("initializing with "+te),localStorage.setItem("external_load",te),this.backendService.initWithQuery(te.substring(13)).subscribe(ce=>{console.log("clubreg initialzed. navigate to clubreg-editor"),this.navController.navigateRoot("/registration/"+this.backendService.competition+"/"+localStorage.getItem("auth_clubid"))})):(window.history.replaceState({},document.title,window.location.href.split("?")[0]),this.clearPosParam(),console.log("initializing with "+te),localStorage.setItem("external_load",te),this.backendService.initWithQuery(te).subscribe(ce=>{te.startsWith("c=")&&te.indexOf("&st=")>-1&&te.indexOf("&g=")>-1&&(this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"}],this.navController.navigateRoot("/station"))}))}catch(O){console.log(O)}else if(localStorage.getItem("current_station")){const O=localStorage.getItem("current_station");this.backendService.initWithQuery(O).subscribe(te=>{O.startsWith("c=")&&O.indexOf("&st=")&&O.indexOf("&g=")&&(this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"}],this.navController.navigateRoot("/station"))})}else if(localStorage.getItem("current_competition")){const O=localStorage.getItem("current_competition");this.backendService.getDurchgaenge(O)}M.hide()})}askUserName(){this.backendService.askForUsername.next(this.backendService)}changeTheme(O){this.themeSwitcher.setTheme(this.themes[O])}openPage(O){this.navController.navigateRoot(O)}}return T.\u0275fac=function(O){return new(O||T)(x.Y36(R.t4),x.Y36(R.SH),x.Y36(N.gz),x.Y36(N.F0),x.Y36(Y),x.Y36(P.v),x.Y36(R.Br))},T.\u0275cmp=x.Xpm({type:T,selectors:[["app-root"]],decls:25,vars:2,consts:[["contentId","main","disabled","true"],["contentId","main"],["auto-hide","false"],["menuClose","",3,"click",4,"ngFor","ngForOf"],["menuClose","",3,"click"],["slot","start","name","settings"],["slot","start","name","color-palette"],["menuClose","",3,"background-color","color","click",4,"ngFor","ngForOf"],["id","main"],["slot","start",3,"name"]],template:function(O,te){1&O&&(x.TgZ(0,"ion-app")(1,"ion-split-pane",0)(2,"ion-menu",1)(3,"ion-header")(4,"ion-toolbar")(5,"ion-title"),x._uU(6,"Menu"),x.qZA()()(),x.TgZ(7,"ion-content")(8,"ion-list")(9,"ion-menu-toggle",2),x.YNc(10,K,4,2,"ion-item",3),x.TgZ(11,"ion-item",4),x.NdJ("click",function(){return te.askUserName()}),x._UZ(12,"ion-icon",5),x.TgZ(13,"ion-label"),x._uU(14," Settings "),x.qZA()(),x.TgZ(15,"ion-item-divider"),x._uU(16,"\xa0"),x._UZ(17,"br"),x._uU(18," Farbschema"),x.qZA(),x.TgZ(19,"ion-item",4),x.NdJ("click",function(){return te.changeTheme("")}),x._UZ(20,"ion-icon",6),x.TgZ(21,"ion-label"),x._uU(22," Standardfarben "),x.qZA()(),x.YNc(23,pe,4,9,"ion-item",7),x.qZA()()()(),x._UZ(24,"ion-router-outlet",8),x.qZA()()),2&O&&(x.xp6(10),x.Q6J("ngForOf",te.appPages),x.xp6(13),x.Q6J("ngForOf",te.themeKeys))},dependencies:[U.sg,R.dr,R.W2,R.Gu,R.gu,R.Ie,R.rH,R.Q$,R.q_,R.z0,R.zc,R.jI,R.wd,R.sr,R.jP],encapsulation:2}),T})(),Te=(()=>{class T{constructor(O,te){this.router=O,this.backendService=te}canActivate(O){return!(!this.backendService.geraet||!this.backendService.step)||(this.router.navigate(["home"]),!1)}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(N.F0),x.LFG(P.v))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})(),ie=(()=>{class T{constructor(O,te){this.router=O,this.backendService=te}canActivate(O){const te=O.paramMap.get("wkId"),ce=O.paramMap.get("regId");return!!("0"===ce||this.backendService.loggedIn&&this.backendService.authenticatedClubId===ce)||(this.router.navigate(["registration/"+te]),!1)}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(N.F0),x.LFG(P.v))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})();const Be=[{path:"",redirectTo:"home",pathMatch:"full"},{path:"home",loadChildren:()=>w.e(4902).then(w.bind(w,4902)).then(T=>T.HomePageModule)},{path:"station",canActivate:[Te],loadChildren:()=>Promise.all([w.e(8592),w.e(3050)]).then(w.bind(w,3050)).then(T=>T.StationPageModule)},{path:"wertung-editor/:itemId",canActivate:[Te],loadChildren:()=>Promise.all([w.e(8592),w.e(2539)]).then(w.bind(w,58)).then(T=>T.WertungEditorPageModule)},{path:"last-results",loadChildren:()=>Promise.all([w.e(8592),w.e(9946)]).then(w.bind(w,9946)).then(T=>T.LastResultsPageModule)},{path:"top-results",loadChildren:()=>Promise.all([w.e(8592),w.e(5332)]).then(w.bind(w,5332)).then(T=>T.LastTopResultsPageModule)},{path:"search-athlet",loadChildren:()=>Promise.all([w.e(8592),w.e(3375)]).then(w.bind(w,3375)).then(T=>T.SearchAthletPageModule)},{path:"search-athlet/:wkId",loadChildren:()=>Promise.all([w.e(8592),w.e(3375)]).then(w.bind(w,3375)).then(T=>T.SearchAthletPageModule)},{path:"athlet-view/:wkId/:athletId",loadChildren:()=>Promise.all([w.e(8592),w.e(5201)]).then(w.bind(w,5201)).then(T=>T.AthletViewPageModule)},{path:"registration",loadChildren:()=>Promise.all([w.e(8592),w.e(5323)]).then(w.bind(w,5323)).then(T=>T.RegistrationPageModule)},{path:"registration/:wkId",loadChildren:()=>Promise.all([w.e(8592),w.e(5323)]).then(w.bind(w,5323)).then(T=>T.RegistrationPageModule)},{path:"registration/:wkId/:regId",canActivate:[ie],loadChildren:()=>w.e(1994).then(w.bind(w,1994)).then(T=>T.ClubregEditorPageModule)},{path:"reg-athletlist/:wkId/:regId",canActivate:[ie],loadChildren:()=>Promise.all([w.e(8592),w.e(170)]).then(w.bind(w,170)).then(T=>T.RegAthletlistPageModule)},{path:"reg-athletlist/:wkId/:regId/:athletId",canActivate:[ie],loadChildren:()=>w.e(5231).then(w.bind(w,5231)).then(T=>T.RegAthletEditorPageModule)},{path:"reg-judgelist/:wkId/:regId",canActivate:[ie],loadChildren:()=>Promise.all([w.e(8592),w.e(6482)]).then(w.bind(w,6482)).then(T=>T.RegJudgelistPageModule)},{path:"reg-judgelist/:wkId/:regId/:judgeId",canActivate:[ie],loadChildren:()=>w.e(1053).then(w.bind(w,1053)).then(T=>T.RegJudgeEditorPageModule)}];let re=(()=>{class T{}return T.\u0275fac=function(O){return new(O||T)},T.\u0275mod=x.oAB({type:T}),T.\u0275inj=x.cJS({imports:[N.Bz.forRoot(Be,{preloadingStrategy:N.wm}),N.Bz]}),T})();var oe=w(7225);let be=(()=>{class T{constructor(){}intercept(O,te){const ce=O.headers.get("x-access-token")||localStorage.getItem("auth_token");return O=O.clone({setHeaders:{clientid:`${(0,oe.ix)()}`,"x-access-token":`${ce}`}}),te.handle(O)}}return T.\u0275fac=function(O){return new(O||T)},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})(),Ne=(()=>{class T{}return T.\u0275fac=function(O){return new(O||T)},T.\u0275mod=x.oAB({type:T,bootstrap:[ke]}),T.\u0275inj=x.cJS({providers:[Te,{provide:N.wN,useClass:R.r4},P.v,Y,be,{provide:ge.TP,useClass:be,multi:!0}],imports:[ge.JF,o.b2,R.Pc.forRoot(),re]}),T})();(0,x.G48)(),o.q6().bootstrapModule(Ne).catch(T=>console.log(T))},9914:Qe=>{"use strict";Qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},9655:(Qe,Fe,w)=>{var o=w(9914),x=w(6931),N=Object.hasOwnProperty,ge=Object.create(null);for(var R in o)N.call(o,R)&&(ge[o[R]]=R);var W=Qe.exports={to:{},get:{}};function M(_,Y,G){return Math.min(Math.max(Y,_),G)}function U(_){var Y=Math.round(_).toString(16).toUpperCase();return Y.length<2?"0"+Y:Y}W.get=function(_){var G,Z;switch(_.substring(0,3).toLowerCase()){case"hsl":G=W.get.hsl(_),Z="hsl";break;case"hwb":G=W.get.hwb(_),Z="hwb";break;default:G=W.get.rgb(_),Z="rgb"}return G?{model:Z,value:G}:null},W.get.rgb=function(_){if(!_)return null;var j,P,K,E=[0,0,0,1];if(j=_.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(K=j[2],j=j[1],P=0;P<3;P++){var pe=2*P;E[P]=parseInt(j.slice(pe,pe+2),16)}K&&(E[3]=parseInt(K,16)/255)}else if(j=_.match(/^#([a-f0-9]{3,4})$/i)){for(K=(j=j[1])[3],P=0;P<3;P++)E[P]=parseInt(j[P]+j[P],16);K&&(E[3]=parseInt(K+K,16)/255)}else if(j=_.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(P=0;P<3;P++)E[P]=parseInt(j[P+1],0);j[4]&&(E[3]=j[5]?.01*parseFloat(j[4]):parseFloat(j[4]))}else{if(!(j=_.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)))return(j=_.match(/^(\w+)$/))?"transparent"===j[1]?[0,0,0,0]:N.call(o,j[1])?((E=o[j[1]])[3]=1,E):null:null;for(P=0;P<3;P++)E[P]=Math.round(2.55*parseFloat(j[P+1]));j[4]&&(E[3]=j[5]?.01*parseFloat(j[4]):parseFloat(j[4]))}for(P=0;P<3;P++)E[P]=M(E[P],0,255);return E[3]=M(E[3],0,1),E},W.get.hsl=function(_){if(!_)return null;var G=_.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(G){var Z=parseFloat(G[4]);return[(parseFloat(G[1])%360+360)%360,M(parseFloat(G[2]),0,100),M(parseFloat(G[3]),0,100),M(isNaN(Z)?1:Z,0,1)]}return null},W.get.hwb=function(_){if(!_)return null;var G=_.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(G){var Z=parseFloat(G[4]);return[(parseFloat(G[1])%360+360)%360,M(parseFloat(G[2]),0,100),M(parseFloat(G[3]),0,100),M(isNaN(Z)?1:Z,0,1)]}return null},W.to.hex=function(){var _=x(arguments);return"#"+U(_[0])+U(_[1])+U(_[2])+(_[3]<1?U(Math.round(255*_[3])):"")},W.to.rgb=function(){var _=x(arguments);return _.length<4||1===_[3]?"rgb("+Math.round(_[0])+", "+Math.round(_[1])+", "+Math.round(_[2])+")":"rgba("+Math.round(_[0])+", "+Math.round(_[1])+", "+Math.round(_[2])+", "+_[3]+")"},W.to.rgb.percent=function(){var _=x(arguments),Y=Math.round(_[0]/255*100),G=Math.round(_[1]/255*100),Z=Math.round(_[2]/255*100);return _.length<4||1===_[3]?"rgb("+Y+"%, "+G+"%, "+Z+"%)":"rgba("+Y+"%, "+G+"%, "+Z+"%, "+_[3]+")"},W.to.hsl=function(){var _=x(arguments);return _.length<4||1===_[3]?"hsl("+_[0]+", "+_[1]+"%, "+_[2]+"%)":"hsla("+_[0]+", "+_[1]+"%, "+_[2]+"%, "+_[3]+")"},W.to.hwb=function(){var _=x(arguments),Y="";return _.length>=4&&1!==_[3]&&(Y=", "+_[3]),"hwb("+_[0]+", "+_[1]+"%, "+_[2]+"%"+Y+")"},W.to.keyword=function(_){return ge[_.slice(0,3)]}},3608:(Qe,Fe,w)=>{const o=w(9655),x=w(798),N=["keyword","gray","hex"],ge={};for(const S of Object.keys(x))ge[[...x[S].labels].sort().join("")]=S;const R={};function W(S,B){if(!(this instanceof W))return new W(S,B);if(B&&B in N&&(B=null),B&&!(B in x))throw new Error("Unknown model: "+B);let E,j;if(null==S)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(S instanceof W)this.model=S.model,this.color=[...S.color],this.valpha=S.valpha;else if("string"==typeof S){const P=o.get(S);if(null===P)throw new Error("Unable to parse color from string: "+S);this.model=P.model,j=x[this.model].channels,this.color=P.value.slice(0,j),this.valpha="number"==typeof P.value[j]?P.value[j]:1}else if(S.length>0){this.model=B||"rgb",j=x[this.model].channels;const P=Array.prototype.slice.call(S,0,j);this.color=Z(P,j),this.valpha="number"==typeof S[j]?S[j]:1}else if("number"==typeof S)this.model="rgb",this.color=[S>>16&255,S>>8&255,255&S],this.valpha=1;else{this.valpha=1;const P=Object.keys(S);"alpha"in S&&(P.splice(P.indexOf("alpha"),1),this.valpha="number"==typeof S.alpha?S.alpha:0);const K=P.sort().join("");if(!(K in ge))throw new Error("Unable to parse color from object: "+JSON.stringify(S));this.model=ge[K];const{labels:pe}=x[this.model],ke=[];for(E=0;E(S%360+360)%360),saturationl:_("hsl",1,Y(100)),lightness:_("hsl",2,Y(100)),saturationv:_("hsv",1,Y(100)),value:_("hsv",2,Y(100)),chroma:_("hcg",1,Y(100)),gray:_("hcg",2,Y(100)),white:_("hwb",1,Y(100)),wblack:_("hwb",2,Y(100)),cyan:_("cmyk",0,Y(100)),magenta:_("cmyk",1,Y(100)),yellow:_("cmyk",2,Y(100)),black:_("cmyk",3,Y(100)),x:_("xyz",0,Y(95.047)),y:_("xyz",1,Y(100)),z:_("xyz",2,Y(108.833)),l:_("lab",0,Y(100)),a:_("lab",1),b:_("lab",2),keyword(S){return void 0!==S?new W(S):x[this.model].keyword(this.color)},hex(S){return void 0!==S?new W(S):o.to.hex(this.rgb().round().color)},hexa(S){if(void 0!==S)return new W(S);const B=this.rgb().round().color;let E=Math.round(255*this.valpha).toString(16).toUpperCase();return 1===E.length&&(E="0"+E),o.to.hex(B)+E},rgbNumber(){const S=this.rgb().color;return(255&S[0])<<16|(255&S[1])<<8|255&S[2]},luminosity(){const S=this.rgb().color,B=[];for(const[E,j]of S.entries()){const P=j/255;B[E]=P<=.04045?P/12.92:((P+.055)/1.055)**2.4}return.2126*B[0]+.7152*B[1]+.0722*B[2]},contrast(S){const B=this.luminosity(),E=S.luminosity();return B>E?(B+.05)/(E+.05):(E+.05)/(B+.05)},level(S){const B=this.contrast(S);return B>=7?"AAA":B>=4.5?"AA":""},isDark(){const S=this.rgb().color;return(2126*S[0]+7152*S[1]+722*S[2])/1e4<128},isLight(){return!this.isDark()},negate(){const S=this.rgb();for(let B=0;B<3;B++)S.color[B]=255-S.color[B];return S},lighten(S){const B=this.hsl();return B.color[2]+=B.color[2]*S,B},darken(S){const B=this.hsl();return B.color[2]-=B.color[2]*S,B},saturate(S){const B=this.hsl();return B.color[1]+=B.color[1]*S,B},desaturate(S){const B=this.hsl();return B.color[1]-=B.color[1]*S,B},whiten(S){const B=this.hwb();return B.color[1]+=B.color[1]*S,B},blacken(S){const B=this.hwb();return B.color[2]+=B.color[2]*S,B},grayscale(){const S=this.rgb().color,B=.3*S[0]+.59*S[1]+.11*S[2];return W.rgb(B,B,B)},fade(S){return this.alpha(this.valpha-this.valpha*S)},opaquer(S){return this.alpha(this.valpha+this.valpha*S)},rotate(S){const B=this.hsl();let E=B.color[0];return E=(E+S)%360,E=E<0?360+E:E,B.color[0]=E,B},mix(S,B){if(!S||!S.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof S);const E=S.rgb(),j=this.rgb(),P=void 0===B?.5:B,K=2*P-1,pe=E.alpha()-j.alpha(),ke=((K*pe==-1?K:(K+pe)/(1+K*pe))+1)/2,Te=1-ke;return W.rgb(ke*E.red()+Te*j.red(),ke*E.green()+Te*j.green(),ke*E.blue()+Te*j.blue(),E.alpha()*P+j.alpha()*(1-P))}};for(const S of Object.keys(x)){if(N.includes(S))continue;const{channels:B}=x[S];W.prototype[S]=function(...E){return this.model===S?new W(this):new W(E.length>0?E:[...G(x[this.model][S].raw(this.color)),this.valpha],S)},W[S]=function(...E){let j=E[0];return"number"==typeof j&&(j=Z(E,B)),new W(j,S)}}function U(S){return function(B){return function M(S,B){return Number(S.toFixed(B))}(B,S)}}function _(S,B,E){S=Array.isArray(S)?S:[S];for(const j of S)(R[j]||(R[j]=[]))[B]=E;return S=S[0],function(j){let P;return void 0!==j?(E&&(j=E(j)),P=this[S](),P.color[B]=j,P):(P=this[S]().color[B],E&&(P=E(P)),P)}}function Y(S){return function(B){return Math.max(0,Math.min(S,B))}}function G(S){return Array.isArray(S)?S:[S]}function Z(S,B){for(let E=0;E{const o=w(1382),x={};for(const R of Object.keys(o))x[o[R]]=R;const N={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};Qe.exports=N;for(const R of Object.keys(N)){if(!("channels"in N[R]))throw new Error("missing channels property: "+R);if(!("labels"in N[R]))throw new Error("missing channel labels property: "+R);if(N[R].labels.length!==N[R].channels)throw new Error("channel and label counts mismatch: "+R);const{channels:W,labels:M}=N[R];delete N[R].channels,delete N[R].labels,Object.defineProperty(N[R],"channels",{value:W}),Object.defineProperty(N[R],"labels",{value:M})}function ge(R,W){return(R[0]-W[0])**2+(R[1]-W[1])**2+(R[2]-W[2])**2}N.rgb.hsl=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.min(W,M,U),Y=Math.max(W,M,U),G=Y-_;let Z,S;Y===_?Z=0:W===Y?Z=(M-U)/G:M===Y?Z=2+(U-W)/G:U===Y&&(Z=4+(W-M)/G),Z=Math.min(60*Z,360),Z<0&&(Z+=360);const B=(_+Y)/2;return S=Y===_?0:B<=.5?G/(Y+_):G/(2-Y-_),[Z,100*S,100*B]},N.rgb.hsv=function(R){let W,M,U,_,Y;const G=R[0]/255,Z=R[1]/255,S=R[2]/255,B=Math.max(G,Z,S),E=B-Math.min(G,Z,S),j=function(P){return(B-P)/6/E+.5};return 0===E?(_=0,Y=0):(Y=E/B,W=j(G),M=j(Z),U=j(S),G===B?_=U-M:Z===B?_=1/3+W-U:S===B&&(_=2/3+M-W),_<0?_+=1:_>1&&(_-=1)),[360*_,100*Y,100*B]},N.rgb.hwb=function(R){const W=R[0],M=R[1];let U=R[2];const _=N.rgb.hsl(R)[0],Y=1/255*Math.min(W,Math.min(M,U));return U=1-1/255*Math.max(W,Math.max(M,U)),[_,100*Y,100*U]},N.rgb.cmyk=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.min(1-W,1-M,1-U);return[100*((1-W-_)/(1-_)||0),100*((1-M-_)/(1-_)||0),100*((1-U-_)/(1-_)||0),100*_]},N.rgb.keyword=function(R){const W=x[R];if(W)return W;let U,M=1/0;for(const _ of Object.keys(o)){const G=ge(R,o[_]);G.04045?((W+.055)/1.055)**2.4:W/12.92,M=M>.04045?((M+.055)/1.055)**2.4:M/12.92,U=U>.04045?((U+.055)/1.055)**2.4:U/12.92,[100*(.4124*W+.3576*M+.1805*U),100*(.2126*W+.7152*M+.0722*U),100*(.0193*W+.1192*M+.9505*U)]},N.rgb.lab=function(R){const W=N.rgb.xyz(R);let M=W[0],U=W[1],_=W[2];return M/=95.047,U/=100,_/=108.883,M=M>.008856?M**(1/3):7.787*M+16/116,U=U>.008856?U**(1/3):7.787*U+16/116,_=_>.008856?_**(1/3):7.787*_+16/116,[116*U-16,500*(M-U),200*(U-_)]},N.hsl.rgb=function(R){const W=R[0]/360,M=R[1]/100,U=R[2]/100;let _,Y,G;if(0===M)return G=255*U,[G,G,G];_=U<.5?U*(1+M):U+M-U*M;const Z=2*U-_,S=[0,0,0];for(let B=0;B<3;B++)Y=W+1/3*-(B-1),Y<0&&Y++,Y>1&&Y--,G=6*Y<1?Z+6*(_-Z)*Y:2*Y<1?_:3*Y<2?Z+(_-Z)*(2/3-Y)*6:Z,S[B]=255*G;return S},N.hsl.hsv=function(R){const W=R[0];let M=R[1]/100,U=R[2]/100,_=M;const Y=Math.max(U,.01);return U*=2,M*=U<=1?U:2-U,_*=Y<=1?Y:2-Y,[W,100*(0===U?2*_/(Y+_):2*M/(U+M)),(U+M)/2*100]},N.hsv.rgb=function(R){const W=R[0]/60,M=R[1]/100;let U=R[2]/100;const _=Math.floor(W)%6,Y=W-Math.floor(W),G=255*U*(1-M),Z=255*U*(1-M*Y),S=255*U*(1-M*(1-Y));switch(U*=255,_){case 0:return[U,S,G];case 1:return[Z,U,G];case 2:return[G,U,S];case 3:return[G,Z,U];case 4:return[S,G,U];case 5:return[U,G,Z]}},N.hsv.hsl=function(R){const W=R[0],M=R[1]/100,U=R[2]/100,_=Math.max(U,.01);let Y,G;G=(2-M)*U;const Z=(2-M)*_;return Y=M*_,Y/=Z<=1?Z:2-Z,Y=Y||0,G/=2,[W,100*Y,100*G]},N.hwb.rgb=function(R){const W=R[0]/360;let M=R[1]/100,U=R[2]/100;const _=M+U;let Y;_>1&&(M/=_,U/=_);const G=Math.floor(6*W),Z=1-U;Y=6*W-G,0!=(1&G)&&(Y=1-Y);const S=M+Y*(Z-M);let B,E,j;switch(G){default:case 6:case 0:B=Z,E=S,j=M;break;case 1:B=S,E=Z,j=M;break;case 2:B=M,E=Z,j=S;break;case 3:B=M,E=S,j=Z;break;case 4:B=S,E=M,j=Z;break;case 5:B=Z,E=M,j=S}return[255*B,255*E,255*j]},N.cmyk.rgb=function(R){const M=R[1]/100,U=R[2]/100,_=R[3]/100;return[255*(1-Math.min(1,R[0]/100*(1-_)+_)),255*(1-Math.min(1,M*(1-_)+_)),255*(1-Math.min(1,U*(1-_)+_))]},N.xyz.rgb=function(R){const W=R[0]/100,M=R[1]/100,U=R[2]/100;let _,Y,G;return _=3.2406*W+-1.5372*M+-.4986*U,Y=-.9689*W+1.8758*M+.0415*U,G=.0557*W+-.204*M+1.057*U,_=_>.0031308?1.055*_**(1/2.4)-.055:12.92*_,Y=Y>.0031308?1.055*Y**(1/2.4)-.055:12.92*Y,G=G>.0031308?1.055*G**(1/2.4)-.055:12.92*G,_=Math.min(Math.max(0,_),1),Y=Math.min(Math.max(0,Y),1),G=Math.min(Math.max(0,G),1),[255*_,255*Y,255*G]},N.xyz.lab=function(R){let W=R[0],M=R[1],U=R[2];return W/=95.047,M/=100,U/=108.883,W=W>.008856?W**(1/3):7.787*W+16/116,M=M>.008856?M**(1/3):7.787*M+16/116,U=U>.008856?U**(1/3):7.787*U+16/116,[116*M-16,500*(W-M),200*(M-U)]},N.lab.xyz=function(R){let _,Y,G;Y=(R[0]+16)/116,_=R[1]/500+Y,G=Y-R[2]/200;const Z=Y**3,S=_**3,B=G**3;return Y=Z>.008856?Z:(Y-16/116)/7.787,_=S>.008856?S:(_-16/116)/7.787,G=B>.008856?B:(G-16/116)/7.787,_*=95.047,Y*=100,G*=108.883,[_,Y,G]},N.lab.lch=function(R){const W=R[0],M=R[1],U=R[2];let _;return _=360*Math.atan2(U,M)/2/Math.PI,_<0&&(_+=360),[W,Math.sqrt(M*M+U*U),_]},N.lch.lab=function(R){const M=R[1],_=R[2]/360*2*Math.PI;return[R[0],M*Math.cos(_),M*Math.sin(_)]},N.rgb.ansi16=function(R,W=null){const[M,U,_]=R;let Y=null===W?N.rgb.hsv(R)[2]:W;if(Y=Math.round(Y/50),0===Y)return 30;let G=30+(Math.round(_/255)<<2|Math.round(U/255)<<1|Math.round(M/255));return 2===Y&&(G+=60),G},N.hsv.ansi16=function(R){return N.rgb.ansi16(N.hsv.rgb(R),R[2])},N.rgb.ansi256=function(R){const W=R[0],M=R[1],U=R[2];return W===M&&M===U?W<8?16:W>248?231:Math.round((W-8)/247*24)+232:16+36*Math.round(W/255*5)+6*Math.round(M/255*5)+Math.round(U/255*5)},N.ansi16.rgb=function(R){let W=R%10;if(0===W||7===W)return R>50&&(W+=3.5),W=W/10.5*255,[W,W,W];const M=.5*(1+~~(R>50));return[(1&W)*M*255,(W>>1&1)*M*255,(W>>2&1)*M*255]},N.ansi256.rgb=function(R){if(R>=232){const Y=10*(R-232)+8;return[Y,Y,Y]}let W;return R-=16,[Math.floor(R/36)/5*255,Math.floor((W=R%36)/6)/5*255,W%6/5*255]},N.rgb.hex=function(R){const M=(((255&Math.round(R[0]))<<16)+((255&Math.round(R[1]))<<8)+(255&Math.round(R[2]))).toString(16).toUpperCase();return"000000".substring(M.length)+M},N.hex.rgb=function(R){const W=R.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!W)return[0,0,0];let M=W[0];3===W[0].length&&(M=M.split("").map(Z=>Z+Z).join(""));const U=parseInt(M,16);return[U>>16&255,U>>8&255,255&U]},N.rgb.hcg=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.max(Math.max(W,M),U),Y=Math.min(Math.min(W,M),U),G=_-Y;let Z,S;return Z=G<1?Y/(1-G):0,S=G<=0?0:_===W?(M-U)/G%6:_===M?2+(U-W)/G:4+(W-M)/G,S/=6,S%=1,[360*S,100*G,100*Z]},N.hsl.hcg=function(R){const W=R[1]/100,M=R[2]/100,U=M<.5?2*W*M:2*W*(1-M);let _=0;return U<1&&(_=(M-.5*U)/(1-U)),[R[0],100*U,100*_]},N.hsv.hcg=function(R){const M=R[2]/100,U=R[1]/100*M;let _=0;return U<1&&(_=(M-U)/(1-U)),[R[0],100*U,100*_]},N.hcg.rgb=function(R){const M=R[1]/100,U=R[2]/100;if(0===M)return[255*U,255*U,255*U];const _=[0,0,0],Y=R[0]/360%1*6,G=Y%1,Z=1-G;let S=0;switch(Math.floor(Y)){case 0:_[0]=1,_[1]=G,_[2]=0;break;case 1:_[0]=Z,_[1]=1,_[2]=0;break;case 2:_[0]=0,_[1]=1,_[2]=G;break;case 3:_[0]=0,_[1]=Z,_[2]=1;break;case 4:_[0]=G,_[1]=0,_[2]=1;break;default:_[0]=1,_[1]=0,_[2]=Z}return S=(1-M)*U,[255*(M*_[0]+S),255*(M*_[1]+S),255*(M*_[2]+S)]},N.hcg.hsv=function(R){const W=R[1]/100,U=W+R[2]/100*(1-W);let _=0;return U>0&&(_=W/U),[R[0],100*_,100*U]},N.hcg.hsl=function(R){const W=R[1]/100,U=R[2]/100*(1-W)+.5*W;let _=0;return U>0&&U<.5?_=W/(2*U):U>=.5&&U<1&&(_=W/(2*(1-U))),[R[0],100*_,100*U]},N.hcg.hwb=function(R){const W=R[1]/100,U=W+R[2]/100*(1-W);return[R[0],100*(U-W),100*(1-U)]},N.hwb.hcg=function(R){const U=1-R[2]/100,_=U-R[1]/100;let Y=0;return _<1&&(Y=(U-_)/(1-_)),[R[0],100*_,100*Y]},N.apple.rgb=function(R){return[R[0]/65535*255,R[1]/65535*255,R[2]/65535*255]},N.rgb.apple=function(R){return[R[0]/255*65535,R[1]/255*65535,R[2]/255*65535]},N.gray.rgb=function(R){return[R[0]/100*255,R[0]/100*255,R[0]/100*255]},N.gray.hsl=function(R){return[0,0,R[0]]},N.gray.hsv=N.gray.hsl,N.gray.hwb=function(R){return[0,100,R[0]]},N.gray.cmyk=function(R){return[0,0,0,R[0]]},N.gray.lab=function(R){return[R[0],0,0]},N.gray.hex=function(R){const W=255&Math.round(R[0]/100*255),U=((W<<16)+(W<<8)+W).toString(16).toUpperCase();return"000000".substring(U.length)+U},N.rgb.gray=function(R){return[(R[0]+R[1]+R[2])/3/255*100]}},798:(Qe,Fe,w)=>{const o=w(2539),x=w(2535),N={};Object.keys(o).forEach(M=>{N[M]={},Object.defineProperty(N[M],"channels",{value:o[M].channels}),Object.defineProperty(N[M],"labels",{value:o[M].labels});const U=x(M);Object.keys(U).forEach(Y=>{const G=U[Y];N[M][Y]=function W(M){const U=function(..._){const Y=_[0];if(null==Y)return Y;Y.length>1&&(_=Y);const G=M(_);if("object"==typeof G)for(let Z=G.length,S=0;S1&&(_=Y),M(_))};return"conversion"in M&&(U.conversion=M.conversion),U}(G)})}),Qe.exports=N},2535:(Qe,Fe,w)=>{const o=w(2539);function ge(W,M){return function(U){return M(W(U))}}function R(W,M){const U=[M[W].parent,W];let _=o[M[W].parent][W],Y=M[W].parent;for(;M[Y].parent;)U.unshift(M[Y].parent),_=ge(o[M[Y].parent][Y],_),Y=M[Y].parent;return _.conversion=U,_}Qe.exports=function(W){const M=function N(W){const M=function x(){const W={},M=Object.keys(o);for(let U=M.length,_=0;_{"use strict";Qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},1135:(Qe,Fe,w)=>{"use strict";w.d(Fe,{X:()=>x});var o=w(7579);class x extends o.x{constructor(ge){super(),this._value=ge}get value(){return this.getValue()}_subscribe(ge){const R=super._subscribe(ge);return!R.closed&&ge.next(this._value),R}getValue(){const{hasError:ge,thrownError:R,_value:W}=this;if(ge)throw R;return this._throwIfClosed(),W}next(ge){super.next(this._value=ge)}}},9751:(Qe,Fe,w)=>{"use strict";w.d(Fe,{y:()=>U});var o=w(2961),x=w(727),N=w(8822),ge=w(9635),R=w(2416),W=w(576),M=w(2806);let U=(()=>{class Z{constructor(B){B&&(this._subscribe=B)}lift(B){const E=new Z;return E.source=this,E.operator=B,E}subscribe(B,E,j){const P=function G(Z){return Z&&Z instanceof o.Lv||function Y(Z){return Z&&(0,W.m)(Z.next)&&(0,W.m)(Z.error)&&(0,W.m)(Z.complete)}(Z)&&(0,x.Nn)(Z)}(B)?B:new o.Hp(B,E,j);return(0,M.x)(()=>{const{operator:K,source:pe}=this;P.add(K?K.call(P,pe):pe?this._subscribe(P):this._trySubscribe(P))}),P}_trySubscribe(B){try{return this._subscribe(B)}catch(E){B.error(E)}}forEach(B,E){return new(E=_(E))((j,P)=>{const K=new o.Hp({next:pe=>{try{B(pe)}catch(ke){P(ke),K.unsubscribe()}},error:P,complete:j});this.subscribe(K)})}_subscribe(B){var E;return null===(E=this.source)||void 0===E?void 0:E.subscribe(B)}[N.L](){return this}pipe(...B){return(0,ge.U)(B)(this)}toPromise(B){return new(B=_(B))((E,j)=>{let P;this.subscribe(K=>P=K,K=>j(K),()=>E(P))})}}return Z.create=S=>new Z(S),Z})();function _(Z){var S;return null!==(S=Z??R.v.Promise)&&void 0!==S?S:Promise}},7579:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>M});var o=w(9751),x=w(727);const ge=(0,w(3888).d)(_=>function(){_(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var R=w(8737),W=w(2806);let M=(()=>{class _ extends o.y{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(G){const Z=new U(this,this);return Z.operator=G,Z}_throwIfClosed(){if(this.closed)throw new ge}next(G){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const Z of this.currentObservers)Z.next(G)}})}error(G){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=G;const{observers:Z}=this;for(;Z.length;)Z.shift().error(G)}})}complete(){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:G}=this;for(;G.length;)G.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var G;return(null===(G=this.observers)||void 0===G?void 0:G.length)>0}_trySubscribe(G){return this._throwIfClosed(),super._trySubscribe(G)}_subscribe(G){return this._throwIfClosed(),this._checkFinalizedStatuses(G),this._innerSubscribe(G)}_innerSubscribe(G){const{hasError:Z,isStopped:S,observers:B}=this;return Z||S?x.Lc:(this.currentObservers=null,B.push(G),new x.w0(()=>{this.currentObservers=null,(0,R.P)(B,G)}))}_checkFinalizedStatuses(G){const{hasError:Z,thrownError:S,isStopped:B}=this;Z?G.error(S):B&&G.complete()}asObservable(){const G=new o.y;return G.source=this,G}}return _.create=(Y,G)=>new U(Y,G),_})();class U extends M{constructor(Y,G){super(),this.destination=Y,this.source=G}next(Y){var G,Z;null===(Z=null===(G=this.destination)||void 0===G?void 0:G.next)||void 0===Z||Z.call(G,Y)}error(Y){var G,Z;null===(Z=null===(G=this.destination)||void 0===G?void 0:G.error)||void 0===Z||Z.call(G,Y)}complete(){var Y,G;null===(G=null===(Y=this.destination)||void 0===Y?void 0:Y.complete)||void 0===G||G.call(Y)}_subscribe(Y){var G,Z;return null!==(Z=null===(G=this.source)||void 0===G?void 0:G.subscribe(Y))&&void 0!==Z?Z:x.Lc}}},2961:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Hp:()=>j,Lv:()=>Z});var o=w(576),x=w(727),N=w(2416),ge=w(7849);function R(){}const W=_("C",void 0,void 0);function _(Te,ie,Be){return{kind:Te,value:ie,error:Be}}var Y=w(3410),G=w(2806);class Z extends x.w0{constructor(ie){super(),this.isStopped=!1,ie?(this.destination=ie,(0,x.Nn)(ie)&&ie.add(this)):this.destination=ke}static create(ie,Be,re){return new j(ie,Be,re)}next(ie){this.isStopped?pe(function U(Te){return _("N",Te,void 0)}(ie),this):this._next(ie)}error(ie){this.isStopped?pe(function M(Te){return _("E",void 0,Te)}(ie),this):(this.isStopped=!0,this._error(ie))}complete(){this.isStopped?pe(W,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(ie){this.destination.next(ie)}_error(ie){try{this.destination.error(ie)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const S=Function.prototype.bind;function B(Te,ie){return S.call(Te,ie)}class E{constructor(ie){this.partialObserver=ie}next(ie){const{partialObserver:Be}=this;if(Be.next)try{Be.next(ie)}catch(re){P(re)}}error(ie){const{partialObserver:Be}=this;if(Be.error)try{Be.error(ie)}catch(re){P(re)}else P(ie)}complete(){const{partialObserver:ie}=this;if(ie.complete)try{ie.complete()}catch(Be){P(Be)}}}class j extends Z{constructor(ie,Be,re){let oe;if(super(),(0,o.m)(ie)||!ie)oe={next:ie??void 0,error:Be??void 0,complete:re??void 0};else{let be;this&&N.v.useDeprecatedNextContext?(be=Object.create(ie),be.unsubscribe=()=>this.unsubscribe(),oe={next:ie.next&&B(ie.next,be),error:ie.error&&B(ie.error,be),complete:ie.complete&&B(ie.complete,be)}):oe=ie}this.destination=new E(oe)}}function P(Te){N.v.useDeprecatedSynchronousErrorHandling?(0,G.O)(Te):(0,ge.h)(Te)}function pe(Te,ie){const{onStoppedNotification:Be}=N.v;Be&&Y.z.setTimeout(()=>Be(Te,ie))}const ke={closed:!0,next:R,error:function K(Te){throw Te},complete:R}},727:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Lc:()=>W,w0:()=>R,Nn:()=>M});var o=w(576);const N=(0,w(3888).d)(_=>function(G){_(this),this.message=G?`${G.length} errors occurred during unsubscription:\n${G.map((Z,S)=>`${S+1}) ${Z.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=G});var ge=w(8737);class R{constructor(Y){this.initialTeardown=Y,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let Y;if(!this.closed){this.closed=!0;const{_parentage:G}=this;if(G)if(this._parentage=null,Array.isArray(G))for(const B of G)B.remove(this);else G.remove(this);const{initialTeardown:Z}=this;if((0,o.m)(Z))try{Z()}catch(B){Y=B instanceof N?B.errors:[B]}const{_finalizers:S}=this;if(S){this._finalizers=null;for(const B of S)try{U(B)}catch(E){Y=Y??[],E instanceof N?Y=[...Y,...E.errors]:Y.push(E)}}if(Y)throw new N(Y)}}add(Y){var G;if(Y&&Y!==this)if(this.closed)U(Y);else{if(Y instanceof R){if(Y.closed||Y._hasParent(this))return;Y._addParent(this)}(this._finalizers=null!==(G=this._finalizers)&&void 0!==G?G:[]).push(Y)}}_hasParent(Y){const{_parentage:G}=this;return G===Y||Array.isArray(G)&&G.includes(Y)}_addParent(Y){const{_parentage:G}=this;this._parentage=Array.isArray(G)?(G.push(Y),G):G?[G,Y]:Y}_removeParent(Y){const{_parentage:G}=this;G===Y?this._parentage=null:Array.isArray(G)&&(0,ge.P)(G,Y)}remove(Y){const{_finalizers:G}=this;G&&(0,ge.P)(G,Y),Y instanceof R&&Y._removeParent(this)}}R.EMPTY=(()=>{const _=new R;return _.closed=!0,_})();const W=R.EMPTY;function M(_){return _ instanceof R||_&&"closed"in _&&(0,o.m)(_.remove)&&(0,o.m)(_.add)&&(0,o.m)(_.unsubscribe)}function U(_){(0,o.m)(_)?_():_.unsubscribe()}},2416:(Qe,Fe,w)=>{"use strict";w.d(Fe,{v:()=>o});const o={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1}},515:(Qe,Fe,w)=>{"use strict";w.d(Fe,{E:()=>x});const x=new(w(9751).y)(R=>R.complete())},2076:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>re});var o=w(8421),x=w(9672),N=w(4482),ge=w(5403);function R(oe,be=0){return(0,N.e)((Ne,Q)=>{Ne.subscribe((0,ge.x)(Q,T=>(0,x.f)(Q,oe,()=>Q.next(T),be),()=>(0,x.f)(Q,oe,()=>Q.complete(),be),T=>(0,x.f)(Q,oe,()=>Q.error(T),be)))})}function W(oe,be=0){return(0,N.e)((Ne,Q)=>{Q.add(oe.schedule(()=>Ne.subscribe(Q),be))})}var _=w(9751),G=w(2202),Z=w(576);function B(oe,be){if(!oe)throw new Error("Iterable cannot be null");return new _.y(Ne=>{(0,x.f)(Ne,be,()=>{const Q=oe[Symbol.asyncIterator]();(0,x.f)(Ne,be,()=>{Q.next().then(T=>{T.done?Ne.complete():Ne.next(T.value)})},0,!0)})})}var E=w(3670),j=w(8239),P=w(1144),K=w(6495),pe=w(2206),ke=w(4532),Te=w(3260);function re(oe,be){return be?function Be(oe,be){if(null!=oe){if((0,E.c)(oe))return function M(oe,be){return(0,o.Xf)(oe).pipe(W(be),R(be))}(oe,be);if((0,P.z)(oe))return function Y(oe,be){return new _.y(Ne=>{let Q=0;return be.schedule(function(){Q===oe.length?Ne.complete():(Ne.next(oe[Q++]),Ne.closed||this.schedule())})})}(oe,be);if((0,j.t)(oe))return function U(oe,be){return(0,o.Xf)(oe).pipe(W(be),R(be))}(oe,be);if((0,pe.D)(oe))return B(oe,be);if((0,K.T)(oe))return function S(oe,be){return new _.y(Ne=>{let Q;return(0,x.f)(Ne,be,()=>{Q=oe[G.h](),(0,x.f)(Ne,be,()=>{let T,k;try{({value:T,done:k}=Q.next())}catch(O){return void Ne.error(O)}k?Ne.complete():Ne.next(T)},0,!0)}),()=>(0,Z.m)(Q?.return)&&Q.return()})}(oe,be);if((0,Te.L)(oe))return function ie(oe,be){return B((0,Te.Q)(oe),be)}(oe,be)}throw(0,ke.z)(oe)}(oe,be):(0,o.Xf)(oe)}},8421:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Xf:()=>S});var o=w(655),x=w(1144),N=w(8239),ge=w(9751),R=w(3670),W=w(2206),M=w(4532),U=w(6495),_=w(3260),Y=w(576),G=w(7849),Z=w(8822);function S(Te){if(Te instanceof ge.y)return Te;if(null!=Te){if((0,R.c)(Te))return function B(Te){return new ge.y(ie=>{const Be=Te[Z.L]();if((0,Y.m)(Be.subscribe))return Be.subscribe(ie);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(Te);if((0,x.z)(Te))return function E(Te){return new ge.y(ie=>{for(let Be=0;Be{Te.then(Be=>{ie.closed||(ie.next(Be),ie.complete())},Be=>ie.error(Be)).then(null,G.h)})}(Te);if((0,W.D)(Te))return K(Te);if((0,U.T)(Te))return function P(Te){return new ge.y(ie=>{for(const Be of Te)if(ie.next(Be),ie.closed)return;ie.complete()})}(Te);if((0,_.L)(Te))return function pe(Te){return K((0,_.Q)(Te))}(Te)}throw(0,M.z)(Te)}function K(Te){return new ge.y(ie=>{(function ke(Te,ie){var Be,re,oe,be;return(0,o.mG)(this,void 0,void 0,function*(){try{for(Be=(0,o.KL)(Te);!(re=yield Be.next()).done;)if(ie.next(re.value),ie.closed)return}catch(Ne){oe={error:Ne}}finally{try{re&&!re.done&&(be=Be.return)&&(yield be.call(Be))}finally{if(oe)throw oe.error}}ie.complete()})})(Te,ie).catch(Be=>ie.error(Be))})}},9646:(Qe,Fe,w)=>{"use strict";w.d(Fe,{of:()=>N});var o=w(3269),x=w(2076);function N(...ge){const R=(0,o.yG)(ge);return(0,x.D)(ge,R)}},5403:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>x});var o=w(2961);function x(ge,R,W,M,U){return new N(ge,R,W,M,U)}class N extends o.Lv{constructor(R,W,M,U,_,Y){super(R),this.onFinalize=_,this.shouldUnsubscribe=Y,this._next=W?function(G){try{W(G)}catch(Z){R.error(Z)}}:super._next,this._error=U?function(G){try{U(G)}catch(Z){R.error(Z)}finally{this.unsubscribe()}}:super._error,this._complete=M?function(){try{M()}catch(G){R.error(G)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var R;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:W}=this;super.unsubscribe(),!W&&(null===(R=this.onFinalize)||void 0===R||R.call(this))}}}},4351:(Qe,Fe,w)=>{"use strict";w.d(Fe,{b:()=>N});var o=w(5577),x=w(576);function N(ge,R){return(0,x.m)(R)?(0,o.z)(ge,R,1):(0,o.z)(ge,1)}},1884:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>ge});var o=w(4671),x=w(4482),N=w(5403);function ge(W,M=o.y){return W=W??R,(0,x.e)((U,_)=>{let Y,G=!0;U.subscribe((0,N.x)(_,Z=>{const S=M(Z);(G||!W(Y,S))&&(G=!1,Y=S,_.next(Z))}))})}function R(W,M){return W===M}},9300:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>N});var o=w(4482),x=w(5403);function N(ge,R){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>ge.call(R,_,U++)&&M.next(_)))})}},8746:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>x});var o=w(4482);function x(N){return(0,o.e)((ge,R)=>{try{ge.subscribe(R)}finally{R.add(N)}})}},4004:(Qe,Fe,w)=>{"use strict";w.d(Fe,{U:()=>N});var o=w(4482),x=w(5403);function N(ge,R){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>{M.next(ge.call(R,_,U++))}))})}},8189:(Qe,Fe,w)=>{"use strict";w.d(Fe,{J:()=>N});var o=w(5577),x=w(4671);function N(ge=1/0){return(0,o.z)(x.y,ge)}},5577:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>U});var o=w(4004),x=w(8421),N=w(4482),ge=w(9672),R=w(5403),M=w(576);function U(_,Y,G=1/0){return(0,M.m)(Y)?U((Z,S)=>(0,o.U)((B,E)=>Y(Z,B,S,E))((0,x.Xf)(_(Z,S))),G):("number"==typeof Y&&(G=Y),(0,N.e)((Z,S)=>function W(_,Y,G,Z,S,B,E,j){const P=[];let K=0,pe=0,ke=!1;const Te=()=>{ke&&!P.length&&!K&&Y.complete()},ie=re=>K{B&&Y.next(re),K++;let oe=!1;(0,x.Xf)(G(re,pe++)).subscribe((0,R.x)(Y,be=>{S?.(be),B?ie(be):Y.next(be)},()=>{oe=!0},void 0,()=>{if(oe)try{for(K--;P.length&&KBe(be)):Be(be)}Te()}catch(be){Y.error(be)}}))};return _.subscribe((0,R.x)(Y,ie,()=>{ke=!0,Te()})),()=>{j?.()}}(Z,S,_,G)))}},3099:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>R});var o=w(8421),x=w(7579),N=w(2961),ge=w(4482);function R(M={}){const{connector:U=(()=>new x.x),resetOnError:_=!0,resetOnComplete:Y=!0,resetOnRefCountZero:G=!0}=M;return Z=>{let S,B,E,j=0,P=!1,K=!1;const pe=()=>{B?.unsubscribe(),B=void 0},ke=()=>{pe(),S=E=void 0,P=K=!1},Te=()=>{const ie=S;ke(),ie?.unsubscribe()};return(0,ge.e)((ie,Be)=>{j++,!K&&!P&&pe();const re=E=E??U();Be.add(()=>{j--,0===j&&!K&&!P&&(B=W(Te,G))}),re.subscribe(Be),!S&&j>0&&(S=new N.Hp({next:oe=>re.next(oe),error:oe=>{K=!0,pe(),B=W(ke,_,oe),re.error(oe)},complete:()=>{P=!0,pe(),B=W(ke,Y),re.complete()}}),(0,o.Xf)(ie).subscribe(S))})(Z)}}function W(M,U,..._){if(!0===U)return void M();if(!1===U)return;const Y=new N.Hp({next:()=>{Y.unsubscribe(),M()}});return U(..._).subscribe(Y)}},3900:(Qe,Fe,w)=>{"use strict";w.d(Fe,{w:()=>ge});var o=w(8421),x=w(4482),N=w(5403);function ge(R,W){return(0,x.e)((M,U)=>{let _=null,Y=0,G=!1;const Z=()=>G&&!_&&U.complete();M.subscribe((0,N.x)(U,S=>{_?.unsubscribe();let B=0;const E=Y++;(0,o.Xf)(R(S,E)).subscribe(_=(0,N.x)(U,j=>U.next(W?W(S,j,E,B++):j),()=>{_=null,Z()}))},()=>{G=!0,Z()}))})}},5698:(Qe,Fe,w)=>{"use strict";w.d(Fe,{q:()=>ge});var o=w(515),x=w(4482),N=w(5403);function ge(R){return R<=0?()=>o.E:(0,x.e)((W,M)=>{let U=0;W.subscribe((0,N.x)(M,_=>{++U<=R&&(M.next(_),R<=U&&M.complete())}))})}},2529:(Qe,Fe,w)=>{"use strict";w.d(Fe,{o:()=>N});var o=w(4482),x=w(5403);function N(ge,R=!1){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>{const Y=ge(_,U++);(Y||R)&&M.next(_),!Y&&M.complete()}))})}},8505:(Qe,Fe,w)=>{"use strict";w.d(Fe,{b:()=>R});var o=w(576),x=w(4482),N=w(5403),ge=w(4671);function R(W,M,U){const _=(0,o.m)(W)||M||U?{next:W,error:M,complete:U}:W;return _?(0,x.e)((Y,G)=>{var Z;null===(Z=_.subscribe)||void 0===Z||Z.call(_);let S=!0;Y.subscribe((0,N.x)(G,B=>{var E;null===(E=_.next)||void 0===E||E.call(_,B),G.next(B)},()=>{var B;S=!1,null===(B=_.complete)||void 0===B||B.call(_),G.complete()},B=>{var E;S=!1,null===(E=_.error)||void 0===E||E.call(_,B),G.error(B)},()=>{var B,E;S&&(null===(B=_.unsubscribe)||void 0===B||B.call(_)),null===(E=_.finalize)||void 0===E||E.call(_)}))}):ge.y}},1566:(Qe,Fe,w)=>{"use strict";w.d(Fe,{P:()=>Y,z:()=>_});var o=w(727);class x extends o.w0{constructor(Z,S){super()}schedule(Z,S=0){return this}}const N={setInterval(G,Z,...S){const{delegate:B}=N;return B?.setInterval?B.setInterval(G,Z,...S):setInterval(G,Z,...S)},clearInterval(G){const{delegate:Z}=N;return(Z?.clearInterval||clearInterval)(G)},delegate:void 0};var ge=w(8737);const W={now:()=>(W.delegate||Date).now(),delegate:void 0};class M{constructor(Z,S=M.now){this.schedulerActionCtor=Z,this.now=S}schedule(Z,S=0,B){return new this.schedulerActionCtor(this,Z).schedule(B,S)}}M.now=W.now;const _=new class U extends M{constructor(Z,S=M.now){super(Z,S),this.actions=[],this._active=!1}flush(Z){const{actions:S}=this;if(this._active)return void S.push(Z);let B;this._active=!0;do{if(B=Z.execute(Z.state,Z.delay))break}while(Z=S.shift());if(this._active=!1,B){for(;Z=S.shift();)Z.unsubscribe();throw B}}}(class R extends x{constructor(Z,S){super(Z,S),this.scheduler=Z,this.work=S,this.pending=!1}schedule(Z,S=0){var B;if(this.closed)return this;this.state=Z;const E=this.id,j=this.scheduler;return null!=E&&(this.id=this.recycleAsyncId(j,E,S)),this.pending=!0,this.delay=S,this.id=null!==(B=this.id)&&void 0!==B?B:this.requestAsyncId(j,this.id,S),this}requestAsyncId(Z,S,B=0){return N.setInterval(Z.flush.bind(Z,this),B)}recycleAsyncId(Z,S,B=0){if(null!=B&&this.delay===B&&!1===this.pending)return S;null!=S&&N.clearInterval(S)}execute(Z,S){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const B=this._execute(Z,S);if(B)return B;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(Z,S){let E,B=!1;try{this.work(Z)}catch(j){B=!0,E=j||new Error("Scheduled action threw falsy error")}if(B)return this.unsubscribe(),E}unsubscribe(){if(!this.closed){const{id:Z,scheduler:S}=this,{actions:B}=S;this.work=this.state=this.scheduler=null,this.pending=!1,(0,ge.P)(B,this),null!=Z&&(this.id=this.recycleAsyncId(S,Z,null)),this.delay=null,super.unsubscribe()}}}),Y=_},3410:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>o});const o={setTimeout(x,N,...ge){const{delegate:R}=o;return R?.setTimeout?R.setTimeout(x,N,...ge):setTimeout(x,N,...ge)},clearTimeout(x){const{delegate:N}=o;return(N?.clearTimeout||clearTimeout)(x)},delegate:void 0}},2202:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>x});const x=function o(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}()},8822:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>o});const o="function"==typeof Symbol&&Symbol.observable||"@@observable"},3269:(Qe,Fe,w)=>{"use strict";w.d(Fe,{_6:()=>W,jO:()=>ge,yG:()=>R});var o=w(576),x=w(3532);function N(M){return M[M.length-1]}function ge(M){return(0,o.m)(N(M))?M.pop():void 0}function R(M){return(0,x.K)(N(M))?M.pop():void 0}function W(M,U){return"number"==typeof N(M)?M.pop():U}},4742:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>R});const{isArray:o}=Array,{getPrototypeOf:x,prototype:N,keys:ge}=Object;function R(M){if(1===M.length){const U=M[0];if(o(U))return{args:U,keys:null};if(function W(M){return M&&"object"==typeof M&&x(M)===N}(U)){const _=ge(U);return{args:_.map(Y=>U[Y]),keys:_}}}return{args:M,keys:null}}},8737:(Qe,Fe,w)=>{"use strict";function o(x,N){if(x){const ge=x.indexOf(N);0<=ge&&x.splice(ge,1)}}w.d(Fe,{P:()=>o})},3888:(Qe,Fe,w)=>{"use strict";function o(x){const ge=x(R=>{Error.call(R),R.stack=(new Error).stack});return ge.prototype=Object.create(Error.prototype),ge.prototype.constructor=ge,ge}w.d(Fe,{d:()=>o})},1810:(Qe,Fe,w)=>{"use strict";function o(x,N){return x.reduce((ge,R,W)=>(ge[R]=N[W],ge),{})}w.d(Fe,{n:()=>o})},2806:(Qe,Fe,w)=>{"use strict";w.d(Fe,{O:()=>ge,x:()=>N});var o=w(2416);let x=null;function N(R){if(o.v.useDeprecatedSynchronousErrorHandling){const W=!x;if(W&&(x={errorThrown:!1,error:null}),R(),W){const{errorThrown:M,error:U}=x;if(x=null,M)throw U}}else R()}function ge(R){o.v.useDeprecatedSynchronousErrorHandling&&x&&(x.errorThrown=!0,x.error=R)}},9672:(Qe,Fe,w)=>{"use strict";function o(x,N,ge,R=0,W=!1){const M=N.schedule(function(){ge(),W?x.add(this.schedule(null,R)):this.unsubscribe()},R);if(x.add(M),!W)return M}w.d(Fe,{f:()=>o})},4671:(Qe,Fe,w)=>{"use strict";function o(x){return x}w.d(Fe,{y:()=>o})},1144:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>o});const o=x=>x&&"number"==typeof x.length&&"function"!=typeof x},2206:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>x});var o=w(576);function x(N){return Symbol.asyncIterator&&(0,o.m)(N?.[Symbol.asyncIterator])}},576:(Qe,Fe,w)=>{"use strict";function o(x){return"function"==typeof x}w.d(Fe,{m:()=>o})},3670:(Qe,Fe,w)=>{"use strict";w.d(Fe,{c:()=>N});var o=w(8822),x=w(576);function N(ge){return(0,x.m)(ge[o.L])}},6495:(Qe,Fe,w)=>{"use strict";w.d(Fe,{T:()=>N});var o=w(2202),x=w(576);function N(ge){return(0,x.m)(ge?.[o.h])}},8239:(Qe,Fe,w)=>{"use strict";w.d(Fe,{t:()=>x});var o=w(576);function x(N){return(0,o.m)(N?.then)}},3260:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>ge,Q:()=>N});var o=w(655),x=w(576);function N(R){return(0,o.FC)(this,arguments,function*(){const M=R.getReader();try{for(;;){const{value:U,done:_}=yield(0,o.qq)(M.read());if(_)return yield(0,o.qq)(void 0);yield yield(0,o.qq)(U)}}finally{M.releaseLock()}})}function ge(R){return(0,x.m)(R?.getReader)}},3532:(Qe,Fe,w)=>{"use strict";w.d(Fe,{K:()=>x});var o=w(576);function x(N){return N&&(0,o.m)(N.schedule)}},4482:(Qe,Fe,w)=>{"use strict";w.d(Fe,{A:()=>x,e:()=>N});var o=w(576);function x(ge){return(0,o.m)(ge?.lift)}function N(ge){return R=>{if(x(R))return R.lift(function(W){try{return ge(W,this)}catch(M){this.error(M)}});throw new TypeError("Unable to lift unknown Observable type")}}},3268:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Z:()=>ge});var o=w(4004);const{isArray:x}=Array;function ge(R){return(0,o.U)(W=>function N(R,W){return x(W)?R(...W):R(W)}(R,W))}},9635:(Qe,Fe,w)=>{"use strict";w.d(Fe,{U:()=>N,z:()=>x});var o=w(4671);function x(...ge){return N(ge)}function N(ge){return 0===ge.length?o.y:1===ge.length?ge[0]:function(W){return ge.reduce((M,U)=>U(M),W)}}},7849:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>N});var o=w(2416),x=w(3410);function N(ge){x.z.setTimeout(()=>{const{onUnhandledError:R}=o.v;if(!R)throw ge;R(ge)})}},4532:(Qe,Fe,w)=>{"use strict";function o(x){return new TypeError(`You provided ${null!==x&&"object"==typeof x?"an invalid object":`'${x}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}w.d(Fe,{z:()=>o})},6931:(Qe,Fe,w)=>{"use strict";var o=w(1708),x=Array.prototype.concat,N=Array.prototype.slice,ge=Qe.exports=function(W){for(var M=[],U=0,_=W.length;U<_;U++){var Y=W[U];o(Y)?M=x.call(M,N.call(Y)):M.push(Y)}return M};ge.wrap=function(R){return function(){return R(ge(arguments))}}},1708:Qe=>{Qe.exports=function(w){return!(!w||"string"==typeof w)&&(w instanceof Array||Array.isArray(w)||w.length>=0&&(w.splice instanceof Function||Object.getOwnPropertyDescriptor(w,w.length-1)&&"String"!==w.constructor.name))}},863:(Qe,Fe,w)=>{var o={"./ion-accordion_2.entry.js":[9654,8592,9654],"./ion-action-sheet.entry.js":[3648,8592,3648],"./ion-alert.entry.js":[1118,8592,1118],"./ion-app_8.entry.js":[53,8592,3236],"./ion-avatar_3.entry.js":[4753,4753],"./ion-back-button.entry.js":[2073,8592,2073],"./ion-backdrop.entry.js":[8939,8939],"./ion-breadcrumb_2.entry.js":[7544,8592,7544],"./ion-button_2.entry.js":[5652,5652],"./ion-card_5.entry.js":[388,388],"./ion-checkbox.entry.js":[9922,9922],"./ion-chip.entry.js":[657,657],"./ion-col_3.entry.js":[9824,9824],"./ion-datetime-button.entry.js":[9230,1435,9230],"./ion-datetime_3.entry.js":[4959,1435,8592,4959],"./ion-fab_3.entry.js":[5836,8592,5836],"./ion-img.entry.js":[1033,1033],"./ion-infinite-scroll_2.entry.js":[8034,8592,5817],"./ion-input.entry.js":[1217,1217],"./ion-item-option_3.entry.js":[2933,8592,4651],"./ion-item_8.entry.js":[4711,8592,4711],"./ion-loading.entry.js":[9434,8592,9434],"./ion-menu_3.entry.js":[8136,8592,8136],"./ion-modal.entry.js":[2349,8592,2349],"./ion-nav_2.entry.js":[5349,8592,5349],"./ion-picker-column-internal.entry.js":[7602,8592,7602],"./ion-picker-internal.entry.js":[9016,9016],"./ion-popover.entry.js":[3804,8592,3804],"./ion-progress-bar.entry.js":[4174,4174],"./ion-radio_2.entry.js":[4432,4432],"./ion-range.entry.js":[1709,8592,1709],"./ion-refresher_2.entry.js":[3326,8592,2175],"./ion-reorder_2.entry.js":[3583,8592,1186],"./ion-ripple-effect.entry.js":[9958,9958],"./ion-route_4.entry.js":[4330,4330],"./ion-searchbar.entry.js":[8628,8592,8628],"./ion-segment_2.entry.js":[9325,8592,9325],"./ion-select_3.entry.js":[2773,2773],"./ion-slide_2.entry.js":[1650,1650],"./ion-spinner.entry.js":[4908,8592,4908],"./ion-split-pane.entry.js":[9536,9536],"./ion-tab-bar_2.entry.js":[438,8592,438],"./ion-tab_2.entry.js":[1536,8592,1536],"./ion-text.entry.js":[4376,4376],"./ion-textarea.entry.js":[6560,6560],"./ion-toast.entry.js":[6120,8592,6120],"./ion-toggle.entry.js":[5168,8592,5168],"./ion-virtual-scroll.entry.js":[2289,2289]};function x(N){if(!w.o(o,N))return Promise.resolve().then(()=>{var W=new Error("Cannot find module '"+N+"'");throw W.code="MODULE_NOT_FOUND",W});var ge=o[N],R=ge[0];return Promise.all(ge.slice(1).map(w.e)).then(()=>w(R))}x.keys=()=>Object.keys(o),x.id=863,Qe.exports=x},655:(Qe,Fe,w)=>{"use strict";function R(Q,T,k,O){var Ae,te=arguments.length,ce=te<3?T:null===O?O=Object.getOwnPropertyDescriptor(T,k):O;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)ce=Reflect.decorate(Q,T,k,O);else for(var De=Q.length-1;De>=0;De--)(Ae=Q[De])&&(ce=(te<3?Ae(ce):te>3?Ae(T,k,ce):Ae(T,k))||ce);return te>3&&ce&&Object.defineProperty(T,k,ce),ce}function U(Q,T,k,O){return new(k||(k=Promise))(function(ce,Ae){function De(ne){try{de(O.next(ne))}catch(Ee){Ae(Ee)}}function ue(ne){try{de(O.throw(ne))}catch(Ee){Ae(Ee)}}function de(ne){ne.done?ce(ne.value):function te(ce){return ce instanceof k?ce:new k(function(Ae){Ae(ce)})}(ne.value).then(De,ue)}de((O=O.apply(Q,T||[])).next())})}function P(Q){return this instanceof P?(this.v=Q,this):new P(Q)}function K(Q,T,k){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var te,O=k.apply(Q,T||[]),ce=[];return te={},Ae("next"),Ae("throw"),Ae("return"),te[Symbol.asyncIterator]=function(){return this},te;function Ae(Ce){O[Ce]&&(te[Ce]=function(ze){return new Promise(function(dt,et){ce.push([Ce,ze,dt,et])>1||De(Ce,ze)})})}function De(Ce,ze){try{!function ue(Ce){Ce.value instanceof P?Promise.resolve(Ce.value.v).then(de,ne):Ee(ce[0][2],Ce)}(O[Ce](ze))}catch(dt){Ee(ce[0][3],dt)}}function de(Ce){De("next",Ce)}function ne(Ce){De("throw",Ce)}function Ee(Ce,ze){Ce(ze),ce.shift(),ce.length&&De(ce[0][0],ce[0][1])}}function ke(Q){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var k,T=Q[Symbol.asyncIterator];return T?T.call(Q):(Q=function Z(Q){var T="function"==typeof Symbol&&Symbol.iterator,k=T&&Q[T],O=0;if(k)return k.call(Q);if(Q&&"number"==typeof Q.length)return{next:function(){return Q&&O>=Q.length&&(Q=void 0),{value:Q&&Q[O++],done:!Q}}};throw new TypeError(T?"Object is not iterable.":"Symbol.iterator is not defined.")}(Q),k={},O("next"),O("throw"),O("return"),k[Symbol.asyncIterator]=function(){return this},k);function O(ce){k[ce]=Q[ce]&&function(Ae){return new Promise(function(De,ue){!function te(ce,Ae,De,ue){Promise.resolve(ue).then(function(de){ce({value:de,done:De})},Ae)}(De,ue,(Ae=Q[ce](Ae)).done,Ae.value)})}}}w.d(Fe,{FC:()=>K,KL:()=>ke,gn:()=>R,mG:()=>U,qq:()=>P})},6895:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Do:()=>ke,EM:()=>zr,HT:()=>R,JF:()=>hr,JJ:()=>Gn,K0:()=>M,Mx:()=>gr,O5:()=>q,OU:()=>Pr,Ov:()=>mr,PC:()=>st,S$:()=>P,V_:()=>Y,Ye:()=>Te,b0:()=>pe,bD:()=>yo,ez:()=>vo,mk:()=>$t,q:()=>N,sg:()=>Cn,tP:()=>Mt,uU:()=>ar,w_:()=>W});var o=w(8274);let x=null;function N(){return x}function R(v){x||(x=v)}class W{}const M=new o.OlP("DocumentToken");let U=(()=>{class v{historyGo(D){throw new Error("Not implemented")}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275prov=o.Yz7({token:v,factory:function(){return function _(){return(0,o.LFG)(G)}()},providedIn:"platform"}),v})();const Y=new o.OlP("Location Initialized");let G=(()=>{class v extends U{constructor(D){super(),this._doc=D,this._init()}_init(){this.location=window.location,this._history=window.history}getBaseHrefFromDOM(){return N().getBaseHref(this._doc)}onPopState(D){const H=N().getGlobalEventTarget(this._doc,"window");return H.addEventListener("popstate",D,!1),()=>H.removeEventListener("popstate",D)}onHashChange(D){const H=N().getGlobalEventTarget(this._doc,"window");return H.addEventListener("hashchange",D,!1),()=>H.removeEventListener("hashchange",D)}get href(){return this.location.href}get protocol(){return this.location.protocol}get hostname(){return this.location.hostname}get port(){return this.location.port}get pathname(){return this.location.pathname}get search(){return this.location.search}get hash(){return this.location.hash}set pathname(D){this.location.pathname=D}pushState(D,H,ae){Z()?this._history.pushState(D,H,ae):this.location.hash=ae}replaceState(D,H,ae){Z()?this._history.replaceState(D,H,ae):this.location.hash=ae}forward(){this._history.forward()}back(){this._history.back()}historyGo(D=0){this._history.go(D)}getState(){return this._history.state}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(M))},v.\u0275prov=o.Yz7({token:v,factory:function(){return function S(){return new G((0,o.LFG)(M))}()},providedIn:"platform"}),v})();function Z(){return!!window.history.pushState}function B(v,A){if(0==v.length)return A;if(0==A.length)return v;let D=0;return v.endsWith("/")&&D++,A.startsWith("/")&&D++,2==D?v+A.substring(1):1==D?v+A:v+"/"+A}function E(v){const A=v.match(/#|\?|$/),D=A&&A.index||v.length;return v.slice(0,D-("/"===v[D-1]?1:0))+v.slice(D)}function j(v){return v&&"?"!==v[0]?"?"+v:v}let P=(()=>{class v{historyGo(D){throw new Error("Not implemented")}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275prov=o.Yz7({token:v,factory:function(){return(0,o.f3M)(pe)},providedIn:"root"}),v})();const K=new o.OlP("appBaseHref");let pe=(()=>{class v extends P{constructor(D,H){super(),this._platformLocation=D,this._removeListenerFns=[],this._baseHref=H??this._platformLocation.getBaseHrefFromDOM()??(0,o.f3M)(M).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(D){this._removeListenerFns.push(this._platformLocation.onPopState(D),this._platformLocation.onHashChange(D))}getBaseHref(){return this._baseHref}prepareExternalUrl(D){return B(this._baseHref,D)}path(D=!1){const H=this._platformLocation.pathname+j(this._platformLocation.search),ae=this._platformLocation.hash;return ae&&D?`${H}${ae}`:H}pushState(D,H,ae,$e){const Xe=this.prepareExternalUrl(ae+j($e));this._platformLocation.pushState(D,H,Xe)}replaceState(D,H,ae,$e){const Xe=this.prepareExternalUrl(ae+j($e));this._platformLocation.replaceState(D,H,Xe)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(D=0){this._platformLocation.historyGo?.(D)}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(U),o.LFG(K,8))},v.\u0275prov=o.Yz7({token:v,factory:v.\u0275fac,providedIn:"root"}),v})(),ke=(()=>{class v extends P{constructor(D,H){super(),this._platformLocation=D,this._baseHref="",this._removeListenerFns=[],null!=H&&(this._baseHref=H)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(D){this._removeListenerFns.push(this._platformLocation.onPopState(D),this._platformLocation.onHashChange(D))}getBaseHref(){return this._baseHref}path(D=!1){let H=this._platformLocation.hash;return null==H&&(H="#"),H.length>0?H.substring(1):H}prepareExternalUrl(D){const H=B(this._baseHref,D);return H.length>0?"#"+H:H}pushState(D,H,ae,$e){let Xe=this.prepareExternalUrl(ae+j($e));0==Xe.length&&(Xe=this._platformLocation.pathname),this._platformLocation.pushState(D,H,Xe)}replaceState(D,H,ae,$e){let Xe=this.prepareExternalUrl(ae+j($e));0==Xe.length&&(Xe=this._platformLocation.pathname),this._platformLocation.replaceState(D,H,Xe)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(D=0){this._platformLocation.historyGo?.(D)}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(U),o.LFG(K,8))},v.\u0275prov=o.Yz7({token:v,factory:v.\u0275fac}),v})(),Te=(()=>{class v{constructor(D){this._subject=new o.vpe,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=D;const H=this._locationStrategy.getBaseHref();this._baseHref=E(re(H)),this._locationStrategy.onPopState(ae=>{this._subject.emit({url:this.path(!0),pop:!0,state:ae.state,type:ae.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(D=!1){return this.normalize(this._locationStrategy.path(D))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(D,H=""){return this.path()==this.normalize(D+j(H))}normalize(D){return v.stripTrailingSlash(function Be(v,A){return v&&A.startsWith(v)?A.substring(v.length):A}(this._baseHref,re(D)))}prepareExternalUrl(D){return D&&"/"!==D[0]&&(D="/"+D),this._locationStrategy.prepareExternalUrl(D)}go(D,H="",ae=null){this._locationStrategy.pushState(ae,"",D,H),this._notifyUrlChangeListeners(this.prepareExternalUrl(D+j(H)),ae)}replaceState(D,H="",ae=null){this._locationStrategy.replaceState(ae,"",D,H),this._notifyUrlChangeListeners(this.prepareExternalUrl(D+j(H)),ae)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(D=0){this._locationStrategy.historyGo?.(D)}onUrlChange(D){return this._urlChangeListeners.push(D),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(H=>{this._notifyUrlChangeListeners(H.url,H.state)})),()=>{const H=this._urlChangeListeners.indexOf(D);this._urlChangeListeners.splice(H,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(D="",H){this._urlChangeListeners.forEach(ae=>ae(D,H))}subscribe(D,H,ae){return this._subject.subscribe({next:D,error:H,complete:ae})}}return v.normalizeQueryParams=j,v.joinWithSlash=B,v.stripTrailingSlash=E,v.\u0275fac=function(D){return new(D||v)(o.LFG(P))},v.\u0275prov=o.Yz7({token:v,factory:function(){return function ie(){return new Te((0,o.LFG)(P))}()},providedIn:"root"}),v})();function re(v){return v.replace(/\/index.html$/,"")}var be=(()=>((be=be||{})[be.Decimal=0]="Decimal",be[be.Percent=1]="Percent",be[be.Currency=2]="Currency",be[be.Scientific=3]="Scientific",be))(),Q=(()=>((Q=Q||{})[Q.Format=0]="Format",Q[Q.Standalone=1]="Standalone",Q))(),T=(()=>((T=T||{})[T.Narrow=0]="Narrow",T[T.Abbreviated=1]="Abbreviated",T[T.Wide=2]="Wide",T[T.Short=3]="Short",T))(),k=(()=>((k=k||{})[k.Short=0]="Short",k[k.Medium=1]="Medium",k[k.Long=2]="Long",k[k.Full=3]="Full",k))(),O=(()=>((O=O||{})[O.Decimal=0]="Decimal",O[O.Group=1]="Group",O[O.List=2]="List",O[O.PercentSign=3]="PercentSign",O[O.PlusSign=4]="PlusSign",O[O.MinusSign=5]="MinusSign",O[O.Exponential=6]="Exponential",O[O.SuperscriptingExponent=7]="SuperscriptingExponent",O[O.PerMille=8]="PerMille",O[O.Infinity=9]="Infinity",O[O.NaN=10]="NaN",O[O.TimeSeparator=11]="TimeSeparator",O[O.CurrencyDecimal=12]="CurrencyDecimal",O[O.CurrencyGroup=13]="CurrencyGroup",O))();function Ce(v,A){return it((0,o.cg1)(v)[o.wAp.DateFormat],A)}function ze(v,A){return it((0,o.cg1)(v)[o.wAp.TimeFormat],A)}function dt(v,A){return it((0,o.cg1)(v)[o.wAp.DateTimeFormat],A)}function et(v,A){const D=(0,o.cg1)(v),H=D[o.wAp.NumberSymbols][A];if(typeof H>"u"){if(A===O.CurrencyDecimal)return D[o.wAp.NumberSymbols][O.Decimal];if(A===O.CurrencyGroup)return D[o.wAp.NumberSymbols][O.Group]}return H}function Kt(v){if(!v[o.wAp.ExtraData])throw new Error(`Missing extra locale data for the locale "${v[o.wAp.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function it(v,A){for(let D=A;D>-1;D--)if(typeof v[D]<"u")return v[D];throw new Error("Locale data API: locale data undefined")}function Xt(v){const[A,D]=v.split(":");return{hours:+A,minutes:+D}}const Vn=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,en={},gt=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;var Yt=(()=>((Yt=Yt||{})[Yt.Short=0]="Short",Yt[Yt.ShortGMT=1]="ShortGMT",Yt[Yt.Long=2]="Long",Yt[Yt.Extended=3]="Extended",Yt))(),ht=(()=>((ht=ht||{})[ht.FullYear=0]="FullYear",ht[ht.Month=1]="Month",ht[ht.Date=2]="Date",ht[ht.Hours=3]="Hours",ht[ht.Minutes=4]="Minutes",ht[ht.Seconds=5]="Seconds",ht[ht.FractionalSeconds=6]="FractionalSeconds",ht[ht.Day=7]="Day",ht))(),nt=(()=>((nt=nt||{})[nt.DayPeriods=0]="DayPeriods",nt[nt.Days=1]="Days",nt[nt.Months=2]="Months",nt[nt.Eras=3]="Eras",nt))();function Et(v,A,D,H){let ae=function tn(v){if(mn(v))return v;if("number"==typeof v&&!isNaN(v))return new Date(v);if("string"==typeof v){if(v=v.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(v)){const[ae,$e=1,Xe=1]=v.split("-").map(lt=>+lt);return ut(ae,$e-1,Xe)}const D=parseFloat(v);if(!isNaN(v-D))return new Date(D);let H;if(H=v.match(Vn))return function Ln(v){const A=new Date(0);let D=0,H=0;const ae=v[8]?A.setUTCFullYear:A.setFullYear,$e=v[8]?A.setUTCHours:A.setHours;v[9]&&(D=Number(v[9]+v[10]),H=Number(v[9]+v[11])),ae.call(A,Number(v[1]),Number(v[2])-1,Number(v[3]));const Xe=Number(v[4]||0)-D,lt=Number(v[5]||0)-H,qt=Number(v[6]||0),Tt=Math.floor(1e3*parseFloat("0."+(v[7]||0)));return $e.call(A,Xe,lt,qt,Tt),A}(H)}const A=new Date(v);if(!mn(A))throw new Error(`Unable to convert "${v}" into a date`);return A}(v);A=Ct(D,A)||A;let lt,Xe=[];for(;A;){if(lt=gt.exec(A),!lt){Xe.push(A);break}{Xe=Xe.concat(lt.slice(1));const un=Xe.pop();if(!un)break;A=un}}let qt=ae.getTimezoneOffset();H&&(qt=vt(H,qt),ae=function _t(v,A,D){const H=D?-1:1,ae=v.getTimezoneOffset();return function Ht(v,A){return(v=new Date(v.getTime())).setMinutes(v.getMinutes()+A),v}(v,H*(vt(A,ae)-ae))}(ae,H,!0));let Tt="";return Xe.forEach(un=>{const Jt=function pt(v){if(Ye[v])return Ye[v];let A;switch(v){case"G":case"GG":case"GGG":A=zt(nt.Eras,T.Abbreviated);break;case"GGGG":A=zt(nt.Eras,T.Wide);break;case"GGGGG":A=zt(nt.Eras,T.Narrow);break;case"y":A=Nt(ht.FullYear,1,0,!1,!0);break;case"yy":A=Nt(ht.FullYear,2,0,!0,!0);break;case"yyy":A=Nt(ht.FullYear,3,0,!1,!0);break;case"yyyy":A=Nt(ht.FullYear,4,0,!1,!0);break;case"Y":A=He(1);break;case"YY":A=He(2,!0);break;case"YYY":A=He(3);break;case"YYYY":A=He(4);break;case"M":case"L":A=Nt(ht.Month,1,1);break;case"MM":case"LL":A=Nt(ht.Month,2,1);break;case"MMM":A=zt(nt.Months,T.Abbreviated);break;case"MMMM":A=zt(nt.Months,T.Wide);break;case"MMMMM":A=zt(nt.Months,T.Narrow);break;case"LLL":A=zt(nt.Months,T.Abbreviated,Q.Standalone);break;case"LLLL":A=zt(nt.Months,T.Wide,Q.Standalone);break;case"LLLLL":A=zt(nt.Months,T.Narrow,Q.Standalone);break;case"w":A=ye(1);break;case"ww":A=ye(2);break;case"W":A=ye(1,!0);break;case"d":A=Nt(ht.Date,1);break;case"dd":A=Nt(ht.Date,2);break;case"c":case"cc":A=Nt(ht.Day,1);break;case"ccc":A=zt(nt.Days,T.Abbreviated,Q.Standalone);break;case"cccc":A=zt(nt.Days,T.Wide,Q.Standalone);break;case"ccccc":A=zt(nt.Days,T.Narrow,Q.Standalone);break;case"cccccc":A=zt(nt.Days,T.Short,Q.Standalone);break;case"E":case"EE":case"EEE":A=zt(nt.Days,T.Abbreviated);break;case"EEEE":A=zt(nt.Days,T.Wide);break;case"EEEEE":A=zt(nt.Days,T.Narrow);break;case"EEEEEE":A=zt(nt.Days,T.Short);break;case"a":case"aa":case"aaa":A=zt(nt.DayPeriods,T.Abbreviated);break;case"aaaa":A=zt(nt.DayPeriods,T.Wide);break;case"aaaaa":A=zt(nt.DayPeriods,T.Narrow);break;case"b":case"bb":case"bbb":A=zt(nt.DayPeriods,T.Abbreviated,Q.Standalone,!0);break;case"bbbb":A=zt(nt.DayPeriods,T.Wide,Q.Standalone,!0);break;case"bbbbb":A=zt(nt.DayPeriods,T.Narrow,Q.Standalone,!0);break;case"B":case"BB":case"BBB":A=zt(nt.DayPeriods,T.Abbreviated,Q.Format,!0);break;case"BBBB":A=zt(nt.DayPeriods,T.Wide,Q.Format,!0);break;case"BBBBB":A=zt(nt.DayPeriods,T.Narrow,Q.Format,!0);break;case"h":A=Nt(ht.Hours,1,-12);break;case"hh":A=Nt(ht.Hours,2,-12);break;case"H":A=Nt(ht.Hours,1);break;case"HH":A=Nt(ht.Hours,2);break;case"m":A=Nt(ht.Minutes,1);break;case"mm":A=Nt(ht.Minutes,2);break;case"s":A=Nt(ht.Seconds,1);break;case"ss":A=Nt(ht.Seconds,2);break;case"S":A=Nt(ht.FractionalSeconds,1);break;case"SS":A=Nt(ht.FractionalSeconds,2);break;case"SSS":A=Nt(ht.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":A=jn(Yt.Short);break;case"ZZZZZ":A=jn(Yt.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":A=jn(Yt.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":A=jn(Yt.Long);break;default:return null}return Ye[v]=A,A}(un);Tt+=Jt?Jt(ae,D,qt):"''"===un?"'":un.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),Tt}function ut(v,A,D){const H=new Date(0);return H.setFullYear(v,A,D),H.setHours(0,0,0),H}function Ct(v,A){const D=function ce(v){return(0,o.cg1)(v)[o.wAp.LocaleId]}(v);if(en[D]=en[D]||{},en[D][A])return en[D][A];let H="";switch(A){case"shortDate":H=Ce(v,k.Short);break;case"mediumDate":H=Ce(v,k.Medium);break;case"longDate":H=Ce(v,k.Long);break;case"fullDate":H=Ce(v,k.Full);break;case"shortTime":H=ze(v,k.Short);break;case"mediumTime":H=ze(v,k.Medium);break;case"longTime":H=ze(v,k.Long);break;case"fullTime":H=ze(v,k.Full);break;case"short":const ae=Ct(v,"shortTime"),$e=Ct(v,"shortDate");H=qe(dt(v,k.Short),[ae,$e]);break;case"medium":const Xe=Ct(v,"mediumTime"),lt=Ct(v,"mediumDate");H=qe(dt(v,k.Medium),[Xe,lt]);break;case"long":const qt=Ct(v,"longTime"),Tt=Ct(v,"longDate");H=qe(dt(v,k.Long),[qt,Tt]);break;case"full":const un=Ct(v,"fullTime"),Jt=Ct(v,"fullDate");H=qe(dt(v,k.Full),[un,Jt])}return H&&(en[D][A]=H),H}function qe(v,A){return A&&(v=v.replace(/\{([^}]+)}/g,function(D,H){return null!=A&&H in A?A[H]:D})),v}function on(v,A,D="-",H,ae){let $e="";(v<0||ae&&v<=0)&&(ae?v=1-v:(v=-v,$e=D));let Xe=String(v);for(;Xe.length0||lt>-D)&&(lt+=D),v===ht.Hours)0===lt&&-12===D&&(lt=12);else if(v===ht.FractionalSeconds)return function gn(v,A){return on(v,3).substring(0,A)}(lt,A);const qt=et(Xe,O.MinusSign);return on(lt,A,qt,H,ae)}}function zt(v,A,D=Q.Format,H=!1){return function(ae,$e){return function Er(v,A,D,H,ae,$e){switch(D){case nt.Months:return function ue(v,A,D){const H=(0,o.cg1)(v),$e=it([H[o.wAp.MonthsFormat],H[o.wAp.MonthsStandalone]],A);return it($e,D)}(A,ae,H)[v.getMonth()];case nt.Days:return function De(v,A,D){const H=(0,o.cg1)(v),$e=it([H[o.wAp.DaysFormat],H[o.wAp.DaysStandalone]],A);return it($e,D)}(A,ae,H)[v.getDay()];case nt.DayPeriods:const Xe=v.getHours(),lt=v.getMinutes();if($e){const Tt=function pn(v){const A=(0,o.cg1)(v);return Kt(A),(A[o.wAp.ExtraData][2]||[]).map(H=>"string"==typeof H?Xt(H):[Xt(H[0]),Xt(H[1])])}(A),un=function Pt(v,A,D){const H=(0,o.cg1)(v);Kt(H);const $e=it([H[o.wAp.ExtraData][0],H[o.wAp.ExtraData][1]],A)||[];return it($e,D)||[]}(A,ae,H),Jt=Tt.findIndex(Yn=>{if(Array.isArray(Yn)){const[yn,Wn]=Yn,Eo=Xe>=yn.hours&<>=yn.minutes,pr=Xe0?Math.floor(ae/60):Math.ceil(ae/60);switch(v){case Yt.Short:return(ae>=0?"+":"")+on(Xe,2,$e)+on(Math.abs(ae%60),2,$e);case Yt.ShortGMT:return"GMT"+(ae>=0?"+":"")+on(Xe,1,$e);case Yt.Long:return"GMT"+(ae>=0?"+":"")+on(Xe,2,$e)+":"+on(Math.abs(ae%60),2,$e);case Yt.Extended:return 0===H?"Z":(ae>=0?"+":"")+on(Xe,2,$e)+":"+on(Math.abs(ae%60),2,$e);default:throw new Error(`Unknown zone width "${v}"`)}}}function se(v){return ut(v.getFullYear(),v.getMonth(),v.getDate()+(4-v.getDay()))}function ye(v,A=!1){return function(D,H){let ae;if(A){const $e=new Date(D.getFullYear(),D.getMonth(),1).getDay()-1,Xe=D.getDate();ae=1+Math.floor((Xe+$e)/7)}else{const $e=se(D),Xe=function xe(v){const A=ut(v,0,1).getDay();return ut(v,0,1+(A<=4?4:11)-A)}($e.getFullYear()),lt=$e.getTime()-Xe.getTime();ae=1+Math.round(lt/6048e5)}return on(ae,v,et(H,O.MinusSign))}}function He(v,A=!1){return function(D,H){return on(se(D).getFullYear(),v,et(H,O.MinusSign),A)}}const Ye={};function vt(v,A){v=v.replace(/:/g,"");const D=Date.parse("Jan 01, 1970 00:00:00 "+v)/6e4;return isNaN(D)?A:D}function mn(v){return v instanceof Date&&!isNaN(v.valueOf())}const ln=/^(\d+)?\.((\d+)(-(\d+))?)?$/;function xn(v){const A=parseInt(v);if(isNaN(A))throw new Error("Invalid integer literal when parsing "+v);return A}function gr(v,A){A=encodeURIComponent(A);for(const D of v.split(";")){const H=D.indexOf("="),[ae,$e]=-1==H?[D,""]:[D.slice(0,H),D.slice(H+1)];if(ae.trim()===A)return decodeURIComponent($e)}return null}let $t=(()=>{class v{constructor(D,H,ae,$e){this._iterableDiffers=D,this._keyValueDiffers=H,this._ngEl=ae,this._renderer=$e,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(D){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof D?D.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(D){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof D?D.split(/\s+/):D,this._rawClass&&((0,o.sIi)(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const D=this._iterableDiffer.diff(this._rawClass);D&&this._applyIterableChanges(D)}else if(this._keyValueDiffer){const D=this._keyValueDiffer.diff(this._rawClass);D&&this._applyKeyValueChanges(D)}}_applyKeyValueChanges(D){D.forEachAddedItem(H=>this._toggleClass(H.key,H.currentValue)),D.forEachChangedItem(H=>this._toggleClass(H.key,H.currentValue)),D.forEachRemovedItem(H=>{H.previousValue&&this._toggleClass(H.key,!1)})}_applyIterableChanges(D){D.forEachAddedItem(H=>{if("string"!=typeof H.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${(0,o.AaK)(H.item)}`);this._toggleClass(H.item,!0)}),D.forEachRemovedItem(H=>this._toggleClass(H.item,!1))}_applyClasses(D){D&&(Array.isArray(D)||D instanceof Set?D.forEach(H=>this._toggleClass(H,!0)):Object.keys(D).forEach(H=>this._toggleClass(H,!!D[H])))}_removeClasses(D){D&&(Array.isArray(D)||D instanceof Set?D.forEach(H=>this._toggleClass(H,!1)):Object.keys(D).forEach(H=>this._toggleClass(H,!1)))}_toggleClass(D,H){(D=D.trim())&&D.split(/\s+/g).forEach(ae=>{H?this._renderer.addClass(this._ngEl.nativeElement,ae):this._renderer.removeClass(this._ngEl.nativeElement,ae)})}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.ZZ4),o.Y36(o.aQg),o.Y36(o.SBq),o.Y36(o.Qsj))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0}),v})();class On{constructor(A,D,H,ae){this.$implicit=A,this.ngForOf=D,this.index=H,this.count=ae}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Cn=(()=>{class v{constructor(D,H,ae){this._viewContainer=D,this._template=H,this._differs=ae,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(D){this._ngForOf=D,this._ngForOfDirty=!0}set ngForTrackBy(D){this._trackByFn=D}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(D){D&&(this._template=D)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const D=this._ngForOf;!this._differ&&D&&(this._differ=this._differs.find(D).create(this.ngForTrackBy))}if(this._differ){const D=this._differ.diff(this._ngForOf);D&&this._applyChanges(D)}}_applyChanges(D){const H=this._viewContainer;D.forEachOperation((ae,$e,Xe)=>{if(null==ae.previousIndex)H.createEmbeddedView(this._template,new On(ae.item,this._ngForOf,-1,-1),null===Xe?void 0:Xe);else if(null==Xe)H.remove(null===$e?void 0:$e);else if(null!==$e){const lt=H.get($e);H.move(lt,Xe),rt(lt,ae)}});for(let ae=0,$e=H.length;ae<$e;ae++){const lt=H.get(ae).context;lt.index=ae,lt.count=$e,lt.ngForOf=this._ngForOf}D.forEachIdentityChange(ae=>{rt(H.get(ae.currentIndex),ae)})}static ngTemplateContextGuard(D,H){return!0}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b),o.Y36(o.Rgc),o.Y36(o.ZZ4))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0}),v})();function rt(v,A){v.context.$implicit=A.item}let q=(()=>{class v{constructor(D,H){this._viewContainer=D,this._context=new he,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=H}set ngIf(D){this._context.$implicit=this._context.ngIf=D,this._updateView()}set ngIfThen(D){we("ngIfThen",D),this._thenTemplateRef=D,this._thenViewRef=null,this._updateView()}set ngIfElse(D){we("ngIfElse",D),this._elseTemplateRef=D,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(D,H){return!0}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b),o.Y36(o.Rgc))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0}),v})();class he{constructor(){this.$implicit=null,this.ngIf=null}}function we(v,A){if(A&&!A.createEmbeddedView)throw new Error(`${v} must be a TemplateRef, but received '${(0,o.AaK)(A)}'.`)}let st=(()=>{class v{constructor(D,H,ae){this._ngEl=D,this._differs=H,this._renderer=ae,this._ngStyle=null,this._differ=null}set ngStyle(D){this._ngStyle=D,!this._differ&&D&&(this._differ=this._differs.find(D).create())}ngDoCheck(){if(this._differ){const D=this._differ.diff(this._ngStyle);D&&this._applyChanges(D)}}_setStyle(D,H){const[ae,$e]=D.split("."),Xe=-1===ae.indexOf("-")?void 0:o.JOm.DashCase;null!=H?this._renderer.setStyle(this._ngEl.nativeElement,ae,$e?`${H}${$e}`:H,Xe):this._renderer.removeStyle(this._ngEl.nativeElement,ae,Xe)}_applyChanges(D){D.forEachRemovedItem(H=>this._setStyle(H.key,null)),D.forEachAddedItem(H=>this._setStyle(H.key,H.currentValue)),D.forEachChangedItem(H=>this._setStyle(H.key,H.currentValue))}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.SBq),o.Y36(o.aQg),o.Y36(o.Qsj))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0}),v})(),Mt=(()=>{class v{constructor(D){this._viewContainerRef=D,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null,this.ngTemplateOutletInjector=null}ngOnChanges(D){if(D.ngTemplateOutlet||D.ngTemplateOutletInjector){const H=this._viewContainerRef;if(this._viewRef&&H.remove(H.indexOf(this._viewRef)),this.ngTemplateOutlet){const{ngTemplateOutlet:ae,ngTemplateOutletContext:$e,ngTemplateOutletInjector:Xe}=this;this._viewRef=H.createEmbeddedView(ae,$e,Xe?{injector:Xe}:void 0)}else this._viewRef=null}else this._viewRef&&D.ngTemplateOutletContext&&this.ngTemplateOutletContext&&(this._viewRef.context=this.ngTemplateOutletContext)}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},standalone:!0,features:[o.TTD]}),v})();function Bt(v,A){return new o.vHH(2100,!1)}class An{createSubscription(A,D){return A.subscribe({next:D,error:H=>{throw H}})}dispose(A){A.unsubscribe()}}class Rn{createSubscription(A,D){return A.then(D,H=>{throw H})}dispose(A){}}const Pn=new Rn,ur=new An;let mr=(()=>{class v{constructor(D){this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null,this._ref=D}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(D){return this._obj?D!==this._obj?(this._dispose(),this.transform(D)):this._latestValue:(D&&this._subscribe(D),this._latestValue)}_subscribe(D){this._obj=D,this._strategy=this._selectStrategy(D),this._subscription=this._strategy.createSubscription(D,H=>this._updateLatestValue(D,H))}_selectStrategy(D){if((0,o.QGY)(D))return Pn;if((0,o.F4k)(D))return ur;throw Bt()}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(D,H){D===this._obj&&(this._latestValue=H,this._ref.markForCheck())}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.sBO,16))},v.\u0275pipe=o.Yjl({name:"async",type:v,pure:!1,standalone:!0}),v})();const xr=new o.OlP("DATE_PIPE_DEFAULT_TIMEZONE"),Or=new o.OlP("DATE_PIPE_DEFAULT_OPTIONS");let ar=(()=>{class v{constructor(D,H,ae){this.locale=D,this.defaultTimezone=H,this.defaultOptions=ae}transform(D,H,ae,$e){if(null==D||""===D||D!=D)return null;try{return Et(D,H??this.defaultOptions?.dateFormat??"mediumDate",$e||this.locale,ae??this.defaultOptions?.timezone??this.defaultTimezone??void 0)}catch(Xe){throw Bt()}}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.soG,16),o.Y36(xr,24),o.Y36(Or,24))},v.\u0275pipe=o.Yjl({name:"date",type:v,pure:!0,standalone:!0}),v})(),Gn=(()=>{class v{constructor(D){this._locale=D}transform(D,H,ae){if(!function vr(v){return!(null==v||""===v||v!=v)}(D))return null;ae=ae||this._locale;try{return function dn(v,A,D){return function cn(v,A,D,H,ae,$e,Xe=!1){let lt="",qt=!1;if(isFinite(v)){let Tt=function $n(v){let H,ae,$e,Xe,lt,A=Math.abs(v)+"",D=0;for((ae=A.indexOf("."))>-1&&(A=A.replace(".","")),($e=A.search(/e/i))>0?(ae<0&&(ae=$e),ae+=+A.slice($e+1),A=A.substring(0,$e)):ae<0&&(ae=A.length),$e=0;"0"===A.charAt($e);$e++);if($e===(lt=A.length))H=[0],ae=1;else{for(lt--;"0"===A.charAt(lt);)lt--;for(ae-=$e,H=[],Xe=0;$e<=lt;$e++,Xe++)H[Xe]=Number(A.charAt($e))}return ae>22&&(H=H.splice(0,21),D=ae-1,ae=1),{digits:H,exponent:D,integerLen:ae}}(v);Xe&&(Tt=function sr(v){if(0===v.digits[0])return v;const A=v.digits.length-v.integerLen;return v.exponent?v.exponent+=2:(0===A?v.digits.push(0,0):1===A&&v.digits.push(0),v.integerLen+=2),v}(Tt));let un=A.minInt,Jt=A.minFrac,Yn=A.maxFrac;if($e){const Mr=$e.match(ln);if(null===Mr)throw new Error(`${$e} is not a valid digit info`);const Lo=Mr[1],di=Mr[3],Ai=Mr[5];null!=Lo&&(un=xn(Lo)),null!=di&&(Jt=xn(di)),null!=Ai?Yn=xn(Ai):null!=di&&Jt>Yn&&(Yn=Jt)}!function Tn(v,A,D){if(A>D)throw new Error(`The minimum number of digits after fraction (${A}) is higher than the maximum (${D}).`);let H=v.digits,ae=H.length-v.integerLen;const $e=Math.min(Math.max(A,ae),D);let Xe=$e+v.integerLen,lt=H[Xe];if(Xe>0){H.splice(Math.max(v.integerLen,Xe));for(let Jt=Xe;Jt=5)if(Xe-1<0){for(let Jt=0;Jt>Xe;Jt--)H.unshift(0),v.integerLen++;H.unshift(1),v.integerLen++}else H[Xe-1]++;for(;ae=Tt?Wn.pop():qt=!1),Yn>=10?1:0},0);un&&(H.unshift(un),v.integerLen++)}(Tt,Jt,Yn);let yn=Tt.digits,Wn=Tt.integerLen;const Eo=Tt.exponent;let pr=[];for(qt=yn.every(Mr=>!Mr);Wn0?pr=yn.splice(Wn,yn.length):(pr=yn,yn=[0]);const Vr=[];for(yn.length>=A.lgSize&&Vr.unshift(yn.splice(-A.lgSize,yn.length).join(""));yn.length>A.gSize;)Vr.unshift(yn.splice(-A.gSize,yn.length).join(""));yn.length&&Vr.unshift(yn.join("")),lt=Vr.join(et(D,H)),pr.length&&(lt+=et(D,ae)+pr.join("")),Eo&&(lt+=et(D,O.Exponential)+"+"+Eo)}else lt=et(D,O.Infinity);return lt=v<0&&!qt?A.negPre+lt+A.negSuf:A.posPre+lt+A.posSuf,lt}(v,function er(v,A="-"){const D={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},H=v.split(";"),ae=H[0],$e=H[1],Xe=-1!==ae.indexOf(".")?ae.split("."):[ae.substring(0,ae.lastIndexOf("0")+1),ae.substring(ae.lastIndexOf("0")+1)],lt=Xe[0],qt=Xe[1]||"";D.posPre=lt.substring(0,lt.indexOf("#"));for(let un=0;un{class v{transform(D,H,ae){if(null==D)return null;if(!this.supports(D))throw Bt();return D.slice(H,ae)}supports(D){return"string"==typeof D||Array.isArray(D)}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275pipe=o.Yjl({name:"slice",type:v,pure:!1,standalone:!0}),v})(),vo=(()=>{class v{}return v.\u0275fac=function(D){return new(D||v)},v.\u0275mod=o.oAB({type:v}),v.\u0275inj=o.cJS({}),v})();const yo="browser";let zr=(()=>{class v{}return v.\u0275prov=(0,o.Yz7)({token:v,providedIn:"root",factory:()=>new Do((0,o.LFG)(M),window)}),v})();class Do{constructor(A,D){this.document=A,this.window=D,this.offset=()=>[0,0]}setOffset(A){this.offset=Array.isArray(A)?()=>A:A}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(A){this.supportsScrolling()&&this.window.scrollTo(A[0],A[1])}scrollToAnchor(A){if(!this.supportsScrolling())return;const D=function Yr(v,A){const D=v.getElementById(A)||v.getElementsByName(A)[0];if(D)return D;if("function"==typeof v.createTreeWalker&&v.body&&(v.body.createShadowRoot||v.body.attachShadow)){const H=v.createTreeWalker(v.body,NodeFilter.SHOW_ELEMENT);let ae=H.currentNode;for(;ae;){const $e=ae.shadowRoot;if($e){const Xe=$e.getElementById(A)||$e.querySelector(`[name="${A}"]`);if(Xe)return Xe}ae=H.nextNode()}}return null}(this.document,A);D&&(this.scrollToElement(D),D.focus())}setHistoryScrollRestoration(A){if(this.supportScrollRestoration()){const D=this.window.history;D&&D.scrollRestoration&&(D.scrollRestoration=A)}}scrollToElement(A){const D=A.getBoundingClientRect(),H=D.left+this.window.pageXOffset,ae=D.top+this.window.pageYOffset,$e=this.offset();this.window.scrollTo(H-$e[0],ae-$e[1])}supportScrollRestoration(){try{if(!this.supportsScrolling())return!1;const A=Gr(this.window.history)||Gr(Object.getPrototypeOf(this.window.history));return!(!A||!A.writable&&!A.set)}catch{return!1}}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}function Gr(v){return Object.getOwnPropertyDescriptor(v,"scrollRestoration")}class hr{}},529:(Qe,Fe,w)=>{"use strict";w.d(Fe,{JF:()=>jn,TP:()=>de,WM:()=>Y,eN:()=>ce});var o=w(6895),x=w(8274),N=w(9646),ge=w(9751),R=w(4351),W=w(9300),M=w(4004);class U{}class _{}class Y{constructor(se){this.normalizedNames=new Map,this.lazyUpdate=null,se?this.lazyInit="string"==typeof se?()=>{this.headers=new Map,se.split("\n").forEach(ye=>{const He=ye.indexOf(":");if(He>0){const Ye=ye.slice(0,He),pt=Ye.toLowerCase(),vt=ye.slice(He+1).trim();this.maybeSetNormalizedName(Ye,pt),this.headers.has(pt)?this.headers.get(pt).push(vt):this.headers.set(pt,[vt])}})}:()=>{this.headers=new Map,Object.keys(se).forEach(ye=>{let He=se[ye];const Ye=ye.toLowerCase();"string"==typeof He&&(He=[He]),He.length>0&&(this.headers.set(Ye,He),this.maybeSetNormalizedName(ye,Ye))})}:this.headers=new Map}has(se){return this.init(),this.headers.has(se.toLowerCase())}get(se){this.init();const ye=this.headers.get(se.toLowerCase());return ye&&ye.length>0?ye[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(se){return this.init(),this.headers.get(se.toLowerCase())||null}append(se,ye){return this.clone({name:se,value:ye,op:"a"})}set(se,ye){return this.clone({name:se,value:ye,op:"s"})}delete(se,ye){return this.clone({name:se,value:ye,op:"d"})}maybeSetNormalizedName(se,ye){this.normalizedNames.has(ye)||this.normalizedNames.set(ye,se)}init(){this.lazyInit&&(this.lazyInit instanceof Y?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(se=>this.applyUpdate(se)),this.lazyUpdate=null))}copyFrom(se){se.init(),Array.from(se.headers.keys()).forEach(ye=>{this.headers.set(ye,se.headers.get(ye)),this.normalizedNames.set(ye,se.normalizedNames.get(ye))})}clone(se){const ye=new Y;return ye.lazyInit=this.lazyInit&&this.lazyInit instanceof Y?this.lazyInit:this,ye.lazyUpdate=(this.lazyUpdate||[]).concat([se]),ye}applyUpdate(se){const ye=se.name.toLowerCase();switch(se.op){case"a":case"s":let He=se.value;if("string"==typeof He&&(He=[He]),0===He.length)return;this.maybeSetNormalizedName(se.name,ye);const Ye=("a"===se.op?this.headers.get(ye):void 0)||[];Ye.push(...He),this.headers.set(ye,Ye);break;case"d":const pt=se.value;if(pt){let vt=this.headers.get(ye);if(!vt)return;vt=vt.filter(Ht=>-1===pt.indexOf(Ht)),0===vt.length?(this.headers.delete(ye),this.normalizedNames.delete(ye)):this.headers.set(ye,vt)}else this.headers.delete(ye),this.normalizedNames.delete(ye)}}forEach(se){this.init(),Array.from(this.normalizedNames.keys()).forEach(ye=>se(this.normalizedNames.get(ye),this.headers.get(ye)))}}class Z{encodeKey(se){return j(se)}encodeValue(se){return j(se)}decodeKey(se){return decodeURIComponent(se)}decodeValue(se){return decodeURIComponent(se)}}const B=/%(\d[a-f0-9])/gi,E={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function j(xe){return encodeURIComponent(xe).replace(B,(se,ye)=>E[ye]??se)}function P(xe){return`${xe}`}class K{constructor(se={}){if(this.updates=null,this.cloneFrom=null,this.encoder=se.encoder||new Z,se.fromString){if(se.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function S(xe,se){const ye=new Map;return xe.length>0&&xe.replace(/^\?/,"").split("&").forEach(Ye=>{const pt=Ye.indexOf("="),[vt,Ht]=-1==pt?[se.decodeKey(Ye),""]:[se.decodeKey(Ye.slice(0,pt)),se.decodeValue(Ye.slice(pt+1))],_t=ye.get(vt)||[];_t.push(Ht),ye.set(vt,_t)}),ye}(se.fromString,this.encoder)}else se.fromObject?(this.map=new Map,Object.keys(se.fromObject).forEach(ye=>{const He=se.fromObject[ye],Ye=Array.isArray(He)?He.map(P):[P(He)];this.map.set(ye,Ye)})):this.map=null}has(se){return this.init(),this.map.has(se)}get(se){this.init();const ye=this.map.get(se);return ye?ye[0]:null}getAll(se){return this.init(),this.map.get(se)||null}keys(){return this.init(),Array.from(this.map.keys())}append(se,ye){return this.clone({param:se,value:ye,op:"a"})}appendAll(se){const ye=[];return Object.keys(se).forEach(He=>{const Ye=se[He];Array.isArray(Ye)?Ye.forEach(pt=>{ye.push({param:He,value:pt,op:"a"})}):ye.push({param:He,value:Ye,op:"a"})}),this.clone(ye)}set(se,ye){return this.clone({param:se,value:ye,op:"s"})}delete(se,ye){return this.clone({param:se,value:ye,op:"d"})}toString(){return this.init(),this.keys().map(se=>{const ye=this.encoder.encodeKey(se);return this.map.get(se).map(He=>ye+"="+this.encoder.encodeValue(He)).join("&")}).filter(se=>""!==se).join("&")}clone(se){const ye=new K({encoder:this.encoder});return ye.cloneFrom=this.cloneFrom||this,ye.updates=(this.updates||[]).concat(se),ye}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(se=>this.map.set(se,this.cloneFrom.map.get(se))),this.updates.forEach(se=>{switch(se.op){case"a":case"s":const ye=("a"===se.op?this.map.get(se.param):void 0)||[];ye.push(P(se.value)),this.map.set(se.param,ye);break;case"d":if(void 0===se.value){this.map.delete(se.param);break}{let He=this.map.get(se.param)||[];const Ye=He.indexOf(P(se.value));-1!==Ye&&He.splice(Ye,1),He.length>0?this.map.set(se.param,He):this.map.delete(se.param)}}}),this.cloneFrom=this.updates=null)}}class ke{constructor(){this.map=new Map}set(se,ye){return this.map.set(se,ye),this}get(se){return this.map.has(se)||this.map.set(se,se.defaultValue()),this.map.get(se)}delete(se){return this.map.delete(se),this}has(se){return this.map.has(se)}keys(){return this.map.keys()}}function ie(xe){return typeof ArrayBuffer<"u"&&xe instanceof ArrayBuffer}function Be(xe){return typeof Blob<"u"&&xe instanceof Blob}function re(xe){return typeof FormData<"u"&&xe instanceof FormData}class be{constructor(se,ye,He,Ye){let pt;if(this.url=ye,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=se.toUpperCase(),function Te(xe){switch(xe){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||Ye?(this.body=void 0!==He?He:null,pt=Ye):pt=He,pt&&(this.reportProgress=!!pt.reportProgress,this.withCredentials=!!pt.withCredentials,pt.responseType&&(this.responseType=pt.responseType),pt.headers&&(this.headers=pt.headers),pt.context&&(this.context=pt.context),pt.params&&(this.params=pt.params)),this.headers||(this.headers=new Y),this.context||(this.context=new ke),this.params){const vt=this.params.toString();if(0===vt.length)this.urlWithParams=ye;else{const Ht=ye.indexOf("?");this.urlWithParams=ye+(-1===Ht?"?":Htmn.set(ln,se.setHeaders[ln]),_t)),se.setParams&&(tn=Object.keys(se.setParams).reduce((mn,ln)=>mn.set(ln,se.setParams[ln]),tn)),new be(ye,He,pt,{params:tn,headers:_t,context:Ln,reportProgress:Ht,responseType:Ye,withCredentials:vt})}}var Ne=(()=>((Ne=Ne||{})[Ne.Sent=0]="Sent",Ne[Ne.UploadProgress=1]="UploadProgress",Ne[Ne.ResponseHeader=2]="ResponseHeader",Ne[Ne.DownloadProgress=3]="DownloadProgress",Ne[Ne.Response=4]="Response",Ne[Ne.User=5]="User",Ne))();class Q{constructor(se,ye=200,He="OK"){this.headers=se.headers||new Y,this.status=void 0!==se.status?se.status:ye,this.statusText=se.statusText||He,this.url=se.url||null,this.ok=this.status>=200&&this.status<300}}class T extends Q{constructor(se={}){super(se),this.type=Ne.ResponseHeader}clone(se={}){return new T({headers:se.headers||this.headers,status:void 0!==se.status?se.status:this.status,statusText:se.statusText||this.statusText,url:se.url||this.url||void 0})}}class k extends Q{constructor(se={}){super(se),this.type=Ne.Response,this.body=void 0!==se.body?se.body:null}clone(se={}){return new k({body:void 0!==se.body?se.body:this.body,headers:se.headers||this.headers,status:void 0!==se.status?se.status:this.status,statusText:se.statusText||this.statusText,url:se.url||this.url||void 0})}}class O extends Q{constructor(se){super(se,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${se.url||"(unknown url)"}`:`Http failure response for ${se.url||"(unknown url)"}: ${se.status} ${se.statusText}`,this.error=se.error||null}}function te(xe,se){return{body:se,headers:xe.headers,context:xe.context,observe:xe.observe,params:xe.params,reportProgress:xe.reportProgress,responseType:xe.responseType,withCredentials:xe.withCredentials}}let ce=(()=>{class xe{constructor(ye){this.handler=ye}request(ye,He,Ye={}){let pt;if(ye instanceof be)pt=ye;else{let _t,tn;_t=Ye.headers instanceof Y?Ye.headers:new Y(Ye.headers),Ye.params&&(tn=Ye.params instanceof K?Ye.params:new K({fromObject:Ye.params})),pt=new be(ye,He,void 0!==Ye.body?Ye.body:null,{headers:_t,context:Ye.context,params:tn,reportProgress:Ye.reportProgress,responseType:Ye.responseType||"json",withCredentials:Ye.withCredentials})}const vt=(0,N.of)(pt).pipe((0,R.b)(_t=>this.handler.handle(_t)));if(ye instanceof be||"events"===Ye.observe)return vt;const Ht=vt.pipe((0,W.h)(_t=>_t instanceof k));switch(Ye.observe||"body"){case"body":switch(pt.responseType){case"arraybuffer":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&!(_t.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return _t.body}));case"blob":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&!(_t.body instanceof Blob))throw new Error("Response is not a Blob.");return _t.body}));case"text":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&"string"!=typeof _t.body)throw new Error("Response is not a string.");return _t.body}));default:return Ht.pipe((0,M.U)(_t=>_t.body))}case"response":return Ht;default:throw new Error(`Unreachable: unhandled observe type ${Ye.observe}}`)}}delete(ye,He={}){return this.request("DELETE",ye,He)}get(ye,He={}){return this.request("GET",ye,He)}head(ye,He={}){return this.request("HEAD",ye,He)}jsonp(ye,He){return this.request("JSONP",ye,{params:(new K).append(He,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(ye,He={}){return this.request("OPTIONS",ye,He)}patch(ye,He,Ye={}){return this.request("PATCH",ye,te(Ye,He))}post(ye,He,Ye={}){return this.request("POST",ye,te(Ye,He))}put(ye,He,Ye={}){return this.request("PUT",ye,te(Ye,He))}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(U))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();function Ae(xe,se){return se(xe)}function De(xe,se){return(ye,He)=>se.intercept(ye,{handle:Ye=>xe(Ye,He)})}const de=new x.OlP("HTTP_INTERCEPTORS"),ne=new x.OlP("HTTP_INTERCEPTOR_FNS");function Ee(){let xe=null;return(se,ye)=>(null===xe&&(xe=((0,x.f3M)(de,{optional:!0})??[]).reduceRight(De,Ae)),xe(se,ye))}let Ce=(()=>{class xe extends U{constructor(ye,He){super(),this.backend=ye,this.injector=He,this.chain=null}handle(ye){if(null===this.chain){const He=Array.from(new Set(this.injector.get(ne)));this.chain=He.reduceRight((Ye,pt)=>function ue(xe,se,ye){return(He,Ye)=>ye.runInContext(()=>se(He,pt=>xe(pt,Ye)))}(Ye,pt,this.injector),Ae)}return this.chain(ye,He=>this.backend.handle(He))}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(_),x.LFG(x.lqb))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();const Pt=/^\)\]\}',?\n/;let it=(()=>{class xe{constructor(ye){this.xhrFactory=ye}handle(ye){if("JSONP"===ye.method)throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");return new ge.y(He=>{const Ye=this.xhrFactory.build();if(Ye.open(ye.method,ye.urlWithParams),ye.withCredentials&&(Ye.withCredentials=!0),ye.headers.forEach((Ft,_e)=>Ye.setRequestHeader(Ft,_e.join(","))),ye.headers.has("Accept")||Ye.setRequestHeader("Accept","application/json, text/plain, */*"),!ye.headers.has("Content-Type")){const Ft=ye.detectContentTypeHeader();null!==Ft&&Ye.setRequestHeader("Content-Type",Ft)}if(ye.responseType){const Ft=ye.responseType.toLowerCase();Ye.responseType="json"!==Ft?Ft:"text"}const pt=ye.serializeBody();let vt=null;const Ht=()=>{if(null!==vt)return vt;const Ft=Ye.statusText||"OK",_e=new Y(Ye.getAllResponseHeaders()),fe=function Ut(xe){return"responseURL"in xe&&xe.responseURL?xe.responseURL:/^X-Request-URL:/m.test(xe.getAllResponseHeaders())?xe.getResponseHeader("X-Request-URL"):null}(Ye)||ye.url;return vt=new T({headers:_e,status:Ye.status,statusText:Ft,url:fe}),vt},_t=()=>{let{headers:Ft,status:_e,statusText:fe,url:ee}=Ht(),Se=null;204!==_e&&(Se=typeof Ye.response>"u"?Ye.responseText:Ye.response),0===_e&&(_e=Se?200:0);let Le=_e>=200&&_e<300;if("json"===ye.responseType&&"string"==typeof Se){const yt=Se;Se=Se.replace(Pt,"");try{Se=""!==Se?JSON.parse(Se):null}catch(It){Se=yt,Le&&(Le=!1,Se={error:It,text:Se})}}Le?(He.next(new k({body:Se,headers:Ft,status:_e,statusText:fe,url:ee||void 0})),He.complete()):He.error(new O({error:Se,headers:Ft,status:_e,statusText:fe,url:ee||void 0}))},tn=Ft=>{const{url:_e}=Ht(),fe=new O({error:Ft,status:Ye.status||0,statusText:Ye.statusText||"Unknown Error",url:_e||void 0});He.error(fe)};let Ln=!1;const mn=Ft=>{Ln||(He.next(Ht()),Ln=!0);let _e={type:Ne.DownloadProgress,loaded:Ft.loaded};Ft.lengthComputable&&(_e.total=Ft.total),"text"===ye.responseType&&!!Ye.responseText&&(_e.partialText=Ye.responseText),He.next(_e)},ln=Ft=>{let _e={type:Ne.UploadProgress,loaded:Ft.loaded};Ft.lengthComputable&&(_e.total=Ft.total),He.next(_e)};return Ye.addEventListener("load",_t),Ye.addEventListener("error",tn),Ye.addEventListener("timeout",tn),Ye.addEventListener("abort",tn),ye.reportProgress&&(Ye.addEventListener("progress",mn),null!==pt&&Ye.upload&&Ye.upload.addEventListener("progress",ln)),Ye.send(pt),He.next({type:Ne.Sent}),()=>{Ye.removeEventListener("error",tn),Ye.removeEventListener("abort",tn),Ye.removeEventListener("load",_t),Ye.removeEventListener("timeout",tn),ye.reportProgress&&(Ye.removeEventListener("progress",mn),null!==pt&&Ye.upload&&Ye.upload.removeEventListener("progress",ln)),Ye.readyState!==Ye.DONE&&Ye.abort()}})}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(o.JF))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();const Xt=new x.OlP("XSRF_ENABLED"),kt="XSRF-TOKEN",Vt=new x.OlP("XSRF_COOKIE_NAME",{providedIn:"root",factory:()=>kt}),rn="X-XSRF-TOKEN",Vn=new x.OlP("XSRF_HEADER_NAME",{providedIn:"root",factory:()=>rn});class en{}let gt=(()=>{class xe{constructor(ye,He,Ye){this.doc=ye,this.platform=He,this.cookieName=Ye,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const ye=this.doc.cookie||"";return ye!==this.lastCookieString&&(this.parseCount++,this.lastToken=(0,o.Mx)(ye,this.cookieName),this.lastCookieString=ye),this.lastToken}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(o.K0),x.LFG(x.Lbi),x.LFG(Vt))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();function Yt(xe,se){const ye=xe.url.toLowerCase();if(!(0,x.f3M)(Xt)||"GET"===xe.method||"HEAD"===xe.method||ye.startsWith("http://")||ye.startsWith("https://"))return se(xe);const He=(0,x.f3M)(en).getToken(),Ye=(0,x.f3M)(Vn);return null!=He&&!xe.headers.has(Ye)&&(xe=xe.clone({headers:xe.headers.set(Ye,He)})),se(xe)}var nt=(()=>((nt=nt||{})[nt.Interceptors=0]="Interceptors",nt[nt.LegacyInterceptors=1]="LegacyInterceptors",nt[nt.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",nt[nt.NoXsrfProtection=3]="NoXsrfProtection",nt[nt.JsonpSupport=4]="JsonpSupport",nt[nt.RequestsMadeViaParent=5]="RequestsMadeViaParent",nt))();function Et(xe,se){return{\u0275kind:xe,\u0275providers:se}}function ut(...xe){const se=[ce,it,Ce,{provide:U,useExisting:Ce},{provide:_,useExisting:it},{provide:ne,useValue:Yt,multi:!0},{provide:Xt,useValue:!0},{provide:en,useClass:gt}];for(const ye of xe)se.push(...ye.\u0275providers);return(0,x.MR2)(se)}const qe=new x.OlP("LEGACY_INTERCEPTOR_FN");function gn({cookieName:xe,headerName:se}){const ye=[];return void 0!==xe&&ye.push({provide:Vt,useValue:xe}),void 0!==se&&ye.push({provide:Vn,useValue:se}),Et(nt.CustomXsrfConfiguration,ye)}let jn=(()=>{class xe{}return xe.\u0275fac=function(ye){return new(ye||xe)},xe.\u0275mod=x.oAB({type:xe}),xe.\u0275inj=x.cJS({providers:[ut(Et(nt.LegacyInterceptors,[{provide:qe,useFactory:Ee},{provide:ne,useExisting:qe,multi:!0}]),gn({cookieName:kt,headerName:rn}))]}),xe})()},8274:(Qe,Fe,w)=>{"use strict";w.d(Fe,{tb:()=>qg,AFp:()=>Wg,ip1:()=>Yg,CZH:()=>ll,hGG:()=>T_,z2F:()=>ul,sBO:()=>h_,Sil:()=>KC,_Vd:()=>Zs,EJc:()=>YC,Xts:()=>Jl,SBq:()=>Js,lqb:()=>Ni,qLn:()=>Qs,vpe:()=>zo,XFs:()=>gt,OlP:()=>_n,zs3:()=>Li,ZZ4:()=>ku,aQg:()=>Nu,soG:()=>cl,YKP:()=>Wp,h0i:()=>Es,PXZ:()=>a_,R0b:()=>uo,FiY:()=>Hs,Lbi:()=>UC,g9A:()=>Xg,Qsj:()=>sy,FYo:()=>hf,JOm:()=>Bo,tp0:()=>js,Rgc:()=>ha,dDg:()=>r_,eoX:()=>rm,GfV:()=>pf,s_b:()=>il,ifc:()=>ee,MMx:()=>uu,Lck:()=>Ub,eFA:()=>sm,G48:()=>f_,Gpc:()=>j,f3M:()=>pt,MR2:()=>Gv,_c5:()=>A_,c2e:()=>zC,zSh:()=>nc,wAp:()=>Ot,vHH:()=>ie,lri:()=>tm,rWj:()=>nm,D6c:()=>x_,cg1:()=>nu,kL8:()=>yp,dqk:()=>Ct,Z0I:()=>Pt,sIi:()=>ra,CqO:()=>Eh,QGY:()=>Wc,QP$:()=>Un,F4k:()=>wh,RDi:()=>wv,AaK:()=>S,qOj:()=>Lc,TTD:()=>kr,_Bn:()=>Yp,jDz:()=>Xp,xp6:()=>_f,uIk:()=>Vc,Tol:()=>Wh,ekj:()=>Zc,Suo:()=>_g,Xpm:()=>sr,lG2:()=>cr,Yz7:()=>wt,cJS:()=>Kt,oAB:()=>vn,Yjl:()=>gr,Y36:()=>us,_UZ:()=>Uc,GkF:()=>Yc,qZA:()=>qa,TgZ:()=>Xa,EpF:()=>_h,n5z:()=>$s,LFG:()=>He,$8M:()=>Vs,$Z:()=>kf,NdJ:()=>Kc,CRH:()=>wg,oxw:()=>Th,ALo:()=>dg,lcZ:()=>fg,xi3:()=>hg,Dn7:()=>pg,Hsn:()=>Oh,F$t:()=>xh,Q6J:()=>Hc,MGl:()=>Za,hYB:()=>Xc,VKq:()=>ng,WLB:()=>rg,kEZ:()=>og,HTZ:()=>ig,iGM:()=>bg,MAs:()=>Ch,KtG:()=>Dr,evT:()=>gf,CHM:()=>yr,oJD:()=>qd,P3R:()=>Qd,kYT:()=>tr,Udp:()=>qc,YNc:()=>bh,W1O:()=>Mg,_uU:()=>ep,Oqu:()=>Qc,hij:()=>Qa,AsE:()=>eu,lnq:()=>tu,Gf:()=>Cg});var o=w(7579),x=w(727),N=w(9751),ge=w(8189),R=w(8421),W=w(515),M=w(3269),U=w(2076),Y=w(3099);function G(e){for(let t in e)if(e[t]===G)return t;throw Error("Could not find renamed property on target object.")}function Z(e,t){for(const n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function S(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(S).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function B(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const E=G({__forward_ref__:G});function j(e){return e.__forward_ref__=j,e.toString=function(){return S(this())},e}function P(e){return K(e)?e():e}function K(e){return"function"==typeof e&&e.hasOwnProperty(E)&&e.__forward_ref__===j}function pe(e){return e&&!!e.\u0275providers}const Te="https://g.co/ng/security#xss";class ie extends Error{constructor(t,n){super(function Be(e,t){return`NG0${Math.abs(e)}${t?": "+t.trim():""}`}(t,n)),this.code=t}}function re(e){return"string"==typeof e?e:null==e?"":String(e)}function T(e,t){throw new ie(-201,!1)}function et(e,t){null==e&&function Ue(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function wt(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Kt(e){return{providers:e.providers||[],imports:e.imports||[]}}function pn(e){return Ut(e,Vt)||Ut(e,Vn)}function Pt(e){return null!==pn(e)}function Ut(e,t){return e.hasOwnProperty(t)?e[t]:null}function kt(e){return e&&(e.hasOwnProperty(rn)||e.hasOwnProperty(en))?e[rn]:null}const Vt=G({\u0275prov:G}),rn=G({\u0275inj:G}),Vn=G({ngInjectableDef:G}),en=G({ngInjectorDef:G});var gt=(()=>((gt=gt||{})[gt.Default=0]="Default",gt[gt.Host=1]="Host",gt[gt.Self=2]="Self",gt[gt.SkipSelf=4]="SkipSelf",gt[gt.Optional=8]="Optional",gt))();let Yt;function nt(e){const t=Yt;return Yt=e,t}function Et(e,t,n){const r=pn(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n>.Optional?null:void 0!==t?t:void T(S(e))}const Ct=(()=>typeof globalThis<"u"&&globalThis||typeof global<"u"&&global||typeof window<"u"&&window||typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self)(),Nt={},Hn="__NG_DI_FLAG__",zt="ngTempTokenPath",jn=/\n/gm,En="__source";let xe;function se(e){const t=xe;return xe=e,t}function ye(e,t=gt.Default){if(void 0===xe)throw new ie(-203,!1);return null===xe?Et(e,void 0,t):xe.get(e,t>.Optional?null:void 0,t)}function He(e,t=gt.Default){return(function ht(){return Yt}()||ye)(P(e),t)}function pt(e,t=gt.Default){return He(e,vt(t))}function vt(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Ht(e){const t=[];for(let n=0;n((Ft=Ft||{})[Ft.OnPush=0]="OnPush",Ft[Ft.Default=1]="Default",Ft))(),ee=(()=>{return(e=ee||(ee={}))[e.Emulated=0]="Emulated",e[e.None=2]="None",e[e.ShadowDom=3]="ShadowDom",ee;var e})();const Se={},Le=[],yt=G({\u0275cmp:G}),It=G({\u0275dir:G}),cn=G({\u0275pipe:G}),Dn=G({\u0275mod:G}),sn=G({\u0275fac:G}),dn=G({__NG_ELEMENT_ID__:G});let er=0;function sr(e){return ln(()=>{const n=!0===e.standalone,r={},i={type:e.type,providersResolver:null,decls:e.decls,vars:e.vars,factory:null,template:e.template||null,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:r,inputs:null,outputs:null,exportAs:e.exportAs||null,onPush:e.changeDetection===Ft.OnPush,directiveDefs:null,pipeDefs:null,standalone:n,dependencies:n&&e.dependencies||null,getStandaloneInjector:null,selectors:e.selectors||Le,viewQuery:e.viewQuery||null,features:e.features||null,data:e.data||{},encapsulation:e.encapsulation||ee.Emulated,id:"c"+er++,styles:e.styles||Le,_:null,setInput:null,schemas:e.schemas||null,tView:null,findHostDirectiveDefs:null,hostDirectives:null},l=e.dependencies,u=e.features;return i.inputs=Ir(e.inputs,r),i.outputs=Ir(e.outputs),u&&u.forEach(p=>p(i)),i.directiveDefs=l?()=>("function"==typeof l?l():l).map(Tn).filter(xn):null,i.pipeDefs=l?()=>("function"==typeof l?l():l).map(Qt).filter(xn):null,i})}function Tn(e){return $t(e)||fn(e)}function xn(e){return null!==e}function vn(e){return ln(()=>({type:e.type,bootstrap:e.bootstrap||Le,declarations:e.declarations||Le,imports:e.imports||Le,exports:e.exports||Le,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function tr(e,t){return ln(()=>{const n=On(e,!0);n.declarations=t.declarations||Le,n.imports=t.imports||Le,n.exports=t.exports||Le})}function Ir(e,t){if(null==e)return Se;const n={};for(const r in e)if(e.hasOwnProperty(r)){let i=e[r],l=i;Array.isArray(i)&&(l=i[1],i=i[0]),n[i]=r,t&&(t[i]=l)}return n}const cr=sr;function gr(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,standalone:!0===e.standalone,onDestroy:e.type.prototype.ngOnDestroy||null}}function $t(e){return e[yt]||null}function fn(e){return e[It]||null}function Qt(e){return e[cn]||null}function Un(e){const t=$t(e)||fn(e)||Qt(e);return null!==t&&t.standalone}function On(e,t){const n=e[Dn]||null;if(!n&&!0===t)throw new Error(`Type ${S(e)} does not have '\u0275mod' property.`);return n}function Fn(e){return Array.isArray(e)&&"object"==typeof e[1]}function zn(e){return Array.isArray(e)&&!0===e[1]}function qn(e){return 0!=(4&e.flags)}function dr(e){return e.componentOffset>-1}function Sr(e){return 1==(1&e.flags)}function Gn(e){return null!==e.template}function go(e){return 0!=(256&e[2])}function nr(e,t){return e.hasOwnProperty(sn)?e[sn]:null}class li{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function kr(){return bo}function bo(e){return e.type.prototype.ngOnChanges&&(e.setInput=Wr),Wo}function Wo(){const e=Qr(this),t=e?.current;if(t){const n=e.previous;if(n===Se)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function Wr(e,t,n,r){const i=this.declaredInputs[n],l=Qr(e)||function eo(e,t){return e[Co]=t}(e,{previous:Se,current:null}),u=l.current||(l.current={}),p=l.previous,y=p[i];u[i]=new li(y&&y.currentValue,t,p===Se),e[r]=t}kr.ngInherit=!0;const Co="__ngSimpleChanges__";function Qr(e){return e[Co]||null}function Sn(e){for(;Array.isArray(e);)e=e[0];return e}function ko(e,t){return Sn(t[e])}function Jn(e,t){return Sn(t[e.index])}function Kr(e,t){return e.data[t]}function no(e,t){return e[t]}function rr(e,t){const n=t[e];return Fn(n)?n:n[0]}function hn(e){return 64==(64&e[2])}function C(e,t){return null==t?null:e[t]}function s(e){e[18]=0}function c(e,t){e[5]+=t;let n=e,r=e[3];for(;null!==r&&(1===t&&1===n[5]||-1===t&&0===n[5]);)r[5]+=t,n=r,r=r[3]}const a={lFrame:A(null),bindingsEnabled:!0};function Dt(){return a.bindingsEnabled}function Ve(){return a.lFrame.lView}function At(){return a.lFrame.tView}function yr(e){return a.lFrame.contextLView=e,e[8]}function Dr(e){return a.lFrame.contextLView=null,e}function Mn(){let e=$r();for(;null!==e&&64===e.type;)e=e.parent;return e}function $r(){return a.lFrame.currentTNode}function br(e,t){const n=a.lFrame;n.currentTNode=e,n.isParent=t}function zi(){return a.lFrame.isParent}function ci(){a.lFrame.isParent=!1}function lr(){const e=a.lFrame;let t=e.bindingRootIndex;return-1===t&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function oo(){return a.lFrame.bindingIndex}function io(){return a.lFrame.bindingIndex++}function Br(e){const t=a.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function ui(e,t){const n=a.lFrame;n.bindingIndex=n.bindingRootIndex=e,No(t)}function No(e){a.lFrame.currentDirectiveIndex=e}function Os(){return a.lFrame.currentQueryIndex}function Wi(e){a.lFrame.currentQueryIndex=e}function ma(e){const t=e[1];return 2===t.type?t.declTNode:1===t.type?e[6]:null}function Rs(e,t,n){if(n>.SkipSelf){let i=t,l=e;for(;!(i=i.parent,null!==i||n>.Host||(i=ma(l),null===i||(l=l[15],10&i.type))););if(null===i)return!1;t=i,e=l}const r=a.lFrame=v();return r.currentTNode=t,r.lView=e,!0}function Ki(e){const t=v(),n=e[1];a.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function v(){const e=a.lFrame,t=null===e?null:e.child;return null===t?A(e):t}function A(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function D(){const e=a.lFrame;return a.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const H=D;function ae(){const e=D();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function lt(){return a.lFrame.selectedIndex}function qt(e){a.lFrame.selectedIndex=e}function Tt(){const e=a.lFrame;return Kr(e.tView,e.selectedIndex)}function pr(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[y]<0&&(e[18]+=65536),(p>11>16&&(3&e[2])===t){e[2]+=2048;try{l.call(p)}finally{}}}else try{l.call(p)}finally{}}class fi{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function pi(e,t,n){let r=0;for(;rt){u=l-1;break}}}for(;l>16}(e),r=t;for(;n>0;)r=r[15],n--;return r}let qi=!0;function Zi(e){const t=qi;return qi=e,t}let yl=0;const Xr={};function Ji(e,t){const n=ks(e,t);if(-1!==n)return n;const r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,mi(r.data,e),mi(t,null),mi(r.blueprint,null));const i=Qi(e,t),l=e.injectorIndex;if(ba(i)){const u=Zo(i),p=gi(i,t),y=p[1].data;for(let I=0;I<8;I++)t[l+I]=p[u+I]|y[u+I]}return t[l+8]=i,l}function mi(e,t){e.push(0,0,0,0,0,0,0,0,t)}function ks(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function Qi(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,i=t;for(;null!==i;){if(r=Ia(i),null===r)return-1;if(n++,i=i[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return-1}function es(e,t,n){!function or(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(dn)&&(r=n[dn]),null==r&&(r=n[dn]=yl++);const i=255&r;t.data[e+(i>>5)]|=1<=0?255&t:Xu:t}(n);if("function"==typeof l){if(!Rs(t,e,r))return r>.Host?bl(i,0,r):wa(t,n,r,i);try{const u=l(r);if(null!=u||r>.Optional)return u;T()}finally{H()}}else if("number"==typeof l){let u=null,p=ks(e,t),y=-1,I=r>.Host?t[16][6]:null;for((-1===p||r>.SkipSelf)&&(y=-1===p?Qi(e,t):t[p+8],-1!==y&&Ea(r,!1)?(u=t[1],p=Zo(y),t=gi(y,t)):p=-1);-1!==p;){const V=t[1];if(ns(l,p,V.data)){const J=vi(p,t,n,u,r,I);if(J!==Xr)return J}y=t[p+8],-1!==y&&Ea(r,t[1].data[p+8]===I)&&ns(l,p,t)?(u=V,p=Zo(y),t=gi(y,t)):p=-1}}return i}function vi(e,t,n,r,i,l){const u=t[1],p=u.data[e+8],V=Ls(p,u,n,null==r?dr(p)&&qi:r!=u&&0!=(3&p.type),i>.Host&&l===p);return null!==V?Jo(t,u,V,p):Xr}function Ls(e,t,n,r,i){const l=e.providerIndexes,u=t.data,p=1048575&l,y=e.directiveStart,V=l>>20,me=i?p+V:e.directiveEnd;for(let Oe=r?p:p+V;Oe=y&&Ge.type===n)return Oe}if(i){const Oe=u[y];if(Oe&&Gn(Oe)&&Oe.type===n)return y}return null}function Jo(e,t,n,r){let i=e[n];const l=t.data;if(function gl(e){return e instanceof fi}(i)){const u=i;u.resolving&&function be(e,t){const n=t?`. Dependency path: ${t.join(" > ")} > ${e}`:"";throw new ie(-200,`Circular dependency in DI detected for ${e}${n}`)}(function oe(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():re(e)}(l[n]));const p=Zi(u.canSeeViewProviders);u.resolving=!0;const y=u.injectImpl?nt(u.injectImpl):null;Rs(e,r,gt.Default);try{i=e[n]=u.factory(void 0,l,e,r),t.firstCreatePass&&n>=r.directiveStart&&function Eo(e,t,n){const{ngOnChanges:r,ngOnInit:i,ngDoCheck:l}=t.type.prototype;if(r){const u=bo(t);(n.preOrderHooks||(n.preOrderHooks=[])).push(e,u),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,u)}i&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-e,i),l&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,l),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,l))}(n,l[n],t)}finally{null!==y&&nt(y),Zi(p),u.resolving=!1,H()}}return i}function ns(e,t,n){return!!(n[t+(e>>5)]&1<{const t=e.prototype.constructor,n=t[sn]||rs(t),r=Object.prototype;let i=Object.getPrototypeOf(e.prototype).constructor;for(;i&&i!==r;){const l=i[sn]||rs(i);if(l&&l!==n)return l;i=Object.getPrototypeOf(i)}return l=>new l})}function rs(e){return K(e)?()=>{const t=rs(P(e));return t&&t()}:nr(e)}function Ia(e){const t=e[1],n=t.type;return 2===n?t.declTNode:1===n?e[6]:null}function Vs(e){return function Dl(e,t){if("class"===t)return e.classes;if("style"===t)return e.styles;const n=e.attrs;if(n){const r=n.length;let i=0;for(;i{const r=function ei(e){return function(...n){if(e){const r=e(...n);for(const i in r)this[i]=r[i]}}}(t);function i(...l){if(this instanceof i)return r.apply(this,l),this;const u=new i(...l);return p.annotation=u,p;function p(y,I,V){const J=y.hasOwnProperty(Qo)?y[Qo]:Object.defineProperty(y,Qo,{value:[]})[Qo];for(;J.length<=V;)J.push(null);return(J[V]=J[V]||[]).push(u),y}}return n&&(i.prototype=Object.create(n.prototype)),i.prototype.ngMetadataName=e,i.annotationCls=i,i})}class _n{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=wt({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}function z(e,t){void 0===t&&(t=e);for(let n=0;nArray.isArray(n)?ve(n,t):t(n))}function We(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function ft(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function bt(e,t){const n=[];for(let r=0;r=0?e[1|r]=n:(r=~r,function lo(e,t,n,r){let i=e.length;if(i==t)e.push(n,r);else if(1===i)e.push(r,e[0]),e[0]=n;else{for(i--,e.push(e[i-1],e[i]);i>t;)e[i]=e[i-2],i--;e[t]=n,e[t+1]=r}}(e,r,t,n)),r}function Ri(e,t){const n=_i(e,t);if(n>=0)return e[1|n]}function _i(e,t){return function nd(e,t,n){let r=0,i=e.length>>n;for(;i!==r;){const l=r+(i-r>>1),u=e[l<t?i=l:r=l+1}return~(i<((Bo=Bo||{})[Bo.Important=1]="Important",Bo[Bo.DashCase=2]="DashCase",Bo))();const xl=new Map;let Gm=0;const Rl="__ngContext__";function _r(e,t){Fn(t)?(e[Rl]=t[20],function Wm(e){xl.set(e[20],e)}(t)):e[Rl]=t}function Fl(e,t){return undefined(e,t)}function Ys(e){const t=e[3];return zn(t)?t[3]:t}function kl(e){return wd(e[13])}function Nl(e){return wd(e[4])}function wd(e){for(;null!==e&&!zn(e);)e=e[4];return e}function is(e,t,n,r,i){if(null!=r){let l,u=!1;zn(r)?l=r:Fn(r)&&(u=!0,r=r[0]);const p=Sn(r);0===e&&null!==n?null==i?Td(t,n,p):Pi(t,n,p,i||null,!0):1===e&&null!==n?Pi(t,n,p,i||null,!0):2===e?function Ul(e,t,n){const r=Ta(e,t);r&&function pv(e,t,n,r){e.removeChild(t,n,r)}(e,r,t,n)}(t,p,u):3===e&&t.destroyNode(p),null!=l&&function vv(e,t,n,r,i){const l=n[7];l!==Sn(n)&&is(t,e,r,l,i);for(let p=10;p0&&(e[n-1][4]=r[4]);const l=ft(e,10+t);!function sv(e,t){Ws(e,t,t[11],2,null,null),t[0]=null,t[6]=null}(r[1],r);const u=l[19];null!==u&&u.detachView(l[1]),r[3]=null,r[4]=null,r[2]&=-65}return r}function Sd(e,t){if(!(128&t[2])){const n=t[11];n.destroyNode&&Ws(e,t,n,3,null,null),function cv(e){let t=e[13];if(!t)return Vl(e[1],e);for(;t;){let n=null;if(Fn(t))n=t[13];else{const r=t[10];r&&(n=r)}if(!n){for(;t&&!t[4]&&t!==e;)Fn(t)&&Vl(t[1],t),t=t[3];null===t&&(t=e),Fn(t)&&Vl(t[1],t),n=t&&t[4]}t=n}}(t)}}function Vl(e,t){if(!(128&t[2])){t[2]&=-65,t[2]|=128,function hv(e,t){let n;if(null!=e&&null!=(n=e.destroyHooks))for(let r=0;r=0?r[i=u]():r[i=-u].unsubscribe(),l+=2}else{const u=r[i=n[l+1]];n[l].call(u)}if(null!==r){for(let l=i+1;l-1){const{encapsulation:l}=e.data[r.directiveStart+i];if(l===ee.None||l===ee.Emulated)return null}return Jn(r,n)}}(e,t.parent,n)}function Pi(e,t,n,r,i){e.insertBefore(t,n,r,i)}function Td(e,t,n){e.appendChild(t,n)}function xd(e,t,n,r,i){null!==r?Pi(e,t,n,r,i):Td(e,t,n)}function Ta(e,t){return e.parentNode(t)}function Od(e,t,n){return Pd(e,t,n)}let Ra,Yl,Pa,Pd=function Rd(e,t,n){return 40&e.type?Jn(e,n):null};function xa(e,t,n,r){const i=Md(e,r,t),l=t[11],p=Od(r.parent||t[6],r,t);if(null!=i)if(Array.isArray(n))for(let y=0;ye,createScript:e=>e,createScriptURL:e=>e})}catch{}return Ra}()?.createHTML(e)||e}function wv(e){Yl=e}function Wl(){if(void 0===Pa&&(Pa=null,Ct.trustedTypes))try{Pa=Ct.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return Pa}function Vd(e){return Wl()?.createHTML(e)||e}function jd(e){return Wl()?.createScriptURL(e)||e}class Ud{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Te})`}}function wi(e){return e instanceof Ud?e.changingThisBreaksApplicationSecurity:e}function Ks(e,t){const n=function Tv(e){return e instanceof Ud&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${Te})`)}return n===t}class xv{constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{const n=(new window.DOMParser).parseFromString(Fi(t),"text/html").body;return null===n?this.inertDocumentHelper.getInertBodyElement(t):(n.removeChild(n.firstChild),n)}catch{return null}}}class Ov{constructor(t){if(this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),null==this.inertDocument.body){const n=this.inertDocument.createElement("html");this.inertDocument.appendChild(n);const r=this.inertDocument.createElement("body");n.appendChild(r)}}getInertBodyElement(t){const n=this.inertDocument.createElement("template");if("content"in n)return n.innerHTML=Fi(t),n;const r=this.inertDocument.createElement("body");return r.innerHTML=Fi(t),this.defaultDoc.documentMode&&this.stripCustomNsAttrs(r),r}stripCustomNsAttrs(t){const n=t.attributes;for(let i=n.length-1;0"),!0}endElement(t){const n=t.nodeName.toLowerCase();Xl.hasOwnProperty(n)&&!Gd.hasOwnProperty(n)&&(this.buf.push(""))}chars(t){this.buf.push(Xd(t))}checkClobberedElement(t,n){if(n&&(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${t.outerHTML}`);return n}}const Nv=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Lv=/([^\#-~ |!])/g;function Xd(e){return e.replace(/&/g,"&").replace(Nv,function(t){return"&#"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+";"}).replace(Lv,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}let Fa;function Zl(e){return"content"in e&&function Bv(e){return e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.nodeName}(e)?e.content:null}var Qn=(()=>((Qn=Qn||{})[Qn.NONE=0]="NONE",Qn[Qn.HTML=1]="HTML",Qn[Qn.STYLE=2]="STYLE",Qn[Qn.SCRIPT=3]="SCRIPT",Qn[Qn.URL=4]="URL",Qn[Qn.RESOURCE_URL=5]="RESOURCE_URL",Qn))();function qd(e){const t=qs();return t?Vd(t.sanitize(Qn.HTML,e)||""):Ks(e,"HTML")?Vd(wi(e)):function $v(e,t){let n=null;try{Fa=Fa||function zd(e){const t=new Ov(e);return function Rv(){try{return!!(new window.DOMParser).parseFromString(Fi(""),"text/html")}catch{return!1}}()?new xv(t):t}(e);let r=t?String(t):"";n=Fa.getInertBodyElement(r);let i=5,l=r;do{if(0===i)throw new Error("Failed to sanitize html because the input is unstable");i--,r=l,l=n.innerHTML,n=Fa.getInertBodyElement(r)}while(r!==l);return Fi((new kv).sanitizeChildren(Zl(n)||n))}finally{if(n){const r=Zl(n)||n;for(;r.firstChild;)r.removeChild(r.firstChild)}}}(function Bd(){return void 0!==Yl?Yl:typeof document<"u"?document:void 0}(),re(e))}function Zd(e){const t=qs();return t?t.sanitize(Qn.URL,e)||"":Ks(e,"URL")?wi(e):Kl(re(e))}function Jd(e){const t=qs();if(t)return jd(t.sanitize(Qn.RESOURCE_URL,e)||"");if(Ks(e,"ResourceURL"))return jd(wi(e));throw new ie(904,!1)}function Qd(e,t,n){return function zv(e,t){return"src"===t&&("embed"===e||"frame"===e||"iframe"===e||"media"===e||"script"===e)||"href"===t&&("base"===e||"link"===e)?Jd:Zd}(t,n)(e)}function qs(){const e=Ve();return e&&e[12]}const Jl=new _n("ENVIRONMENT_INITIALIZER"),ef=new _n("INJECTOR",-1),tf=new _n("INJECTOR_DEF_TYPES");class nf{get(t,n=Nt){if(n===Nt){const r=new Error(`NullInjectorError: No provider for ${S(t)}!`);throw r.name="NullInjectorError",r}return n}}function Gv(e){return{\u0275providers:e}}function Yv(...e){return{\u0275providers:rf(0,e),\u0275fromNgModule:!0}}function rf(e,...t){const n=[],r=new Set;let i;return ve(t,l=>{const u=l;Ql(u,n,[],r)&&(i||(i=[]),i.push(u))}),void 0!==i&&sf(i,n),n}function sf(e,t){for(let n=0;n{t.push(l)})}}function Ql(e,t,n,r){if(!(e=P(e)))return!1;let i=null,l=kt(e);const u=!l&&$t(e);if(l||u){if(u&&!u.standalone)return!1;i=e}else{const y=e.ngModule;if(l=kt(y),!l)return!1;i=y}const p=r.has(i);if(u){if(p)return!1;if(r.add(i),u.dependencies){const y="function"==typeof u.dependencies?u.dependencies():u.dependencies;for(const I of y)Ql(I,t,n,r)}}else{if(!l)return!1;{if(null!=l.imports&&!p){let I;r.add(i);try{ve(l.imports,V=>{Ql(V,t,n,r)&&(I||(I=[]),I.push(V))})}finally{}void 0!==I&&sf(I,t)}if(!p){const I=nr(i)||(()=>new i);t.push({provide:i,useFactory:I,deps:Le},{provide:tf,useValue:i,multi:!0},{provide:Jl,useValue:()=>He(i),multi:!0})}const y=l.providers;null==y||p||ec(y,V=>{t.push(V)})}}return i!==e&&void 0!==e.providers}function ec(e,t){for(let n of e)pe(n)&&(n=n.\u0275providers),Array.isArray(n)?ec(n,t):t(n)}const Wv=G({provide:String,useValue:G});function tc(e){return null!==e&&"object"==typeof e&&Wv in e}function ki(e){return"function"==typeof e}const nc=new _n("Set Injector scope."),ka={},Xv={};let rc;function Na(){return void 0===rc&&(rc=new nf),rc}class Ni{}class cf extends Ni{constructor(t,n,r,i){super(),this.parent=n,this.source=r,this.scopes=i,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,ic(t,u=>this.processProvider(u)),this.records.set(ef,ss(void 0,this)),i.has("environment")&&this.records.set(Ni,ss(void 0,this));const l=this.records.get(nc);null!=l&&"string"==typeof l.value&&this.scopes.add(l.value),this.injectorDefTypes=new Set(this.get(tf.multi,Le,gt.Self))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const t of this._ngOnDestroyHooks)t.ngOnDestroy();for(const t of this._onDestroyHooks)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),this._onDestroyHooks.length=0}}onDestroy(t){this._onDestroyHooks.push(t)}runInContext(t){this.assertNotDestroyed();const n=se(this),r=nt(void 0);try{return t()}finally{se(n),nt(r)}}get(t,n=Nt,r=gt.Default){this.assertNotDestroyed(),r=vt(r);const i=se(this),l=nt(void 0);try{if(!(r>.SkipSelf)){let p=this.records.get(t);if(void 0===p){const y=function ey(e){return"function"==typeof e||"object"==typeof e&&e instanceof _n}(t)&&pn(t);p=y&&this.injectableDefInScope(y)?ss(oc(t),ka):null,this.records.set(t,p)}if(null!=p)return this.hydrate(t,p)}return(r>.Self?Na():this.parent).get(t,n=r>.Optional&&n===Nt?null:n)}catch(u){if("NullInjectorError"===u.name){if((u[zt]=u[zt]||[]).unshift(S(t)),i)throw u;return function Ln(e,t,n,r){const i=e[zt];throw t[En]&&i.unshift(t[En]),e.message=function mn(e,t,n,r=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let i=S(t);if(Array.isArray(t))i=t.map(S).join(" -> ");else if("object"==typeof t){let l=[];for(let u in t)if(t.hasOwnProperty(u)){let p=t[u];l.push(u+":"+("string"==typeof p?JSON.stringify(p):S(p)))}i=`{${l.join(", ")}}`}return`${n}${r?"("+r+")":""}[${i}]: ${e.replace(jn,"\n ")}`}("\n"+e.message,i,n,r),e.ngTokenPath=i,e[zt]=null,e}(u,t,"R3InjectorError",this.source)}throw u}finally{nt(l),se(i)}}resolveInjectorInitializers(){const t=se(this),n=nt(void 0);try{const r=this.get(Jl.multi,Le,gt.Self);for(const i of r)i()}finally{se(t),nt(n)}}toString(){const t=[],n=this.records;for(const r of n.keys())t.push(S(r));return`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new ie(205,!1)}processProvider(t){let n=ki(t=P(t))?t:P(t&&t.provide);const r=function Zv(e){return tc(e)?ss(void 0,e.useValue):ss(uf(e),ka)}(t);if(ki(t)||!0!==t.multi)this.records.get(n);else{let i=this.records.get(n);i||(i=ss(void 0,ka,!0),i.factory=()=>Ht(i.multi),this.records.set(n,i)),n=t,i.multi.push(t)}this.records.set(n,r)}hydrate(t,n){return n.value===ka&&(n.value=Xv,n.value=n.factory()),"object"==typeof n.value&&n.value&&function Qv(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=P(t.providedIn);return"string"==typeof n?"any"===n||this.scopes.has(n):this.injectorDefTypes.has(n)}}function oc(e){const t=pn(e),n=null!==t?t.factory:nr(e);if(null!==n)return n;if(e instanceof _n)throw new ie(204,!1);if(e instanceof Function)return function qv(e){const t=e.length;if(t>0)throw bt(t,"?"),new ie(204,!1);const n=function it(e){const t=e&&(e[Vt]||e[Vn]);if(t){const n=function Xt(e){if(e.hasOwnProperty("name"))return e.name;const t=(""+e).match(/^function\s*([^\s(]+)/);return null===t?"":t[1]}(e);return console.warn(`DEPRECATED: DI is instantiating a token "${n}" that inherits its @Injectable decorator but does not provide one itself.\nThis will become an error in a future version of Angular. Please add @Injectable() to the "${n}" class.`),t}return null}(e);return null!==n?()=>n.factory(e):()=>new e}(e);throw new ie(204,!1)}function uf(e,t,n){let r;if(ki(e)){const i=P(e);return nr(i)||oc(i)}if(tc(e))r=()=>P(e.useValue);else if(function lf(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...Ht(e.deps||[]));else if(function af(e){return!(!e||!e.useExisting)}(e))r=()=>He(P(e.useExisting));else{const i=P(e&&(e.useClass||e.provide));if(!function Jv(e){return!!e.deps}(e))return nr(i)||oc(i);r=()=>new i(...Ht(e.deps))}return r}function ss(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function ic(e,t){for(const n of e)Array.isArray(n)?ic(n,t):n&&pe(n)?ic(n.\u0275providers,t):t(n)}class ty{}class df{}class ry{resolveComponentFactory(t){throw function ny(e){const t=Error(`No component factory found for ${S(e)}. Did you add it to @NgModule.entryComponents?`);return t.ngComponent=e,t}(t)}}let Zs=(()=>{class e{}return e.NULL=new ry,e})();function oy(){return as(Mn(),Ve())}function as(e,t){return new Js(Jn(e,t))}let Js=(()=>{class e{constructor(n){this.nativeElement=n}}return e.__NG_ELEMENT_ID__=oy,e})();function iy(e){return e instanceof Js?e.nativeElement:e}class hf{}let sy=(()=>{class e{}return e.__NG_ELEMENT_ID__=()=>function ay(){const e=Ve(),n=rr(Mn().index,e);return(Fn(n)?n:e)[11]}(),e})(),ly=(()=>{class e{}return e.\u0275prov=wt({token:e,providedIn:"root",factory:()=>null}),e})();class pf{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const cy=new pf("15.0.1"),sc={};function lc(e){return e.ngOriginalError}class Qs{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t);this._console.error("ERROR",t),n&&this._console.error("ORIGINAL ERROR",n)}_findOriginalError(t){let n=t&&lc(t);for(;n&&lc(n);)n=lc(n);return n||null}}function gf(e){return e.ownerDocument}function ni(e){return e instanceof Function?e():e}function vf(e,t,n){let r=e.length;for(;;){const i=e.indexOf(t,n);if(-1===i)return i;if(0===i||e.charCodeAt(i-1)<=32){const l=t.length;if(i+l===r||e.charCodeAt(i+l)<=32)return i}n=i+1}}const yf="ng-template";function Dy(e,t,n){let r=0;for(;rl?"":i[J+1].toLowerCase();const Oe=8&r?me:null;if(Oe&&-1!==vf(Oe,I,0)||2&r&&I!==me){if(Io(r))return!1;u=!0}}}}else{if(!u&&!Io(r)&&!Io(y))return!1;if(u&&Io(y))continue;u=!1,r=y|1&r}}return Io(r)||u}function Io(e){return 0==(1&e)}function _y(e,t,n,r){if(null===t)return-1;let i=0;if(r||!n){let l=!1;for(;i-1)for(n++;n0?'="'+p+'"':"")+"]"}else 8&r?i+="."+u:4&r&&(i+=" "+u);else""!==i&&!Io(u)&&(t+=Cf(l,i),i=""),r=u,l=l||!Io(r);n++}return""!==i&&(t+=Cf(l,i)),t}const Gt={};function _f(e){wf(At(),Ve(),lt()+e,!1)}function wf(e,t,n,r){if(!r)if(3==(3&t[2])){const l=e.preOrderCheckHooks;null!==l&&Vr(t,l,n)}else{const l=e.preOrderHooks;null!==l&&Mr(t,l,0,n)}qt(n)}function Mf(e,t=null,n=null,r){const i=Af(e,t,n,r);return i.resolveInjectorInitializers(),i}function Af(e,t=null,n=null,r,i=new Set){const l=[n||Le,Yv(e)];return r=r||("object"==typeof e?void 0:S(e)),new cf(l,t||Na(),r||null,i)}let Li=(()=>{class e{static create(n,r){if(Array.isArray(n))return Mf({name:""},r,n,"");{const i=n.name??"";return Mf({name:i},n.parent,n.providers,i)}}}return e.THROW_IF_NOT_FOUND=Nt,e.NULL=new nf,e.\u0275prov=wt({token:e,providedIn:"any",factory:()=>He(ef)}),e.__NG_ELEMENT_ID__=-1,e})();function us(e,t=gt.Default){const n=Ve();return null===n?He(e,t):ts(Mn(),n,P(e),t)}function kf(){throw new Error("invalid")}function $a(e,t){return e<<17|t<<2}function So(e){return e>>17&32767}function hc(e){return 2|e}function ri(e){return(131068&e)>>2}function pc(e,t){return-131069&e|t<<2}function gc(e){return 1|e}function Yf(e,t){const n=e.contentQueries;if(null!==n)for(let r=0;r22&&wf(e,t,22,!1),n(r,i)}finally{qt(l)}}function Ic(e,t,n){if(qn(t)){const i=t.directiveEnd;for(let l=t.directiveStart;l0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(u)!=p&&u.push(p),u.push(n,r,l)}}(e,t,r,ea(e,n,i.hostVars,Gt),i)}function w0(e,t,n){const r=Jn(t,e),i=Kf(n),l=e[10],u=Ua(e,Ha(e,i,null,n.onPush?32:16,r,t,l,l.createRenderer(r,n),null,null,null));e[t.index]=u}function Vo(e,t,n,r,i,l){const u=Jn(e,t);!function Oc(e,t,n,r,i,l,u){if(null==l)e.removeAttribute(t,i,n);else{const p=null==u?re(l):u(l,r||"",i);e.setAttribute(t,i,p,n)}}(t[11],u,l,e.value,n,r,i)}function E0(e,t,n,r,i,l){const u=l[t];if(null!==u){const p=r.setInput;for(let y=0;y0&&Rc(n)}}function Rc(e){for(let r=kl(e);null!==r;r=Nl(r))for(let i=10;i0&&Rc(l)}const n=e[1].components;if(null!==n)for(let r=0;r0&&Rc(i)}}function T0(e,t){const n=rr(t,e),r=n[1];(function x0(e,t){for(let n=t.length;n-1&&(Bl(t,r),ft(n,r))}this._attachedToViewContainer=!1}Sd(this._lView[1],this._lView)}onDestroy(t){Xf(this._lView[1],this._lView,null,t)}markForCheck(){Pc(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-65}reattach(){this._lView[2]|=64}detectChanges(){za(this._lView[1],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new ie(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function lv(e,t){Ws(e,t,t[11],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new ie(902,!1);this._appRef=t}}class O0 extends ta{constructor(t){super(t),this._view=t}detectChanges(){const t=this._view;za(t[1],t,t[8],!1)}checkNoChanges(){}get context(){return null}}class Nc extends Zs{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const n=$t(t);return new na(n,this.ngModule)}}function sh(e){const t=[];for(let n in e)e.hasOwnProperty(n)&&t.push({propName:e[n],templateName:n});return t}class P0{constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){r=vt(r);const i=this.injector.get(t,sc,r);return i!==sc||n===sc?i:this.parentInjector.get(t,n,r)}}class na extends df{constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function Ay(e){return e.map(My).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}get inputs(){return sh(this.componentDef.inputs)}get outputs(){return sh(this.componentDef.outputs)}create(t,n,r,i){let l=(i=i||this.ngModule)instanceof Ni?i:i?.injector;l&&null!==this.componentDef.getStandaloneInjector&&(l=this.componentDef.getStandaloneInjector(l)||l);const u=l?new P0(t,l):t,p=u.get(hf,null);if(null===p)throw new ie(407,!1);const y=u.get(ly,null),I=p.createRenderer(null,this.componentDef),V=this.componentDef.selectors[0][0]||"div",J=r?function c0(e,t,n){return e.selectRootElement(t,n===ee.ShadowDom)}(I,r,this.componentDef.encapsulation):$l(I,V,function R0(e){const t=e.toLowerCase();return"svg"===t?"svg":"math"===t?"math":null}(V)),me=this.componentDef.onPush?288:272,Oe=Ac(0,null,null,1,0,null,null,null,null,null),Ge=Ha(null,Oe,null,me,null,null,p,I,y,u,null);let tt,ct;Ki(Ge);try{const mt=this.componentDef;let xt,Ze=null;mt.findHostDirectiveDefs?(xt=[],Ze=new Map,mt.findHostDirectiveDefs(mt,xt,Ze),xt.push(mt)):xt=[mt];const Lt=function N0(e,t){const n=e[1];return e[22]=t,ds(n,22,2,"#host",null)}(Ge,J),In=function L0(e,t,n,r,i,l,u,p){const y=i[1];!function $0(e,t,n,r){for(const i of e)t.mergedAttrs=ao(t.mergedAttrs,i.hostAttrs);null!==t.mergedAttrs&&(Ga(t,t.mergedAttrs,!0),null!==n&&$d(r,n,t))}(r,e,t,u);const I=l.createRenderer(t,n),V=Ha(i,Kf(n),null,n.onPush?32:16,i[e.index],e,l,I,p||null,null,null);return y.firstCreatePass&&xc(y,e,r.length-1),Ua(i,V),i[e.index]=V}(Lt,J,mt,xt,Ge,p,I);ct=Kr(Oe,22),J&&function V0(e,t,n,r){if(r)pi(e,n,["ng-version",cy.full]);else{const{attrs:i,classes:l}=function Ty(e){const t=[],n=[];let r=1,i=2;for(;r0&&Ld(e,n,l.join(" "))}}(I,mt,J,r),void 0!==n&&function H0(e,t,n){const r=e.projection=[];for(let i=0;i=0;r--){const i=e[r];i.hostVars=t+=i.hostVars,i.hostAttrs=ao(i.hostAttrs,n=ao(n,i.hostAttrs))}}(r)}function $c(e){return e===Se?{}:e===Le?[]:e}function z0(e,t){const n=e.viewQuery;e.viewQuery=n?(r,i)=>{t(r,i),n(r,i)}:t}function G0(e,t){const n=e.contentQueries;e.contentQueries=n?(r,i,l)=>{t(r,i,l),n(r,i,l)}:t}function Y0(e,t){const n=e.hostBindings;e.hostBindings=n?(r,i)=>{t(r,i),n(r,i)}:t}let Wa=null;function $i(){if(!Wa){const e=Ct.Symbol;if(e&&e.iterator)Wa=e.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let n=0;nu(Sn(Lt[r.index])):r.index;let Ze=null;if(!u&&p&&(Ze=function sD(e,t,n,r){const i=e.cleanup;if(null!=i)for(let l=0;ly?p[y]:null}"string"==typeof u&&(l+=2)}return null}(e,t,i,r.index)),null!==Ze)(Ze.__ngLastListenerFn__||Ze).__ngNextListenerFn__=l,Ze.__ngLastListenerFn__=l,me=!1;else{l=Ah(r,t,V,l,!1);const Lt=n.listen(ct,i,l);J.push(l,Lt),I&&I.push(i,xt,mt,mt+1)}}else l=Ah(r,t,V,l,!1);const Oe=r.outputs;let Ge;if(me&&null!==Oe&&(Ge=Oe[i])){const tt=Ge.length;if(tt)for(let ct=0;ct-1?rr(e.index,t):t);let y=Mh(t,0,r,u),I=l.__ngNextListenerFn__;for(;I;)y=Mh(t,0,I,u)&&y,I=I.__ngNextListenerFn__;return i&&!1===y&&(u.preventDefault(),u.returnValue=!1),y}}function Th(e=1){return function $e(e){return(a.lFrame.contextLView=function Xe(e,t){for(;e>0;)t=t[15],e--;return t}(e,a.lFrame.contextLView))[8]}(e)}function aD(e,t){let n=null;const r=function wy(e){const t=e.attrs;if(null!=t){const n=t.indexOf(5);if(0==(1&n))return t[n+1]}return null}(e);for(let i=0;i=0}const ir={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Hh(e){return e.substring(ir.key,ir.keyEnd)}function jh(e,t){const n=ir.textEnd;return n===t?-1:(t=ir.keyEnd=function pD(e,t,n){for(;t32;)t++;return t}(e,ir.key=t,n),Cs(e,t,n))}function Cs(e,t,n){for(;t=0;n=jh(t,n))Cr(e,Hh(t),!0)}function Mo(e,t,n,r){const i=Ve(),l=At(),u=Br(2);l.firstUpdatePass&&Xh(l,e,u,r),t!==Gt&&wr(i,u,t)&&Zh(l,l.data[lt()],i,i[11],e,i[u+1]=function ED(e,t){return null==e||("string"==typeof t?e+=t:"object"==typeof e&&(e=S(wi(e)))),e}(t,n),r,u)}function Kh(e,t){return t>=e.expandoStartIndex}function Xh(e,t,n,r){const i=e.data;if(null===i[n+1]){const l=i[lt()],u=Kh(e,n);Qh(l,r)&&null===t&&!u&&(t=!1),t=function yD(e,t,n,r){const i=function Mi(e){const t=a.lFrame.currentDirectiveIndex;return-1===t?null:e[t]}(e);let l=r?t.residualClasses:t.residualStyles;if(null===i)0===(r?t.classBindings:t.styleBindings)&&(n=ia(n=Jc(null,e,t,n,r),t.attrs,r),l=null);else{const u=t.directiveStylingLast;if(-1===u||e[u]!==i)if(n=Jc(i,e,t,n,r),null===l){let y=function DD(e,t,n){const r=n?t.classBindings:t.styleBindings;if(0!==ri(r))return e[So(r)]}(e,t,r);void 0!==y&&Array.isArray(y)&&(y=Jc(null,e,t,y[1],r),y=ia(y,t.attrs,r),function bD(e,t,n,r){e[So(n?t.classBindings:t.styleBindings)]=r}(e,t,r,y))}else l=function CD(e,t,n){let r;const i=t.directiveEnd;for(let l=1+t.directiveStylingLast;l0)&&(I=!0)}else V=n;if(i)if(0!==y){const me=So(e[p+1]);e[r+1]=$a(me,p),0!==me&&(e[me+1]=pc(e[me+1],r)),e[p+1]=function Ky(e,t){return 131071&e|t<<17}(e[p+1],r)}else e[r+1]=$a(p,0),0!==p&&(e[p+1]=pc(e[p+1],r)),p=r;else e[r+1]=$a(y,0),0===p?p=r:e[y+1]=pc(e[y+1],r),y=r;I&&(e[r+1]=hc(e[r+1])),Vh(e,V,r,!0),Vh(e,V,r,!1),function cD(e,t,n,r,i){const l=i?e.residualClasses:e.residualStyles;null!=l&&"string"==typeof t&&_i(l,t)>=0&&(n[r+1]=gc(n[r+1]))}(t,V,e,r,l),u=$a(p,y),l?t.classBindings=u:t.styleBindings=u}(i,l,t,n,u,r)}}function Jc(e,t,n,r,i){let l=null;const u=n.directiveEnd;let p=n.directiveStylingLast;for(-1===p?p=n.directiveStart:p++;p0;){const y=e[i],I=Array.isArray(y),V=I?y[1]:y,J=null===V;let me=n[i+1];me===Gt&&(me=J?Le:void 0);let Oe=J?Ri(me,r):V===r?me:void 0;if(I&&!Ja(Oe)&&(Oe=Ri(y,r)),Ja(Oe)&&(p=Oe,u))return p;const Ge=e[i+1];i=u?So(Ge):ri(Ge)}if(null!==t){let y=l?t.residualClasses:t.residualStyles;null!=y&&(p=Ri(y,r))}return p}function Ja(e){return void 0!==e}function Qh(e,t){return 0!=(e.flags&(t?8:16))}function ep(e,t=""){const n=Ve(),r=At(),i=e+22,l=r.firstCreatePass?ds(r,i,1,t,null):r.data[i],u=n[i]=function Ll(e,t){return e.createText(t)}(n[11],t);xa(r,n,u,l),br(l,!1)}function Qc(e){return Qa("",e,""),Qc}function Qa(e,t,n){const r=Ve(),i=hs(r,e,t,n);return i!==Gt&&oi(r,lt(),i),Qa}function eu(e,t,n,r,i){const l=Ve(),u=ps(l,e,t,n,r,i);return u!==Gt&&oi(l,lt(),u),eu}function tu(e,t,n,r,i,l,u){const p=Ve(),y=function gs(e,t,n,r,i,l,u,p){const I=Ka(e,oo(),n,i,u);return Br(3),I?t+re(n)+r+re(i)+l+re(u)+p:Gt}(p,e,t,n,r,i,l,u);return y!==Gt&&oi(p,lt(),y),tu}const Vi=void 0;var zD=["en",[["a","p"],["AM","PM"],Vi],[["AM","PM"],Vi,Vi],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],Vi,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],Vi,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",Vi,"{1} 'at' {0}",Vi],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",function UD(e){const n=Math.floor(Math.abs(e)),r=e.toString().replace(/^[^.]*\.?/,"").length;return 1===n&&0===r?1:5}];let _s={};function nu(e){const t=function GD(e){return e.toLowerCase().replace(/_/g,"-")}(e);let n=Dp(t);if(n)return n;const r=t.split("-")[0];if(n=Dp(r),n)return n;if("en"===r)return zD;throw new ie(701,!1)}function yp(e){return nu(e)[Ot.PluralCase]}function Dp(e){return e in _s||(_s[e]=Ct.ng&&Ct.ng.common&&Ct.ng.common.locales&&Ct.ng.common.locales[e]),_s[e]}var Ot=(()=>((Ot=Ot||{})[Ot.LocaleId=0]="LocaleId",Ot[Ot.DayPeriodsFormat=1]="DayPeriodsFormat",Ot[Ot.DayPeriodsStandalone=2]="DayPeriodsStandalone",Ot[Ot.DaysFormat=3]="DaysFormat",Ot[Ot.DaysStandalone=4]="DaysStandalone",Ot[Ot.MonthsFormat=5]="MonthsFormat",Ot[Ot.MonthsStandalone=6]="MonthsStandalone",Ot[Ot.Eras=7]="Eras",Ot[Ot.FirstDayOfWeek=8]="FirstDayOfWeek",Ot[Ot.WeekendRange=9]="WeekendRange",Ot[Ot.DateFormat=10]="DateFormat",Ot[Ot.TimeFormat=11]="TimeFormat",Ot[Ot.DateTimeFormat=12]="DateTimeFormat",Ot[Ot.NumberSymbols=13]="NumberSymbols",Ot[Ot.NumberFormats=14]="NumberFormats",Ot[Ot.CurrencyCode=15]="CurrencyCode",Ot[Ot.CurrencySymbol=16]="CurrencySymbol",Ot[Ot.CurrencyName=17]="CurrencyName",Ot[Ot.Currencies=18]="Currencies",Ot[Ot.Directionality=19]="Directionality",Ot[Ot.PluralCase=20]="PluralCase",Ot[Ot.ExtraData=21]="ExtraData",Ot))();const ws="en-US";let bp=ws;function iu(e,t,n,r,i){if(e=P(e),Array.isArray(e))for(let l=0;l>20;if(ki(e)||!e.multi){const Oe=new fi(y,i,us),Ge=au(p,t,i?V:V+me,J);-1===Ge?(es(Ji(I,u),l,p),su(l,e,t.length),t.push(p),I.directiveStart++,I.directiveEnd++,i&&(I.providerIndexes+=1048576),n.push(Oe),u.push(Oe)):(n[Ge]=Oe,u[Ge]=Oe)}else{const Oe=au(p,t,V+me,J),Ge=au(p,t,V,V+me),tt=Oe>=0&&n[Oe],ct=Ge>=0&&n[Ge];if(i&&!ct||!i&&!tt){es(Ji(I,u),l,p);const mt=function jb(e,t,n,r,i){const l=new fi(e,n,us);return l.multi=[],l.index=t,l.componentProviders=0,Gp(l,i,r&&!n),l}(i?Hb:Vb,n.length,i,r,y);!i&&ct&&(n[Ge].providerFactory=mt),su(l,e,t.length,0),t.push(p),I.directiveStart++,I.directiveEnd++,i&&(I.providerIndexes+=1048576),n.push(mt),u.push(mt)}else su(l,e,Oe>-1?Oe:Ge,Gp(n[i?Ge:Oe],y,!i&&r));!i&&r&&ct&&n[Ge].componentProviders++}}}function su(e,t,n,r){const i=ki(t),l=function Kv(e){return!!e.useClass}(t);if(i||l){const y=(l?P(t.useClass):t).prototype.ngOnDestroy;if(y){const I=e.destroyHooks||(e.destroyHooks=[]);if(!i&&t.multi){const V=I.indexOf(n);-1===V?I.push(n,[r,y]):I[V+1].push(r,y)}else I.push(n,y)}}}function Gp(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function au(e,t,n,r){for(let i=n;i{n.providersResolver=(r,i)=>function Bb(e,t,n){const r=At();if(r.firstCreatePass){const i=Gn(e);iu(n,r.data,r.blueprint,i,!0),iu(t,r.data,r.blueprint,i,!1)}}(r,i?i(e):e,t)}}class Es{}class Wp{}function Ub(e,t){return new Kp(e,t??null)}class Kp extends Es{constructor(t,n){super(),this._parent=n,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Nc(this);const r=On(t);this._bootstrapComponents=ni(r.bootstrap),this._r3Injector=Af(t,n,[{provide:Es,useValue:this},{provide:Zs,useValue:this.componentFactoryResolver}],S(t),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(t)}get injector(){return this._r3Injector}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class cu extends Wp{constructor(t){super(),this.moduleType=t}create(t){return new Kp(this.moduleType,t)}}class zb extends Es{constructor(t,n,r){super(),this.componentFactoryResolver=new Nc(this),this.instance=null;const i=new cf([...t,{provide:Es,useValue:this},{provide:Zs,useValue:this.componentFactoryResolver}],n||Na(),r,new Set(["environment"]));this.injector=i,i.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}}function uu(e,t,n=null){return new zb(e,t,n).injector}let Gb=(()=>{class e{constructor(n){this._injector=n,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n.id)){const r=rf(0,n.type),i=r.length>0?uu([r],this._injector,`Standalone[${n.type.name}]`):null;this.cachedInjectors.set(n.id,i)}return this.cachedInjectors.get(n.id)}ngOnDestroy(){try{for(const n of this.cachedInjectors.values())null!==n&&n.destroy()}finally{this.cachedInjectors.clear()}}}return e.\u0275prov=wt({token:e,providedIn:"environment",factory:()=>new e(He(Ni))}),e})();function Xp(e){e.getStandaloneInjector=t=>t.get(Gb).getOrCreateStandaloneInjector(e)}function ng(e,t,n,r){return sg(Ve(),lr(),e,t,n,r)}function rg(e,t,n,r,i){return ag(Ve(),lr(),e,t,n,r,i)}function og(e,t,n,r,i,l){return lg(Ve(),lr(),e,t,n,r,i,l)}function ig(e,t,n,r,i,l,u,p,y){const I=lr()+e,V=Ve(),J=function co(e,t,n,r,i,l){const u=Bi(e,t,n,r);return Bi(e,t+2,i,l)||u}(V,I,n,r,i,l);return Bi(V,I+4,u,p)||J?Ho(V,I+6,y?t.call(y,n,r,i,l,u,p):t(n,r,i,l,u,p)):function oa(e,t){return e[t]}(V,I+6)}function da(e,t){const n=e[t];return n===Gt?void 0:n}function sg(e,t,n,r,i,l){const u=t+n;return wr(e,u,i)?Ho(e,u+1,l?r.call(l,i):r(i)):da(e,u+1)}function ag(e,t,n,r,i,l,u){const p=t+n;return Bi(e,p,i,l)?Ho(e,p+2,u?r.call(u,i,l):r(i,l)):da(e,p+2)}function lg(e,t,n,r,i,l,u,p){const y=t+n;return Ka(e,y,i,l,u)?Ho(e,y+3,p?r.call(p,i,l,u):r(i,l,u)):da(e,y+3)}function dg(e,t){const n=At();let r;const i=e+22;n.firstCreatePass?(r=function sC(e,t){if(t)for(let n=t.length-1;n>=0;n--){const r=t[n];if(e===r.name)return r}}(t,n.pipeRegistry),n.data[i]=r,r.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(i,r.onDestroy)):r=n.data[i];const l=r.factory||(r.factory=nr(r.type)),u=nt(us);try{const p=Zi(!1),y=l();return Zi(p),function rD(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}(n,Ve(),i,y),y}finally{nt(u)}}function fg(e,t,n){const r=e+22,i=Ve(),l=no(i,r);return fa(i,r)?sg(i,lr(),t,l.transform,n,l):l.transform(n)}function hg(e,t,n,r){const i=e+22,l=Ve(),u=no(l,i);return fa(l,i)?ag(l,lr(),t,u.transform,n,r,u):u.transform(n,r)}function pg(e,t,n,r,i){const l=e+22,u=Ve(),p=no(u,l);return fa(u,l)?lg(u,lr(),t,p.transform,n,r,i,p):p.transform(n,r,i)}function fa(e,t){return e[1].data[t].pure}function fu(e){return t=>{setTimeout(e,void 0,t)}}const zo=class cC extends o.x{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){let i=t,l=n||(()=>null),u=r;if(t&&"object"==typeof t){const y=t;i=y.next?.bind(y),l=y.error?.bind(y),u=y.complete?.bind(y)}this.__isAsync&&(l=fu(l),i&&(i=fu(i)),u&&(u=fu(u)));const p=super.subscribe({next:i,error:l,complete:u});return t instanceof x.w0&&t.add(p),p}};function uC(){return this._results[$i()]()}class hu{constructor(t=!1){this._emitDistinctChangesOnly=t,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const n=$i(),r=hu.prototype;r[n]||(r[n]=uC)}get changes(){return this._changes||(this._changes=new zo)}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){const r=this;r.dirty=!1;const i=z(t);(this._changesDetected=!function $(e,t,n){if(e.length!==t.length)return!1;for(let r=0;r{class e{}return e.__NG_ELEMENT_ID__=hC,e})();const dC=ha,fC=class extends dC{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}createEmbeddedView(t,n){const r=this._declarationTContainer.tViews,i=Ha(this._declarationLView,r,t,16,null,r.declTNode,null,null,null,null,n||null);i[17]=this._declarationLView[this._declarationTContainer.index];const u=this._declarationLView[19];return null!==u&&(i[19]=u.createEmbeddedView(r)),Ec(r,i,t),new ta(i)}};function hC(){return ol(Mn(),Ve())}function ol(e,t){return 4&e.type?new fC(t,e,as(e,t)):null}let il=(()=>{class e{}return e.__NG_ELEMENT_ID__=pC,e})();function pC(){return vg(Mn(),Ve())}const gC=il,gg=class extends gC{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return as(this._hostTNode,this._hostLView)}get injector(){return new Ti(this._hostTNode,this._hostLView)}get parentInjector(){const t=Qi(this._hostTNode,this._hostLView);if(ba(t)){const n=gi(t,this._hostLView),r=Zo(t);return new Ti(n[1].data[r+8],n)}return new Ti(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=mg(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-10}createEmbeddedView(t,n,r){let i,l;"number"==typeof r?i=r:null!=r&&(i=r.index,l=r.injector);const u=t.createEmbeddedView(n||{},l);return this.insert(u,i),u}createComponent(t,n,r,i,l){const u=t&&!function m(e){return"function"==typeof e}(t);let p;if(u)p=n;else{const J=n||{};p=J.index,r=J.injector,i=J.projectableNodes,l=J.environmentInjector||J.ngModuleRef}const y=u?t:new na($t(t)),I=r||this.parentInjector;if(!l&&null==y.ngModule){const me=(u?I:this.parentInjector).get(Ni,null);me&&(l=me)}const V=y.create(I,i,void 0,l);return this.insert(V.hostView,p),V}insert(t,n){const r=t._lView,i=r[1];if(function Ui(e){return zn(e[3])}(r)){const V=this.indexOf(t);if(-1!==V)this.detach(V);else{const J=r[3],me=new gg(J,J[6],J[3]);me.detach(me.indexOf(t))}}const l=this._adjustIndex(n),u=this._lContainer;!function uv(e,t,n,r){const i=10+r,l=n.length;r>0&&(n[i-1][4]=t),r0)r.push(u[p/2]);else{const I=l[p+1],V=t[-y];for(let J=10;J{class e{constructor(n){this.appInits=n,this.resolve=al,this.reject=al,this.initialized=!1,this.done=!1,this.donePromise=new Promise((r,i)=>{this.resolve=r,this.reject=i})}runInitializers(){if(this.initialized)return;const n=[],r=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let i=0;i{l.subscribe({complete:p,error:y})});n.push(u)}}Promise.all(n).then(()=>{r()}).catch(i=>{this.reject(i)}),0===n.length&&r(),this.initialized=!0}}return e.\u0275fac=function(n){return new(n||e)(He(Yg,8))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const Wg=new _n("AppId",{providedIn:"root",factory:function Kg(){return`${Eu()}${Eu()}${Eu()}`}});function Eu(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const Xg=new _n("Platform Initializer"),UC=new _n("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),qg=new _n("appBootstrapListener");let zC=(()=>{class e{log(n){console.log(n)}warn(n){console.warn(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();const cl=new _n("LocaleId",{providedIn:"root",factory:()=>pt(cl,gt.Optional|gt.SkipSelf)||function GC(){return typeof $localize<"u"&&$localize.locale||ws}()}),YC=new _n("DefaultCurrencyCode",{providedIn:"root",factory:()=>"USD"});class WC{constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}}let KC=(()=>{class e{compileModuleSync(n){return new cu(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){const r=this.compileModuleSync(n),l=ni(On(n).declarations).reduce((u,p)=>{const y=$t(p);return y&&u.push(new na(y)),u},[]);return new WC(r,l)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const ZC=(()=>Promise.resolve(0))();function Iu(e){typeof Zone>"u"?ZC.then(()=>{e&&e.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",e)}class uo{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new zo(!1),this.onMicrotaskEmpty=new zo(!1),this.onStable=new zo(!1),this.onError=new zo(!1),typeof Zone>"u")throw new ie(908,!1);Zone.assertZonePatched();const i=this;i._nesting=0,i._outer=i._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(i._inner=i._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(i._inner=i._inner.fork(Zone.longStackTraceZoneSpec)),i.shouldCoalesceEventChangeDetection=!r&&n,i.shouldCoalesceRunChangeDetection=r,i.lastRequestAnimationFrameId=-1,i.nativeRequestAnimationFrame=function JC(){let e=Ct.requestAnimationFrame,t=Ct.cancelAnimationFrame;if(typeof Zone<"u"&&e&&t){const n=e[Zone.__symbol__("OriginalDelegate")];n&&(e=n);const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r)}return{nativeRequestAnimationFrame:e,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function t_(e){const t=()=>{!function e_(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(Ct,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,Mu(e),e.isCheckStableRunning=!0,Su(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),Mu(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,i,l,u,p)=>{try{return Qg(e),n.invokeTask(i,l,u,p)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===l.type||e.shouldCoalesceRunChangeDetection)&&t(),em(e)}},onInvoke:(n,r,i,l,u,p,y)=>{try{return Qg(e),n.invoke(i,l,u,p,y)}finally{e.shouldCoalesceRunChangeDetection&&t(),em(e)}},onHasTask:(n,r,i,l)=>{n.hasTask(i,l),r===i&&("microTask"==l.change?(e._hasPendingMicrotasks=l.microTask,Mu(e),Su(e)):"macroTask"==l.change&&(e.hasPendingMacrotasks=l.macroTask))},onHandleError:(n,r,i,l)=>(n.handleError(i,l),e.runOutsideAngular(()=>e.onError.emit(l)),!1)})}(i)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!uo.isInAngularZone())throw new ie(909,!1)}static assertNotInAngularZone(){if(uo.isInAngularZone())throw new ie(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,i){const l=this._inner,u=l.scheduleEventTask("NgZoneEvent: "+i,t,QC,al,al);try{return l.runTask(u,n,r)}finally{l.cancelTask(u)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const QC={};function Su(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function Mu(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function Qg(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function em(e){e._nesting--,Su(e)}class n_{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new zo,this.onMicrotaskEmpty=new zo,this.onStable=new zo,this.onError=new zo}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,i){return t.apply(n,r)}}const tm=new _n(""),nm=new _n("");let Au,r_=(()=>{class e{constructor(n,r,i){this._ngZone=n,this.registry=r,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,Au||(function o_(e){Au=e}(i),i.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{uo.assertNotInAngularZone(),Iu(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())Iu(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,i){let l=-1;r&&r>0&&(l=setTimeout(()=>{this._callbacks=this._callbacks.filter(u=>u.timeoutId!==l),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:l,updateCb:i})}whenStable(n,r,i){if(i&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,i),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,i){return[]}}return e.\u0275fac=function(n){return new(n||e)(He(uo),He(rm),He(nm))},e.\u0275prov=wt({token:e,factory:e.\u0275fac}),e})(),rm=(()=>{class e{constructor(){this._applications=new Map}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return Au?.findTestabilityInTree(this,n,r)??null}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})(),Si=null;const om=new _n("AllowMultipleToken"),Tu=new _n("PlatformDestroyListeners");class a_{constructor(t,n){this.name=t,this.token=n}}function sm(e,t,n=[]){const r=`Platform: ${t}`,i=new _n(r);return(l=[])=>{let u=xu();if(!u||u.injector.get(om,!1)){const p=[...n,...l,{provide:i,useValue:!0}];e?e(p):function l_(e){if(Si&&!Si.get(om,!1))throw new ie(400,!1);Si=e;const t=e.get(lm);(function im(e){const t=e.get(Xg,null);t&&t.forEach(n=>n())})(e)}(function am(e=[],t){return Li.create({name:t,providers:[{provide:nc,useValue:"platform"},{provide:Tu,useValue:new Set([()=>Si=null])},...e]})}(p,r))}return function u_(e){const t=xu();if(!t)throw new ie(401,!1);return t}()}}function xu(){return Si?.get(lm)??null}let lm=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const i=function um(e,t){let n;return n="noop"===e?new n_:("zone.js"===e?void 0:e)||new uo(t),n}(r?.ngZone,function cm(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!(!e||!e.ngZoneEventCoalescing)||!1,shouldCoalesceRunChangeDetection:!(!e||!e.ngZoneRunCoalescing)||!1}}(r)),l=[{provide:uo,useValue:i}];return i.run(()=>{const u=Li.create({providers:l,parent:this.injector,name:n.moduleType.name}),p=n.create(u),y=p.injector.get(Qs,null);if(!y)throw new ie(402,!1);return i.runOutsideAngular(()=>{const I=i.onError.subscribe({next:V=>{y.handleError(V)}});p.onDestroy(()=>{dl(this._modules,p),I.unsubscribe()})}),function dm(e,t,n){try{const r=n();return Wc(r)?r.catch(i=>{throw t.runOutsideAngular(()=>e.handleError(i)),i}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(y,i,()=>{const I=p.injector.get(ll);return I.runInitializers(),I.donePromise.then(()=>(function Cp(e){et(e,"Expected localeId to be defined"),"string"==typeof e&&(bp=e.toLowerCase().replace(/_/g,"-"))}(p.injector.get(cl,ws)||ws),this._moduleDoBootstrap(p),p))})})}bootstrapModule(n,r=[]){const i=fm({},r);return function i_(e,t,n){const r=new cu(n);return Promise.resolve(r)}(0,0,n).then(l=>this.bootstrapModuleFactory(l,i))}_moduleDoBootstrap(n){const r=n.injector.get(ul);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(i=>r.bootstrap(i));else{if(!n.instance.ngDoBootstrap)throw new ie(403,!1);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new ie(404,!1);this._modules.slice().forEach(r=>r.destroy()),this._destroyListeners.forEach(r=>r());const n=this._injector.get(Tu,null);n&&(n.forEach(r=>r()),n.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}}return e.\u0275fac=function(n){return new(n||e)(He(Li))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();function fm(e,t){return Array.isArray(t)?t.reduce(fm,e):{...e,...t}}let ul=(()=>{class e{constructor(n,r,i){this._zone=n,this._injector=r,this._exceptionHandler=i,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this._destroyed=!1,this._destroyListeners=[],this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const l=new N.y(p=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{p.next(this._stable),p.complete()})}),u=new N.y(p=>{let y;this._zone.runOutsideAngular(()=>{y=this._zone.onStable.subscribe(()=>{uo.assertNotInAngularZone(),Iu(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,p.next(!0))})})});const I=this._zone.onUnstable.subscribe(()=>{uo.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{p.next(!1)}))});return()=>{y.unsubscribe(),I.unsubscribe()}});this.isStable=function _(...e){const t=(0,M.yG)(e),n=(0,M._6)(e,1/0),r=e;return r.length?1===r.length?(0,R.Xf)(r[0]):(0,ge.J)(n)((0,U.D)(r,t)):W.E}(l,u.pipe((0,Y.B)()))}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(n,r){const i=n instanceof df;if(!this._injector.get(ll).done)throw!i&&Un(n),new ie(405,false);let u;u=i?n:this._injector.get(Zs).resolveComponentFactory(n),this.componentTypes.push(u.componentType);const p=function s_(e){return e.isBoundToModule}(u)?void 0:this._injector.get(Es),I=u.create(Li.NULL,[],r||u.selector,p),V=I.location.nativeElement,J=I.injector.get(tm,null);return J?.registerApplication(V),I.onDestroy(()=>{this.detachView(I.hostView),dl(this.components,I),J?.unregisterApplication(V)}),this._loadComponent(I),I}tick(){if(this._runningTick)throw new ie(101,!1);try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;dl(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n),this._injector.get(qg,[]).concat(this._bootstrapListeners).forEach(i=>i(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>dl(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new ie(406,!1);const n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return e.\u0275fac=function(n){return new(n||e)(He(uo),He(Ni),He(Qs))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();function dl(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}function f_(){}let h_=(()=>{class e{}return e.__NG_ELEMENT_ID__=p_,e})();function p_(e){return function g_(e,t,n){if(dr(e)&&!n){const r=rr(e.index,t);return new ta(r,r)}return 47&e.type?new ta(t[16],t):null}(Mn(),Ve(),16==(16&e))}class vm{constructor(){}supports(t){return ra(t)}create(t){return new C_(t)}}const b_=(e,t)=>t;class C_{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||b_}forEachItem(t){let n;for(n=this._itHead;null!==n;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,i=0,l=null;for(;n||r;){const u=!r||n&&n.currentIndex{u=this._trackByFn(i,p),null!==n&&Object.is(n.trackById,u)?(r&&(n=this._verifyReinsertion(n,p,u,i)),Object.is(n.item,p)||this._addIdentityChange(n,p)):(n=this._mismatch(n,p,u,i),r=!0),n=n._next,i++}),this.length=i;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,i){let l;return null===t?l=this._itTail:(l=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,l,i)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(r,i))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,l,i)):t=this._addAfter(new __(n,r),l,i),t}_verifyReinsertion(t,n,r,i){let l=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null);return null!==l?t=this._reinsertAfter(l,t._prev,i):t.currentIndex!=i&&(t.currentIndex=i,this._addToMoves(t,i)),t}_truncate(t){for(;null!==t;){const n=t._next;this._addToRemovals(this._unlink(t)),t=n}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const i=t._prevRemoved,l=t._nextRemoved;return null===i?this._removalsHead=l:i._nextRemoved=l,null===l?this._removalsTail=i:l._prevRemoved=i,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){const i=null===n?this._itHead:n._next;return t._next=i,t._prev=n,null===i?this._itTail=t:i._prev=t,null===n?this._itHead=t:n._next=t,null===this._linkedRecords&&(this._linkedRecords=new ym),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const n=t._prev,r=t._next;return null===n?this._itHead=r:n._next=r,null===r?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new ym),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class __{constructor(t,n){this.item=t,this.trackById=n,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class w_{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;null!==r;r=r._nextDup)if((null===n||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){const n=t._prevDup,r=t._nextDup;return null===n?this._head=r:n._nextDup=r,null===r?this._tail=n:r._prevDup=n,null===this._head}}class ym{constructor(){this.map=new Map}put(t){const n=t.trackById;let r=this.map.get(n);r||(r=new w_,this.map.set(n,r)),r.add(t)}get(t,n){const i=this.map.get(t);return i?i.get(t,n):null}remove(t){const n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function Dm(e,t,n){const r=e.previousIndex;if(null===r)return r;let i=0;return n&&r{if(n&&n.key===i)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{const l=this._getOrCreateRecordForKey(i,r);n=this._insertBeforeOrAppend(n,l)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){const r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){const i=this._records.get(t);this._maybeAddToChanges(i,n);const l=i._prev,u=i._next;return l&&(l._next=u),u&&(u._prev=l),i._next=null,i._prev=null,i}const r=new I_(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}}class I_{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function Cm(){return new ku([new vm])}let ku=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(null!=r){const i=r.factories.slice();n=n.concat(i)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||Cm()),deps:[[e,new js,new Hs]]}}find(n){const r=this.factories.find(i=>i.supports(n));if(null!=r)return r;throw new ie(901,!1)}}return e.\u0275prov=wt({token:e,providedIn:"root",factory:Cm}),e})();function _m(){return new Nu([new bm])}let Nu=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(r){const i=r.factories.slice();n=n.concat(i)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||_m()),deps:[[e,new js,new Hs]]}}find(n){const r=this.factories.find(i=>i.supports(n));if(r)return r;throw new ie(901,!1)}}return e.\u0275prov=wt({token:e,providedIn:"root",factory:_m}),e})();const A_=sm(null,"core",[]);let T_=(()=>{class e{constructor(n){}}return e.\u0275fac=function(n){return new(n||e)(He(ul))},e.\u0275mod=vn({type:e}),e.\u0275inj=Kt({}),e})();function x_(e){return"boolean"==typeof e?e:null!=e&&"false"!==e}},433:(Qe,Fe,w)=>{"use strict";w.d(Fe,{u5:()=>wo,JU:()=>E,a5:()=>Vt,JJ:()=>gt,JL:()=>Yt,F:()=>le,On:()=>fo,c5:()=>Lr,Q7:()=>Wr,_Y:()=>ho});var o=w(8274),x=w(6895),N=w(2076),ge=w(9751),R=w(4742),W=w(8421),M=w(3269),U=w(5403),_=w(3268),Y=w(1810),Z=w(4004);let S=(()=>{class C{constructor(c,a){this._renderer=c,this._elementRef=a,this.onChange=g=>{},this.onTouched=()=>{}}setProperty(c,a){this._renderer.setProperty(this._elementRef.nativeElement,c,a)}registerOnTouched(c){this.onTouched=c}registerOnChange(c){this.onChange=c}setDisabledState(c){this.setProperty("disabled",c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(o.Qsj),o.Y36(o.SBq))},C.\u0275dir=o.lG2({type:C}),C})(),B=(()=>{class C extends S{}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,features:[o.qOj]}),C})();const E=new o.OlP("NgValueAccessor"),K={provide:E,useExisting:(0,o.Gpc)(()=>Te),multi:!0},ke=new o.OlP("CompositionEventMode");let Te=(()=>{class C extends S{constructor(c,a,g){super(c,a),this._compositionMode=g,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function pe(){const C=(0,x.q)()?(0,x.q)().getUserAgent():"";return/android (\d+)/.test(C.toLowerCase())}())}writeValue(c){this.setProperty("value",c??"")}_handleInput(c){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(c)}_compositionStart(){this._composing=!0}_compositionEnd(c){this._composing=!1,this._compositionMode&&this.onChange(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(o.Qsj),o.Y36(o.SBq),o.Y36(ke,8))},C.\u0275dir=o.lG2({type:C,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(c,a){1&c&&o.NdJ("input",function(L){return a._handleInput(L.target.value)})("blur",function(){return a.onTouched()})("compositionstart",function(){return a._compositionStart()})("compositionend",function(L){return a._compositionEnd(L.target.value)})},features:[o._Bn([K]),o.qOj]}),C})();function Be(C){return null==C||("string"==typeof C||Array.isArray(C))&&0===C.length}const oe=new o.OlP("NgValidators"),be=new o.OlP("NgAsyncValidators");function O(C){return Be(C.value)?{required:!0}:null}function de(C){return null}function ne(C){return null!=C}function Ee(C){return(0,o.QGY)(C)?(0,N.D)(C):C}function Ce(C){let s={};return C.forEach(c=>{s=null!=c?{...s,...c}:s}),0===Object.keys(s).length?null:s}function ze(C,s){return s.map(c=>c(C))}function et(C){return C.map(s=>function dt(C){return!C.validate}(s)?s:c=>s.validate(c))}function St(C){return null!=C?function Ue(C){if(!C)return null;const s=C.filter(ne);return 0==s.length?null:function(c){return Ce(ze(c,s))}}(et(C)):null}function nn(C){return null!=C?function Ke(C){if(!C)return null;const s=C.filter(ne);return 0==s.length?null:function(c){return function G(...C){const s=(0,M.jO)(C),{args:c,keys:a}=(0,R.D)(C),g=new ge.y(L=>{const{length:Me}=c;if(!Me)return void L.complete();const Je=new Array(Me);let at=Me,Dt=Me;for(let Zt=0;Zt{bn||(bn=!0,Dt--),Je[Zt]=Ve},()=>at--,void 0,()=>{(!at||!bn)&&(Dt||L.next(a?(0,Y.n)(a,Je):Je),L.complete())}))}});return s?g.pipe((0,_.Z)(s)):g}(ze(c,s).map(Ee)).pipe((0,Z.U)(Ce))}}(et(C)):null}function wt(C,s){return null===C?[s]:Array.isArray(C)?[...C,s]:[C,s]}function pn(C){return C?Array.isArray(C)?C:[C]:[]}function Pt(C,s){return Array.isArray(C)?C.includes(s):C===s}function Ut(C,s){const c=pn(s);return pn(C).forEach(g=>{Pt(c,g)||c.push(g)}),c}function it(C,s){return pn(s).filter(c=>!Pt(C,c))}class Xt{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(s){this._rawValidators=s||[],this._composedValidatorFn=St(this._rawValidators)}_setAsyncValidators(s){this._rawAsyncValidators=s||[],this._composedAsyncValidatorFn=nn(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(s){this._onDestroyCallbacks.push(s)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(s=>s()),this._onDestroyCallbacks=[]}reset(s){this.control&&this.control.reset(s)}hasError(s,c){return!!this.control&&this.control.hasError(s,c)}getError(s,c){return this.control?this.control.getError(s,c):null}}class kt extends Xt{get formDirective(){return null}get path(){return null}}class Vt extends Xt{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class rn{constructor(s){this._cd=s}get isTouched(){return!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return!!this._cd?.submitted}}let gt=(()=>{class C extends rn{constructor(c){super(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(Vt,2))},C.\u0275dir=o.lG2({type:C,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(c,a){2&c&&o.ekj("ng-untouched",a.isUntouched)("ng-touched",a.isTouched)("ng-pristine",a.isPristine)("ng-dirty",a.isDirty)("ng-valid",a.isValid)("ng-invalid",a.isInvalid)("ng-pending",a.isPending)},features:[o.qOj]}),C})(),Yt=(()=>{class C extends rn{constructor(c){super(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(kt,10))},C.\u0275dir=o.lG2({type:C,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(c,a){2&c&&o.ekj("ng-untouched",a.isUntouched)("ng-touched",a.isTouched)("ng-pristine",a.isPristine)("ng-dirty",a.isDirty)("ng-valid",a.isValid)("ng-invalid",a.isInvalid)("ng-pending",a.isPending)("ng-submitted",a.isSubmitted)},features:[o.qOj]}),C})();const He="VALID",Ye="INVALID",pt="PENDING",vt="DISABLED";function Ht(C){return(mn(C)?C.validators:C)||null}function tn(C,s){return(mn(s)?s.asyncValidators:C)||null}function mn(C){return null!=C&&!Array.isArray(C)&&"object"==typeof C}class _e{constructor(s,c){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._assignValidators(s),this._assignAsyncValidators(c)}get validator(){return this._composedValidatorFn}set validator(s){this._rawValidators=this._composedValidatorFn=s}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(s){this._rawAsyncValidators=this._composedAsyncValidatorFn=s}get parent(){return this._parent}get valid(){return this.status===He}get invalid(){return this.status===Ye}get pending(){return this.status==pt}get disabled(){return this.status===vt}get enabled(){return this.status!==vt}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(s){this._assignValidators(s)}setAsyncValidators(s){this._assignAsyncValidators(s)}addValidators(s){this.setValidators(Ut(s,this._rawValidators))}addAsyncValidators(s){this.setAsyncValidators(Ut(s,this._rawAsyncValidators))}removeValidators(s){this.setValidators(it(s,this._rawValidators))}removeAsyncValidators(s){this.setAsyncValidators(it(s,this._rawAsyncValidators))}hasValidator(s){return Pt(this._rawValidators,s)}hasAsyncValidator(s){return Pt(this._rawAsyncValidators,s)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(s={}){this.touched=!0,this._parent&&!s.onlySelf&&this._parent.markAsTouched(s)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(s=>s.markAllAsTouched())}markAsUntouched(s={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(c=>{c.markAsUntouched({onlySelf:!0})}),this._parent&&!s.onlySelf&&this._parent._updateTouched(s)}markAsDirty(s={}){this.pristine=!1,this._parent&&!s.onlySelf&&this._parent.markAsDirty(s)}markAsPristine(s={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(c=>{c.markAsPristine({onlySelf:!0})}),this._parent&&!s.onlySelf&&this._parent._updatePristine(s)}markAsPending(s={}){this.status=pt,!1!==s.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!s.onlySelf&&this._parent.markAsPending(s)}disable(s={}){const c=this._parentMarkedDirty(s.onlySelf);this.status=vt,this.errors=null,this._forEachChild(a=>{a.disable({...s,onlySelf:!0})}),this._updateValue(),!1!==s.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors({...s,skipPristineCheck:c}),this._onDisabledChange.forEach(a=>a(!0))}enable(s={}){const c=this._parentMarkedDirty(s.onlySelf);this.status=He,this._forEachChild(a=>{a.enable({...s,onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:s.emitEvent}),this._updateAncestors({...s,skipPristineCheck:c}),this._onDisabledChange.forEach(a=>a(!1))}_updateAncestors(s){this._parent&&!s.onlySelf&&(this._parent.updateValueAndValidity(s),s.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(s){this._parent=s}getRawValue(){return this.value}updateValueAndValidity(s={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===He||this.status===pt)&&this._runAsyncValidator(s.emitEvent)),!1!==s.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!s.onlySelf&&this._parent.updateValueAndValidity(s)}_updateTreeValidity(s={emitEvent:!0}){this._forEachChild(c=>c._updateTreeValidity(s)),this.updateValueAndValidity({onlySelf:!0,emitEvent:s.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?vt:He}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(s){if(this.asyncValidator){this.status=pt,this._hasOwnPendingAsyncValidator=!0;const c=Ee(this.asyncValidator(this));this._asyncValidationSubscription=c.subscribe(a=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(a,{emitEvent:s})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(s,c={}){this.errors=s,this._updateControlsErrors(!1!==c.emitEvent)}get(s){let c=s;return null==c||(Array.isArray(c)||(c=c.split(".")),0===c.length)?null:c.reduce((a,g)=>a&&a._find(g),this)}getError(s,c){const a=c?this.get(c):this;return a&&a.errors?a.errors[s]:null}hasError(s,c){return!!this.getError(s,c)}get root(){let s=this;for(;s._parent;)s=s._parent;return s}_updateControlsErrors(s){this.status=this._calculateStatus(),s&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(s)}_initObservables(){this.valueChanges=new o.vpe,this.statusChanges=new o.vpe}_calculateStatus(){return this._allControlsDisabled()?vt:this.errors?Ye:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(pt)?pt:this._anyControlsHaveStatus(Ye)?Ye:He}_anyControlsHaveStatus(s){return this._anyControls(c=>c.status===s)}_anyControlsDirty(){return this._anyControls(s=>s.dirty)}_anyControlsTouched(){return this._anyControls(s=>s.touched)}_updatePristine(s={}){this.pristine=!this._anyControlsDirty(),this._parent&&!s.onlySelf&&this._parent._updatePristine(s)}_updateTouched(s={}){this.touched=this._anyControlsTouched(),this._parent&&!s.onlySelf&&this._parent._updateTouched(s)}_registerOnCollectionChange(s){this._onCollectionChange=s}_setUpdateStrategy(s){mn(s)&&null!=s.updateOn&&(this._updateOn=s.updateOn)}_parentMarkedDirty(s){return!s&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}_find(s){return null}_assignValidators(s){this._rawValidators=Array.isArray(s)?s.slice():s,this._composedValidatorFn=function _t(C){return Array.isArray(C)?St(C):C||null}(this._rawValidators)}_assignAsyncValidators(s){this._rawAsyncValidators=Array.isArray(s)?s.slice():s,this._composedAsyncValidatorFn=function Ln(C){return Array.isArray(C)?nn(C):C||null}(this._rawAsyncValidators)}}class fe extends _e{constructor(s,c,a){super(Ht(c),tn(a,c)),this.controls=s,this._initObservables(),this._setUpdateStrategy(c),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(s,c){return this.controls[s]?this.controls[s]:(this.controls[s]=c,c.setParent(this),c._registerOnCollectionChange(this._onCollectionChange),c)}addControl(s,c,a={}){this.registerControl(s,c),this.updateValueAndValidity({emitEvent:a.emitEvent}),this._onCollectionChange()}removeControl(s,c={}){this.controls[s]&&this.controls[s]._registerOnCollectionChange(()=>{}),delete this.controls[s],this.updateValueAndValidity({emitEvent:c.emitEvent}),this._onCollectionChange()}setControl(s,c,a={}){this.controls[s]&&this.controls[s]._registerOnCollectionChange(()=>{}),delete this.controls[s],c&&this.registerControl(s,c),this.updateValueAndValidity({emitEvent:a.emitEvent}),this._onCollectionChange()}contains(s){return this.controls.hasOwnProperty(s)&&this.controls[s].enabled}setValue(s,c={}){(function Ft(C,s,c){C._forEachChild((a,g)=>{if(void 0===c[g])throw new o.vHH(1002,"")})})(this,0,s),Object.keys(s).forEach(a=>{(function ln(C,s,c){const a=C.controls;if(!(s?Object.keys(a):a).length)throw new o.vHH(1e3,"");if(!a[c])throw new o.vHH(1001,"")})(this,!0,a),this.controls[a].setValue(s[a],{onlySelf:!0,emitEvent:c.emitEvent})}),this.updateValueAndValidity(c)}patchValue(s,c={}){null!=s&&(Object.keys(s).forEach(a=>{const g=this.controls[a];g&&g.patchValue(s[a],{onlySelf:!0,emitEvent:c.emitEvent})}),this.updateValueAndValidity(c))}reset(s={},c={}){this._forEachChild((a,g)=>{a.reset(s[g],{onlySelf:!0,emitEvent:c.emitEvent})}),this._updatePristine(c),this._updateTouched(c),this.updateValueAndValidity(c)}getRawValue(){return this._reduceChildren({},(s,c,a)=>(s[a]=c.getRawValue(),s))}_syncPendingControls(){let s=this._reduceChildren(!1,(c,a)=>!!a._syncPendingControls()||c);return s&&this.updateValueAndValidity({onlySelf:!0}),s}_forEachChild(s){Object.keys(this.controls).forEach(c=>{const a=this.controls[c];a&&s(a,c)})}_setUpControls(){this._forEachChild(s=>{s.setParent(this),s._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(s){for(const[c,a]of Object.entries(this.controls))if(this.contains(c)&&s(a))return!0;return!1}_reduceValue(){return this._reduceChildren({},(c,a,g)=>((a.enabled||this.disabled)&&(c[g]=a.value),c))}_reduceChildren(s,c){let a=s;return this._forEachChild((g,L)=>{a=c(a,g,L)}),a}_allControlsDisabled(){for(const s of Object.keys(this.controls))if(this.controls[s].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(s){return this.controls.hasOwnProperty(s)?this.controls[s]:null}}const It=new o.OlP("CallSetDisabledState",{providedIn:"root",factory:()=>cn}),cn="always";function sn(C,s,c=cn){$n(C,s),s.valueAccessor.writeValue(C.value),(C.disabled||"always"===c)&&s.valueAccessor.setDisabledState?.(C.disabled),function xn(C,s){s.valueAccessor.registerOnChange(c=>{C._pendingValue=c,C._pendingChange=!0,C._pendingDirty=!0,"change"===C.updateOn&&tr(C,s)})}(C,s),function Ir(C,s){const c=(a,g)=>{s.valueAccessor.writeValue(a),g&&s.viewToModelUpdate(a)};C.registerOnChange(c),s._registerOnDestroy(()=>{C._unregisterOnChange(c)})}(C,s),function vn(C,s){s.valueAccessor.registerOnTouched(()=>{C._pendingTouched=!0,"blur"===C.updateOn&&C._pendingChange&&tr(C,s),"submit"!==C.updateOn&&C.markAsTouched()})}(C,s),function sr(C,s){if(s.valueAccessor.setDisabledState){const c=a=>{s.valueAccessor.setDisabledState(a)};C.registerOnDisabledChange(c),s._registerOnDestroy(()=>{C._unregisterOnDisabledChange(c)})}}(C,s)}function er(C,s){C.forEach(c=>{c.registerOnValidatorChange&&c.registerOnValidatorChange(s)})}function $n(C,s){const c=function Rt(C){return C._rawValidators}(C);null!==s.validator?C.setValidators(wt(c,s.validator)):"function"==typeof c&&C.setValidators([c]);const a=function Kt(C){return C._rawAsyncValidators}(C);null!==s.asyncValidator?C.setAsyncValidators(wt(a,s.asyncValidator)):"function"==typeof a&&C.setAsyncValidators([a]);const g=()=>C.updateValueAndValidity();er(s._rawValidators,g),er(s._rawAsyncValidators,g)}function tr(C,s){C._pendingDirty&&C.markAsDirty(),C.setValue(C._pendingValue,{emitModelToViewChange:!1}),s.viewToModelUpdate(C._pendingValue),C._pendingChange=!1}const Pe={provide:kt,useExisting:(0,o.Gpc)(()=>le)},X=(()=>Promise.resolve())();let le=(()=>{class C extends kt{constructor(c,a,g){super(),this.callSetDisabledState=g,this.submitted=!1,this._directives=new Set,this.ngSubmit=new o.vpe,this.form=new fe({},St(c),nn(a))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(c){X.then(()=>{const a=this._findContainer(c.path);c.control=a.registerControl(c.name,c.control),sn(c.control,c,this.callSetDisabledState),c.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(c)})}getControl(c){return this.form.get(c.path)}removeControl(c){X.then(()=>{const a=this._findContainer(c.path);a&&a.removeControl(c.name),this._directives.delete(c)})}addFormGroup(c){X.then(()=>{const a=this._findContainer(c.path),g=new fe({});(function cr(C,s){$n(C,s)})(g,c),a.registerControl(c.name,g),g.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(c){X.then(()=>{const a=this._findContainer(c.path);a&&a.removeControl(c.name)})}getFormGroup(c){return this.form.get(c.path)}updateModel(c,a){X.then(()=>{this.form.get(c.path).setValue(a)})}setValue(c){this.control.setValue(c)}onSubmit(c){return this.submitted=!0,function F(C,s){C._syncPendingControls(),s.forEach(c=>{const a=c.control;"submit"===a.updateOn&&a._pendingChange&&(c.viewToModelUpdate(a._pendingValue),a._pendingChange=!1)})}(this.form,this._directives),this.ngSubmit.emit(c),"dialog"===c?.target?.method}onReset(){this.resetForm()}resetForm(c){this.form.reset(c),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(c){return c.pop(),c.length?this.form.get(c):this.form}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(oe,10),o.Y36(be,10),o.Y36(It,8))},C.\u0275dir=o.lG2({type:C,selectors:[["form",3,"ngNoForm","",3,"formGroup",""],["ng-form"],["","ngForm",""]],hostBindings:function(c,a){1&c&&o.NdJ("submit",function(L){return a.onSubmit(L)})("reset",function(){return a.onReset()})},inputs:{options:["ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[o._Bn([Pe]),o.qOj]}),C})();function Ie(C,s){const c=C.indexOf(s);c>-1&&C.splice(c,1)}function je(C){return"object"==typeof C&&null!==C&&2===Object.keys(C).length&&"value"in C&&"disabled"in C}const Re=class extends _e{constructor(s=null,c,a){super(Ht(c),tn(a,c)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(s),this._setUpdateStrategy(c),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),mn(c)&&(c.nonNullable||c.initialValueIsDefault)&&(this.defaultValue=je(s)?s.value:s)}setValue(s,c={}){this.value=this._pendingValue=s,this._onChange.length&&!1!==c.emitModelToViewChange&&this._onChange.forEach(a=>a(this.value,!1!==c.emitViewToModelChange)),this.updateValueAndValidity(c)}patchValue(s,c={}){this.setValue(s,c)}reset(s=this.defaultValue,c={}){this._applyFormState(s),this.markAsPristine(c),this.markAsUntouched(c),this.setValue(this.value,c),this._pendingChange=!1}_updateValue(){}_anyControls(s){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(s){this._onChange.push(s)}_unregisterOnChange(s){Ie(this._onChange,s)}registerOnDisabledChange(s){this._onDisabledChange.push(s)}_unregisterOnDisabledChange(s){Ie(this._onDisabledChange,s)}_forEachChild(s){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(s){je(s)?(this.value=this._pendingValue=s.value,s.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=s}},mr={provide:Vt,useExisting:(0,o.Gpc)(()=>fo)},an=(()=>Promise.resolve())();let fo=(()=>{class C extends Vt{constructor(c,a,g,L,Me,Je){super(),this._changeDetectorRef=Me,this.callSetDisabledState=Je,this.control=new Re,this._registered=!1,this.update=new o.vpe,this._parent=c,this._setValidators(a),this._setAsyncValidators(g),this.valueAccessor=function q(C,s){if(!s)return null;let c,a,g;return Array.isArray(s),s.forEach(L=>{L.constructor===Te?c=L:function rt(C){return Object.getPrototypeOf(C.constructor)===B}(L)?a=L:g=L}),g||a||c||null}(0,L)}ngOnChanges(c){if(this._checkForErrors(),!this._registered||"name"in c){if(this._registered&&(this._checkName(),this.formDirective)){const a=c.name.previousValue;this.formDirective.removeControl({name:a,path:this._getPath(a)})}this._setUpControl()}"isDisabled"in c&&this._updateDisabled(c),function Cn(C,s){if(!C.hasOwnProperty("model"))return!1;const c=C.model;return!!c.isFirstChange()||!Object.is(s,c.currentValue)}(c,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(c){this.viewModel=c,this.update.emit(c)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){sn(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(c){an.then(()=>{this.control.setValue(c,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(c){const a=c.isDisabled.currentValue,g=0!==a&&(0,o.D6c)(a);an.then(()=>{g&&!this.control.disabled?this.control.disable():!g&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(c){return this._parent?function Dn(C,s){return[...s.path,C]}(c,this._parent):[c]}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(kt,9),o.Y36(oe,10),o.Y36(be,10),o.Y36(E,10),o.Y36(o.sBO,8),o.Y36(It,8))},C.\u0275dir=o.lG2({type:C,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[o._Bn([mr]),o.qOj,o.TTD]}),C})(),ho=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275dir=o.lG2({type:C,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""]}),C})(),ar=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({}),C})(),hr=(()=>{class C{constructor(){this._validator=de}ngOnChanges(c){if(this.inputName in c){const a=this.normalizeInput(c[this.inputName].currentValue);this._enabled=this.enabled(a),this._validator=this._enabled?this.createValidator(a):de,this._onChange&&this._onChange()}}validate(c){return this._validator(c)}registerOnValidatorChange(c){this._onChange=c}enabled(c){return null!=c}}return C.\u0275fac=function(c){return new(c||C)},C.\u0275dir=o.lG2({type:C,features:[o.TTD]}),C})();const bo={provide:oe,useExisting:(0,o.Gpc)(()=>Wr),multi:!0};let Wr=(()=>{class C extends hr{constructor(){super(...arguments),this.inputName="required",this.normalizeInput=o.D6c,this.createValidator=c=>O}enabled(c){return c}}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,selectors:[["","required","","formControlName","",3,"type","checkbox"],["","required","","formControl","",3,"type","checkbox"],["","required","","ngModel","",3,"type","checkbox"]],hostVars:1,hostBindings:function(c,a){2&c&&o.uIk("required",a._enabled?"":null)},inputs:{required:"required"},features:[o._Bn([bo]),o.qOj]}),C})();const Zn={provide:oe,useExisting:(0,o.Gpc)(()=>Lr),multi:!0};let Lr=(()=>{class C extends hr{constructor(){super(...arguments),this.inputName="pattern",this.normalizeInput=c=>c,this.createValidator=c=>function ue(C){if(!C)return de;let s,c;return"string"==typeof C?(c="","^"!==C.charAt(0)&&(c+="^"),c+=C,"$"!==C.charAt(C.length-1)&&(c+="$"),s=new RegExp(c)):(c=C.toString(),s=C),a=>{if(Be(a.value))return null;const g=a.value;return s.test(g)?null:{pattern:{requiredPattern:c,actualValue:g}}}}(c)}}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,selectors:[["","pattern","","formControlName",""],["","pattern","","formControl",""],["","pattern","","ngModel",""]],hostVars:1,hostBindings:function(c,a){2&c&&o.uIk("pattern",a._enabled?a.pattern:null)},inputs:{pattern:"pattern"},features:[o._Bn([Zn]),o.qOj]}),C})(),Fo=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({imports:[ar]}),C})(),wo=(()=>{class C{static withConfig(c){return{ngModule:C,providers:[{provide:It,useValue:c.callSetDisabledState??cn}]}}}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({imports:[Fo]}),C})()},1481:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Dx:()=>gt,b2:()=>kt,q6:()=>Pt});var o=w(6895),x=w(8274);class N extends o.w_{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class ge extends N{static makeCurrent(){(0,o.HT)(new ge)}onAndCancel(fe,ee,Se){return fe.addEventListener(ee,Se,!1),()=>{fe.removeEventListener(ee,Se,!1)}}dispatchEvent(fe,ee){fe.dispatchEvent(ee)}remove(fe){fe.parentNode&&fe.parentNode.removeChild(fe)}createElement(fe,ee){return(ee=ee||this.getDefaultDocument()).createElement(fe)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(fe){return fe.nodeType===Node.ELEMENT_NODE}isShadowRoot(fe){return fe instanceof DocumentFragment}getGlobalEventTarget(fe,ee){return"window"===ee?window:"document"===ee?fe:"body"===ee?fe.body:null}getBaseHref(fe){const ee=function W(){return R=R||document.querySelector("base"),R?R.getAttribute("href"):null}();return null==ee?null:function U(_e){M=M||document.createElement("a"),M.setAttribute("href",_e);const fe=M.pathname;return"/"===fe.charAt(0)?fe:`/${fe}`}(ee)}resetBaseElement(){R=null}getUserAgent(){return window.navigator.userAgent}getCookie(fe){return(0,o.Mx)(document.cookie,fe)}}let M,R=null;const _=new x.OlP("TRANSITION_ID"),G=[{provide:x.ip1,useFactory:function Y(_e,fe,ee){return()=>{ee.get(x.CZH).donePromise.then(()=>{const Se=(0,o.q)(),Le=fe.querySelectorAll(`style[ng-transition="${_e}"]`);for(let yt=0;yt{class _e{build(){return new XMLHttpRequest}}return _e.\u0275fac=function(ee){return new(ee||_e)},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const B=new x.OlP("EventManagerPlugins");let E=(()=>{class _e{constructor(ee,Se){this._zone=Se,this._eventNameToPlugin=new Map,ee.forEach(Le=>Le.manager=this),this._plugins=ee.slice().reverse()}addEventListener(ee,Se,Le){return this._findPluginFor(Se).addEventListener(ee,Se,Le)}addGlobalEventListener(ee,Se,Le){return this._findPluginFor(Se).addGlobalEventListener(ee,Se,Le)}getZone(){return this._zone}_findPluginFor(ee){const Se=this._eventNameToPlugin.get(ee);if(Se)return Se;const Le=this._plugins;for(let yt=0;yt{class _e{constructor(){this._stylesSet=new Set}addStyles(ee){const Se=new Set;ee.forEach(Le=>{this._stylesSet.has(Le)||(this._stylesSet.add(Le),Se.add(Le))}),this.onStylesAdded(Se)}onStylesAdded(ee){}getAllStyles(){return Array.from(this._stylesSet)}}return _e.\u0275fac=function(ee){return new(ee||_e)},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})(),K=(()=>{class _e extends P{constructor(ee){super(),this._doc=ee,this._hostNodes=new Map,this._hostNodes.set(ee.head,[])}_addStylesToHost(ee,Se,Le){ee.forEach(yt=>{const It=this._doc.createElement("style");It.textContent=yt,Le.push(Se.appendChild(It))})}addHost(ee){const Se=[];this._addStylesToHost(this._stylesSet,ee,Se),this._hostNodes.set(ee,Se)}removeHost(ee){const Se=this._hostNodes.get(ee);Se&&Se.forEach(pe),this._hostNodes.delete(ee)}onStylesAdded(ee){this._hostNodes.forEach((Se,Le)=>{this._addStylesToHost(ee,Le,Se)})}ngOnDestroy(){this._hostNodes.forEach(ee=>ee.forEach(pe))}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();function pe(_e){(0,o.q)().remove(_e)}const ke={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},Te=/%COMP%/g;function Q(_e,fe,ee){for(let Se=0;Se{if("__ngUnwrap__"===fe)return _e;!1===_e(fe)&&(fe.preventDefault(),fe.returnValue=!1)}}let O=(()=>{class _e{constructor(ee,Se,Le){this.eventManager=ee,this.sharedStylesHost=Se,this.appId=Le,this.rendererByCompId=new Map,this.defaultRenderer=new te(ee)}createRenderer(ee,Se){if(!ee||!Se)return this.defaultRenderer;switch(Se.encapsulation){case x.ifc.Emulated:{let Le=this.rendererByCompId.get(Se.id);return Le||(Le=new ue(this.eventManager,this.sharedStylesHost,Se,this.appId),this.rendererByCompId.set(Se.id,Le)),Le.applyToHost(ee),Le}case 1:case x.ifc.ShadowDom:return new de(this.eventManager,this.sharedStylesHost,ee,Se);default:if(!this.rendererByCompId.has(Se.id)){const Le=Q(Se.id,Se.styles,[]);this.sharedStylesHost.addStyles(Le),this.rendererByCompId.set(Se.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(E),x.LFG(K),x.LFG(x.AFp))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();class te{constructor(fe){this.eventManager=fe,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(fe,ee){return ee?document.createElementNS(ke[ee]||ee,fe):document.createElement(fe)}createComment(fe){return document.createComment(fe)}createText(fe){return document.createTextNode(fe)}appendChild(fe,ee){(De(fe)?fe.content:fe).appendChild(ee)}insertBefore(fe,ee,Se){fe&&(De(fe)?fe.content:fe).insertBefore(ee,Se)}removeChild(fe,ee){fe&&fe.removeChild(ee)}selectRootElement(fe,ee){let Se="string"==typeof fe?document.querySelector(fe):fe;if(!Se)throw new Error(`The selector "${fe}" did not match any elements`);return ee||(Se.textContent=""),Se}parentNode(fe){return fe.parentNode}nextSibling(fe){return fe.nextSibling}setAttribute(fe,ee,Se,Le){if(Le){ee=Le+":"+ee;const yt=ke[Le];yt?fe.setAttributeNS(yt,ee,Se):fe.setAttribute(ee,Se)}else fe.setAttribute(ee,Se)}removeAttribute(fe,ee,Se){if(Se){const Le=ke[Se];Le?fe.removeAttributeNS(Le,ee):fe.removeAttribute(`${Se}:${ee}`)}else fe.removeAttribute(ee)}addClass(fe,ee){fe.classList.add(ee)}removeClass(fe,ee){fe.classList.remove(ee)}setStyle(fe,ee,Se,Le){Le&(x.JOm.DashCase|x.JOm.Important)?fe.style.setProperty(ee,Se,Le&x.JOm.Important?"important":""):fe.style[ee]=Se}removeStyle(fe,ee,Se){Se&x.JOm.DashCase?fe.style.removeProperty(ee):fe.style[ee]=""}setProperty(fe,ee,Se){fe[ee]=Se}setValue(fe,ee){fe.nodeValue=ee}listen(fe,ee,Se){return"string"==typeof fe?this.eventManager.addGlobalEventListener(fe,ee,T(Se)):this.eventManager.addEventListener(fe,ee,T(Se))}}function De(_e){return"TEMPLATE"===_e.tagName&&void 0!==_e.content}class ue extends te{constructor(fe,ee,Se,Le){super(fe),this.component=Se;const yt=Q(Le+"-"+Se.id,Se.styles,[]);ee.addStyles(yt),this.contentAttr=function be(_e){return"_ngcontent-%COMP%".replace(Te,_e)}(Le+"-"+Se.id),this.hostAttr=function Ne(_e){return"_nghost-%COMP%".replace(Te,_e)}(Le+"-"+Se.id)}applyToHost(fe){super.setAttribute(fe,this.hostAttr,"")}createElement(fe,ee){const Se=super.createElement(fe,ee);return super.setAttribute(Se,this.contentAttr,""),Se}}class de extends te{constructor(fe,ee,Se,Le){super(fe),this.sharedStylesHost=ee,this.hostEl=Se,this.shadowRoot=Se.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const yt=Q(Le.id,Le.styles,[]);for(let It=0;It{class _e extends j{constructor(ee){super(ee)}supports(ee){return!0}addEventListener(ee,Se,Le){return ee.addEventListener(Se,Le,!1),()=>this.removeEventListener(ee,Se,Le)}removeEventListener(ee,Se,Le){return ee.removeEventListener(Se,Le)}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const Ee=["alt","control","meta","shift"],Ce={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},ze={alt:_e=>_e.altKey,control:_e=>_e.ctrlKey,meta:_e=>_e.metaKey,shift:_e=>_e.shiftKey};let dt=(()=>{class _e extends j{constructor(ee){super(ee)}supports(ee){return null!=_e.parseEventName(ee)}addEventListener(ee,Se,Le){const yt=_e.parseEventName(Se),It=_e.eventCallback(yt.fullKey,Le,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>(0,o.q)().onAndCancel(ee,yt.domEventName,It))}static parseEventName(ee){const Se=ee.toLowerCase().split("."),Le=Se.shift();if(0===Se.length||"keydown"!==Le&&"keyup"!==Le)return null;const yt=_e._normalizeKey(Se.pop());let It="",cn=Se.indexOf("code");if(cn>-1&&(Se.splice(cn,1),It="code."),Ee.forEach(sn=>{const dn=Se.indexOf(sn);dn>-1&&(Se.splice(dn,1),It+=sn+".")}),It+=yt,0!=Se.length||0===yt.length)return null;const Dn={};return Dn.domEventName=Le,Dn.fullKey=It,Dn}static matchEventFullKeyCode(ee,Se){let Le=Ce[ee.key]||ee.key,yt="";return Se.indexOf("code.")>-1&&(Le=ee.code,yt="code."),!(null==Le||!Le)&&(Le=Le.toLowerCase()," "===Le?Le="space":"."===Le&&(Le="dot"),Ee.forEach(It=>{It!==Le&&(0,ze[It])(ee)&&(yt+=It+".")}),yt+=Le,yt===Se)}static eventCallback(ee,Se,Le){return yt=>{_e.matchEventFullKeyCode(yt,ee)&&Le.runGuarded(()=>Se(yt))}}static _normalizeKey(ee){return"esc"===ee?"escape":ee}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const Pt=(0,x.eFA)(x._c5,"browser",[{provide:x.Lbi,useValue:o.bD},{provide:x.g9A,useValue:function wt(){ge.makeCurrent()},multi:!0},{provide:o.K0,useFactory:function Kt(){return(0,x.RDi)(document),document},deps:[]}]),Ut=new x.OlP(""),it=[{provide:x.rWj,useClass:class Z{addToWindow(fe){x.dqk.getAngularTestability=(Se,Le=!0)=>{const yt=fe.findTestabilityInTree(Se,Le);if(null==yt)throw new Error("Could not find testability for element.");return yt},x.dqk.getAllAngularTestabilities=()=>fe.getAllTestabilities(),x.dqk.getAllAngularRootElements=()=>fe.getAllRootElements(),x.dqk.frameworkStabilizers||(x.dqk.frameworkStabilizers=[]),x.dqk.frameworkStabilizers.push(Se=>{const Le=x.dqk.getAllAngularTestabilities();let yt=Le.length,It=!1;const cn=function(Dn){It=It||Dn,yt--,0==yt&&Se(It)};Le.forEach(function(Dn){Dn.whenStable(cn)})})}findTestabilityInTree(fe,ee,Se){return null==ee?null:fe.getTestability(ee)??(Se?(0,o.q)().isShadowRoot(ee)?this.findTestabilityInTree(fe,ee.host,!0):this.findTestabilityInTree(fe,ee.parentElement,!0):null)}},deps:[]},{provide:x.lri,useClass:x.dDg,deps:[x.R0b,x.eoX,x.rWj]},{provide:x.dDg,useClass:x.dDg,deps:[x.R0b,x.eoX,x.rWj]}],Xt=[{provide:x.zSh,useValue:"root"},{provide:x.qLn,useFactory:function Rt(){return new x.qLn},deps:[]},{provide:B,useClass:ne,multi:!0,deps:[o.K0,x.R0b,x.Lbi]},{provide:B,useClass:dt,multi:!0,deps:[o.K0]},{provide:O,useClass:O,deps:[E,K,x.AFp]},{provide:x.FYo,useExisting:O},{provide:P,useExisting:K},{provide:K,useClass:K,deps:[o.K0]},{provide:E,useClass:E,deps:[B,x.R0b]},{provide:o.JF,useClass:S,deps:[]},[]];let kt=(()=>{class _e{constructor(ee){}static withServerTransition(ee){return{ngModule:_e,providers:[{provide:x.AFp,useValue:ee.appId},{provide:_,useExisting:x.AFp},G]}}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(Ut,12))},_e.\u0275mod=x.oAB({type:_e}),_e.\u0275inj=x.cJS({providers:[...Xt,...it],imports:[o.ez,x.hGG]}),_e})(),gt=(()=>{class _e{constructor(ee){this._doc=ee}getTitle(){return this._doc.title}setTitle(ee){this._doc.title=ee||""}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:function(ee){let Se=null;return Se=ee?new ee:function en(){return new gt((0,x.LFG)(o.K0))}(),Se},providedIn:"root"}),_e})();typeof window<"u"&&window},5472:(Qe,Fe,w)=>{"use strict";w.d(Fe,{gz:()=>Rr,y6:()=>fr,OD:()=>Mt,eC:()=>it,wm:()=>Dl,wN:()=>ya,F0:()=>or,rH:()=>mi,Bz:()=>qu,Hx:()=>pt});var o=w(8274),x=w(2076),N=w(9646),ge=w(1135);const W=(0,w(3888).d)(f=>function(){f(this),this.name="EmptyError",this.message="no elements in sequence"});var M=w(9751),U=w(4742),_=w(4671),Y=w(3268),G=w(3269),Z=w(1810),S=w(5403),B=w(9672);function E(...f){const h=(0,G.yG)(f),d=(0,G.jO)(f),{args:m,keys:b}=(0,U.D)(f);if(0===m.length)return(0,x.D)([],h);const $=new M.y(function j(f,h,d=_.y){return m=>{P(h,()=>{const{length:b}=f,$=new Array(b);let z=b,ve=b;for(let We=0;We{const ft=(0,x.D)(f[We],h);let bt=!1;ft.subscribe((0,S.x)(m,jt=>{$[We]=jt,bt||(bt=!0,ve--),ve||m.next(d($.slice()))},()=>{--z||m.complete()}))},m)},m)}}(m,h,b?z=>(0,Z.n)(b,z):_.y));return d?$.pipe((0,Y.Z)(d)):$}function P(f,h,d){f?(0,B.f)(d,f,h):h()}var K=w(8189);function ke(...f){return function pe(){return(0,K.J)(1)}()((0,x.D)(f,(0,G.yG)(f)))}var Te=w(8421);function ie(f){return new M.y(h=>{(0,Te.Xf)(f()).subscribe(h)})}var Be=w(9635),re=w(576);function oe(f,h){const d=(0,re.m)(f)?f:()=>f,m=b=>b.error(d());return new M.y(h?b=>h.schedule(m,0,b):m)}var be=w(515),Ne=w(727),Q=w(4482);function T(){return(0,Q.e)((f,h)=>{let d=null;f._refCount++;const m=(0,S.x)(h,void 0,void 0,void 0,()=>{if(!f||f._refCount<=0||0<--f._refCount)return void(d=null);const b=f._connection,$=d;d=null,b&&(!$||b===$)&&b.unsubscribe(),h.unsubscribe()});f.subscribe(m),m.closed||(d=f.connect())})}class k extends M.y{constructor(h,d){super(),this.source=h,this.subjectFactory=d,this._subject=null,this._refCount=0,this._connection=null,(0,Q.A)(h)&&(this.lift=h.lift)}_subscribe(h){return this.getSubject().subscribe(h)}getSubject(){const h=this._subject;return(!h||h.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:h}=this;this._subject=this._connection=null,h?.unsubscribe()}connect(){let h=this._connection;if(!h){h=this._connection=new Ne.w0;const d=this.getSubject();h.add(this.source.subscribe((0,S.x)(d,void 0,()=>{this._teardown(),d.complete()},m=>{this._teardown(),d.error(m)},()=>this._teardown()))),h.closed&&(this._connection=null,h=Ne.w0.EMPTY)}return h}refCount(){return T()(this)}}var O=w(7579),te=w(6895),ce=w(4004),Ae=w(3900),De=w(5698),de=w(9300),ne=w(5577);function Ee(f){return(0,Q.e)((h,d)=>{let m=!1;h.subscribe((0,S.x)(d,b=>{m=!0,d.next(b)},()=>{m||d.next(f),d.complete()}))})}function Ce(f=ze){return(0,Q.e)((h,d)=>{let m=!1;h.subscribe((0,S.x)(d,b=>{m=!0,d.next(b)},()=>m?d.complete():d.error(f())))})}function ze(){return new W}function dt(f,h){const d=arguments.length>=2;return m=>m.pipe(f?(0,de.h)((b,$)=>f(b,$,m)):_.y,(0,De.q)(1),d?Ee(h):Ce(()=>new W))}var et=w(4351),Ue=w(8505);function St(f){return(0,Q.e)((h,d)=>{let $,m=null,b=!1;m=h.subscribe((0,S.x)(d,void 0,void 0,z=>{$=(0,Te.Xf)(f(z,St(f)(h))),m?(m.unsubscribe(),m=null,$.subscribe(d)):b=!0})),b&&(m.unsubscribe(),m=null,$.subscribe(d))})}function Ke(f,h,d,m,b){return($,z)=>{let ve=d,We=h,ft=0;$.subscribe((0,S.x)(z,bt=>{const jt=ft++;We=ve?f(We,bt,jt):(ve=!0,bt),m&&z.next(We)},b&&(()=>{ve&&z.next(We),z.complete()})))}}function nn(f,h){return(0,Q.e)(Ke(f,h,arguments.length>=2,!0))}function wt(f){return f<=0?()=>be.E:(0,Q.e)((h,d)=>{let m=[];h.subscribe((0,S.x)(d,b=>{m.push(b),f{for(const b of m)d.next(b);d.complete()},void 0,()=>{m=null}))})}function Rt(f,h){const d=arguments.length>=2;return m=>m.pipe(f?(0,de.h)((b,$)=>f(b,$,m)):_.y,wt(1),d?Ee(h):Ce(()=>new W))}var Kt=w(2529),Pt=w(8746),Ut=w(1481);const it="primary",Xt=Symbol("RouteTitle");class kt{constructor(h){this.params=h||{}}has(h){return Object.prototype.hasOwnProperty.call(this.params,h)}get(h){if(this.has(h)){const d=this.params[h];return Array.isArray(d)?d[0]:d}return null}getAll(h){if(this.has(h)){const d=this.params[h];return Array.isArray(d)?d:[d]}return[]}get keys(){return Object.keys(this.params)}}function Vt(f){return new kt(f)}function rn(f,h,d){const m=d.path.split("/");if(m.length>f.length||"full"===d.pathMatch&&(h.hasChildren()||m.lengthm[$]===b)}return f===h}function Yt(f){return Array.prototype.concat.apply([],f)}function ht(f){return f.length>0?f[f.length-1]:null}function Et(f,h){for(const d in f)f.hasOwnProperty(d)&&h(f[d],d)}function ut(f){return(0,o.CqO)(f)?f:(0,o.QGY)(f)?(0,x.D)(Promise.resolve(f)):(0,N.of)(f)}const Ct=!1,qe={exact:function Hn(f,h,d){if(!He(f.segments,h.segments)||!Xn(f.segments,h.segments,d)||f.numberOfChildren!==h.numberOfChildren)return!1;for(const m in h.children)if(!f.children[m]||!Hn(f.children[m],h.children[m],d))return!1;return!0},subset:Er},on={exact:function Nt(f,h){return en(f,h)},subset:function zt(f,h){return Object.keys(h).length<=Object.keys(f).length&&Object.keys(h).every(d=>gt(f[d],h[d]))},ignored:()=>!0};function gn(f,h,d){return qe[d.paths](f.root,h.root,d.matrixParams)&&on[d.queryParams](f.queryParams,h.queryParams)&&!("exact"===d.fragment&&f.fragment!==h.fragment)}function Er(f,h,d){return jn(f,h,h.segments,d)}function jn(f,h,d,m){if(f.segments.length>d.length){const b=f.segments.slice(0,d.length);return!(!He(b,d)||h.hasChildren()||!Xn(b,d,m))}if(f.segments.length===d.length){if(!He(f.segments,d)||!Xn(f.segments,d,m))return!1;for(const b in h.children)if(!f.children[b]||!Er(f.children[b],h.children[b],m))return!1;return!0}{const b=d.slice(0,f.segments.length),$=d.slice(f.segments.length);return!!(He(f.segments,b)&&Xn(f.segments,b,m)&&f.children[it])&&jn(f.children[it],h,$,m)}}function Xn(f,h,d){return h.every((m,b)=>on[d](f[b].parameters,m.parameters))}class En{constructor(h=new xe([],{}),d={},m=null){this.root=h,this.queryParams=d,this.fragment=m}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Vt(this.queryParams)),this._queryParamMap}toString(){return Ht.serialize(this)}}class xe{constructor(h,d){this.segments=h,this.children=d,this.parent=null,Et(d,(m,b)=>m.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return _t(this)}}class se{constructor(h,d){this.path=h,this.parameters=d}get parameterMap(){return this._parameterMap||(this._parameterMap=Vt(this.parameters)),this._parameterMap}toString(){return ee(this)}}function He(f,h){return f.length===h.length&&f.every((d,m)=>d.path===h[m].path)}let pt=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return new vt},providedIn:"root"}),f})();class vt{parse(h){const d=new er(h);return new En(d.parseRootSegment(),d.parseQueryParams(),d.parseFragment())}serialize(h){const d=`/${tn(h.root,!0)}`,m=function Le(f){const h=Object.keys(f).map(d=>{const m=f[d];return Array.isArray(m)?m.map(b=>`${mn(d)}=${mn(b)}`).join("&"):`${mn(d)}=${mn(m)}`}).filter(d=>!!d);return h.length?`?${h.join("&")}`:""}(h.queryParams);return`${d}${m}${"string"==typeof h.fragment?`#${function ln(f){return encodeURI(f)}(h.fragment)}`:""}`}}const Ht=new vt;function _t(f){return f.segments.map(h=>ee(h)).join("/")}function tn(f,h){if(!f.hasChildren())return _t(f);if(h){const d=f.children[it]?tn(f.children[it],!1):"",m=[];return Et(f.children,(b,$)=>{$!==it&&m.push(`${$}:${tn(b,!1)}`)}),m.length>0?`${d}(${m.join("//")})`:d}{const d=function Ye(f,h){let d=[];return Et(f.children,(m,b)=>{b===it&&(d=d.concat(h(m,b)))}),Et(f.children,(m,b)=>{b!==it&&(d=d.concat(h(m,b)))}),d}(f,(m,b)=>b===it?[tn(f.children[it],!1)]:[`${b}:${tn(m,!1)}`]);return 1===Object.keys(f.children).length&&null!=f.children[it]?`${_t(f)}/${d[0]}`:`${_t(f)}/(${d.join("//")})`}}function Ln(f){return encodeURIComponent(f).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function mn(f){return Ln(f).replace(/%3B/gi,";")}function Ft(f){return Ln(f).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function _e(f){return decodeURIComponent(f)}function fe(f){return _e(f.replace(/\+/g,"%20"))}function ee(f){return`${Ft(f.path)}${function Se(f){return Object.keys(f).map(h=>`;${Ft(h)}=${Ft(f[h])}`).join("")}(f.parameters)}`}const yt=/^[^\/()?;=#]+/;function It(f){const h=f.match(yt);return h?h[0]:""}const cn=/^[^=?&#]+/,sn=/^[^&#]+/;class er{constructor(h){this.url=h,this.remaining=h}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new xe([],{}):new xe([],this.parseChildren())}parseQueryParams(){const h={};if(this.consumeOptional("?"))do{this.parseQueryParam(h)}while(this.consumeOptional("&"));return h}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const h=[];for(this.peekStartsWith("(")||h.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),h.push(this.parseSegment());let d={};this.peekStartsWith("/(")&&(this.capture("/"),d=this.parseParens(!0));let m={};return this.peekStartsWith("(")&&(m=this.parseParens(!1)),(h.length>0||Object.keys(d).length>0)&&(m[it]=new xe(h,d)),m}parseSegment(){const h=It(this.remaining);if(""===h&&this.peekStartsWith(";"))throw new o.vHH(4009,Ct);return this.capture(h),new se(_e(h),this.parseMatrixParams())}parseMatrixParams(){const h={};for(;this.consumeOptional(";");)this.parseParam(h);return h}parseParam(h){const d=It(this.remaining);if(!d)return;this.capture(d);let m="";if(this.consumeOptional("=")){const b=It(this.remaining);b&&(m=b,this.capture(m))}h[_e(d)]=_e(m)}parseQueryParam(h){const d=function Dn(f){const h=f.match(cn);return h?h[0]:""}(this.remaining);if(!d)return;this.capture(d);let m="";if(this.consumeOptional("=")){const z=function dn(f){const h=f.match(sn);return h?h[0]:""}(this.remaining);z&&(m=z,this.capture(m))}const b=fe(d),$=fe(m);if(h.hasOwnProperty(b)){let z=h[b];Array.isArray(z)||(z=[z],h[b]=z),z.push($)}else h[b]=$}parseParens(h){const d={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const m=It(this.remaining),b=this.remaining[m.length];if("/"!==b&&")"!==b&&";"!==b)throw new o.vHH(4010,Ct);let $;m.indexOf(":")>-1?($=m.slice(0,m.indexOf(":")),this.capture($),this.capture(":")):h&&($=it);const z=this.parseChildren();d[$]=1===Object.keys(z).length?z[it]:new xe([],z),this.consumeOptional("//")}return d}peekStartsWith(h){return this.remaining.startsWith(h)}consumeOptional(h){return!!this.peekStartsWith(h)&&(this.remaining=this.remaining.substring(h.length),!0)}capture(h){if(!this.consumeOptional(h))throw new o.vHH(4011,Ct)}}function sr(f){return f.segments.length>0?new xe([],{[it]:f}):f}function $n(f){const h={};for(const m of Object.keys(f.children)){const $=$n(f.children[m]);($.segments.length>0||$.hasChildren())&&(h[m]=$)}return function Tn(f){if(1===f.numberOfChildren&&f.children[it]){const h=f.children[it];return new xe(f.segments.concat(h.segments),h.children)}return f}(new xe(f.segments,h))}function xn(f){return f instanceof En}function gr(f,h,d,m,b){if(0===d.length)return Qt(h.root,h.root,h.root,m,b);const $=function Cn(f){if("string"==typeof f[0]&&1===f.length&&"/"===f[0])return new On(!0,0,f);let h=0,d=!1;const m=f.reduce((b,$,z)=>{if("object"==typeof $&&null!=$){if($.outlets){const ve={};return Et($.outlets,(We,ft)=>{ve[ft]="string"==typeof We?We.split("/"):We}),[...b,{outlets:ve}]}if($.segmentPath)return[...b,$.segmentPath]}return"string"!=typeof $?[...b,$]:0===z?($.split("/").forEach((ve,We)=>{0==We&&"."===ve||(0==We&&""===ve?d=!0:".."===ve?h++:""!=ve&&b.push(ve))}),b):[...b,$]},[]);return new On(d,h,m)}(d);return $.toRoot()?Qt(h.root,h.root,new xe([],{}),m,b):function z(We){const ft=function q(f,h,d,m){if(f.isAbsolute)return new rt(h.root,!0,0);if(-1===m)return new rt(d,d===h.root,0);return function he(f,h,d){let m=f,b=h,$=d;for(;$>b;){if($-=b,m=m.parent,!m)throw new o.vHH(4005,!1);b=m.segments.length}return new rt(m,!1,b-$)}(d,m+($t(f.commands[0])?0:1),f.numberOfDoubleDots)}($,h,f.snapshot?._urlSegment,We),bt=ft.processChildren?X(ft.segmentGroup,ft.index,$.commands):Pe(ft.segmentGroup,ft.index,$.commands);return Qt(h.root,ft.segmentGroup,bt,m,b)}(f.snapshot?._lastPathIndex)}function $t(f){return"object"==typeof f&&null!=f&&!f.outlets&&!f.segmentPath}function fn(f){return"object"==typeof f&&null!=f&&f.outlets}function Qt(f,h,d,m,b){let z,$={};m&&Et(m,(We,ft)=>{$[ft]=Array.isArray(We)?We.map(bt=>`${bt}`):`${We}`}),z=f===h?d:Un(f,h,d);const ve=sr($n(z));return new En(ve,$,b)}function Un(f,h,d){const m={};return Et(f.children,(b,$)=>{m[$]=b===h?d:Un(b,h,d)}),new xe(f.segments,m)}class On{constructor(h,d,m){if(this.isAbsolute=h,this.numberOfDoubleDots=d,this.commands=m,h&&m.length>0&&$t(m[0]))throw new o.vHH(4003,!1);const b=m.find(fn);if(b&&b!==ht(m))throw new o.vHH(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class rt{constructor(h,d,m){this.segmentGroup=h,this.processChildren=d,this.index=m}}function Pe(f,h,d){if(f||(f=new xe([],{})),0===f.segments.length&&f.hasChildren())return X(f,h,d);const m=function le(f,h,d){let m=0,b=h;const $={match:!1,pathIndex:0,commandIndex:0};for(;b=d.length)return $;const z=f.segments[b],ve=d[m];if(fn(ve))break;const We=`${ve}`,ft=m0&&void 0===We)break;if(We&&ft&&"object"==typeof ft&&void 0===ft.outlets){if(!ot(We,ft,z))return $;m+=2}else{if(!ot(We,{},z))return $;m++}b++}return{match:!0,pathIndex:b,commandIndex:m}}(f,h,d),b=d.slice(m.commandIndex);if(m.match&&m.pathIndex{"string"==typeof $&&($=[$]),null!==$&&(b[z]=Pe(f.children[z],h,$))}),Et(f.children,($,z)=>{void 0===m[z]&&(b[z]=$)}),new xe(f.segments,b)}}function Ie(f,h,d){const m=f.segments.slice(0,h);let b=0;for(;b{"string"==typeof d&&(d=[d]),null!==d&&(h[m]=Ie(new xe([],{}),0,d))}),h}function Re(f){const h={};return Et(f,(d,m)=>h[m]=`${d}`),h}function ot(f,h,d){return f==d.path&&en(h,d.parameters)}class st{constructor(h,d){this.id=h,this.url=d}}class Mt extends st{constructor(h,d,m="imperative",b=null){super(h,d),this.type=0,this.navigationTrigger=m,this.restoredState=b}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class Wt extends st{constructor(h,d,m){super(h,d),this.urlAfterRedirects=m,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class Bt extends st{constructor(h,d,m,b){super(h,d),this.reason=m,this.code=b,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class An extends st{constructor(h,d,m,b){super(h,d),this.error=m,this.target=b,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class Rn extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Pn extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class ur extends st{constructor(h,d,m,b,$){super(h,d),this.urlAfterRedirects=m,this.state=b,this.shouldActivate=$,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class mr extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class an extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class fo{constructor(h){this.route=h,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class ho{constructor(h){this.route=h,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class Zr{constructor(h){this.snapshot=h,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class jr{constructor(h){this.snapshot=h,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class xr{constructor(h){this.snapshot=h,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Or{constructor(h){this.snapshot=h,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class ar{constructor(h,d,m){this.routerEvent=h,this.position=d,this.anchor=m,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class po{constructor(h){this._root=h}get root(){return this._root.value}parent(h){const d=this.pathFromRoot(h);return d.length>1?d[d.length-2]:null}children(h){const d=Fn(h,this._root);return d?d.children.map(m=>m.value):[]}firstChild(h){const d=Fn(h,this._root);return d&&d.children.length>0?d.children[0].value:null}siblings(h){const d=zn(h,this._root);return d.length<2?[]:d[d.length-2].children.map(b=>b.value).filter(b=>b!==h)}pathFromRoot(h){return zn(h,this._root).map(d=>d.value)}}function Fn(f,h){if(f===h.value)return h;for(const d of h.children){const m=Fn(f,d);if(m)return m}return null}function zn(f,h){if(f===h.value)return[h];for(const d of h.children){const m=zn(f,d);if(m.length)return m.unshift(h),m}return[]}class qn{constructor(h,d){this.value=h,this.children=d}toString(){return`TreeNode(${this.value})`}}function dr(f){const h={};return f&&f.children.forEach(d=>h[d.value.outlet]=d),h}class Sr extends po{constructor(h,d){super(h),this.snapshot=d,vo(this,h)}toString(){return this.snapshot.toString()}}function Gn(f,h){const d=function go(f,h){const z=new Pr([],{},{},"",{},it,h,null,f.root,-1,{});return new xo("",new qn(z,[]))}(f,h),m=new ge.X([new se("",{})]),b=new ge.X({}),$=new ge.X({}),z=new ge.X({}),ve=new ge.X(""),We=new Rr(m,b,z,ve,$,it,h,d.root);return We.snapshot=d.root,new Sr(new qn(We,[]),d)}class Rr{constructor(h,d,m,b,$,z,ve,We){this.url=h,this.params=d,this.queryParams=m,this.fragment=b,this.data=$,this.outlet=z,this.component=ve,this.title=this.data?.pipe((0,ce.U)(ft=>ft[Xt]))??(0,N.of)(void 0),this._futureSnapshot=We}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe((0,ce.U)(h=>Vt(h)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe((0,ce.U)(h=>Vt(h)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function vr(f,h="emptyOnly"){const d=f.pathFromRoot;let m=0;if("always"!==h)for(m=d.length-1;m>=1;){const b=d[m],$=d[m-1];if(b.routeConfig&&""===b.routeConfig.path)m--;else{if($.component)break;m--}}return function mo(f){return f.reduce((h,d)=>({params:{...h.params,...d.params},data:{...h.data,...d.data},resolve:{...d.data,...h.resolve,...d.routeConfig?.data,...d._resolvedData}}),{params:{},data:{},resolve:{}})}(d.slice(m))}class Pr{constructor(h,d,m,b,$,z,ve,We,ft,bt,jt){this.url=h,this.params=d,this.queryParams=m,this.fragment=b,this.data=$,this.outlet=z,this.component=ve,this.routeConfig=We,this._urlSegment=ft,this._lastPathIndex=bt,this._resolve=jt}get title(){return this.data?.[Xt]}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=Vt(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Vt(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(m=>m.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class xo extends po{constructor(h,d){super(d),this.url=h,vo(this,d)}toString(){return yo(this._root)}}function vo(f,h){h.value._routerState=f,h.children.forEach(d=>vo(f,d))}function yo(f){const h=f.children.length>0?` { ${f.children.map(yo).join(", ")} } `:"";return`${f.value}${h}`}function Oo(f){if(f.snapshot){const h=f.snapshot,d=f._futureSnapshot;f.snapshot=d,en(h.queryParams,d.queryParams)||f.queryParams.next(d.queryParams),h.fragment!==d.fragment&&f.fragment.next(d.fragment),en(h.params,d.params)||f.params.next(d.params),function Vn(f,h){if(f.length!==h.length)return!1;for(let d=0;den(d.parameters,h[m].parameters))}(f.url,h.url);return d&&!(!f.parent!=!h.parent)&&(!f.parent||Jr(f.parent,h.parent))}function Fr(f,h,d){if(d&&f.shouldReuseRoute(h.value,d.value.snapshot)){const m=d.value;m._futureSnapshot=h.value;const b=function Yo(f,h,d){return h.children.map(m=>{for(const b of d.children)if(f.shouldReuseRoute(m.value,b.value.snapshot))return Fr(f,m,b);return Fr(f,m)})}(f,h,d);return new qn(m,b)}{if(f.shouldAttach(h.value)){const $=f.retrieve(h.value);if(null!==$){const z=$.route;return z.value._futureSnapshot=h.value,z.children=h.children.map(ve=>Fr(f,ve)),z}}const m=function si(f){return new Rr(new ge.X(f.url),new ge.X(f.params),new ge.X(f.queryParams),new ge.X(f.fragment),new ge.X(f.data),f.outlet,f.component,f)}(h.value),b=h.children.map($=>Fr(f,$));return new qn(m,b)}}const Ro="ngNavigationCancelingError";function Ur(f,h){const{redirectTo:d,navigationBehaviorOptions:m}=xn(h)?{redirectTo:h,navigationBehaviorOptions:void 0}:h,b=zr(!1,0,h);return b.url=d,b.navigationBehaviorOptions=m,b}function zr(f,h,d){const m=new Error("NavigationCancelingError: "+(f||""));return m[Ro]=!0,m.cancellationCode=h,d&&(m.url=d),m}function Do(f){return Gr(f)&&xn(f.url)}function Gr(f){return f&&f[Ro]}class Yr{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.injector=null,this.children=new fr,this.attachRef=null}}let fr=(()=>{class f{constructor(){this.contexts=new Map}onChildOutletCreated(d,m){const b=this.getOrCreateContext(d);b.outlet=m,this.contexts.set(d,b)}onChildOutletDestroyed(d){const m=this.getContext(d);m&&(m.outlet=null,m.attachRef=null)}onOutletDeactivated(){const d=this.contexts;return this.contexts=new Map,d}onOutletReAttached(d){this.contexts=d}getOrCreateContext(d){let m=this.getContext(d);return m||(m=new Yr,this.contexts.set(d,m)),m}getContext(d){return this.contexts.get(d)||null}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const hr=!1;let ai=(()=>{class f{constructor(){this.activated=null,this._activatedRoute=null,this.name=it,this.activateEvents=new o.vpe,this.deactivateEvents=new o.vpe,this.attachEvents=new o.vpe,this.detachEvents=new o.vpe,this.parentContexts=(0,o.f3M)(fr),this.location=(0,o.f3M)(o.s_b),this.changeDetector=(0,o.f3M)(o.sBO),this.environmentInjector=(0,o.f3M)(o.lqb)}ngOnChanges(d){if(d.name){const{firstChange:m,previousValue:b}=d.name;if(m)return;this.isTrackedInParentContexts(b)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(b)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name)}isTrackedInParentContexts(d){return this.parentContexts.getContext(d)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const d=this.parentContexts.getContext(this.name);d?.route&&(d.attachRef?this.attach(d.attachRef,d.route):this.activateWith(d.route,d.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new o.vHH(4012,hr);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new o.vHH(4012,hr);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new o.vHH(4012,hr);this.location.detach();const d=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(d.instance),d}attach(d,m){this.activated=d,this._activatedRoute=m,this.location.insert(d.hostView),this.attachEvents.emit(d.instance)}deactivate(){if(this.activated){const d=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(d)}}activateWith(d,m){if(this.isActivated)throw new o.vHH(4013,hr);this._activatedRoute=d;const b=this.location,z=d.snapshot.component,ve=this.parentContexts.getOrCreateContext(this.name).children,We=new nr(d,ve,b.injector);if(m&&function li(f){return!!f.resolveComponentFactory}(m)){const ft=m.resolveComponentFactory(z);this.activated=b.createComponent(ft,b.length,We)}else this.activated=b.createComponent(z,{index:b.length,injector:We,environmentInjector:m??this.environmentInjector});this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275dir=o.lG2({type:f,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[o.TTD]}),f})();class nr{constructor(h,d,m){this.route=h,this.childContexts=d,this.parent=m}get(h,d){return h===Rr?this.route:h===fr?this.childContexts:this.parent.get(h,d)}}let kr=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275cmp=o.Xpm({type:f,selectors:[["ng-component"]],standalone:!0,features:[o.jDz],decls:1,vars:0,template:function(d,m){1&d&&o._UZ(0,"router-outlet")},dependencies:[ai],encapsulation:2}),f})();function bo(f,h){return f.providers&&!f._injector&&(f._injector=(0,o.MMx)(f.providers,h,`Route: ${f.path}`)),f._injector??h}function Nr(f){const h=f.children&&f.children.map(Nr),d=h?{...f,children:h}:{...f};return!d.component&&!d.loadComponent&&(h||d.loadChildren)&&d.outlet&&d.outlet!==it&&(d.component=kr),d}function Zn(f){return f.outlet||it}function Lr(f,h){const d=f.filter(m=>Zn(m)===h);return d.push(...f.filter(m=>Zn(m)!==h)),d}function Po(f){if(!f)return null;if(f.routeConfig?._injector)return f.routeConfig._injector;for(let h=f.parent;h;h=h.parent){const d=h.routeConfig;if(d?._loadedInjector)return d._loadedInjector;if(d?._injector)return d._injector}return null}class Sn{constructor(h,d,m,b){this.routeReuseStrategy=h,this.futureState=d,this.currState=m,this.forwardEvent=b}activate(h){const d=this.futureState._root,m=this.currState?this.currState._root:null;this.deactivateChildRoutes(d,m,h),Oo(this.futureState.root),this.activateChildRoutes(d,m,h)}deactivateChildRoutes(h,d,m){const b=dr(d);h.children.forEach($=>{const z=$.value.outlet;this.deactivateRoutes($,b[z],m),delete b[z]}),Et(b,($,z)=>{this.deactivateRouteAndItsChildren($,m)})}deactivateRoutes(h,d,m){const b=h.value,$=d?d.value:null;if(b===$)if(b.component){const z=m.getContext(b.outlet);z&&this.deactivateChildRoutes(h,d,z.children)}else this.deactivateChildRoutes(h,d,m);else $&&this.deactivateRouteAndItsChildren(d,m)}deactivateRouteAndItsChildren(h,d){h.value.component&&this.routeReuseStrategy.shouldDetach(h.value.snapshot)?this.detachAndStoreRouteSubtree(h,d):this.deactivateRouteAndOutlet(h,d)}detachAndStoreRouteSubtree(h,d){const m=d.getContext(h.value.outlet),b=m&&h.value.component?m.children:d,$=dr(h);for(const z of Object.keys($))this.deactivateRouteAndItsChildren($[z],b);if(m&&m.outlet){const z=m.outlet.detach(),ve=m.children.onOutletDeactivated();this.routeReuseStrategy.store(h.value.snapshot,{componentRef:z,route:h,contexts:ve})}}deactivateRouteAndOutlet(h,d){const m=d.getContext(h.value.outlet),b=m&&h.value.component?m.children:d,$=dr(h);for(const z of Object.keys($))this.deactivateRouteAndItsChildren($[z],b);m&&m.outlet&&(m.outlet.deactivate(),m.children.onOutletDeactivated(),m.attachRef=null,m.resolver=null,m.route=null)}activateChildRoutes(h,d,m){const b=dr(d);h.children.forEach($=>{this.activateRoutes($,b[$.value.outlet],m),this.forwardEvent(new Or($.value.snapshot))}),h.children.length&&this.forwardEvent(new jr(h.value.snapshot))}activateRoutes(h,d,m){const b=h.value,$=d?d.value:null;if(Oo(b),b===$)if(b.component){const z=m.getOrCreateContext(b.outlet);this.activateChildRoutes(h,d,z.children)}else this.activateChildRoutes(h,d,m);else if(b.component){const z=m.getOrCreateContext(b.outlet);if(this.routeReuseStrategy.shouldAttach(b.snapshot)){const ve=this.routeReuseStrategy.retrieve(b.snapshot);this.routeReuseStrategy.store(b.snapshot,null),z.children.onOutletReAttached(ve.contexts),z.attachRef=ve.componentRef,z.route=ve.route.value,z.outlet&&z.outlet.attach(ve.componentRef,ve.route.value),Oo(ve.route.value),this.activateChildRoutes(h,null,z.children)}else{const ve=Po(b.snapshot),We=ve?.get(o._Vd)??null;z.attachRef=null,z.route=b,z.resolver=We,z.injector=ve,z.outlet&&z.outlet.activateWith(b,z.injector),this.activateChildRoutes(h,null,z.children)}}else this.activateChildRoutes(h,null,m)}}class Fo{constructor(h){this.path=h,this.route=this.path[this.path.length-1]}}class wo{constructor(h,d){this.component=h,this.route=d}}function ko(f,h,d){const m=f._root;return Kr(m,h?h._root:null,d,[m.value])}function to(f,h){const d=Symbol(),m=h.get(f,d);return m===d?"function"!=typeof f||(0,o.Z0I)(f)?h.get(f):f:m}function Kr(f,h,d,m,b={canDeactivateChecks:[],canActivateChecks:[]}){const $=dr(h);return f.children.forEach(z=>{(function no(f,h,d,m,b={canDeactivateChecks:[],canActivateChecks:[]}){const $=f.value,z=h?h.value:null,ve=d?d.getContext(f.value.outlet):null;if(z&&$.routeConfig===z.routeConfig){const We=function rr(f,h,d){if("function"==typeof d)return d(f,h);switch(d){case"pathParamsChange":return!He(f.url,h.url);case"pathParamsOrQueryParamsChange":return!He(f.url,h.url)||!en(f.queryParams,h.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Jr(f,h)||!en(f.queryParams,h.queryParams);default:return!Jr(f,h)}}(z,$,$.routeConfig.runGuardsAndResolvers);We?b.canActivateChecks.push(new Fo(m)):($.data=z.data,$._resolvedData=z._resolvedData),Kr(f,h,$.component?ve?ve.children:null:d,m,b),We&&ve&&ve.outlet&&ve.outlet.isActivated&&b.canDeactivateChecks.push(new wo(ve.outlet.component,z))}else z&&ro(h,ve,b),b.canActivateChecks.push(new Fo(m)),Kr(f,null,$.component?ve?ve.children:null:d,m,b)})(z,$[z.value.outlet],d,m.concat([z.value]),b),delete $[z.value.outlet]}),Et($,(z,ve)=>ro(z,d.getContext(ve),b)),b}function ro(f,h,d){const m=dr(f),b=f.value;Et(m,($,z)=>{ro($,b.component?h?h.children.getContext(z):null:h,d)}),d.canDeactivateChecks.push(new wo(b.component&&h&&h.outlet&&h.outlet.isActivated?h.outlet.component:null,b))}function hn(f){return"function"==typeof f}function Je(f){return f instanceof W||"EmptyError"===f?.name}const at=Symbol("INITIAL_VALUE");function Dt(){return(0,Ae.w)(f=>E(f.map(h=>h.pipe((0,De.q)(1),function ue(...f){const h=(0,G.yG)(f);return(0,Q.e)((d,m)=>{(h?ke(f,d,h):ke(f,d)).subscribe(m)})}(at)))).pipe((0,ce.U)(h=>{for(const d of h)if(!0!==d){if(d===at)return at;if(!1===d||d instanceof En)return d}return!0}),(0,de.h)(h=>h!==at),(0,De.q)(1)))}function br(f){return(0,Be.z)((0,Ue.b)(h=>{if(xn(h))throw Ur(0,h)}),(0,ce.U)(h=>!0===h))}const ci={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function ga(f,h,d,m,b){const $=Gi(f,h,d);return $.matched?function zi(f,h,d,m){const b=h.canMatch;if(!b||0===b.length)return(0,N.of)(!0);const $=b.map(z=>{const ve=to(z,f);return ut(function g(f){return f&&hn(f.canMatch)}(ve)?ve.canMatch(h,d):f.runInContext(()=>ve(h,d)))});return(0,N.of)($).pipe(Dt(),br())}(m=bo(h,m),h,d).pipe((0,ce.U)(z=>!0===z?$:{...ci})):(0,N.of)($)}function Gi(f,h,d){if(""===h.path)return"full"===h.pathMatch&&(f.hasChildren()||d.length>0)?{...ci}:{matched:!0,consumedSegments:[],remainingSegments:d,parameters:{},positionalParamSegments:{}};const b=(h.matcher||rn)(d,f,h);if(!b)return{...ci};const $={};Et(b.posParams,(ve,We)=>{$[We]=ve.path});const z=b.consumed.length>0?{...$,...b.consumed[b.consumed.length-1].parameters}:$;return{matched:!0,consumedSegments:b.consumed,remainingSegments:d.slice(b.consumed.length),parameters:z,positionalParamSegments:b.posParams??{}}}function Yi(f,h,d,m){if(d.length>0&&function oo(f,h,d){return d.some(m=>io(f,h,m)&&Zn(m)!==it)}(f,d,m)){const $=new xe(h,function lr(f,h,d,m){const b={};b[it]=m,m._sourceSegment=f,m._segmentIndexShift=h.length;for(const $ of d)if(""===$.path&&Zn($)!==it){const z=new xe([],{});z._sourceSegment=f,z._segmentIndexShift=h.length,b[Zn($)]=z}return b}(f,h,m,new xe(d,f.children)));return $._sourceSegment=f,$._segmentIndexShift=h.length,{segmentGroup:$,slicedSegments:[]}}if(0===d.length&&function As(f,h,d){return d.some(m=>io(f,h,m))}(f,d,m)){const $=new xe(f.segments,function Ms(f,h,d,m,b){const $={};for(const z of m)if(io(f,d,z)&&!b[Zn(z)]){const ve=new xe([],{});ve._sourceSegment=f,ve._segmentIndexShift=h.length,$[Zn(z)]=ve}return{...b,...$}}(f,h,d,m,f.children));return $._sourceSegment=f,$._segmentIndexShift=h.length,{segmentGroup:$,slicedSegments:d}}const b=new xe(f.segments,f.children);return b._sourceSegment=f,b._segmentIndexShift=h.length,{segmentGroup:b,slicedSegments:d}}function io(f,h,d){return(!(f.hasChildren()||h.length>0)||"full"!==d.pathMatch)&&""===d.path}function Br(f,h,d,m){return!!(Zn(f)===m||m!==it&&io(h,d,f))&&("**"===f.path||Gi(h,f,d).matched)}function Ts(f,h,d){return 0===h.length&&!f.children[d]}const qo=!1;class ui{constructor(h){this.segmentGroup=h||null}}class xs{constructor(h){this.urlTree=h}}function No(f){return oe(new ui(f))}function Mi(f){return oe(new xs(f))}class Rs{constructor(h,d,m,b,$){this.injector=h,this.configLoader=d,this.urlSerializer=m,this.urlTree=b,this.config=$,this.allowRedirects=!0}apply(){const h=Yi(this.urlTree.root,[],[],this.config).segmentGroup,d=new xe(h.segments,h.children);return this.expandSegmentGroup(this.injector,this.config,d,it).pipe((0,ce.U)($=>this.createUrlTree($n($),this.urlTree.queryParams,this.urlTree.fragment))).pipe(St($=>{if($ instanceof xs)return this.allowRedirects=!1,this.match($.urlTree);throw $ instanceof ui?this.noMatchError($):$}))}match(h){return this.expandSegmentGroup(this.injector,this.config,h.root,it).pipe((0,ce.U)(b=>this.createUrlTree($n(b),h.queryParams,h.fragment))).pipe(St(b=>{throw b instanceof ui?this.noMatchError(b):b}))}noMatchError(h){return new o.vHH(4002,qo)}createUrlTree(h,d,m){const b=sr(h);return new En(b,d,m)}expandSegmentGroup(h,d,m,b){return 0===m.segments.length&&m.hasChildren()?this.expandChildren(h,d,m).pipe((0,ce.U)($=>new xe([],$))):this.expandSegment(h,m,d,m.segments,b,!0)}expandChildren(h,d,m){const b=[];for(const $ of Object.keys(m.children))"primary"===$?b.unshift($):b.push($);return(0,x.D)(b).pipe((0,et.b)($=>{const z=m.children[$],ve=Lr(d,$);return this.expandSegmentGroup(h,ve,z,$).pipe((0,ce.U)(We=>({segment:We,outlet:$})))}),nn(($,z)=>($[z.outlet]=z.segment,$),{}),Rt())}expandSegment(h,d,m,b,$,z){return(0,x.D)(m).pipe((0,et.b)(ve=>this.expandSegmentAgainstRoute(h,d,m,ve,b,$,z).pipe(St(ft=>{if(ft instanceof ui)return(0,N.of)(null);throw ft}))),dt(ve=>!!ve),St((ve,We)=>{if(Je(ve))return Ts(d,b,$)?(0,N.of)(new xe([],{})):No(d);throw ve}))}expandSegmentAgainstRoute(h,d,m,b,$,z,ve){return Br(b,d,$,z)?void 0===b.redirectTo?this.matchSegmentAgainstRoute(h,d,b,$,z):ve&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z):No(d):No(d)}expandSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z){return"**"===b.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(h,m,b,z):this.expandRegularSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z)}expandWildCardWithParamsAgainstRouteUsingRedirect(h,d,m,b){const $=this.applyRedirectCommands([],m.redirectTo,{});return m.redirectTo.startsWith("/")?Mi($):this.lineralizeSegments(m,$).pipe((0,ne.z)(z=>{const ve=new xe(z,{});return this.expandSegment(h,ve,d,z,b,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z){const{matched:ve,consumedSegments:We,remainingSegments:ft,positionalParamSegments:bt}=Gi(d,b,$);if(!ve)return No(d);const jt=this.applyRedirectCommands(We,b.redirectTo,bt);return b.redirectTo.startsWith("/")?Mi(jt):this.lineralizeSegments(b,jt).pipe((0,ne.z)(wn=>this.expandSegment(h,d,m,wn.concat(ft),z,!1)))}matchSegmentAgainstRoute(h,d,m,b,$){return"**"===m.path?(h=bo(m,h),m.loadChildren?(m._loadedRoutes?(0,N.of)({routes:m._loadedRoutes,injector:m._loadedInjector}):this.configLoader.loadChildren(h,m)).pipe((0,ce.U)(ve=>(m._loadedRoutes=ve.routes,m._loadedInjector=ve.injector,new xe(b,{})))):(0,N.of)(new xe(b,{}))):ga(d,m,b,h).pipe((0,Ae.w)(({matched:z,consumedSegments:ve,remainingSegments:We})=>z?this.getChildConfig(h=m._injector??h,m,b).pipe((0,ne.z)(bt=>{const jt=bt.injector??h,wn=bt.routes,{segmentGroup:lo,slicedSegments:$o}=Yi(d,ve,We,wn),Ci=new xe(lo.segments,lo.children);if(0===$o.length&&Ci.hasChildren())return this.expandChildren(jt,wn,Ci).pipe((0,ce.U)(_i=>new xe(ve,_i)));if(0===wn.length&&0===$o.length)return(0,N.of)(new xe(ve,{}));const Hr=Zn(m)===$;return this.expandSegment(jt,Ci,wn,$o,Hr?it:$,!0).pipe((0,ce.U)(Ri=>new xe(ve.concat(Ri.segments),Ri.children)))})):No(d)))}getChildConfig(h,d,m){return d.children?(0,N.of)({routes:d.children,injector:h}):d.loadChildren?void 0!==d._loadedRoutes?(0,N.of)({routes:d._loadedRoutes,injector:d._loadedInjector}):function Xo(f,h,d,m){const b=h.canLoad;if(void 0===b||0===b.length)return(0,N.of)(!0);const $=b.map(z=>{const ve=to(z,f);return ut(function C(f){return f&&hn(f.canLoad)}(ve)?ve.canLoad(h,d):f.runInContext(()=>ve(h,d)))});return(0,N.of)($).pipe(Dt(),br())}(h,d,m).pipe((0,ne.z)(b=>b?this.configLoader.loadChildren(h,d).pipe((0,Ue.b)($=>{d._loadedRoutes=$.routes,d._loadedInjector=$.injector})):function Wi(f){return oe(zr(qo,3))}())):(0,N.of)({routes:[],injector:h})}lineralizeSegments(h,d){let m=[],b=d.root;for(;;){if(m=m.concat(b.segments),0===b.numberOfChildren)return(0,N.of)(m);if(b.numberOfChildren>1||!b.children[it])return oe(new o.vHH(4e3,qo));b=b.children[it]}}applyRedirectCommands(h,d,m){return this.applyRedirectCreateUrlTree(d,this.urlSerializer.parse(d),h,m)}applyRedirectCreateUrlTree(h,d,m,b){const $=this.createSegmentGroup(h,d.root,m,b);return new En($,this.createQueryParams(d.queryParams,this.urlTree.queryParams),d.fragment)}createQueryParams(h,d){const m={};return Et(h,(b,$)=>{if("string"==typeof b&&b.startsWith(":")){const ve=b.substring(1);m[$]=d[ve]}else m[$]=b}),m}createSegmentGroup(h,d,m,b){const $=this.createSegments(h,d.segments,m,b);let z={};return Et(d.children,(ve,We)=>{z[We]=this.createSegmentGroup(h,ve,m,b)}),new xe($,z)}createSegments(h,d,m,b){return d.map($=>$.path.startsWith(":")?this.findPosParam(h,$,b):this.findOrReturn($,m))}findPosParam(h,d,m){const b=m[d.path.substring(1)];if(!b)throw new o.vHH(4001,qo);return b}findOrReturn(h,d){let m=0;for(const b of d){if(b.path===h.path)return d.splice(m),b;m++}return h}}class A{}class ae{constructor(h,d,m,b,$,z,ve){this.injector=h,this.rootComponentType=d,this.config=m,this.urlTree=b,this.url=$,this.paramsInheritanceStrategy=z,this.urlSerializer=ve}recognize(){const h=Yi(this.urlTree.root,[],[],this.config.filter(d=>void 0===d.redirectTo)).segmentGroup;return this.processSegmentGroup(this.injector,this.config,h,it).pipe((0,ce.U)(d=>{if(null===d)return null;const m=new Pr([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},it,this.rootComponentType,null,this.urlTree.root,-1,{}),b=new qn(m,d),$=new xo(this.url,b);return this.inheritParamsAndData($._root),$}))}inheritParamsAndData(h){const d=h.value,m=vr(d,this.paramsInheritanceStrategy);d.params=Object.freeze(m.params),d.data=Object.freeze(m.data),h.children.forEach(b=>this.inheritParamsAndData(b))}processSegmentGroup(h,d,m,b){return 0===m.segments.length&&m.hasChildren()?this.processChildren(h,d,m):this.processSegment(h,d,m,m.segments,b)}processChildren(h,d,m){return(0,x.D)(Object.keys(m.children)).pipe((0,et.b)(b=>{const $=m.children[b],z=Lr(d,b);return this.processSegmentGroup(h,z,$,b)}),nn((b,$)=>b&&$?(b.push(...$),b):null),(0,Kt.o)(b=>null!==b),Ee(null),Rt(),(0,ce.U)(b=>{if(null===b)return null;const $=qt(b);return function $e(f){f.sort((h,d)=>h.value.outlet===it?-1:d.value.outlet===it?1:h.value.outlet.localeCompare(d.value.outlet))}($),$}))}processSegment(h,d,m,b,$){return(0,x.D)(d).pipe((0,et.b)(z=>this.processSegmentAgainstRoute(z._injector??h,z,m,b,$)),dt(z=>!!z),St(z=>{if(Je(z))return Ts(m,b,$)?(0,N.of)([]):(0,N.of)(null);throw z}))}processSegmentAgainstRoute(h,d,m,b,$){if(d.redirectTo||!Br(d,m,b,$))return(0,N.of)(null);let z;if("**"===d.path){const ve=b.length>0?ht(b).parameters:{},We=Jt(m)+b.length,ft=new Pr(b,ve,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,yn(d),Zn(d),d.component??d._loadedComponent??null,d,un(m),We,Wn(d));z=(0,N.of)({snapshot:ft,consumedSegments:[],remainingSegments:[]})}else z=ga(m,d,b,h).pipe((0,ce.U)(({matched:ve,consumedSegments:We,remainingSegments:ft,parameters:bt})=>{if(!ve)return null;const jt=Jt(m)+We.length;return{snapshot:new Pr(We,bt,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,yn(d),Zn(d),d.component??d._loadedComponent??null,d,un(m),jt,Wn(d)),consumedSegments:We,remainingSegments:ft}}));return z.pipe((0,Ae.w)(ve=>{if(null===ve)return(0,N.of)(null);const{snapshot:We,consumedSegments:ft,remainingSegments:bt}=ve;h=d._injector??h;const jt=d._loadedInjector??h,wn=function Xe(f){return f.children?f.children:f.loadChildren?f._loadedRoutes:[]}(d),{segmentGroup:lo,slicedSegments:$o}=Yi(m,ft,bt,wn.filter(Hr=>void 0===Hr.redirectTo));if(0===$o.length&&lo.hasChildren())return this.processChildren(jt,wn,lo).pipe((0,ce.U)(Hr=>null===Hr?null:[new qn(We,Hr)]));if(0===wn.length&&0===$o.length)return(0,N.of)([new qn(We,[])]);const Ci=Zn(d)===$;return this.processSegment(jt,wn,lo,$o,Ci?it:$).pipe((0,ce.U)(Hr=>null===Hr?null:[new qn(We,Hr)]))}))}}function lt(f){const h=f.value.routeConfig;return h&&""===h.path&&void 0===h.redirectTo}function qt(f){const h=[],d=new Set;for(const m of f){if(!lt(m)){h.push(m);continue}const b=h.find($=>m.value.routeConfig===$.value.routeConfig);void 0!==b?(b.children.push(...m.children),d.add(b)):h.push(m)}for(const m of d){const b=qt(m.children);h.push(new qn(m.value,b))}return h.filter(m=>!d.has(m))}function un(f){let h=f;for(;h._sourceSegment;)h=h._sourceSegment;return h}function Jt(f){let h=f,d=h._segmentIndexShift??0;for(;h._sourceSegment;)h=h._sourceSegment,d+=h._segmentIndexShift??0;return d-1}function yn(f){return f.data||{}}function Wn(f){return f.resolve||{}}function Ai(f){return"string"==typeof f.title||null===f.title}function so(f){return(0,Ae.w)(h=>{const d=f(h);return d?(0,x.D)(d).pipe((0,ce.U)(()=>h)):(0,N.of)(h)})}class gl{constructor(h){this.router=h,this.currentNavigation=null}setupNavigations(h){const d=this.router.events;return h.pipe((0,de.h)(m=>0!==m.id),(0,ce.U)(m=>({...m,extractedUrl:this.router.urlHandlingStrategy.extract(m.rawUrl)})),(0,Ae.w)(m=>{let b=!1,$=!1;return(0,N.of)(m).pipe((0,Ue.b)(z=>{this.currentNavigation={id:z.id,initialUrl:z.rawUrl,extractedUrl:z.extractedUrl,trigger:z.source,extras:z.extras,previousNavigation:this.router.lastSuccessfulNavigation?{...this.router.lastSuccessfulNavigation,previousNavigation:null}:null}}),(0,Ae.w)(z=>{const ve=this.router.browserUrlTree.toString(),We=!this.router.navigated||z.extractedUrl.toString()!==ve||ve!==this.router.currentUrlTree.toString();if(("reload"===this.router.onSameUrlNavigation||We)&&this.router.urlHandlingStrategy.shouldProcessUrl(z.rawUrl))return va(z.source)&&(this.router.browserUrlTree=z.extractedUrl),(0,N.of)(z).pipe((0,Ae.w)(bt=>{const jt=this.router.transitions.getValue();return d.next(new Mt(bt.id,this.router.serializeUrl(bt.extractedUrl),bt.source,bt.restoredState)),jt!==this.router.transitions.getValue()?be.E:Promise.resolve(bt)}),function Ki(f,h,d,m){return(0,Ae.w)(b=>function ma(f,h,d,m,b){return new Rs(f,h,d,m,b).apply()}(f,h,d,b.extractedUrl,m).pipe((0,ce.U)($=>({...b,urlAfterRedirects:$}))))}(this.router.ngModule.injector,this.router.configLoader,this.router.urlSerializer,this.router.config),(0,Ue.b)(bt=>{this.currentNavigation={...this.currentNavigation,finalUrl:bt.urlAfterRedirects},m.urlAfterRedirects=bt.urlAfterRedirects}),function Eo(f,h,d,m,b){return(0,ne.z)($=>function H(f,h,d,m,b,$,z="emptyOnly"){return new ae(f,h,d,m,b,z,$).recognize().pipe((0,Ae.w)(ve=>null===ve?function D(f){return new M.y(h=>h.error(f))}(new A):(0,N.of)(ve)))}(f,h,d,$.urlAfterRedirects,m.serialize($.urlAfterRedirects),m,b).pipe((0,ce.U)(z=>({...$,targetSnapshot:z}))))}(this.router.ngModule.injector,this.router.rootComponentType,this.router.config,this.router.urlSerializer,this.router.paramsInheritanceStrategy),(0,Ue.b)(bt=>{if(m.targetSnapshot=bt.targetSnapshot,"eager"===this.router.urlUpdateStrategy){if(!bt.extras.skipLocationChange){const wn=this.router.urlHandlingStrategy.merge(bt.urlAfterRedirects,bt.rawUrl);this.router.setBrowserUrl(wn,bt)}this.router.browserUrlTree=bt.urlAfterRedirects}const jt=new Rn(bt.id,this.router.serializeUrl(bt.extractedUrl),this.router.serializeUrl(bt.urlAfterRedirects),bt.targetSnapshot);d.next(jt)}));if(We&&this.router.rawUrlTree&&this.router.urlHandlingStrategy.shouldProcessUrl(this.router.rawUrlTree)){const{id:jt,extractedUrl:wn,source:lo,restoredState:$o,extras:Ci}=z,Hr=new Mt(jt,this.router.serializeUrl(wn),lo,$o);d.next(Hr);const Cr=Gn(wn,this.router.rootComponentType).snapshot;return m={...z,targetSnapshot:Cr,urlAfterRedirects:wn,extras:{...Ci,skipLocationChange:!1,replaceUrl:!1}},(0,N.of)(m)}return this.router.rawUrlTree=z.rawUrl,z.resolve(null),be.E}),(0,Ue.b)(z=>{const ve=new Pn(z.id,this.router.serializeUrl(z.extractedUrl),this.router.serializeUrl(z.urlAfterRedirects),z.targetSnapshot);this.router.triggerEvent(ve)}),(0,ce.U)(z=>m={...z,guards:ko(z.targetSnapshot,z.currentSnapshot,this.router.rootContexts)}),function Zt(f,h){return(0,ne.z)(d=>{const{targetSnapshot:m,currentSnapshot:b,guards:{canActivateChecks:$,canDeactivateChecks:z}}=d;return 0===z.length&&0===$.length?(0,N.of)({...d,guardsResult:!0}):function bn(f,h,d,m){return(0,x.D)(f).pipe((0,ne.z)(b=>function $r(f,h,d,m,b){const $=h&&h.routeConfig?h.routeConfig.canDeactivate:null;if(!$||0===$.length)return(0,N.of)(!0);const z=$.map(ve=>{const We=Po(h)??b,ft=to(ve,We);return ut(function a(f){return f&&hn(f.canDeactivate)}(ft)?ft.canDeactivate(f,h,d,m):We.runInContext(()=>ft(f,h,d,m))).pipe(dt())});return(0,N.of)(z).pipe(Dt())}(b.component,b.route,d,h,m)),dt(b=>!0!==b,!0))}(z,m,b,f).pipe((0,ne.z)(ve=>ve&&function Ui(f){return"boolean"==typeof f}(ve)?function Ve(f,h,d,m){return(0,x.D)(h).pipe((0,et.b)(b=>ke(function yr(f,h){return null!==f&&h&&h(new Zr(f)),(0,N.of)(!0)}(b.route.parent,m),function At(f,h){return null!==f&&h&&h(new xr(f)),(0,N.of)(!0)}(b.route,m),function Mn(f,h,d){const m=h[h.length-1],$=h.slice(0,h.length-1).reverse().map(z=>function Jn(f){const h=f.routeConfig?f.routeConfig.canActivateChild:null;return h&&0!==h.length?{node:f,guards:h}:null}(z)).filter(z=>null!==z).map(z=>ie(()=>{const ve=z.guards.map(We=>{const ft=Po(z.node)??d,bt=to(We,ft);return ut(function c(f){return f&&hn(f.canActivateChild)}(bt)?bt.canActivateChild(m,f):ft.runInContext(()=>bt(m,f))).pipe(dt())});return(0,N.of)(ve).pipe(Dt())}));return(0,N.of)($).pipe(Dt())}(f,b.path,d),function Dr(f,h,d){const m=h.routeConfig?h.routeConfig.canActivate:null;if(!m||0===m.length)return(0,N.of)(!0);const b=m.map($=>ie(()=>{const z=Po(h)??d,ve=to($,z);return ut(function s(f){return f&&hn(f.canActivate)}(ve)?ve.canActivate(h,f):z.runInContext(()=>ve(h,f))).pipe(dt())}));return(0,N.of)(b).pipe(Dt())}(f,b.route,d))),dt(b=>!0!==b,!0))}(m,$,f,h):(0,N.of)(ve)),(0,ce.U)(ve=>({...d,guardsResult:ve})))})}(this.router.ngModule.injector,z=>this.router.triggerEvent(z)),(0,Ue.b)(z=>{if(m.guardsResult=z.guardsResult,xn(z.guardsResult))throw Ur(0,z.guardsResult);const ve=new ur(z.id,this.router.serializeUrl(z.extractedUrl),this.router.serializeUrl(z.urlAfterRedirects),z.targetSnapshot,!!z.guardsResult);this.router.triggerEvent(ve)}),(0,de.h)(z=>!!z.guardsResult||(this.router.restoreHistory(z),this.router.cancelNavigationTransition(z,"",3),!1)),so(z=>{if(z.guards.canActivateChecks.length)return(0,N.of)(z).pipe((0,Ue.b)(ve=>{const We=new mr(ve.id,this.router.serializeUrl(ve.extractedUrl),this.router.serializeUrl(ve.urlAfterRedirects),ve.targetSnapshot);this.router.triggerEvent(We)}),(0,Ae.w)(ve=>{let We=!1;return(0,N.of)(ve).pipe(function pr(f,h){return(0,ne.z)(d=>{const{targetSnapshot:m,guards:{canActivateChecks:b}}=d;if(!b.length)return(0,N.of)(d);let $=0;return(0,x.D)(b).pipe((0,et.b)(z=>function Vr(f,h,d,m){const b=f.routeConfig,$=f._resolve;return void 0!==b?.title&&!Ai(b)&&($[Xt]=b.title),function Mr(f,h,d,m){const b=function Lo(f){return[...Object.keys(f),...Object.getOwnPropertySymbols(f)]}(f);if(0===b.length)return(0,N.of)({});const $={};return(0,x.D)(b).pipe((0,ne.z)(z=>function di(f,h,d,m){const b=Po(h)??m,$=to(f,b);return ut($.resolve?$.resolve(h,d):b.runInContext(()=>$(h,d)))}(f[z],h,d,m).pipe(dt(),(0,Ue.b)(ve=>{$[z]=ve}))),wt(1),function pn(f){return(0,ce.U)(()=>f)}($),St(z=>Je(z)?be.E:oe(z)))}($,f,h,m).pipe((0,ce.U)(z=>(f._resolvedData=z,f.data=vr(f,d).resolve,b&&Ai(b)&&(f.data[Xt]=b.title),null)))}(z.route,m,f,h)),(0,Ue.b)(()=>$++),wt(1),(0,ne.z)(z=>$===b.length?(0,N.of)(d):be.E))})}(this.router.paramsInheritanceStrategy,this.router.ngModule.injector),(0,Ue.b)({next:()=>We=!0,complete:()=>{We||(this.router.restoreHistory(ve),this.router.cancelNavigationTransition(ve,"",2))}}))}),(0,Ue.b)(ve=>{const We=new an(ve.id,this.router.serializeUrl(ve.extractedUrl),this.router.serializeUrl(ve.urlAfterRedirects),ve.targetSnapshot);this.router.triggerEvent(We)}))}),so(z=>{const ve=We=>{const ft=[];We.routeConfig?.loadComponent&&!We.routeConfig._loadedComponent&&ft.push(this.router.configLoader.loadComponent(We.routeConfig).pipe((0,Ue.b)(bt=>{We.component=bt}),(0,ce.U)(()=>{})));for(const bt of We.children)ft.push(...ve(bt));return ft};return E(ve(z.targetSnapshot.root)).pipe(Ee(),(0,De.q)(1))}),so(()=>this.router.afterPreactivation()),(0,ce.U)(z=>{const ve=function Go(f,h,d){const m=Fr(f,h._root,d?d._root:void 0);return new Sr(m,h)}(this.router.routeReuseStrategy,z.targetSnapshot,z.currentRouterState);return m={...z,targetRouterState:ve}}),(0,Ue.b)(z=>{this.router.currentUrlTree=z.urlAfterRedirects,this.router.rawUrlTree=this.router.urlHandlingStrategy.merge(z.urlAfterRedirects,z.rawUrl),this.router.routerState=z.targetRouterState,"deferred"===this.router.urlUpdateStrategy&&(z.extras.skipLocationChange||this.router.setBrowserUrl(this.router.rawUrlTree,z),this.router.browserUrlTree=z.urlAfterRedirects)}),((f,h,d)=>(0,ce.U)(m=>(new Sn(h,m.targetRouterState,m.currentRouterState,d).activate(f),m)))(this.router.rootContexts,this.router.routeReuseStrategy,z=>this.router.triggerEvent(z)),(0,Ue.b)({next(){b=!0},complete(){b=!0}}),(0,Pt.x)(()=>{b||$||this.router.cancelNavigationTransition(m,"",1),this.currentNavigation?.id===m.id&&(this.currentNavigation=null)}),St(z=>{if($=!0,Gr(z)){Do(z)||(this.router.navigated=!0,this.router.restoreHistory(m,!0));const ve=new Bt(m.id,this.router.serializeUrl(m.extractedUrl),z.message,z.cancellationCode);if(d.next(ve),Do(z)){const We=this.router.urlHandlingStrategy.merge(z.url,this.router.rawUrlTree),ft={skipLocationChange:m.extras.skipLocationChange,replaceUrl:"eager"===this.router.urlUpdateStrategy||va(m.source)};this.router.scheduleNavigation(We,"imperative",null,ft,{resolve:m.resolve,reject:m.reject,promise:m.promise})}else m.resolve(!1)}else{this.router.restoreHistory(m,!0);const ve=new An(m.id,this.router.serializeUrl(m.extractedUrl),z,m.targetSnapshot??void 0);d.next(ve);try{m.resolve(this.router.errorHandler(z))}catch(We){m.reject(We)}}return be.E}))}))}}function va(f){return"imperative"!==f}let hi=(()=>{class f{buildTitle(d){let m,b=d.root;for(;void 0!==b;)m=this.getResolvedTitleForRoute(b)??m,b=b.children.find($=>$.outlet===it);return m}getResolvedTitleForRoute(d){return d.data[Xt]}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(Ps)},providedIn:"root"}),f})(),Ps=(()=>{class f extends hi{constructor(d){super(),this.title=d}updateTitle(d){const m=this.buildTitle(d);void 0!==m&&this.title.setTitle(m)}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(Ut.Dx))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})(),ya=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(Yu)},providedIn:"root"}),f})();class ml{shouldDetach(h){return!1}store(h,d){}shouldAttach(h){return!1}retrieve(h){return null}shouldReuseRoute(h,d){return h.routeConfig===d.routeConfig}}let Yu=(()=>{class f extends ml{}return f.\u0275fac=function(){let h;return function(m){return(h||(h=o.n5z(f)))(m||f)}}(),f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const pi=new o.OlP("",{providedIn:"root",factory:()=>({})}),ao=new o.OlP("ROUTES");let Xi=(()=>{class f{constructor(d,m){this.injector=d,this.compiler=m,this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap}loadComponent(d){if(this.componentLoaders.get(d))return this.componentLoaders.get(d);if(d._loadedComponent)return(0,N.of)(d._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(d);const m=ut(d.loadComponent()).pipe((0,ce.U)(Zo),(0,Ue.b)($=>{this.onLoadEndListener&&this.onLoadEndListener(d),d._loadedComponent=$}),(0,Pt.x)(()=>{this.componentLoaders.delete(d)})),b=new k(m,()=>new O.x).pipe(T());return this.componentLoaders.set(d,b),b}loadChildren(d,m){if(this.childrenLoaders.get(m))return this.childrenLoaders.get(m);if(m._loadedRoutes)return(0,N.of)({routes:m._loadedRoutes,injector:m._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(m);const $=this.loadModuleFactoryOrRoutes(m.loadChildren).pipe((0,ce.U)(ve=>{this.onLoadEndListener&&this.onLoadEndListener(m);let We,ft,bt=!1;Array.isArray(ve)?ft=ve:(We=ve.create(d).injector,ft=Yt(We.get(ao,[],o.XFs.Self|o.XFs.Optional)));return{routes:ft.map(Nr),injector:We}}),(0,Pt.x)(()=>{this.childrenLoaders.delete(m)})),z=new k($,()=>new O.x).pipe(T());return this.childrenLoaders.set(m,z),z}loadModuleFactoryOrRoutes(d){return ut(d()).pipe((0,ce.U)(Zo),(0,ne.z)(b=>b instanceof o.YKP||Array.isArray(b)?(0,N.of)(b):(0,x.D)(this.compiler.compileModuleAsync(b))))}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(o.zs3),o.LFG(o.Sil))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();function Zo(f){return function ba(f){return f&&"object"==typeof f&&"default"in f}(f)?f.default:f}let vl=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(gi)},providedIn:"root"}),f})(),gi=(()=>{class f{shouldProcessUrl(d){return!0}extract(d){return d}merge(d,m){return d}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();function Zi(f){throw f}function Ku(f,h,d){return h.parse("/")}const Ca={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},_a={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};function Xr(){const f=(0,o.f3M)(pt),h=(0,o.f3M)(fr),d=(0,o.f3M)(te.Ye),m=(0,o.f3M)(o.zs3),b=(0,o.f3M)(o.Sil),$=(0,o.f3M)(ao,{optional:!0})??[],z=(0,o.f3M)(pi,{optional:!0})??{},ve=new or(null,f,h,d,m,b,Yt($));return function yl(f,h){f.errorHandler&&(h.errorHandler=f.errorHandler),f.malformedUriErrorHandler&&(h.malformedUriErrorHandler=f.malformedUriErrorHandler),f.onSameUrlNavigation&&(h.onSameUrlNavigation=f.onSameUrlNavigation),f.paramsInheritanceStrategy&&(h.paramsInheritanceStrategy=f.paramsInheritanceStrategy),f.urlUpdateStrategy&&(h.urlUpdateStrategy=f.urlUpdateStrategy),f.canceledNavigationResolution&&(h.canceledNavigationResolution=f.canceledNavigationResolution)}(z,ve),ve}let or=(()=>{class f{constructor(d,m,b,$,z,ve,We){this.rootComponentType=d,this.urlSerializer=m,this.rootContexts=b,this.location=$,this.config=We,this.lastSuccessfulNavigation=null,this.disposed=!1,this.navigationId=0,this.currentPageId=0,this.isNgZoneEnabled=!1,this.events=new O.x,this.errorHandler=Zi,this.malformedUriErrorHandler=Ku,this.navigated=!1,this.lastSuccessfulId=-1,this.afterPreactivation=()=>(0,N.of)(void 0),this.urlHandlingStrategy=(0,o.f3M)(vl),this.routeReuseStrategy=(0,o.f3M)(ya),this.titleStrategy=(0,o.f3M)(hi),this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.canceledNavigationResolution="replace",this.navigationTransitions=new gl(this),this.configLoader=z.get(Xi),this.configLoader.onLoadEndListener=wn=>this.triggerEvent(new ho(wn)),this.configLoader.onLoadStartListener=wn=>this.triggerEvent(new fo(wn)),this.ngModule=z.get(o.h0i),this.console=z.get(o.c2e);const jt=z.get(o.R0b);this.isNgZoneEnabled=jt instanceof o.R0b&&o.R0b.isInAngularZone(),this.resetConfig(We),this.currentUrlTree=new En,this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=Gn(this.currentUrlTree,this.rootComponentType),this.transitions=new ge.X({id:0,targetPageId:0,currentUrlTree:this.currentUrlTree,extractedUrl:this.urlHandlingStrategy.extract(this.currentUrlTree),urlAfterRedirects:this.urlHandlingStrategy.extract(this.currentUrlTree),rawUrl:this.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:"imperative",restoredState:null,currentSnapshot:this.routerState.snapshot,targetSnapshot:null,currentRouterState:this.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.navigations=this.navigationTransitions.setupNavigations(this.transitions),this.processNavigations()}get browserPageId(){return this.location.getState()?.\u0275routerPageId}resetRootComponentType(d){this.rootComponentType=d,this.routerState.root.component=this.rootComponentType}setTransition(d){this.transitions.next({...this.transitions.value,...d})}initialNavigation(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(d=>{const m="popstate"===d.type?"popstate":"hashchange";"popstate"===m&&setTimeout(()=>{const b={replaceUrl:!0},$=d.state?.navigationId?d.state:null;if(d.state){const ve={...d.state};delete ve.navigationId,delete ve.\u0275routerPageId,0!==Object.keys(ve).length&&(b.state=ve)}const z=this.parseUrl(d.url);this.scheduleNavigation(z,m,$,b)},0)}))}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}triggerEvent(d){this.events.next(d)}resetConfig(d){this.config=d.map(Nr),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.transitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0}createUrlTree(d,m={}){const{relativeTo:b,queryParams:$,fragment:z,queryParamsHandling:ve,preserveFragment:We}=m,ft=b||this.routerState.root,bt=We?this.currentUrlTree.fragment:z;let jt=null;switch(ve){case"merge":jt={...this.currentUrlTree.queryParams,...$};break;case"preserve":jt=this.currentUrlTree.queryParams;break;default:jt=$||null}return null!==jt&&(jt=this.removeEmptyProps(jt)),gr(ft,this.currentUrlTree,d,jt,bt??null)}navigateByUrl(d,m={skipLocationChange:!1}){const b=xn(d)?d:this.parseUrl(d),$=this.urlHandlingStrategy.merge(b,this.rawUrlTree);return this.scheduleNavigation($,"imperative",null,m)}navigate(d,m={skipLocationChange:!1}){return function Ji(f){for(let h=0;h{const $=d[b];return null!=$&&(m[b]=$),m},{})}processNavigations(){this.navigations.subscribe(d=>{this.navigated=!0,this.lastSuccessfulId=d.id,this.currentPageId=d.targetPageId,this.events.next(new Wt(d.id,this.serializeUrl(d.extractedUrl),this.serializeUrl(this.currentUrlTree))),this.lastSuccessfulNavigation=this.getCurrentNavigation(),this.titleStrategy?.updateTitle(this.routerState.snapshot),d.resolve(!0)},d=>{this.console.warn(`Unhandled Navigation Error: ${d}`)})}scheduleNavigation(d,m,b,$,z){if(this.disposed)return Promise.resolve(!1);let ve,We,ft;z?(ve=z.resolve,We=z.reject,ft=z.promise):ft=new Promise((wn,lo)=>{ve=wn,We=lo});const bt=++this.navigationId;let jt;return"computed"===this.canceledNavigationResolution?(0===this.currentPageId&&(b=this.location.getState()),jt=b&&b.\u0275routerPageId?b.\u0275routerPageId:$.replaceUrl||$.skipLocationChange?this.browserPageId??0:(this.browserPageId??0)+1):jt=0,this.setTransition({id:bt,targetPageId:jt,source:m,restoredState:b,currentUrlTree:this.currentUrlTree,rawUrl:d,extras:$,resolve:ve,reject:We,promise:ft,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),ft.catch(wn=>Promise.reject(wn))}setBrowserUrl(d,m){const b=this.urlSerializer.serialize(d),$={...m.extras.state,...this.generateNgRouterState(m.id,m.targetPageId)};this.location.isCurrentPathEqualTo(b)||m.extras.replaceUrl?this.location.replaceState(b,"",$):this.location.go(b,"",$)}restoreHistory(d,m=!1){if("computed"===this.canceledNavigationResolution){const b=this.currentPageId-d.targetPageId;"popstate"!==d.source&&"eager"!==this.urlUpdateStrategy&&this.currentUrlTree!==this.getCurrentNavigation()?.finalUrl||0===b?this.currentUrlTree===this.getCurrentNavigation()?.finalUrl&&0===b&&(this.resetState(d),this.browserUrlTree=d.currentUrlTree,this.resetUrlToCurrentUrlTree()):this.location.historyGo(b)}else"replace"===this.canceledNavigationResolution&&(m&&this.resetState(d),this.resetUrlToCurrentUrlTree())}resetState(d){this.routerState=d.currentRouterState,this.currentUrlTree=d.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,d.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}cancelNavigationTransition(d,m,b){const $=new Bt(d.id,this.serializeUrl(d.extractedUrl),m,b);this.triggerEvent($),d.resolve(!1)}generateNgRouterState(d,m){return"computed"===this.canceledNavigationResolution?{navigationId:d,\u0275routerPageId:m}:{navigationId:d}}}return f.\u0275fac=function(d){o.$Z()},f.\u0275prov=o.Yz7({token:f,factory:function(){return Xr()},providedIn:"root"}),f})(),mi=(()=>{class f{constructor(d,m,b,$,z,ve){this.router=d,this.route=m,this.tabIndexAttribute=b,this.renderer=$,this.el=z,this.locationStrategy=ve,this._preserveFragment=!1,this._skipLocationChange=!1,this._replaceUrl=!1,this.href=null,this.commands=null,this.onChanges=new O.x;const We=z.nativeElement.tagName;this.isAnchorElement="A"===We||"AREA"===We,this.isAnchorElement?this.subscription=d.events.subscribe(ft=>{ft instanceof Wt&&this.updateHref()}):this.setTabIndexIfNotOnNativeEl("0")}set preserveFragment(d){this._preserveFragment=(0,o.D6c)(d)}get preserveFragment(){return this._preserveFragment}set skipLocationChange(d){this._skipLocationChange=(0,o.D6c)(d)}get skipLocationChange(){return this._skipLocationChange}set replaceUrl(d){this._replaceUrl=(0,o.D6c)(d)}get replaceUrl(){return this._replaceUrl}setTabIndexIfNotOnNativeEl(d){null!=this.tabIndexAttribute||this.isAnchorElement||this.applyAttributeValue("tabindex",d)}ngOnChanges(d){this.isAnchorElement&&this.updateHref(),this.onChanges.next(this)}set routerLink(d){null!=d?(this.commands=Array.isArray(d)?d:[d],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(d,m,b,$,z){return!!(null===this.urlTree||this.isAnchorElement&&(0!==d||m||b||$||z||"string"==typeof this.target&&"_self"!=this.target))||(this.router.navigateByUrl(this.urlTree,{skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state}),!this.isAnchorElement)}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){this.href=null!==this.urlTree&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(this.urlTree)):null;const d=null===this.href?null:(0,o.P3R)(this.href,this.el.nativeElement.tagName.toLowerCase(),"href");this.applyAttributeValue("href",d)}applyAttributeValue(d,m){const b=this.renderer,$=this.el.nativeElement;null!==m?b.setAttribute($,d,m):b.removeAttribute($,d)}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}}return f.\u0275fac=function(d){return new(d||f)(o.Y36(or),o.Y36(Rr),o.$8M("tabindex"),o.Y36(o.Qsj),o.Y36(o.SBq),o.Y36(te.S$))},f.\u0275dir=o.lG2({type:f,selectors:[["","routerLink",""]],hostVars:1,hostBindings:function(d,m){1&d&&o.NdJ("click",function($){return m.onClick($.button,$.ctrlKey,$.shiftKey,$.altKey,$.metaKey)}),2&d&&o.uIk("target",m.target)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",relativeTo:"relativeTo",preserveFragment:"preserveFragment",skipLocationChange:"skipLocationChange",replaceUrl:"replaceUrl",routerLink:"routerLink"},standalone:!0,features:[o.TTD]}),f})();class es{}let Dl=(()=>{class f{preload(d,m){return m().pipe(St(()=>(0,N.of)(null)))}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})(),wa=(()=>{class f{constructor(d,m,b,$,z){this.router=d,this.injector=b,this.preloadingStrategy=$,this.loader=z}setUpPreloading(){this.subscription=this.router.events.pipe((0,de.h)(d=>d instanceof Wt),(0,et.b)(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(d,m){const b=[];for(const $ of m){$.providers&&!$._injector&&($._injector=(0,o.MMx)($.providers,d,`Route: ${$.path}`));const z=$._injector??d,ve=$._loadedInjector??z;$.loadChildren&&!$._loadedRoutes&&void 0===$.canLoad||$.loadComponent&&!$._loadedComponent?b.push(this.preloadConfig(z,$)):($.children||$._loadedRoutes)&&b.push(this.processRoutes(ve,$.children??$._loadedRoutes))}return(0,x.D)(b).pipe((0,K.J)())}preloadConfig(d,m){return this.preloadingStrategy.preload(m,()=>{let b;b=m.loadChildren&&void 0===m.canLoad?this.loader.loadChildren(d,m):(0,N.of)(null);const $=b.pipe((0,ne.z)(z=>null===z?(0,N.of)(void 0):(m._loadedRoutes=z.routes,m._loadedInjector=z.injector,this.processRoutes(z.injector??d,z.routes))));if(m.loadComponent&&!m._loadedComponent){const z=this.loader.loadComponent(m);return(0,x.D)([$,z]).pipe((0,K.J)())}return $})}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(or),o.LFG(o.Sil),o.LFG(o.lqb),o.LFG(es),o.LFG(Xi))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const ts=new o.OlP("");let Ns=(()=>{class f{constructor(d,m,b,$={}){this.router=d,this.viewportScroller=m,this.zone=b,this.options=$,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},$.scrollPositionRestoration=$.scrollPositionRestoration||"disabled",$.anchorScrolling=$.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.router.events.subscribe(d=>{d instanceof Mt?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=d.navigationTrigger,this.restoredId=d.restoredState?d.restoredState.navigationId:0):d instanceof Wt&&(this.lastId=d.id,this.scheduleScrollEvent(d,this.router.parseUrl(d.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.router.events.subscribe(d=>{d instanceof ar&&(d.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(d.position):d.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(d.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(d,m){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.router.triggerEvent(new ar(d,"popstate"===this.lastSource?this.store[this.restoredId]:null,m))})},0)})}ngOnDestroy(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()}}return f.\u0275fac=function(d){o.$Z()},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac}),f})();function yi(f,h){return{\u0275kind:f,\u0275providers:h}}function $s(){const f=(0,o.f3M)(o.zs3);return h=>{const d=f.get(o.z2F);if(h!==d.components[0])return;const m=f.get(or),b=f.get(rs);1===f.get(Bs)&&m.initialNavigation(),f.get(Qo,null,o.XFs.Optional)?.setUpPreloading(),f.get(ts,null,o.XFs.Optional)?.init(),m.resetRootComponentType(d.componentTypes[0]),b.closed||(b.next(),b.unsubscribe())}}const rs=new o.OlP("",{factory:()=>new O.x}),Bs=new o.OlP("",{providedIn:"root",factory:()=>1});const Qo=new o.OlP("");function bi(f){return yi(0,[{provide:Qo,useExisting:wa},{provide:es,useExisting:f}])}const _l=new o.OlP("ROUTER_FORROOT_GUARD"),wl=[te.Ye,{provide:pt,useClass:vt},{provide:or,useFactory:Xr},fr,{provide:Rr,useFactory:function Jo(f){return f.routerState.root},deps:[or]},Xi,[]];function _n(){return new o.PXZ("Router",or)}let qu=(()=>{class f{constructor(d){}static forRoot(d,m){return{ngModule:f,providers:[wl,[],{provide:ao,multi:!0,useValue:d},{provide:_l,useFactory:ed,deps:[[or,new o.FiY,new o.tp0]]},{provide:pi,useValue:m||{}},m?.useHash?{provide:te.S$,useClass:te.Do}:{provide:te.S$,useClass:te.b0},{provide:ts,useFactory:()=>{const f=(0,o.f3M)(or),h=(0,o.f3M)(te.EM),d=(0,o.f3M)(o.R0b),m=(0,o.f3M)(pi);return m.scrollOffset&&h.setOffset(m.scrollOffset),new Ns(f,h,d,m)}},m?.preloadingStrategy?bi(m.preloadingStrategy).\u0275providers:[],{provide:o.PXZ,multi:!0,useFactory:_n},m?.initialNavigation?td(m):[],[{provide:El,useFactory:$s},{provide:o.tb,multi:!0,useExisting:El}]]}}static forChild(d){return{ngModule:f,providers:[{provide:ao,multi:!0,useValue:d}]}}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(_l,8))},f.\u0275mod=o.oAB({type:f}),f.\u0275inj=o.cJS({imports:[kr]}),f})();function ed(f){return"guarded"}function td(f){return["disabled"===f.initialNavigation?yi(3,[{provide:o.ip1,multi:!0,useFactory:()=>{const h=(0,o.f3M)(or);return()=>{h.setUpLocationChangeListener()}}},{provide:Bs,useValue:2}]).\u0275providers:[],"enabledBlocking"===f.initialNavigation?yi(2,[{provide:Bs,useValue:0},{provide:o.ip1,multi:!0,deps:[o.zs3],useFactory:h=>{const d=h.get(te.V_,Promise.resolve());return()=>d.then(()=>new Promise(b=>{const $=h.get(or),z=h.get(rs);(function m(b){h.get(or).events.pipe((0,de.h)(z=>z instanceof Wt||z instanceof Bt||z instanceof An),(0,ce.U)(z=>z instanceof Wt||z instanceof Bt&&(0===z.code||1===z.code)&&null),(0,de.h)(z=>null!==z),(0,De.q)(1)).subscribe(()=>{b()})})(()=>{b(!0)}),$.afterPreactivation=()=>(b(!0),z.closed?(0,N.of)(void 0):z),$.initialNavigation()}))}}]).\u0275providers:[]]}const El=new o.OlP("")},5861:(Qe,Fe,w)=>{"use strict";function o(N,ge,R,W,M,U,_){try{var Y=N[U](_),G=Y.value}catch(Z){return void R(Z)}Y.done?ge(G):Promise.resolve(G).then(W,M)}function x(N){return function(){var ge=this,R=arguments;return new Promise(function(W,M){var U=N.apply(ge,R);function _(G){o(U,W,M,_,Y,"next",G)}function Y(G){o(U,W,M,_,Y,"throw",G)}_(void 0)})}}w.d(Fe,{Z:()=>x})}},Qe=>{Qe(Qe.s=1394)}]); \ No newline at end of file diff --git a/src/main/resources/app/main.34bd895345441af0.js b/src/main/resources/app/main.34bd895345441af0.js new file mode 100644 index 000000000..e7ef1b00b --- /dev/null +++ b/src/main/resources/app/main.34bd895345441af0.js @@ -0,0 +1 @@ +(self.webpackChunkapp=self.webpackChunkapp||[]).push([[179],{7423:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Uw:()=>P,dV:()=>S,fo:()=>B});var o=w(5861);typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"&&global;var U=(()=>{return(T=U||(U={})).Unimplemented="UNIMPLEMENTED",T.Unavailable="UNAVAILABLE",U;var T})();class _ extends Error{constructor(k,O,te){super(k),this.message=k,this.code=O,this.data=te}}const G=T=>{var k,O,te,ce,Ae;const De=T.CapacitorCustomPlatform||null,ue=T.Capacitor||{},de=ue.Plugins=ue.Plugins||{},ne=T.CapacitorPlatforms,Ce=(null===(k=ne?.currentPlatform)||void 0===k?void 0:k.getPlatform)||(()=>null!==De?De.name:(T=>{var k,O;return T?.androidBridge?"android":null!==(O=null===(k=T?.webkit)||void 0===k?void 0:k.messageHandlers)&&void 0!==O&&O.bridge?"ios":"web"})(T)),dt=(null===(O=ne?.currentPlatform)||void 0===O?void 0:O.isNativePlatform)||(()=>"web"!==Ce()),Ue=(null===(te=ne?.currentPlatform)||void 0===te?void 0:te.isPluginAvailable)||(Pt=>!(!Rt.get(Pt)?.platforms.has(Ce())&&!Ke(Pt))),Ke=(null===(ce=ne?.currentPlatform)||void 0===ce?void 0:ce.getPluginHeader)||(Pt=>{var Ut;return null===(Ut=ue.PluginHeaders)||void 0===Ut?void 0:Ut.find(it=>it.name===Pt)}),Rt=new Map,pn=(null===(Ae=ne?.currentPlatform)||void 0===Ae?void 0:Ae.registerPlugin)||((Pt,Ut={})=>{const it=Rt.get(Pt);if(it)return console.warn(`Capacitor plugin "${Pt}" already registered. Cannot register plugins twice.`),it.proxy;const Xt=Ce(),kt=Ke(Pt);let Vt;const rn=function(){var Et=(0,o.Z)(function*(){return!Vt&&Xt in Ut?Vt=Vt="function"==typeof Ut[Xt]?yield Ut[Xt]():Ut[Xt]:null!==De&&!Vt&&"web"in Ut&&(Vt=Vt="function"==typeof Ut.web?yield Ut.web():Ut.web),Vt});return function(){return Et.apply(this,arguments)}}(),en=Et=>{let ut;const Ct=(...qe)=>{const on=rn().then(gn=>{const Nt=((Et,ut)=>{var Ct,qe;if(!kt){if(Et)return null===(qe=Et[ut])||void 0===qe?void 0:qe.bind(Et);throw new _(`"${Pt}" plugin is not implemented on ${Xt}`,U.Unimplemented)}{const on=kt?.methods.find(gn=>ut===gn.name);if(on)return"promise"===on.rtype?gn=>ue.nativePromise(Pt,ut.toString(),gn):(gn,Nt)=>ue.nativeCallback(Pt,ut.toString(),gn,Nt);if(Et)return null===(Ct=Et[ut])||void 0===Ct?void 0:Ct.bind(Et)}})(gn,Et);if(Nt){const Hn=Nt(...qe);return ut=Hn?.remove,Hn}throw new _(`"${Pt}.${Et}()" is not implemented on ${Xt}`,U.Unimplemented)});return"addListener"===Et&&(on.remove=(0,o.Z)(function*(){return ut()})),on};return Ct.toString=()=>`${Et.toString()}() { [capacitor code] }`,Object.defineProperty(Ct,"name",{value:Et,writable:!1,configurable:!1}),Ct},gt=en("addListener"),Yt=en("removeListener"),ht=(Et,ut)=>{const Ct=gt({eventName:Et},ut),qe=function(){var gn=(0,o.Z)(function*(){const Nt=yield Ct;Yt({eventName:Et,callbackId:Nt},ut)});return function(){return gn.apply(this,arguments)}}(),on=new Promise(gn=>Ct.then(()=>gn({remove:qe})));return on.remove=(0,o.Z)(function*(){console.warn("Using addListener() without 'await' is deprecated."),yield qe()}),on},nt=new Proxy({},{get(Et,ut){switch(ut){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return kt?ht:gt;case"removeListener":return Yt;default:return en(ut)}}});return de[Pt]=nt,Rt.set(Pt,{name:Pt,proxy:nt,platforms:new Set([...Object.keys(Ut),...kt?[Xt]:[]])}),nt});return ue.convertFileSrc||(ue.convertFileSrc=Pt=>Pt),ue.getPlatform=Ce,ue.handleError=Pt=>T.console.error(Pt),ue.isNativePlatform=dt,ue.isPluginAvailable=Ue,ue.pluginMethodNoop=(Pt,Ut,it)=>Promise.reject(`${it} does not have an implementation of "${Ut}".`),ue.registerPlugin=pn,ue.Exception=_,ue.DEBUG=!!ue.DEBUG,ue.isLoggingEnabled=!!ue.isLoggingEnabled,ue.platform=ue.getPlatform(),ue.isNative=ue.isNativePlatform(),ue},S=(T=>T.Capacitor=G(T))(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),B=S.registerPlugin;class P{constructor(k){this.listeners={},this.windowListeners={},k&&(console.warn(`Capacitor WebPlugin "${k.name}" config object was deprecated in v3 and will be removed in v4.`),this.config=k)}addListener(k,O){var te=this;this.listeners[k]||(this.listeners[k]=[]),this.listeners[k].push(O);const Ae=this.windowListeners[k];Ae&&!Ae.registered&&this.addWindowListener(Ae);const De=function(){var de=(0,o.Z)(function*(){return te.removeListener(k,O)});return function(){return de.apply(this,arguments)}}(),ue=Promise.resolve({remove:De});return Object.defineProperty(ue,"remove",{value:(de=(0,o.Z)(function*(){console.warn("Using addListener() without 'await' is deprecated."),yield De()}),function(){return de.apply(this,arguments)})}),ue;var de}removeAllListeners(){var k=this;return(0,o.Z)(function*(){k.listeners={};for(const O in k.windowListeners)k.removeWindowListener(k.windowListeners[O]);k.windowListeners={}})()}notifyListeners(k,O){const te=this.listeners[k];te&&te.forEach(ce=>ce(O))}hasListeners(k){return!!this.listeners[k].length}registerWindowListener(k,O){this.windowListeners[O]={registered:!1,windowEventName:k,pluginEventName:O,handler:te=>{this.notifyListeners(O,te)}}}unimplemented(k="not implemented"){return new S.Exception(k,U.Unimplemented)}unavailable(k="not available"){return new S.Exception(k,U.Unavailable)}removeListener(k,O){var te=this;return(0,o.Z)(function*(){const ce=te.listeners[k];if(!ce)return;const Ae=ce.indexOf(O);te.listeners[k].splice(Ae,1),te.listeners[k].length||te.removeWindowListener(te.windowListeners[k])})()}addWindowListener(k){window.addEventListener(k.windowEventName,k.handler),k.registered=!0}removeWindowListener(k){!k||(window.removeEventListener(k.windowEventName,k.handler),k.registered=!1)}}const pe=T=>encodeURIComponent(T).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),ke=T=>T.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class Te extends P{getCookies(){return(0,o.Z)(function*(){const k=document.cookie,O={};return k.split(";").forEach(te=>{if(te.length<=0)return;let[ce,Ae]=te.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");ce=ke(ce).trim(),Ae=ke(Ae).trim(),O[ce]=Ae}),O})()}setCookie(k){return(0,o.Z)(function*(){try{const O=pe(k.key),te=pe(k.value),ce=`; expires=${(k.expires||"").replace("expires=","")}`,Ae=(k.path||"/").replace("path=","");document.cookie=`${O}=${te||""}${ce}; path=${Ae}`}catch(O){return Promise.reject(O)}})()}deleteCookie(k){return(0,o.Z)(function*(){try{document.cookie=`${k.key}=; Max-Age=0`}catch(O){return Promise.reject(O)}})()}clearCookies(){return(0,o.Z)(function*(){try{const k=document.cookie.split(";")||[];for(const O of k)document.cookie=O.replace(/^ +/,"").replace(/=.*/,`=;expires=${(new Date).toUTCString()};path=/`)}catch(k){return Promise.reject(k)}})()}clearAllCookies(){var k=this;return(0,o.Z)(function*(){try{yield k.clearCookies()}catch(O){return Promise.reject(O)}})()}}B("CapacitorCookies",{web:()=>new Te});const Be=function(){var T=(0,o.Z)(function*(k){return new Promise((O,te)=>{const ce=new FileReader;ce.onload=()=>{const Ae=ce.result;O(Ae.indexOf(",")>=0?Ae.split(",")[1]:Ae)},ce.onerror=Ae=>te(Ae),ce.readAsDataURL(k)})});return function(O){return T.apply(this,arguments)}}();class Ne extends P{request(k){return(0,o.Z)(function*(){const O=((T,k={})=>{const O=Object.assign({method:T.method||"GET",headers:T.headers},k),ce=((T={})=>{const k=Object.keys(T);return Object.keys(T).map(ce=>ce.toLocaleLowerCase()).reduce((ce,Ae,De)=>(ce[Ae]=T[k[De]],ce),{})})(T.headers)["content-type"]||"";if("string"==typeof T.data)O.body=T.data;else if(ce.includes("application/x-www-form-urlencoded")){const Ae=new URLSearchParams;for(const[De,ue]of Object.entries(T.data||{}))Ae.set(De,ue);O.body=Ae.toString()}else if(ce.includes("multipart/form-data")){const Ae=new FormData;if(T.data instanceof FormData)T.data.forEach((ue,de)=>{Ae.append(de,ue)});else for(const ue of Object.keys(T.data))Ae.append(ue,T.data[ue]);O.body=Ae;const De=new Headers(O.headers);De.delete("content-type"),O.headers=De}else(ce.includes("application/json")||"object"==typeof T.data)&&(O.body=JSON.stringify(T.data));return O})(k,k.webFetchExtra),te=((T,k=!0)=>T?Object.entries(T).reduce((te,ce)=>{const[Ae,De]=ce;let ue,de;return Array.isArray(De)?(de="",De.forEach(ne=>{ue=k?encodeURIComponent(ne):ne,de+=`${Ae}=${ue}&`}),de.slice(0,-1)):(ue=k?encodeURIComponent(De):De,de=`${Ae}=${ue}`),`${te}&${de}`},"").substr(1):null)(k.params,k.shouldEncodeUrlParams),ce=te?`${k.url}?${te}`:k.url,Ae=yield fetch(ce,O),De=Ae.headers.get("content-type")||"";let de,ne,{responseType:ue="text"}=Ae.ok?k:{};switch(De.includes("application/json")&&(ue="json"),ue){case"arraybuffer":case"blob":ne=yield Ae.blob(),de=yield Be(ne);break;case"json":de=yield Ae.json();break;default:de=yield Ae.text()}const Ee={};return Ae.headers.forEach((Ce,ze)=>{Ee[ze]=Ce}),{data:de,headers:Ee,status:Ae.status,url:Ae.url}})()}get(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"GET"}))})()}post(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"POST"}))})()}put(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"PUT"}))})()}patch(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"PATCH"}))})()}delete(k){var O=this;return(0,o.Z)(function*(){return O.request(Object.assign(Object.assign({},k),{method:"DELETE"}))})()}}B("CapacitorHttp",{web:()=>new Ne})},502:(Qe,Fe,w)=>{"use strict";w.d(Fe,{BX:()=>Nr,Br:()=>Zn,dr:()=>Nt,BJ:()=>Hn,oU:()=>zt,cs:()=>nr,yp:()=>jn,YG:()=>xe,Sm:()=>se,PM:()=>ye,hM:()=>_t,wI:()=>tn,W2:()=>Ln,fr:()=>ee,jY:()=>Se,Gu:()=>Le,gu:()=>yt,pK:()=>sn,Ie:()=>dn,rH:()=>er,u8:()=>$n,IK:()=>Tn,td:()=>xn,Q$:()=>vn,q_:()=>tr,z0:()=>cr,zc:()=>$t,uN:()=>Un,jP:()=>fr,Nd:()=>le,VI:()=>Ie,t9:()=>ot,n0:()=>st,PQ:()=>An,jI:()=>Rn,g2:()=>an,wd:()=>ho,sr:()=>jr,Pc:()=>C,r4:()=>rr,HT:()=>Lr,SH:()=>zr,as:()=>en,t4:()=>si,QI:()=>Yt,j9:()=>ht,yF:()=>ko});var o=w(8274),x=w(433),N=w(655),ge=w(8421),R=w(9751),W=w(5577),M=w(1144),U=w(576),_=w(3268);const Y=["addListener","removeListener"],G=["addEventListener","removeEventListener"],Z=["on","off"];function S(s,c,a,g){if((0,U.m)(a)&&(g=a,a=void 0),g)return S(s,c,a).pipe((0,_.Z)(g));const[L,Me]=function P(s){return(0,U.m)(s.addEventListener)&&(0,U.m)(s.removeEventListener)}(s)?G.map(Je=>at=>s[Je](c,at,a)):function E(s){return(0,U.m)(s.addListener)&&(0,U.m)(s.removeListener)}(s)?Y.map(B(s,c)):function j(s){return(0,U.m)(s.on)&&(0,U.m)(s.off)}(s)?Z.map(B(s,c)):[];if(!L&&(0,M.z)(s))return(0,W.z)(Je=>S(Je,c,a))((0,ge.Xf)(s));if(!L)throw new TypeError("Invalid event target");return new R.y(Je=>{const at=(...Dt)=>Je.next(1Me(at)})}function B(s,c){return a=>g=>s[a](c,g)}var K=w(7579),pe=w(1135),ke=w(5472),oe=(w(8834),w(3953),w(3880),w(1911),w(9658)),be=w(5730),Ne=w(697),T=(w(4292),w(4414)),te=(w(3457),w(4349),w(1308)),ne=w(9300),Ee=w(3900),Ce=w(1884),ze=w(6895);const et=oe.i,Ke=["*"],Pt=s=>"function"==typeof __zone_symbol__requestAnimationFrame?__zone_symbol__requestAnimationFrame(s):"function"==typeof requestAnimationFrame?requestAnimationFrame(s):setTimeout(s),Ut=s=>!!s.resolveComponentFactory;let it=(()=>{class s{constructor(a,g){this.injector=a,this.el=g,this.onChange=()=>{},this.onTouched=()=>{}}writeValue(a){this.el.nativeElement.value=this.lastValue=a??"",Xt(this.el)}handleChangeEvent(a,g){a===this.el.nativeElement&&(g!==this.lastValue&&(this.lastValue=g,this.onChange(g)),Xt(this.el))}_handleBlurEvent(a){a===this.el.nativeElement&&(this.onTouched(),Xt(this.el))}registerOnChange(a){this.onChange=a}registerOnTouched(a){this.onTouched=a}setDisabledState(a){this.el.nativeElement.disabled=a}ngOnDestroy(){this.statusChanges&&this.statusChanges.unsubscribe()}ngAfterViewInit(){let a;try{a=this.injector.get(x.a5)}catch{}if(!a)return;a.statusChanges&&(this.statusChanges=a.statusChanges.subscribe(()=>Xt(this.el)));const g=a.control;g&&["markAsTouched","markAllAsTouched","markAsUntouched","markAsDirty","markAsPristine"].forEach(Me=>{if(typeof g[Me]<"u"){const Je=g[Me].bind(g);g[Me]=(...at)=>{Je(...at),Xt(this.el)}}})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,hostBindings:function(a,g){1&a&&o.NdJ("ionBlur",function(Me){return g._handleBlurEvent(Me.target)})}}),s})();const Xt=s=>{Pt(()=>{const c=s.nativeElement,a=null!=c.value&&c.value.toString().length>0,g=kt(c);Vt(c,g);const L=c.closest("ion-item");L&&Vt(L,a?[...g,"item-has-value"]:g)})},kt=s=>{const c=s.classList,a=[];for(let g=0;g{const a=s.classList;a.remove("ion-valid","ion-invalid","ion-touched","ion-untouched","ion-dirty","ion-pristine"),a.add(...c)},rn=(s,c)=>s.substring(0,c.length)===c;let en=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleIonChange(a){this.handleChangeEvent(a,a.value)}registerOnChange(a){super.registerOnChange(g=>{a(""===g?null:parseFloat(g))})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-input","type","number"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleIonChange(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})(),Yt=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleChangeEvent(a){this.handleChangeEvent(a,a.value)}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-range"],["ion-select"],["ion-radio-group"],["ion-segment"],["ion-datetime"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleChangeEvent(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})(),ht=(()=>{class s extends it{constructor(a,g){super(a,g)}_handleInputEvent(a){this.handleChangeEvent(a,a.value)}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.zs3),o.Y36(o.SBq))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-input",3,"type","number"],["ion-textarea"],["ion-searchbar"]],hostBindings:function(a,g){1&a&&o.NdJ("ionChange",function(Me){return g._handleInputEvent(Me.target)})},features:[o._Bn([{provide:x.JU,useExisting:s,multi:!0}]),o.qOj]}),s})();const nt=(s,c)=>{const a=s.prototype;c.forEach(g=>{Object.defineProperty(a,g,{get(){return this.el[g]},set(L){this.z.runOutsideAngular(()=>this.el[g]=L)}})})},Et=(s,c)=>{const a=s.prototype;c.forEach(g=>{a[g]=function(){const L=arguments;return this.z.runOutsideAngular(()=>this.el[g].apply(this.el,L))}})},ut=(s,c,a)=>{a.forEach(g=>s[g]=S(c,g))};function qe(s){return function(a){const{defineCustomElementFn:g,inputs:L,methods:Me}=s;return void 0!==g&&g(),L&&nt(a,L),Me&&Et(a,Me),a}}let Nt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-app"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),Hn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-avatar"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),zt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-back-button"]],inputs:{color:"color",defaultHref:"defaultHref",disabled:"disabled",icon:"icon",mode:"mode",routerAnimation:"routerAnimation",text:"text",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","defaultHref","disabled","icon","mode","routerAnimation","text","type"]})],s),s})(),jn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-badge"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})(),xe=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionFocus","ionBlur"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-button"]],inputs:{buttonType:"buttonType",color:"color",disabled:"disabled",download:"download",expand:"expand",fill:"fill",form:"form",href:"href",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",shape:"shape",size:"size",strong:"strong",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]})],s),s})(),se=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-buttons"]],inputs:{collapse:"collapse"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse"]})],s),s})(),ye=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-card"]],inputs:{button:"button",color:"color",disabled:"disabled",download:"download",href:"href",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]})],s),s})(),_t=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-chip"]],inputs:{color:"color",disabled:"disabled",mode:"mode",outline:"outline"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","disabled","mode","outline"]})],s),s})(),tn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-col"]],inputs:{offset:"offset",offsetLg:"offsetLg",offsetMd:"offsetMd",offsetSm:"offsetSm",offsetXl:"offsetXl",offsetXs:"offsetXs",pull:"pull",pullLg:"pullLg",pullMd:"pullMd",pullSm:"pullSm",pullXl:"pullXl",pullXs:"pullXs",push:"push",pushLg:"pushLg",pushMd:"pushMd",pushSm:"pushSm",pushXl:"pushXl",pushXs:"pushXs",size:"size",sizeLg:"sizeLg",sizeMd:"sizeMd",sizeSm:"sizeSm",sizeXl:"sizeXl",sizeXs:"sizeXs"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["offset","offsetLg","offsetMd","offsetSm","offsetXl","offsetXs","pull","pullLg","pullMd","pullSm","pullXl","pullXs","push","pushLg","pushMd","pushSm","pushXl","pushXs","size","sizeLg","sizeMd","sizeSm","sizeXl","sizeXs"]})],s),s})(),Ln=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionScrollStart","ionScroll","ionScrollEnd"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-content"]],inputs:{color:"color",forceOverscroll:"forceOverscroll",fullscreen:"fullscreen",scrollEvents:"scrollEvents",scrollX:"scrollX",scrollY:"scrollY"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"],methods:["getScrollElement","scrollToTop","scrollToBottom","scrollByPoint","scrollToPoint"]})],s),s})(),ee=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-footer"]],inputs:{collapse:"collapse",mode:"mode",translucent:"translucent"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse","mode","translucent"]})],s),s})(),Se=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-grid"]],inputs:{fixed:"fixed"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["fixed"]})],s),s})(),Le=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-header"]],inputs:{collapse:"collapse",mode:"mode",translucent:"translucent"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["collapse","mode","translucent"]})],s),s})(),yt=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-icon"]],inputs:{color:"color",flipRtl:"flipRtl",icon:"icon",ios:"ios",lazy:"lazy",md:"md",mode:"mode",name:"name",sanitize:"sanitize",size:"size",src:"src"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]})],s),s})(),sn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionInput","ionChange","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-input"]],inputs:{accept:"accept",autocapitalize:"autocapitalize",autocomplete:"autocomplete",autocorrect:"autocorrect",autofocus:"autofocus",clearInput:"clearInput",clearOnEdit:"clearOnEdit",color:"color",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",max:"max",maxlength:"maxlength",min:"min",minlength:"minlength",mode:"mode",multiple:"multiple",name:"name",pattern:"pattern",placeholder:"placeholder",readonly:"readonly",required:"required",size:"size",spellcheck:"spellcheck",step:"step",type:"type",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["accept","autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearOnEdit","color","debounce","disabled","enterkeyhint","inputmode","max","maxlength","min","minlength","mode","multiple","name","pattern","placeholder","readonly","required","size","spellcheck","step","type","value"],methods:["setFocus","getInputElement"]})],s),s})(),dn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item"]],inputs:{button:"button",color:"color",counter:"counter",counterFormatter:"counterFormatter",detail:"detail",detailIcon:"detailIcon",disabled:"disabled",download:"download",fill:"fill",href:"href",lines:"lines",mode:"mode",rel:"rel",routerAnimation:"routerAnimation",routerDirection:"routerDirection",shape:"shape",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["button","color","counter","counterFormatter","detail","detailIcon","disabled","download","fill","href","lines","mode","rel","routerAnimation","routerDirection","shape","target","type"]})],s),s})(),er=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-divider"]],inputs:{color:"color",mode:"mode",sticky:"sticky"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode","sticky"]})],s),s})(),$n=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-option"]],inputs:{color:"color",disabled:"disabled",download:"download",expandable:"expandable",href:"href",mode:"mode",rel:"rel",target:"target",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","disabled","download","expandable","href","mode","rel","target","type"]})],s),s})(),Tn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionSwipe"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-options"]],inputs:{side:"side"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["side"]})],s),s})(),xn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionDrag"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-item-sliding"]],inputs:{disabled:"disabled"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["disabled"],methods:["getOpenAmount","getSlidingRatio","open","close","closeOpened"]})],s),s})(),vn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-label"]],inputs:{color:"color",mode:"mode",position:"position"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode","position"]})],s),s})(),tr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-list"]],inputs:{inset:"inset",lines:"lines",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["inset","lines","mode"],methods:["closeSlidingItems"]})],s),s})(),cr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionWillOpen","ionWillClose","ionDidOpen","ionDidClose"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-menu"]],inputs:{contentId:"contentId",disabled:"disabled",maxEdgeStart:"maxEdgeStart",menuId:"menuId",side:"side",swipeGesture:"swipeGesture",type:"type"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["contentId","disabled","maxEdgeStart","menuId","side","swipeGesture","type"],methods:["isOpen","isActive","open","close","toggle","setOpen"]})],s),s})(),$t=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-menu-toggle"]],inputs:{autoHide:"autoHide",menu:"menu"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["autoHide","menu"]})],s),s})(),Un=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-note"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})(),le=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-row"]],ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0})],s),s})(),Ie=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionInput","ionChange","ionCancel","ionClear","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-searchbar"]],inputs:{animated:"animated",autocomplete:"autocomplete",autocorrect:"autocorrect",cancelButtonIcon:"cancelButtonIcon",cancelButtonText:"cancelButtonText",clearIcon:"clearIcon",color:"color",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",mode:"mode",placeholder:"placeholder",searchIcon:"searchIcon",showCancelButton:"showCancelButton",showClearButton:"showClearButton",spellcheck:"spellcheck",type:"type",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["animated","autocomplete","autocorrect","cancelButtonIcon","cancelButtonText","clearIcon","color","debounce","disabled","enterkeyhint","inputmode","mode","placeholder","searchIcon","showCancelButton","showClearButton","spellcheck","type","value"],methods:["setFocus","getInputElement"]})],s),s})(),ot=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionChange","ionCancel","ionDismiss","ionFocus","ionBlur"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-select"]],inputs:{cancelText:"cancelText",compareWith:"compareWith",disabled:"disabled",interface:"interface",interfaceOptions:"interfaceOptions",mode:"mode",multiple:"multiple",name:"name",okText:"okText",placeholder:"placeholder",selectedText:"selectedText",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["cancelText","compareWith","disabled","interface","interfaceOptions","mode","multiple","name","okText","placeholder","selectedText","value"],methods:["open"]})],s),s})(),st=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-select-option"]],inputs:{disabled:"disabled",value:"value"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["disabled","value"]})],s),s})(),An=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-spinner"]],inputs:{color:"color",duration:"duration",name:"name",paused:"paused"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","duration","name","paused"]})],s),s})(),Rn=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionSplitPaneVisible"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-split-pane"]],inputs:{contentId:"contentId",disabled:"disabled",when:"when"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["contentId","disabled","when"]})],s),s})(),an=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement,ut(this,this.el,["ionChange","ionInput","ionBlur","ionFocus"])}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-textarea"]],inputs:{autoGrow:"autoGrow",autocapitalize:"autocapitalize",autofocus:"autofocus",clearOnEdit:"clearOnEdit",color:"color",cols:"cols",debounce:"debounce",disabled:"disabled",enterkeyhint:"enterkeyhint",inputmode:"inputmode",maxlength:"maxlength",minlength:"minlength",mode:"mode",name:"name",placeholder:"placeholder",readonly:"readonly",required:"required",rows:"rows",spellcheck:"spellcheck",value:"value",wrap:"wrap"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["autoGrow","autocapitalize","autofocus","clearOnEdit","color","cols","debounce","disabled","enterkeyhint","inputmode","maxlength","minlength","mode","name","placeholder","readonly","required","rows","spellcheck","value","wrap"],methods:["setFocus","getInputElement"]})],s),s})(),ho=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-title"]],inputs:{color:"color",size:"size"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","size"]})],s),s})(),jr=(()=>{let s=class{constructor(a,g,L){this.z=L,a.detach(),this.el=g.nativeElement}};return s.\u0275fac=function(a){return new(a||s)(o.Y36(o.sBO),o.Y36(o.SBq),o.Y36(o.R0b))},s.\u0275cmp=o.Xpm({type:s,selectors:[["ion-toolbar"]],inputs:{color:"color",mode:"mode"},ngContentSelectors:Ke,decls:1,vars:0,template:function(a,g){1&a&&(o.F$t(),o.Hsn(0))},encapsulation:2,changeDetection:0}),s=(0,N.gn)([qe({defineCustomElementFn:void 0,inputs:["color","mode"]})],s),s})();class xr{constructor(c={}){this.data=c}get(c){return this.data[c]}}let Or=(()=>{class s{constructor(a,g){this.zone=a,this.appRef=g}create(a,g,L){return new ar(a,g,L,this.appRef,this.zone)}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(o.R0b),o.LFG(o.z2F))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})();class ar{constructor(c,a,g,L,Me){this.resolverOrInjector=c,this.injector=a,this.location=g,this.appRef=L,this.zone=Me,this.elRefMap=new WeakMap,this.elEventsMap=new WeakMap}attachViewToDom(c,a,g,L){return this.zone.run(()=>new Promise(Me=>{Me(Bn(this.zone,this.resolverOrInjector,this.injector,this.location,this.appRef,this.elRefMap,this.elEventsMap,c,a,g,L))}))}removeViewFromDom(c,a){return this.zone.run(()=>new Promise(g=>{const L=this.elRefMap.get(a);if(L){L.destroy(),this.elRefMap.delete(a);const Me=this.elEventsMap.get(a);Me&&(Me(),this.elEventsMap.delete(a))}g()}))}}const Bn=(s,c,a,g,L,Me,Je,at,Dt,Zt,bn)=>{let Ve;const At=o.zs3.create({providers:qn(Zt),parent:a});if(c&&Ut(c)){const $r=c.resolveComponentFactory(Dt);Ve=g?g.createComponent($r,g.length,At):$r.create(At)}else{if(!g)return null;Ve=g.createComponent(Dt,{index:g.indexOf,injector:At,environmentInjector:c})}const yr=Ve.instance,Dr=Ve.location.nativeElement;if(Zt&&Object.assign(yr,Zt),bn)for(const $r of bn)Dr.classList.add($r);const Mn=Fn(s,yr,Dr);return at.appendChild(Dr),g||L.attachView(Ve.hostView),Ve.changeDetectorRef.reattach(),Me.set(Dr,Ve),Je.set(Dr,Mn),Dr},po=[Ne.L,Ne.a,Ne.b,Ne.c,Ne.d],Fn=(s,c,a)=>s.run(()=>{const g=po.filter(L=>"function"==typeof c[L]).map(L=>{const Me=Je=>c[L](Je.detail);return a.addEventListener(L,Me),()=>a.removeEventListener(L,Me)});return()=>g.forEach(L=>L())}),zn=new o.OlP("NavParamsToken"),qn=s=>[{provide:zn,useValue:s},{provide:xr,useFactory:dr,deps:[zn]}],dr=s=>new xr(s),Gn=(s,c)=>((s=s.filter(a=>a.stackId!==c.stackId)).push(c),s),vr=(s,c)=>{const a=s.createUrlTree(["."],{relativeTo:c});return s.serializeUrl(a)},Pr=(s,c)=>{if(!s)return;const a=xo(c);for(let g=0;g=s.length)return a[g];if(a[g]!==s[g])return}},xo=s=>s.split("/").map(c=>c.trim()).filter(c=>""!==c),vo=s=>{s&&(s.ref.destroy(),s.unlistenEvents())};class yo{constructor(c,a,g,L,Me,Je){this.containerEl=a,this.router=g,this.navCtrl=L,this.zone=Me,this.location=Je,this.views=[],this.skipTransition=!1,this.nextId=0,this.tabsPrefix=void 0!==c?xo(c):void 0}createView(c,a){var g;const L=vr(this.router,a),Me=null===(g=c?.location)||void 0===g?void 0:g.nativeElement,Je=Fn(this.zone,c.instance,Me);return{id:this.nextId++,stackId:Pr(this.tabsPrefix,L),unlistenEvents:Je,element:Me,ref:c,url:L}}getExistingView(c){const a=vr(this.router,c),g=this.views.find(L=>L.url===a);return g&&g.ref.changeDetectorRef.reattach(),g}setActive(c){var a,g;const L=this.navCtrl.consumeTransition();let{direction:Me,animation:Je,animationBuilder:at}=L;const Dt=this.activeView,Zt=((s,c)=>!c||s.stackId!==c.stackId)(c,Dt);Zt&&(Me="back",Je=void 0);const bn=this.views.slice();let Ve;const At=this.router;At.getCurrentNavigation?Ve=At.getCurrentNavigation():!(null===(a=At.navigations)||void 0===a)&&a.value&&(Ve=At.navigations.value),null!==(g=Ve?.extras)&&void 0!==g&&g.replaceUrl&&this.views.length>0&&this.views.splice(-1,1);const yr=this.views.includes(c),Dr=this.insertView(c,Me);yr||c.ref.changeDetectorRef.detectChanges();const Mn=c.animationBuilder;return void 0===at&&"back"===Me&&!Zt&&void 0!==Mn&&(at=Mn),Dt&&(Dt.animationBuilder=at),this.zone.runOutsideAngular(()=>this.wait(()=>(Dt&&Dt.ref.changeDetectorRef.detach(),c.ref.changeDetectorRef.reattach(),this.transition(c,Dt,Je,this.canGoBack(1),!1,at).then(()=>Oo(c,Dr,bn,this.location,this.zone)).then(()=>({enteringView:c,direction:Me,animation:Je,tabSwitch:Zt})))))}canGoBack(c,a=this.getActiveStackId()){return this.getStack(a).length>c}pop(c,a=this.getActiveStackId()){return this.zone.run(()=>{var g,L;const Me=this.getStack(a);if(Me.length<=c)return Promise.resolve(!1);const Je=Me[Me.length-c-1];let at=Je.url;const Dt=Je.savedData;if(Dt){const bn=Dt.get("primary");null!==(L=null===(g=bn?.route)||void 0===g?void 0:g._routerState)&&void 0!==L&&L.snapshot.url&&(at=bn.route._routerState.snapshot.url)}const{animationBuilder:Zt}=this.navCtrl.consumeTransition();return this.navCtrl.navigateBack(at,Object.assign(Object.assign({},Je.savedExtras),{animation:Zt})).then(()=>!0)})}startBackTransition(){const c=this.activeView;if(c){const a=this.getStack(c.stackId),g=a[a.length-2],L=g.animationBuilder;return this.wait(()=>this.transition(g,c,"back",this.canGoBack(2),!0,L))}return Promise.resolve()}endBackTransition(c){c?(this.skipTransition=!0,this.pop(1)):this.activeView&&Jr(this.activeView,this.views,this.views,this.location,this.zone)}getLastUrl(c){const a=this.getStack(c);return a.length>0?a[a.length-1]:void 0}getRootUrl(c){const a=this.getStack(c);return a.length>0?a[0]:void 0}getActiveStackId(){return this.activeView?this.activeView.stackId:void 0}hasRunningTask(){return void 0!==this.runningTask}destroy(){this.containerEl=void 0,this.views.forEach(vo),this.activeView=void 0,this.views=[]}getStack(c){return this.views.filter(a=>a.stackId===c)}insertView(c,a){return this.activeView=c,this.views=((s,c,a)=>"root"===a?Gn(s,c):"forward"===a?((s,c)=>(s.indexOf(c)>=0?s=s.filter(g=>g.stackId!==c.stackId||g.id<=c.id):s.push(c),s))(s,c):((s,c)=>s.indexOf(c)>=0?s.filter(g=>g.stackId!==c.stackId||g.id<=c.id):Gn(s,c))(s,c))(this.views,c,a),this.views.slice()}transition(c,a,g,L,Me,Je){if(this.skipTransition)return this.skipTransition=!1,Promise.resolve(!1);if(a===c)return Promise.resolve(!1);const at=c?c.element:void 0,Dt=a?a.element:void 0,Zt=this.containerEl;return at&&at!==Dt&&(at.classList.add("ion-page"),at.classList.add("ion-page-invisible"),at.parentElement!==Zt&&Zt.appendChild(at),Zt.commit)?Zt.commit(at,Dt,{deepWait:!0,duration:void 0===g?0:void 0,direction:g,showGoBack:L,progressAnimation:Me,animationBuilder:Je}):Promise.resolve(!1)}wait(c){return(0,N.mG)(this,void 0,void 0,function*(){void 0!==this.runningTask&&(yield this.runningTask,this.runningTask=void 0);const a=this.runningTask=c();return a.finally(()=>this.runningTask=void 0),a})}}const Oo=(s,c,a,g,L)=>"function"==typeof requestAnimationFrame?new Promise(Me=>{requestAnimationFrame(()=>{Jr(s,c,a,g,L),Me()})}):Promise.resolve(),Jr=(s,c,a,g,L)=>{L.run(()=>a.filter(Me=>!c.includes(Me)).forEach(vo)),c.forEach(Me=>{const at=g.path().split("?")[0].split("#")[0];if(Me!==s&&Me.url!==at){const Dt=Me.element;Dt.setAttribute("aria-hidden","true"),Dt.classList.add("ion-page-hidden"),Me.ref.changeDetectorRef.detach()}})};let Go=(()=>{class s{get(a,g){const L=Yo();return L?L.get(a,g):null}getBoolean(a,g){const L=Yo();return!!L&&L.getBoolean(a,g)}getNumber(a,g){const L=Yo();return L?L.getNumber(a,g):0}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Fr=new o.OlP("USERCONFIG"),Yo=()=>{if(typeof window<"u"){const s=window.Ionic;if(s?.config)return s.config}return null};let si=(()=>{class s{constructor(a,g){this.doc=a,this.backButton=new K.x,this.keyboardDidShow=new K.x,this.keyboardDidHide=new K.x,this.pause=new K.x,this.resume=new K.x,this.resize=new K.x,g.run(()=>{var L;let Me;this.win=a.defaultView,this.backButton.subscribeWithPriority=function(Je,at){return this.subscribe(Dt=>Dt.register(Je,Zt=>g.run(()=>at(Zt))))},Ur(this.pause,a,"pause"),Ur(this.resume,a,"resume"),Ur(this.backButton,a,"ionBackButton"),Ur(this.resize,this.win,"resize"),Ur(this.keyboardDidShow,this.win,"ionKeyboardDidShow"),Ur(this.keyboardDidHide,this.win,"ionKeyboardDidHide"),this._readyPromise=new Promise(Je=>{Me=Je}),null!==(L=this.win)&&void 0!==L&&L.cordova?a.addEventListener("deviceready",()=>{Me("cordova")},{once:!0}):Me("dom")})}is(a){return(0,oe.a)(this.win,a)}platforms(){return(0,oe.g)(this.win)}ready(){return this._readyPromise}get isRTL(){return"rtl"===this.doc.dir}getQueryParam(a){return Ro(this.win.location.href,a)}isLandscape(){return!this.isPortrait()}isPortrait(){var a,g;return null===(g=(a=this.win).matchMedia)||void 0===g?void 0:g.call(a,"(orientation: portrait)").matches}testUserAgent(a){const g=this.win.navigator;return!!(g?.userAgent&&g.userAgent.indexOf(a)>=0)}url(){return this.win.location.href}width(){return this.win.innerWidth}height(){return this.win.innerHeight}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(ze.K0),o.LFG(o.R0b))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Ro=(s,c)=>{c=c.replace(/[[\]\\]/g,"\\$&");const g=new RegExp("[\\?&]"+c+"=([^&#]*)").exec(s);return g?decodeURIComponent(g[1].replace(/\+/g," ")):null},Ur=(s,c,a)=>{c&&c.addEventListener(a,g=>{s.next(g?.detail)})};let zr=(()=>{class s{constructor(a,g,L,Me){this.location=g,this.serializer=L,this.router=Me,this.direction=Gr,this.animated=Yr,this.guessDirection="forward",this.lastNavId=-1,Me&&Me.events.subscribe(Je=>{if(Je instanceof ke.OD){const at=Je.restoredState?Je.restoredState.navigationId:Je.id;this.guessDirection=at{this.pop(),Je()})}navigateForward(a,g={}){return this.setDirection("forward",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}navigateBack(a,g={}){return this.setDirection("back",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}navigateRoot(a,g={}){return this.setDirection("root",g.animated,g.animationDirection,g.animation),this.navigate(a,g)}back(a={animated:!0,animationDirection:"back"}){return this.setDirection("back",a.animated,a.animationDirection,a.animation),this.location.back()}pop(){return(0,N.mG)(this,void 0,void 0,function*(){let a=this.topOutlet;for(;a&&!(yield a.pop());)a=a.parentOutlet})}setDirection(a,g,L,Me){this.direction=a,this.animated=Do(a,g,L),this.animationBuilder=Me}setTopOutlet(a){this.topOutlet=a}consumeTransition(){let g,a="root";const L=this.animationBuilder;return"auto"===this.direction?(a=this.guessDirection,g=this.guessAnimation):(g=this.animated,a=this.direction),this.direction=Gr,this.animated=Yr,this.animationBuilder=void 0,{direction:a,animation:g,animationBuilder:L}}navigate(a,g){if(Array.isArray(a))return this.router.navigate(a,g);{const L=this.serializer.parse(a.toString());return void 0!==g.queryParams&&(L.queryParams=Object.assign({},g.queryParams)),void 0!==g.fragment&&(L.fragment=g.fragment),this.router.navigateByUrl(L,g)}}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(si),o.LFG(ze.Ye),o.LFG(ke.Hx),o.LFG(ke.F0,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();const Do=(s,c,a)=>{if(!1!==c){if(void 0!==a)return a;if("forward"===s||"back"===s)return s;if("root"===s&&!0===c)return"forward"}},Gr="auto",Yr=void 0;let fr=(()=>{class s{constructor(a,g,L,Me,Je,at,Dt,Zt,bn,Ve,At,yr,Dr){this.parentContexts=a,this.location=g,this.config=Je,this.navCtrl=at,this.componentFactoryResolver=Dt,this.parentOutlet=Dr,this.activated=null,this.activatedView=null,this._activatedRoute=null,this.proxyMap=new WeakMap,this.currentActivatedRoute$=new pe.X(null),this.stackEvents=new o.vpe,this.activateEvents=new o.vpe,this.deactivateEvents=new o.vpe,this.nativeEl=bn.nativeElement,this.name=L||ke.eC,this.tabsPrefix="true"===Me?vr(Ve,yr):void 0,this.stackCtrl=new yo(this.tabsPrefix,this.nativeEl,Ve,at,At,Zt),a.onChildOutletCreated(this.name,this)}set animation(a){this.nativeEl.animation=a}set animated(a){this.nativeEl.animated=a}set swipeGesture(a){this._swipeGesture=a,this.nativeEl.swipeHandler=a?{canStart:()=>this.stackCtrl.canGoBack(1)&&!this.stackCtrl.hasRunningTask(),onStart:()=>this.stackCtrl.startBackTransition(),onEnd:g=>this.stackCtrl.endBackTransition(g)}:void 0}ngOnDestroy(){this.stackCtrl.destroy()}getContext(){return this.parentContexts.getContext(this.name)}ngOnInit(){if(!this.activated){const a=this.getContext();a?.route&&this.activateWith(a.route,a.resolver||null)}new Promise(a=>(0,be.c)(this.nativeEl,a)).then(()=>{void 0===this._swipeGesture&&(this.swipeGesture=this.config.getBoolean("swipeBackEnabled","ios"===this.nativeEl.mode))})}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new Error("Outlet is not activated");return this.activated.instance}get activatedRoute(){if(!this.activated)throw new Error("Outlet is not activated");return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){throw new Error("incompatible reuse strategy")}attach(a,g){throw new Error("incompatible reuse strategy")}deactivate(){if(this.activated){if(this.activatedView){const g=this.getContext();this.activatedView.savedData=new Map(g.children.contexts);const L=this.activatedView.savedData.get("primary");if(L&&g.route&&(L.route=Object.assign({},g.route)),this.activatedView.savedExtras={},g.route){const Me=g.route.snapshot;this.activatedView.savedExtras.queryParams=Me.queryParams,this.activatedView.savedExtras.fragment=Me.fragment}}const a=this.component;this.activatedView=null,this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(a)}}activateWith(a,g){var L;if(this.isActivated)throw new Error("Cannot activate an already activated outlet");this._activatedRoute=a;let Me,Je=this.stackCtrl.getExistingView(a);if(Je){Me=this.activated=Je.ref;const at=Je.savedData;at&&(this.getContext().children.contexts=at),this.updateActivatedRouteProxy(Me.instance,a)}else{const at=a._futureSnapshot;if(null==at.routeConfig.component&&null==this.environmentInjector)return void console.warn('[Ionic Warning]: You must supply an environmentInjector to use standalone components with routing:\n\nIn your component class, add:\n\n import { EnvironmentInjector } from \'@angular/core\';\n constructor(public environmentInjector: EnvironmentInjector) {}\n\nIn your router outlet template, add:\n\n \n\nAlternatively, if you are routing within ion-tabs:\n\n ');const Dt=this.parentContexts.getOrCreateContext(this.name).children,Zt=new pe.X(null),bn=this.createActivatedRouteProxy(Zt,a),Ve=new hr(bn,Dt,this.location.injector),At=null!==(L=at.routeConfig.component)&&void 0!==L?L:at.component;if((g=g||this.componentFactoryResolver)&&Ut(g)){const yr=g.resolveComponentFactory(At);Me=this.activated=this.location.createComponent(yr,this.location.length,Ve)}else Me=this.activated=this.location.createComponent(At,{index:this.location.length,injector:Ve,environmentInjector:g??this.environmentInjector});Zt.next(Me.instance),Je=this.stackCtrl.createView(this.activated,a),this.proxyMap.set(Me.instance,bn),this.currentActivatedRoute$.next({component:Me.instance,activatedRoute:a})}this.activatedView=Je,this.navCtrl.setTopOutlet(this),this.stackCtrl.setActive(Je).then(at=>{this.activateEvents.emit(Me.instance),this.stackEvents.emit(at)})}canGoBack(a=1,g){return this.stackCtrl.canGoBack(a,g)}pop(a=1,g){return this.stackCtrl.pop(a,g)}getLastUrl(a){const g=this.stackCtrl.getLastUrl(a);return g?g.url:void 0}getLastRouteView(a){return this.stackCtrl.getLastUrl(a)}getRootView(a){return this.stackCtrl.getRootUrl(a)}getActiveStackId(){return this.stackCtrl.getActiveStackId()}createActivatedRouteProxy(a,g){const L=new ke.gz;return L._futureSnapshot=g._futureSnapshot,L._routerState=g._routerState,L.snapshot=g.snapshot,L.outlet=g.outlet,L.component=g.component,L._paramMap=this.proxyObservable(a,"paramMap"),L._queryParamMap=this.proxyObservable(a,"queryParamMap"),L.url=this.proxyObservable(a,"url"),L.params=this.proxyObservable(a,"params"),L.queryParams=this.proxyObservable(a,"queryParams"),L.fragment=this.proxyObservable(a,"fragment"),L.data=this.proxyObservable(a,"data"),L}proxyObservable(a,g){return a.pipe((0,ne.h)(L=>!!L),(0,Ee.w)(L=>this.currentActivatedRoute$.pipe((0,ne.h)(Me=>null!==Me&&Me.component===L),(0,Ee.w)(Me=>Me&&Me.activatedRoute[g]),(0,Ce.x)())))}updateActivatedRouteProxy(a,g){const L=this.proxyMap.get(a);if(!L)throw new Error("Could not find activated route proxy for view");L._futureSnapshot=g._futureSnapshot,L._routerState=g._routerState,L.snapshot=g.snapshot,L.outlet=g.outlet,L.component=g.component,this.currentActivatedRoute$.next({component:a,activatedRoute:g})}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(ke.y6),o.Y36(o.s_b),o.$8M("name"),o.$8M("tabs"),o.Y36(Go),o.Y36(zr),o.Y36(o._Vd,8),o.Y36(ze.Ye),o.Y36(o.SBq),o.Y36(ke.F0),o.Y36(o.R0b),o.Y36(ke.gz),o.Y36(s,12))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-router-outlet"]],inputs:{animated:"animated",animation:"animation",mode:"mode",swipeGesture:"swipeGesture",environmentInjector:"environmentInjector"},outputs:{stackEvents:"stackEvents",activateEvents:"activate",deactivateEvents:"deactivate"},exportAs:["outlet"]}),s})();class hr{constructor(c,a,g){this.route=c,this.childContexts=a,this.parent=g}get(c,a){return c===ke.gz?this.route:c===ke.y6?this.childContexts:this.parent.get(c,a)}}let nr=(()=>{class s{constructor(a,g,L){this.routerOutlet=a,this.navCtrl=g,this.config=L}onClick(a){var g;const L=this.defaultHref||this.config.get("backButtonDefaultHref");null!==(g=this.routerOutlet)&&void 0!==g&&g.canGoBack()?(this.navCtrl.setDirection("back",void 0,void 0,this.routerAnimation),this.routerOutlet.pop(),a.preventDefault()):null!=L&&(this.navCtrl.navigateBack(L,{animation:this.routerAnimation}),a.preventDefault())}}return s.\u0275fac=function(a){return new(a||s)(o.Y36(fr,8),o.Y36(zr),o.Y36(Go))},s.\u0275dir=o.lG2({type:s,selectors:[["ion-back-button"]],hostBindings:function(a,g){1&a&&o.NdJ("click",function(Me){return g.onClick(Me)})},inputs:{defaultHref:"defaultHref",routerAnimation:"routerAnimation"}}),s})();class kn{constructor(c){this.ctrl=c}create(c){return this.ctrl.create(c||{})}dismiss(c,a,g){return this.ctrl.dismiss(c,a,g)}getTop(){return this.ctrl.getTop()}}let Nr=(()=>{class s extends kn{constructor(){super(T.b)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})(),Zn=(()=>{class s extends kn{constructor(){super(T.a)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})(),Lr=(()=>{class s extends kn{constructor(){super(T.l)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();class Sn{}let Fo=(()=>{class s extends kn{constructor(a,g,L,Me){super(T.m),this.angularDelegate=a,this.resolver=g,this.injector=L,this.environmentInjector=Me}create(a){var g;return super.create(Object.assign(Object.assign({},a),{delegate:this.angularDelegate.create(null!==(g=this.resolver)&&void 0!==g?g:this.environmentInjector,this.injector)}))}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(Or),o.LFG(o._Vd),o.LFG(o.zs3),o.LFG(Sn,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})(),wo=(()=>{class s extends kn{constructor(a,g,L,Me){super(T.c),this.angularDelegate=a,this.resolver=g,this.injector=L,this.environmentInjector=Me}create(a){var g;return super.create(Object.assign(Object.assign({},a),{delegate:this.angularDelegate.create(null!==(g=this.resolver)&&void 0!==g?g:this.environmentInjector,this.injector)}))}}return s.\u0275fac=function(a){return new(a||s)(o.LFG(Or),o.LFG(o._Vd),o.LFG(o.zs3),o.LFG(Sn,8))},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac}),s})(),ko=(()=>{class s extends kn{constructor(){super(T.t)}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275prov=o.Yz7({token:s,factory:s.\u0275fac,providedIn:"root"}),s})();class rr{shouldDetach(c){return!1}shouldAttach(c){return!1}store(c,a){}retrieve(c){return null}shouldReuseRoute(c,a){if(c.routeConfig!==a.routeConfig)return!1;const g=c.params,L=a.params,Me=Object.keys(g),Je=Object.keys(L);if(Me.length!==Je.length)return!1;for(const at of Me)if(L[at]!==g[at])return!1;return!0}}const ro=(s,c,a)=>()=>{if(c.defaultView&&typeof window<"u"){(s=>{const c=window,a=c.Ionic;a&&a.config&&"Object"!==a.config.constructor.name||(c.Ionic=c.Ionic||{},c.Ionic.config=Object.assign(Object.assign({},c.Ionic.config),s))})(Object.assign(Object.assign({},s),{_zoneGate:Me=>a.run(Me)}));const L="__zone_symbol__addEventListener"in c.body?"__zone_symbol__addEventListener":"addEventListener";return function dt(){var s=[];if(typeof window<"u"){var c=window;(!c.customElements||c.Element&&(!c.Element.prototype.closest||!c.Element.prototype.matches||!c.Element.prototype.remove||!c.Element.prototype.getRootNode))&&s.push(w.e(6748).then(w.t.bind(w,723,23))),("function"!=typeof Object.assign||!Object.entries||!Array.prototype.find||!Array.prototype.includes||!String.prototype.startsWith||!String.prototype.endsWith||c.NodeList&&!c.NodeList.prototype.forEach||!c.fetch||!function(){try{var g=new URL("b","http://a");return g.pathname="c%20d","http://a/c%20d"===g.href&&g.searchParams}catch{return!1}}()||typeof WeakMap>"u")&&s.push(w.e(2214).then(w.t.bind(w,4144,23)))}return Promise.all(s)}().then(()=>((s,c)=>typeof window>"u"?Promise.resolve():(0,te.p)().then(()=>(et(),(0,te.b)(JSON.parse('[["ion-menu_3",[[33,"ion-menu-button",{"color":[513],"disabled":[4],"menu":[1],"autoHide":[4,"auto-hide"],"type":[1],"visible":[32]},[[16,"ionMenuChange","visibilityChanged"],[16,"ionSplitPaneVisible","visibilityChanged"]]],[33,"ion-menu",{"contentId":[513,"content-id"],"menuId":[513,"menu-id"],"type":[1025],"disabled":[1028],"side":[513],"swipeGesture":[4,"swipe-gesture"],"maxEdgeStart":[2,"max-edge-start"],"isPaneVisible":[32],"isEndSide":[32],"isOpen":[64],"isActive":[64],"open":[64],"close":[64],"toggle":[64],"setOpen":[64]},[[16,"ionSplitPaneVisible","onSplitPaneChanged"],[2,"click","onBackdropClick"],[0,"keydown","onKeydown"]]],[1,"ion-menu-toggle",{"menu":[1],"autoHide":[4,"auto-hide"],"visible":[32]},[[16,"ionMenuChange","visibilityChanged"],[16,"ionSplitPaneVisible","visibilityChanged"]]]]],["ion-fab_3",[[33,"ion-fab-button",{"color":[513],"activated":[4],"disabled":[4],"download":[1],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1],"show":[4],"translucent":[4],"type":[1],"size":[1],"closeIcon":[1,"close-icon"]}],[1,"ion-fab",{"horizontal":[1],"vertical":[1],"edge":[4],"activated":[1028],"close":[64],"toggle":[64]}],[1,"ion-fab-list",{"activated":[4],"side":[1]}]]],["ion-refresher_2",[[0,"ion-refresher-content",{"pullingIcon":[1025,"pulling-icon"],"pullingText":[1,"pulling-text"],"refreshingSpinner":[1025,"refreshing-spinner"],"refreshingText":[1,"refreshing-text"]}],[32,"ion-refresher",{"pullMin":[2,"pull-min"],"pullMax":[2,"pull-max"],"closeDuration":[1,"close-duration"],"snapbackDuration":[1,"snapback-duration"],"pullFactor":[2,"pull-factor"],"disabled":[4],"nativeRefresher":[32],"state":[32],"complete":[64],"cancel":[64],"getProgress":[64]}]]],["ion-back-button",[[33,"ion-back-button",{"color":[513],"defaultHref":[1025,"default-href"],"disabled":[516],"icon":[1],"text":[1],"type":[1],"routerAnimation":[16]}]]],["ion-toast",[[33,"ion-toast",{"overlayIndex":[2,"overlay-index"],"color":[513],"enterAnimation":[16],"leaveAnimation":[16],"cssClass":[1,"css-class"],"duration":[2],"header":[1],"message":[1],"keyboardClose":[4,"keyboard-close"],"position":[1],"buttons":[16],"translucent":[4],"animated":[4],"icon":[1],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-card_5",[[33,"ion-card",{"color":[513],"button":[4],"type":[1],"disabled":[4],"download":[1],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1]}],[32,"ion-card-content"],[33,"ion-card-header",{"color":[513],"translucent":[4]}],[33,"ion-card-subtitle",{"color":[513]}],[33,"ion-card-title",{"color":[513]}]]],["ion-item-option_3",[[33,"ion-item-option",{"color":[513],"disabled":[4],"download":[1],"expandable":[4],"href":[1],"rel":[1],"target":[1],"type":[1]}],[32,"ion-item-options",{"side":[1],"fireSwipeEvent":[64]}],[0,"ion-item-sliding",{"disabled":[4],"state":[32],"getOpenAmount":[64],"getSlidingRatio":[64],"open":[64],"close":[64],"closeOpened":[64]}]]],["ion-accordion_2",[[49,"ion-accordion",{"value":[1],"disabled":[4],"readonly":[4],"toggleIcon":[1,"toggle-icon"],"toggleIconSlot":[1,"toggle-icon-slot"],"state":[32],"isNext":[32],"isPrevious":[32]}],[33,"ion-accordion-group",{"animated":[4],"multiple":[4],"value":[1025],"disabled":[4],"readonly":[4],"expand":[1],"requestAccordionToggle":[64],"getAccordions":[64]},[[0,"keydown","onKeydown"]]]]],["ion-breadcrumb_2",[[33,"ion-breadcrumb",{"collapsed":[4],"last":[4],"showCollapsedIndicator":[4,"show-collapsed-indicator"],"color":[1],"active":[4],"disabled":[4],"download":[1],"href":[1],"rel":[1],"separator":[4],"target":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16]}],[33,"ion-breadcrumbs",{"color":[1],"maxItems":[2,"max-items"],"itemsBeforeCollapse":[2,"items-before-collapse"],"itemsAfterCollapse":[2,"items-after-collapse"],"collapsed":[32],"activeChanged":[32]},[[0,"collapsedClick","onCollapsedClick"]]]]],["ion-infinite-scroll_2",[[32,"ion-infinite-scroll-content",{"loadingSpinner":[1025,"loading-spinner"],"loadingText":[1,"loading-text"]}],[0,"ion-infinite-scroll",{"threshold":[1],"disabled":[4],"position":[1],"isLoading":[32],"complete":[64]}]]],["ion-reorder_2",[[33,"ion-reorder",null,[[2,"click","onClick"]]],[0,"ion-reorder-group",{"disabled":[4],"state":[32],"complete":[64]}]]],["ion-segment_2",[[33,"ion-segment-button",{"disabled":[4],"layout":[1],"type":[1],"value":[1],"checked":[32]}],[33,"ion-segment",{"color":[513],"disabled":[4],"scrollable":[4],"swipeGesture":[4,"swipe-gesture"],"value":[1025],"selectOnFocus":[4,"select-on-focus"],"activated":[32]},[[0,"keydown","onKeyDown"]]]]],["ion-tab-bar_2",[[33,"ion-tab-button",{"disabled":[4],"download":[1],"href":[1],"rel":[1],"layout":[1025],"selected":[1028],"tab":[1],"target":[1]},[[8,"ionTabBarChanged","onTabBarChanged"]]],[33,"ion-tab-bar",{"color":[513],"selectedTab":[1,"selected-tab"],"translucent":[4],"keyboardVisible":[32]}]]],["ion-chip",[[1,"ion-chip",{"color":[513],"outline":[4],"disabled":[4]}]]],["ion-datetime-button",[[33,"ion-datetime-button",{"color":[513],"disabled":[516],"datetime":[1],"datetimePresentation":[32],"dateText":[32],"timeText":[32],"datetimeActive":[32],"selectedButton":[32]}]]],["ion-searchbar",[[34,"ion-searchbar",{"color":[513],"animated":[4],"autocomplete":[1],"autocorrect":[1],"cancelButtonIcon":[1,"cancel-button-icon"],"cancelButtonText":[1,"cancel-button-text"],"clearIcon":[1,"clear-icon"],"debounce":[2],"disabled":[4],"inputmode":[1],"enterkeyhint":[1],"placeholder":[1],"searchIcon":[1,"search-icon"],"showCancelButton":[1,"show-cancel-button"],"showClearButton":[1,"show-clear-button"],"spellcheck":[4],"type":[1],"value":[1025],"focused":[32],"noAnimate":[32],"setFocus":[64],"getInputElement":[64]}]]],["ion-toggle",[[33,"ion-toggle",{"color":[513],"name":[1],"checked":[1028],"disabled":[4],"value":[1],"enableOnOffLabels":[4,"enable-on-off-labels"],"activated":[32]}]]],["ion-nav_2",[[1,"ion-nav",{"delegate":[16],"swipeGesture":[1028,"swipe-gesture"],"animated":[4],"animation":[16],"rootParams":[16],"root":[1],"push":[64],"insert":[64],"insertPages":[64],"pop":[64],"popTo":[64],"popToRoot":[64],"removeIndex":[64],"setRoot":[64],"setPages":[64],"setRouteId":[64],"getRouteId":[64],"getActive":[64],"getByIndex":[64],"canGoBack":[64],"getPrevious":[64]}],[0,"ion-nav-link",{"component":[1],"componentProps":[16],"routerDirection":[1,"router-direction"],"routerAnimation":[16]}]]],["ion-input",[[34,"ion-input",{"fireFocusEvents":[4,"fire-focus-events"],"color":[513],"accept":[1],"autocapitalize":[1],"autocomplete":[1],"autocorrect":[1],"autofocus":[4],"clearInput":[4,"clear-input"],"clearOnEdit":[4,"clear-on-edit"],"debounce":[2],"disabled":[4],"enterkeyhint":[1],"inputmode":[1],"max":[8],"maxlength":[2],"min":[8],"minlength":[2],"multiple":[4],"name":[1],"pattern":[1],"placeholder":[1],"readonly":[4],"required":[4],"spellcheck":[4],"step":[1],"size":[2],"type":[1],"value":[1032],"hasFocus":[32],"setFocus":[64],"setBlur":[64],"getInputElement":[64]}]]],["ion-textarea",[[34,"ion-textarea",{"fireFocusEvents":[4,"fire-focus-events"],"color":[513],"autocapitalize":[1],"autofocus":[4],"clearOnEdit":[1028,"clear-on-edit"],"debounce":[2],"disabled":[4],"inputmode":[1],"enterkeyhint":[1],"maxlength":[2],"minlength":[2],"name":[1],"placeholder":[1],"readonly":[4],"required":[4],"spellcheck":[4],"cols":[2],"rows":[2],"wrap":[1],"autoGrow":[516,"auto-grow"],"value":[1025],"hasFocus":[32],"setFocus":[64],"setBlur":[64],"getInputElement":[64]}]]],["ion-backdrop",[[33,"ion-backdrop",{"visible":[4],"tappable":[4],"stopPropagation":[4,"stop-propagation"]},[[2,"click","onMouseDown"]]]]],["ion-loading",[[34,"ion-loading",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"message":[1],"cssClass":[1,"css-class"],"duration":[2],"backdropDismiss":[4,"backdrop-dismiss"],"showBackdrop":[4,"show-backdrop"],"spinner":[1025],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-modal",[[33,"ion-modal",{"hasController":[4,"has-controller"],"overlayIndex":[2,"overlay-index"],"delegate":[16],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"breakpoints":[16],"initialBreakpoint":[2,"initial-breakpoint"],"backdropBreakpoint":[2,"backdrop-breakpoint"],"handle":[4],"handleBehavior":[1,"handle-behavior"],"component":[1],"componentProps":[16],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"showBackdrop":[4,"show-backdrop"],"animated":[4],"swipeToClose":[4,"swipe-to-close"],"presentingElement":[16],"htmlAttributes":[16],"isOpen":[4,"is-open"],"trigger":[1],"keepContentsMounted":[4,"keep-contents-mounted"],"canDismiss":[4,"can-dismiss"],"presented":[32],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64],"setCurrentBreakpoint":[64],"getCurrentBreakpoint":[64]}]]],["ion-route_4",[[0,"ion-route",{"url":[1],"component":[1],"componentProps":[16],"beforeLeave":[16],"beforeEnter":[16]}],[0,"ion-route-redirect",{"from":[1],"to":[1]}],[0,"ion-router",{"root":[1],"useHash":[4,"use-hash"],"canTransition":[64],"push":[64],"back":[64],"printDebug":[64],"navChanged":[64]},[[8,"popstate","onPopState"],[4,"ionBackButton","onBackButton"]]],[1,"ion-router-link",{"color":[513],"href":[1],"rel":[1],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"target":[1]}]]],["ion-avatar_3",[[33,"ion-avatar"],[33,"ion-badge",{"color":[513]}],[1,"ion-thumbnail"]]],["ion-col_3",[[1,"ion-col",{"offset":[1],"offsetXs":[1,"offset-xs"],"offsetSm":[1,"offset-sm"],"offsetMd":[1,"offset-md"],"offsetLg":[1,"offset-lg"],"offsetXl":[1,"offset-xl"],"pull":[1],"pullXs":[1,"pull-xs"],"pullSm":[1,"pull-sm"],"pullMd":[1,"pull-md"],"pullLg":[1,"pull-lg"],"pullXl":[1,"pull-xl"],"push":[1],"pushXs":[1,"push-xs"],"pushSm":[1,"push-sm"],"pushMd":[1,"push-md"],"pushLg":[1,"push-lg"],"pushXl":[1,"push-xl"],"size":[1],"sizeXs":[1,"size-xs"],"sizeSm":[1,"size-sm"],"sizeMd":[1,"size-md"],"sizeLg":[1,"size-lg"],"sizeXl":[1,"size-xl"]},[[9,"resize","onResize"]]],[1,"ion-grid",{"fixed":[4]}],[1,"ion-row"]]],["ion-slide_2",[[0,"ion-slide"],[36,"ion-slides",{"options":[8],"pager":[4],"scrollbar":[4],"update":[64],"updateAutoHeight":[64],"slideTo":[64],"slideNext":[64],"slidePrev":[64],"getActiveIndex":[64],"getPreviousIndex":[64],"length":[64],"isEnd":[64],"isBeginning":[64],"startAutoplay":[64],"stopAutoplay":[64],"lockSwipeToNext":[64],"lockSwipeToPrev":[64],"lockSwipes":[64],"getSwiper":[64]}]]],["ion-tab_2",[[1,"ion-tab",{"active":[1028],"delegate":[16],"tab":[1],"component":[1],"setActive":[64]}],[1,"ion-tabs",{"useRouter":[1028,"use-router"],"selectedTab":[32],"select":[64],"getTab":[64],"getSelected":[64],"setRouteId":[64],"getRouteId":[64]}]]],["ion-img",[[1,"ion-img",{"alt":[1],"src":[1],"loadSrc":[32],"loadError":[32]}]]],["ion-progress-bar",[[33,"ion-progress-bar",{"type":[1],"reversed":[4],"value":[2],"buffer":[2],"color":[513]}]]],["ion-range",[[33,"ion-range",{"color":[513],"debounce":[2],"name":[1],"dualKnobs":[4,"dual-knobs"],"min":[2],"max":[2],"pin":[4],"pinFormatter":[16],"snaps":[4],"step":[2],"ticks":[4],"activeBarStart":[1026,"active-bar-start"],"disabled":[4],"value":[1026],"ratioA":[32],"ratioB":[32],"pressedKnob":[32]}]]],["ion-split-pane",[[33,"ion-split-pane",{"contentId":[513,"content-id"],"disabled":[4],"when":[8],"visible":[32]}]]],["ion-text",[[1,"ion-text",{"color":[513]}]]],["ion-virtual-scroll",[[0,"ion-virtual-scroll",{"approxItemHeight":[2,"approx-item-height"],"approxHeaderHeight":[2,"approx-header-height"],"approxFooterHeight":[2,"approx-footer-height"],"headerFn":[16],"footerFn":[16],"items":[16],"itemHeight":[16],"headerHeight":[16],"footerHeight":[16],"renderItem":[16],"renderHeader":[16],"renderFooter":[16],"nodeRender":[16],"domRender":[16],"totalHeight":[32],"positionForItem":[64],"checkRange":[64],"checkEnd":[64]},[[9,"resize","onResize"]]]]],["ion-picker-column-internal",[[33,"ion-picker-column-internal",{"items":[16],"value":[1032],"color":[513],"numericInput":[4,"numeric-input"],"isActive":[32],"scrollActiveItemIntoView":[64],"setValue":[64]}]]],["ion-picker-internal",[[33,"ion-picker-internal",null,[[1,"touchstart","preventTouchStartPropagation"]]]]],["ion-radio_2",[[33,"ion-radio",{"color":[513],"name":[1],"disabled":[4],"value":[8],"checked":[32],"buttonTabindex":[32],"setFocus":[64],"setButtonTabindex":[64]}],[0,"ion-radio-group",{"allowEmptySelection":[4,"allow-empty-selection"],"name":[1],"value":[1032]},[[4,"keydown","onKeydown"]]]]],["ion-ripple-effect",[[1,"ion-ripple-effect",{"type":[1],"addRipple":[64]}]]],["ion-button_2",[[33,"ion-button",{"color":[513],"buttonType":[1025,"button-type"],"disabled":[516],"expand":[513],"fill":[1537],"routerDirection":[1,"router-direction"],"routerAnimation":[16],"download":[1],"href":[1],"rel":[1],"shape":[513],"size":[513],"strong":[4],"target":[1],"type":[1],"form":[1]}],[1,"ion-icon",{"mode":[1025],"color":[1],"ios":[1],"md":[1],"flipRtl":[4,"flip-rtl"],"name":[513],"src":[1],"icon":[8],"size":[1],"lazy":[4],"sanitize":[4],"svgContent":[32],"isVisible":[32],"ariaLabel":[32]}]]],["ion-datetime_3",[[33,"ion-datetime",{"color":[1],"name":[1],"disabled":[4],"readonly":[4],"isDateEnabled":[16],"min":[1025],"max":[1025],"presentation":[1],"cancelText":[1,"cancel-text"],"doneText":[1,"done-text"],"clearText":[1,"clear-text"],"yearValues":[8,"year-values"],"monthValues":[8,"month-values"],"dayValues":[8,"day-values"],"hourValues":[8,"hour-values"],"minuteValues":[8,"minute-values"],"locale":[1],"firstDayOfWeek":[2,"first-day-of-week"],"titleSelectedDatesFormatter":[16],"multiple":[4],"value":[1025],"showDefaultTitle":[4,"show-default-title"],"showDefaultButtons":[4,"show-default-buttons"],"showClearButton":[4,"show-clear-button"],"showDefaultTimeLabel":[4,"show-default-time-label"],"hourCycle":[1,"hour-cycle"],"size":[1],"preferWheel":[4,"prefer-wheel"],"showMonthAndYear":[32],"activeParts":[32],"workingParts":[32],"isPresented":[32],"isTimePopoverOpen":[32],"confirm":[64],"reset":[64],"cancel":[64]}],[34,"ion-picker",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"buttons":[16],"columns":[16],"cssClass":[1,"css-class"],"duration":[2],"showBackdrop":[4,"show-backdrop"],"backdropDismiss":[4,"backdrop-dismiss"],"animated":[4],"htmlAttributes":[16],"presented":[32],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64],"getColumn":[64]}],[32,"ion-picker-column",{"col":[16]}]]],["ion-action-sheet",[[34,"ion-action-sheet",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"buttons":[16],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"header":[1],"subHeader":[1,"sub-header"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-alert",[[34,"ion-alert",{"overlayIndex":[2,"overlay-index"],"keyboardClose":[4,"keyboard-close"],"enterAnimation":[16],"leaveAnimation":[16],"cssClass":[1,"css-class"],"header":[1],"subHeader":[1,"sub-header"],"message":[1],"buttons":[16],"inputs":[1040],"backdropDismiss":[4,"backdrop-dismiss"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"present":[64],"dismiss":[64],"onDidDismiss":[64],"onWillDismiss":[64]},[[4,"keydown","onKeydown"]]]]],["ion-popover",[[33,"ion-popover",{"hasController":[4,"has-controller"],"delegate":[16],"overlayIndex":[2,"overlay-index"],"enterAnimation":[16],"leaveAnimation":[16],"component":[1],"componentProps":[16],"keyboardClose":[4,"keyboard-close"],"cssClass":[1,"css-class"],"backdropDismiss":[4,"backdrop-dismiss"],"event":[8],"showBackdrop":[4,"show-backdrop"],"translucent":[4],"animated":[4],"htmlAttributes":[16],"triggerAction":[1,"trigger-action"],"trigger":[1],"size":[1],"dismissOnSelect":[4,"dismiss-on-select"],"reference":[1],"side":[1],"alignment":[1025],"arrow":[4],"isOpen":[4,"is-open"],"keyboardEvents":[4,"keyboard-events"],"keepContentsMounted":[4,"keep-contents-mounted"],"presented":[32],"presentFromTrigger":[64],"present":[64],"dismiss":[64],"getParentPopover":[64],"onDidDismiss":[64],"onWillDismiss":[64]}]]],["ion-checkbox",[[33,"ion-checkbox",{"color":[513],"name":[1],"checked":[1028],"indeterminate":[1028],"disabled":[4],"value":[8]}]]],["ion-select_3",[[33,"ion-select",{"disabled":[4],"cancelText":[1,"cancel-text"],"okText":[1,"ok-text"],"placeholder":[1],"name":[1],"selectedText":[1,"selected-text"],"multiple":[4],"interface":[1],"interfaceOptions":[8,"interface-options"],"compareWith":[1,"compare-with"],"value":[1032],"isExpanded":[32],"open":[64]}],[1,"ion-select-option",{"disabled":[4],"value":[8]}],[34,"ion-select-popover",{"header":[1],"subHeader":[1,"sub-header"],"message":[1],"multiple":[4],"options":[16]},[[0,"ionChange","onSelect"]]]]],["ion-app_8",[[0,"ion-app",{"setFocus":[64]}],[1,"ion-content",{"color":[513],"fullscreen":[4],"forceOverscroll":[1028,"force-overscroll"],"scrollX":[4,"scroll-x"],"scrollY":[4,"scroll-y"],"scrollEvents":[4,"scroll-events"],"getScrollElement":[64],"getBackgroundElement":[64],"scrollToTop":[64],"scrollToBottom":[64],"scrollByPoint":[64],"scrollToPoint":[64]},[[8,"appload","onAppLoad"]]],[36,"ion-footer",{"collapse":[1],"translucent":[4],"keyboardVisible":[32]}],[36,"ion-header",{"collapse":[1],"translucent":[4]}],[1,"ion-router-outlet",{"mode":[1025],"delegate":[16],"animated":[4],"animation":[16],"swipeHandler":[16],"commit":[64],"setRouteId":[64],"getRouteId":[64]}],[33,"ion-title",{"color":[513],"size":[1]}],[33,"ion-toolbar",{"color":[513]},[[0,"ionStyle","childrenStyle"]]],[34,"ion-buttons",{"collapse":[4]}]]],["ion-spinner",[[1,"ion-spinner",{"color":[513],"duration":[2],"name":[1],"paused":[4]}]]],["ion-item_8",[[33,"ion-item-divider",{"color":[513],"sticky":[4]}],[32,"ion-item-group"],[1,"ion-skeleton-text",{"animated":[4]}],[32,"ion-list",{"lines":[1],"inset":[4],"closeSlidingItems":[64]}],[33,"ion-list-header",{"color":[513],"lines":[1]}],[49,"ion-item",{"color":[513],"button":[4],"detail":[4],"detailIcon":[1,"detail-icon"],"disabled":[4],"download":[1],"fill":[1],"shape":[1],"href":[1],"rel":[1],"lines":[1],"counter":[4],"routerAnimation":[16],"routerDirection":[1,"router-direction"],"target":[1],"type":[1],"counterFormatter":[16],"multipleInputs":[32],"focusable":[32],"counterString":[32]},[[0,"ionChange","handleIonChange"],[0,"ionColor","labelColorChanged"],[0,"ionStyle","itemStyle"]]],[34,"ion-label",{"color":[513],"position":[1],"noAnimate":[32]}],[33,"ion-note",{"color":[513]}]]]]'),c))))(0,{exclude:["ion-tabs","ion-tab"],syncQueue:!0,raf:Pt,jmp:Me=>a.runOutsideAngular(Me),ael(Me,Je,at,Dt){Me[L](Je,at,Dt)},rel(Me,Je,at,Dt){Me.removeEventListener(Je,at,Dt)}}))}};let C=(()=>{class s{static forRoot(a){return{ngModule:s,providers:[{provide:Fr,useValue:a},{provide:o.ip1,useFactory:ro,multi:!0,deps:[Fr,ze.K0,o.R0b]}]}}}return s.\u0275fac=function(a){return new(a||s)},s.\u0275mod=o.oAB({type:s}),s.\u0275inj=o.cJS({providers:[Or,Fo,wo],imports:[[ze.ez]]}),s})()},8834:(Qe,Fe,w)=>{"use strict";w.d(Fe,{c:()=>j});var o=w(5730),x=w(3457);let N;const R=P=>P.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),W=P=>{if(void 0===N){const pe=void 0!==P.style.webkitAnimationName;N=void 0===P.style.animationName&&pe?"-webkit-":""}return N},M=(P,K,pe)=>{const ke=K.startsWith("animation")?W(P):"";P.style.setProperty(ke+K,pe)},U=(P,K)=>{const pe=K.startsWith("animation")?W(P):"";P.style.removeProperty(pe+K)},G=[],E=(P=[],K)=>{if(void 0!==K){const pe=Array.isArray(K)?K:[K];return[...P,...pe]}return P},j=P=>{let K,pe,ke,Te,ie,Be,Q,ue,de,ne,Ee,et,Ue,re=[],oe=[],be=[],Ne=!1,T={},k=[],O=[],te={},ce=0,Ae=!1,De=!1,Ce=!0,ze=!1,dt=!0,St=!1;const Ke=P,nn=[],wt=[],Rt=[],Kt=[],pn=[],Pt=[],Ut=[],it=[],Xt=[],kt=[],Vt="function"==typeof AnimationEffect||void 0!==x.w&&"function"==typeof x.w.AnimationEffect,rn="function"==typeof Element&&"function"==typeof Element.prototype.animate&&Vt,en=()=>kt,Et=(X,le)=>((le?.oneTimeCallback?wt:nn).push({c:X,o:le}),Ue),Ct=()=>{if(rn)kt.forEach(X=>{X.cancel()}),kt.length=0;else{const X=Rt.slice();(0,o.r)(()=>{X.forEach(le=>{U(le,"animation-name"),U(le,"animation-duration"),U(le,"animation-timing-function"),U(le,"animation-iteration-count"),U(le,"animation-delay"),U(le,"animation-play-state"),U(le,"animation-fill-mode"),U(le,"animation-direction")})})}},qe=()=>{pn.forEach(X=>{X?.parentNode&&X.parentNode.removeChild(X)}),pn.length=0},He=()=>void 0!==ie?ie:Q?Q.getFill():"both",Ye=()=>void 0!==de?de:void 0!==Be?Be:Q?Q.getDirection():"normal",pt=()=>Ae?"linear":void 0!==ke?ke:Q?Q.getEasing():"linear",vt=()=>De?0:void 0!==ne?ne:void 0!==pe?pe:Q?Q.getDuration():0,Ht=()=>void 0!==Te?Te:Q?Q.getIterations():1,_t=()=>void 0!==Ee?Ee:void 0!==K?K:Q?Q.getDelay():0,sn=()=>{0!==ce&&(ce--,0===ce&&((()=>{Qt(),it.forEach(Re=>Re()),Xt.forEach(Re=>Re());const X=Ce?1:0,le=k,Ie=O,je=te;Rt.forEach(Re=>{const ot=Re.classList;le.forEach(st=>ot.add(st)),Ie.forEach(st=>ot.remove(st));for(const st in je)je.hasOwnProperty(st)&&M(Re,st,je[st])}),nn.forEach(Re=>Re.c(X,Ue)),wt.forEach(Re=>Re.c(X,Ue)),wt.length=0,dt=!0,Ce&&(ze=!0),Ce=!0})(),Q&&Q.animationFinish()))},dn=(X=!0)=>{qe();const le=(P=>(P.forEach(K=>{for(const pe in K)if(K.hasOwnProperty(pe)){const ke=K[pe];if("easing"===pe)K["animation-timing-function"]=ke,delete K[pe];else{const Te=R(pe);Te!==pe&&(K[Te]=ke,delete K[pe])}}}),P))(re);Rt.forEach(Ie=>{if(le.length>0){const je=((P=[])=>P.map(K=>{const pe=K.offset,ke=[];for(const Te in K)K.hasOwnProperty(Te)&&"offset"!==Te&&ke.push(`${Te}: ${K[Te]};`);return`${100*pe}% { ${ke.join(" ")} }`}).join(" "))(le);et=void 0!==P?P:(P=>{let K=G.indexOf(P);return K<0&&(K=G.push(P)-1),`ion-animation-${K}`})(je);const Re=((P,K,pe)=>{var ke;const Te=(P=>{const K=void 0!==P.getRootNode?P.getRootNode():P;return K.head||K})(pe),ie=W(pe),Be=Te.querySelector("#"+P);if(Be)return Be;const re=(null!==(ke=pe.ownerDocument)&&void 0!==ke?ke:document).createElement("style");return re.id=P,re.textContent=`@${ie}keyframes ${P} { ${K} } @${ie}keyframes ${P}-alt { ${K} }`,Te.appendChild(re),re})(et,je,Ie);pn.push(Re),M(Ie,"animation-duration",`${vt()}ms`),M(Ie,"animation-timing-function",pt()),M(Ie,"animation-delay",`${_t()}ms`),M(Ie,"animation-fill-mode",He()),M(Ie,"animation-direction",Ye());const ot=Ht()===1/0?"infinite":Ht().toString();M(Ie,"animation-iteration-count",ot),M(Ie,"animation-play-state","paused"),X&&M(Ie,"animation-name",`${Re.id}-alt`),(0,o.r)(()=>{M(Ie,"animation-name",Re.id||null)})}})},sr=(X=!0)=>{(()=>{Pt.forEach(je=>je()),Ut.forEach(je=>je());const X=oe,le=be,Ie=T;Rt.forEach(je=>{const Re=je.classList;X.forEach(ot=>Re.add(ot)),le.forEach(ot=>Re.remove(ot));for(const ot in Ie)Ie.hasOwnProperty(ot)&&M(je,ot,Ie[ot])})})(),re.length>0&&(rn?(Rt.forEach(X=>{const le=X.animate(re,{id:Ke,delay:_t(),duration:vt(),easing:pt(),iterations:Ht(),fill:He(),direction:Ye()});le.pause(),kt.push(le)}),kt.length>0&&(kt[0].onfinish=()=>{sn()})):dn(X)),Ne=!0},$n=X=>{if(X=Math.min(Math.max(X,0),.9999),rn)kt.forEach(le=>{le.currentTime=le.effect.getComputedTiming().delay+vt()*X,le.pause()});else{const le=`-${vt()*X}ms`;Rt.forEach(Ie=>{re.length>0&&(M(Ie,"animation-delay",le),M(Ie,"animation-play-state","paused"))})}},Tn=X=>{kt.forEach(le=>{le.effect.updateTiming({delay:_t(),duration:vt(),easing:pt(),iterations:Ht(),fill:He(),direction:Ye()})}),void 0!==X&&$n(X)},xn=(X=!0,le)=>{(0,o.r)(()=>{Rt.forEach(Ie=>{M(Ie,"animation-name",et||null),M(Ie,"animation-duration",`${vt()}ms`),M(Ie,"animation-timing-function",pt()),M(Ie,"animation-delay",void 0!==le?`-${le*vt()}ms`:`${_t()}ms`),M(Ie,"animation-fill-mode",He()||null),M(Ie,"animation-direction",Ye()||null);const je=Ht()===1/0?"infinite":Ht().toString();M(Ie,"animation-iteration-count",je),X&&M(Ie,"animation-name",`${et}-alt`),(0,o.r)(()=>{M(Ie,"animation-name",et||null)})})})},vn=(X=!1,le=!0,Ie)=>(X&&Kt.forEach(je=>{je.update(X,le,Ie)}),rn?Tn(Ie):xn(le,Ie),Ue),gr=()=>{Ne&&(rn?kt.forEach(X=>{X.pause()}):Rt.forEach(X=>{M(X,"animation-play-state","paused")}),St=!0)},fn=()=>{ue=void 0,sn()},Qt=()=>{ue&&clearTimeout(ue)},F=X=>new Promise(le=>{X?.sync&&(De=!0,Et(()=>De=!1,{oneTimeCallback:!0})),Ne||sr(),ze&&(rn?($n(0),Tn()):xn(),ze=!1),dt&&(ce=Kt.length+1,dt=!1),Et(()=>le(),{oneTimeCallback:!0}),Kt.forEach(Ie=>{Ie.play()}),rn?(kt.forEach(X=>{X.play()}),(0===re.length||0===Rt.length)&&sn()):(()=>{if(Qt(),(0,o.r)(()=>{Rt.forEach(X=>{re.length>0&&M(X,"animation-play-state","running")})}),0===re.length||0===Rt.length)sn();else{const X=_t()||0,le=vt()||0,Ie=Ht()||1;isFinite(Ie)&&(ue=setTimeout(fn,X+le*Ie+100)),((P,K)=>{let pe;const ke={passive:!0},ie=Be=>{P===Be.target&&(pe&&pe(),Qt(),(0,o.r)(()=>{Rt.forEach(X=>{U(X,"animation-duration"),U(X,"animation-delay"),U(X,"animation-play-state")}),(0,o.r)(sn)}))};P&&(P.addEventListener("webkitAnimationEnd",ie,ke),P.addEventListener("animationend",ie,ke),pe=()=>{P.removeEventListener("webkitAnimationEnd",ie,ke),P.removeEventListener("animationend",ie,ke)})})(Rt[0])}})(),St=!1}),he=(X,le)=>{const Ie=re[0];return void 0===Ie||void 0!==Ie.offset&&0!==Ie.offset?re=[{offset:0,[X]:le},...re]:Ie[X]=le,Ue};return Ue={parentAnimation:Q,elements:Rt,childAnimations:Kt,id:Ke,animationFinish:sn,from:he,to:(X,le)=>{const Ie=re[re.length-1];return void 0===Ie||void 0!==Ie.offset&&1!==Ie.offset?re=[...re,{offset:1,[X]:le}]:Ie[X]=le,Ue},fromTo:(X,le,Ie)=>he(X,le).to(X,Ie),parent:X=>(Q=X,Ue),play:F,pause:()=>(Kt.forEach(X=>{X.pause()}),gr(),Ue),stop:()=>{Kt.forEach(X=>{X.stop()}),Ne&&(Ct(),Ne=!1),Ae=!1,De=!1,dt=!0,de=void 0,ne=void 0,Ee=void 0,ce=0,ze=!1,Ce=!0,St=!1},destroy:X=>(Kt.forEach(le=>{le.destroy(X)}),(X=>{Ct(),X&&qe()})(X),Rt.length=0,Kt.length=0,re.length=0,nn.length=0,wt.length=0,Ne=!1,dt=!0,Ue),keyframes:X=>{const le=re!==X;return re=X,le&&(X=>{rn?en().forEach(le=>{if(le.effect.setKeyframes)le.effect.setKeyframes(X);else{const Ie=new KeyframeEffect(le.effect.target,X,le.effect.getTiming());le.effect=Ie}}):dn()})(re),Ue},addAnimation:X=>{if(null!=X)if(Array.isArray(X))for(const le of X)le.parent(Ue),Kt.push(le);else X.parent(Ue),Kt.push(X);return Ue},addElement:X=>{if(null!=X)if(1===X.nodeType)Rt.push(X);else if(X.length>=0)for(let le=0;le(ie=X,vn(!0),Ue),direction:X=>(Be=X,vn(!0),Ue),iterations:X=>(Te=X,vn(!0),Ue),duration:X=>(!rn&&0===X&&(X=1),pe=X,vn(!0),Ue),easing:X=>(ke=X,vn(!0),Ue),delay:X=>(K=X,vn(!0),Ue),getWebAnimations:en,getKeyframes:()=>re,getFill:He,getDirection:Ye,getDelay:_t,getIterations:Ht,getEasing:pt,getDuration:vt,afterAddRead:X=>(it.push(X),Ue),afterAddWrite:X=>(Xt.push(X),Ue),afterClearStyles:(X=[])=>{for(const le of X)te[le]="";return Ue},afterStyles:(X={})=>(te=X,Ue),afterRemoveClass:X=>(O=E(O,X),Ue),afterAddClass:X=>(k=E(k,X),Ue),beforeAddRead:X=>(Pt.push(X),Ue),beforeAddWrite:X=>(Ut.push(X),Ue),beforeClearStyles:(X=[])=>{for(const le of X)T[le]="";return Ue},beforeStyles:(X={})=>(T=X,Ue),beforeRemoveClass:X=>(be=E(be,X),Ue),beforeAddClass:X=>(oe=E(oe,X),Ue),onFinish:Et,isRunning:()=>0!==ce&&!St,progressStart:(X=!1,le)=>(Kt.forEach(Ie=>{Ie.progressStart(X,le)}),gr(),Ae=X,Ne||sr(),vn(!1,!0,le),Ue),progressStep:X=>(Kt.forEach(le=>{le.progressStep(X)}),$n(X),Ue),progressEnd:(X,le,Ie)=>(Ae=!1,Kt.forEach(je=>{je.progressEnd(X,le,Ie)}),void 0!==Ie&&(ne=Ie),ze=!1,Ce=!0,0===X?(de="reverse"===Ye()?"normal":"reverse","reverse"===de&&(Ce=!1),rn?(vn(),$n(1-le)):(Ee=(1-le)*vt()*-1,vn(!1,!1))):1===X&&(rn?(vn(),$n(le)):(Ee=le*vt()*-1,vn(!1,!1))),void 0!==X&&(Et(()=>{ne=void 0,de=void 0,Ee=void 0},{oneTimeCallback:!0}),Q||F()),Ue)}}},4349:(Qe,Fe,w)=>{"use strict";w.d(Fe,{G:()=>R});class x{constructor(M,U,_,Y,G){this.id=U,this.name=_,this.disableScroll=G,this.priority=1e6*Y+U,this.ctrl=M}canStart(){return!!this.ctrl&&this.ctrl.canStart(this.name)}start(){return!!this.ctrl&&this.ctrl.start(this.name,this.id,this.priority)}capture(){if(!this.ctrl)return!1;const M=this.ctrl.capture(this.name,this.id,this.priority);return M&&this.disableScroll&&this.ctrl.disableScroll(this.id),M}release(){this.ctrl&&(this.ctrl.release(this.id),this.disableScroll&&this.ctrl.enableScroll(this.id))}destroy(){this.release(),this.ctrl=void 0}}class N{constructor(M,U,_,Y){this.id=U,this.disable=_,this.disableScroll=Y,this.ctrl=M}block(){if(this.ctrl){if(this.disable)for(const M of this.disable)this.ctrl.disableGesture(M,this.id);this.disableScroll&&this.ctrl.disableScroll(this.id)}}unblock(){if(this.ctrl){if(this.disable)for(const M of this.disable)this.ctrl.enableGesture(M,this.id);this.disableScroll&&this.ctrl.enableScroll(this.id)}}destroy(){this.unblock(),this.ctrl=void 0}}const ge="backdrop-no-scroll",R=new class o{constructor(){this.gestureId=0,this.requestedStart=new Map,this.disabledGestures=new Map,this.disabledScroll=new Set}createGesture(M){var U;return new x(this,this.newID(),M.name,null!==(U=M.priority)&&void 0!==U?U:0,!!M.disableScroll)}createBlocker(M={}){return new N(this,this.newID(),M.disable,!!M.disableScroll)}start(M,U,_){return this.canStart(M)?(this.requestedStart.set(U,_),!0):(this.requestedStart.delete(U),!1)}capture(M,U,_){if(!this.start(M,U,_))return!1;const Y=this.requestedStart;let G=-1e4;if(Y.forEach(Z=>{G=Math.max(G,Z)}),G===_){this.capturedId=U,Y.clear();const Z=new CustomEvent("ionGestureCaptured",{detail:{gestureName:M}});return document.dispatchEvent(Z),!0}return Y.delete(U),!1}release(M){this.requestedStart.delete(M),this.capturedId===M&&(this.capturedId=void 0)}disableGesture(M,U){let _=this.disabledGestures.get(M);void 0===_&&(_=new Set,this.disabledGestures.set(M,_)),_.add(U)}enableGesture(M,U){const _=this.disabledGestures.get(M);void 0!==_&&_.delete(U)}disableScroll(M){this.disabledScroll.add(M),1===this.disabledScroll.size&&document.body.classList.add(ge)}enableScroll(M){this.disabledScroll.delete(M),0===this.disabledScroll.size&&document.body.classList.remove(ge)}canStart(M){return!(void 0!==this.capturedId||this.isDisabled(M))}isCaptured(){return void 0!==this.capturedId}isScrollDisabled(){return this.disabledScroll.size>0}isDisabled(M){const U=this.disabledGestures.get(M);return!!(U&&U.size>0)}newID(){return this.gestureId++,this.gestureId}}},7593:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{MENU_BACK_BUTTON_PRIORITY:()=>R,OVERLAY_BACK_BUTTON_PRIORITY:()=>ge,blockHardwareBackButton:()=>x,startHardwareBackButton:()=>N});var o=w(5861);const x=()=>{document.addEventListener("backbutton",()=>{})},N=()=>{const W=document;let M=!1;W.addEventListener("backbutton",()=>{if(M)return;let U=0,_=[];const Y=new CustomEvent("ionBackButton",{bubbles:!1,detail:{register(S,B){_.push({priority:S,handler:B,id:U++})}}});W.dispatchEvent(Y);const G=function(){var S=(0,o.Z)(function*(B){try{if(B?.handler){const E=B.handler(Z);null!=E&&(yield E)}}catch(E){console.error(E)}});return function(E){return S.apply(this,arguments)}}(),Z=()=>{if(_.length>0){let S={priority:Number.MIN_SAFE_INTEGER,handler:()=>{},id:-1};_.forEach(B=>{B.priority>=S.priority&&(S=B)}),M=!0,_=_.filter(B=>B.id!==S.id),G(S).then(()=>M=!1)}};Z()})},ge=100,R=99},5730:(Qe,Fe,w)=>{"use strict";w.d(Fe,{a:()=>M,b:()=>U,c:()=>N,d:()=>B,e:()=>E,f:()=>S,g:()=>_,h:()=>Te,i:()=>W,j:()=>ge,k:()=>Z,l:()=>j,m:()=>G,n:()=>P,o:()=>ke,p:()=>pe,q:()=>ie,r:()=>Y,s:()=>Be,t:()=>o,u:()=>K});const o=(re,oe=0)=>new Promise(be=>{x(re,oe,be)}),x=(re,oe=0,be)=>{let Ne,Q;const T={passive:!0},O=()=>{Ne&&Ne()},te=ce=>{(void 0===ce||re===ce.target)&&(O(),be(ce))};return re&&(re.addEventListener("webkitTransitionEnd",te,T),re.addEventListener("transitionend",te,T),Q=setTimeout(te,oe+500),Ne=()=>{Q&&(clearTimeout(Q),Q=void 0),re.removeEventListener("webkitTransitionEnd",te,T),re.removeEventListener("transitionend",te,T)}),O},N=(re,oe)=>{re.componentOnReady?re.componentOnReady().then(be=>oe(be)):Y(()=>oe(re))},ge=(re,oe=[])=>{const be={};return oe.forEach(Ne=>{re.hasAttribute(Ne)&&(null!==re.getAttribute(Ne)&&(be[Ne]=re.getAttribute(Ne)),re.removeAttribute(Ne))}),be},R=["role","aria-activedescendant","aria-atomic","aria-autocomplete","aria-braillelabel","aria-brailleroledescription","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colindextext","aria-colspan","aria-controls","aria-current","aria-describedby","aria-description","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowindextext","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"],W=(re,oe)=>{let be=R;return oe&&oe.length>0&&(be=be.filter(Ne=>!oe.includes(Ne))),ge(re,be)},M=(re,oe,be,Ne)=>{var Q;if(typeof window<"u"){const k=null===(Q=window?.Ionic)||void 0===Q?void 0:Q.config;if(k){const O=k.get("_ael");if(O)return O(re,oe,be,Ne);if(k._ael)return k._ael(re,oe,be,Ne)}}return re.addEventListener(oe,be,Ne)},U=(re,oe,be,Ne)=>{var Q;if(typeof window<"u"){const k=null===(Q=window?.Ionic)||void 0===Q?void 0:Q.config;if(k){const O=k.get("_rel");if(O)return O(re,oe,be,Ne);if(k._rel)return k._rel(re,oe,be,Ne)}}return re.removeEventListener(oe,be,Ne)},_=(re,oe=re)=>re.shadowRoot||oe,Y=re=>"function"==typeof __zone_symbol__requestAnimationFrame?__zone_symbol__requestAnimationFrame(re):"function"==typeof requestAnimationFrame?requestAnimationFrame(re):setTimeout(re),G=re=>!!re.shadowRoot&&!!re.attachShadow,Z=re=>{const oe=re.closest("ion-item");return oe?oe.querySelector("ion-label"):null},S=re=>{if(re.focus(),re.classList.contains("ion-focusable")){const oe=re.closest("ion-app");oe&&oe.setFocus([re])}},B=(re,oe)=>{let be;const Ne=re.getAttribute("aria-labelledby"),Q=re.id;let T=null!==Ne&&""!==Ne.trim()?Ne:oe+"-lbl",k=null!==Ne&&""!==Ne.trim()?document.getElementById(Ne):Z(re);return k?(null===Ne&&(k.id=T),be=k.textContent,k.setAttribute("aria-hidden","true")):""!==Q.trim()&&(k=document.querySelector(`label[for="${Q}"]`),k&&(""!==k.id?T=k.id:k.id=T=`${Q}-lbl`,be=k.textContent)),{label:k,labelId:T,labelText:be}},E=(re,oe,be,Ne,Q)=>{if(re||G(oe)){let T=oe.querySelector("input.aux-input");T||(T=oe.ownerDocument.createElement("input"),T.type="hidden",T.classList.add("aux-input"),oe.appendChild(T)),T.disabled=Q,T.name=be,T.value=Ne||""}},j=(re,oe,be)=>Math.max(re,Math.min(oe,be)),P=(re,oe)=>{if(!re){const be="ASSERT: "+oe;throw console.error(be),new Error(be)}},K=re=>re.timeStamp||Date.now(),pe=re=>{if(re){const oe=re.changedTouches;if(oe&&oe.length>0){const be=oe[0];return{x:be.clientX,y:be.clientY}}if(void 0!==re.pageX)return{x:re.pageX,y:re.pageY}}return{x:0,y:0}},ke=re=>{const oe="rtl"===document.dir;switch(re){case"start":return oe;case"end":return!oe;default:throw new Error(`"${re}" is not a valid value for [side]. Use "start" or "end" instead.`)}},Te=(re,oe)=>{const be=re._original||re;return{_original:re,emit:ie(be.emit.bind(be),oe)}},ie=(re,oe=0)=>{let be;return(...Ne)=>{clearTimeout(be),be=setTimeout(re,oe,...Ne)}},Be=(re,oe)=>{if(re??(re={}),oe??(oe={}),re===oe)return!0;const be=Object.keys(re);if(be.length!==Object.keys(oe).length)return!1;for(const Ne of be)if(!(Ne in oe)||re[Ne]!==oe[Ne])return!1;return!0}},4292:(Qe,Fe,w)=>{"use strict";w.d(Fe,{m:()=>G});var o=w(5861),x=w(7593),N=w(5730),ge=w(9658),R=w(8834);const W=Z=>(0,R.c)().duration(Z?400:300),M=Z=>{let S,B;const E=Z.width+8,j=(0,R.c)(),P=(0,R.c)();Z.isEndSide?(S=E+"px",B="0px"):(S=-E+"px",B="0px"),j.addElement(Z.menuInnerEl).fromTo("transform",`translateX(${S})`,`translateX(${B})`);const pe="ios"===(0,ge.b)(Z),ke=pe?.2:.25;return P.addElement(Z.backdropEl).fromTo("opacity",.01,ke),W(pe).addAnimation([j,P])},U=Z=>{let S,B;const E=(0,ge.b)(Z),j=Z.width;Z.isEndSide?(S=-j+"px",B=j+"px"):(S=j+"px",B=-j+"px");const P=(0,R.c)().addElement(Z.menuInnerEl).fromTo("transform",`translateX(${B})`,"translateX(0px)"),K=(0,R.c)().addElement(Z.contentEl).fromTo("transform","translateX(0px)",`translateX(${S})`),pe=(0,R.c)().addElement(Z.backdropEl).fromTo("opacity",.01,.32);return W("ios"===E).addAnimation([P,K,pe])},_=Z=>{const S=(0,ge.b)(Z),B=Z.width*(Z.isEndSide?-1:1)+"px",E=(0,R.c)().addElement(Z.contentEl).fromTo("transform","translateX(0px)",`translateX(${B})`);return W("ios"===S).addAnimation(E)},G=(()=>{const Z=new Map,S=[],B=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&ne.open()});return function(ne){return ue.apply(this,arguments)}}(),E=function(){var ue=(0,o.Z)(function*(de){const ne=yield void 0!==de?Te(de):ie();return void 0!==ne&&ne.close()});return function(ne){return ue.apply(this,arguments)}}(),j=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&ne.toggle()});return function(ne){return ue.apply(this,arguments)}}(),P=function(){var ue=(0,o.Z)(function*(de,ne){const Ee=yield Te(ne);return Ee&&(Ee.disabled=!de),Ee});return function(ne,Ee){return ue.apply(this,arguments)}}(),K=function(){var ue=(0,o.Z)(function*(de,ne){const Ee=yield Te(ne);return Ee&&(Ee.swipeGesture=de),Ee});return function(ne,Ee){return ue.apply(this,arguments)}}(),pe=function(){var ue=(0,o.Z)(function*(de){if(null!=de){const ne=yield Te(de);return void 0!==ne&&ne.isOpen()}return void 0!==(yield ie())});return function(ne){return ue.apply(this,arguments)}}(),ke=function(){var ue=(0,o.Z)(function*(de){const ne=yield Te(de);return!!ne&&!ne.disabled});return function(ne){return ue.apply(this,arguments)}}(),Te=function(){var ue=(0,o.Z)(function*(de){return yield De(),"start"===de||"end"===de?Ae(Ce=>Ce.side===de&&!Ce.disabled)||Ae(Ce=>Ce.side===de):null!=de?Ae(Ee=>Ee.menuId===de):Ae(Ee=>!Ee.disabled)||(S.length>0?S[0].el:void 0)});return function(ne){return ue.apply(this,arguments)}}(),ie=function(){var ue=(0,o.Z)(function*(){return yield De(),O()});return function(){return ue.apply(this,arguments)}}(),Be=function(){var ue=(0,o.Z)(function*(){return yield De(),te()});return function(){return ue.apply(this,arguments)}}(),re=function(){var ue=(0,o.Z)(function*(){return yield De(),ce()});return function(){return ue.apply(this,arguments)}}(),oe=(ue,de)=>{Z.set(ue,de)},Q=ue=>{const de=ue.side;S.filter(ne=>ne.side===de&&ne!==ue).forEach(ne=>ne.disabled=!0)},T=function(){var ue=(0,o.Z)(function*(de,ne,Ee){if(ce())return!1;if(ne){const Ce=yield ie();Ce&&de.el!==Ce&&(yield Ce.setOpen(!1,!1))}return de._setOpen(ne,Ee)});return function(ne,Ee,Ce){return ue.apply(this,arguments)}}(),O=()=>Ae(ue=>ue._isOpen),te=()=>S.map(ue=>ue.el),ce=()=>S.some(ue=>ue.isAnimating),Ae=ue=>{const de=S.find(ue);if(void 0!==de)return de.el},De=()=>Promise.all(Array.from(document.querySelectorAll("ion-menu")).map(ue=>new Promise(de=>(0,N.c)(ue,de))));return oe("reveal",_),oe("push",U),oe("overlay",M),typeof document<"u"&&document.addEventListener("ionBackButton",ue=>{const de=O();de&&ue.detail.register(x.MENU_BACK_BUTTON_PRIORITY,()=>de.close())}),{registerAnimation:oe,get:Te,getMenus:Be,getOpen:ie,isEnabled:ke,swipeGesture:K,isAnimating:re,isOpen:pe,enable:P,toggle:j,close:E,open:B,_getOpenSync:O,_createAnimation:(ue,de)=>{const ne=Z.get(ue);if(!ne)throw new Error("animation not registered");return ne(de)},_register:ue=>{S.indexOf(ue)<0&&(ue.disabled||Q(ue),S.push(ue))},_unregister:ue=>{const de=S.indexOf(ue);de>-1&&S.splice(de,1)},_setOpen:T,_setActiveMenu:Q}})()},3457:(Qe,Fe,w)=>{"use strict";w.d(Fe,{w:()=>o});const o=typeof window<"u"?window:void 0},1308:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>rt,H:()=>Rt,a:()=>Ce,b:()=>cn,c:()=>Cn,e:()=>Er,f:()=>On,g:()=>ze,h:()=>nn,i:()=>zt,j:()=>Ye,k:()=>Dn,p:()=>j,r:()=>er,s:()=>B});var o=w(5861);let N,ge,R,W=!1,M=!1,U=!1,_=!1,Y=!1;const G=typeof window<"u"?window:{},Z=G.document||{head:{}},S={$flags$:0,$resourcesUrl$:"",jmp:F=>F(),raf:F=>requestAnimationFrame(F),ael:(F,q,he,we)=>F.addEventListener(q,he,we),rel:(F,q,he,we)=>F.removeEventListener(q,he,we),ce:(F,q)=>new CustomEvent(F,q)},B=F=>{Object.assign(S,F)},j=F=>Promise.resolve(F),P=(()=>{try{return new CSSStyleSheet,"function"==typeof(new CSSStyleSheet).replaceSync}catch{}return!1})(),K=(F,q,he,we)=>{he&&he.map(([Pe,X,le])=>{const Ie=ke(F,Pe),je=pe(q,le),Re=Te(Pe);S.ael(Ie,X,je,Re),(q.$rmListeners$=q.$rmListeners$||[]).push(()=>S.rel(Ie,X,je,Re))})},pe=(F,q)=>he=>{try{256&F.$flags$?F.$lazyInstance$[q](he):(F.$queuedListeners$=F.$queuedListeners$||[]).push([q,he])}catch(we){Tn(we)}},ke=(F,q)=>4&q?Z:8&q?G:16&q?Z.body:F,Te=F=>0!=(2&F),be="s-id",Ne="sty-id",Q="c-id",k="http://www.w3.org/1999/xlink",ce=new WeakMap,Ae=(F,q,he)=>{let we=tr.get(F);P&&he?(we=we||new CSSStyleSheet,"string"==typeof we?we=q:we.replaceSync(q)):we=q,tr.set(F,we)},De=(F,q,he,we)=>{let Pe=de(q,he);const X=tr.get(Pe);if(F=11===F.nodeType?F:Z,X)if("string"==typeof X){let Ie,le=ce.get(F=F.head||F);le||ce.set(F,le=new Set),le.has(Pe)||(F.host&&(Ie=F.querySelector(`[${Ne}="${Pe}"]`))?Ie.innerHTML=X:(Ie=Z.createElement("style"),Ie.innerHTML=X,F.insertBefore(Ie,F.querySelector("link"))),le&&le.add(Pe))}else F.adoptedStyleSheets.includes(X)||(F.adoptedStyleSheets=[...F.adoptedStyleSheets,X]);return Pe},de=(F,q)=>"sc-"+(q&&32&F.$flags$?F.$tagName$+"-"+q:F.$tagName$),ne=F=>F.replace(/\/\*!@([^\/]+)\*\/[^\{]+\{/g,"$1{"),Ce=F=>Ir.push(F),ze=F=>dn(F).$modeName$,dt={},Ke=F=>"object"==(F=typeof F)||"function"===F,nn=(F,q,...he)=>{let we=null,Pe=null,X=null,le=!1,Ie=!1;const je=[],Re=st=>{for(let Mt=0;Mtst[Mt]).join(" "))}}if("function"==typeof F)return F(null===q?{}:q,je,pn);const ot=wt(F,null);return ot.$attrs$=q,je.length>0&&(ot.$children$=je),ot.$key$=Pe,ot.$name$=X,ot},wt=(F,q)=>({$flags$:0,$tag$:F,$text$:q,$elm$:null,$children$:null,$attrs$:null,$key$:null,$name$:null}),Rt={},pn={forEach:(F,q)=>F.map(Pt).forEach(q),map:(F,q)=>F.map(Pt).map(q).map(Ut)},Pt=F=>({vattrs:F.$attrs$,vchildren:F.$children$,vkey:F.$key$,vname:F.$name$,vtag:F.$tag$,vtext:F.$text$}),Ut=F=>{if("function"==typeof F.vtag){const he=Object.assign({},F.vattrs);return F.vkey&&(he.key=F.vkey),F.vname&&(he.name=F.vname),nn(F.vtag,he,...F.vchildren||[])}const q=wt(F.vtag,F.vtext);return q.$attrs$=F.vattrs,q.$children$=F.vchildren,q.$key$=F.vkey,q.$name$=F.vname,q},it=(F,q,he,we,Pe,X)=>{if(he!==we){let le=$n(F,q),Ie=q.toLowerCase();if("class"===q){const je=F.classList,Re=kt(he),ot=kt(we);je.remove(...Re.filter(st=>st&&!ot.includes(st))),je.add(...ot.filter(st=>st&&!Re.includes(st)))}else if("style"===q){for(const je in he)(!we||null==we[je])&&(je.includes("-")?F.style.removeProperty(je):F.style[je]="");for(const je in we)(!he||we[je]!==he[je])&&(je.includes("-")?F.style.setProperty(je,we[je]):F.style[je]=we[je])}else if("key"!==q)if("ref"===q)we&&we(F);else if(le||"o"!==q[0]||"n"!==q[1]){const je=Ke(we);if((le||je&&null!==we)&&!Pe)try{if(F.tagName.includes("-"))F[q]=we;else{const ot=we??"";"list"===q?le=!1:(null==he||F[q]!=ot)&&(F[q]=ot)}}catch{}let Re=!1;Ie!==(Ie=Ie.replace(/^xlink\:?/,""))&&(q=Ie,Re=!0),null==we||!1===we?(!1!==we||""===F.getAttribute(q))&&(Re?F.removeAttributeNS(k,q):F.removeAttribute(q)):(!le||4&X||Pe)&&!je&&(we=!0===we?"":we,Re?F.setAttributeNS(k,q,we):F.setAttribute(q,we))}else q="-"===q[2]?q.slice(3):$n(G,Ie)?Ie.slice(2):Ie[2]+q.slice(3),he&&S.rel(F,q,he,!1),we&&S.ael(F,q,we,!1)}},Xt=/\s/,kt=F=>F?F.split(Xt):[],Vt=(F,q,he,we)=>{const Pe=11===q.$elm$.nodeType&&q.$elm$.host?q.$elm$.host:q.$elm$,X=F&&F.$attrs$||dt,le=q.$attrs$||dt;for(we in X)we in le||it(Pe,we,X[we],void 0,he,q.$flags$);for(we in le)it(Pe,we,X[we],le[we],he,q.$flags$)},rn=(F,q,he,we)=>{const Pe=q.$children$[he];let le,Ie,je,X=0;if(W||(U=!0,"slot"===Pe.$tag$&&(N&&we.classList.add(N+"-s"),Pe.$flags$|=Pe.$children$?2:1)),null!==Pe.$text$)le=Pe.$elm$=Z.createTextNode(Pe.$text$);else if(1&Pe.$flags$)le=Pe.$elm$=Z.createTextNode("");else{if(_||(_="svg"===Pe.$tag$),le=Pe.$elm$=Z.createElementNS(_?"http://www.w3.org/2000/svg":"http://www.w3.org/1999/xhtml",2&Pe.$flags$?"slot-fb":Pe.$tag$),_&&"foreignObject"===Pe.$tag$&&(_=!1),Vt(null,Pe,_),(F=>null!=F)(N)&&le["s-si"]!==N&&le.classList.add(le["s-si"]=N),Pe.$children$)for(X=0;X{S.$flags$|=1;const he=F.childNodes;for(let we=he.length-1;we>=0;we--){const Pe=he[we];Pe["s-hn"]!==R&&Pe["s-ol"]&&(Et(Pe).insertBefore(Pe,nt(Pe)),Pe["s-ol"].remove(),Pe["s-ol"]=void 0,U=!0),q&&Vn(Pe,q)}S.$flags$&=-2},en=(F,q,he,we,Pe,X)=>{let Ie,le=F["s-cr"]&&F["s-cr"].parentNode||F;for(le.shadowRoot&&le.tagName===R&&(le=le.shadowRoot);Pe<=X;++Pe)we[Pe]&&(Ie=rn(null,he,Pe,F),Ie&&(we[Pe].$elm$=Ie,le.insertBefore(Ie,nt(q))))},gt=(F,q,he,we,Pe)=>{for(;q<=he;++q)(we=F[q])&&(Pe=we.$elm$,Nt(we),M=!0,Pe["s-ol"]?Pe["s-ol"].remove():Vn(Pe,!0),Pe.remove())},ht=(F,q)=>F.$tag$===q.$tag$&&("slot"===F.$tag$?F.$name$===q.$name$:F.$key$===q.$key$),nt=F=>F&&F["s-ol"]||F,Et=F=>(F["s-ol"]?F["s-ol"]:F).parentNode,ut=(F,q)=>{const he=q.$elm$=F.$elm$,we=F.$children$,Pe=q.$children$,X=q.$tag$,le=q.$text$;let Ie;null===le?(_="svg"===X||"foreignObject"!==X&&_,"slot"===X||Vt(F,q,_),null!==we&&null!==Pe?((F,q,he,we)=>{let Bt,An,Pe=0,X=0,le=0,Ie=0,je=q.length-1,Re=q[0],ot=q[je],st=we.length-1,Mt=we[0],Wt=we[st];for(;Pe<=je&&X<=st;)if(null==Re)Re=q[++Pe];else if(null==ot)ot=q[--je];else if(null==Mt)Mt=we[++X];else if(null==Wt)Wt=we[--st];else if(ht(Re,Mt))ut(Re,Mt),Re=q[++Pe],Mt=we[++X];else if(ht(ot,Wt))ut(ot,Wt),ot=q[--je],Wt=we[--st];else if(ht(Re,Wt))("slot"===Re.$tag$||"slot"===Wt.$tag$)&&Vn(Re.$elm$.parentNode,!1),ut(Re,Wt),F.insertBefore(Re.$elm$,ot.$elm$.nextSibling),Re=q[++Pe],Wt=we[--st];else if(ht(ot,Mt))("slot"===Re.$tag$||"slot"===Wt.$tag$)&&Vn(ot.$elm$.parentNode,!1),ut(ot,Mt),F.insertBefore(ot.$elm$,Re.$elm$),ot=q[--je],Mt=we[++X];else{for(le=-1,Ie=Pe;Ie<=je;++Ie)if(q[Ie]&&null!==q[Ie].$key$&&q[Ie].$key$===Mt.$key$){le=Ie;break}le>=0?(An=q[le],An.$tag$!==Mt.$tag$?Bt=rn(q&&q[X],he,le,F):(ut(An,Mt),q[le]=void 0,Bt=An.$elm$),Mt=we[++X]):(Bt=rn(q&&q[X],he,X,F),Mt=we[++X]),Bt&&Et(Re.$elm$).insertBefore(Bt,nt(Re.$elm$))}Pe>je?en(F,null==we[st+1]?null:we[st+1].$elm$,he,we,X,st):X>st&>(q,Pe,je)})(he,we,q,Pe):null!==Pe?(null!==F.$text$&&(he.textContent=""),en(he,null,q,Pe,0,Pe.length-1)):null!==we&>(we,0,we.length-1),_&&"svg"===X&&(_=!1)):(Ie=he["s-cr"])?Ie.parentNode.textContent=le:F.$text$!==le&&(he.data=le)},Ct=F=>{const q=F.childNodes;let he,we,Pe,X,le,Ie;for(we=0,Pe=q.length;we{let q,he,we,Pe,X,le,Ie=0;const je=F.childNodes,Re=je.length;for(;Ie=0;le--)he=we[le],!he["s-cn"]&&!he["s-nr"]&&he["s-hn"]!==q["s-hn"]&&(gn(he,Pe)?(X=qe.find(ot=>ot.$nodeToRelocate$===he),M=!0,he["s-sn"]=he["s-sn"]||Pe,X?X.$slotRefNode$=q:qe.push({$slotRefNode$:q,$nodeToRelocate$:he}),he["s-sr"]&&qe.map(ot=>{gn(ot.$nodeToRelocate$,he["s-sn"])&&(X=qe.find(st=>st.$nodeToRelocate$===he),X&&!ot.$slotRefNode$&&(ot.$slotRefNode$=X.$slotRefNode$))})):qe.some(ot=>ot.$nodeToRelocate$===he)||qe.push({$nodeToRelocate$:he}));1===q.nodeType&&on(q)}},gn=(F,q)=>1===F.nodeType?null===F.getAttribute("slot")&&""===q||F.getAttribute("slot")===q:F["s-sn"]===q||""===q,Nt=F=>{F.$attrs$&&F.$attrs$.ref&&F.$attrs$.ref(null),F.$children$&&F.$children$.map(Nt)},zt=F=>dn(F).$hostElement$,Er=(F,q,he)=>{const we=zt(F);return{emit:Pe=>jn(we,q,{bubbles:!!(4&he),composed:!!(2&he),cancelable:!!(1&he),detail:Pe})}},jn=(F,q,he)=>{const we=S.ce(q,he);return F.dispatchEvent(we),we},Xn=(F,q)=>{q&&!F.$onRenderResolve$&&q["s-p"]&&q["s-p"].push(new Promise(he=>F.$onRenderResolve$=he))},En=(F,q)=>{if(F.$flags$|=16,!(4&F.$flags$))return Xn(F,F.$ancestorComponent$),Cn(()=>xe(F,q));F.$flags$|=512},xe=(F,q)=>{const we=F.$lazyInstance$;let Pe;return q&&(F.$flags$|=256,F.$queuedListeners$&&(F.$queuedListeners$.map(([X,le])=>vt(we,X,le)),F.$queuedListeners$=null),Pe=vt(we,"componentWillLoad")),Pe=Ht(Pe,()=>vt(we,"componentWillRender")),Ht(Pe,()=>se(F,we,q))},se=function(){var F=(0,o.Z)(function*(q,he,we){const Pe=q.$hostElement$,le=Pe["s-rc"];we&&(F=>{const q=F.$cmpMeta$,he=F.$hostElement$,we=q.$flags$,X=De(he.shadowRoot?he.shadowRoot:he.getRootNode(),q,F.$modeName$);10&we&&(he["s-sc"]=X,he.classList.add(X+"-h"),2&we&&he.classList.add(X+"-s"))})(q);ye(q,he),le&&(le.map(je=>je()),Pe["s-rc"]=void 0);{const je=Pe["s-p"],Re=()=>He(q);0===je.length?Re():(Promise.all(je).then(Re),q.$flags$|=4,je.length=0)}});return function(he,we,Pe){return F.apply(this,arguments)}}(),ye=(F,q,he)=>{try{q=q.render&&q.render(),F.$flags$&=-17,F.$flags$|=2,((F,q)=>{const he=F.$hostElement$,we=F.$cmpMeta$,Pe=F.$vnode$||wt(null,null),X=(F=>F&&F.$tag$===Rt)(q)?q:nn(null,null,q);if(R=he.tagName,we.$attrsToReflect$&&(X.$attrs$=X.$attrs$||{},we.$attrsToReflect$.map(([le,Ie])=>X.$attrs$[Ie]=he[le])),X.$tag$=null,X.$flags$|=4,F.$vnode$=X,X.$elm$=Pe.$elm$=he.shadowRoot||he,N=he["s-sc"],ge=he["s-cr"],W=0!=(1&we.$flags$),M=!1,ut(Pe,X),S.$flags$|=1,U){on(X.$elm$);let le,Ie,je,Re,ot,st,Mt=0;for(;Mt{const he=F.$hostElement$,Pe=F.$lazyInstance$,X=F.$ancestorComponent$;vt(Pe,"componentDidRender"),64&F.$flags$?vt(Pe,"componentDidUpdate"):(F.$flags$|=64,_t(he),vt(Pe,"componentDidLoad"),F.$onReadyResolve$(he),X||pt()),F.$onInstanceResolve$(he),F.$onRenderResolve$&&(F.$onRenderResolve$(),F.$onRenderResolve$=void 0),512&F.$flags$&&Un(()=>En(F,!1)),F.$flags$&=-517},Ye=F=>{{const q=dn(F),he=q.$hostElement$.isConnected;return he&&2==(18&q.$flags$)&&En(q,!1),he}},pt=F=>{_t(Z.documentElement),Un(()=>jn(G,"appload",{detail:{namespace:"ionic"}}))},vt=(F,q,he)=>{if(F&&F[q])try{return F[q](he)}catch(we){Tn(we)}},Ht=(F,q)=>F&&F.then?F.then(q):q(),_t=F=>F.classList.add("hydrated"),Ln=(F,q,he,we,Pe,X,le)=>{let Ie,je,Re,ot;if(1===X.nodeType){for(Ie=X.getAttribute(Q),Ie&&(je=Ie.split("."),(je[0]===le||"0"===je[0])&&(Re={$flags$:0,$hostId$:je[0],$nodeId$:je[1],$depth$:je[2],$index$:je[3],$tag$:X.tagName.toLowerCase(),$elm$:X,$attrs$:null,$children$:null,$key$:null,$name$:null,$text$:null},q.push(Re),X.removeAttribute(Q),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re,F=Re,we&&"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$))),ot=X.childNodes.length-1;ot>=0;ot--)Ln(F,q,he,we,Pe,X.childNodes[ot],le);if(X.shadowRoot)for(ot=X.shadowRoot.childNodes.length-1;ot>=0;ot--)Ln(F,q,he,we,Pe,X.shadowRoot.childNodes[ot],le)}else if(8===X.nodeType)je=X.nodeValue.split("."),(je[1]===le||"0"===je[1])&&(Ie=je[0],Re={$flags$:0,$hostId$:je[1],$nodeId$:je[2],$depth$:je[3],$index$:je[4],$elm$:X,$attrs$:null,$children$:null,$key$:null,$name$:null,$tag$:null,$text$:null},"t"===Ie?(Re.$elm$=X.nextSibling,Re.$elm$&&3===Re.$elm$.nodeType&&(Re.$text$=Re.$elm$.textContent,q.push(Re),X.remove(),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re,we&&"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$))):Re.$hostId$===le&&("s"===Ie?(Re.$tag$="slot",X["s-sn"]=je[5]?Re.$name$=je[5]:"",X["s-sr"]=!0,we&&(Re.$elm$=Z.createElement(Re.$tag$),Re.$name$&&Re.$elm$.setAttribute("name",Re.$name$),X.parentNode.insertBefore(Re.$elm$,X),X.remove(),"0"===Re.$depth$&&(we[Re.$index$]=Re.$elm$)),he.push(Re),F.$children$||(F.$children$=[]),F.$children$[Re.$index$]=Re):"r"===Ie&&(we?X.remove():(Pe["s-cr"]=X,X["s-cn"]=!0))));else if(F&&"style"===F.$tag$){const st=wt(null,X.textContent);st.$elm$=X,st.$index$="0",F.$children$=[st]}},mn=(F,q)=>{if(1===F.nodeType){let he=0;for(;he{if(q.$members$){F.watchers&&(q.$watchers$=F.watchers);const we=Object.entries(q.$members$),Pe=F.prototype;if(we.map(([X,[le]])=>{31&le||2&he&&32&le?Object.defineProperty(Pe,X,{get(){return((F,q)=>dn(this).$instanceValues$.get(q))(0,X)},set(Ie){((F,q,he,we)=>{const Pe=dn(F),X=Pe.$hostElement$,le=Pe.$instanceValues$.get(q),Ie=Pe.$flags$,je=Pe.$lazyInstance$;he=((F,q)=>null==F||Ke(F)?F:4&q?"false"!==F&&(""===F||!!F):2&q?parseFloat(F):1&q?String(F):F)(he,we.$members$[q][0]);const Re=Number.isNaN(le)&&Number.isNaN(he);if((!(8&Ie)||void 0===le)&&he!==le&&!Re&&(Pe.$instanceValues$.set(q,he),je)){if(we.$watchers$&&128&Ie){const st=we.$watchers$[q];st&&st.map(Mt=>{try{je[Mt](he,le,q)}catch(Wt){Tn(Wt,X)}})}2==(18&Ie)&&En(Pe,!1)}})(this,X,Ie,q)},configurable:!0,enumerable:!0}):1&he&&64&le&&Object.defineProperty(Pe,X,{value(...Ie){const je=dn(this);return je.$onInstancePromise$.then(()=>je.$lazyInstance$[X](...Ie))}})}),1&he){const X=new Map;Pe.attributeChangedCallback=function(le,Ie,je){S.jmp(()=>{const Re=X.get(le);if(this.hasOwnProperty(Re))je=this[Re],delete this[Re];else if(Pe.hasOwnProperty(Re)&&"number"==typeof this[Re]&&this[Re]==je)return;this[Re]=(null!==je||"boolean"!=typeof this[Re])&&je})},F.observedAttributes=we.filter(([le,Ie])=>15&Ie[0]).map(([le,Ie])=>{const je=Ie[1]||le;return X.set(je,le),512&Ie[0]&&q.$attrsToReflect$.push([le,je]),je})}}return F},ee=function(){var F=(0,o.Z)(function*(q,he,we,Pe,X){if(0==(32&he.$flags$)){{if(he.$flags$|=32,(X=vn(we)).then){const Re=()=>{};X=yield X,Re()}X.isProxied||(we.$watchers$=X.watchers,fe(X,we,2),X.isProxied=!0);const je=()=>{};he.$flags$|=8;try{new X(he)}catch(Re){Tn(Re)}he.$flags$&=-9,he.$flags$|=128,je(),Se(he.$lazyInstance$)}if(X.style){let je=X.style;"string"!=typeof je&&(je=je[he.$modeName$=(F=>Ir.map(q=>q(F)).find(q=>!!q))(q)]);const Re=de(we,he.$modeName$);if(!tr.has(Re)){const ot=()=>{};Ae(Re,je,!!(1&we.$flags$)),ot()}}}const le=he.$ancestorComponent$,Ie=()=>En(he,!0);le&&le["s-rc"]?le["s-rc"].push(Ie):Ie()});return function(he,we,Pe,X,le){return F.apply(this,arguments)}}(),Se=F=>{vt(F,"connectedCallback")},yt=F=>{const q=F["s-cr"]=Z.createComment("");q["s-cn"]=!0,F.insertBefore(q,F.firstChild)},cn=(F,q={})=>{const we=[],Pe=q.exclude||[],X=G.customElements,le=Z.head,Ie=le.querySelector("meta[charset]"),je=Z.createElement("style"),Re=[],ot=Z.querySelectorAll(`[${Ne}]`);let st,Mt=!0,Wt=0;for(Object.assign(S,q),S.$resourcesUrl$=new URL(q.resourcesUrl||"./",Z.baseURI).href,S.$flags$|=2;Wt{Bt[1].map(An=>{const Rn={$flags$:An[0],$tagName$:An[1],$members$:An[2],$listeners$:An[3]};Rn.$members$=An[2],Rn.$listeners$=An[3],Rn.$attrsToReflect$=[],Rn.$watchers$={};const Pn=Rn.$tagName$,ur=class extends HTMLElement{constructor(mr){super(mr),sr(mr=this,Rn),1&Rn.$flags$&&mr.attachShadow({mode:"open",delegatesFocus:!!(16&Rn.$flags$)})}connectedCallback(){st&&(clearTimeout(st),st=null),Mt?Re.push(this):S.jmp(()=>(F=>{if(0==(1&S.$flags$)){const q=dn(F),he=q.$cmpMeta$,we=()=>{};if(1&q.$flags$)K(F,q,he.$listeners$),Se(q.$lazyInstance$);else{let Pe;if(q.$flags$|=1,Pe=F.getAttribute(be),Pe){if(1&he.$flags$){const X=De(F.shadowRoot,he,F.getAttribute("s-mode"));F.classList.remove(X+"-h",X+"-s")}((F,q,he,we)=>{const X=F.shadowRoot,le=[],je=X?[]:null,Re=we.$vnode$=wt(q,null);S.$orgLocNodes$||mn(Z.body,S.$orgLocNodes$=new Map),F[be]=he,F.removeAttribute(be),Ln(Re,le,[],je,F,F,he),le.map(ot=>{const st=ot.$hostId$+"."+ot.$nodeId$,Mt=S.$orgLocNodes$.get(st),Wt=ot.$elm$;Mt&&""===Mt["s-en"]&&Mt.parentNode.insertBefore(Wt,Mt.nextSibling),X||(Wt["s-hn"]=q,Mt&&(Wt["s-ol"]=Mt,Wt["s-ol"]["s-nr"]=Wt)),S.$orgLocNodes$.delete(st)}),X&&je.map(ot=>{ot&&X.appendChild(ot)})})(F,he.$tagName$,Pe,q)}Pe||12&he.$flags$&&yt(F);{let X=F;for(;X=X.parentNode||X.host;)if(1===X.nodeType&&X.hasAttribute("s-id")&&X["s-p"]||X["s-p"]){Xn(q,q.$ancestorComponent$=X);break}}he.$members$&&Object.entries(he.$members$).map(([X,[le]])=>{if(31&le&&F.hasOwnProperty(X)){const Ie=F[X];delete F[X],F[X]=Ie}}),Un(()=>ee(F,q,he))}we()}})(this))}disconnectedCallback(){S.jmp(()=>(F=>{if(0==(1&S.$flags$)){const q=dn(this),he=q.$lazyInstance$;q.$rmListeners$&&(q.$rmListeners$.map(we=>we()),q.$rmListeners$=void 0),vt(he,"disconnectedCallback")}})())}componentOnReady(){return dn(this).$onReadyPromise$}};Rn.$lazyBundleId$=Bt[0],!Pe.includes(Pn)&&!X.get(Pn)&&(we.push(Pn),X.define(Pn,fe(ur,Rn,1)))})}),je.innerHTML=we+"{visibility:hidden}.hydrated{visibility:inherit}",je.setAttribute("data-styles",""),le.insertBefore(je,Ie?Ie.nextSibling:le.firstChild),Mt=!1,Re.length?Re.map(Bt=>Bt.connectedCallback()):S.jmp(()=>st=setTimeout(pt,30))},Dn=F=>{const q=new URL(F,S.$resourcesUrl$);return q.origin!==G.location.origin?q.href:q.pathname},sn=new WeakMap,dn=F=>sn.get(F),er=(F,q)=>sn.set(q.$lazyInstance$=F,q),sr=(F,q)=>{const he={$flags$:0,$hostElement$:F,$cmpMeta$:q,$instanceValues$:new Map};return he.$onInstancePromise$=new Promise(we=>he.$onInstanceResolve$=we),he.$onReadyPromise$=new Promise(we=>he.$onReadyResolve$=we),F["s-p"]=[],F["s-rc"]=[],K(F,he,q.$listeners$),sn.set(F,he)},$n=(F,q)=>q in F,Tn=(F,q)=>(0,console.error)(F,q),xn=new Map,vn=(F,q,he)=>{const we=F.$tagName$.replace(/-/g,"_"),Pe=F.$lazyBundleId$,X=xn.get(Pe);return X?X[we]:w(863)(`./${Pe}.entry.js`).then(le=>(xn.set(Pe,le),le[we]),Tn)},tr=new Map,Ir=[],cr=[],gr=[],$t=(F,q)=>he=>{F.push(he),Y||(Y=!0,q&&4&S.$flags$?Un(Qt):S.raf(Qt))},fn=F=>{for(let q=0;q{fn(cr),fn(gr),(Y=cr.length>0)&&S.raf(Qt)},Un=F=>j().then(F),On=$t(cr,!1),Cn=$t(gr,!0),rt={isDev:!1,isBrowser:!0,isServer:!1,isTesting:!1}},697:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>ge,a:()=>R,b:()=>W,c:()=>M,d:()=>U,e:()=>oe,g:()=>Q,l:()=>Be,s:()=>be,t:()=>G});var o=w(5861),x=w(1308),N=w(5730);const ge="ionViewWillEnter",R="ionViewDidEnter",W="ionViewWillLeave",M="ionViewDidLeave",U="ionViewWillUnload",G=T=>new Promise((k,O)=>{(0,x.c)(()=>{Z(T),S(T).then(te=>{te.animation&&te.animation.destroy(),B(T),k(te)},te=>{B(T),O(te)})})}),Z=T=>{const k=T.enteringEl,O=T.leavingEl;Ne(k,O,T.direction),T.showGoBack?k.classList.add("can-go-back"):k.classList.remove("can-go-back"),be(k,!1),k.style.setProperty("pointer-events","none"),O&&(be(O,!1),O.style.setProperty("pointer-events","none"))},S=function(){var T=(0,o.Z)(function*(k){const O=yield E(k);return O&&x.B.isBrowser?j(O,k):P(k)});return function(O){return T.apply(this,arguments)}}(),B=T=>{const k=T.enteringEl,O=T.leavingEl;k.classList.remove("ion-page-invisible"),k.style.removeProperty("pointer-events"),void 0!==O&&(O.classList.remove("ion-page-invisible"),O.style.removeProperty("pointer-events"))},E=function(){var T=(0,o.Z)(function*(k){return k.leavingEl&&k.animated&&0!==k.duration?k.animationBuilder?k.animationBuilder:"ios"===k.mode?(yield Promise.resolve().then(w.bind(w,3953))).iosTransitionAnimation:(yield Promise.resolve().then(w.bind(w,3880))).mdTransitionAnimation:void 0});return function(O){return T.apply(this,arguments)}}(),j=function(){var T=(0,o.Z)(function*(k,O){yield K(O,!0);const te=k(O.baseEl,O);Te(O.enteringEl,O.leavingEl);const ce=yield ke(te,O);return O.progressCallback&&O.progressCallback(void 0),ce&&ie(O.enteringEl,O.leavingEl),{hasCompleted:ce,animation:te}});return function(O,te){return T.apply(this,arguments)}}(),P=function(){var T=(0,o.Z)(function*(k){const O=k.enteringEl,te=k.leavingEl;return yield K(k,!1),Te(O,te),ie(O,te),{hasCompleted:!0}});return function(O){return T.apply(this,arguments)}}(),K=function(){var T=(0,o.Z)(function*(k,O){const ce=(void 0!==k.deepWait?k.deepWait:O)?[oe(k.enteringEl),oe(k.leavingEl)]:[re(k.enteringEl),re(k.leavingEl)];yield Promise.all(ce),yield pe(k.viewIsReady,k.enteringEl)});return function(O,te){return T.apply(this,arguments)}}(),pe=function(){var T=(0,o.Z)(function*(k,O){k&&(yield k(O))});return function(O,te){return T.apply(this,arguments)}}(),ke=(T,k)=>{const O=k.progressCallback,te=new Promise(ce=>{T.onFinish(Ae=>ce(1===Ae))});return O?(T.progressStart(!0),O(T)):T.play(),te},Te=(T,k)=>{Be(k,W),Be(T,ge)},ie=(T,k)=>{Be(T,R),Be(k,M)},Be=(T,k)=>{if(T){const O=new CustomEvent(k,{bubbles:!1,cancelable:!1});T.dispatchEvent(O)}},re=T=>T?new Promise(k=>(0,N.c)(T,k)):Promise.resolve(),oe=function(){var T=(0,o.Z)(function*(k){const O=k;if(O){if(null!=O.componentOnReady){if(null!=(yield O.componentOnReady()))return}else if(null!=O.__registerHost)return void(yield new Promise(ce=>(0,N.r)(ce)));yield Promise.all(Array.from(O.children).map(oe))}});return function(O){return T.apply(this,arguments)}}(),be=(T,k)=>{k?(T.setAttribute("aria-hidden","true"),T.classList.add("ion-page-hidden")):(T.hidden=!1,T.removeAttribute("aria-hidden"),T.classList.remove("ion-page-hidden"))},Ne=(T,k,O)=>{void 0!==T&&(T.style.zIndex="back"===O?"99":"101"),void 0!==k&&(k.style.zIndex="100")},Q=T=>T.classList.contains("ion-page")?T:T.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")||T},1911:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{GESTURE_CONTROLLER:()=>o.G,createGesture:()=>_});var o=w(4349);const x=(S,B,E,j)=>{const P=N(S)?{capture:!!j.capture,passive:!!j.passive}:!!j.capture;let K,pe;return S.__zone_symbol__addEventListener?(K="__zone_symbol__addEventListener",pe="__zone_symbol__removeEventListener"):(K="addEventListener",pe="removeEventListener"),S[K](B,E,P),()=>{S[pe](B,E,P)}},N=S=>{if(void 0===ge)try{const B=Object.defineProperty({},"passive",{get:()=>{ge=!0}});S.addEventListener("optsTest",()=>{},B)}catch{ge=!1}return!!ge};let ge;const M=S=>S instanceof Document?S:S.ownerDocument,_=S=>{let B=!1,E=!1,j=!0,P=!1;const K=Object.assign({disableScroll:!1,direction:"x",gesturePriority:0,passive:!0,maxAngle:40,threshold:10},S),pe=K.canStart,ke=K.onWillStart,Te=K.onStart,ie=K.onEnd,Be=K.notCaptured,re=K.onMove,oe=K.threshold,be=K.passive,Ne=K.blurOnStart,Q={type:"pan",startX:0,startY:0,startTime:0,currentX:0,currentY:0,velocityX:0,velocityY:0,deltaX:0,deltaY:0,currentTime:0,event:void 0,data:void 0},T=((S,B,E)=>{const j=E*(Math.PI/180),P="x"===S,K=Math.cos(j),pe=B*B;let ke=0,Te=0,ie=!1,Be=0;return{start(re,oe){ke=re,Te=oe,Be=0,ie=!0},detect(re,oe){if(!ie)return!1;const be=re-ke,Ne=oe-Te,Q=be*be+Ne*Ne;if(QK?1:k<-K?-1:0,ie=!1,!0},isGesture:()=>0!==Be,getDirection:()=>Be}})(K.direction,K.threshold,K.maxAngle),k=o.G.createGesture({name:S.gestureName,priority:S.gesturePriority,disableScroll:S.disableScroll}),ce=()=>{!B||(P=!1,re&&re(Q))},Ae=()=>!!k.capture()&&(B=!0,j=!1,Q.startX=Q.currentX,Q.startY=Q.currentY,Q.startTime=Q.currentTime,ke?ke(Q).then(ue):ue(),!0),ue=()=>{Ne&&(()=>{if(typeof document<"u"){const ze=document.activeElement;ze?.blur&&ze.blur()}})(),Te&&Te(Q),j=!0},de=()=>{B=!1,E=!1,P=!1,j=!0,k.release()},ne=ze=>{const dt=B,et=j;if(de(),et){if(Y(Q,ze),dt)return void(ie&&ie(Q));Be&&Be(Q)}},Ee=((S,B,E,j,P)=>{let K,pe,ke,Te,ie,Be,re,oe=0;const be=De=>{oe=Date.now()+2e3,B(De)&&(!pe&&E&&(pe=x(S,"touchmove",E,P)),ke||(ke=x(De.target,"touchend",Q,P)),Te||(Te=x(De.target,"touchcancel",Q,P)))},Ne=De=>{oe>Date.now()||!B(De)||(!Be&&E&&(Be=x(M(S),"mousemove",E,P)),re||(re=x(M(S),"mouseup",T,P)))},Q=De=>{k(),j&&j(De)},T=De=>{O(),j&&j(De)},k=()=>{pe&&pe(),ke&&ke(),Te&&Te(),pe=ke=Te=void 0},O=()=>{Be&&Be(),re&&re(),Be=re=void 0},te=()=>{k(),O()},ce=(De=!0)=>{De?(K||(K=x(S,"touchstart",be,P)),ie||(ie=x(S,"mousedown",Ne,P))):(K&&K(),ie&&ie(),K=ie=void 0,te())};return{enable:ce,stop:te,destroy:()=>{ce(!1),j=E=B=void 0}}})(K.el,ze=>{const dt=Z(ze);return!(E||!j||(G(ze,Q),Q.startX=Q.currentX,Q.startY=Q.currentY,Q.startTime=Q.currentTime=dt,Q.velocityX=Q.velocityY=Q.deltaX=Q.deltaY=0,Q.event=ze,pe&&!1===pe(Q))||(k.release(),!k.start()))&&(E=!0,0===oe?Ae():(T.start(Q.startX,Q.startY),!0))},ze=>{B?!P&&j&&(P=!0,Y(Q,ze),requestAnimationFrame(ce)):(Y(Q,ze),T.detect(Q.currentX,Q.currentY)&&(!T.isGesture()||!Ae())&&Ce())},ne,{capture:!1,passive:be}),Ce=()=>{de(),Ee.stop(),Be&&Be(Q)};return{enable(ze=!0){ze||(B&&ne(void 0),de()),Ee.enable(ze)},destroy(){k.destroy(),Ee.destroy()}}},Y=(S,B)=>{if(!B)return;const E=S.currentX,j=S.currentY,P=S.currentTime;G(B,S);const K=S.currentX,pe=S.currentY,Te=(S.currentTime=Z(B))-P;if(Te>0&&Te<100){const Be=(pe-j)/Te;S.velocityX=(K-E)/Te*.7+.3*S.velocityX,S.velocityY=.7*Be+.3*S.velocityY}S.deltaX=K-S.startX,S.deltaY=pe-S.startY,S.event=B},G=(S,B)=>{let E=0,j=0;if(S){const P=S.changedTouches;if(P&&P.length>0){const K=P[0];E=K.clientX,j=K.clientY}else void 0!==S.pageX&&(E=S.pageX,j=S.pageY)}B.currentX=E,B.currentY=j},Z=S=>S.timeStamp||Date.now()},9658:(Qe,Fe,w)=>{"use strict";w.d(Fe,{a:()=>G,b:()=>ce,c:()=>N,g:()=>Y,i:()=>Ae});var o=w(1308);class x{constructor(){this.m=new Map}reset(ue){this.m=new Map(Object.entries(ue))}get(ue,de){const ne=this.m.get(ue);return void 0!==ne?ne:de}getBoolean(ue,de=!1){const ne=this.m.get(ue);return void 0===ne?de:"string"==typeof ne?"true"===ne:!!ne}getNumber(ue,de){const ne=parseFloat(this.m.get(ue));return isNaN(ne)?void 0!==de?de:NaN:ne}set(ue,de){this.m.set(ue,de)}}const N=new x,U="ionic:",_="ionic-persist-config",Y=De=>Z(De),G=(De,ue)=>("string"==typeof De&&(ue=De,De=void 0),Y(De).includes(ue)),Z=(De=window)=>{if(typeof De>"u")return[];De.Ionic=De.Ionic||{};let ue=De.Ionic.platforms;return null==ue&&(ue=De.Ionic.platforms=S(De),ue.forEach(de=>De.document.documentElement.classList.add(`plt-${de}`))),ue},S=De=>{const ue=N.get("platform");return Object.keys(O).filter(de=>{const ne=ue?.[de];return"function"==typeof ne?ne(De):O[de](De)})},E=De=>!!(T(De,/iPad/i)||T(De,/Macintosh/i)&&ie(De)),K=De=>T(De,/android|sink/i),ie=De=>k(De,"(any-pointer:coarse)"),re=De=>oe(De)||be(De),oe=De=>!!(De.cordova||De.phonegap||De.PhoneGap),be=De=>!!De.Capacitor?.isNative,T=(De,ue)=>ue.test(De.navigator.userAgent),k=(De,ue)=>{var de;return null===(de=De.matchMedia)||void 0===de?void 0:de.call(De,ue).matches},O={ipad:E,iphone:De=>T(De,/iPhone/i),ios:De=>T(De,/iPhone|iPod/i)||E(De),android:K,phablet:De=>{const ue=De.innerWidth,de=De.innerHeight,ne=Math.min(ue,de),Ee=Math.max(ue,de);return ne>390&&ne<520&&Ee>620&&Ee<800},tablet:De=>{const ue=De.innerWidth,de=De.innerHeight,ne=Math.min(ue,de),Ee=Math.max(ue,de);return E(De)||(De=>K(De)&&!T(De,/mobile/i))(De)||ne>460&&ne<820&&Ee>780&&Ee<1400},cordova:oe,capacitor:be,electron:De=>T(De,/electron/i),pwa:De=>{var ue;return!(!(null===(ue=De.matchMedia)||void 0===ue?void 0:ue.call(De,"(display-mode: standalone)").matches)&&!De.navigator.standalone)},mobile:ie,mobileweb:De=>ie(De)&&!re(De),desktop:De=>!ie(De),hybrid:re};let te;const ce=De=>De&&(0,o.g)(De)||te,Ae=(De={})=>{if(typeof window>"u")return;const ue=window.document,de=window,ne=de.Ionic=de.Ionic||{},Ee={};De._ael&&(Ee.ael=De._ael),De._rel&&(Ee.rel=De._rel),De._ce&&(Ee.ce=De._ce),(0,o.s)(Ee);const Ce=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(De=>{try{const ue=De.sessionStorage.getItem(_);return null!==ue?JSON.parse(ue):{}}catch{return{}}})(de)),{persistConfig:!1}),ne.config),(De=>{const ue={};return De.location.search.slice(1).split("&").map(de=>de.split("=")).map(([de,ne])=>[decodeURIComponent(de),decodeURIComponent(ne)]).filter(([de])=>((De,ue)=>De.substr(0,ue.length)===ue)(de,U)).map(([de,ne])=>[de.slice(U.length),ne]).forEach(([de,ne])=>{ue[de]=ne}),ue})(de)),De);N.reset(Ce),N.getBoolean("persistConfig")&&((De,ue)=>{try{De.sessionStorage.setItem(_,JSON.stringify(ue))}catch{return}})(de,Ce),Z(de),ne.config=N,ne.mode=te=N.get("mode",ue.documentElement.getAttribute("mode")||(G(de,"ios")?"ios":"md")),N.set("mode",te),ue.documentElement.setAttribute("mode",te),ue.documentElement.classList.add(te),N.getBoolean("_testing")&&N.set("animated",!1);const ze=et=>{var Ue;return null===(Ue=et.tagName)||void 0===Ue?void 0:Ue.startsWith("ION-")},dt=et=>["ios","md"].includes(et);(0,o.a)(et=>{for(;et;){const Ue=et.mode||et.getAttribute("mode");if(Ue){if(dt(Ue))return Ue;ze(et)&&console.warn('Invalid ionic mode: "'+Ue+'", expected: "ios" or "md"')}et=et.parentElement}return te})}},3953:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{iosTransitionAnimation:()=>S,shadow:()=>M});var o=w(8834),x=w(697);w(3457),w(1308);const W=B=>document.querySelector(`${B}.ion-cloned-element`),M=B=>B.shadowRoot||B,U=B=>{const E="ION-TABS"===B.tagName?B:B.querySelector("ion-tabs"),j="ion-content ion-header:not(.header-collapse-condense-inactive) ion-title.title-large";if(null!=E){const P=E.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");return null!=P?P.querySelector(j):null}return B.querySelector(j)},_=(B,E)=>{const j="ION-TABS"===B.tagName?B:B.querySelector("ion-tabs");let P=[];if(null!=j){const K=j.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");null!=K&&(P=K.querySelectorAll("ion-buttons"))}else P=B.querySelectorAll("ion-buttons");for(const K of P){const pe=K.closest("ion-header"),ke=pe&&!pe.classList.contains("header-collapse-condense-inactive"),Te=K.querySelector("ion-back-button"),ie=K.classList.contains("buttons-collapse"),Be="start"===K.slot||""===K.slot;if(null!==Te&&Be&&(ie&&ke&&E||!ie))return Te}return null},G=(B,E,j,P,K,pe)=>{const ke=E?`calc(100% - ${pe.right+4}px)`:pe.left-4+"px",Te=E?"7px":"-7px",ie=E?"-4px":"4px",Be=E?"-4px":"4px",re=E?"right":"left",oe=E?"left":"right",Q=j?[{offset:0,opacity:1,transform:`translate3d(${ie}, ${pe.top-46}px, 0) scale(1)`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${Te}, ${K.top-40}px, 0) scale(2.1)`}]:[{offset:0,opacity:0,transform:`translate3d(${Te}, ${K.top-40}px, 0) scale(2.1)`},{offset:1,opacity:1,transform:`translate3d(${ie}, ${pe.top-46}px, 0) scale(1)`}],O=j?[{offset:0,opacity:1,transform:`translate3d(${Be}, ${pe.top-46}px, 0) scale(1)`},{offset:.2,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`},{offset:1,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`}]:[{offset:0,opacity:0,transform:`translate3d(${Be}, ${pe.top-41}px, 0) scale(0.6)`},{offset:1,opacity:1,transform:`translate3d(${Be}, ${pe.top-46}px, 0) scale(1)`}],te=(0,o.c)(),ce=(0,o.c)(),Ae=W("ion-back-button"),De=M(Ae).querySelector(".button-text"),ue=M(Ae).querySelector("ion-icon");Ae.text=P.text,Ae.mode=P.mode,Ae.icon=P.icon,Ae.color=P.color,Ae.disabled=P.disabled,Ae.style.setProperty("display","block"),Ae.style.setProperty("position","fixed"),ce.addElement(ue),te.addElement(De),te.beforeStyles({"transform-origin":`${re} center`}).beforeAddWrite(()=>{P.style.setProperty("display","none"),Ae.style.setProperty(re,ke)}).afterAddWrite(()=>{P.style.setProperty("display",""),Ae.style.setProperty("display","none"),Ae.style.removeProperty(re)}).keyframes(Q),ce.beforeStyles({"transform-origin":`${oe} center`}).keyframes(O),B.addAnimation([te,ce])},Z=(B,E,j,P,K,pe)=>{const ke=E?`calc(100% - ${K.right}px)`:`${K.left}px`,Te=E?"-18px":"18px",ie=E?"right":"left",oe=j?[{offset:0,opacity:0,transform:`translate3d(${Te}, ${pe.top-4}px, 0) scale(0.49)`},{offset:.1,opacity:0},{offset:1,opacity:1,transform:`translate3d(0, ${K.top-2}px, 0) scale(1)`}]:[{offset:0,opacity:.99,transform:`translate3d(0, ${K.top-2}px, 0) scale(1)`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${Te}, ${pe.top-4}px, 0) scale(0.5)`}],be=W("ion-title"),Ne=(0,o.c)();be.innerText=P.innerText,be.size=P.size,be.color=P.color,Ne.addElement(be),Ne.beforeStyles({"transform-origin":`${ie} center`,height:"46px",display:"",position:"relative",[ie]:ke}).beforeAddWrite(()=>{P.style.setProperty("display","none")}).afterAddWrite(()=>{P.style.setProperty("display",""),be.style.setProperty("display","none")}).keyframes(oe),B.addAnimation(Ne)},S=(B,E)=>{var j;try{const P="cubic-bezier(0.32,0.72,0,1)",K="opacity",pe="transform",ke="0%",ie="rtl"===B.ownerDocument.dir,Be=ie?"-99.5%":"99.5%",re=ie?"33%":"-33%",oe=E.enteringEl,be=E.leavingEl,Ne="back"===E.direction,Q=oe.querySelector(":scope > ion-content"),T=oe.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *"),k=oe.querySelectorAll(":scope > ion-header > ion-toolbar"),O=(0,o.c)(),te=(0,o.c)();if(O.addElement(oe).duration((null!==(j=E.duration)&&void 0!==j?j:0)||540).easing(E.easing||P).fill("both").beforeRemoveClass("ion-page-invisible"),be&&null!=B){const ue=(0,o.c)();ue.addElement(B),O.addAnimation(ue)}if(Q||0!==k.length||0!==T.length?(te.addElement(Q),te.addElement(T)):te.addElement(oe.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),O.addAnimation(te),Ne?te.beforeClearStyles([K]).fromTo("transform",`translateX(${re})`,`translateX(${ke})`).fromTo(K,.8,1):te.beforeClearStyles([K]).fromTo("transform",`translateX(${Be})`,`translateX(${ke})`),Q){const ue=M(Q).querySelector(".transition-effect");if(ue){const de=ue.querySelector(".transition-cover"),ne=ue.querySelector(".transition-shadow"),Ee=(0,o.c)(),Ce=(0,o.c)(),ze=(0,o.c)();Ee.addElement(ue).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),Ce.addElement(de).beforeClearStyles([K]).fromTo(K,0,.1),ze.addElement(ne).beforeClearStyles([K]).fromTo(K,.03,.7),Ee.addAnimation([Ce,ze]),te.addAnimation([Ee])}}const ce=oe.querySelector("ion-header.header-collapse-condense"),{forward:Ae,backward:De}=((B,E,j,P,K)=>{const pe=_(P,j),ke=U(K),Te=U(P),ie=_(K,j),Be=null!==pe&&null!==ke&&!j,re=null!==Te&&null!==ie&&j;if(Be){const oe=ke.getBoundingClientRect(),be=pe.getBoundingClientRect();Z(B,E,j,ke,oe,be),G(B,E,j,pe,oe,be)}else if(re){const oe=Te.getBoundingClientRect(),be=ie.getBoundingClientRect();Z(B,E,j,Te,oe,be),G(B,E,j,ie,oe,be)}return{forward:Be,backward:re}})(O,ie,Ne,oe,be);if(k.forEach(ue=>{const de=(0,o.c)();de.addElement(ue),O.addAnimation(de);const ne=(0,o.c)();ne.addElement(ue.querySelector("ion-title"));const Ee=(0,o.c)(),Ce=Array.from(ue.querySelectorAll("ion-buttons,[menuToggle]")),ze=ue.closest("ion-header"),dt=ze?.classList.contains("header-collapse-condense-inactive");let et;et=Ce.filter(Ne?wt=>{const Rt=wt.classList.contains("buttons-collapse");return Rt&&!dt||!Rt}:wt=>!wt.classList.contains("buttons-collapse")),Ee.addElement(et);const Ue=(0,o.c)();Ue.addElement(ue.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])"));const St=(0,o.c)();St.addElement(M(ue).querySelector(".toolbar-background"));const Ke=(0,o.c)(),nn=ue.querySelector("ion-back-button");if(nn&&Ke.addElement(nn),de.addAnimation([ne,Ee,Ue,St,Ke]),Ee.fromTo(K,.01,1),Ue.fromTo(K,.01,1),Ne)dt||ne.fromTo("transform",`translateX(${re})`,`translateX(${ke})`).fromTo(K,.01,1),Ue.fromTo("transform",`translateX(${re})`,`translateX(${ke})`),Ke.fromTo(K,.01,1);else if(ce||ne.fromTo("transform",`translateX(${Be})`,`translateX(${ke})`).fromTo(K,.01,1),Ue.fromTo("transform",`translateX(${Be})`,`translateX(${ke})`),St.beforeClearStyles([K,"transform"]),ze?.translucent?St.fromTo("transform",ie?"translateX(-100%)":"translateX(100%)","translateX(0px)"):St.fromTo(K,.01,"var(--opacity)"),Ae||Ke.fromTo(K,.01,1),nn&&!Ae){const Rt=(0,o.c)();Rt.addElement(M(nn).querySelector(".button-text")).fromTo("transform",ie?"translateX(-100px)":"translateX(100px)","translateX(0px)"),de.addAnimation(Rt)}}),be){const ue=(0,o.c)(),de=be.querySelector(":scope > ion-content"),ne=be.querySelectorAll(":scope > ion-header > ion-toolbar"),Ee=be.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *");if(de||0!==ne.length||0!==Ee.length?(ue.addElement(de),ue.addElement(Ee)):ue.addElement(be.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),O.addAnimation(ue),Ne){ue.beforeClearStyles([K]).fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)");const Ce=(0,x.g)(be);O.afterAddWrite(()=>{"normal"===O.getDirection()&&Ce.style.setProperty("display","none")})}else ue.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).fromTo(K,1,.8);if(de){const Ce=M(de).querySelector(".transition-effect");if(Ce){const ze=Ce.querySelector(".transition-cover"),dt=Ce.querySelector(".transition-shadow"),et=(0,o.c)(),Ue=(0,o.c)(),St=(0,o.c)();et.addElement(Ce).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),Ue.addElement(ze).beforeClearStyles([K]).fromTo(K,.1,0),St.addElement(dt).beforeClearStyles([K]).fromTo(K,.7,.03),et.addAnimation([Ue,St]),ue.addAnimation([et])}}ne.forEach(Ce=>{const ze=(0,o.c)();ze.addElement(Ce);const dt=(0,o.c)();dt.addElement(Ce.querySelector("ion-title"));const et=(0,o.c)(),Ue=Ce.querySelectorAll("ion-buttons,[menuToggle]"),St=Ce.closest("ion-header"),Ke=St?.classList.contains("header-collapse-condense-inactive"),nn=Array.from(Ue).filter(Ut=>{const it=Ut.classList.contains("buttons-collapse");return it&&!Ke||!it});et.addElement(nn);const wt=(0,o.c)(),Rt=Ce.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])");Rt.length>0&&wt.addElement(Rt);const Kt=(0,o.c)();Kt.addElement(M(Ce).querySelector(".toolbar-background"));const pn=(0,o.c)(),Pt=Ce.querySelector("ion-back-button");if(Pt&&pn.addElement(Pt),ze.addAnimation([dt,et,wt,pn,Kt]),O.addAnimation(ze),pn.fromTo(K,.99,0),et.fromTo(K,.99,0),wt.fromTo(K,.99,0),Ne){if(Ke||dt.fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)").fromTo(K,.99,0),wt.fromTo("transform",`translateX(${ke})`,ie?"translateX(-100%)":"translateX(100%)"),Kt.beforeClearStyles([K,"transform"]),St?.translucent?Kt.fromTo("transform","translateX(0px)",ie?"translateX(-100%)":"translateX(100%)"):Kt.fromTo(K,"var(--opacity)",0),Pt&&!De){const it=(0,o.c)();it.addElement(M(Pt).querySelector(".button-text")).fromTo("transform",`translateX(${ke})`,`translateX(${(ie?-124:124)+"px"})`),ze.addAnimation(it)}}else Ke||dt.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).fromTo(K,.99,0).afterClearStyles([pe,K]),wt.fromTo("transform",`translateX(${ke})`,`translateX(${re})`).afterClearStyles([pe,K]),pn.afterClearStyles([K]),dt.afterClearStyles([K]),et.afterClearStyles([K])})}return O}catch(P){throw P}}},3880:(Qe,Fe,w)=>{"use strict";w.r(Fe),w.d(Fe,{mdTransitionAnimation:()=>R});var o=w(8834),x=w(697);w(3457),w(1308);const R=(W,M)=>{var U,_,Y;const S="back"===M.direction,E=M.leavingEl,j=(0,x.g)(M.enteringEl),P=j.querySelector("ion-toolbar"),K=(0,o.c)();if(K.addElement(j).fill("both").beforeRemoveClass("ion-page-invisible"),S?K.duration((null!==(U=M.duration)&&void 0!==U?U:0)||200).easing("cubic-bezier(0.47,0,0.745,0.715)"):K.duration((null!==(_=M.duration)&&void 0!==_?_:0)||280).easing("cubic-bezier(0.36,0.66,0.04,1)").fromTo("transform","translateY(40px)","translateY(0px)").fromTo("opacity",.01,1),P){const pe=(0,o.c)();pe.addElement(P),K.addAnimation(pe)}if(E&&S){K.duration((null!==(Y=M.duration)&&void 0!==Y?Y:0)||200).easing("cubic-bezier(0.47,0,0.745,0.715)");const pe=(0,o.c)();pe.addElement((0,x.g)(E)).onFinish(ke=>{1===ke&&pe.elements.length>0&&pe.elements[0].style.setProperty("display","none")}).fromTo("transform","translateY(0px)","translateY(40px)").fromTo("opacity",1,0),K.addAnimation(pe)}return K}},4414:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>de,a:()=>U,b:()=>_,c:()=>S,d:()=>Ne,e:()=>E,f:()=>T,g:()=>te,h:()=>W,i:()=>Ae,j:()=>K,k:()=>oe,l:()=>Y,m:()=>G,s:()=>ue,t:()=>B});var o=w(5861),x=w(9658),N=w(7593),ge=w(5730);let R=0;const W=new WeakMap,M=ne=>({create:Ee=>j(ne,Ee),dismiss:(Ee,Ce,ze)=>Be(document,Ee,Ce,ne,ze),getTop:()=>(0,o.Z)(function*(){return oe(document,ne)})()}),U=M("ion-alert"),_=M("ion-action-sheet"),Y=M("ion-loading"),G=M("ion-modal"),S=M("ion-popover"),B=M("ion-toast"),E=ne=>{typeof document<"u"&&ie(document);const Ee=R++;ne.overlayIndex=Ee,ne.hasAttribute("id")||(ne.id=`ion-overlay-${Ee}`)},j=(ne,Ee)=>typeof window<"u"&&typeof window.customElements<"u"?window.customElements.whenDefined(ne).then(()=>{const Ce=document.createElement(ne);return Ce.classList.add("overlay-hidden"),Object.assign(Ce,Object.assign(Object.assign({},Ee),{hasController:!0})),k(document).appendChild(Ce),new Promise(ze=>(0,ge.c)(Ce,ze))}):Promise.resolve(),P='[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])',K=(ne,Ee)=>{let Ce=ne.querySelector(P);const ze=Ce?.shadowRoot;ze&&(Ce=ze.querySelector(P)||Ce),Ce?(0,ge.f)(Ce):Ee.focus()},ke=(ne,Ee)=>{const Ce=Array.from(ne.querySelectorAll(P));let ze=Ce.length>0?Ce[Ce.length-1]:null;const dt=ze?.shadowRoot;dt&&(ze=dt.querySelector(P)||ze),ze?ze.focus():Ee.focus()},ie=ne=>{0===R&&(R=1,ne.addEventListener("focus",Ee=>{((ne,Ee)=>{const Ce=oe(Ee,"ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover"),ze=ne.target;Ce&&ze&&!Ce.classList.contains("ion-disable-focus-trap")&&(Ce.shadowRoot?(()=>{if(Ce.contains(ze))Ce.lastFocus=ze;else{const Ue=Ce.lastFocus;K(Ce,Ce),Ue===Ee.activeElement&&ke(Ce,Ce),Ce.lastFocus=Ee.activeElement}})():(()=>{if(Ce===ze)Ce.lastFocus=void 0;else{const Ue=(0,ge.g)(Ce);if(!Ue.contains(ze))return;const St=Ue.querySelector(".ion-overlay-wrapper");if(!St)return;if(St.contains(ze))Ce.lastFocus=ze;else{const Ke=Ce.lastFocus;K(St,Ce),Ke===Ee.activeElement&&ke(St,Ce),Ce.lastFocus=Ee.activeElement}}})())})(Ee,ne)},!0),ne.addEventListener("ionBackButton",Ee=>{const Ce=oe(ne);Ce?.backdropDismiss&&Ee.detail.register(N.OVERLAY_BACK_BUTTON_PRIORITY,()=>Ce.dismiss(void 0,de))}),ne.addEventListener("keyup",Ee=>{if("Escape"===Ee.key){const Ce=oe(ne);Ce?.backdropDismiss&&Ce.dismiss(void 0,de)}}))},Be=(ne,Ee,Ce,ze,dt)=>{const et=oe(ne,ze,dt);return et?et.dismiss(Ee,Ce):Promise.reject("overlay does not exist")},oe=(ne,Ee,Ce)=>{const ze=((ne,Ee)=>(void 0===Ee&&(Ee="ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover,ion-toast"),Array.from(ne.querySelectorAll(Ee)).filter(Ce=>Ce.overlayIndex>0)))(ne,Ee).filter(dt=>!(ne=>ne.classList.contains("overlay-hidden"))(dt));return void 0===Ce?ze[ze.length-1]:ze.find(dt=>dt.id===Ce)},be=(ne=!1)=>{const Ce=k(document).querySelector("ion-router-outlet, ion-nav, #ion-view-container-root");!Ce||(ne?Ce.setAttribute("aria-hidden","true"):Ce.removeAttribute("aria-hidden"))},Ne=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt,et){var Ue,St;if(Ee.presented)return;be(!0),Ee.presented=!0,Ee.willPresent.emit(),null===(Ue=Ee.willPresentShorthand)||void 0===Ue||Ue.emit();const Ke=(0,x.b)(Ee),nn=Ee.enterAnimation?Ee.enterAnimation:x.c.get(Ce,"ios"===Ke?ze:dt);(yield O(Ee,nn,Ee.el,et))&&(Ee.didPresent.emit(),null===(St=Ee.didPresentShorthand)||void 0===St||St.emit()),"ION-TOAST"!==Ee.el.tagName&&Q(Ee.el),Ee.keyboardClose&&(null===document.activeElement||!Ee.el.contains(document.activeElement))&&Ee.el.focus()});return function(Ce,ze,dt,et,Ue){return ne.apply(this,arguments)}}(),Q=function(){var ne=(0,o.Z)(function*(Ee){let Ce=document.activeElement;if(!Ce)return;const ze=Ce?.shadowRoot;ze&&(Ce=ze.querySelector(P)||Ce),yield Ee.onDidDismiss(),Ce.focus()});return function(Ce){return ne.apply(this,arguments)}}(),T=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt,et,Ue,St){var Ke,nn;if(!Ee.presented)return!1;be(!1),Ee.presented=!1;try{Ee.el.style.setProperty("pointer-events","none"),Ee.willDismiss.emit({data:Ce,role:ze}),null===(Ke=Ee.willDismissShorthand)||void 0===Ke||Ke.emit({data:Ce,role:ze});const wt=(0,x.b)(Ee),Rt=Ee.leaveAnimation?Ee.leaveAnimation:x.c.get(dt,"ios"===wt?et:Ue);"gesture"!==ze&&(yield O(Ee,Rt,Ee.el,St)),Ee.didDismiss.emit({data:Ce,role:ze}),null===(nn=Ee.didDismissShorthand)||void 0===nn||nn.emit({data:Ce,role:ze}),W.delete(Ee),Ee.el.classList.add("overlay-hidden"),Ee.el.style.removeProperty("pointer-events")}catch(wt){console.error(wt)}return Ee.el.remove(),!0});return function(Ce,ze,dt,et,Ue,St,Ke){return ne.apply(this,arguments)}}(),k=ne=>ne.querySelector("ion-app")||ne.body,O=function(){var ne=(0,o.Z)(function*(Ee,Ce,ze,dt){ze.classList.remove("overlay-hidden");const Ue=Ce(Ee.el,dt);(!Ee.animated||!x.c.getBoolean("animated",!0))&&Ue.duration(0),Ee.keyboardClose&&Ue.beforeAddWrite(()=>{const Ke=ze.ownerDocument.activeElement;Ke?.matches("input,ion-input, ion-textarea")&&Ke.blur()});const St=W.get(Ee)||[];return W.set(Ee,[...St,Ue]),yield Ue.play(),!0});return function(Ce,ze,dt,et){return ne.apply(this,arguments)}}(),te=(ne,Ee)=>{let Ce;const ze=new Promise(dt=>Ce=dt);return ce(ne,Ee,dt=>{Ce(dt.detail)}),ze},ce=(ne,Ee,Ce)=>{const ze=dt=>{(0,ge.b)(ne,Ee,ze),Ce(dt)};(0,ge.a)(ne,Ee,ze)},Ae=ne=>"cancel"===ne||ne===de,De=ne=>ne(),ue=(ne,Ee)=>{if("function"==typeof ne)return x.c.get("_zoneGate",De)(()=>{try{return ne(Ee)}catch(ze){throw ze}})},de="backdrop"},600:(Qe,Fe,w)=>{"use strict";w.d(Fe,{v:()=>Z});var o=w(9192),x=w(529),N=w(1135),ge=w(7579),R=w(9646),W=w(3900),M=w(3099),U=w(4004),_=w(7225),Y=w(8274),G=w(502);let Z=(()=>{class S extends o.iw{constructor(E,j){super(),this.http=E,this.loadingCtrl=j,this.loggedIn=!1,this.stationFreezed=!1,this.captionmode=!1,this.geraeteSubject=new N.X([]),this.wertungenSubject=new N.X([]),this.newLastResults=new N.X(void 0),this._clubregistrations=[],this.clubRegistrations=new N.X([]),this.askForUsername=new ge.x,this._competition=void 0,this._durchgang=void 0,this._geraet=void 0,this._step=void 0,this.lastJWTChecked=0,this.wertungenLoading=!1,this.isInitializing=!1,this._activeDurchgangList=[],this.durchgangStarted=new N.X([]),this.wertungUpdated=new ge.x,this.standardErrorHandler=P=>{if(console.log(P),this.resetLoading(),this.wertungenLoading=!1,this.isInitializing=!1,401===P.status)localStorage.removeItem("auth_token"),this.loggedIn=!1,this.showMessage.next({msg:"Die Berechtigung zum erfassen von Wertungen ist abgelaufen.",type:"Berechtigung"});else if(404===P.status)this.loggedIn=!1,this.stationFreezed=!1,this.captionmode=!1,this._competition=void 0,this._durchgang=void 0,this._geraet=void 0,this._step=void 0,localStorage.removeItem("auth_token"),localStorage.removeItem("current_competition"),localStorage.removeItem("current_station"),localStorage.removeItem("auth_clubid"),this.showMessage.next({msg:"Die aktuele Einstellung ist nicht mehr g\xfcltig und wird zur\xfcckgesetzt.",type:"Einstellung"});else{const K={msg:""+P.statusText+"
            "+P.message,type:P.name};(!this.lastMessageAck||this.lastMessageAck.msg!==K.msg)&&this.showMessage.next(K)}},this.clublist=[],this.showMessage.subscribe(P=>{this.resetLoading(),this.lastMessageAck=P}),this.resetLoading()}get competition(){return this._competition}get durchgang(){return this._durchgang}get geraet(){return this._geraet}get step(){return this._step}set currentUserName(E){localStorage.setItem("current_username",E)}get currentUserName(){return localStorage.getItem("current_username")}get activeDurchgangList(){return this._activeDurchgangList}get authenticatedClubId(){return localStorage.getItem("auth_clubid")}get competitionName(){if(!this.competitions)return"";const E=this.competitions.filter(j=>j.uuid===this.competition).map(j=>j.titel+", am "+(j.datum+"T").split("T")[0].split("-").reverse().join("-"));return 1===E.length?E[0]:""}getCurrentStation(){return localStorage.getItem("current_station")||this.competition+"/"+this.durchgang+"/"+this.geraet+"/"+this.step}resetLoading(){this.loadingInstance&&(this.loadingInstance.then(E=>E.dismiss()),this.loadingInstance=void 0)}startLoading(E,j){return this.resetLoading(),this.loadingInstance=this.loadingCtrl.create({message:E}),this.loadingInstance.then(P=>P.present()),j&&j.subscribe({next:()=>this.resetLoading(),error:P=>this.resetLoading()}),j}initWithQuery(E){this.isInitializing=!0;const j=new N.X(!1);return E&&E.startsWith("c=")?(this._step=1,E.split("&").forEach(P=>{const[K,pe]=P.split("=");switch(K){case"s":this.currentUserName||this.askForUsername.next(this),localStorage.setItem("auth_token",pe),localStorage.removeItem("auth_clubid"),this.checkJWT(pe);const ke=localStorage.getItem("current_station");ke&&this.initWithQuery(ke);break;case"c":this._competition=pe;break;case"ca":this._competition=void 0;break;case"d":this._durchgang=pe;break;case"st":this._step=parseInt(pe);break;case"g":this._geraet=parseInt(pe),localStorage.setItem("current_station",E),this.checkJWT(),this.stationFreezed=!0;break;case"rs":localStorage.setItem("auth_token",pe),this.unlock(),this.loggedIn=!0,console.log("club auth-token initialized");break;case"rid":localStorage.setItem("auth_clubid",pe),console.log("club id initialized",pe)}}),localStorage.removeItem("external_load"),this.startLoading("Bitte warten ..."),this._geraet?this.getCompetitions().pipe((0,W.w)(()=>this.loadDurchgaenge()),(0,W.w)(()=>this.loadGeraete()),(0,W.w)(()=>this.loadSteps()),(0,W.w)(()=>this.loadWertungen())).subscribe(P=>j.next(!0)):!this._competition||"undefined"===this._competition&&!localStorage.getItem("auth_clubid")?(console.log("initializing clubreg ..."),this.getClubRegistrations(this._competition).subscribe(P=>j.next(!0))):this._competition&&this.getCompetitions().pipe((0,W.w)(()=>this.loadDurchgaenge())).subscribe(P=>j.next(!0))):j.next(!0),j.subscribe(P=>{P&&(this.isInitializing=!1,this.resetLoading())}),j}checkJWT(E){if(E||(E=localStorage.getItem("auth_token")),!E)return void(this.loggedIn=!1);const P=(new Date).getTime()-36e5;(!E||E===localStorage.getItem("auth_token"))&&P{localStorage.setItem("auth_token",K.headers.get("x-access-token")),this.loggedIn=!0,this.competitions&&0!==this.competitions.length?this._competition&&this.getDurchgaenge(this._competition):this.getCompetitions().subscribe(pe=>{this._competition&&this.getDurchgaenge(this._competition)})},error:K=>{console.log(K),401===K.status?(localStorage.removeItem("auth_token"),this.loggedIn=!1,this.showMessage.next({msg:"Die Berechtigung ist abgelaufen. Bitte neu anmelden",type:"Berechtigung"})):this.standardErrorHandler(K)}}),this.lastJWTChecked=(new Date).getTime())}saveClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j.id,j).pipe((0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations.filter(pe=>pe.id!=j.id),K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}saveClubRegistrationPW(E,j){const P=this.startLoading("Neues Password wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j.id+"/pwchange",j).pipe((0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations.filter(pe=>pe.id!=j.id),K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}createClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird registriert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E,j,{observe:"response"}).pipe((0,U.U)(K=>(console.log(K),localStorage.setItem("auth_token",K.headers.get("x-access-token")),localStorage.setItem("auth_clubid",K.body.id+""),this.loggedIn=!0,K.body)),(0,M.B)()));return P.subscribe({next:K=>{this._clubregistrations=[...this._clubregistrations,K],this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}deleteClubRegistration(E,j){const P=this.startLoading("Vereins-Anmeldung wird gel\xf6scht. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j,{responseType:"text"}).pipe((0,M.B)()));return P.subscribe({next:K=>{this.clublogout(),this._clubregistrations=this._clubregistrations.filter(pe=>pe.id!=j),this.clubRegistrations.next(this._clubregistrations)},error:this.standardErrorHandler}),P}loadProgramsForCompetition(E){const j=this.startLoading("Programmliste zum Wettkampf wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/programmlist").pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}loadAthletListForClub(E,j){const P=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/athletlist").pipe((0,M.B)()));return P.subscribe({next:K=>{},error:this.standardErrorHandler}),P}loadAthletRegistrations(E,j){const P=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/athletes").pipe((0,M.B)()));return P.subscribe({error:this.standardErrorHandler}),P}createAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E+"/"+j+"/athletes",P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}saveAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j+"/athletes/"+P.id,P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}deleteAthletRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j+"/athletes/"+P.id,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}findCompetitionsByVerein(E){const j=this.startLoading("Es werden fr\xfchere Anmeldungen gesucht. Bitte warten ...",this.http.get(_.AC+"api/competition/byVerein/"+E).pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}copyClubRegsFromCompetition(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+j+"/"+P+"/copyfrom",E,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}loadJudgeProgramDisziplinList(E){const j=this.startLoading("Athletliste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/programmdisziplinlist").pipe((0,M.B)()));return j.subscribe({error:this.standardErrorHandler}),j}loadJudgeRegistrations(E,j){const P=this.startLoading("Wertungsrichter-Liste zum Club wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+E+"/"+j+"/judges").pipe((0,M.B)()));return P.subscribe({error:this.standardErrorHandler}),P}createJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.post(_.AC+"api/registrations/"+E+"/"+j+"/judges",P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}saveJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/registrations/"+E+"/"+j+"/judges/"+P.id,P).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}deleteJudgeRegistration(E,j,P){const K=this.startLoading("Anmeldung wird gespeichert. Bitte warten ...",this.http.delete(_.AC+"api/registrations/"+E+"/"+j+"/judges/"+P.id,{responseType:"text"}).pipe((0,M.B)()));return K.subscribe({error:this.standardErrorHandler}),K}clublogout(){this.logout()}utf8_to_b64(E){return window.btoa(unescape(encodeURIComponent(E)))}b64_to_utf8(E){return decodeURIComponent(escape(window.atob(E)))}getClubList(){if(this.clublist&&this.clublist.length>0)return(0,R.of)(this.clublist);const E=this.startLoading("Clubliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/clubnames").pipe((0,M.B)()));return E.subscribe({next:j=>{this.clublist=j},error:this.standardErrorHandler}),E}resetRegistration(E){const j=new x.WM,P=this.http.options(_.AC+"api/registrations/"+this._competition+"/"+E+"/loginreset",{observe:"response",headers:j.set("Host",_.AC),responseType:"text"}).pipe((0,M.B)());return this.startLoading("Mail f\xfcr Login-Reset wird versendet. Bitte warten ...",P)}clublogin(E,j){this.clublogout();const P=new x.WM,K=this.startLoading("Login wird verarbeitet. Bitte warten ...",this.http.options(_.AC+"api/login",{observe:"response",headers:P.set("Authorization","Basic "+this.utf8_to_b64(`${E}:${j}`)),withCredentials:!0,responseType:"text"}).pipe((0,M.B)()));return K.subscribe({next:pe=>{console.log(pe),localStorage.setItem("auth_token",pe.headers.get("x-access-token")),localStorage.setItem("auth_clubid",E),this.loggedIn=!0},error:pe=>{console.log(pe),this.clublogout(),this.resetLoading(),401===pe.status?(localStorage.setItem("auth_token",pe.headers.get("x-access-token")),this.loggedIn=!1):this.standardErrorHandler(pe)}}),K}unlock(){localStorage.removeItem("current_station"),this.checkJWT(),this.stationFreezed=!1}logout(){localStorage.removeItem("auth_token"),localStorage.removeItem("auth_clubid"),this.loggedIn=!1,this.unlock()}getCompetitions(){const E=this.startLoading("Wettkampfliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/competition").pipe((0,M.B)()));return E.subscribe({next:j=>{this.competitions=j},error:this.standardErrorHandler}),E}getClubRegistrations(E){return this.checkJWT(),void 0!==this._clubregistrations&&this._competition===E||this.isInitializing||(this.durchgaenge=[],this._clubregistrations=[],this.geraete=void 0,this.steps=void 0,this.wertungen=void 0,this._competition=E,this._durchgang=void 0,this._geraet=void 0,this._step=void 0),this.loadClubRegistrations()}loadClubRegistrations(){return this._competition&&"undefined"!==this._competition?(this.startLoading("Clubanmeldungen werden geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+this._competition).pipe((0,M.B)())).subscribe({next:j=>{localStorage.setItem("current_competition",this._competition),this._clubregistrations=j,this.clubRegistrations.next(j)},error:this.standardErrorHandler}),this.clubRegistrations):(0,R.of)([])}loadRegistrationSyncActions(){if(!this._competition||"undefined"===this._competition)return(0,R.of)([]);const E=this.startLoading("Pendente An-/Abmeldungen werden geladen. Bitte warten ...",this.http.get(_.AC+"api/registrations/"+this._competition+"/syncactions").pipe((0,M.B)()));return E.subscribe({error:this.standardErrorHandler}),E}resetCompetition(E){console.log("reset data"),this.durchgaenge=[],this._clubregistrations=[],this.clubRegistrations.next([]),this.geraete=void 0,this.geraeteSubject.next([]),this.steps=void 0,this.wertungen=void 0,this.wertungenSubject.next([]),this._competition=E,this._durchgang=void 0,this._geraet=void 0,this._step=void 0}getDurchgaenge(E){return this.checkJWT(),void 0!==this.durchgaenge&&this._competition===E||this.isInitializing?(0,R.of)(this.durchgaenge||[]):(this.resetCompetition(E),this.loadDurchgaenge())}loadDurchgaenge(){if(!this._competition||"undefined"===this._competition)return(0,R.of)([]);const E=this.startLoading("Durchgangliste wird geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition).pipe((0,M.B)())),j=this._durchgang;return E.subscribe({next:P=>{if(localStorage.setItem("current_competition",this._competition),this.durchgaenge=P,j){const K=this.durchgaenge.filter(pe=>{const ke=(0,o._5)(pe);return j===pe||j===ke});1===K.length&&(this._durchgang=K[0])}},error:this.standardErrorHandler}),E}getGeraete(E,j){return void 0!==this.geraete&&this._competition===E&&this._durchgang===j||this.isInitializing?(0,R.of)(this.geraete||[]):(this.geraete=[],this.steps=void 0,this.wertungen=void 0,this._competition=E,this._durchgang=j,this._geraet=void 0,this._step=void 0,this.captionmode=!0,this.loadGeraete())}loadGeraete(){if(this.geraete=[],!this._competition||"undefined"===this._competition)return console.log("reusing geraetelist"),(0,R.of)([]);console.log("renewing geraetelist");let E="";E=this.captionmode&&this._durchgang&&"undefined"!==this._durchgang?_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang):_.AC+"api/durchgang/"+this._competition+"/geraete";const j=this.startLoading("Ger\xe4te zum Durchgang werden geladen. Bitte warten ...",this.http.get(E).pipe((0,M.B)()));return j.subscribe({next:P=>{this.geraete=P,this.geraeteSubject.next(this.geraete)},error:this.standardErrorHandler}),j}getSteps(E,j,P){if(void 0!==this.steps&&this._competition===E&&this._durchgang===j&&this._geraet===P||this.isInitializing)return(0,R.of)(this.steps||[]);this.steps=[],this.wertungen=void 0,this._competition=E,this._durchgang=j,this._geraet=P,this._step=void 0;const K=this.loadSteps();return K.subscribe({next:pe=>{this.steps=pe.map(ke=>parseInt(ke)),(void 0===this._step||this.steps.indexOf(this._step)<0)&&(this._step=this.steps[0],this.loadWertungen())},error:this.standardErrorHandler}),K}loadSteps(){if(this.steps=[],!this._competition||"undefined"===this._competition||!this._durchgang||"undefined"===this._durchgang||void 0===this._geraet)return(0,R.of)([]);const E=this.startLoading("Stationen zum Ger\xe4t werden geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/"+this._geraet).pipe((0,M.B)()));return E.subscribe({next:j=>{this.steps=j},error:this.standardErrorHandler}),E}getWertungen(E,j,P,K){void 0!==this.wertungen&&this._competition===E&&this._durchgang===j&&this._geraet===P&&this._step===K||this.isInitializing||(this.wertungen=[],this._competition=E,this._durchgang=j,this._geraet=P,this._step=K,this.loadWertungen())}activateCaptionMode(){this.competitions||this.getCompetitions(),this.durchgaenge||this.loadDurchgaenge(),(!this.captionmode||!this.geraete)&&(this.captionmode=!0,this.loadGeraete()),this.geraet&&!this.steps&&this.loadSteps(),this.geraet&&(this.disconnectWS(!0),this.initWebsocket())}loadWertungen(){if(this.wertungenLoading||void 0===this._geraet||void 0===this._step)return(0,R.of)([]);this.activateCaptionMode();const E=this._step;this.wertungenLoading=!0;const j=this.startLoading("Riegenteilnehmer werden geladen. Bitte warten ...",this.http.get(_.AC+"api/durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/"+this._geraet+"/"+this._step).pipe((0,M.B)()));return j.subscribe({next:P=>{this.wertungenLoading=!1,this._step!==E?this.loadWertungen():(this.wertungen=P,this.wertungenSubject.next(this.wertungen))},error:this.standardErrorHandler}),j}loadAthletWertungen(E,j){return this.activateNonCaptionMode(E),this.startLoading("Wertungen werden geladen. Bitte warten ...",this.http.get(_.AC+`api/athlet/${this._competition}/${j}`).pipe((0,M.B)()))}activateNonCaptionMode(E){return this._competition!==E||this.captionmode||!this.geraete||0===this.geraete.length||E&&!this.isWebsocketConnected()?(this.captionmode=!1,this._competition=E,this.disconnectWS(!0),this.initWebsocket(),this.loadGeraete()):(0,R.of)(this.geraete)}loadStartlist(E){return this._competition?this.startLoading("Teilnehmerliste wird geladen. Bitte warten ...",E?this.http.get(_.AC+"api/report/"+this._competition+"/startlist?q="+E).pipe((0,M.B)()):this.http.get(_.AC+"api/report/"+this._competition+"/startlist").pipe((0,M.B)())):(0,R.of)()}isMessageAck(E){return"MessageAck"===E.type}updateWertung(E,j,P,K){const pe=K.wettkampfUUID,ke=new ge.x;return this.shouldConnectAgain()&&this.reconnect(),this.startLoading("Wertung wird gespeichert. Bitte warten ...",this.http.put(_.AC+"api/durchgang/"+pe+"/"+(0,o.gT)(E)+"/"+P+"/"+j,K).pipe((0,M.B)())).subscribe({next:Te=>{if(!this.isMessageAck(Te)&&Te.wertung){let ie=!1;this.wertungen=this.wertungen.map(Be=>Be.wertung.id===Te.wertung.id?(ie=!0,Te):Be),this.wertungenSubject.next(this.wertungen),ke.next(Te),ie&&ke.complete()}else{const ie=Te;this.showMessage.next(ie),ke.error(ie.msg),ke.complete()}},error:this.standardErrorHandler}),ke}finishStation(E,j,P,K){const pe=new ge.x;return this.startLoading("Station wird abgeschlossen. Bitte warten ...",this.http.post(_.AC+"api/durchgang/"+E+"/finish",{type:"FinishDurchgangStation",wettkampfUUID:E,durchgang:j,geraet:P,step:K}).pipe((0,M.B)())).subscribe({next:ke=>{const Te=this.steps.filter(ie=>ie>K);Te.length>0?this._step=Te[0]:(localStorage.removeItem("current_station"),this.checkJWT(),this.stationFreezed=!1,this._step=this.steps[0]),this.loadWertungen().subscribe(ie=>{pe.next(Te)})},error:this.standardErrorHandler}),pe.asObservable()}nextStep(){const E=this.steps.filter(j=>j>this._step);return E.length>0?E[0]:this.steps[0]}prevStep(){const E=this.steps.filter(j=>j0?E[E.length-1]:this.steps[this.steps.length-1]}getPrevGeraet(){let E=this.geraete.indexOf(this.geraete.find(j=>j.id===this._geraet))-1;return E<0&&(E=this.geraete.length-1),this.geraete[E].id}getNextGeraet(){let E=this.geraete.indexOf(this.geraete.find(j=>j.id===this._geraet))+1;return E>=this.geraete.length&&(E=0),this.geraete[E].id}nextGeraet(){if(this.loggedIn){const E=this.steps.filter(j=>j>this._step);return(0,R.of)(E.length>0?E[0]:this.steps[0])}{const E=this._step;return this._geraet=this.getNextGeraet(),this.loadSteps().pipe((0,U.U)(j=>{const P=j.filter(K=>K>E);return P.length>0?P[0]:this.steps[0]}))}}prevGeraet(){if(this.loggedIn){const E=this.steps.filter(j=>j0?E[E.length-1]:this.steps[this.steps.length-1])}{const E=this._step;return this._geraet=this.getPrevGeraet(),this.loadSteps().pipe((0,U.U)(j=>{const P=this.steps.filter(K=>K0?P[P.length-1]:this.steps[this.steps.length-1]}))}}getScoreList(E){return this._competition?this.startLoading("Rangliste wird geladen. Bitte warten ...",this.http.get(`${_.AC}${E}`).pipe((0,M.B)())):(0,R.of)({})}getScoreLists(){return this._competition?this.startLoading("Ranglisten werden geladen. Bitte warten ...",this.http.get(`${_.AC}api/scores/${this._competition}`).pipe((0,M.B)())):(0,R.of)(Object.assign({}))}getWebsocketBackendUrl(){let E=location.host;const P="https:"===location.protocol?"wss:":"ws:";let K="api/";return K=this._durchgang&&this.captionmode?K+"durchgang/"+this._competition+"/"+(0,o.gT)(this._durchgang)+"/ws":K+"durchgang/"+this._competition+"/all/ws",E=E&&""!==E?(P+"//"+E+"/").replace("index.html",""):"wss://kutuapp.sharevic.net/",E+K}handleWebsocketMessage(E){switch(E.type){case"BulkEvent":return E.events.map(pe=>this.handleWebsocketMessage(pe)).reduce((pe,ke)=>pe&&ke);case"DurchgangStarted":return this._activeDurchgangList=[...this.activeDurchgangList,E],this.durchgangStarted.next(this.activeDurchgangList),!0;case"DurchgangFinished":const P=E;return this._activeDurchgangList=this.activeDurchgangList.filter(pe=>pe.durchgang!==P.durchgang||pe.wettkampfUUID!==P.wettkampfUUID),this.durchgangStarted.next(this.activeDurchgangList),!0;case"AthletWertungUpdatedSequenced":case"AthletWertungUpdated":const K=E;return this.wertungen=this.wertungen.map(pe=>pe.id===K.wertung.athletId&&pe.wertung.wettkampfdisziplinId===K.wertung.wettkampfdisziplinId?Object.assign({},pe,{wertung:K.wertung}):pe),this.wertungenSubject.next(this.wertungen),this.wertungUpdated.next(K),!0;case"AthletMovedInWettkampf":case"AthletRemovedFromWettkampf":return this.loadWertungen(),!0;case"NewLastResults":return this.newLastResults.next(E),!0;case"MessageAck":return console.log(E.msg),this.showMessage.next(E),!0;default:return!1}}}return S.\u0275fac=function(E){return new(E||S)(Y.LFG(x.eN),Y.LFG(G.HT))},S.\u0275prov=Y.Yz7({token:S,factory:S.\u0275fac,providedIn:"root"}),S})()},9192:(Qe,Fe,w)=>{"use strict";w.d(Fe,{iw:()=>B,_5:()=>Z,gT:()=>S});var o=w(1135),x=w(7579),N=w(1566),ge=w(9751),R=w(3532);var _=w(7225),Y=w(2529),G=w(8274);function Z(E){return E?E.replace(/[,&.*+?/^${}()|[\]\\]/g,"_"):""}function S(E){return E?encodeURIComponent(Z(E)):""}let B=(()=>{class E{constructor(){this.identifiedState=!1,this.connectedState=!1,this.explicitClosed=!0,this.reconnectInterval=3e4,this.reconnectAttempts=480,this.lstKeepAliveReceived=0,this.connected=new o.X(!1),this.identified=new o.X(!1),this.logMessages=new o.X(""),this.showMessage=new x.x,this.lastMessages=[]}get stopped(){return this.explicitClosed}startKeepAliveObservation(){setTimeout(()=>{const K=(new Date).getTime()-this.lstKeepAliveReceived;!this.explicitClosed&&!this.reconnectionObservable&&K>this.reconnectInterval?(this.logMessages.next("connection verified since "+K+"ms. It seems to be dead and need to be reconnected!"),this.disconnectWS(!1),this.reconnect()):this.logMessages.next("connection verified since "+K+"ms"),this.startKeepAliveObservation()},this.reconnectInterval)}sendMessage(P){this.websocket?this.connectedState&&this.websocket.send(P):this.connect(P)}disconnectWS(P=!0){this.explicitClosed=P,this.lstKeepAliveReceived=0,this.websocket?(this.websocket.close(),P&&this.close()):this.close()}close(){this.websocket&&(this.websocket.onerror=void 0,this.websocket.onclose=void 0,this.websocket.onopen=void 0,this.websocket.onmessage=void 0,this.websocket.close()),this.websocket=void 0,this.identifiedState=!1,this.lstKeepAliveReceived=0,this.identified.next(this.identifiedState),this.connectedState=!1,this.connected.next(this.connectedState)}isWebsocketConnected(){return this.websocket&&this.websocket.readyState===this.websocket.OPEN}isWebsocketConnecting(){return this.websocket&&this.websocket.readyState===this.websocket.CONNECTING}shouldConnectAgain(){return!(this.isWebsocketConnected()||this.isWebsocketConnecting())}reconnect(){if(!this.reconnectionObservable){this.logMessages.next("start try reconnection ..."),this.reconnectionObservable=function U(E=0,j=N.z){return E<0&&(E=0),function M(E=0,j,P=N.P){let K=-1;return null!=j&&((0,R.K)(j)?P=j:K=j),new ge.y(pe=>{let ke=function W(E){return E instanceof Date&&!isNaN(E)}(E)?+E-P.now():E;ke<0&&(ke=0);let Te=0;return P.schedule(function(){pe.closed||(pe.next(Te++),0<=K?this.schedule(void 0,K):pe.complete())},ke)})}(E,E,j)}(this.reconnectInterval).pipe((0,Y.o)((K,pe)=>pe{this.shouldConnectAgain()&&(this.logMessages.next("continue with reconnection ..."),this.connect(void 0))},null,()=>{this.reconnectionObservable=null,P.unsubscribe(),this.isWebsocketConnected()?this.logMessages.next("finish with reconnection (successfull)"):this.isWebsocketConnecting()?this.logMessages.next("continue with reconnection (CONNECTING)"):(!this.websocket||this.websocket.CLOSING||this.websocket.CLOSED)&&(this.disconnectWS(),this.logMessages.next("finish with reconnection (unsuccessfull)"))})}}initWebsocket(){this.logMessages.subscribe(P=>{this.lastMessages.push((0,_.sZ)(!0)+` - ${P}`),this.lastMessages=this.lastMessages.slice(Math.max(this.lastMessages.length-50,0))}),this.logMessages.next("init"),this.backendUrl=this.getWebsocketBackendUrl()+`?clientid=${(0,_.ix)()}`,this.logMessages.next("init with "+this.backendUrl),this.connect(void 0),this.startKeepAliveObservation()}connect(P){this.disconnectWS(),this.explicitClosed=!1,this.websocket=new WebSocket(this.backendUrl),this.websocket.onopen=()=>{this.connectedState=!0,this.connected.next(this.connectedState),P&&this.sendMessage(P)},this.websocket.onclose=pe=>{switch(this.close(),pe.code){case 1001:this.logMessages.next("Going Away"),this.explicitClosed||this.reconnect();break;case 1002:this.logMessages.next("Protocol error"),this.explicitClosed||this.reconnect();break;case 1003:this.logMessages.next("Unsupported Data"),this.explicitClosed||this.reconnect();break;case 1005:this.logMessages.next("No Status Rcvd"),this.explicitClosed||this.reconnect();break;case 1006:this.logMessages.next("Abnormal Closure"),this.explicitClosed||this.reconnect();break;case 1007:this.logMessages.next("Invalid frame payload data"),this.explicitClosed||this.reconnect();break;case 1008:this.logMessages.next("Policy Violation"),this.explicitClosed||this.reconnect();break;case 1009:this.logMessages.next("Message Too Big"),this.explicitClosed||this.reconnect();break;case 1010:this.logMessages.next("Mandatory Ext."),this.explicitClosed||this.reconnect();break;case 1011:this.logMessages.next("Internal Server Error"),this.explicitClosed||this.reconnect();break;case 1015:this.logMessages.next("TLS handshake")}},this.websocket.onmessage=pe=>{if(this.lstKeepAliveReceived=(new Date).getTime(),!pe.data.startsWith("Connection established.")&&"keepAlive"!==pe.data)try{const ke=JSON.parse(pe.data);"MessageAck"===ke.type?(console.log(ke.msg),this.showMessage.next(ke)):this.handleWebsocketMessage(ke)||(console.log(ke),this.logMessages.next("unknown message: "+pe.data))}catch(ke){this.logMessages.next(ke+": "+pe.data)}},this.websocket.onerror=pe=>{this.logMessages.next(pe.message+", "+pe.type)}}}return E.\u0275fac=function(P){return new(P||E)},E.\u0275prov=G.Yz7({token:E,factory:E.\u0275fac,providedIn:"root"}),E})()},7225:(Qe,Fe,w)=>{"use strict";w.d(Fe,{AC:()=>M,WZ:()=>B,ix:()=>S,sZ:()=>Y,tC:()=>_});const ge=location.host,M=(location.protocol+"//"+ge+"/").replace("index.html","");function _(E){let j=new Date;j=function U(E){return null!=E&&""!==E&&!isNaN(Number(E.toString()))}(E)?new Date(parseInt(E)):new Date(Date.parse(E));const P=`${j.getFullYear().toString()}-${("0"+(j.getMonth()+1)).slice(-2)}-${("0"+j.getDate()).slice(-2)}`;return console.log(P),P}function Y(E=!1){return function G(E,j=!1){const P=("0"+E.getDate()).slice(-2)+"-"+("0"+(E.getMonth()+1)).slice(-2)+"-"+E.getFullYear()+" "+("0"+E.getHours()).slice(-2)+":"+("0"+E.getMinutes()).slice(-2);return j?P+":"+("0"+E.getSeconds()).slice(-2):P}(new Date,E)}function S(){let E=localStorage.getItem("clientid");return E||(E=function Z(){function E(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return E()+E()+"-"+E()+"-"+E()+"-"+E()+"-"+E()+E()+E()}(),localStorage.setItem("clientid",E)),localStorage.getItem("current_username")+":"+E}const B={1:"boden.svg",2:"pferdpauschen.svg",3:"ringe.svg",4:"sprung.svg",5:"barren.svg",6:"reck.svg",26:"ringe.svg",27:"stufenbarren.svg",28:"schwebebalken.svg",29:"minitramp.svg",30:"minitramp.svg",31:"ringe.svg"}},1394:(Qe,Fe,w)=>{"use strict";var o=w(1481),x=w(8274),N=w(5472),ge=w(529),R=w(502);const M=(0,w(7423).fo)("SplashScreen",{web:()=>w.e(2680).then(w.bind(w,2680)).then(T=>new T.SplashScreenWeb)});var U=w(6895),_=w(3608);let Y=(()=>{class T{constructor(O){this.document=O;const te=localStorage.getItem("theme");te?this.setGlobalCSS(te):this.setTheme({})}setTheme(O){const te=function S(T){T={...G,...T};const{primary:k,secondary:O,tertiary:te,success:ce,warning:Ae,danger:De,dark:ue,medium:de,light:ne}=T,Ee=.2,Ce=.2;return`\n --ion-color-base: ${ne};\n --ion-color-contrast: ${ue};\n --ion-background-color: ${ne};\n --ion-card-background-color: ${E(ne,.4)};\n --ion-card-shadow-color1: ${E(ue,2).alpha(.2)};\n --ion-card-shadow-color2: ${E(ue,2).alpha(.14)};\n --ion-card-shadow-color3: ${E(ue,2).alpha(.12)};\n --ion-card-color: ${E(ue,2)};\n --ion-text-color: ${ue};\n --ion-toolbar-background-color: ${_(ne).lighten(Ce)};\n --ion-toolbar-text-color: ${B(ue,.2)};\n --ion-item-background-color: ${B(ne,.1)};\n --ion-item-background-activated: ${B(ne,.3)};\n --ion-item-text-color: ${B(ue,.1)};\n --ion-item-border-color: ${_(de).lighten(Ce)};\n --ion-overlay-background-color: ${E(ne,.1)};\n --ion-color-primary: ${k};\n --ion-color-primary-rgb: ${j(k)};\n --ion-color-primary-contrast: ${B(k)};\n --ion-color-primary-contrast-rgb: ${j(B(k))};\n --ion-color-primary-shade: ${_(k).darken(Ee)};\n --ion-color-primary-tint: ${_(k).lighten(Ce)};\n --ion-color-secondary: ${O};\n --ion-color-secondary-rgb: ${j(O)};\n --ion-color-secondary-contrast: ${B(O)};\n --ion-color-secondary-contrast-rgb: ${j(B(O))};\n --ion-color-secondary-shade: ${_(O).darken(Ee)};\n --ion-color-secondary-tint: ${_(O).lighten(Ce)};\n --ion-color-tertiary: ${te};\n --ion-color-tertiary-rgb: ${j(te)};\n --ion-color-tertiary-contrast: ${B(te)};\n --ion-color-tertiary-contrast-rgb: ${j(B(te))};\n --ion-color-tertiary-shade: ${_(te).darken(Ee)};\n --ion-color-tertiary-tint: ${_(te).lighten(Ce)};\n --ion-color-success: ${ce};\n --ion-color-success-rgb: ${j(ce)};\n --ion-color-success-contrast: ${B(ce)};\n --ion-color-success-contrast-rgb: ${j(B(ce))};\n --ion-color-success-shade: ${_(ce).darken(Ee)};\n --ion-color-success-tint: ${_(ce).lighten(Ce)};\n --ion-color-warning: ${Ae};\n --ion-color-warning-rgb: ${j(Ae)};\n --ion-color-warning-contrast: ${B(Ae)};\n --ion-color-warning-contrast-rgb: ${j(B(Ae))};\n --ion-color-warning-shade: ${_(Ae).darken(Ee)};\n --ion-color-warning-tint: ${_(Ae).lighten(Ce)};\n --ion-color-danger: ${De};\n --ion-color-danger-rgb: ${j(De)};\n --ion-color-danger-contrast: ${B(De)};\n --ion-color-danger-contrast-rgb: ${j(B(De))};\n --ion-color-danger-shade: ${_(De).darken(Ee)};\n --ion-color-danger-tint: ${_(De).lighten(Ce)};\n --ion-color-dark: ${ue};\n --ion-color-dark-rgb: ${j(ue)};\n --ion-color-dark-contrast: ${B(ue)};\n --ion-color-dark-contrast-rgb: ${j(B(ue))};\n --ion-color-dark-shade: ${_(ue).darken(Ee)};\n --ion-color-dark-tint: ${_(ue).lighten(Ce)};\n --ion-color-medium: ${de};\n --ion-color-medium-rgb: ${j(de)};\n --ion-color-medium-contrast: ${B(de)};\n --ion-color-medium-contrast-rgb: ${j(B(de))};\n --ion-color-medium-shade: ${_(de).darken(Ee)};\n --ion-color-medium-tint: ${_(de).lighten(Ce)};\n --ion-color-light: ${ne};\n --ion-color-light-rgb: ${j(ne)};\n --ion-color-light-contrast: ${B(ne)};\n --ion-color-light-contrast-rgb: ${j(B(ne))};\n --ion-color-light-shade: ${_(ne).darken(Ee)};\n --ion-color-light-tint: ${_(ne).lighten(Ce)};`+function Z(T,k){void 0===T&&(T="#ffffff"),void 0===k&&(k="#000000");const O=new _(T);let te="";for(let ce=5;ce<100;ce+=5){const De=ce/100;te+=` --ion-color-step-${ce+"0"}: ${O.mix(_(k),De).hex()};`,ce<95&&(te+="\n")}return te}(ue,ne)}(O);this.setGlobalCSS(te),localStorage.setItem("theme",te)}setVariable(O,te){this.document.documentElement.style.setProperty(O,te)}setGlobalCSS(O){this.document.documentElement.style.cssText=O}get storedTheme(){return localStorage.getItem("theme")}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(U.K0))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})();const G={primary:"#3880ff",secondary:"#0cd1e8",tertiary:"#7044ff",success:"#10dc60",warning:"#ff7b00",danger:"#f04141",dark:"#222428",medium:"#989aa2",light:"#fcfdff"};function B(T,k=.8){const O=_(T);return O.isDark()?O.lighten(k):O.darken(k)}function E(T,k=.8){const O=_(T);return O.isDark()?O.darken(k):O.lighten(k)}function j(T){const k=_(T);return`${k.red()}, ${k.green()}, ${k.blue()}`}var P=w(600);function K(T,k){if(1&T){const O=x.EpF();x.TgZ(0,"ion-item",4),x.NdJ("click",function(){const Ae=x.CHM(O).$implicit,De=x.oxw();return x.KtG(De.openPage(Ae.url))}),x._UZ(1,"ion-icon",9),x.TgZ(2,"ion-label"),x._uU(3),x.qZA()()}if(2&T){const O=k.$implicit;x.xp6(1),x.Q6J("name",O.icon),x.xp6(2),x.hij(" ",O.title," ")}}function pe(T,k){if(1&T){const O=x.EpF();x.TgZ(0,"ion-item",4),x.NdJ("click",function(){const Ae=x.CHM(O).$implicit,De=x.oxw();return x.KtG(De.changeTheme(Ae))}),x._UZ(1,"ion-icon",6),x.TgZ(2,"ion-label"),x._uU(3),x.qZA()()}if(2&T){const O=k.$implicit,te=x.oxw();x.Udp("background-color",te.themes[O].light)("color",te.themes[O].dark),x.xp6(2),x.Udp("background-color",te.themes[O].light)("color",te.themes[O].dark),x.xp6(1),x.hij(" ",O," ")}}let ke=(()=>{class T{constructor(O,te,ce,Ae,De,ue,de){this.platform=O,this.navController=te,this.route=ce,this.router=Ae,this.themeSwitcher=De,this.backendService=ue,this.alertCtrl=de,this.themes={Blau:{primary:"#ffa238",secondary:"#a19137",tertiary:"#421804",success:"#0eb651",warning:"#ff7b00",danger:"#f04141",dark:"#fffdf5",medium:"#454259",light:"#03163d"},Sport:{primary:"#ffa238",secondary:"#7dc0ff",tertiary:"#421804",success:"#0eb651",warning:"#ff7b00",danger:"#f04141",dark:"#03163d",medium:"#8092dd",light:"#fffdf5"},Dunkel:{primary:"#8DBB82",secondary:"#FCFF6C",tertiary:"#FE5F55",warning:"#ffce00",medium:"#BCC2C7",dark:"#DADFE1",light:"#363232"},Neon:{primary:"#23ff00",secondary:"#4CE0B3",tertiary:"#FF5E79",warning:"#ff7b00",light:"#F4EDF2",medium:"#B682A5",dark:"#34162A"}},this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"},{title:"Letzte Resultate",url:"last-results",icon:"radio"},{title:"Top Resultate",url:"top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"},{title:"Wettkampfanmeldungen",url:"/registration",icon:"people-outline"}],this.backendService.askForUsername.subscribe(ne=>{this.alertCtrl.create({header:"Settings",message:ne.currentUserName?"Dein Benutzername":"Du bist das erste Mal hier. Bitte gib einen Benutzernamen an",inputs:[{name:"username",placeholder:"Benutzername",value:ne.currentUserName}],buttons:[{text:"Abbrechen",role:"cancel",handler:()=>{console.log("Cancel clicked")}},{text:"Speichern",handler:Ce=>{if(!(Ce.username&&Ce.username.trim().length>1))return!1;ne.currentUserName=Ce.username.trim()}}]}).then(Ce=>Ce.present())}),this.backendService.showMessage.subscribe(ne=>{let Ee=ne.msg;(!Ee||0===Ee.trim().length)&&(Ee="Die gew\xfcnschte Aktion ist aktuell nicht m\xf6glich."),this.alertCtrl.create({header:"Achtung",message:Ee,buttons:["OK"]}).then(ze=>ze.present())}),this.initializeApp()}get themeKeys(){return Object.keys(this.themes)}clearPosParam(){this.router.navigate(["."],{relativeTo:this.route,queryParams:{}})}initializeApp(){this.platform.ready().then(()=>{if(M.show(),window.location.href.indexOf("?")>0)try{const O=window.location.href.split("?")[1],te=atob(O);O.startsWith("all")?(this.appPages=[{title:"Alle Resultate",url:"/all-results",icon:"radio"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/last-results")):O.startsWith("top")?(this.appPages=[{title:"Top Resultate",url:"/top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/top-results")):te.startsWith("last")?(this.appPages=[{title:"Aktuelle Resultate",url:"/last-results",icon:"radio"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/last-results"),this.backendService.initWithQuery(te.substring(5))):te.startsWith("top")?(this.appPages=[{title:"Top Resultate",url:"/top-results",icon:"medal"},{title:"Athlet/-In suchen",url:"search-athlet",icon:"search"}],this.navController.navigateRoot("/top-results"),this.backendService.initWithQuery(te.substring(4))):te.startsWith("registration")?(window.history.replaceState({},document.title,window.location.href.split("?")[0]),this.clearPosParam(),console.log("initializing with "+te),localStorage.setItem("external_load",te),this.backendService.initWithQuery(te.substring(13)).subscribe(ce=>{console.log("clubreg initialzed. navigate to clubreg-editor"),this.navController.navigateRoot("/registration/"+this.backendService.competition+"/"+localStorage.getItem("auth_clubid"))})):(window.history.replaceState({},document.title,window.location.href.split("?")[0]),this.clearPosParam(),console.log("initializing with "+te),localStorage.setItem("external_load",te),this.backendService.initWithQuery(te).subscribe(ce=>{te.startsWith("c=")&&te.indexOf("&st=")>-1&&te.indexOf("&g=")>-1&&(this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"}],this.navController.navigateRoot("/station"))}))}catch(O){console.log(O)}else if(localStorage.getItem("current_station")){const O=localStorage.getItem("current_station");this.backendService.initWithQuery(O).subscribe(te=>{O.startsWith("c=")&&O.indexOf("&st=")&&O.indexOf("&g=")&&(this.appPages=[{title:"Home",url:"/home",icon:"home"},{title:"Resultate",url:"/station",icon:"list"}],this.navController.navigateRoot("/station"))})}else if(localStorage.getItem("current_competition")){const O=localStorage.getItem("current_competition");this.backendService.getDurchgaenge(O)}M.hide()})}askUserName(){this.backendService.askForUsername.next(this.backendService)}changeTheme(O){this.themeSwitcher.setTheme(this.themes[O])}openPage(O){this.navController.navigateRoot(O)}}return T.\u0275fac=function(O){return new(O||T)(x.Y36(R.t4),x.Y36(R.SH),x.Y36(N.gz),x.Y36(N.F0),x.Y36(Y),x.Y36(P.v),x.Y36(R.Br))},T.\u0275cmp=x.Xpm({type:T,selectors:[["app-root"]],decls:25,vars:2,consts:[["contentId","main","disabled","true"],["contentId","main"],["auto-hide","false"],["menuClose","",3,"click",4,"ngFor","ngForOf"],["menuClose","",3,"click"],["slot","start","name","settings"],["slot","start","name","color-palette"],["menuClose","",3,"background-color","color","click",4,"ngFor","ngForOf"],["id","main"],["slot","start",3,"name"]],template:function(O,te){1&O&&(x.TgZ(0,"ion-app")(1,"ion-split-pane",0)(2,"ion-menu",1)(3,"ion-header")(4,"ion-toolbar")(5,"ion-title"),x._uU(6,"Menu"),x.qZA()()(),x.TgZ(7,"ion-content")(8,"ion-list")(9,"ion-menu-toggle",2),x.YNc(10,K,4,2,"ion-item",3),x.TgZ(11,"ion-item",4),x.NdJ("click",function(){return te.askUserName()}),x._UZ(12,"ion-icon",5),x.TgZ(13,"ion-label"),x._uU(14," Settings "),x.qZA()(),x.TgZ(15,"ion-item-divider"),x._uU(16,"\xa0"),x._UZ(17,"br"),x._uU(18," Farbschema"),x.qZA(),x.TgZ(19,"ion-item",4),x.NdJ("click",function(){return te.changeTheme("")}),x._UZ(20,"ion-icon",6),x.TgZ(21,"ion-label"),x._uU(22," Standardfarben "),x.qZA()(),x.YNc(23,pe,4,9,"ion-item",7),x.qZA()()()(),x._UZ(24,"ion-router-outlet",8),x.qZA()()),2&O&&(x.xp6(10),x.Q6J("ngForOf",te.appPages),x.xp6(13),x.Q6J("ngForOf",te.themeKeys))},dependencies:[U.sg,R.dr,R.W2,R.Gu,R.gu,R.Ie,R.rH,R.Q$,R.q_,R.z0,R.zc,R.jI,R.wd,R.sr,R.jP],encapsulation:2}),T})(),Te=(()=>{class T{constructor(O,te){this.router=O,this.backendService=te}canActivate(O){return!(!this.backendService.geraet||!this.backendService.step)||(this.router.navigate(["home"]),!1)}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(N.F0),x.LFG(P.v))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})(),ie=(()=>{class T{constructor(O,te){this.router=O,this.backendService=te}canActivate(O){const te=O.paramMap.get("wkId"),ce=O.paramMap.get("regId");return!!("0"===ce||this.backendService.loggedIn&&this.backendService.authenticatedClubId===ce)||(this.router.navigate(["registration/"+te]),!1)}}return T.\u0275fac=function(O){return new(O||T)(x.LFG(N.F0),x.LFG(P.v))},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})();const Be=[{path:"",redirectTo:"home",pathMatch:"full"},{path:"home",loadChildren:()=>w.e(4902).then(w.bind(w,4902)).then(T=>T.HomePageModule)},{path:"station",canActivate:[Te],loadChildren:()=>Promise.all([w.e(8592),w.e(3050)]).then(w.bind(w,3050)).then(T=>T.StationPageModule)},{path:"wertung-editor/:itemId",canActivate:[Te],loadChildren:()=>Promise.all([w.e(8592),w.e(3195)]).then(w.bind(w,3195)).then(T=>T.WertungEditorPageModule)},{path:"last-results",loadChildren:()=>Promise.all([w.e(8592),w.e(9946)]).then(w.bind(w,9946)).then(T=>T.LastResultsPageModule)},{path:"top-results",loadChildren:()=>Promise.all([w.e(8592),w.e(5332)]).then(w.bind(w,5332)).then(T=>T.LastTopResultsPageModule)},{path:"search-athlet",loadChildren:()=>Promise.all([w.e(8592),w.e(3375)]).then(w.bind(w,3375)).then(T=>T.SearchAthletPageModule)},{path:"search-athlet/:wkId",loadChildren:()=>Promise.all([w.e(8592),w.e(3375)]).then(w.bind(w,3375)).then(T=>T.SearchAthletPageModule)},{path:"athlet-view/:wkId/:athletId",loadChildren:()=>Promise.all([w.e(8592),w.e(5201)]).then(w.bind(w,5201)).then(T=>T.AthletViewPageModule)},{path:"registration",loadChildren:()=>Promise.all([w.e(8592),w.e(5323)]).then(w.bind(w,5323)).then(T=>T.RegistrationPageModule)},{path:"registration/:wkId",loadChildren:()=>Promise.all([w.e(8592),w.e(5323)]).then(w.bind(w,5323)).then(T=>T.RegistrationPageModule)},{path:"registration/:wkId/:regId",canActivate:[ie],loadChildren:()=>w.e(1994).then(w.bind(w,1994)).then(T=>T.ClubregEditorPageModule)},{path:"reg-athletlist/:wkId/:regId",canActivate:[ie],loadChildren:()=>Promise.all([w.e(8592),w.e(170)]).then(w.bind(w,170)).then(T=>T.RegAthletlistPageModule)},{path:"reg-athletlist/:wkId/:regId/:athletId",canActivate:[ie],loadChildren:()=>w.e(5231).then(w.bind(w,5231)).then(T=>T.RegAthletEditorPageModule)},{path:"reg-judgelist/:wkId/:regId",canActivate:[ie],loadChildren:()=>Promise.all([w.e(8592),w.e(6482)]).then(w.bind(w,6482)).then(T=>T.RegJudgelistPageModule)},{path:"reg-judgelist/:wkId/:regId/:judgeId",canActivate:[ie],loadChildren:()=>w.e(1053).then(w.bind(w,1053)).then(T=>T.RegJudgeEditorPageModule)}];let re=(()=>{class T{}return T.\u0275fac=function(O){return new(O||T)},T.\u0275mod=x.oAB({type:T}),T.\u0275inj=x.cJS({imports:[N.Bz.forRoot(Be,{preloadingStrategy:N.wm}),N.Bz]}),T})();var oe=w(7225);let be=(()=>{class T{constructor(){}intercept(O,te){const ce=O.headers.get("x-access-token")||localStorage.getItem("auth_token");return O=O.clone({setHeaders:{clientid:`${(0,oe.ix)()}`,"x-access-token":`${ce}`}}),te.handle(O)}}return T.\u0275fac=function(O){return new(O||T)},T.\u0275prov=x.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})(),Ne=(()=>{class T{}return T.\u0275fac=function(O){return new(O||T)},T.\u0275mod=x.oAB({type:T,bootstrap:[ke]}),T.\u0275inj=x.cJS({providers:[Te,{provide:N.wN,useClass:R.r4},P.v,Y,be,{provide:ge.TP,useClass:be,multi:!0}],imports:[ge.JF,o.b2,R.Pc.forRoot(),re]}),T})();(0,x.G48)(),o.q6().bootstrapModule(Ne).catch(T=>console.log(T))},9914:Qe=>{"use strict";Qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},9655:(Qe,Fe,w)=>{var o=w(9914),x=w(6931),N=Object.hasOwnProperty,ge=Object.create(null);for(var R in o)N.call(o,R)&&(ge[o[R]]=R);var W=Qe.exports={to:{},get:{}};function M(_,Y,G){return Math.min(Math.max(Y,_),G)}function U(_){var Y=Math.round(_).toString(16).toUpperCase();return Y.length<2?"0"+Y:Y}W.get=function(_){var G,Z;switch(_.substring(0,3).toLowerCase()){case"hsl":G=W.get.hsl(_),Z="hsl";break;case"hwb":G=W.get.hwb(_),Z="hwb";break;default:G=W.get.rgb(_),Z="rgb"}return G?{model:Z,value:G}:null},W.get.rgb=function(_){if(!_)return null;var j,P,K,E=[0,0,0,1];if(j=_.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(K=j[2],j=j[1],P=0;P<3;P++){var pe=2*P;E[P]=parseInt(j.slice(pe,pe+2),16)}K&&(E[3]=parseInt(K,16)/255)}else if(j=_.match(/^#([a-f0-9]{3,4})$/i)){for(K=(j=j[1])[3],P=0;P<3;P++)E[P]=parseInt(j[P]+j[P],16);K&&(E[3]=parseInt(K+K,16)/255)}else if(j=_.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(P=0;P<3;P++)E[P]=parseInt(j[P+1],0);j[4]&&(E[3]=j[5]?.01*parseFloat(j[4]):parseFloat(j[4]))}else{if(!(j=_.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)))return(j=_.match(/^(\w+)$/))?"transparent"===j[1]?[0,0,0,0]:N.call(o,j[1])?((E=o[j[1]])[3]=1,E):null:null;for(P=0;P<3;P++)E[P]=Math.round(2.55*parseFloat(j[P+1]));j[4]&&(E[3]=j[5]?.01*parseFloat(j[4]):parseFloat(j[4]))}for(P=0;P<3;P++)E[P]=M(E[P],0,255);return E[3]=M(E[3],0,1),E},W.get.hsl=function(_){if(!_)return null;var G=_.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(G){var Z=parseFloat(G[4]);return[(parseFloat(G[1])%360+360)%360,M(parseFloat(G[2]),0,100),M(parseFloat(G[3]),0,100),M(isNaN(Z)?1:Z,0,1)]}return null},W.get.hwb=function(_){if(!_)return null;var G=_.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(G){var Z=parseFloat(G[4]);return[(parseFloat(G[1])%360+360)%360,M(parseFloat(G[2]),0,100),M(parseFloat(G[3]),0,100),M(isNaN(Z)?1:Z,0,1)]}return null},W.to.hex=function(){var _=x(arguments);return"#"+U(_[0])+U(_[1])+U(_[2])+(_[3]<1?U(Math.round(255*_[3])):"")},W.to.rgb=function(){var _=x(arguments);return _.length<4||1===_[3]?"rgb("+Math.round(_[0])+", "+Math.round(_[1])+", "+Math.round(_[2])+")":"rgba("+Math.round(_[0])+", "+Math.round(_[1])+", "+Math.round(_[2])+", "+_[3]+")"},W.to.rgb.percent=function(){var _=x(arguments),Y=Math.round(_[0]/255*100),G=Math.round(_[1]/255*100),Z=Math.round(_[2]/255*100);return _.length<4||1===_[3]?"rgb("+Y+"%, "+G+"%, "+Z+"%)":"rgba("+Y+"%, "+G+"%, "+Z+"%, "+_[3]+")"},W.to.hsl=function(){var _=x(arguments);return _.length<4||1===_[3]?"hsl("+_[0]+", "+_[1]+"%, "+_[2]+"%)":"hsla("+_[0]+", "+_[1]+"%, "+_[2]+"%, "+_[3]+")"},W.to.hwb=function(){var _=x(arguments),Y="";return _.length>=4&&1!==_[3]&&(Y=", "+_[3]),"hwb("+_[0]+", "+_[1]+"%, "+_[2]+"%"+Y+")"},W.to.keyword=function(_){return ge[_.slice(0,3)]}},3608:(Qe,Fe,w)=>{const o=w(9655),x=w(798),N=["keyword","gray","hex"],ge={};for(const S of Object.keys(x))ge[[...x[S].labels].sort().join("")]=S;const R={};function W(S,B){if(!(this instanceof W))return new W(S,B);if(B&&B in N&&(B=null),B&&!(B in x))throw new Error("Unknown model: "+B);let E,j;if(null==S)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(S instanceof W)this.model=S.model,this.color=[...S.color],this.valpha=S.valpha;else if("string"==typeof S){const P=o.get(S);if(null===P)throw new Error("Unable to parse color from string: "+S);this.model=P.model,j=x[this.model].channels,this.color=P.value.slice(0,j),this.valpha="number"==typeof P.value[j]?P.value[j]:1}else if(S.length>0){this.model=B||"rgb",j=x[this.model].channels;const P=Array.prototype.slice.call(S,0,j);this.color=Z(P,j),this.valpha="number"==typeof S[j]?S[j]:1}else if("number"==typeof S)this.model="rgb",this.color=[S>>16&255,S>>8&255,255&S],this.valpha=1;else{this.valpha=1;const P=Object.keys(S);"alpha"in S&&(P.splice(P.indexOf("alpha"),1),this.valpha="number"==typeof S.alpha?S.alpha:0);const K=P.sort().join("");if(!(K in ge))throw new Error("Unable to parse color from object: "+JSON.stringify(S));this.model=ge[K];const{labels:pe}=x[this.model],ke=[];for(E=0;E(S%360+360)%360),saturationl:_("hsl",1,Y(100)),lightness:_("hsl",2,Y(100)),saturationv:_("hsv",1,Y(100)),value:_("hsv",2,Y(100)),chroma:_("hcg",1,Y(100)),gray:_("hcg",2,Y(100)),white:_("hwb",1,Y(100)),wblack:_("hwb",2,Y(100)),cyan:_("cmyk",0,Y(100)),magenta:_("cmyk",1,Y(100)),yellow:_("cmyk",2,Y(100)),black:_("cmyk",3,Y(100)),x:_("xyz",0,Y(95.047)),y:_("xyz",1,Y(100)),z:_("xyz",2,Y(108.833)),l:_("lab",0,Y(100)),a:_("lab",1),b:_("lab",2),keyword(S){return void 0!==S?new W(S):x[this.model].keyword(this.color)},hex(S){return void 0!==S?new W(S):o.to.hex(this.rgb().round().color)},hexa(S){if(void 0!==S)return new W(S);const B=this.rgb().round().color;let E=Math.round(255*this.valpha).toString(16).toUpperCase();return 1===E.length&&(E="0"+E),o.to.hex(B)+E},rgbNumber(){const S=this.rgb().color;return(255&S[0])<<16|(255&S[1])<<8|255&S[2]},luminosity(){const S=this.rgb().color,B=[];for(const[E,j]of S.entries()){const P=j/255;B[E]=P<=.04045?P/12.92:((P+.055)/1.055)**2.4}return.2126*B[0]+.7152*B[1]+.0722*B[2]},contrast(S){const B=this.luminosity(),E=S.luminosity();return B>E?(B+.05)/(E+.05):(E+.05)/(B+.05)},level(S){const B=this.contrast(S);return B>=7?"AAA":B>=4.5?"AA":""},isDark(){const S=this.rgb().color;return(2126*S[0]+7152*S[1]+722*S[2])/1e4<128},isLight(){return!this.isDark()},negate(){const S=this.rgb();for(let B=0;B<3;B++)S.color[B]=255-S.color[B];return S},lighten(S){const B=this.hsl();return B.color[2]+=B.color[2]*S,B},darken(S){const B=this.hsl();return B.color[2]-=B.color[2]*S,B},saturate(S){const B=this.hsl();return B.color[1]+=B.color[1]*S,B},desaturate(S){const B=this.hsl();return B.color[1]-=B.color[1]*S,B},whiten(S){const B=this.hwb();return B.color[1]+=B.color[1]*S,B},blacken(S){const B=this.hwb();return B.color[2]+=B.color[2]*S,B},grayscale(){const S=this.rgb().color,B=.3*S[0]+.59*S[1]+.11*S[2];return W.rgb(B,B,B)},fade(S){return this.alpha(this.valpha-this.valpha*S)},opaquer(S){return this.alpha(this.valpha+this.valpha*S)},rotate(S){const B=this.hsl();let E=B.color[0];return E=(E+S)%360,E=E<0?360+E:E,B.color[0]=E,B},mix(S,B){if(!S||!S.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof S);const E=S.rgb(),j=this.rgb(),P=void 0===B?.5:B,K=2*P-1,pe=E.alpha()-j.alpha(),ke=((K*pe==-1?K:(K+pe)/(1+K*pe))+1)/2,Te=1-ke;return W.rgb(ke*E.red()+Te*j.red(),ke*E.green()+Te*j.green(),ke*E.blue()+Te*j.blue(),E.alpha()*P+j.alpha()*(1-P))}};for(const S of Object.keys(x)){if(N.includes(S))continue;const{channels:B}=x[S];W.prototype[S]=function(...E){return this.model===S?new W(this):new W(E.length>0?E:[...G(x[this.model][S].raw(this.color)),this.valpha],S)},W[S]=function(...E){let j=E[0];return"number"==typeof j&&(j=Z(E,B)),new W(j,S)}}function U(S){return function(B){return function M(S,B){return Number(S.toFixed(B))}(B,S)}}function _(S,B,E){S=Array.isArray(S)?S:[S];for(const j of S)(R[j]||(R[j]=[]))[B]=E;return S=S[0],function(j){let P;return void 0!==j?(E&&(j=E(j)),P=this[S](),P.color[B]=j,P):(P=this[S]().color[B],E&&(P=E(P)),P)}}function Y(S){return function(B){return Math.max(0,Math.min(S,B))}}function G(S){return Array.isArray(S)?S:[S]}function Z(S,B){for(let E=0;E{const o=w(1382),x={};for(const R of Object.keys(o))x[o[R]]=R;const N={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};Qe.exports=N;for(const R of Object.keys(N)){if(!("channels"in N[R]))throw new Error("missing channels property: "+R);if(!("labels"in N[R]))throw new Error("missing channel labels property: "+R);if(N[R].labels.length!==N[R].channels)throw new Error("channel and label counts mismatch: "+R);const{channels:W,labels:M}=N[R];delete N[R].channels,delete N[R].labels,Object.defineProperty(N[R],"channels",{value:W}),Object.defineProperty(N[R],"labels",{value:M})}function ge(R,W){return(R[0]-W[0])**2+(R[1]-W[1])**2+(R[2]-W[2])**2}N.rgb.hsl=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.min(W,M,U),Y=Math.max(W,M,U),G=Y-_;let Z,S;Y===_?Z=0:W===Y?Z=(M-U)/G:M===Y?Z=2+(U-W)/G:U===Y&&(Z=4+(W-M)/G),Z=Math.min(60*Z,360),Z<0&&(Z+=360);const B=(_+Y)/2;return S=Y===_?0:B<=.5?G/(Y+_):G/(2-Y-_),[Z,100*S,100*B]},N.rgb.hsv=function(R){let W,M,U,_,Y;const G=R[0]/255,Z=R[1]/255,S=R[2]/255,B=Math.max(G,Z,S),E=B-Math.min(G,Z,S),j=function(P){return(B-P)/6/E+.5};return 0===E?(_=0,Y=0):(Y=E/B,W=j(G),M=j(Z),U=j(S),G===B?_=U-M:Z===B?_=1/3+W-U:S===B&&(_=2/3+M-W),_<0?_+=1:_>1&&(_-=1)),[360*_,100*Y,100*B]},N.rgb.hwb=function(R){const W=R[0],M=R[1];let U=R[2];const _=N.rgb.hsl(R)[0],Y=1/255*Math.min(W,Math.min(M,U));return U=1-1/255*Math.max(W,Math.max(M,U)),[_,100*Y,100*U]},N.rgb.cmyk=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.min(1-W,1-M,1-U);return[100*((1-W-_)/(1-_)||0),100*((1-M-_)/(1-_)||0),100*((1-U-_)/(1-_)||0),100*_]},N.rgb.keyword=function(R){const W=x[R];if(W)return W;let U,M=1/0;for(const _ of Object.keys(o)){const G=ge(R,o[_]);G.04045?((W+.055)/1.055)**2.4:W/12.92,M=M>.04045?((M+.055)/1.055)**2.4:M/12.92,U=U>.04045?((U+.055)/1.055)**2.4:U/12.92,[100*(.4124*W+.3576*M+.1805*U),100*(.2126*W+.7152*M+.0722*U),100*(.0193*W+.1192*M+.9505*U)]},N.rgb.lab=function(R){const W=N.rgb.xyz(R);let M=W[0],U=W[1],_=W[2];return M/=95.047,U/=100,_/=108.883,M=M>.008856?M**(1/3):7.787*M+16/116,U=U>.008856?U**(1/3):7.787*U+16/116,_=_>.008856?_**(1/3):7.787*_+16/116,[116*U-16,500*(M-U),200*(U-_)]},N.hsl.rgb=function(R){const W=R[0]/360,M=R[1]/100,U=R[2]/100;let _,Y,G;if(0===M)return G=255*U,[G,G,G];_=U<.5?U*(1+M):U+M-U*M;const Z=2*U-_,S=[0,0,0];for(let B=0;B<3;B++)Y=W+1/3*-(B-1),Y<0&&Y++,Y>1&&Y--,G=6*Y<1?Z+6*(_-Z)*Y:2*Y<1?_:3*Y<2?Z+(_-Z)*(2/3-Y)*6:Z,S[B]=255*G;return S},N.hsl.hsv=function(R){const W=R[0];let M=R[1]/100,U=R[2]/100,_=M;const Y=Math.max(U,.01);return U*=2,M*=U<=1?U:2-U,_*=Y<=1?Y:2-Y,[W,100*(0===U?2*_/(Y+_):2*M/(U+M)),(U+M)/2*100]},N.hsv.rgb=function(R){const W=R[0]/60,M=R[1]/100;let U=R[2]/100;const _=Math.floor(W)%6,Y=W-Math.floor(W),G=255*U*(1-M),Z=255*U*(1-M*Y),S=255*U*(1-M*(1-Y));switch(U*=255,_){case 0:return[U,S,G];case 1:return[Z,U,G];case 2:return[G,U,S];case 3:return[G,Z,U];case 4:return[S,G,U];case 5:return[U,G,Z]}},N.hsv.hsl=function(R){const W=R[0],M=R[1]/100,U=R[2]/100,_=Math.max(U,.01);let Y,G;G=(2-M)*U;const Z=(2-M)*_;return Y=M*_,Y/=Z<=1?Z:2-Z,Y=Y||0,G/=2,[W,100*Y,100*G]},N.hwb.rgb=function(R){const W=R[0]/360;let M=R[1]/100,U=R[2]/100;const _=M+U;let Y;_>1&&(M/=_,U/=_);const G=Math.floor(6*W),Z=1-U;Y=6*W-G,0!=(1&G)&&(Y=1-Y);const S=M+Y*(Z-M);let B,E,j;switch(G){default:case 6:case 0:B=Z,E=S,j=M;break;case 1:B=S,E=Z,j=M;break;case 2:B=M,E=Z,j=S;break;case 3:B=M,E=S,j=Z;break;case 4:B=S,E=M,j=Z;break;case 5:B=Z,E=M,j=S}return[255*B,255*E,255*j]},N.cmyk.rgb=function(R){const M=R[1]/100,U=R[2]/100,_=R[3]/100;return[255*(1-Math.min(1,R[0]/100*(1-_)+_)),255*(1-Math.min(1,M*(1-_)+_)),255*(1-Math.min(1,U*(1-_)+_))]},N.xyz.rgb=function(R){const W=R[0]/100,M=R[1]/100,U=R[2]/100;let _,Y,G;return _=3.2406*W+-1.5372*M+-.4986*U,Y=-.9689*W+1.8758*M+.0415*U,G=.0557*W+-.204*M+1.057*U,_=_>.0031308?1.055*_**(1/2.4)-.055:12.92*_,Y=Y>.0031308?1.055*Y**(1/2.4)-.055:12.92*Y,G=G>.0031308?1.055*G**(1/2.4)-.055:12.92*G,_=Math.min(Math.max(0,_),1),Y=Math.min(Math.max(0,Y),1),G=Math.min(Math.max(0,G),1),[255*_,255*Y,255*G]},N.xyz.lab=function(R){let W=R[0],M=R[1],U=R[2];return W/=95.047,M/=100,U/=108.883,W=W>.008856?W**(1/3):7.787*W+16/116,M=M>.008856?M**(1/3):7.787*M+16/116,U=U>.008856?U**(1/3):7.787*U+16/116,[116*M-16,500*(W-M),200*(M-U)]},N.lab.xyz=function(R){let _,Y,G;Y=(R[0]+16)/116,_=R[1]/500+Y,G=Y-R[2]/200;const Z=Y**3,S=_**3,B=G**3;return Y=Z>.008856?Z:(Y-16/116)/7.787,_=S>.008856?S:(_-16/116)/7.787,G=B>.008856?B:(G-16/116)/7.787,_*=95.047,Y*=100,G*=108.883,[_,Y,G]},N.lab.lch=function(R){const W=R[0],M=R[1],U=R[2];let _;return _=360*Math.atan2(U,M)/2/Math.PI,_<0&&(_+=360),[W,Math.sqrt(M*M+U*U),_]},N.lch.lab=function(R){const M=R[1],_=R[2]/360*2*Math.PI;return[R[0],M*Math.cos(_),M*Math.sin(_)]},N.rgb.ansi16=function(R,W=null){const[M,U,_]=R;let Y=null===W?N.rgb.hsv(R)[2]:W;if(Y=Math.round(Y/50),0===Y)return 30;let G=30+(Math.round(_/255)<<2|Math.round(U/255)<<1|Math.round(M/255));return 2===Y&&(G+=60),G},N.hsv.ansi16=function(R){return N.rgb.ansi16(N.hsv.rgb(R),R[2])},N.rgb.ansi256=function(R){const W=R[0],M=R[1],U=R[2];return W===M&&M===U?W<8?16:W>248?231:Math.round((W-8)/247*24)+232:16+36*Math.round(W/255*5)+6*Math.round(M/255*5)+Math.round(U/255*5)},N.ansi16.rgb=function(R){let W=R%10;if(0===W||7===W)return R>50&&(W+=3.5),W=W/10.5*255,[W,W,W];const M=.5*(1+~~(R>50));return[(1&W)*M*255,(W>>1&1)*M*255,(W>>2&1)*M*255]},N.ansi256.rgb=function(R){if(R>=232){const Y=10*(R-232)+8;return[Y,Y,Y]}let W;return R-=16,[Math.floor(R/36)/5*255,Math.floor((W=R%36)/6)/5*255,W%6/5*255]},N.rgb.hex=function(R){const M=(((255&Math.round(R[0]))<<16)+((255&Math.round(R[1]))<<8)+(255&Math.round(R[2]))).toString(16).toUpperCase();return"000000".substring(M.length)+M},N.hex.rgb=function(R){const W=R.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!W)return[0,0,0];let M=W[0];3===W[0].length&&(M=M.split("").map(Z=>Z+Z).join(""));const U=parseInt(M,16);return[U>>16&255,U>>8&255,255&U]},N.rgb.hcg=function(R){const W=R[0]/255,M=R[1]/255,U=R[2]/255,_=Math.max(Math.max(W,M),U),Y=Math.min(Math.min(W,M),U),G=_-Y;let Z,S;return Z=G<1?Y/(1-G):0,S=G<=0?0:_===W?(M-U)/G%6:_===M?2+(U-W)/G:4+(W-M)/G,S/=6,S%=1,[360*S,100*G,100*Z]},N.hsl.hcg=function(R){const W=R[1]/100,M=R[2]/100,U=M<.5?2*W*M:2*W*(1-M);let _=0;return U<1&&(_=(M-.5*U)/(1-U)),[R[0],100*U,100*_]},N.hsv.hcg=function(R){const M=R[2]/100,U=R[1]/100*M;let _=0;return U<1&&(_=(M-U)/(1-U)),[R[0],100*U,100*_]},N.hcg.rgb=function(R){const M=R[1]/100,U=R[2]/100;if(0===M)return[255*U,255*U,255*U];const _=[0,0,0],Y=R[0]/360%1*6,G=Y%1,Z=1-G;let S=0;switch(Math.floor(Y)){case 0:_[0]=1,_[1]=G,_[2]=0;break;case 1:_[0]=Z,_[1]=1,_[2]=0;break;case 2:_[0]=0,_[1]=1,_[2]=G;break;case 3:_[0]=0,_[1]=Z,_[2]=1;break;case 4:_[0]=G,_[1]=0,_[2]=1;break;default:_[0]=1,_[1]=0,_[2]=Z}return S=(1-M)*U,[255*(M*_[0]+S),255*(M*_[1]+S),255*(M*_[2]+S)]},N.hcg.hsv=function(R){const W=R[1]/100,U=W+R[2]/100*(1-W);let _=0;return U>0&&(_=W/U),[R[0],100*_,100*U]},N.hcg.hsl=function(R){const W=R[1]/100,U=R[2]/100*(1-W)+.5*W;let _=0;return U>0&&U<.5?_=W/(2*U):U>=.5&&U<1&&(_=W/(2*(1-U))),[R[0],100*_,100*U]},N.hcg.hwb=function(R){const W=R[1]/100,U=W+R[2]/100*(1-W);return[R[0],100*(U-W),100*(1-U)]},N.hwb.hcg=function(R){const U=1-R[2]/100,_=U-R[1]/100;let Y=0;return _<1&&(Y=(U-_)/(1-_)),[R[0],100*_,100*Y]},N.apple.rgb=function(R){return[R[0]/65535*255,R[1]/65535*255,R[2]/65535*255]},N.rgb.apple=function(R){return[R[0]/255*65535,R[1]/255*65535,R[2]/255*65535]},N.gray.rgb=function(R){return[R[0]/100*255,R[0]/100*255,R[0]/100*255]},N.gray.hsl=function(R){return[0,0,R[0]]},N.gray.hsv=N.gray.hsl,N.gray.hwb=function(R){return[0,100,R[0]]},N.gray.cmyk=function(R){return[0,0,0,R[0]]},N.gray.lab=function(R){return[R[0],0,0]},N.gray.hex=function(R){const W=255&Math.round(R[0]/100*255),U=((W<<16)+(W<<8)+W).toString(16).toUpperCase();return"000000".substring(U.length)+U},N.rgb.gray=function(R){return[(R[0]+R[1]+R[2])/3/255*100]}},798:(Qe,Fe,w)=>{const o=w(2539),x=w(2535),N={};Object.keys(o).forEach(M=>{N[M]={},Object.defineProperty(N[M],"channels",{value:o[M].channels}),Object.defineProperty(N[M],"labels",{value:o[M].labels});const U=x(M);Object.keys(U).forEach(Y=>{const G=U[Y];N[M][Y]=function W(M){const U=function(..._){const Y=_[0];if(null==Y)return Y;Y.length>1&&(_=Y);const G=M(_);if("object"==typeof G)for(let Z=G.length,S=0;S1&&(_=Y),M(_))};return"conversion"in M&&(U.conversion=M.conversion),U}(G)})}),Qe.exports=N},2535:(Qe,Fe,w)=>{const o=w(2539);function ge(W,M){return function(U){return M(W(U))}}function R(W,M){const U=[M[W].parent,W];let _=o[M[W].parent][W],Y=M[W].parent;for(;M[Y].parent;)U.unshift(M[Y].parent),_=ge(o[M[Y].parent][Y],_),Y=M[Y].parent;return _.conversion=U,_}Qe.exports=function(W){const M=function N(W){const M=function x(){const W={},M=Object.keys(o);for(let U=M.length,_=0;_{"use strict";Qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},1135:(Qe,Fe,w)=>{"use strict";w.d(Fe,{X:()=>x});var o=w(7579);class x extends o.x{constructor(ge){super(),this._value=ge}get value(){return this.getValue()}_subscribe(ge){const R=super._subscribe(ge);return!R.closed&&ge.next(this._value),R}getValue(){const{hasError:ge,thrownError:R,_value:W}=this;if(ge)throw R;return this._throwIfClosed(),W}next(ge){super.next(this._value=ge)}}},9751:(Qe,Fe,w)=>{"use strict";w.d(Fe,{y:()=>U});var o=w(2961),x=w(727),N=w(8822),ge=w(9635),R=w(2416),W=w(576),M=w(2806);let U=(()=>{class Z{constructor(B){B&&(this._subscribe=B)}lift(B){const E=new Z;return E.source=this,E.operator=B,E}subscribe(B,E,j){const P=function G(Z){return Z&&Z instanceof o.Lv||function Y(Z){return Z&&(0,W.m)(Z.next)&&(0,W.m)(Z.error)&&(0,W.m)(Z.complete)}(Z)&&(0,x.Nn)(Z)}(B)?B:new o.Hp(B,E,j);return(0,M.x)(()=>{const{operator:K,source:pe}=this;P.add(K?K.call(P,pe):pe?this._subscribe(P):this._trySubscribe(P))}),P}_trySubscribe(B){try{return this._subscribe(B)}catch(E){B.error(E)}}forEach(B,E){return new(E=_(E))((j,P)=>{const K=new o.Hp({next:pe=>{try{B(pe)}catch(ke){P(ke),K.unsubscribe()}},error:P,complete:j});this.subscribe(K)})}_subscribe(B){var E;return null===(E=this.source)||void 0===E?void 0:E.subscribe(B)}[N.L](){return this}pipe(...B){return(0,ge.U)(B)(this)}toPromise(B){return new(B=_(B))((E,j)=>{let P;this.subscribe(K=>P=K,K=>j(K),()=>E(P))})}}return Z.create=S=>new Z(S),Z})();function _(Z){var S;return null!==(S=Z??R.v.Promise)&&void 0!==S?S:Promise}},7579:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>M});var o=w(9751),x=w(727);const ge=(0,w(3888).d)(_=>function(){_(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var R=w(8737),W=w(2806);let M=(()=>{class _ extends o.y{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(G){const Z=new U(this,this);return Z.operator=G,Z}_throwIfClosed(){if(this.closed)throw new ge}next(G){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const Z of this.currentObservers)Z.next(G)}})}error(G){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=G;const{observers:Z}=this;for(;Z.length;)Z.shift().error(G)}})}complete(){(0,W.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:G}=this;for(;G.length;)G.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var G;return(null===(G=this.observers)||void 0===G?void 0:G.length)>0}_trySubscribe(G){return this._throwIfClosed(),super._trySubscribe(G)}_subscribe(G){return this._throwIfClosed(),this._checkFinalizedStatuses(G),this._innerSubscribe(G)}_innerSubscribe(G){const{hasError:Z,isStopped:S,observers:B}=this;return Z||S?x.Lc:(this.currentObservers=null,B.push(G),new x.w0(()=>{this.currentObservers=null,(0,R.P)(B,G)}))}_checkFinalizedStatuses(G){const{hasError:Z,thrownError:S,isStopped:B}=this;Z?G.error(S):B&&G.complete()}asObservable(){const G=new o.y;return G.source=this,G}}return _.create=(Y,G)=>new U(Y,G),_})();class U extends M{constructor(Y,G){super(),this.destination=Y,this.source=G}next(Y){var G,Z;null===(Z=null===(G=this.destination)||void 0===G?void 0:G.next)||void 0===Z||Z.call(G,Y)}error(Y){var G,Z;null===(Z=null===(G=this.destination)||void 0===G?void 0:G.error)||void 0===Z||Z.call(G,Y)}complete(){var Y,G;null===(G=null===(Y=this.destination)||void 0===Y?void 0:Y.complete)||void 0===G||G.call(Y)}_subscribe(Y){var G,Z;return null!==(Z=null===(G=this.source)||void 0===G?void 0:G.subscribe(Y))&&void 0!==Z?Z:x.Lc}}},2961:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Hp:()=>j,Lv:()=>Z});var o=w(576),x=w(727),N=w(2416),ge=w(7849);function R(){}const W=_("C",void 0,void 0);function _(Te,ie,Be){return{kind:Te,value:ie,error:Be}}var Y=w(3410),G=w(2806);class Z extends x.w0{constructor(ie){super(),this.isStopped=!1,ie?(this.destination=ie,(0,x.Nn)(ie)&&ie.add(this)):this.destination=ke}static create(ie,Be,re){return new j(ie,Be,re)}next(ie){this.isStopped?pe(function U(Te){return _("N",Te,void 0)}(ie),this):this._next(ie)}error(ie){this.isStopped?pe(function M(Te){return _("E",void 0,Te)}(ie),this):(this.isStopped=!0,this._error(ie))}complete(){this.isStopped?pe(W,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(ie){this.destination.next(ie)}_error(ie){try{this.destination.error(ie)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const S=Function.prototype.bind;function B(Te,ie){return S.call(Te,ie)}class E{constructor(ie){this.partialObserver=ie}next(ie){const{partialObserver:Be}=this;if(Be.next)try{Be.next(ie)}catch(re){P(re)}}error(ie){const{partialObserver:Be}=this;if(Be.error)try{Be.error(ie)}catch(re){P(re)}else P(ie)}complete(){const{partialObserver:ie}=this;if(ie.complete)try{ie.complete()}catch(Be){P(Be)}}}class j extends Z{constructor(ie,Be,re){let oe;if(super(),(0,o.m)(ie)||!ie)oe={next:ie??void 0,error:Be??void 0,complete:re??void 0};else{let be;this&&N.v.useDeprecatedNextContext?(be=Object.create(ie),be.unsubscribe=()=>this.unsubscribe(),oe={next:ie.next&&B(ie.next,be),error:ie.error&&B(ie.error,be),complete:ie.complete&&B(ie.complete,be)}):oe=ie}this.destination=new E(oe)}}function P(Te){N.v.useDeprecatedSynchronousErrorHandling?(0,G.O)(Te):(0,ge.h)(Te)}function pe(Te,ie){const{onStoppedNotification:Be}=N.v;Be&&Y.z.setTimeout(()=>Be(Te,ie))}const ke={closed:!0,next:R,error:function K(Te){throw Te},complete:R}},727:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Lc:()=>W,w0:()=>R,Nn:()=>M});var o=w(576);const N=(0,w(3888).d)(_=>function(G){_(this),this.message=G?`${G.length} errors occurred during unsubscription:\n${G.map((Z,S)=>`${S+1}) ${Z.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=G});var ge=w(8737);class R{constructor(Y){this.initialTeardown=Y,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let Y;if(!this.closed){this.closed=!0;const{_parentage:G}=this;if(G)if(this._parentage=null,Array.isArray(G))for(const B of G)B.remove(this);else G.remove(this);const{initialTeardown:Z}=this;if((0,o.m)(Z))try{Z()}catch(B){Y=B instanceof N?B.errors:[B]}const{_finalizers:S}=this;if(S){this._finalizers=null;for(const B of S)try{U(B)}catch(E){Y=Y??[],E instanceof N?Y=[...Y,...E.errors]:Y.push(E)}}if(Y)throw new N(Y)}}add(Y){var G;if(Y&&Y!==this)if(this.closed)U(Y);else{if(Y instanceof R){if(Y.closed||Y._hasParent(this))return;Y._addParent(this)}(this._finalizers=null!==(G=this._finalizers)&&void 0!==G?G:[]).push(Y)}}_hasParent(Y){const{_parentage:G}=this;return G===Y||Array.isArray(G)&&G.includes(Y)}_addParent(Y){const{_parentage:G}=this;this._parentage=Array.isArray(G)?(G.push(Y),G):G?[G,Y]:Y}_removeParent(Y){const{_parentage:G}=this;G===Y?this._parentage=null:Array.isArray(G)&&(0,ge.P)(G,Y)}remove(Y){const{_finalizers:G}=this;G&&(0,ge.P)(G,Y),Y instanceof R&&Y._removeParent(this)}}R.EMPTY=(()=>{const _=new R;return _.closed=!0,_})();const W=R.EMPTY;function M(_){return _ instanceof R||_&&"closed"in _&&(0,o.m)(_.remove)&&(0,o.m)(_.add)&&(0,o.m)(_.unsubscribe)}function U(_){(0,o.m)(_)?_():_.unsubscribe()}},2416:(Qe,Fe,w)=>{"use strict";w.d(Fe,{v:()=>o});const o={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1}},515:(Qe,Fe,w)=>{"use strict";w.d(Fe,{E:()=>x});const x=new(w(9751).y)(R=>R.complete())},2076:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>re});var o=w(8421),x=w(9672),N=w(4482),ge=w(5403);function R(oe,be=0){return(0,N.e)((Ne,Q)=>{Ne.subscribe((0,ge.x)(Q,T=>(0,x.f)(Q,oe,()=>Q.next(T),be),()=>(0,x.f)(Q,oe,()=>Q.complete(),be),T=>(0,x.f)(Q,oe,()=>Q.error(T),be)))})}function W(oe,be=0){return(0,N.e)((Ne,Q)=>{Q.add(oe.schedule(()=>Ne.subscribe(Q),be))})}var _=w(9751),G=w(2202),Z=w(576);function B(oe,be){if(!oe)throw new Error("Iterable cannot be null");return new _.y(Ne=>{(0,x.f)(Ne,be,()=>{const Q=oe[Symbol.asyncIterator]();(0,x.f)(Ne,be,()=>{Q.next().then(T=>{T.done?Ne.complete():Ne.next(T.value)})},0,!0)})})}var E=w(3670),j=w(8239),P=w(1144),K=w(6495),pe=w(2206),ke=w(4532),Te=w(3260);function re(oe,be){return be?function Be(oe,be){if(null!=oe){if((0,E.c)(oe))return function M(oe,be){return(0,o.Xf)(oe).pipe(W(be),R(be))}(oe,be);if((0,P.z)(oe))return function Y(oe,be){return new _.y(Ne=>{let Q=0;return be.schedule(function(){Q===oe.length?Ne.complete():(Ne.next(oe[Q++]),Ne.closed||this.schedule())})})}(oe,be);if((0,j.t)(oe))return function U(oe,be){return(0,o.Xf)(oe).pipe(W(be),R(be))}(oe,be);if((0,pe.D)(oe))return B(oe,be);if((0,K.T)(oe))return function S(oe,be){return new _.y(Ne=>{let Q;return(0,x.f)(Ne,be,()=>{Q=oe[G.h](),(0,x.f)(Ne,be,()=>{let T,k;try{({value:T,done:k}=Q.next())}catch(O){return void Ne.error(O)}k?Ne.complete():Ne.next(T)},0,!0)}),()=>(0,Z.m)(Q?.return)&&Q.return()})}(oe,be);if((0,Te.L)(oe))return function ie(oe,be){return B((0,Te.Q)(oe),be)}(oe,be)}throw(0,ke.z)(oe)}(oe,be):(0,o.Xf)(oe)}},8421:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Xf:()=>S});var o=w(655),x=w(1144),N=w(8239),ge=w(9751),R=w(3670),W=w(2206),M=w(4532),U=w(6495),_=w(3260),Y=w(576),G=w(7849),Z=w(8822);function S(Te){if(Te instanceof ge.y)return Te;if(null!=Te){if((0,R.c)(Te))return function B(Te){return new ge.y(ie=>{const Be=Te[Z.L]();if((0,Y.m)(Be.subscribe))return Be.subscribe(ie);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(Te);if((0,x.z)(Te))return function E(Te){return new ge.y(ie=>{for(let Be=0;Be{Te.then(Be=>{ie.closed||(ie.next(Be),ie.complete())},Be=>ie.error(Be)).then(null,G.h)})}(Te);if((0,W.D)(Te))return K(Te);if((0,U.T)(Te))return function P(Te){return new ge.y(ie=>{for(const Be of Te)if(ie.next(Be),ie.closed)return;ie.complete()})}(Te);if((0,_.L)(Te))return function pe(Te){return K((0,_.Q)(Te))}(Te)}throw(0,M.z)(Te)}function K(Te){return new ge.y(ie=>{(function ke(Te,ie){var Be,re,oe,be;return(0,o.mG)(this,void 0,void 0,function*(){try{for(Be=(0,o.KL)(Te);!(re=yield Be.next()).done;)if(ie.next(re.value),ie.closed)return}catch(Ne){oe={error:Ne}}finally{try{re&&!re.done&&(be=Be.return)&&(yield be.call(Be))}finally{if(oe)throw oe.error}}ie.complete()})})(Te,ie).catch(Be=>ie.error(Be))})}},9646:(Qe,Fe,w)=>{"use strict";w.d(Fe,{of:()=>N});var o=w(3269),x=w(2076);function N(...ge){const R=(0,o.yG)(ge);return(0,x.D)(ge,R)}},5403:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>x});var o=w(2961);function x(ge,R,W,M,U){return new N(ge,R,W,M,U)}class N extends o.Lv{constructor(R,W,M,U,_,Y){super(R),this.onFinalize=_,this.shouldUnsubscribe=Y,this._next=W?function(G){try{W(G)}catch(Z){R.error(Z)}}:super._next,this._error=U?function(G){try{U(G)}catch(Z){R.error(Z)}finally{this.unsubscribe()}}:super._error,this._complete=M?function(){try{M()}catch(G){R.error(G)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var R;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:W}=this;super.unsubscribe(),!W&&(null===(R=this.onFinalize)||void 0===R||R.call(this))}}}},4351:(Qe,Fe,w)=>{"use strict";w.d(Fe,{b:()=>N});var o=w(5577),x=w(576);function N(ge,R){return(0,x.m)(R)?(0,o.z)(ge,R,1):(0,o.z)(ge,1)}},1884:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>ge});var o=w(4671),x=w(4482),N=w(5403);function ge(W,M=o.y){return W=W??R,(0,x.e)((U,_)=>{let Y,G=!0;U.subscribe((0,N.x)(_,Z=>{const S=M(Z);(G||!W(Y,S))&&(G=!1,Y=S,_.next(Z))}))})}function R(W,M){return W===M}},9300:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>N});var o=w(4482),x=w(5403);function N(ge,R){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>ge.call(R,_,U++)&&M.next(_)))})}},8746:(Qe,Fe,w)=>{"use strict";w.d(Fe,{x:()=>x});var o=w(4482);function x(N){return(0,o.e)((ge,R)=>{try{ge.subscribe(R)}finally{R.add(N)}})}},4004:(Qe,Fe,w)=>{"use strict";w.d(Fe,{U:()=>N});var o=w(4482),x=w(5403);function N(ge,R){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>{M.next(ge.call(R,_,U++))}))})}},8189:(Qe,Fe,w)=>{"use strict";w.d(Fe,{J:()=>N});var o=w(5577),x=w(4671);function N(ge=1/0){return(0,o.z)(x.y,ge)}},5577:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>U});var o=w(4004),x=w(8421),N=w(4482),ge=w(9672),R=w(5403),M=w(576);function U(_,Y,G=1/0){return(0,M.m)(Y)?U((Z,S)=>(0,o.U)((B,E)=>Y(Z,B,S,E))((0,x.Xf)(_(Z,S))),G):("number"==typeof Y&&(G=Y),(0,N.e)((Z,S)=>function W(_,Y,G,Z,S,B,E,j){const P=[];let K=0,pe=0,ke=!1;const Te=()=>{ke&&!P.length&&!K&&Y.complete()},ie=re=>K{B&&Y.next(re),K++;let oe=!1;(0,x.Xf)(G(re,pe++)).subscribe((0,R.x)(Y,be=>{S?.(be),B?ie(be):Y.next(be)},()=>{oe=!0},void 0,()=>{if(oe)try{for(K--;P.length&&KBe(be)):Be(be)}Te()}catch(be){Y.error(be)}}))};return _.subscribe((0,R.x)(Y,ie,()=>{ke=!0,Te()})),()=>{j?.()}}(Z,S,_,G)))}},3099:(Qe,Fe,w)=>{"use strict";w.d(Fe,{B:()=>R});var o=w(8421),x=w(7579),N=w(2961),ge=w(4482);function R(M={}){const{connector:U=(()=>new x.x),resetOnError:_=!0,resetOnComplete:Y=!0,resetOnRefCountZero:G=!0}=M;return Z=>{let S,B,E,j=0,P=!1,K=!1;const pe=()=>{B?.unsubscribe(),B=void 0},ke=()=>{pe(),S=E=void 0,P=K=!1},Te=()=>{const ie=S;ke(),ie?.unsubscribe()};return(0,ge.e)((ie,Be)=>{j++,!K&&!P&&pe();const re=E=E??U();Be.add(()=>{j--,0===j&&!K&&!P&&(B=W(Te,G))}),re.subscribe(Be),!S&&j>0&&(S=new N.Hp({next:oe=>re.next(oe),error:oe=>{K=!0,pe(),B=W(ke,_,oe),re.error(oe)},complete:()=>{P=!0,pe(),B=W(ke,Y),re.complete()}}),(0,o.Xf)(ie).subscribe(S))})(Z)}}function W(M,U,..._){if(!0===U)return void M();if(!1===U)return;const Y=new N.Hp({next:()=>{Y.unsubscribe(),M()}});return U(..._).subscribe(Y)}},3900:(Qe,Fe,w)=>{"use strict";w.d(Fe,{w:()=>ge});var o=w(8421),x=w(4482),N=w(5403);function ge(R,W){return(0,x.e)((M,U)=>{let _=null,Y=0,G=!1;const Z=()=>G&&!_&&U.complete();M.subscribe((0,N.x)(U,S=>{_?.unsubscribe();let B=0;const E=Y++;(0,o.Xf)(R(S,E)).subscribe(_=(0,N.x)(U,j=>U.next(W?W(S,j,E,B++):j),()=>{_=null,Z()}))},()=>{G=!0,Z()}))})}},5698:(Qe,Fe,w)=>{"use strict";w.d(Fe,{q:()=>ge});var o=w(515),x=w(4482),N=w(5403);function ge(R){return R<=0?()=>o.E:(0,x.e)((W,M)=>{let U=0;W.subscribe((0,N.x)(M,_=>{++U<=R&&(M.next(_),R<=U&&M.complete())}))})}},2529:(Qe,Fe,w)=>{"use strict";w.d(Fe,{o:()=>N});var o=w(4482),x=w(5403);function N(ge,R=!1){return(0,o.e)((W,M)=>{let U=0;W.subscribe((0,x.x)(M,_=>{const Y=ge(_,U++);(Y||R)&&M.next(_),!Y&&M.complete()}))})}},8505:(Qe,Fe,w)=>{"use strict";w.d(Fe,{b:()=>R});var o=w(576),x=w(4482),N=w(5403),ge=w(4671);function R(W,M,U){const _=(0,o.m)(W)||M||U?{next:W,error:M,complete:U}:W;return _?(0,x.e)((Y,G)=>{var Z;null===(Z=_.subscribe)||void 0===Z||Z.call(_);let S=!0;Y.subscribe((0,N.x)(G,B=>{var E;null===(E=_.next)||void 0===E||E.call(_,B),G.next(B)},()=>{var B;S=!1,null===(B=_.complete)||void 0===B||B.call(_),G.complete()},B=>{var E;S=!1,null===(E=_.error)||void 0===E||E.call(_,B),G.error(B)},()=>{var B,E;S&&(null===(B=_.unsubscribe)||void 0===B||B.call(_)),null===(E=_.finalize)||void 0===E||E.call(_)}))}):ge.y}},1566:(Qe,Fe,w)=>{"use strict";w.d(Fe,{P:()=>Y,z:()=>_});var o=w(727);class x extends o.w0{constructor(Z,S){super()}schedule(Z,S=0){return this}}const N={setInterval(G,Z,...S){const{delegate:B}=N;return B?.setInterval?B.setInterval(G,Z,...S):setInterval(G,Z,...S)},clearInterval(G){const{delegate:Z}=N;return(Z?.clearInterval||clearInterval)(G)},delegate:void 0};var ge=w(8737);const W={now:()=>(W.delegate||Date).now(),delegate:void 0};class M{constructor(Z,S=M.now){this.schedulerActionCtor=Z,this.now=S}schedule(Z,S=0,B){return new this.schedulerActionCtor(this,Z).schedule(B,S)}}M.now=W.now;const _=new class U extends M{constructor(Z,S=M.now){super(Z,S),this.actions=[],this._active=!1}flush(Z){const{actions:S}=this;if(this._active)return void S.push(Z);let B;this._active=!0;do{if(B=Z.execute(Z.state,Z.delay))break}while(Z=S.shift());if(this._active=!1,B){for(;Z=S.shift();)Z.unsubscribe();throw B}}}(class R extends x{constructor(Z,S){super(Z,S),this.scheduler=Z,this.work=S,this.pending=!1}schedule(Z,S=0){var B;if(this.closed)return this;this.state=Z;const E=this.id,j=this.scheduler;return null!=E&&(this.id=this.recycleAsyncId(j,E,S)),this.pending=!0,this.delay=S,this.id=null!==(B=this.id)&&void 0!==B?B:this.requestAsyncId(j,this.id,S),this}requestAsyncId(Z,S,B=0){return N.setInterval(Z.flush.bind(Z,this),B)}recycleAsyncId(Z,S,B=0){if(null!=B&&this.delay===B&&!1===this.pending)return S;null!=S&&N.clearInterval(S)}execute(Z,S){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const B=this._execute(Z,S);if(B)return B;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(Z,S){let E,B=!1;try{this.work(Z)}catch(j){B=!0,E=j||new Error("Scheduled action threw falsy error")}if(B)return this.unsubscribe(),E}unsubscribe(){if(!this.closed){const{id:Z,scheduler:S}=this,{actions:B}=S;this.work=this.state=this.scheduler=null,this.pending=!1,(0,ge.P)(B,this),null!=Z&&(this.id=this.recycleAsyncId(S,Z,null)),this.delay=null,super.unsubscribe()}}}),Y=_},3410:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>o});const o={setTimeout(x,N,...ge){const{delegate:R}=o;return R?.setTimeout?R.setTimeout(x,N,...ge):setTimeout(x,N,...ge)},clearTimeout(x){const{delegate:N}=o;return(N?.clearTimeout||clearTimeout)(x)},delegate:void 0}},2202:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>x});const x=function o(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}()},8822:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>o});const o="function"==typeof Symbol&&Symbol.observable||"@@observable"},3269:(Qe,Fe,w)=>{"use strict";w.d(Fe,{_6:()=>W,jO:()=>ge,yG:()=>R});var o=w(576),x=w(3532);function N(M){return M[M.length-1]}function ge(M){return(0,o.m)(N(M))?M.pop():void 0}function R(M){return(0,x.K)(N(M))?M.pop():void 0}function W(M,U){return"number"==typeof N(M)?M.pop():U}},4742:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>R});const{isArray:o}=Array,{getPrototypeOf:x,prototype:N,keys:ge}=Object;function R(M){if(1===M.length){const U=M[0];if(o(U))return{args:U,keys:null};if(function W(M){return M&&"object"==typeof M&&x(M)===N}(U)){const _=ge(U);return{args:_.map(Y=>U[Y]),keys:_}}}return{args:M,keys:null}}},8737:(Qe,Fe,w)=>{"use strict";function o(x,N){if(x){const ge=x.indexOf(N);0<=ge&&x.splice(ge,1)}}w.d(Fe,{P:()=>o})},3888:(Qe,Fe,w)=>{"use strict";function o(x){const ge=x(R=>{Error.call(R),R.stack=(new Error).stack});return ge.prototype=Object.create(Error.prototype),ge.prototype.constructor=ge,ge}w.d(Fe,{d:()=>o})},1810:(Qe,Fe,w)=>{"use strict";function o(x,N){return x.reduce((ge,R,W)=>(ge[R]=N[W],ge),{})}w.d(Fe,{n:()=>o})},2806:(Qe,Fe,w)=>{"use strict";w.d(Fe,{O:()=>ge,x:()=>N});var o=w(2416);let x=null;function N(R){if(o.v.useDeprecatedSynchronousErrorHandling){const W=!x;if(W&&(x={errorThrown:!1,error:null}),R(),W){const{errorThrown:M,error:U}=x;if(x=null,M)throw U}}else R()}function ge(R){o.v.useDeprecatedSynchronousErrorHandling&&x&&(x.errorThrown=!0,x.error=R)}},9672:(Qe,Fe,w)=>{"use strict";function o(x,N,ge,R=0,W=!1){const M=N.schedule(function(){ge(),W?x.add(this.schedule(null,R)):this.unsubscribe()},R);if(x.add(M),!W)return M}w.d(Fe,{f:()=>o})},4671:(Qe,Fe,w)=>{"use strict";function o(x){return x}w.d(Fe,{y:()=>o})},1144:(Qe,Fe,w)=>{"use strict";w.d(Fe,{z:()=>o});const o=x=>x&&"number"==typeof x.length&&"function"!=typeof x},2206:(Qe,Fe,w)=>{"use strict";w.d(Fe,{D:()=>x});var o=w(576);function x(N){return Symbol.asyncIterator&&(0,o.m)(N?.[Symbol.asyncIterator])}},576:(Qe,Fe,w)=>{"use strict";function o(x){return"function"==typeof x}w.d(Fe,{m:()=>o})},3670:(Qe,Fe,w)=>{"use strict";w.d(Fe,{c:()=>N});var o=w(8822),x=w(576);function N(ge){return(0,x.m)(ge[o.L])}},6495:(Qe,Fe,w)=>{"use strict";w.d(Fe,{T:()=>N});var o=w(2202),x=w(576);function N(ge){return(0,x.m)(ge?.[o.h])}},8239:(Qe,Fe,w)=>{"use strict";w.d(Fe,{t:()=>x});var o=w(576);function x(N){return(0,o.m)(N?.then)}},3260:(Qe,Fe,w)=>{"use strict";w.d(Fe,{L:()=>ge,Q:()=>N});var o=w(655),x=w(576);function N(R){return(0,o.FC)(this,arguments,function*(){const M=R.getReader();try{for(;;){const{value:U,done:_}=yield(0,o.qq)(M.read());if(_)return yield(0,o.qq)(void 0);yield yield(0,o.qq)(U)}}finally{M.releaseLock()}})}function ge(R){return(0,x.m)(R?.getReader)}},3532:(Qe,Fe,w)=>{"use strict";w.d(Fe,{K:()=>x});var o=w(576);function x(N){return N&&(0,o.m)(N.schedule)}},4482:(Qe,Fe,w)=>{"use strict";w.d(Fe,{A:()=>x,e:()=>N});var o=w(576);function x(ge){return(0,o.m)(ge?.lift)}function N(ge){return R=>{if(x(R))return R.lift(function(W){try{return ge(W,this)}catch(M){this.error(M)}});throw new TypeError("Unable to lift unknown Observable type")}}},3268:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Z:()=>ge});var o=w(4004);const{isArray:x}=Array;function ge(R){return(0,o.U)(W=>function N(R,W){return x(W)?R(...W):R(W)}(R,W))}},9635:(Qe,Fe,w)=>{"use strict";w.d(Fe,{U:()=>N,z:()=>x});var o=w(4671);function x(...ge){return N(ge)}function N(ge){return 0===ge.length?o.y:1===ge.length?ge[0]:function(W){return ge.reduce((M,U)=>U(M),W)}}},7849:(Qe,Fe,w)=>{"use strict";w.d(Fe,{h:()=>N});var o=w(2416),x=w(3410);function N(ge){x.z.setTimeout(()=>{const{onUnhandledError:R}=o.v;if(!R)throw ge;R(ge)})}},4532:(Qe,Fe,w)=>{"use strict";function o(x){return new TypeError(`You provided ${null!==x&&"object"==typeof x?"an invalid object":`'${x}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}w.d(Fe,{z:()=>o})},6931:(Qe,Fe,w)=>{"use strict";var o=w(1708),x=Array.prototype.concat,N=Array.prototype.slice,ge=Qe.exports=function(W){for(var M=[],U=0,_=W.length;U<_;U++){var Y=W[U];o(Y)?M=x.call(M,N.call(Y)):M.push(Y)}return M};ge.wrap=function(R){return function(){return R(ge(arguments))}}},1708:Qe=>{Qe.exports=function(w){return!(!w||"string"==typeof w)&&(w instanceof Array||Array.isArray(w)||w.length>=0&&(w.splice instanceof Function||Object.getOwnPropertyDescriptor(w,w.length-1)&&"String"!==w.constructor.name))}},863:(Qe,Fe,w)=>{var o={"./ion-accordion_2.entry.js":[9654,8592,9654],"./ion-action-sheet.entry.js":[3648,8592,3648],"./ion-alert.entry.js":[1118,8592,1118],"./ion-app_8.entry.js":[53,8592,3236],"./ion-avatar_3.entry.js":[4753,4753],"./ion-back-button.entry.js":[2073,8592,2073],"./ion-backdrop.entry.js":[8939,8939],"./ion-breadcrumb_2.entry.js":[7544,8592,7544],"./ion-button_2.entry.js":[5652,5652],"./ion-card_5.entry.js":[388,388],"./ion-checkbox.entry.js":[9922,9922],"./ion-chip.entry.js":[657,657],"./ion-col_3.entry.js":[9824,9824],"./ion-datetime-button.entry.js":[9230,1435,9230],"./ion-datetime_3.entry.js":[4959,1435,8592,4959],"./ion-fab_3.entry.js":[5836,8592,5836],"./ion-img.entry.js":[1033,1033],"./ion-infinite-scroll_2.entry.js":[8034,8592,5817],"./ion-input.entry.js":[1217,1217],"./ion-item-option_3.entry.js":[2933,8592,4651],"./ion-item_8.entry.js":[4711,8592,4711],"./ion-loading.entry.js":[9434,8592,9434],"./ion-menu_3.entry.js":[8136,8592,8136],"./ion-modal.entry.js":[2349,8592,2349],"./ion-nav_2.entry.js":[5349,8592,5349],"./ion-picker-column-internal.entry.js":[7602,8592,7602],"./ion-picker-internal.entry.js":[9016,9016],"./ion-popover.entry.js":[3804,8592,3804],"./ion-progress-bar.entry.js":[4174,4174],"./ion-radio_2.entry.js":[4432,4432],"./ion-range.entry.js":[1709,8592,1709],"./ion-refresher_2.entry.js":[3326,8592,2175],"./ion-reorder_2.entry.js":[3583,8592,1186],"./ion-ripple-effect.entry.js":[9958,9958],"./ion-route_4.entry.js":[4330,4330],"./ion-searchbar.entry.js":[8628,8592,8628],"./ion-segment_2.entry.js":[9325,8592,9325],"./ion-select_3.entry.js":[2773,2773],"./ion-slide_2.entry.js":[1650,1650],"./ion-spinner.entry.js":[4908,8592,4908],"./ion-split-pane.entry.js":[9536,9536],"./ion-tab-bar_2.entry.js":[438,8592,438],"./ion-tab_2.entry.js":[1536,8592,1536],"./ion-text.entry.js":[4376,4376],"./ion-textarea.entry.js":[6560,6560],"./ion-toast.entry.js":[6120,8592,6120],"./ion-toggle.entry.js":[5168,8592,5168],"./ion-virtual-scroll.entry.js":[2289,2289]};function x(N){if(!w.o(o,N))return Promise.resolve().then(()=>{var W=new Error("Cannot find module '"+N+"'");throw W.code="MODULE_NOT_FOUND",W});var ge=o[N],R=ge[0];return Promise.all(ge.slice(1).map(w.e)).then(()=>w(R))}x.keys=()=>Object.keys(o),x.id=863,Qe.exports=x},655:(Qe,Fe,w)=>{"use strict";function R(Q,T,k,O){var Ae,te=arguments.length,ce=te<3?T:null===O?O=Object.getOwnPropertyDescriptor(T,k):O;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)ce=Reflect.decorate(Q,T,k,O);else for(var De=Q.length-1;De>=0;De--)(Ae=Q[De])&&(ce=(te<3?Ae(ce):te>3?Ae(T,k,ce):Ae(T,k))||ce);return te>3&&ce&&Object.defineProperty(T,k,ce),ce}function U(Q,T,k,O){return new(k||(k=Promise))(function(ce,Ae){function De(ne){try{de(O.next(ne))}catch(Ee){Ae(Ee)}}function ue(ne){try{de(O.throw(ne))}catch(Ee){Ae(Ee)}}function de(ne){ne.done?ce(ne.value):function te(ce){return ce instanceof k?ce:new k(function(Ae){Ae(ce)})}(ne.value).then(De,ue)}de((O=O.apply(Q,T||[])).next())})}function P(Q){return this instanceof P?(this.v=Q,this):new P(Q)}function K(Q,T,k){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var te,O=k.apply(Q,T||[]),ce=[];return te={},Ae("next"),Ae("throw"),Ae("return"),te[Symbol.asyncIterator]=function(){return this},te;function Ae(Ce){O[Ce]&&(te[Ce]=function(ze){return new Promise(function(dt,et){ce.push([Ce,ze,dt,et])>1||De(Ce,ze)})})}function De(Ce,ze){try{!function ue(Ce){Ce.value instanceof P?Promise.resolve(Ce.value.v).then(de,ne):Ee(ce[0][2],Ce)}(O[Ce](ze))}catch(dt){Ee(ce[0][3],dt)}}function de(Ce){De("next",Ce)}function ne(Ce){De("throw",Ce)}function Ee(Ce,ze){Ce(ze),ce.shift(),ce.length&&De(ce[0][0],ce[0][1])}}function ke(Q){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var k,T=Q[Symbol.asyncIterator];return T?T.call(Q):(Q=function Z(Q){var T="function"==typeof Symbol&&Symbol.iterator,k=T&&Q[T],O=0;if(k)return k.call(Q);if(Q&&"number"==typeof Q.length)return{next:function(){return Q&&O>=Q.length&&(Q=void 0),{value:Q&&Q[O++],done:!Q}}};throw new TypeError(T?"Object is not iterable.":"Symbol.iterator is not defined.")}(Q),k={},O("next"),O("throw"),O("return"),k[Symbol.asyncIterator]=function(){return this},k);function O(ce){k[ce]=Q[ce]&&function(Ae){return new Promise(function(De,ue){!function te(ce,Ae,De,ue){Promise.resolve(ue).then(function(de){ce({value:de,done:De})},Ae)}(De,ue,(Ae=Q[ce](Ae)).done,Ae.value)})}}}w.d(Fe,{FC:()=>K,KL:()=>ke,gn:()=>R,mG:()=>U,qq:()=>P})},6895:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Do:()=>ke,EM:()=>zr,HT:()=>R,JF:()=>hr,JJ:()=>Gn,K0:()=>M,Mx:()=>gr,O5:()=>q,OU:()=>Pr,Ov:()=>mr,PC:()=>st,S$:()=>P,V_:()=>Y,Ye:()=>Te,b0:()=>pe,bD:()=>yo,ez:()=>vo,mk:()=>$t,q:()=>N,sg:()=>Cn,tP:()=>Mt,uU:()=>ar,w_:()=>W});var o=w(8274);let x=null;function N(){return x}function R(v){x||(x=v)}class W{}const M=new o.OlP("DocumentToken");let U=(()=>{class v{historyGo(D){throw new Error("Not implemented")}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275prov=o.Yz7({token:v,factory:function(){return function _(){return(0,o.LFG)(G)}()},providedIn:"platform"}),v})();const Y=new o.OlP("Location Initialized");let G=(()=>{class v extends U{constructor(D){super(),this._doc=D,this._init()}_init(){this.location=window.location,this._history=window.history}getBaseHrefFromDOM(){return N().getBaseHref(this._doc)}onPopState(D){const H=N().getGlobalEventTarget(this._doc,"window");return H.addEventListener("popstate",D,!1),()=>H.removeEventListener("popstate",D)}onHashChange(D){const H=N().getGlobalEventTarget(this._doc,"window");return H.addEventListener("hashchange",D,!1),()=>H.removeEventListener("hashchange",D)}get href(){return this.location.href}get protocol(){return this.location.protocol}get hostname(){return this.location.hostname}get port(){return this.location.port}get pathname(){return this.location.pathname}get search(){return this.location.search}get hash(){return this.location.hash}set pathname(D){this.location.pathname=D}pushState(D,H,ae){Z()?this._history.pushState(D,H,ae):this.location.hash=ae}replaceState(D,H,ae){Z()?this._history.replaceState(D,H,ae):this.location.hash=ae}forward(){this._history.forward()}back(){this._history.back()}historyGo(D=0){this._history.go(D)}getState(){return this._history.state}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(M))},v.\u0275prov=o.Yz7({token:v,factory:function(){return function S(){return new G((0,o.LFG)(M))}()},providedIn:"platform"}),v})();function Z(){return!!window.history.pushState}function B(v,A){if(0==v.length)return A;if(0==A.length)return v;let D=0;return v.endsWith("/")&&D++,A.startsWith("/")&&D++,2==D?v+A.substring(1):1==D?v+A:v+"/"+A}function E(v){const A=v.match(/#|\?|$/),D=A&&A.index||v.length;return v.slice(0,D-("/"===v[D-1]?1:0))+v.slice(D)}function j(v){return v&&"?"!==v[0]?"?"+v:v}let P=(()=>{class v{historyGo(D){throw new Error("Not implemented")}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275prov=o.Yz7({token:v,factory:function(){return(0,o.f3M)(pe)},providedIn:"root"}),v})();const K=new o.OlP("appBaseHref");let pe=(()=>{class v extends P{constructor(D,H){super(),this._platformLocation=D,this._removeListenerFns=[],this._baseHref=H??this._platformLocation.getBaseHrefFromDOM()??(0,o.f3M)(M).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(D){this._removeListenerFns.push(this._platformLocation.onPopState(D),this._platformLocation.onHashChange(D))}getBaseHref(){return this._baseHref}prepareExternalUrl(D){return B(this._baseHref,D)}path(D=!1){const H=this._platformLocation.pathname+j(this._platformLocation.search),ae=this._platformLocation.hash;return ae&&D?`${H}${ae}`:H}pushState(D,H,ae,$e){const Xe=this.prepareExternalUrl(ae+j($e));this._platformLocation.pushState(D,H,Xe)}replaceState(D,H,ae,$e){const Xe=this.prepareExternalUrl(ae+j($e));this._platformLocation.replaceState(D,H,Xe)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(D=0){this._platformLocation.historyGo?.(D)}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(U),o.LFG(K,8))},v.\u0275prov=o.Yz7({token:v,factory:v.\u0275fac,providedIn:"root"}),v})(),ke=(()=>{class v extends P{constructor(D,H){super(),this._platformLocation=D,this._baseHref="",this._removeListenerFns=[],null!=H&&(this._baseHref=H)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(D){this._removeListenerFns.push(this._platformLocation.onPopState(D),this._platformLocation.onHashChange(D))}getBaseHref(){return this._baseHref}path(D=!1){let H=this._platformLocation.hash;return null==H&&(H="#"),H.length>0?H.substring(1):H}prepareExternalUrl(D){const H=B(this._baseHref,D);return H.length>0?"#"+H:H}pushState(D,H,ae,$e){let Xe=this.prepareExternalUrl(ae+j($e));0==Xe.length&&(Xe=this._platformLocation.pathname),this._platformLocation.pushState(D,H,Xe)}replaceState(D,H,ae,$e){let Xe=this.prepareExternalUrl(ae+j($e));0==Xe.length&&(Xe=this._platformLocation.pathname),this._platformLocation.replaceState(D,H,Xe)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(D=0){this._platformLocation.historyGo?.(D)}}return v.\u0275fac=function(D){return new(D||v)(o.LFG(U),o.LFG(K,8))},v.\u0275prov=o.Yz7({token:v,factory:v.\u0275fac}),v})(),Te=(()=>{class v{constructor(D){this._subject=new o.vpe,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=D;const H=this._locationStrategy.getBaseHref();this._baseHref=E(re(H)),this._locationStrategy.onPopState(ae=>{this._subject.emit({url:this.path(!0),pop:!0,state:ae.state,type:ae.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(D=!1){return this.normalize(this._locationStrategy.path(D))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(D,H=""){return this.path()==this.normalize(D+j(H))}normalize(D){return v.stripTrailingSlash(function Be(v,A){return v&&A.startsWith(v)?A.substring(v.length):A}(this._baseHref,re(D)))}prepareExternalUrl(D){return D&&"/"!==D[0]&&(D="/"+D),this._locationStrategy.prepareExternalUrl(D)}go(D,H="",ae=null){this._locationStrategy.pushState(ae,"",D,H),this._notifyUrlChangeListeners(this.prepareExternalUrl(D+j(H)),ae)}replaceState(D,H="",ae=null){this._locationStrategy.replaceState(ae,"",D,H),this._notifyUrlChangeListeners(this.prepareExternalUrl(D+j(H)),ae)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(D=0){this._locationStrategy.historyGo?.(D)}onUrlChange(D){return this._urlChangeListeners.push(D),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(H=>{this._notifyUrlChangeListeners(H.url,H.state)})),()=>{const H=this._urlChangeListeners.indexOf(D);this._urlChangeListeners.splice(H,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(D="",H){this._urlChangeListeners.forEach(ae=>ae(D,H))}subscribe(D,H,ae){return this._subject.subscribe({next:D,error:H,complete:ae})}}return v.normalizeQueryParams=j,v.joinWithSlash=B,v.stripTrailingSlash=E,v.\u0275fac=function(D){return new(D||v)(o.LFG(P))},v.\u0275prov=o.Yz7({token:v,factory:function(){return function ie(){return new Te((0,o.LFG)(P))}()},providedIn:"root"}),v})();function re(v){return v.replace(/\/index.html$/,"")}var be=(()=>((be=be||{})[be.Decimal=0]="Decimal",be[be.Percent=1]="Percent",be[be.Currency=2]="Currency",be[be.Scientific=3]="Scientific",be))(),Q=(()=>((Q=Q||{})[Q.Format=0]="Format",Q[Q.Standalone=1]="Standalone",Q))(),T=(()=>((T=T||{})[T.Narrow=0]="Narrow",T[T.Abbreviated=1]="Abbreviated",T[T.Wide=2]="Wide",T[T.Short=3]="Short",T))(),k=(()=>((k=k||{})[k.Short=0]="Short",k[k.Medium=1]="Medium",k[k.Long=2]="Long",k[k.Full=3]="Full",k))(),O=(()=>((O=O||{})[O.Decimal=0]="Decimal",O[O.Group=1]="Group",O[O.List=2]="List",O[O.PercentSign=3]="PercentSign",O[O.PlusSign=4]="PlusSign",O[O.MinusSign=5]="MinusSign",O[O.Exponential=6]="Exponential",O[O.SuperscriptingExponent=7]="SuperscriptingExponent",O[O.PerMille=8]="PerMille",O[O.Infinity=9]="Infinity",O[O.NaN=10]="NaN",O[O.TimeSeparator=11]="TimeSeparator",O[O.CurrencyDecimal=12]="CurrencyDecimal",O[O.CurrencyGroup=13]="CurrencyGroup",O))();function Ce(v,A){return it((0,o.cg1)(v)[o.wAp.DateFormat],A)}function ze(v,A){return it((0,o.cg1)(v)[o.wAp.TimeFormat],A)}function dt(v,A){return it((0,o.cg1)(v)[o.wAp.DateTimeFormat],A)}function et(v,A){const D=(0,o.cg1)(v),H=D[o.wAp.NumberSymbols][A];if(typeof H>"u"){if(A===O.CurrencyDecimal)return D[o.wAp.NumberSymbols][O.Decimal];if(A===O.CurrencyGroup)return D[o.wAp.NumberSymbols][O.Group]}return H}function Kt(v){if(!v[o.wAp.ExtraData])throw new Error(`Missing extra locale data for the locale "${v[o.wAp.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function it(v,A){for(let D=A;D>-1;D--)if(typeof v[D]<"u")return v[D];throw new Error("Locale data API: locale data undefined")}function Xt(v){const[A,D]=v.split(":");return{hours:+A,minutes:+D}}const Vn=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,en={},gt=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;var Yt=(()=>((Yt=Yt||{})[Yt.Short=0]="Short",Yt[Yt.ShortGMT=1]="ShortGMT",Yt[Yt.Long=2]="Long",Yt[Yt.Extended=3]="Extended",Yt))(),ht=(()=>((ht=ht||{})[ht.FullYear=0]="FullYear",ht[ht.Month=1]="Month",ht[ht.Date=2]="Date",ht[ht.Hours=3]="Hours",ht[ht.Minutes=4]="Minutes",ht[ht.Seconds=5]="Seconds",ht[ht.FractionalSeconds=6]="FractionalSeconds",ht[ht.Day=7]="Day",ht))(),nt=(()=>((nt=nt||{})[nt.DayPeriods=0]="DayPeriods",nt[nt.Days=1]="Days",nt[nt.Months=2]="Months",nt[nt.Eras=3]="Eras",nt))();function Et(v,A,D,H){let ae=function tn(v){if(mn(v))return v;if("number"==typeof v&&!isNaN(v))return new Date(v);if("string"==typeof v){if(v=v.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(v)){const[ae,$e=1,Xe=1]=v.split("-").map(lt=>+lt);return ut(ae,$e-1,Xe)}const D=parseFloat(v);if(!isNaN(v-D))return new Date(D);let H;if(H=v.match(Vn))return function Ln(v){const A=new Date(0);let D=0,H=0;const ae=v[8]?A.setUTCFullYear:A.setFullYear,$e=v[8]?A.setUTCHours:A.setHours;v[9]&&(D=Number(v[9]+v[10]),H=Number(v[9]+v[11])),ae.call(A,Number(v[1]),Number(v[2])-1,Number(v[3]));const Xe=Number(v[4]||0)-D,lt=Number(v[5]||0)-H,qt=Number(v[6]||0),Tt=Math.floor(1e3*parseFloat("0."+(v[7]||0)));return $e.call(A,Xe,lt,qt,Tt),A}(H)}const A=new Date(v);if(!mn(A))throw new Error(`Unable to convert "${v}" into a date`);return A}(v);A=Ct(D,A)||A;let lt,Xe=[];for(;A;){if(lt=gt.exec(A),!lt){Xe.push(A);break}{Xe=Xe.concat(lt.slice(1));const un=Xe.pop();if(!un)break;A=un}}let qt=ae.getTimezoneOffset();H&&(qt=vt(H,qt),ae=function _t(v,A,D){const H=D?-1:1,ae=v.getTimezoneOffset();return function Ht(v,A){return(v=new Date(v.getTime())).setMinutes(v.getMinutes()+A),v}(v,H*(vt(A,ae)-ae))}(ae,H,!0));let Tt="";return Xe.forEach(un=>{const Jt=function pt(v){if(Ye[v])return Ye[v];let A;switch(v){case"G":case"GG":case"GGG":A=zt(nt.Eras,T.Abbreviated);break;case"GGGG":A=zt(nt.Eras,T.Wide);break;case"GGGGG":A=zt(nt.Eras,T.Narrow);break;case"y":A=Nt(ht.FullYear,1,0,!1,!0);break;case"yy":A=Nt(ht.FullYear,2,0,!0,!0);break;case"yyy":A=Nt(ht.FullYear,3,0,!1,!0);break;case"yyyy":A=Nt(ht.FullYear,4,0,!1,!0);break;case"Y":A=He(1);break;case"YY":A=He(2,!0);break;case"YYY":A=He(3);break;case"YYYY":A=He(4);break;case"M":case"L":A=Nt(ht.Month,1,1);break;case"MM":case"LL":A=Nt(ht.Month,2,1);break;case"MMM":A=zt(nt.Months,T.Abbreviated);break;case"MMMM":A=zt(nt.Months,T.Wide);break;case"MMMMM":A=zt(nt.Months,T.Narrow);break;case"LLL":A=zt(nt.Months,T.Abbreviated,Q.Standalone);break;case"LLLL":A=zt(nt.Months,T.Wide,Q.Standalone);break;case"LLLLL":A=zt(nt.Months,T.Narrow,Q.Standalone);break;case"w":A=ye(1);break;case"ww":A=ye(2);break;case"W":A=ye(1,!0);break;case"d":A=Nt(ht.Date,1);break;case"dd":A=Nt(ht.Date,2);break;case"c":case"cc":A=Nt(ht.Day,1);break;case"ccc":A=zt(nt.Days,T.Abbreviated,Q.Standalone);break;case"cccc":A=zt(nt.Days,T.Wide,Q.Standalone);break;case"ccccc":A=zt(nt.Days,T.Narrow,Q.Standalone);break;case"cccccc":A=zt(nt.Days,T.Short,Q.Standalone);break;case"E":case"EE":case"EEE":A=zt(nt.Days,T.Abbreviated);break;case"EEEE":A=zt(nt.Days,T.Wide);break;case"EEEEE":A=zt(nt.Days,T.Narrow);break;case"EEEEEE":A=zt(nt.Days,T.Short);break;case"a":case"aa":case"aaa":A=zt(nt.DayPeriods,T.Abbreviated);break;case"aaaa":A=zt(nt.DayPeriods,T.Wide);break;case"aaaaa":A=zt(nt.DayPeriods,T.Narrow);break;case"b":case"bb":case"bbb":A=zt(nt.DayPeriods,T.Abbreviated,Q.Standalone,!0);break;case"bbbb":A=zt(nt.DayPeriods,T.Wide,Q.Standalone,!0);break;case"bbbbb":A=zt(nt.DayPeriods,T.Narrow,Q.Standalone,!0);break;case"B":case"BB":case"BBB":A=zt(nt.DayPeriods,T.Abbreviated,Q.Format,!0);break;case"BBBB":A=zt(nt.DayPeriods,T.Wide,Q.Format,!0);break;case"BBBBB":A=zt(nt.DayPeriods,T.Narrow,Q.Format,!0);break;case"h":A=Nt(ht.Hours,1,-12);break;case"hh":A=Nt(ht.Hours,2,-12);break;case"H":A=Nt(ht.Hours,1);break;case"HH":A=Nt(ht.Hours,2);break;case"m":A=Nt(ht.Minutes,1);break;case"mm":A=Nt(ht.Minutes,2);break;case"s":A=Nt(ht.Seconds,1);break;case"ss":A=Nt(ht.Seconds,2);break;case"S":A=Nt(ht.FractionalSeconds,1);break;case"SS":A=Nt(ht.FractionalSeconds,2);break;case"SSS":A=Nt(ht.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":A=jn(Yt.Short);break;case"ZZZZZ":A=jn(Yt.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":A=jn(Yt.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":A=jn(Yt.Long);break;default:return null}return Ye[v]=A,A}(un);Tt+=Jt?Jt(ae,D,qt):"''"===un?"'":un.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),Tt}function ut(v,A,D){const H=new Date(0);return H.setFullYear(v,A,D),H.setHours(0,0,0),H}function Ct(v,A){const D=function ce(v){return(0,o.cg1)(v)[o.wAp.LocaleId]}(v);if(en[D]=en[D]||{},en[D][A])return en[D][A];let H="";switch(A){case"shortDate":H=Ce(v,k.Short);break;case"mediumDate":H=Ce(v,k.Medium);break;case"longDate":H=Ce(v,k.Long);break;case"fullDate":H=Ce(v,k.Full);break;case"shortTime":H=ze(v,k.Short);break;case"mediumTime":H=ze(v,k.Medium);break;case"longTime":H=ze(v,k.Long);break;case"fullTime":H=ze(v,k.Full);break;case"short":const ae=Ct(v,"shortTime"),$e=Ct(v,"shortDate");H=qe(dt(v,k.Short),[ae,$e]);break;case"medium":const Xe=Ct(v,"mediumTime"),lt=Ct(v,"mediumDate");H=qe(dt(v,k.Medium),[Xe,lt]);break;case"long":const qt=Ct(v,"longTime"),Tt=Ct(v,"longDate");H=qe(dt(v,k.Long),[qt,Tt]);break;case"full":const un=Ct(v,"fullTime"),Jt=Ct(v,"fullDate");H=qe(dt(v,k.Full),[un,Jt])}return H&&(en[D][A]=H),H}function qe(v,A){return A&&(v=v.replace(/\{([^}]+)}/g,function(D,H){return null!=A&&H in A?A[H]:D})),v}function on(v,A,D="-",H,ae){let $e="";(v<0||ae&&v<=0)&&(ae?v=1-v:(v=-v,$e=D));let Xe=String(v);for(;Xe.length0||lt>-D)&&(lt+=D),v===ht.Hours)0===lt&&-12===D&&(lt=12);else if(v===ht.FractionalSeconds)return function gn(v,A){return on(v,3).substring(0,A)}(lt,A);const qt=et(Xe,O.MinusSign);return on(lt,A,qt,H,ae)}}function zt(v,A,D=Q.Format,H=!1){return function(ae,$e){return function Er(v,A,D,H,ae,$e){switch(D){case nt.Months:return function ue(v,A,D){const H=(0,o.cg1)(v),$e=it([H[o.wAp.MonthsFormat],H[o.wAp.MonthsStandalone]],A);return it($e,D)}(A,ae,H)[v.getMonth()];case nt.Days:return function De(v,A,D){const H=(0,o.cg1)(v),$e=it([H[o.wAp.DaysFormat],H[o.wAp.DaysStandalone]],A);return it($e,D)}(A,ae,H)[v.getDay()];case nt.DayPeriods:const Xe=v.getHours(),lt=v.getMinutes();if($e){const Tt=function pn(v){const A=(0,o.cg1)(v);return Kt(A),(A[o.wAp.ExtraData][2]||[]).map(H=>"string"==typeof H?Xt(H):[Xt(H[0]),Xt(H[1])])}(A),un=function Pt(v,A,D){const H=(0,o.cg1)(v);Kt(H);const $e=it([H[o.wAp.ExtraData][0],H[o.wAp.ExtraData][1]],A)||[];return it($e,D)||[]}(A,ae,H),Jt=Tt.findIndex(Yn=>{if(Array.isArray(Yn)){const[yn,Wn]=Yn,Eo=Xe>=yn.hours&<>=yn.minutes,pr=Xe0?Math.floor(ae/60):Math.ceil(ae/60);switch(v){case Yt.Short:return(ae>=0?"+":"")+on(Xe,2,$e)+on(Math.abs(ae%60),2,$e);case Yt.ShortGMT:return"GMT"+(ae>=0?"+":"")+on(Xe,1,$e);case Yt.Long:return"GMT"+(ae>=0?"+":"")+on(Xe,2,$e)+":"+on(Math.abs(ae%60),2,$e);case Yt.Extended:return 0===H?"Z":(ae>=0?"+":"")+on(Xe,2,$e)+":"+on(Math.abs(ae%60),2,$e);default:throw new Error(`Unknown zone width "${v}"`)}}}function se(v){return ut(v.getFullYear(),v.getMonth(),v.getDate()+(4-v.getDay()))}function ye(v,A=!1){return function(D,H){let ae;if(A){const $e=new Date(D.getFullYear(),D.getMonth(),1).getDay()-1,Xe=D.getDate();ae=1+Math.floor((Xe+$e)/7)}else{const $e=se(D),Xe=function xe(v){const A=ut(v,0,1).getDay();return ut(v,0,1+(A<=4?4:11)-A)}($e.getFullYear()),lt=$e.getTime()-Xe.getTime();ae=1+Math.round(lt/6048e5)}return on(ae,v,et(H,O.MinusSign))}}function He(v,A=!1){return function(D,H){return on(se(D).getFullYear(),v,et(H,O.MinusSign),A)}}const Ye={};function vt(v,A){v=v.replace(/:/g,"");const D=Date.parse("Jan 01, 1970 00:00:00 "+v)/6e4;return isNaN(D)?A:D}function mn(v){return v instanceof Date&&!isNaN(v.valueOf())}const ln=/^(\d+)?\.((\d+)(-(\d+))?)?$/;function xn(v){const A=parseInt(v);if(isNaN(A))throw new Error("Invalid integer literal when parsing "+v);return A}function gr(v,A){A=encodeURIComponent(A);for(const D of v.split(";")){const H=D.indexOf("="),[ae,$e]=-1==H?[D,""]:[D.slice(0,H),D.slice(H+1)];if(ae.trim()===A)return decodeURIComponent($e)}return null}let $t=(()=>{class v{constructor(D,H,ae,$e){this._iterableDiffers=D,this._keyValueDiffers=H,this._ngEl=ae,this._renderer=$e,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(D){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof D?D.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(D){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof D?D.split(/\s+/):D,this._rawClass&&((0,o.sIi)(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const D=this._iterableDiffer.diff(this._rawClass);D&&this._applyIterableChanges(D)}else if(this._keyValueDiffer){const D=this._keyValueDiffer.diff(this._rawClass);D&&this._applyKeyValueChanges(D)}}_applyKeyValueChanges(D){D.forEachAddedItem(H=>this._toggleClass(H.key,H.currentValue)),D.forEachChangedItem(H=>this._toggleClass(H.key,H.currentValue)),D.forEachRemovedItem(H=>{H.previousValue&&this._toggleClass(H.key,!1)})}_applyIterableChanges(D){D.forEachAddedItem(H=>{if("string"!=typeof H.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${(0,o.AaK)(H.item)}`);this._toggleClass(H.item,!0)}),D.forEachRemovedItem(H=>this._toggleClass(H.item,!1))}_applyClasses(D){D&&(Array.isArray(D)||D instanceof Set?D.forEach(H=>this._toggleClass(H,!0)):Object.keys(D).forEach(H=>this._toggleClass(H,!!D[H])))}_removeClasses(D){D&&(Array.isArray(D)||D instanceof Set?D.forEach(H=>this._toggleClass(H,!1)):Object.keys(D).forEach(H=>this._toggleClass(H,!1)))}_toggleClass(D,H){(D=D.trim())&&D.split(/\s+/g).forEach(ae=>{H?this._renderer.addClass(this._ngEl.nativeElement,ae):this._renderer.removeClass(this._ngEl.nativeElement,ae)})}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.ZZ4),o.Y36(o.aQg),o.Y36(o.SBq),o.Y36(o.Qsj))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0}),v})();class On{constructor(A,D,H,ae){this.$implicit=A,this.ngForOf=D,this.index=H,this.count=ae}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Cn=(()=>{class v{constructor(D,H,ae){this._viewContainer=D,this._template=H,this._differs=ae,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(D){this._ngForOf=D,this._ngForOfDirty=!0}set ngForTrackBy(D){this._trackByFn=D}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(D){D&&(this._template=D)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const D=this._ngForOf;!this._differ&&D&&(this._differ=this._differs.find(D).create(this.ngForTrackBy))}if(this._differ){const D=this._differ.diff(this._ngForOf);D&&this._applyChanges(D)}}_applyChanges(D){const H=this._viewContainer;D.forEachOperation((ae,$e,Xe)=>{if(null==ae.previousIndex)H.createEmbeddedView(this._template,new On(ae.item,this._ngForOf,-1,-1),null===Xe?void 0:Xe);else if(null==Xe)H.remove(null===$e?void 0:$e);else if(null!==$e){const lt=H.get($e);H.move(lt,Xe),rt(lt,ae)}});for(let ae=0,$e=H.length;ae<$e;ae++){const lt=H.get(ae).context;lt.index=ae,lt.count=$e,lt.ngForOf=this._ngForOf}D.forEachIdentityChange(ae=>{rt(H.get(ae.currentIndex),ae)})}static ngTemplateContextGuard(D,H){return!0}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b),o.Y36(o.Rgc),o.Y36(o.ZZ4))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0}),v})();function rt(v,A){v.context.$implicit=A.item}let q=(()=>{class v{constructor(D,H){this._viewContainer=D,this._context=new he,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=H}set ngIf(D){this._context.$implicit=this._context.ngIf=D,this._updateView()}set ngIfThen(D){we("ngIfThen",D),this._thenTemplateRef=D,this._thenViewRef=null,this._updateView()}set ngIfElse(D){we("ngIfElse",D),this._elseTemplateRef=D,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(D,H){return!0}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b),o.Y36(o.Rgc))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0}),v})();class he{constructor(){this.$implicit=null,this.ngIf=null}}function we(v,A){if(A&&!A.createEmbeddedView)throw new Error(`${v} must be a TemplateRef, but received '${(0,o.AaK)(A)}'.`)}let st=(()=>{class v{constructor(D,H,ae){this._ngEl=D,this._differs=H,this._renderer=ae,this._ngStyle=null,this._differ=null}set ngStyle(D){this._ngStyle=D,!this._differ&&D&&(this._differ=this._differs.find(D).create())}ngDoCheck(){if(this._differ){const D=this._differ.diff(this._ngStyle);D&&this._applyChanges(D)}}_setStyle(D,H){const[ae,$e]=D.split("."),Xe=-1===ae.indexOf("-")?void 0:o.JOm.DashCase;null!=H?this._renderer.setStyle(this._ngEl.nativeElement,ae,$e?`${H}${$e}`:H,Xe):this._renderer.removeStyle(this._ngEl.nativeElement,ae,Xe)}_applyChanges(D){D.forEachRemovedItem(H=>this._setStyle(H.key,null)),D.forEachAddedItem(H=>this._setStyle(H.key,H.currentValue)),D.forEachChangedItem(H=>this._setStyle(H.key,H.currentValue))}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.SBq),o.Y36(o.aQg),o.Y36(o.Qsj))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0}),v})(),Mt=(()=>{class v{constructor(D){this._viewContainerRef=D,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null,this.ngTemplateOutletInjector=null}ngOnChanges(D){if(D.ngTemplateOutlet||D.ngTemplateOutletInjector){const H=this._viewContainerRef;if(this._viewRef&&H.remove(H.indexOf(this._viewRef)),this.ngTemplateOutlet){const{ngTemplateOutlet:ae,ngTemplateOutletContext:$e,ngTemplateOutletInjector:Xe}=this;this._viewRef=H.createEmbeddedView(ae,$e,Xe?{injector:Xe}:void 0)}else this._viewRef=null}else this._viewRef&&D.ngTemplateOutletContext&&this.ngTemplateOutletContext&&(this._viewRef.context=this.ngTemplateOutletContext)}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.s_b))},v.\u0275dir=o.lG2({type:v,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},standalone:!0,features:[o.TTD]}),v})();function Bt(v,A){return new o.vHH(2100,!1)}class An{createSubscription(A,D){return A.subscribe({next:D,error:H=>{throw H}})}dispose(A){A.unsubscribe()}}class Rn{createSubscription(A,D){return A.then(D,H=>{throw H})}dispose(A){}}const Pn=new Rn,ur=new An;let mr=(()=>{class v{constructor(D){this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null,this._ref=D}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(D){return this._obj?D!==this._obj?(this._dispose(),this.transform(D)):this._latestValue:(D&&this._subscribe(D),this._latestValue)}_subscribe(D){this._obj=D,this._strategy=this._selectStrategy(D),this._subscription=this._strategy.createSubscription(D,H=>this._updateLatestValue(D,H))}_selectStrategy(D){if((0,o.QGY)(D))return Pn;if((0,o.F4k)(D))return ur;throw Bt()}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(D,H){D===this._obj&&(this._latestValue=H,this._ref.markForCheck())}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.sBO,16))},v.\u0275pipe=o.Yjl({name:"async",type:v,pure:!1,standalone:!0}),v})();const xr=new o.OlP("DATE_PIPE_DEFAULT_TIMEZONE"),Or=new o.OlP("DATE_PIPE_DEFAULT_OPTIONS");let ar=(()=>{class v{constructor(D,H,ae){this.locale=D,this.defaultTimezone=H,this.defaultOptions=ae}transform(D,H,ae,$e){if(null==D||""===D||D!=D)return null;try{return Et(D,H??this.defaultOptions?.dateFormat??"mediumDate",$e||this.locale,ae??this.defaultOptions?.timezone??this.defaultTimezone??void 0)}catch(Xe){throw Bt()}}}return v.\u0275fac=function(D){return new(D||v)(o.Y36(o.soG,16),o.Y36(xr,24),o.Y36(Or,24))},v.\u0275pipe=o.Yjl({name:"date",type:v,pure:!0,standalone:!0}),v})(),Gn=(()=>{class v{constructor(D){this._locale=D}transform(D,H,ae){if(!function vr(v){return!(null==v||""===v||v!=v)}(D))return null;ae=ae||this._locale;try{return function dn(v,A,D){return function cn(v,A,D,H,ae,$e,Xe=!1){let lt="",qt=!1;if(isFinite(v)){let Tt=function $n(v){let H,ae,$e,Xe,lt,A=Math.abs(v)+"",D=0;for((ae=A.indexOf("."))>-1&&(A=A.replace(".","")),($e=A.search(/e/i))>0?(ae<0&&(ae=$e),ae+=+A.slice($e+1),A=A.substring(0,$e)):ae<0&&(ae=A.length),$e=0;"0"===A.charAt($e);$e++);if($e===(lt=A.length))H=[0],ae=1;else{for(lt--;"0"===A.charAt(lt);)lt--;for(ae-=$e,H=[],Xe=0;$e<=lt;$e++,Xe++)H[Xe]=Number(A.charAt($e))}return ae>22&&(H=H.splice(0,21),D=ae-1,ae=1),{digits:H,exponent:D,integerLen:ae}}(v);Xe&&(Tt=function sr(v){if(0===v.digits[0])return v;const A=v.digits.length-v.integerLen;return v.exponent?v.exponent+=2:(0===A?v.digits.push(0,0):1===A&&v.digits.push(0),v.integerLen+=2),v}(Tt));let un=A.minInt,Jt=A.minFrac,Yn=A.maxFrac;if($e){const Mr=$e.match(ln);if(null===Mr)throw new Error(`${$e} is not a valid digit info`);const Lo=Mr[1],di=Mr[3],Ai=Mr[5];null!=Lo&&(un=xn(Lo)),null!=di&&(Jt=xn(di)),null!=Ai?Yn=xn(Ai):null!=di&&Jt>Yn&&(Yn=Jt)}!function Tn(v,A,D){if(A>D)throw new Error(`The minimum number of digits after fraction (${A}) is higher than the maximum (${D}).`);let H=v.digits,ae=H.length-v.integerLen;const $e=Math.min(Math.max(A,ae),D);let Xe=$e+v.integerLen,lt=H[Xe];if(Xe>0){H.splice(Math.max(v.integerLen,Xe));for(let Jt=Xe;Jt=5)if(Xe-1<0){for(let Jt=0;Jt>Xe;Jt--)H.unshift(0),v.integerLen++;H.unshift(1),v.integerLen++}else H[Xe-1]++;for(;ae=Tt?Wn.pop():qt=!1),Yn>=10?1:0},0);un&&(H.unshift(un),v.integerLen++)}(Tt,Jt,Yn);let yn=Tt.digits,Wn=Tt.integerLen;const Eo=Tt.exponent;let pr=[];for(qt=yn.every(Mr=>!Mr);Wn0?pr=yn.splice(Wn,yn.length):(pr=yn,yn=[0]);const Vr=[];for(yn.length>=A.lgSize&&Vr.unshift(yn.splice(-A.lgSize,yn.length).join(""));yn.length>A.gSize;)Vr.unshift(yn.splice(-A.gSize,yn.length).join(""));yn.length&&Vr.unshift(yn.join("")),lt=Vr.join(et(D,H)),pr.length&&(lt+=et(D,ae)+pr.join("")),Eo&&(lt+=et(D,O.Exponential)+"+"+Eo)}else lt=et(D,O.Infinity);return lt=v<0&&!qt?A.negPre+lt+A.negSuf:A.posPre+lt+A.posSuf,lt}(v,function er(v,A="-"){const D={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},H=v.split(";"),ae=H[0],$e=H[1],Xe=-1!==ae.indexOf(".")?ae.split("."):[ae.substring(0,ae.lastIndexOf("0")+1),ae.substring(ae.lastIndexOf("0")+1)],lt=Xe[0],qt=Xe[1]||"";D.posPre=lt.substring(0,lt.indexOf("#"));for(let un=0;un{class v{transform(D,H,ae){if(null==D)return null;if(!this.supports(D))throw Bt();return D.slice(H,ae)}supports(D){return"string"==typeof D||Array.isArray(D)}}return v.\u0275fac=function(D){return new(D||v)},v.\u0275pipe=o.Yjl({name:"slice",type:v,pure:!1,standalone:!0}),v})(),vo=(()=>{class v{}return v.\u0275fac=function(D){return new(D||v)},v.\u0275mod=o.oAB({type:v}),v.\u0275inj=o.cJS({}),v})();const yo="browser";let zr=(()=>{class v{}return v.\u0275prov=(0,o.Yz7)({token:v,providedIn:"root",factory:()=>new Do((0,o.LFG)(M),window)}),v})();class Do{constructor(A,D){this.document=A,this.window=D,this.offset=()=>[0,0]}setOffset(A){this.offset=Array.isArray(A)?()=>A:A}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(A){this.supportsScrolling()&&this.window.scrollTo(A[0],A[1])}scrollToAnchor(A){if(!this.supportsScrolling())return;const D=function Yr(v,A){const D=v.getElementById(A)||v.getElementsByName(A)[0];if(D)return D;if("function"==typeof v.createTreeWalker&&v.body&&(v.body.createShadowRoot||v.body.attachShadow)){const H=v.createTreeWalker(v.body,NodeFilter.SHOW_ELEMENT);let ae=H.currentNode;for(;ae;){const $e=ae.shadowRoot;if($e){const Xe=$e.getElementById(A)||$e.querySelector(`[name="${A}"]`);if(Xe)return Xe}ae=H.nextNode()}}return null}(this.document,A);D&&(this.scrollToElement(D),D.focus())}setHistoryScrollRestoration(A){if(this.supportScrollRestoration()){const D=this.window.history;D&&D.scrollRestoration&&(D.scrollRestoration=A)}}scrollToElement(A){const D=A.getBoundingClientRect(),H=D.left+this.window.pageXOffset,ae=D.top+this.window.pageYOffset,$e=this.offset();this.window.scrollTo(H-$e[0],ae-$e[1])}supportScrollRestoration(){try{if(!this.supportsScrolling())return!1;const A=Gr(this.window.history)||Gr(Object.getPrototypeOf(this.window.history));return!(!A||!A.writable&&!A.set)}catch{return!1}}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}function Gr(v){return Object.getOwnPropertyDescriptor(v,"scrollRestoration")}class hr{}},529:(Qe,Fe,w)=>{"use strict";w.d(Fe,{JF:()=>jn,TP:()=>de,WM:()=>Y,eN:()=>ce});var o=w(6895),x=w(8274),N=w(9646),ge=w(9751),R=w(4351),W=w(9300),M=w(4004);class U{}class _{}class Y{constructor(se){this.normalizedNames=new Map,this.lazyUpdate=null,se?this.lazyInit="string"==typeof se?()=>{this.headers=new Map,se.split("\n").forEach(ye=>{const He=ye.indexOf(":");if(He>0){const Ye=ye.slice(0,He),pt=Ye.toLowerCase(),vt=ye.slice(He+1).trim();this.maybeSetNormalizedName(Ye,pt),this.headers.has(pt)?this.headers.get(pt).push(vt):this.headers.set(pt,[vt])}})}:()=>{this.headers=new Map,Object.keys(se).forEach(ye=>{let He=se[ye];const Ye=ye.toLowerCase();"string"==typeof He&&(He=[He]),He.length>0&&(this.headers.set(Ye,He),this.maybeSetNormalizedName(ye,Ye))})}:this.headers=new Map}has(se){return this.init(),this.headers.has(se.toLowerCase())}get(se){this.init();const ye=this.headers.get(se.toLowerCase());return ye&&ye.length>0?ye[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(se){return this.init(),this.headers.get(se.toLowerCase())||null}append(se,ye){return this.clone({name:se,value:ye,op:"a"})}set(se,ye){return this.clone({name:se,value:ye,op:"s"})}delete(se,ye){return this.clone({name:se,value:ye,op:"d"})}maybeSetNormalizedName(se,ye){this.normalizedNames.has(ye)||this.normalizedNames.set(ye,se)}init(){this.lazyInit&&(this.lazyInit instanceof Y?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(se=>this.applyUpdate(se)),this.lazyUpdate=null))}copyFrom(se){se.init(),Array.from(se.headers.keys()).forEach(ye=>{this.headers.set(ye,se.headers.get(ye)),this.normalizedNames.set(ye,se.normalizedNames.get(ye))})}clone(se){const ye=new Y;return ye.lazyInit=this.lazyInit&&this.lazyInit instanceof Y?this.lazyInit:this,ye.lazyUpdate=(this.lazyUpdate||[]).concat([se]),ye}applyUpdate(se){const ye=se.name.toLowerCase();switch(se.op){case"a":case"s":let He=se.value;if("string"==typeof He&&(He=[He]),0===He.length)return;this.maybeSetNormalizedName(se.name,ye);const Ye=("a"===se.op?this.headers.get(ye):void 0)||[];Ye.push(...He),this.headers.set(ye,Ye);break;case"d":const pt=se.value;if(pt){let vt=this.headers.get(ye);if(!vt)return;vt=vt.filter(Ht=>-1===pt.indexOf(Ht)),0===vt.length?(this.headers.delete(ye),this.normalizedNames.delete(ye)):this.headers.set(ye,vt)}else this.headers.delete(ye),this.normalizedNames.delete(ye)}}forEach(se){this.init(),Array.from(this.normalizedNames.keys()).forEach(ye=>se(this.normalizedNames.get(ye),this.headers.get(ye)))}}class Z{encodeKey(se){return j(se)}encodeValue(se){return j(se)}decodeKey(se){return decodeURIComponent(se)}decodeValue(se){return decodeURIComponent(se)}}const B=/%(\d[a-f0-9])/gi,E={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function j(xe){return encodeURIComponent(xe).replace(B,(se,ye)=>E[ye]??se)}function P(xe){return`${xe}`}class K{constructor(se={}){if(this.updates=null,this.cloneFrom=null,this.encoder=se.encoder||new Z,se.fromString){if(se.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function S(xe,se){const ye=new Map;return xe.length>0&&xe.replace(/^\?/,"").split("&").forEach(Ye=>{const pt=Ye.indexOf("="),[vt,Ht]=-1==pt?[se.decodeKey(Ye),""]:[se.decodeKey(Ye.slice(0,pt)),se.decodeValue(Ye.slice(pt+1))],_t=ye.get(vt)||[];_t.push(Ht),ye.set(vt,_t)}),ye}(se.fromString,this.encoder)}else se.fromObject?(this.map=new Map,Object.keys(se.fromObject).forEach(ye=>{const He=se.fromObject[ye],Ye=Array.isArray(He)?He.map(P):[P(He)];this.map.set(ye,Ye)})):this.map=null}has(se){return this.init(),this.map.has(se)}get(se){this.init();const ye=this.map.get(se);return ye?ye[0]:null}getAll(se){return this.init(),this.map.get(se)||null}keys(){return this.init(),Array.from(this.map.keys())}append(se,ye){return this.clone({param:se,value:ye,op:"a"})}appendAll(se){const ye=[];return Object.keys(se).forEach(He=>{const Ye=se[He];Array.isArray(Ye)?Ye.forEach(pt=>{ye.push({param:He,value:pt,op:"a"})}):ye.push({param:He,value:Ye,op:"a"})}),this.clone(ye)}set(se,ye){return this.clone({param:se,value:ye,op:"s"})}delete(se,ye){return this.clone({param:se,value:ye,op:"d"})}toString(){return this.init(),this.keys().map(se=>{const ye=this.encoder.encodeKey(se);return this.map.get(se).map(He=>ye+"="+this.encoder.encodeValue(He)).join("&")}).filter(se=>""!==se).join("&")}clone(se){const ye=new K({encoder:this.encoder});return ye.cloneFrom=this.cloneFrom||this,ye.updates=(this.updates||[]).concat(se),ye}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(se=>this.map.set(se,this.cloneFrom.map.get(se))),this.updates.forEach(se=>{switch(se.op){case"a":case"s":const ye=("a"===se.op?this.map.get(se.param):void 0)||[];ye.push(P(se.value)),this.map.set(se.param,ye);break;case"d":if(void 0===se.value){this.map.delete(se.param);break}{let He=this.map.get(se.param)||[];const Ye=He.indexOf(P(se.value));-1!==Ye&&He.splice(Ye,1),He.length>0?this.map.set(se.param,He):this.map.delete(se.param)}}}),this.cloneFrom=this.updates=null)}}class ke{constructor(){this.map=new Map}set(se,ye){return this.map.set(se,ye),this}get(se){return this.map.has(se)||this.map.set(se,se.defaultValue()),this.map.get(se)}delete(se){return this.map.delete(se),this}has(se){return this.map.has(se)}keys(){return this.map.keys()}}function ie(xe){return typeof ArrayBuffer<"u"&&xe instanceof ArrayBuffer}function Be(xe){return typeof Blob<"u"&&xe instanceof Blob}function re(xe){return typeof FormData<"u"&&xe instanceof FormData}class be{constructor(se,ye,He,Ye){let pt;if(this.url=ye,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=se.toUpperCase(),function Te(xe){switch(xe){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||Ye?(this.body=void 0!==He?He:null,pt=Ye):pt=He,pt&&(this.reportProgress=!!pt.reportProgress,this.withCredentials=!!pt.withCredentials,pt.responseType&&(this.responseType=pt.responseType),pt.headers&&(this.headers=pt.headers),pt.context&&(this.context=pt.context),pt.params&&(this.params=pt.params)),this.headers||(this.headers=new Y),this.context||(this.context=new ke),this.params){const vt=this.params.toString();if(0===vt.length)this.urlWithParams=ye;else{const Ht=ye.indexOf("?");this.urlWithParams=ye+(-1===Ht?"?":Htmn.set(ln,se.setHeaders[ln]),_t)),se.setParams&&(tn=Object.keys(se.setParams).reduce((mn,ln)=>mn.set(ln,se.setParams[ln]),tn)),new be(ye,He,pt,{params:tn,headers:_t,context:Ln,reportProgress:Ht,responseType:Ye,withCredentials:vt})}}var Ne=(()=>((Ne=Ne||{})[Ne.Sent=0]="Sent",Ne[Ne.UploadProgress=1]="UploadProgress",Ne[Ne.ResponseHeader=2]="ResponseHeader",Ne[Ne.DownloadProgress=3]="DownloadProgress",Ne[Ne.Response=4]="Response",Ne[Ne.User=5]="User",Ne))();class Q{constructor(se,ye=200,He="OK"){this.headers=se.headers||new Y,this.status=void 0!==se.status?se.status:ye,this.statusText=se.statusText||He,this.url=se.url||null,this.ok=this.status>=200&&this.status<300}}class T extends Q{constructor(se={}){super(se),this.type=Ne.ResponseHeader}clone(se={}){return new T({headers:se.headers||this.headers,status:void 0!==se.status?se.status:this.status,statusText:se.statusText||this.statusText,url:se.url||this.url||void 0})}}class k extends Q{constructor(se={}){super(se),this.type=Ne.Response,this.body=void 0!==se.body?se.body:null}clone(se={}){return new k({body:void 0!==se.body?se.body:this.body,headers:se.headers||this.headers,status:void 0!==se.status?se.status:this.status,statusText:se.statusText||this.statusText,url:se.url||this.url||void 0})}}class O extends Q{constructor(se){super(se,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${se.url||"(unknown url)"}`:`Http failure response for ${se.url||"(unknown url)"}: ${se.status} ${se.statusText}`,this.error=se.error||null}}function te(xe,se){return{body:se,headers:xe.headers,context:xe.context,observe:xe.observe,params:xe.params,reportProgress:xe.reportProgress,responseType:xe.responseType,withCredentials:xe.withCredentials}}let ce=(()=>{class xe{constructor(ye){this.handler=ye}request(ye,He,Ye={}){let pt;if(ye instanceof be)pt=ye;else{let _t,tn;_t=Ye.headers instanceof Y?Ye.headers:new Y(Ye.headers),Ye.params&&(tn=Ye.params instanceof K?Ye.params:new K({fromObject:Ye.params})),pt=new be(ye,He,void 0!==Ye.body?Ye.body:null,{headers:_t,context:Ye.context,params:tn,reportProgress:Ye.reportProgress,responseType:Ye.responseType||"json",withCredentials:Ye.withCredentials})}const vt=(0,N.of)(pt).pipe((0,R.b)(_t=>this.handler.handle(_t)));if(ye instanceof be||"events"===Ye.observe)return vt;const Ht=vt.pipe((0,W.h)(_t=>_t instanceof k));switch(Ye.observe||"body"){case"body":switch(pt.responseType){case"arraybuffer":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&!(_t.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return _t.body}));case"blob":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&!(_t.body instanceof Blob))throw new Error("Response is not a Blob.");return _t.body}));case"text":return Ht.pipe((0,M.U)(_t=>{if(null!==_t.body&&"string"!=typeof _t.body)throw new Error("Response is not a string.");return _t.body}));default:return Ht.pipe((0,M.U)(_t=>_t.body))}case"response":return Ht;default:throw new Error(`Unreachable: unhandled observe type ${Ye.observe}}`)}}delete(ye,He={}){return this.request("DELETE",ye,He)}get(ye,He={}){return this.request("GET",ye,He)}head(ye,He={}){return this.request("HEAD",ye,He)}jsonp(ye,He){return this.request("JSONP",ye,{params:(new K).append(He,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(ye,He={}){return this.request("OPTIONS",ye,He)}patch(ye,He,Ye={}){return this.request("PATCH",ye,te(Ye,He))}post(ye,He,Ye={}){return this.request("POST",ye,te(Ye,He))}put(ye,He,Ye={}){return this.request("PUT",ye,te(Ye,He))}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(U))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();function Ae(xe,se){return se(xe)}function De(xe,se){return(ye,He)=>se.intercept(ye,{handle:Ye=>xe(Ye,He)})}const de=new x.OlP("HTTP_INTERCEPTORS"),ne=new x.OlP("HTTP_INTERCEPTOR_FNS");function Ee(){let xe=null;return(se,ye)=>(null===xe&&(xe=((0,x.f3M)(de,{optional:!0})??[]).reduceRight(De,Ae)),xe(se,ye))}let Ce=(()=>{class xe extends U{constructor(ye,He){super(),this.backend=ye,this.injector=He,this.chain=null}handle(ye){if(null===this.chain){const He=Array.from(new Set(this.injector.get(ne)));this.chain=He.reduceRight((Ye,pt)=>function ue(xe,se,ye){return(He,Ye)=>ye.runInContext(()=>se(He,pt=>xe(pt,Ye)))}(Ye,pt,this.injector),Ae)}return this.chain(ye,He=>this.backend.handle(He))}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(_),x.LFG(x.lqb))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();const Pt=/^\)\]\}',?\n/;let it=(()=>{class xe{constructor(ye){this.xhrFactory=ye}handle(ye){if("JSONP"===ye.method)throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");return new ge.y(He=>{const Ye=this.xhrFactory.build();if(Ye.open(ye.method,ye.urlWithParams),ye.withCredentials&&(Ye.withCredentials=!0),ye.headers.forEach((Ft,_e)=>Ye.setRequestHeader(Ft,_e.join(","))),ye.headers.has("Accept")||Ye.setRequestHeader("Accept","application/json, text/plain, */*"),!ye.headers.has("Content-Type")){const Ft=ye.detectContentTypeHeader();null!==Ft&&Ye.setRequestHeader("Content-Type",Ft)}if(ye.responseType){const Ft=ye.responseType.toLowerCase();Ye.responseType="json"!==Ft?Ft:"text"}const pt=ye.serializeBody();let vt=null;const Ht=()=>{if(null!==vt)return vt;const Ft=Ye.statusText||"OK",_e=new Y(Ye.getAllResponseHeaders()),fe=function Ut(xe){return"responseURL"in xe&&xe.responseURL?xe.responseURL:/^X-Request-URL:/m.test(xe.getAllResponseHeaders())?xe.getResponseHeader("X-Request-URL"):null}(Ye)||ye.url;return vt=new T({headers:_e,status:Ye.status,statusText:Ft,url:fe}),vt},_t=()=>{let{headers:Ft,status:_e,statusText:fe,url:ee}=Ht(),Se=null;204!==_e&&(Se=typeof Ye.response>"u"?Ye.responseText:Ye.response),0===_e&&(_e=Se?200:0);let Le=_e>=200&&_e<300;if("json"===ye.responseType&&"string"==typeof Se){const yt=Se;Se=Se.replace(Pt,"");try{Se=""!==Se?JSON.parse(Se):null}catch(It){Se=yt,Le&&(Le=!1,Se={error:It,text:Se})}}Le?(He.next(new k({body:Se,headers:Ft,status:_e,statusText:fe,url:ee||void 0})),He.complete()):He.error(new O({error:Se,headers:Ft,status:_e,statusText:fe,url:ee||void 0}))},tn=Ft=>{const{url:_e}=Ht(),fe=new O({error:Ft,status:Ye.status||0,statusText:Ye.statusText||"Unknown Error",url:_e||void 0});He.error(fe)};let Ln=!1;const mn=Ft=>{Ln||(He.next(Ht()),Ln=!0);let _e={type:Ne.DownloadProgress,loaded:Ft.loaded};Ft.lengthComputable&&(_e.total=Ft.total),"text"===ye.responseType&&!!Ye.responseText&&(_e.partialText=Ye.responseText),He.next(_e)},ln=Ft=>{let _e={type:Ne.UploadProgress,loaded:Ft.loaded};Ft.lengthComputable&&(_e.total=Ft.total),He.next(_e)};return Ye.addEventListener("load",_t),Ye.addEventListener("error",tn),Ye.addEventListener("timeout",tn),Ye.addEventListener("abort",tn),ye.reportProgress&&(Ye.addEventListener("progress",mn),null!==pt&&Ye.upload&&Ye.upload.addEventListener("progress",ln)),Ye.send(pt),He.next({type:Ne.Sent}),()=>{Ye.removeEventListener("error",tn),Ye.removeEventListener("abort",tn),Ye.removeEventListener("load",_t),Ye.removeEventListener("timeout",tn),ye.reportProgress&&(Ye.removeEventListener("progress",mn),null!==pt&&Ye.upload&&Ye.upload.removeEventListener("progress",ln)),Ye.readyState!==Ye.DONE&&Ye.abort()}})}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(o.JF))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();const Xt=new x.OlP("XSRF_ENABLED"),kt="XSRF-TOKEN",Vt=new x.OlP("XSRF_COOKIE_NAME",{providedIn:"root",factory:()=>kt}),rn="X-XSRF-TOKEN",Vn=new x.OlP("XSRF_HEADER_NAME",{providedIn:"root",factory:()=>rn});class en{}let gt=(()=>{class xe{constructor(ye,He,Ye){this.doc=ye,this.platform=He,this.cookieName=Ye,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const ye=this.doc.cookie||"";return ye!==this.lastCookieString&&(this.parseCount++,this.lastToken=(0,o.Mx)(ye,this.cookieName),this.lastCookieString=ye),this.lastToken}}return xe.\u0275fac=function(ye){return new(ye||xe)(x.LFG(o.K0),x.LFG(x.Lbi),x.LFG(Vt))},xe.\u0275prov=x.Yz7({token:xe,factory:xe.\u0275fac}),xe})();function Yt(xe,se){const ye=xe.url.toLowerCase();if(!(0,x.f3M)(Xt)||"GET"===xe.method||"HEAD"===xe.method||ye.startsWith("http://")||ye.startsWith("https://"))return se(xe);const He=(0,x.f3M)(en).getToken(),Ye=(0,x.f3M)(Vn);return null!=He&&!xe.headers.has(Ye)&&(xe=xe.clone({headers:xe.headers.set(Ye,He)})),se(xe)}var nt=(()=>((nt=nt||{})[nt.Interceptors=0]="Interceptors",nt[nt.LegacyInterceptors=1]="LegacyInterceptors",nt[nt.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",nt[nt.NoXsrfProtection=3]="NoXsrfProtection",nt[nt.JsonpSupport=4]="JsonpSupport",nt[nt.RequestsMadeViaParent=5]="RequestsMadeViaParent",nt))();function Et(xe,se){return{\u0275kind:xe,\u0275providers:se}}function ut(...xe){const se=[ce,it,Ce,{provide:U,useExisting:Ce},{provide:_,useExisting:it},{provide:ne,useValue:Yt,multi:!0},{provide:Xt,useValue:!0},{provide:en,useClass:gt}];for(const ye of xe)se.push(...ye.\u0275providers);return(0,x.MR2)(se)}const qe=new x.OlP("LEGACY_INTERCEPTOR_FN");function gn({cookieName:xe,headerName:se}){const ye=[];return void 0!==xe&&ye.push({provide:Vt,useValue:xe}),void 0!==se&&ye.push({provide:Vn,useValue:se}),Et(nt.CustomXsrfConfiguration,ye)}let jn=(()=>{class xe{}return xe.\u0275fac=function(ye){return new(ye||xe)},xe.\u0275mod=x.oAB({type:xe}),xe.\u0275inj=x.cJS({providers:[ut(Et(nt.LegacyInterceptors,[{provide:qe,useFactory:Ee},{provide:ne,useExisting:qe,multi:!0}]),gn({cookieName:kt,headerName:rn}))]}),xe})()},8274:(Qe,Fe,w)=>{"use strict";w.d(Fe,{tb:()=>qg,AFp:()=>Wg,ip1:()=>Yg,CZH:()=>ll,hGG:()=>T_,z2F:()=>ul,sBO:()=>h_,Sil:()=>KC,_Vd:()=>Zs,EJc:()=>YC,Xts:()=>Jl,SBq:()=>Js,lqb:()=>Ni,qLn:()=>Qs,vpe:()=>zo,XFs:()=>gt,OlP:()=>_n,zs3:()=>Li,ZZ4:()=>Nu,aQg:()=>Lu,soG:()=>cl,YKP:()=>Wp,h0i:()=>Es,PXZ:()=>a_,R0b:()=>uo,FiY:()=>Hs,Lbi:()=>UC,g9A:()=>Xg,Qsj:()=>sy,FYo:()=>pf,JOm:()=>Bo,tp0:()=>js,Rgc:()=>ha,dDg:()=>r_,eoX:()=>rm,GfV:()=>gf,s_b:()=>il,ifc:()=>ee,MMx:()=>du,Lck:()=>Ub,eFA:()=>sm,G48:()=>f_,Gpc:()=>j,f3M:()=>pt,MR2:()=>Gv,_c5:()=>A_,c2e:()=>zC,zSh:()=>nc,wAp:()=>Ot,vHH:()=>ie,lri:()=>tm,rWj:()=>nm,D6c:()=>x_,cg1:()=>ru,kL8:()=>yp,dqk:()=>Ct,Z0I:()=>Pt,sIi:()=>ra,CqO:()=>Ih,QGY:()=>Wc,QP$:()=>Un,F4k:()=>Eh,RDi:()=>wv,AaK:()=>S,qOj:()=>Lc,TTD:()=>kr,_Bn:()=>Yp,jDz:()=>Xp,xp6:()=>wf,uIk:()=>Vc,Tol:()=>Kh,ekj:()=>Zc,Suo:()=>_g,Xpm:()=>sr,lG2:()=>cr,Yz7:()=>wt,cJS:()=>Kt,oAB:()=>vn,Yjl:()=>gr,Y36:()=>us,_UZ:()=>Uc,GkF:()=>Yc,qZA:()=>qa,TgZ:()=>Xa,EpF:()=>wh,n5z:()=>$s,Ikx:()=>nu,LFG:()=>He,$8M:()=>Vs,$Z:()=>Nf,NdJ:()=>Kc,CRH:()=>wg,oxw:()=>xh,ALo:()=>dg,lcZ:()=>fg,xi3:()=>hg,Dn7:()=>pg,Hsn:()=>Rh,F$t:()=>Oh,Q6J:()=>Hc,MGl:()=>Za,hYB:()=>Xc,VKq:()=>ng,WLB:()=>rg,kEZ:()=>og,HTZ:()=>ig,iGM:()=>bg,MAs:()=>_h,KtG:()=>Dr,evT:()=>mf,CHM:()=>yr,oJD:()=>Zd,P3R:()=>ef,kYT:()=>tr,Udp:()=>qc,YNc:()=>Ch,W1O:()=>Mg,_uU:()=>tp,Oqu:()=>Qc,hij:()=>Qa,AsE:()=>eu,lnq:()=>tu,Gf:()=>Cg});var o=w(7579),x=w(727),N=w(9751),ge=w(8189),R=w(8421),W=w(515),M=w(3269),U=w(2076),Y=w(3099);function G(e){for(let t in e)if(e[t]===G)return t;throw Error("Could not find renamed property on target object.")}function Z(e,t){for(const n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function S(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(S).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function B(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const E=G({__forward_ref__:G});function j(e){return e.__forward_ref__=j,e.toString=function(){return S(this())},e}function P(e){return K(e)?e():e}function K(e){return"function"==typeof e&&e.hasOwnProperty(E)&&e.__forward_ref__===j}function pe(e){return e&&!!e.\u0275providers}const Te="https://g.co/ng/security#xss";class ie extends Error{constructor(t,n){super(function Be(e,t){return`NG0${Math.abs(e)}${t?": "+t.trim():""}`}(t,n)),this.code=t}}function re(e){return"string"==typeof e?e:null==e?"":String(e)}function T(e,t){throw new ie(-201,!1)}function et(e,t){null==e&&function Ue(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function wt(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Kt(e){return{providers:e.providers||[],imports:e.imports||[]}}function pn(e){return Ut(e,Vt)||Ut(e,Vn)}function Pt(e){return null!==pn(e)}function Ut(e,t){return e.hasOwnProperty(t)?e[t]:null}function kt(e){return e&&(e.hasOwnProperty(rn)||e.hasOwnProperty(en))?e[rn]:null}const Vt=G({\u0275prov:G}),rn=G({\u0275inj:G}),Vn=G({ngInjectableDef:G}),en=G({ngInjectorDef:G});var gt=(()=>((gt=gt||{})[gt.Default=0]="Default",gt[gt.Host=1]="Host",gt[gt.Self=2]="Self",gt[gt.SkipSelf=4]="SkipSelf",gt[gt.Optional=8]="Optional",gt))();let Yt;function nt(e){const t=Yt;return Yt=e,t}function Et(e,t,n){const r=pn(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n>.Optional?null:void 0!==t?t:void T(S(e))}const Ct=(()=>typeof globalThis<"u"&&globalThis||typeof global<"u"&&global||typeof window<"u"&&window||typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self)(),Nt={},Hn="__NG_DI_FLAG__",zt="ngTempTokenPath",jn=/\n/gm,En="__source";let xe;function se(e){const t=xe;return xe=e,t}function ye(e,t=gt.Default){if(void 0===xe)throw new ie(-203,!1);return null===xe?Et(e,void 0,t):xe.get(e,t>.Optional?null:void 0,t)}function He(e,t=gt.Default){return(function ht(){return Yt}()||ye)(P(e),t)}function pt(e,t=gt.Default){return He(e,vt(t))}function vt(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Ht(e){const t=[];for(let n=0;n((Ft=Ft||{})[Ft.OnPush=0]="OnPush",Ft[Ft.Default=1]="Default",Ft))(),ee=(()=>{return(e=ee||(ee={}))[e.Emulated=0]="Emulated",e[e.None=2]="None",e[e.ShadowDom=3]="ShadowDom",ee;var e})();const Se={},Le=[],yt=G({\u0275cmp:G}),It=G({\u0275dir:G}),cn=G({\u0275pipe:G}),Dn=G({\u0275mod:G}),sn=G({\u0275fac:G}),dn=G({__NG_ELEMENT_ID__:G});let er=0;function sr(e){return ln(()=>{const n=!0===e.standalone,r={},i={type:e.type,providersResolver:null,decls:e.decls,vars:e.vars,factory:null,template:e.template||null,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:r,inputs:null,outputs:null,exportAs:e.exportAs||null,onPush:e.changeDetection===Ft.OnPush,directiveDefs:null,pipeDefs:null,standalone:n,dependencies:n&&e.dependencies||null,getStandaloneInjector:null,selectors:e.selectors||Le,viewQuery:e.viewQuery||null,features:e.features||null,data:e.data||{},encapsulation:e.encapsulation||ee.Emulated,id:"c"+er++,styles:e.styles||Le,_:null,setInput:null,schemas:e.schemas||null,tView:null,findHostDirectiveDefs:null,hostDirectives:null},l=e.dependencies,u=e.features;return i.inputs=Ir(e.inputs,r),i.outputs=Ir(e.outputs),u&&u.forEach(p=>p(i)),i.directiveDefs=l?()=>("function"==typeof l?l():l).map(Tn).filter(xn):null,i.pipeDefs=l?()=>("function"==typeof l?l():l).map(Qt).filter(xn):null,i})}function Tn(e){return $t(e)||fn(e)}function xn(e){return null!==e}function vn(e){return ln(()=>({type:e.type,bootstrap:e.bootstrap||Le,declarations:e.declarations||Le,imports:e.imports||Le,exports:e.exports||Le,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function tr(e,t){return ln(()=>{const n=On(e,!0);n.declarations=t.declarations||Le,n.imports=t.imports||Le,n.exports=t.exports||Le})}function Ir(e,t){if(null==e)return Se;const n={};for(const r in e)if(e.hasOwnProperty(r)){let i=e[r],l=i;Array.isArray(i)&&(l=i[1],i=i[0]),n[i]=r,t&&(t[i]=l)}return n}const cr=sr;function gr(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,standalone:!0===e.standalone,onDestroy:e.type.prototype.ngOnDestroy||null}}function $t(e){return e[yt]||null}function fn(e){return e[It]||null}function Qt(e){return e[cn]||null}function Un(e){const t=$t(e)||fn(e)||Qt(e);return null!==t&&t.standalone}function On(e,t){const n=e[Dn]||null;if(!n&&!0===t)throw new Error(`Type ${S(e)} does not have '\u0275mod' property.`);return n}function Fn(e){return Array.isArray(e)&&"object"==typeof e[1]}function zn(e){return Array.isArray(e)&&!0===e[1]}function qn(e){return 0!=(4&e.flags)}function dr(e){return e.componentOffset>-1}function Sr(e){return 1==(1&e.flags)}function Gn(e){return null!==e.template}function go(e){return 0!=(256&e[2])}function nr(e,t){return e.hasOwnProperty(sn)?e[sn]:null}class li{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function kr(){return bo}function bo(e){return e.type.prototype.ngOnChanges&&(e.setInput=Wr),Wo}function Wo(){const e=Qr(this),t=e?.current;if(t){const n=e.previous;if(n===Se)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function Wr(e,t,n,r){const i=this.declaredInputs[n],l=Qr(e)||function eo(e,t){return e[Co]=t}(e,{previous:Se,current:null}),u=l.current||(l.current={}),p=l.previous,y=p[i];u[i]=new li(y&&y.currentValue,t,p===Se),e[r]=t}kr.ngInherit=!0;const Co="__ngSimpleChanges__";function Qr(e){return e[Co]||null}function Sn(e){for(;Array.isArray(e);)e=e[0];return e}function ko(e,t){return Sn(t[e])}function Jn(e,t){return Sn(t[e.index])}function Kr(e,t){return e.data[t]}function no(e,t){return e[t]}function rr(e,t){const n=t[e];return Fn(n)?n:n[0]}function hn(e){return 64==(64&e[2])}function C(e,t){return null==t?null:e[t]}function s(e){e[18]=0}function c(e,t){e[5]+=t;let n=e,r=e[3];for(;null!==r&&(1===t&&1===n[5]||-1===t&&0===n[5]);)r[5]+=t,n=r,r=r[3]}const a={lFrame:A(null),bindingsEnabled:!0};function Dt(){return a.bindingsEnabled}function Ve(){return a.lFrame.lView}function At(){return a.lFrame.tView}function yr(e){return a.lFrame.contextLView=e,e[8]}function Dr(e){return a.lFrame.contextLView=null,e}function Mn(){let e=$r();for(;null!==e&&64===e.type;)e=e.parent;return e}function $r(){return a.lFrame.currentTNode}function br(e,t){const n=a.lFrame;n.currentTNode=e,n.isParent=t}function zi(){return a.lFrame.isParent}function ci(){a.lFrame.isParent=!1}function lr(){const e=a.lFrame;let t=e.bindingRootIndex;return-1===t&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function oo(){return a.lFrame.bindingIndex}function io(){return a.lFrame.bindingIndex++}function Br(e){const t=a.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function ui(e,t){const n=a.lFrame;n.bindingIndex=n.bindingRootIndex=e,No(t)}function No(e){a.lFrame.currentDirectiveIndex=e}function Os(){return a.lFrame.currentQueryIndex}function Wi(e){a.lFrame.currentQueryIndex=e}function ma(e){const t=e[1];return 2===t.type?t.declTNode:1===t.type?e[6]:null}function Rs(e,t,n){if(n>.SkipSelf){let i=t,l=e;for(;!(i=i.parent,null!==i||n>.Host||(i=ma(l),null===i||(l=l[15],10&i.type))););if(null===i)return!1;t=i,e=l}const r=a.lFrame=v();return r.currentTNode=t,r.lView=e,!0}function Ki(e){const t=v(),n=e[1];a.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function v(){const e=a.lFrame,t=null===e?null:e.child;return null===t?A(e):t}function A(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function D(){const e=a.lFrame;return a.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const H=D;function ae(){const e=D();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function lt(){return a.lFrame.selectedIndex}function qt(e){a.lFrame.selectedIndex=e}function Tt(){const e=a.lFrame;return Kr(e.tView,e.selectedIndex)}function pr(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[y]<0&&(e[18]+=65536),(p>11>16&&(3&e[2])===t){e[2]+=2048;try{l.call(p)}finally{}}}else try{l.call(p)}finally{}}class fi{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function pi(e,t,n){let r=0;for(;rt){u=l-1;break}}}for(;l>16}(e),r=t;for(;n>0;)r=r[15],n--;return r}let qi=!0;function Zi(e){const t=qi;return qi=e,t}let yl=0;const Xr={};function Ji(e,t){const n=ks(e,t);if(-1!==n)return n;const r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,mi(r.data,e),mi(t,null),mi(r.blueprint,null));const i=Qi(e,t),l=e.injectorIndex;if(ba(i)){const u=Zo(i),p=gi(i,t),y=p[1].data;for(let I=0;I<8;I++)t[l+I]=p[u+I]|y[u+I]}return t[l+8]=i,l}function mi(e,t){e.push(0,0,0,0,0,0,0,0,t)}function ks(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function Qi(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,i=t;for(;null!==i;){if(r=Ia(i),null===r)return-1;if(n++,i=i[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return-1}function es(e,t,n){!function or(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(dn)&&(r=n[dn]),null==r&&(r=n[dn]=yl++);const i=255&r;t.data[e+(i>>5)]|=1<=0?255&t:qu:t}(n);if("function"==typeof l){if(!Rs(t,e,r))return r>.Host?bl(i,0,r):wa(t,n,r,i);try{const u=l(r);if(null!=u||r>.Optional)return u;T()}finally{H()}}else if("number"==typeof l){let u=null,p=ks(e,t),y=-1,I=r>.Host?t[16][6]:null;for((-1===p||r>.SkipSelf)&&(y=-1===p?Qi(e,t):t[p+8],-1!==y&&Ea(r,!1)?(u=t[1],p=Zo(y),t=gi(y,t)):p=-1);-1!==p;){const V=t[1];if(ns(l,p,V.data)){const J=vi(p,t,n,u,r,I);if(J!==Xr)return J}y=t[p+8],-1!==y&&Ea(r,t[1].data[p+8]===I)&&ns(l,p,t)?(u=V,p=Zo(y),t=gi(y,t)):p=-1}}return i}function vi(e,t,n,r,i,l){const u=t[1],p=u.data[e+8],V=Ls(p,u,n,null==r?dr(p)&&qi:r!=u&&0!=(3&p.type),i>.Host&&l===p);return null!==V?Jo(t,u,V,p):Xr}function Ls(e,t,n,r,i){const l=e.providerIndexes,u=t.data,p=1048575&l,y=e.directiveStart,V=l>>20,me=i?p+V:e.directiveEnd;for(let Oe=r?p:p+V;Oe=y&&Ge.type===n)return Oe}if(i){const Oe=u[y];if(Oe&&Gn(Oe)&&Oe.type===n)return y}return null}function Jo(e,t,n,r){let i=e[n];const l=t.data;if(function gl(e){return e instanceof fi}(i)){const u=i;u.resolving&&function be(e,t){const n=t?`. Dependency path: ${t.join(" > ")} > ${e}`:"";throw new ie(-200,`Circular dependency in DI detected for ${e}${n}`)}(function oe(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():re(e)}(l[n]));const p=Zi(u.canSeeViewProviders);u.resolving=!0;const y=u.injectImpl?nt(u.injectImpl):null;Rs(e,r,gt.Default);try{i=e[n]=u.factory(void 0,l,e,r),t.firstCreatePass&&n>=r.directiveStart&&function Eo(e,t,n){const{ngOnChanges:r,ngOnInit:i,ngDoCheck:l}=t.type.prototype;if(r){const u=bo(t);(n.preOrderHooks||(n.preOrderHooks=[])).push(e,u),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,u)}i&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-e,i),l&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,l),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,l))}(n,l[n],t)}finally{null!==y&&nt(y),Zi(p),u.resolving=!1,H()}}return i}function ns(e,t,n){return!!(n[t+(e>>5)]&1<{const t=e.prototype.constructor,n=t[sn]||rs(t),r=Object.prototype;let i=Object.getPrototypeOf(e.prototype).constructor;for(;i&&i!==r;){const l=i[sn]||rs(i);if(l&&l!==n)return l;i=Object.getPrototypeOf(i)}return l=>new l})}function rs(e){return K(e)?()=>{const t=rs(P(e));return t&&t()}:nr(e)}function Ia(e){const t=e[1],n=t.type;return 2===n?t.declTNode:1===n?e[6]:null}function Vs(e){return function Dl(e,t){if("class"===t)return e.classes;if("style"===t)return e.styles;const n=e.attrs;if(n){const r=n.length;let i=0;for(;i{const r=function ei(e){return function(...n){if(e){const r=e(...n);for(const i in r)this[i]=r[i]}}}(t);function i(...l){if(this instanceof i)return r.apply(this,l),this;const u=new i(...l);return p.annotation=u,p;function p(y,I,V){const J=y.hasOwnProperty(Qo)?y[Qo]:Object.defineProperty(y,Qo,{value:[]})[Qo];for(;J.length<=V;)J.push(null);return(J[V]=J[V]||[]).push(u),y}}return n&&(i.prototype=Object.create(n.prototype)),i.prototype.ngMetadataName=e,i.annotationCls=i,i})}class _n{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=wt({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}function z(e,t){void 0===t&&(t=e);for(let n=0;nArray.isArray(n)?ve(n,t):t(n))}function We(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function ft(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function bt(e,t){const n=[];for(let r=0;r=0?e[1|r]=n:(r=~r,function lo(e,t,n,r){let i=e.length;if(i==t)e.push(n,r);else if(1===i)e.push(r,e[0]),e[0]=n;else{for(i--,e.push(e[i-1],e[i]);i>t;)e[i]=e[i-2],i--;e[t]=n,e[t+1]=r}}(e,r,t,n)),r}function Ri(e,t){const n=_i(e,t);if(n>=0)return e[1|n]}function _i(e,t){return function rd(e,t,n){let r=0,i=e.length>>n;for(;i!==r;){const l=r+(i-r>>1),u=e[l<t?i=l:r=l+1}return~(i<((Bo=Bo||{})[Bo.Important=1]="Important",Bo[Bo.DashCase=2]="DashCase",Bo))();const xl=new Map;let Gm=0;const Rl="__ngContext__";function _r(e,t){Fn(t)?(e[Rl]=t[20],function Wm(e){xl.set(e[20],e)}(t)):e[Rl]=t}function Fl(e,t){return undefined(e,t)}function Ys(e){const t=e[3];return zn(t)?t[3]:t}function kl(e){return Ed(e[13])}function Nl(e){return Ed(e[4])}function Ed(e){for(;null!==e&&!zn(e);)e=e[4];return e}function is(e,t,n,r,i){if(null!=r){let l,u=!1;zn(r)?l=r:Fn(r)&&(u=!0,r=r[0]);const p=Sn(r);0===e&&null!==n?null==i?xd(t,n,p):Pi(t,n,p,i||null,!0):1===e&&null!==n?Pi(t,n,p,i||null,!0):2===e?function Ul(e,t,n){const r=Ta(e,t);r&&function pv(e,t,n,r){e.removeChild(t,n,r)}(e,r,t,n)}(t,p,u):3===e&&t.destroyNode(p),null!=l&&function vv(e,t,n,r,i){const l=n[7];l!==Sn(n)&&is(t,e,r,l,i);for(let p=10;p0&&(e[n-1][4]=r[4]);const l=ft(e,10+t);!function sv(e,t){Ws(e,t,t[11],2,null,null),t[0]=null,t[6]=null}(r[1],r);const u=l[19];null!==u&&u.detachView(l[1]),r[3]=null,r[4]=null,r[2]&=-65}return r}function Md(e,t){if(!(128&t[2])){const n=t[11];n.destroyNode&&Ws(e,t,n,3,null,null),function cv(e){let t=e[13];if(!t)return Vl(e[1],e);for(;t;){let n=null;if(Fn(t))n=t[13];else{const r=t[10];r&&(n=r)}if(!n){for(;t&&!t[4]&&t!==e;)Fn(t)&&Vl(t[1],t),t=t[3];null===t&&(t=e),Fn(t)&&Vl(t[1],t),n=t&&t[4]}t=n}}(t)}}function Vl(e,t){if(!(128&t[2])){t[2]&=-65,t[2]|=128,function hv(e,t){let n;if(null!=e&&null!=(n=e.destroyHooks))for(let r=0;r=0?r[i=u]():r[i=-u].unsubscribe(),l+=2}else{const u=r[i=n[l+1]];n[l].call(u)}if(null!==r){for(let l=i+1;l-1){const{encapsulation:l}=e.data[r.directiveStart+i];if(l===ee.None||l===ee.Emulated)return null}return Jn(r,n)}}(e,t.parent,n)}function Pi(e,t,n,r,i){e.insertBefore(t,n,r,i)}function xd(e,t,n){e.appendChild(t,n)}function Od(e,t,n,r,i){null!==r?Pi(e,t,n,r,i):xd(e,t,n)}function Ta(e,t){return e.parentNode(t)}function Rd(e,t,n){return Fd(e,t,n)}let Ra,Yl,Pa,Fd=function Pd(e,t,n){return 40&e.type?Jn(e,n):null};function xa(e,t,n,r){const i=Ad(e,r,t),l=t[11],p=Rd(r.parent||t[6],r,t);if(null!=i)if(Array.isArray(n))for(let y=0;ye,createScript:e=>e,createScriptURL:e=>e})}catch{}return Ra}()?.createHTML(e)||e}function wv(e){Yl=e}function Wl(){if(void 0===Pa&&(Pa=null,Ct.trustedTypes))try{Pa=Ct.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return Pa}function Hd(e){return Wl()?.createHTML(e)||e}function Ud(e){return Wl()?.createScriptURL(e)||e}class zd{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Te})`}}function wi(e){return e instanceof zd?e.changingThisBreaksApplicationSecurity:e}function Ks(e,t){const n=function Tv(e){return e instanceof zd&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${Te})`)}return n===t}class xv{constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{const n=(new window.DOMParser).parseFromString(Fi(t),"text/html").body;return null===n?this.inertDocumentHelper.getInertBodyElement(t):(n.removeChild(n.firstChild),n)}catch{return null}}}class Ov{constructor(t){if(this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),null==this.inertDocument.body){const n=this.inertDocument.createElement("html");this.inertDocument.appendChild(n);const r=this.inertDocument.createElement("body");n.appendChild(r)}}getInertBodyElement(t){const n=this.inertDocument.createElement("template");if("content"in n)return n.innerHTML=Fi(t),n;const r=this.inertDocument.createElement("body");return r.innerHTML=Fi(t),this.defaultDoc.documentMode&&this.stripCustomNsAttrs(r),r}stripCustomNsAttrs(t){const n=t.attributes;for(let i=n.length-1;0"),!0}endElement(t){const n=t.nodeName.toLowerCase();Xl.hasOwnProperty(n)&&!Yd.hasOwnProperty(n)&&(this.buf.push(""))}chars(t){this.buf.push(qd(t))}checkClobberedElement(t,n){if(n&&(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${t.outerHTML}`);return n}}const Nv=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Lv=/([^\#-~ |!])/g;function qd(e){return e.replace(/&/g,"&").replace(Nv,function(t){return"&#"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+";"}).replace(Lv,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}let Fa;function Zl(e){return"content"in e&&function Bv(e){return e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.nodeName}(e)?e.content:null}var Qn=(()=>((Qn=Qn||{})[Qn.NONE=0]="NONE",Qn[Qn.HTML=1]="HTML",Qn[Qn.STYLE=2]="STYLE",Qn[Qn.SCRIPT=3]="SCRIPT",Qn[Qn.URL=4]="URL",Qn[Qn.RESOURCE_URL=5]="RESOURCE_URL",Qn))();function Zd(e){const t=qs();return t?Hd(t.sanitize(Qn.HTML,e)||""):Ks(e,"HTML")?Hd(wi(e)):function $v(e,t){let n=null;try{Fa=Fa||function Gd(e){const t=new Ov(e);return function Rv(){try{return!!(new window.DOMParser).parseFromString(Fi(""),"text/html")}catch{return!1}}()?new xv(t):t}(e);let r=t?String(t):"";n=Fa.getInertBodyElement(r);let i=5,l=r;do{if(0===i)throw new Error("Failed to sanitize html because the input is unstable");i--,r=l,l=n.innerHTML,n=Fa.getInertBodyElement(r)}while(r!==l);return Fi((new kv).sanitizeChildren(Zl(n)||n))}finally{if(n){const r=Zl(n)||n;for(;r.firstChild;)r.removeChild(r.firstChild)}}}(function Vd(){return void 0!==Yl?Yl:typeof document<"u"?document:void 0}(),re(e))}function Jd(e){const t=qs();return t?t.sanitize(Qn.URL,e)||"":Ks(e,"URL")?wi(e):Kl(re(e))}function Qd(e){const t=qs();if(t)return Ud(t.sanitize(Qn.RESOURCE_URL,e)||"");if(Ks(e,"ResourceURL"))return Ud(wi(e));throw new ie(904,!1)}function ef(e,t,n){return function zv(e,t){return"src"===t&&("embed"===e||"frame"===e||"iframe"===e||"media"===e||"script"===e)||"href"===t&&("base"===e||"link"===e)?Qd:Jd}(t,n)(e)}function qs(){const e=Ve();return e&&e[12]}const Jl=new _n("ENVIRONMENT_INITIALIZER"),tf=new _n("INJECTOR",-1),nf=new _n("INJECTOR_DEF_TYPES");class rf{get(t,n=Nt){if(n===Nt){const r=new Error(`NullInjectorError: No provider for ${S(t)}!`);throw r.name="NullInjectorError",r}return n}}function Gv(e){return{\u0275providers:e}}function Yv(...e){return{\u0275providers:sf(0,e),\u0275fromNgModule:!0}}function sf(e,...t){const n=[],r=new Set;let i;return ve(t,l=>{const u=l;Ql(u,n,[],r)&&(i||(i=[]),i.push(u))}),void 0!==i&&af(i,n),n}function af(e,t){for(let n=0;n{t.push(l)})}}function Ql(e,t,n,r){if(!(e=P(e)))return!1;let i=null,l=kt(e);const u=!l&&$t(e);if(l||u){if(u&&!u.standalone)return!1;i=e}else{const y=e.ngModule;if(l=kt(y),!l)return!1;i=y}const p=r.has(i);if(u){if(p)return!1;if(r.add(i),u.dependencies){const y="function"==typeof u.dependencies?u.dependencies():u.dependencies;for(const I of y)Ql(I,t,n,r)}}else{if(!l)return!1;{if(null!=l.imports&&!p){let I;r.add(i);try{ve(l.imports,V=>{Ql(V,t,n,r)&&(I||(I=[]),I.push(V))})}finally{}void 0!==I&&af(I,t)}if(!p){const I=nr(i)||(()=>new i);t.push({provide:i,useFactory:I,deps:Le},{provide:nf,useValue:i,multi:!0},{provide:Jl,useValue:()=>He(i),multi:!0})}const y=l.providers;null==y||p||ec(y,V=>{t.push(V)})}}return i!==e&&void 0!==e.providers}function ec(e,t){for(let n of e)pe(n)&&(n=n.\u0275providers),Array.isArray(n)?ec(n,t):t(n)}const Wv=G({provide:String,useValue:G});function tc(e){return null!==e&&"object"==typeof e&&Wv in e}function ki(e){return"function"==typeof e}const nc=new _n("Set Injector scope."),ka={},Xv={};let rc;function Na(){return void 0===rc&&(rc=new rf),rc}class Ni{}class uf extends Ni{constructor(t,n,r,i){super(),this.parent=n,this.source=r,this.scopes=i,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,ic(t,u=>this.processProvider(u)),this.records.set(tf,ss(void 0,this)),i.has("environment")&&this.records.set(Ni,ss(void 0,this));const l=this.records.get(nc);null!=l&&"string"==typeof l.value&&this.scopes.add(l.value),this.injectorDefTypes=new Set(this.get(nf.multi,Le,gt.Self))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const t of this._ngOnDestroyHooks)t.ngOnDestroy();for(const t of this._onDestroyHooks)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),this._onDestroyHooks.length=0}}onDestroy(t){this._onDestroyHooks.push(t)}runInContext(t){this.assertNotDestroyed();const n=se(this),r=nt(void 0);try{return t()}finally{se(n),nt(r)}}get(t,n=Nt,r=gt.Default){this.assertNotDestroyed(),r=vt(r);const i=se(this),l=nt(void 0);try{if(!(r>.SkipSelf)){let p=this.records.get(t);if(void 0===p){const y=function ey(e){return"function"==typeof e||"object"==typeof e&&e instanceof _n}(t)&&pn(t);p=y&&this.injectableDefInScope(y)?ss(oc(t),ka):null,this.records.set(t,p)}if(null!=p)return this.hydrate(t,p)}return(r>.Self?Na():this.parent).get(t,n=r>.Optional&&n===Nt?null:n)}catch(u){if("NullInjectorError"===u.name){if((u[zt]=u[zt]||[]).unshift(S(t)),i)throw u;return function Ln(e,t,n,r){const i=e[zt];throw t[En]&&i.unshift(t[En]),e.message=function mn(e,t,n,r=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let i=S(t);if(Array.isArray(t))i=t.map(S).join(" -> ");else if("object"==typeof t){let l=[];for(let u in t)if(t.hasOwnProperty(u)){let p=t[u];l.push(u+":"+("string"==typeof p?JSON.stringify(p):S(p)))}i=`{${l.join(", ")}}`}return`${n}${r?"("+r+")":""}[${i}]: ${e.replace(jn,"\n ")}`}("\n"+e.message,i,n,r),e.ngTokenPath=i,e[zt]=null,e}(u,t,"R3InjectorError",this.source)}throw u}finally{nt(l),se(i)}}resolveInjectorInitializers(){const t=se(this),n=nt(void 0);try{const r=this.get(Jl.multi,Le,gt.Self);for(const i of r)i()}finally{se(t),nt(n)}}toString(){const t=[],n=this.records;for(const r of n.keys())t.push(S(r));return`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new ie(205,!1)}processProvider(t){let n=ki(t=P(t))?t:P(t&&t.provide);const r=function Zv(e){return tc(e)?ss(void 0,e.useValue):ss(df(e),ka)}(t);if(ki(t)||!0!==t.multi)this.records.get(n);else{let i=this.records.get(n);i||(i=ss(void 0,ka,!0),i.factory=()=>Ht(i.multi),this.records.set(n,i)),n=t,i.multi.push(t)}this.records.set(n,r)}hydrate(t,n){return n.value===ka&&(n.value=Xv,n.value=n.factory()),"object"==typeof n.value&&n.value&&function Qv(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=P(t.providedIn);return"string"==typeof n?"any"===n||this.scopes.has(n):this.injectorDefTypes.has(n)}}function oc(e){const t=pn(e),n=null!==t?t.factory:nr(e);if(null!==n)return n;if(e instanceof _n)throw new ie(204,!1);if(e instanceof Function)return function qv(e){const t=e.length;if(t>0)throw bt(t,"?"),new ie(204,!1);const n=function it(e){const t=e&&(e[Vt]||e[Vn]);if(t){const n=function Xt(e){if(e.hasOwnProperty("name"))return e.name;const t=(""+e).match(/^function\s*([^\s(]+)/);return null===t?"":t[1]}(e);return console.warn(`DEPRECATED: DI is instantiating a token "${n}" that inherits its @Injectable decorator but does not provide one itself.\nThis will become an error in a future version of Angular. Please add @Injectable() to the "${n}" class.`),t}return null}(e);return null!==n?()=>n.factory(e):()=>new e}(e);throw new ie(204,!1)}function df(e,t,n){let r;if(ki(e)){const i=P(e);return nr(i)||oc(i)}if(tc(e))r=()=>P(e.useValue);else if(function cf(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...Ht(e.deps||[]));else if(function lf(e){return!(!e||!e.useExisting)}(e))r=()=>He(P(e.useExisting));else{const i=P(e&&(e.useClass||e.provide));if(!function Jv(e){return!!e.deps}(e))return nr(i)||oc(i);r=()=>new i(...Ht(e.deps))}return r}function ss(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function ic(e,t){for(const n of e)Array.isArray(n)?ic(n,t):n&&pe(n)?ic(n.\u0275providers,t):t(n)}class ty{}class ff{}class ry{resolveComponentFactory(t){throw function ny(e){const t=Error(`No component factory found for ${S(e)}. Did you add it to @NgModule.entryComponents?`);return t.ngComponent=e,t}(t)}}let Zs=(()=>{class e{}return e.NULL=new ry,e})();function oy(){return as(Mn(),Ve())}function as(e,t){return new Js(Jn(e,t))}let Js=(()=>{class e{constructor(n){this.nativeElement=n}}return e.__NG_ELEMENT_ID__=oy,e})();function iy(e){return e instanceof Js?e.nativeElement:e}class pf{}let sy=(()=>{class e{}return e.__NG_ELEMENT_ID__=()=>function ay(){const e=Ve(),n=rr(Mn().index,e);return(Fn(n)?n:e)[11]}(),e})(),ly=(()=>{class e{}return e.\u0275prov=wt({token:e,providedIn:"root",factory:()=>null}),e})();class gf{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const cy=new gf("15.0.1"),sc={};function lc(e){return e.ngOriginalError}class Qs{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t);this._console.error("ERROR",t),n&&this._console.error("ORIGINAL ERROR",n)}_findOriginalError(t){let n=t&&lc(t);for(;n&&lc(n);)n=lc(n);return n||null}}function mf(e){return e.ownerDocument}function ni(e){return e instanceof Function?e():e}function yf(e,t,n){let r=e.length;for(;;){const i=e.indexOf(t,n);if(-1===i)return i;if(0===i||e.charCodeAt(i-1)<=32){const l=t.length;if(i+l===r||e.charCodeAt(i+l)<=32)return i}n=i+1}}const Df="ng-template";function Dy(e,t,n){let r=0;for(;rl?"":i[J+1].toLowerCase();const Oe=8&r?me:null;if(Oe&&-1!==yf(Oe,I,0)||2&r&&I!==me){if(Io(r))return!1;u=!0}}}}else{if(!u&&!Io(r)&&!Io(y))return!1;if(u&&Io(y))continue;u=!1,r=y|1&r}}return Io(r)||u}function Io(e){return 0==(1&e)}function _y(e,t,n,r){if(null===t)return-1;let i=0;if(r||!n){let l=!1;for(;i-1)for(n++;n0?'="'+p+'"':"")+"]"}else 8&r?i+="."+u:4&r&&(i+=" "+u);else""!==i&&!Io(u)&&(t+=_f(l,i),i=""),r=u,l=l||!Io(r);n++}return""!==i&&(t+=_f(l,i)),t}const Gt={};function wf(e){Ef(At(),Ve(),lt()+e,!1)}function Ef(e,t,n,r){if(!r)if(3==(3&t[2])){const l=e.preOrderCheckHooks;null!==l&&Vr(t,l,n)}else{const l=e.preOrderHooks;null!==l&&Mr(t,l,0,n)}qt(n)}function Af(e,t=null,n=null,r){const i=Tf(e,t,n,r);return i.resolveInjectorInitializers(),i}function Tf(e,t=null,n=null,r,i=new Set){const l=[n||Le,Yv(e)];return r=r||("object"==typeof e?void 0:S(e)),new uf(l,t||Na(),r||null,i)}let Li=(()=>{class e{static create(n,r){if(Array.isArray(n))return Af({name:""},r,n,"");{const i=n.name??"";return Af({name:i},n.parent,n.providers,i)}}}return e.THROW_IF_NOT_FOUND=Nt,e.NULL=new rf,e.\u0275prov=wt({token:e,providedIn:"any",factory:()=>He(tf)}),e.__NG_ELEMENT_ID__=-1,e})();function us(e,t=gt.Default){const n=Ve();return null===n?He(e,t):ts(Mn(),n,P(e),t)}function Nf(){throw new Error("invalid")}function $a(e,t){return e<<17|t<<2}function So(e){return e>>17&32767}function hc(e){return 2|e}function ri(e){return(131068&e)>>2}function pc(e,t){return-131069&e|t<<2}function gc(e){return 1|e}function Wf(e,t){const n=e.contentQueries;if(null!==n)for(let r=0;r22&&Ef(e,t,22,!1),n(r,i)}finally{qt(l)}}function Ic(e,t,n){if(qn(t)){const i=t.directiveEnd;for(let l=t.directiveStart;l0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(u)!=p&&u.push(p),u.push(n,r,l)}}(e,t,r,ea(e,n,i.hostVars,Gt),i)}function w0(e,t,n){const r=Jn(t,e),i=Xf(n),l=e[10],u=Ua(e,Ha(e,i,null,n.onPush?32:16,r,t,l,l.createRenderer(r,n),null,null,null));e[t.index]=u}function Vo(e,t,n,r,i,l){const u=Jn(e,t);!function Oc(e,t,n,r,i,l,u){if(null==l)e.removeAttribute(t,i,n);else{const p=null==u?re(l):u(l,r||"",i);e.setAttribute(t,i,p,n)}}(t[11],u,l,e.value,n,r,i)}function E0(e,t,n,r,i,l){const u=l[t];if(null!==u){const p=r.setInput;for(let y=0;y0&&Rc(n)}}function Rc(e){for(let r=kl(e);null!==r;r=Nl(r))for(let i=10;i0&&Rc(l)}const n=e[1].components;if(null!==n)for(let r=0;r0&&Rc(i)}}function T0(e,t){const n=rr(t,e),r=n[1];(function x0(e,t){for(let n=t.length;n-1&&(Bl(t,r),ft(n,r))}this._attachedToViewContainer=!1}Md(this._lView[1],this._lView)}onDestroy(t){qf(this._lView[1],this._lView,null,t)}markForCheck(){Pc(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-65}reattach(){this._lView[2]|=64}detectChanges(){za(this._lView[1],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new ie(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function lv(e,t){Ws(e,t,t[11],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new ie(902,!1);this._appRef=t}}class O0 extends ta{constructor(t){super(t),this._view=t}detectChanges(){const t=this._view;za(t[1],t,t[8],!1)}checkNoChanges(){}get context(){return null}}class Nc extends Zs{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const n=$t(t);return new na(n,this.ngModule)}}function ah(e){const t=[];for(let n in e)e.hasOwnProperty(n)&&t.push({propName:e[n],templateName:n});return t}class P0{constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){r=vt(r);const i=this.injector.get(t,sc,r);return i!==sc||n===sc?i:this.parentInjector.get(t,n,r)}}class na extends ff{constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function Ay(e){return e.map(My).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}get inputs(){return ah(this.componentDef.inputs)}get outputs(){return ah(this.componentDef.outputs)}create(t,n,r,i){let l=(i=i||this.ngModule)instanceof Ni?i:i?.injector;l&&null!==this.componentDef.getStandaloneInjector&&(l=this.componentDef.getStandaloneInjector(l)||l);const u=l?new P0(t,l):t,p=u.get(pf,null);if(null===p)throw new ie(407,!1);const y=u.get(ly,null),I=p.createRenderer(null,this.componentDef),V=this.componentDef.selectors[0][0]||"div",J=r?function c0(e,t,n){return e.selectRootElement(t,n===ee.ShadowDom)}(I,r,this.componentDef.encapsulation):$l(I,V,function R0(e){const t=e.toLowerCase();return"svg"===t?"svg":"math"===t?"math":null}(V)),me=this.componentDef.onPush?288:272,Oe=Ac(0,null,null,1,0,null,null,null,null,null),Ge=Ha(null,Oe,null,me,null,null,p,I,y,u,null);let tt,ct;Ki(Ge);try{const mt=this.componentDef;let xt,Ze=null;mt.findHostDirectiveDefs?(xt=[],Ze=new Map,mt.findHostDirectiveDefs(mt,xt,Ze),xt.push(mt)):xt=[mt];const Lt=function N0(e,t){const n=e[1];return e[22]=t,ds(n,22,2,"#host",null)}(Ge,J),In=function L0(e,t,n,r,i,l,u,p){const y=i[1];!function $0(e,t,n,r){for(const i of e)t.mergedAttrs=ao(t.mergedAttrs,i.hostAttrs);null!==t.mergedAttrs&&(Ga(t,t.mergedAttrs,!0),null!==n&&Bd(r,n,t))}(r,e,t,u);const I=l.createRenderer(t,n),V=Ha(i,Xf(n),null,n.onPush?32:16,i[e.index],e,l,I,p||null,null,null);return y.firstCreatePass&&xc(y,e,r.length-1),Ua(i,V),i[e.index]=V}(Lt,J,mt,xt,Ge,p,I);ct=Kr(Oe,22),J&&function V0(e,t,n,r){if(r)pi(e,n,["ng-version",cy.full]);else{const{attrs:i,classes:l}=function Ty(e){const t=[],n=[];let r=1,i=2;for(;r0&&$d(e,n,l.join(" "))}}(I,mt,J,r),void 0!==n&&function H0(e,t,n){const r=e.projection=[];for(let i=0;i=0;r--){const i=e[r];i.hostVars=t+=i.hostVars,i.hostAttrs=ao(i.hostAttrs,n=ao(n,i.hostAttrs))}}(r)}function $c(e){return e===Se?{}:e===Le?[]:e}function z0(e,t){const n=e.viewQuery;e.viewQuery=n?(r,i)=>{t(r,i),n(r,i)}:t}function G0(e,t){const n=e.contentQueries;e.contentQueries=n?(r,i,l)=>{t(r,i,l),n(r,i,l)}:t}function Y0(e,t){const n=e.hostBindings;e.hostBindings=n?(r,i)=>{t(r,i),n(r,i)}:t}let Wa=null;function $i(){if(!Wa){const e=Ct.Symbol;if(e&&e.iterator)Wa=e.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let n=0;nu(Sn(Lt[r.index])):r.index;let Ze=null;if(!u&&p&&(Ze=function sD(e,t,n,r){const i=e.cleanup;if(null!=i)for(let l=0;ly?p[y]:null}"string"==typeof u&&(l+=2)}return null}(e,t,i,r.index)),null!==Ze)(Ze.__ngLastListenerFn__||Ze).__ngNextListenerFn__=l,Ze.__ngLastListenerFn__=l,me=!1;else{l=Th(r,t,V,l,!1);const Lt=n.listen(ct,i,l);J.push(l,Lt),I&&I.push(i,xt,mt,mt+1)}}else l=Th(r,t,V,l,!1);const Oe=r.outputs;let Ge;if(me&&null!==Oe&&(Ge=Oe[i])){const tt=Ge.length;if(tt)for(let ct=0;ct-1?rr(e.index,t):t);let y=Ah(t,0,r,u),I=l.__ngNextListenerFn__;for(;I;)y=Ah(t,0,I,u)&&y,I=I.__ngNextListenerFn__;return i&&!1===y&&(u.preventDefault(),u.returnValue=!1),y}}function xh(e=1){return function $e(e){return(a.lFrame.contextLView=function Xe(e,t){for(;e>0;)t=t[15],e--;return t}(e,a.lFrame.contextLView))[8]}(e)}function aD(e,t){let n=null;const r=function wy(e){const t=e.attrs;if(null!=t){const n=t.indexOf(5);if(0==(1&n))return t[n+1]}return null}(e);for(let i=0;i=0}const ir={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function jh(e){return e.substring(ir.key,ir.keyEnd)}function Uh(e,t){const n=ir.textEnd;return n===t?-1:(t=ir.keyEnd=function pD(e,t,n){for(;t32;)t++;return t}(e,ir.key=t,n),Cs(e,t,n))}function Cs(e,t,n){for(;t=0;n=Uh(t,n))Cr(e,jh(t),!0)}function Mo(e,t,n,r){const i=Ve(),l=At(),u=Br(2);l.firstUpdatePass&&qh(l,e,u,r),t!==Gt&&wr(i,u,t)&&Jh(l,l.data[lt()],i,i[11],e,i[u+1]=function ED(e,t){return null==e||("string"==typeof t?e+=t:"object"==typeof e&&(e=S(wi(e)))),e}(t,n),r,u)}function Xh(e,t){return t>=e.expandoStartIndex}function qh(e,t,n,r){const i=e.data;if(null===i[n+1]){const l=i[lt()],u=Xh(e,n);ep(l,r)&&null===t&&!u&&(t=!1),t=function yD(e,t,n,r){const i=function Mi(e){const t=a.lFrame.currentDirectiveIndex;return-1===t?null:e[t]}(e);let l=r?t.residualClasses:t.residualStyles;if(null===i)0===(r?t.classBindings:t.styleBindings)&&(n=ia(n=Jc(null,e,t,n,r),t.attrs,r),l=null);else{const u=t.directiveStylingLast;if(-1===u||e[u]!==i)if(n=Jc(i,e,t,n,r),null===l){let y=function DD(e,t,n){const r=n?t.classBindings:t.styleBindings;if(0!==ri(r))return e[So(r)]}(e,t,r);void 0!==y&&Array.isArray(y)&&(y=Jc(null,e,t,y[1],r),y=ia(y,t.attrs,r),function bD(e,t,n,r){e[So(n?t.classBindings:t.styleBindings)]=r}(e,t,r,y))}else l=function CD(e,t,n){let r;const i=t.directiveEnd;for(let l=1+t.directiveStylingLast;l0)&&(I=!0)}else V=n;if(i)if(0!==y){const me=So(e[p+1]);e[r+1]=$a(me,p),0!==me&&(e[me+1]=pc(e[me+1],r)),e[p+1]=function Ky(e,t){return 131071&e|t<<17}(e[p+1],r)}else e[r+1]=$a(p,0),0!==p&&(e[p+1]=pc(e[p+1],r)),p=r;else e[r+1]=$a(y,0),0===p?p=r:e[y+1]=pc(e[y+1],r),y=r;I&&(e[r+1]=hc(e[r+1])),Hh(e,V,r,!0),Hh(e,V,r,!1),function cD(e,t,n,r,i){const l=i?e.residualClasses:e.residualStyles;null!=l&&"string"==typeof t&&_i(l,t)>=0&&(n[r+1]=gc(n[r+1]))}(t,V,e,r,l),u=$a(p,y),l?t.classBindings=u:t.styleBindings=u}(i,l,t,n,u,r)}}function Jc(e,t,n,r,i){let l=null;const u=n.directiveEnd;let p=n.directiveStylingLast;for(-1===p?p=n.directiveStart:p++;p0;){const y=e[i],I=Array.isArray(y),V=I?y[1]:y,J=null===V;let me=n[i+1];me===Gt&&(me=J?Le:void 0);let Oe=J?Ri(me,r):V===r?me:void 0;if(I&&!Ja(Oe)&&(Oe=Ri(y,r)),Ja(Oe)&&(p=Oe,u))return p;const Ge=e[i+1];i=u?So(Ge):ri(Ge)}if(null!==t){let y=l?t.residualClasses:t.residualStyles;null!=y&&(p=Ri(y,r))}return p}function Ja(e){return void 0!==e}function ep(e,t){return 0!=(e.flags&(t?8:16))}function tp(e,t=""){const n=Ve(),r=At(),i=e+22,l=r.firstCreatePass?ds(r,i,1,t,null):r.data[i],u=n[i]=function Ll(e,t){return e.createText(t)}(n[11],t);xa(r,n,u,l),br(l,!1)}function Qc(e){return Qa("",e,""),Qc}function Qa(e,t,n){const r=Ve(),i=hs(r,e,t,n);return i!==Gt&&oi(r,lt(),i),Qa}function eu(e,t,n,r,i){const l=Ve(),u=ps(l,e,t,n,r,i);return u!==Gt&&oi(l,lt(),u),eu}function tu(e,t,n,r,i,l,u){const p=Ve(),y=function gs(e,t,n,r,i,l,u,p){const I=Ka(e,oo(),n,i,u);return Br(3),I?t+re(n)+r+re(i)+l+re(u)+p:Gt}(p,e,t,n,r,i,l,u);return y!==Gt&&oi(p,lt(),y),tu}function nu(e,t,n){const r=Ve();return wr(r,io(),t)&&qr(At(),Tt(),r,e,t,r[11],n,!0),nu}const Vi=void 0;var zD=["en",[["a","p"],["AM","PM"],Vi],[["AM","PM"],Vi,Vi],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],Vi,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],Vi,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",Vi,"{1} 'at' {0}",Vi],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",function UD(e){const n=Math.floor(Math.abs(e)),r=e.toString().replace(/^[^.]*\.?/,"").length;return 1===n&&0===r?1:5}];let _s={};function ru(e){const t=function GD(e){return e.toLowerCase().replace(/_/g,"-")}(e);let n=Dp(t);if(n)return n;const r=t.split("-")[0];if(n=Dp(r),n)return n;if("en"===r)return zD;throw new ie(701,!1)}function yp(e){return ru(e)[Ot.PluralCase]}function Dp(e){return e in _s||(_s[e]=Ct.ng&&Ct.ng.common&&Ct.ng.common.locales&&Ct.ng.common.locales[e]),_s[e]}var Ot=(()=>((Ot=Ot||{})[Ot.LocaleId=0]="LocaleId",Ot[Ot.DayPeriodsFormat=1]="DayPeriodsFormat",Ot[Ot.DayPeriodsStandalone=2]="DayPeriodsStandalone",Ot[Ot.DaysFormat=3]="DaysFormat",Ot[Ot.DaysStandalone=4]="DaysStandalone",Ot[Ot.MonthsFormat=5]="MonthsFormat",Ot[Ot.MonthsStandalone=6]="MonthsStandalone",Ot[Ot.Eras=7]="Eras",Ot[Ot.FirstDayOfWeek=8]="FirstDayOfWeek",Ot[Ot.WeekendRange=9]="WeekendRange",Ot[Ot.DateFormat=10]="DateFormat",Ot[Ot.TimeFormat=11]="TimeFormat",Ot[Ot.DateTimeFormat=12]="DateTimeFormat",Ot[Ot.NumberSymbols=13]="NumberSymbols",Ot[Ot.NumberFormats=14]="NumberFormats",Ot[Ot.CurrencyCode=15]="CurrencyCode",Ot[Ot.CurrencySymbol=16]="CurrencySymbol",Ot[Ot.CurrencyName=17]="CurrencyName",Ot[Ot.Currencies=18]="Currencies",Ot[Ot.Directionality=19]="Directionality",Ot[Ot.PluralCase=20]="PluralCase",Ot[Ot.ExtraData=21]="ExtraData",Ot))();const ws="en-US";let bp=ws;function su(e,t,n,r,i){if(e=P(e),Array.isArray(e))for(let l=0;l>20;if(ki(e)||!e.multi){const Oe=new fi(y,i,us),Ge=lu(p,t,i?V:V+me,J);-1===Ge?(es(Ji(I,u),l,p),au(l,e,t.length),t.push(p),I.directiveStart++,I.directiveEnd++,i&&(I.providerIndexes+=1048576),n.push(Oe),u.push(Oe)):(n[Ge]=Oe,u[Ge]=Oe)}else{const Oe=lu(p,t,V+me,J),Ge=lu(p,t,V,V+me),tt=Oe>=0&&n[Oe],ct=Ge>=0&&n[Ge];if(i&&!ct||!i&&!tt){es(Ji(I,u),l,p);const mt=function jb(e,t,n,r,i){const l=new fi(e,n,us);return l.multi=[],l.index=t,l.componentProviders=0,Gp(l,i,r&&!n),l}(i?Hb:Vb,n.length,i,r,y);!i&&ct&&(n[Ge].providerFactory=mt),au(l,e,t.length,0),t.push(p),I.directiveStart++,I.directiveEnd++,i&&(I.providerIndexes+=1048576),n.push(mt),u.push(mt)}else au(l,e,Oe>-1?Oe:Ge,Gp(n[i?Ge:Oe],y,!i&&r));!i&&r&&ct&&n[Ge].componentProviders++}}}function au(e,t,n,r){const i=ki(t),l=function Kv(e){return!!e.useClass}(t);if(i||l){const y=(l?P(t.useClass):t).prototype.ngOnDestroy;if(y){const I=e.destroyHooks||(e.destroyHooks=[]);if(!i&&t.multi){const V=I.indexOf(n);-1===V?I.push(n,[r,y]):I[V+1].push(r,y)}else I.push(n,y)}}}function Gp(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function lu(e,t,n,r){for(let i=n;i{n.providersResolver=(r,i)=>function Bb(e,t,n){const r=At();if(r.firstCreatePass){const i=Gn(e);su(n,r.data,r.blueprint,i,!0),su(t,r.data,r.blueprint,i,!1)}}(r,i?i(e):e,t)}}class Es{}class Wp{}function Ub(e,t){return new Kp(e,t??null)}class Kp extends Es{constructor(t,n){super(),this._parent=n,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Nc(this);const r=On(t);this._bootstrapComponents=ni(r.bootstrap),this._r3Injector=Tf(t,n,[{provide:Es,useValue:this},{provide:Zs,useValue:this.componentFactoryResolver}],S(t),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(t)}get injector(){return this._r3Injector}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class uu extends Wp{constructor(t){super(),this.moduleType=t}create(t){return new Kp(this.moduleType,t)}}class zb extends Es{constructor(t,n,r){super(),this.componentFactoryResolver=new Nc(this),this.instance=null;const i=new uf([...t,{provide:Es,useValue:this},{provide:Zs,useValue:this.componentFactoryResolver}],n||Na(),r,new Set(["environment"]));this.injector=i,i.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}}function du(e,t,n=null){return new zb(e,t,n).injector}let Gb=(()=>{class e{constructor(n){this._injector=n,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n.id)){const r=sf(0,n.type),i=r.length>0?du([r],this._injector,`Standalone[${n.type.name}]`):null;this.cachedInjectors.set(n.id,i)}return this.cachedInjectors.get(n.id)}ngOnDestroy(){try{for(const n of this.cachedInjectors.values())null!==n&&n.destroy()}finally{this.cachedInjectors.clear()}}}return e.\u0275prov=wt({token:e,providedIn:"environment",factory:()=>new e(He(Ni))}),e})();function Xp(e){e.getStandaloneInjector=t=>t.get(Gb).getOrCreateStandaloneInjector(e)}function ng(e,t,n,r){return sg(Ve(),lr(),e,t,n,r)}function rg(e,t,n,r,i){return ag(Ve(),lr(),e,t,n,r,i)}function og(e,t,n,r,i,l){return lg(Ve(),lr(),e,t,n,r,i,l)}function ig(e,t,n,r,i,l,u,p,y){const I=lr()+e,V=Ve(),J=function co(e,t,n,r,i,l){const u=Bi(e,t,n,r);return Bi(e,t+2,i,l)||u}(V,I,n,r,i,l);return Bi(V,I+4,u,p)||J?Ho(V,I+6,y?t.call(y,n,r,i,l,u,p):t(n,r,i,l,u,p)):function oa(e,t){return e[t]}(V,I+6)}function da(e,t){const n=e[t];return n===Gt?void 0:n}function sg(e,t,n,r,i,l){const u=t+n;return wr(e,u,i)?Ho(e,u+1,l?r.call(l,i):r(i)):da(e,u+1)}function ag(e,t,n,r,i,l,u){const p=t+n;return Bi(e,p,i,l)?Ho(e,p+2,u?r.call(u,i,l):r(i,l)):da(e,p+2)}function lg(e,t,n,r,i,l,u,p){const y=t+n;return Ka(e,y,i,l,u)?Ho(e,y+3,p?r.call(p,i,l,u):r(i,l,u)):da(e,y+3)}function dg(e,t){const n=At();let r;const i=e+22;n.firstCreatePass?(r=function sC(e,t){if(t)for(let n=t.length-1;n>=0;n--){const r=t[n];if(e===r.name)return r}}(t,n.pipeRegistry),n.data[i]=r,r.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(i,r.onDestroy)):r=n.data[i];const l=r.factory||(r.factory=nr(r.type)),u=nt(us);try{const p=Zi(!1),y=l();return Zi(p),function rD(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}(n,Ve(),i,y),y}finally{nt(u)}}function fg(e,t,n){const r=e+22,i=Ve(),l=no(i,r);return fa(i,r)?sg(i,lr(),t,l.transform,n,l):l.transform(n)}function hg(e,t,n,r){const i=e+22,l=Ve(),u=no(l,i);return fa(l,i)?ag(l,lr(),t,u.transform,n,r,u):u.transform(n,r)}function pg(e,t,n,r,i){const l=e+22,u=Ve(),p=no(u,l);return fa(u,l)?lg(u,lr(),t,p.transform,n,r,i,p):p.transform(n,r,i)}function fa(e,t){return e[1].data[t].pure}function hu(e){return t=>{setTimeout(e,void 0,t)}}const zo=class cC extends o.x{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){let i=t,l=n||(()=>null),u=r;if(t&&"object"==typeof t){const y=t;i=y.next?.bind(y),l=y.error?.bind(y),u=y.complete?.bind(y)}this.__isAsync&&(l=hu(l),i&&(i=hu(i)),u&&(u=hu(u)));const p=super.subscribe({next:i,error:l,complete:u});return t instanceof x.w0&&t.add(p),p}};function uC(){return this._results[$i()]()}class pu{constructor(t=!1){this._emitDistinctChangesOnly=t,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const n=$i(),r=pu.prototype;r[n]||(r[n]=uC)}get changes(){return this._changes||(this._changes=new zo)}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){const r=this;r.dirty=!1;const i=z(t);(this._changesDetected=!function $(e,t,n){if(e.length!==t.length)return!1;for(let r=0;r{class e{}return e.__NG_ELEMENT_ID__=hC,e})();const dC=ha,fC=class extends dC{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}createEmbeddedView(t,n){const r=this._declarationTContainer.tViews,i=Ha(this._declarationLView,r,t,16,null,r.declTNode,null,null,null,null,n||null);i[17]=this._declarationLView[this._declarationTContainer.index];const u=this._declarationLView[19];return null!==u&&(i[19]=u.createEmbeddedView(r)),Ec(r,i,t),new ta(i)}};function hC(){return ol(Mn(),Ve())}function ol(e,t){return 4&e.type?new fC(t,e,as(e,t)):null}let il=(()=>{class e{}return e.__NG_ELEMENT_ID__=pC,e})();function pC(){return vg(Mn(),Ve())}const gC=il,gg=class extends gC{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return as(this._hostTNode,this._hostLView)}get injector(){return new Ti(this._hostTNode,this._hostLView)}get parentInjector(){const t=Qi(this._hostTNode,this._hostLView);if(ba(t)){const n=gi(t,this._hostLView),r=Zo(t);return new Ti(n[1].data[r+8],n)}return new Ti(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=mg(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-10}createEmbeddedView(t,n,r){let i,l;"number"==typeof r?i=r:null!=r&&(i=r.index,l=r.injector);const u=t.createEmbeddedView(n||{},l);return this.insert(u,i),u}createComponent(t,n,r,i,l){const u=t&&!function m(e){return"function"==typeof e}(t);let p;if(u)p=n;else{const J=n||{};p=J.index,r=J.injector,i=J.projectableNodes,l=J.environmentInjector||J.ngModuleRef}const y=u?t:new na($t(t)),I=r||this.parentInjector;if(!l&&null==y.ngModule){const me=(u?I:this.parentInjector).get(Ni,null);me&&(l=me)}const V=y.create(I,i,void 0,l);return this.insert(V.hostView,p),V}insert(t,n){const r=t._lView,i=r[1];if(function Ui(e){return zn(e[3])}(r)){const V=this.indexOf(t);if(-1!==V)this.detach(V);else{const J=r[3],me=new gg(J,J[6],J[3]);me.detach(me.indexOf(t))}}const l=this._adjustIndex(n),u=this._lContainer;!function uv(e,t,n,r){const i=10+r,l=n.length;r>0&&(n[i-1][4]=t),r0)r.push(u[p/2]);else{const I=l[p+1],V=t[-y];for(let J=10;J{class e{constructor(n){this.appInits=n,this.resolve=al,this.reject=al,this.initialized=!1,this.done=!1,this.donePromise=new Promise((r,i)=>{this.resolve=r,this.reject=i})}runInitializers(){if(this.initialized)return;const n=[],r=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let i=0;i{l.subscribe({complete:p,error:y})});n.push(u)}}Promise.all(n).then(()=>{r()}).catch(i=>{this.reject(i)}),0===n.length&&r(),this.initialized=!0}}return e.\u0275fac=function(n){return new(n||e)(He(Yg,8))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const Wg=new _n("AppId",{providedIn:"root",factory:function Kg(){return`${Iu()}${Iu()}${Iu()}`}});function Iu(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const Xg=new _n("Platform Initializer"),UC=new _n("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),qg=new _n("appBootstrapListener");let zC=(()=>{class e{log(n){console.log(n)}warn(n){console.warn(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();const cl=new _n("LocaleId",{providedIn:"root",factory:()=>pt(cl,gt.Optional|gt.SkipSelf)||function GC(){return typeof $localize<"u"&&$localize.locale||ws}()}),YC=new _n("DefaultCurrencyCode",{providedIn:"root",factory:()=>"USD"});class WC{constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}}let KC=(()=>{class e{compileModuleSync(n){return new uu(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){const r=this.compileModuleSync(n),l=ni(On(n).declarations).reduce((u,p)=>{const y=$t(p);return y&&u.push(new na(y)),u},[]);return new WC(r,l)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const ZC=(()=>Promise.resolve(0))();function Su(e){typeof Zone>"u"?ZC.then(()=>{e&&e.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",e)}class uo{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new zo(!1),this.onMicrotaskEmpty=new zo(!1),this.onStable=new zo(!1),this.onError=new zo(!1),typeof Zone>"u")throw new ie(908,!1);Zone.assertZonePatched();const i=this;i._nesting=0,i._outer=i._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(i._inner=i._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(i._inner=i._inner.fork(Zone.longStackTraceZoneSpec)),i.shouldCoalesceEventChangeDetection=!r&&n,i.shouldCoalesceRunChangeDetection=r,i.lastRequestAnimationFrameId=-1,i.nativeRequestAnimationFrame=function JC(){let e=Ct.requestAnimationFrame,t=Ct.cancelAnimationFrame;if(typeof Zone<"u"&&e&&t){const n=e[Zone.__symbol__("OriginalDelegate")];n&&(e=n);const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r)}return{nativeRequestAnimationFrame:e,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function t_(e){const t=()=>{!function e_(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(Ct,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,Au(e),e.isCheckStableRunning=!0,Mu(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),Au(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,i,l,u,p)=>{try{return Qg(e),n.invokeTask(i,l,u,p)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===l.type||e.shouldCoalesceRunChangeDetection)&&t(),em(e)}},onInvoke:(n,r,i,l,u,p,y)=>{try{return Qg(e),n.invoke(i,l,u,p,y)}finally{e.shouldCoalesceRunChangeDetection&&t(),em(e)}},onHasTask:(n,r,i,l)=>{n.hasTask(i,l),r===i&&("microTask"==l.change?(e._hasPendingMicrotasks=l.microTask,Au(e),Mu(e)):"macroTask"==l.change&&(e.hasPendingMacrotasks=l.macroTask))},onHandleError:(n,r,i,l)=>(n.handleError(i,l),e.runOutsideAngular(()=>e.onError.emit(l)),!1)})}(i)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!uo.isInAngularZone())throw new ie(909,!1)}static assertNotInAngularZone(){if(uo.isInAngularZone())throw new ie(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,i){const l=this._inner,u=l.scheduleEventTask("NgZoneEvent: "+i,t,QC,al,al);try{return l.runTask(u,n,r)}finally{l.cancelTask(u)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const QC={};function Mu(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function Au(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function Qg(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function em(e){e._nesting--,Mu(e)}class n_{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new zo,this.onMicrotaskEmpty=new zo,this.onStable=new zo,this.onError=new zo}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,i){return t.apply(n,r)}}const tm=new _n(""),nm=new _n("");let Tu,r_=(()=>{class e{constructor(n,r,i){this._ngZone=n,this.registry=r,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,Tu||(function o_(e){Tu=e}(i),i.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{uo.assertNotInAngularZone(),Su(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())Su(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,i){let l=-1;r&&r>0&&(l=setTimeout(()=>{this._callbacks=this._callbacks.filter(u=>u.timeoutId!==l),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:l,updateCb:i})}whenStable(n,r,i){if(i&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,i),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,i){return[]}}return e.\u0275fac=function(n){return new(n||e)(He(uo),He(rm),He(nm))},e.\u0275prov=wt({token:e,factory:e.\u0275fac}),e})(),rm=(()=>{class e{constructor(){this._applications=new Map}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return Tu?.findTestabilityInTree(this,n,r)??null}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})(),Si=null;const om=new _n("AllowMultipleToken"),xu=new _n("PlatformDestroyListeners");class a_{constructor(t,n){this.name=t,this.token=n}}function sm(e,t,n=[]){const r=`Platform: ${t}`,i=new _n(r);return(l=[])=>{let u=Ou();if(!u||u.injector.get(om,!1)){const p=[...n,...l,{provide:i,useValue:!0}];e?e(p):function l_(e){if(Si&&!Si.get(om,!1))throw new ie(400,!1);Si=e;const t=e.get(lm);(function im(e){const t=e.get(Xg,null);t&&t.forEach(n=>n())})(e)}(function am(e=[],t){return Li.create({name:t,providers:[{provide:nc,useValue:"platform"},{provide:xu,useValue:new Set([()=>Si=null])},...e]})}(p,r))}return function u_(e){const t=Ou();if(!t)throw new ie(401,!1);return t}()}}function Ou(){return Si?.get(lm)??null}let lm=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const i=function um(e,t){let n;return n="noop"===e?new n_:("zone.js"===e?void 0:e)||new uo(t),n}(r?.ngZone,function cm(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!(!e||!e.ngZoneEventCoalescing)||!1,shouldCoalesceRunChangeDetection:!(!e||!e.ngZoneRunCoalescing)||!1}}(r)),l=[{provide:uo,useValue:i}];return i.run(()=>{const u=Li.create({providers:l,parent:this.injector,name:n.moduleType.name}),p=n.create(u),y=p.injector.get(Qs,null);if(!y)throw new ie(402,!1);return i.runOutsideAngular(()=>{const I=i.onError.subscribe({next:V=>{y.handleError(V)}});p.onDestroy(()=>{dl(this._modules,p),I.unsubscribe()})}),function dm(e,t,n){try{const r=n();return Wc(r)?r.catch(i=>{throw t.runOutsideAngular(()=>e.handleError(i)),i}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(y,i,()=>{const I=p.injector.get(ll);return I.runInitializers(),I.donePromise.then(()=>(function Cp(e){et(e,"Expected localeId to be defined"),"string"==typeof e&&(bp=e.toLowerCase().replace(/_/g,"-"))}(p.injector.get(cl,ws)||ws),this._moduleDoBootstrap(p),p))})})}bootstrapModule(n,r=[]){const i=fm({},r);return function i_(e,t,n){const r=new uu(n);return Promise.resolve(r)}(0,0,n).then(l=>this.bootstrapModuleFactory(l,i))}_moduleDoBootstrap(n){const r=n.injector.get(ul);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(i=>r.bootstrap(i));else{if(!n.instance.ngDoBootstrap)throw new ie(403,!1);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new ie(404,!1);this._modules.slice().forEach(r=>r.destroy()),this._destroyListeners.forEach(r=>r());const n=this._injector.get(xu,null);n&&(n.forEach(r=>r()),n.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}}return e.\u0275fac=function(n){return new(n||e)(He(Li))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();function fm(e,t){return Array.isArray(t)?t.reduce(fm,e):{...e,...t}}let ul=(()=>{class e{constructor(n,r,i){this._zone=n,this._injector=r,this._exceptionHandler=i,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this._destroyed=!1,this._destroyListeners=[],this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const l=new N.y(p=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{p.next(this._stable),p.complete()})}),u=new N.y(p=>{let y;this._zone.runOutsideAngular(()=>{y=this._zone.onStable.subscribe(()=>{uo.assertNotInAngularZone(),Su(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,p.next(!0))})})});const I=this._zone.onUnstable.subscribe(()=>{uo.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{p.next(!1)}))});return()=>{y.unsubscribe(),I.unsubscribe()}});this.isStable=function _(...e){const t=(0,M.yG)(e),n=(0,M._6)(e,1/0),r=e;return r.length?1===r.length?(0,R.Xf)(r[0]):(0,ge.J)(n)((0,U.D)(r,t)):W.E}(l,u.pipe((0,Y.B)()))}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(n,r){const i=n instanceof ff;if(!this._injector.get(ll).done)throw!i&&Un(n),new ie(405,false);let u;u=i?n:this._injector.get(Zs).resolveComponentFactory(n),this.componentTypes.push(u.componentType);const p=function s_(e){return e.isBoundToModule}(u)?void 0:this._injector.get(Es),I=u.create(Li.NULL,[],r||u.selector,p),V=I.location.nativeElement,J=I.injector.get(tm,null);return J?.registerApplication(V),I.onDestroy(()=>{this.detachView(I.hostView),dl(this.components,I),J?.unregisterApplication(V)}),this._loadComponent(I),I}tick(){if(this._runningTick)throw new ie(101,!1);try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;dl(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n),this._injector.get(qg,[]).concat(this._bootstrapListeners).forEach(i=>i(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>dl(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new ie(406,!1);const n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return e.\u0275fac=function(n){return new(n||e)(He(uo),He(Ni),He(Qs))},e.\u0275prov=wt({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();function dl(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}function f_(){}let h_=(()=>{class e{}return e.__NG_ELEMENT_ID__=p_,e})();function p_(e){return function g_(e,t,n){if(dr(e)&&!n){const r=rr(e.index,t);return new ta(r,r)}return 47&e.type?new ta(t[16],t):null}(Mn(),Ve(),16==(16&e))}class vm{constructor(){}supports(t){return ra(t)}create(t){return new C_(t)}}const b_=(e,t)=>t;class C_{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||b_}forEachItem(t){let n;for(n=this._itHead;null!==n;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,i=0,l=null;for(;n||r;){const u=!r||n&&n.currentIndex{u=this._trackByFn(i,p),null!==n&&Object.is(n.trackById,u)?(r&&(n=this._verifyReinsertion(n,p,u,i)),Object.is(n.item,p)||this._addIdentityChange(n,p)):(n=this._mismatch(n,p,u,i),r=!0),n=n._next,i++}),this.length=i;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,i){let l;return null===t?l=this._itTail:(l=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,l,i)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(r,i))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,l,i)):t=this._addAfter(new __(n,r),l,i),t}_verifyReinsertion(t,n,r,i){let l=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null);return null!==l?t=this._reinsertAfter(l,t._prev,i):t.currentIndex!=i&&(t.currentIndex=i,this._addToMoves(t,i)),t}_truncate(t){for(;null!==t;){const n=t._next;this._addToRemovals(this._unlink(t)),t=n}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const i=t._prevRemoved,l=t._nextRemoved;return null===i?this._removalsHead=l:i._nextRemoved=l,null===l?this._removalsTail=i:l._prevRemoved=i,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){const i=null===n?this._itHead:n._next;return t._next=i,t._prev=n,null===i?this._itTail=t:i._prev=t,null===n?this._itHead=t:n._next=t,null===this._linkedRecords&&(this._linkedRecords=new ym),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const n=t._prev,r=t._next;return null===n?this._itHead=r:n._next=r,null===r?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new ym),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class __{constructor(t,n){this.item=t,this.trackById=n,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class w_{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;null!==r;r=r._nextDup)if((null===n||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){const n=t._prevDup,r=t._nextDup;return null===n?this._head=r:n._nextDup=r,null===r?this._tail=n:r._prevDup=n,null===this._head}}class ym{constructor(){this.map=new Map}put(t){const n=t.trackById;let r=this.map.get(n);r||(r=new w_,this.map.set(n,r)),r.add(t)}get(t,n){const i=this.map.get(t);return i?i.get(t,n):null}remove(t){const n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function Dm(e,t,n){const r=e.previousIndex;if(null===r)return r;let i=0;return n&&r{if(n&&n.key===i)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{const l=this._getOrCreateRecordForKey(i,r);n=this._insertBeforeOrAppend(n,l)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){const r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){const i=this._records.get(t);this._maybeAddToChanges(i,n);const l=i._prev,u=i._next;return l&&(l._next=u),u&&(u._prev=l),i._next=null,i._prev=null,i}const r=new I_(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}}class I_{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function Cm(){return new Nu([new vm])}let Nu=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(null!=r){const i=r.factories.slice();n=n.concat(i)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||Cm()),deps:[[e,new js,new Hs]]}}find(n){const r=this.factories.find(i=>i.supports(n));if(null!=r)return r;throw new ie(901,!1)}}return e.\u0275prov=wt({token:e,providedIn:"root",factory:Cm}),e})();function _m(){return new Lu([new bm])}let Lu=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(r){const i=r.factories.slice();n=n.concat(i)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||_m()),deps:[[e,new js,new Hs]]}}find(n){const r=this.factories.find(i=>i.supports(n));if(r)return r;throw new ie(901,!1)}}return e.\u0275prov=wt({token:e,providedIn:"root",factory:_m}),e})();const A_=sm(null,"core",[]);let T_=(()=>{class e{constructor(n){}}return e.\u0275fac=function(n){return new(n||e)(He(ul))},e.\u0275mod=vn({type:e}),e.\u0275inj=Kt({}),e})();function x_(e){return"boolean"==typeof e?e:null!=e&&"false"!==e}},433:(Qe,Fe,w)=>{"use strict";w.d(Fe,{u5:()=>wo,JU:()=>E,a5:()=>Vt,JJ:()=>gt,JL:()=>Yt,F:()=>le,On:()=>fo,c5:()=>Lr,Q7:()=>Wr,_Y:()=>ho});var o=w(8274),x=w(6895),N=w(2076),ge=w(9751),R=w(4742),W=w(8421),M=w(3269),U=w(5403),_=w(3268),Y=w(1810),Z=w(4004);let S=(()=>{class C{constructor(c,a){this._renderer=c,this._elementRef=a,this.onChange=g=>{},this.onTouched=()=>{}}setProperty(c,a){this._renderer.setProperty(this._elementRef.nativeElement,c,a)}registerOnTouched(c){this.onTouched=c}registerOnChange(c){this.onChange=c}setDisabledState(c){this.setProperty("disabled",c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(o.Qsj),o.Y36(o.SBq))},C.\u0275dir=o.lG2({type:C}),C})(),B=(()=>{class C extends S{}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,features:[o.qOj]}),C})();const E=new o.OlP("NgValueAccessor"),K={provide:E,useExisting:(0,o.Gpc)(()=>Te),multi:!0},ke=new o.OlP("CompositionEventMode");let Te=(()=>{class C extends S{constructor(c,a,g){super(c,a),this._compositionMode=g,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function pe(){const C=(0,x.q)()?(0,x.q)().getUserAgent():"";return/android (\d+)/.test(C.toLowerCase())}())}writeValue(c){this.setProperty("value",c??"")}_handleInput(c){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(c)}_compositionStart(){this._composing=!0}_compositionEnd(c){this._composing=!1,this._compositionMode&&this.onChange(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(o.Qsj),o.Y36(o.SBq),o.Y36(ke,8))},C.\u0275dir=o.lG2({type:C,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(c,a){1&c&&o.NdJ("input",function(L){return a._handleInput(L.target.value)})("blur",function(){return a.onTouched()})("compositionstart",function(){return a._compositionStart()})("compositionend",function(L){return a._compositionEnd(L.target.value)})},features:[o._Bn([K]),o.qOj]}),C})();function Be(C){return null==C||("string"==typeof C||Array.isArray(C))&&0===C.length}const oe=new o.OlP("NgValidators"),be=new o.OlP("NgAsyncValidators");function O(C){return Be(C.value)?{required:!0}:null}function de(C){return null}function ne(C){return null!=C}function Ee(C){return(0,o.QGY)(C)?(0,N.D)(C):C}function Ce(C){let s={};return C.forEach(c=>{s=null!=c?{...s,...c}:s}),0===Object.keys(s).length?null:s}function ze(C,s){return s.map(c=>c(C))}function et(C){return C.map(s=>function dt(C){return!C.validate}(s)?s:c=>s.validate(c))}function St(C){return null!=C?function Ue(C){if(!C)return null;const s=C.filter(ne);return 0==s.length?null:function(c){return Ce(ze(c,s))}}(et(C)):null}function nn(C){return null!=C?function Ke(C){if(!C)return null;const s=C.filter(ne);return 0==s.length?null:function(c){return function G(...C){const s=(0,M.jO)(C),{args:c,keys:a}=(0,R.D)(C),g=new ge.y(L=>{const{length:Me}=c;if(!Me)return void L.complete();const Je=new Array(Me);let at=Me,Dt=Me;for(let Zt=0;Zt{bn||(bn=!0,Dt--),Je[Zt]=Ve},()=>at--,void 0,()=>{(!at||!bn)&&(Dt||L.next(a?(0,Y.n)(a,Je):Je),L.complete())}))}});return s?g.pipe((0,_.Z)(s)):g}(ze(c,s).map(Ee)).pipe((0,Z.U)(Ce))}}(et(C)):null}function wt(C,s){return null===C?[s]:Array.isArray(C)?[...C,s]:[C,s]}function pn(C){return C?Array.isArray(C)?C:[C]:[]}function Pt(C,s){return Array.isArray(C)?C.includes(s):C===s}function Ut(C,s){const c=pn(s);return pn(C).forEach(g=>{Pt(c,g)||c.push(g)}),c}function it(C,s){return pn(s).filter(c=>!Pt(C,c))}class Xt{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(s){this._rawValidators=s||[],this._composedValidatorFn=St(this._rawValidators)}_setAsyncValidators(s){this._rawAsyncValidators=s||[],this._composedAsyncValidatorFn=nn(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(s){this._onDestroyCallbacks.push(s)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(s=>s()),this._onDestroyCallbacks=[]}reset(s){this.control&&this.control.reset(s)}hasError(s,c){return!!this.control&&this.control.hasError(s,c)}getError(s,c){return this.control?this.control.getError(s,c):null}}class kt extends Xt{get formDirective(){return null}get path(){return null}}class Vt extends Xt{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class rn{constructor(s){this._cd=s}get isTouched(){return!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return!!this._cd?.submitted}}let gt=(()=>{class C extends rn{constructor(c){super(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(Vt,2))},C.\u0275dir=o.lG2({type:C,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(c,a){2&c&&o.ekj("ng-untouched",a.isUntouched)("ng-touched",a.isTouched)("ng-pristine",a.isPristine)("ng-dirty",a.isDirty)("ng-valid",a.isValid)("ng-invalid",a.isInvalid)("ng-pending",a.isPending)},features:[o.qOj]}),C})(),Yt=(()=>{class C extends rn{constructor(c){super(c)}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(kt,10))},C.\u0275dir=o.lG2({type:C,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(c,a){2&c&&o.ekj("ng-untouched",a.isUntouched)("ng-touched",a.isTouched)("ng-pristine",a.isPristine)("ng-dirty",a.isDirty)("ng-valid",a.isValid)("ng-invalid",a.isInvalid)("ng-pending",a.isPending)("ng-submitted",a.isSubmitted)},features:[o.qOj]}),C})();const He="VALID",Ye="INVALID",pt="PENDING",vt="DISABLED";function Ht(C){return(mn(C)?C.validators:C)||null}function tn(C,s){return(mn(s)?s.asyncValidators:C)||null}function mn(C){return null!=C&&!Array.isArray(C)&&"object"==typeof C}class _e{constructor(s,c){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._assignValidators(s),this._assignAsyncValidators(c)}get validator(){return this._composedValidatorFn}set validator(s){this._rawValidators=this._composedValidatorFn=s}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(s){this._rawAsyncValidators=this._composedAsyncValidatorFn=s}get parent(){return this._parent}get valid(){return this.status===He}get invalid(){return this.status===Ye}get pending(){return this.status==pt}get disabled(){return this.status===vt}get enabled(){return this.status!==vt}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(s){this._assignValidators(s)}setAsyncValidators(s){this._assignAsyncValidators(s)}addValidators(s){this.setValidators(Ut(s,this._rawValidators))}addAsyncValidators(s){this.setAsyncValidators(Ut(s,this._rawAsyncValidators))}removeValidators(s){this.setValidators(it(s,this._rawValidators))}removeAsyncValidators(s){this.setAsyncValidators(it(s,this._rawAsyncValidators))}hasValidator(s){return Pt(this._rawValidators,s)}hasAsyncValidator(s){return Pt(this._rawAsyncValidators,s)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(s={}){this.touched=!0,this._parent&&!s.onlySelf&&this._parent.markAsTouched(s)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(s=>s.markAllAsTouched())}markAsUntouched(s={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(c=>{c.markAsUntouched({onlySelf:!0})}),this._parent&&!s.onlySelf&&this._parent._updateTouched(s)}markAsDirty(s={}){this.pristine=!1,this._parent&&!s.onlySelf&&this._parent.markAsDirty(s)}markAsPristine(s={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(c=>{c.markAsPristine({onlySelf:!0})}),this._parent&&!s.onlySelf&&this._parent._updatePristine(s)}markAsPending(s={}){this.status=pt,!1!==s.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!s.onlySelf&&this._parent.markAsPending(s)}disable(s={}){const c=this._parentMarkedDirty(s.onlySelf);this.status=vt,this.errors=null,this._forEachChild(a=>{a.disable({...s,onlySelf:!0})}),this._updateValue(),!1!==s.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors({...s,skipPristineCheck:c}),this._onDisabledChange.forEach(a=>a(!0))}enable(s={}){const c=this._parentMarkedDirty(s.onlySelf);this.status=He,this._forEachChild(a=>{a.enable({...s,onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:s.emitEvent}),this._updateAncestors({...s,skipPristineCheck:c}),this._onDisabledChange.forEach(a=>a(!1))}_updateAncestors(s){this._parent&&!s.onlySelf&&(this._parent.updateValueAndValidity(s),s.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(s){this._parent=s}getRawValue(){return this.value}updateValueAndValidity(s={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===He||this.status===pt)&&this._runAsyncValidator(s.emitEvent)),!1!==s.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!s.onlySelf&&this._parent.updateValueAndValidity(s)}_updateTreeValidity(s={emitEvent:!0}){this._forEachChild(c=>c._updateTreeValidity(s)),this.updateValueAndValidity({onlySelf:!0,emitEvent:s.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?vt:He}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(s){if(this.asyncValidator){this.status=pt,this._hasOwnPendingAsyncValidator=!0;const c=Ee(this.asyncValidator(this));this._asyncValidationSubscription=c.subscribe(a=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(a,{emitEvent:s})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(s,c={}){this.errors=s,this._updateControlsErrors(!1!==c.emitEvent)}get(s){let c=s;return null==c||(Array.isArray(c)||(c=c.split(".")),0===c.length)?null:c.reduce((a,g)=>a&&a._find(g),this)}getError(s,c){const a=c?this.get(c):this;return a&&a.errors?a.errors[s]:null}hasError(s,c){return!!this.getError(s,c)}get root(){let s=this;for(;s._parent;)s=s._parent;return s}_updateControlsErrors(s){this.status=this._calculateStatus(),s&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(s)}_initObservables(){this.valueChanges=new o.vpe,this.statusChanges=new o.vpe}_calculateStatus(){return this._allControlsDisabled()?vt:this.errors?Ye:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(pt)?pt:this._anyControlsHaveStatus(Ye)?Ye:He}_anyControlsHaveStatus(s){return this._anyControls(c=>c.status===s)}_anyControlsDirty(){return this._anyControls(s=>s.dirty)}_anyControlsTouched(){return this._anyControls(s=>s.touched)}_updatePristine(s={}){this.pristine=!this._anyControlsDirty(),this._parent&&!s.onlySelf&&this._parent._updatePristine(s)}_updateTouched(s={}){this.touched=this._anyControlsTouched(),this._parent&&!s.onlySelf&&this._parent._updateTouched(s)}_registerOnCollectionChange(s){this._onCollectionChange=s}_setUpdateStrategy(s){mn(s)&&null!=s.updateOn&&(this._updateOn=s.updateOn)}_parentMarkedDirty(s){return!s&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}_find(s){return null}_assignValidators(s){this._rawValidators=Array.isArray(s)?s.slice():s,this._composedValidatorFn=function _t(C){return Array.isArray(C)?St(C):C||null}(this._rawValidators)}_assignAsyncValidators(s){this._rawAsyncValidators=Array.isArray(s)?s.slice():s,this._composedAsyncValidatorFn=function Ln(C){return Array.isArray(C)?nn(C):C||null}(this._rawAsyncValidators)}}class fe extends _e{constructor(s,c,a){super(Ht(c),tn(a,c)),this.controls=s,this._initObservables(),this._setUpdateStrategy(c),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(s,c){return this.controls[s]?this.controls[s]:(this.controls[s]=c,c.setParent(this),c._registerOnCollectionChange(this._onCollectionChange),c)}addControl(s,c,a={}){this.registerControl(s,c),this.updateValueAndValidity({emitEvent:a.emitEvent}),this._onCollectionChange()}removeControl(s,c={}){this.controls[s]&&this.controls[s]._registerOnCollectionChange(()=>{}),delete this.controls[s],this.updateValueAndValidity({emitEvent:c.emitEvent}),this._onCollectionChange()}setControl(s,c,a={}){this.controls[s]&&this.controls[s]._registerOnCollectionChange(()=>{}),delete this.controls[s],c&&this.registerControl(s,c),this.updateValueAndValidity({emitEvent:a.emitEvent}),this._onCollectionChange()}contains(s){return this.controls.hasOwnProperty(s)&&this.controls[s].enabled}setValue(s,c={}){(function Ft(C,s,c){C._forEachChild((a,g)=>{if(void 0===c[g])throw new o.vHH(1002,"")})})(this,0,s),Object.keys(s).forEach(a=>{(function ln(C,s,c){const a=C.controls;if(!(s?Object.keys(a):a).length)throw new o.vHH(1e3,"");if(!a[c])throw new o.vHH(1001,"")})(this,!0,a),this.controls[a].setValue(s[a],{onlySelf:!0,emitEvent:c.emitEvent})}),this.updateValueAndValidity(c)}patchValue(s,c={}){null!=s&&(Object.keys(s).forEach(a=>{const g=this.controls[a];g&&g.patchValue(s[a],{onlySelf:!0,emitEvent:c.emitEvent})}),this.updateValueAndValidity(c))}reset(s={},c={}){this._forEachChild((a,g)=>{a.reset(s[g],{onlySelf:!0,emitEvent:c.emitEvent})}),this._updatePristine(c),this._updateTouched(c),this.updateValueAndValidity(c)}getRawValue(){return this._reduceChildren({},(s,c,a)=>(s[a]=c.getRawValue(),s))}_syncPendingControls(){let s=this._reduceChildren(!1,(c,a)=>!!a._syncPendingControls()||c);return s&&this.updateValueAndValidity({onlySelf:!0}),s}_forEachChild(s){Object.keys(this.controls).forEach(c=>{const a=this.controls[c];a&&s(a,c)})}_setUpControls(){this._forEachChild(s=>{s.setParent(this),s._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(s){for(const[c,a]of Object.entries(this.controls))if(this.contains(c)&&s(a))return!0;return!1}_reduceValue(){return this._reduceChildren({},(c,a,g)=>((a.enabled||this.disabled)&&(c[g]=a.value),c))}_reduceChildren(s,c){let a=s;return this._forEachChild((g,L)=>{a=c(a,g,L)}),a}_allControlsDisabled(){for(const s of Object.keys(this.controls))if(this.controls[s].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(s){return this.controls.hasOwnProperty(s)?this.controls[s]:null}}const It=new o.OlP("CallSetDisabledState",{providedIn:"root",factory:()=>cn}),cn="always";function sn(C,s,c=cn){$n(C,s),s.valueAccessor.writeValue(C.value),(C.disabled||"always"===c)&&s.valueAccessor.setDisabledState?.(C.disabled),function xn(C,s){s.valueAccessor.registerOnChange(c=>{C._pendingValue=c,C._pendingChange=!0,C._pendingDirty=!0,"change"===C.updateOn&&tr(C,s)})}(C,s),function Ir(C,s){const c=(a,g)=>{s.valueAccessor.writeValue(a),g&&s.viewToModelUpdate(a)};C.registerOnChange(c),s._registerOnDestroy(()=>{C._unregisterOnChange(c)})}(C,s),function vn(C,s){s.valueAccessor.registerOnTouched(()=>{C._pendingTouched=!0,"blur"===C.updateOn&&C._pendingChange&&tr(C,s),"submit"!==C.updateOn&&C.markAsTouched()})}(C,s),function sr(C,s){if(s.valueAccessor.setDisabledState){const c=a=>{s.valueAccessor.setDisabledState(a)};C.registerOnDisabledChange(c),s._registerOnDestroy(()=>{C._unregisterOnDisabledChange(c)})}}(C,s)}function er(C,s){C.forEach(c=>{c.registerOnValidatorChange&&c.registerOnValidatorChange(s)})}function $n(C,s){const c=function Rt(C){return C._rawValidators}(C);null!==s.validator?C.setValidators(wt(c,s.validator)):"function"==typeof c&&C.setValidators([c]);const a=function Kt(C){return C._rawAsyncValidators}(C);null!==s.asyncValidator?C.setAsyncValidators(wt(a,s.asyncValidator)):"function"==typeof a&&C.setAsyncValidators([a]);const g=()=>C.updateValueAndValidity();er(s._rawValidators,g),er(s._rawAsyncValidators,g)}function tr(C,s){C._pendingDirty&&C.markAsDirty(),C.setValue(C._pendingValue,{emitModelToViewChange:!1}),s.viewToModelUpdate(C._pendingValue),C._pendingChange=!1}const Pe={provide:kt,useExisting:(0,o.Gpc)(()=>le)},X=(()=>Promise.resolve())();let le=(()=>{class C extends kt{constructor(c,a,g){super(),this.callSetDisabledState=g,this.submitted=!1,this._directives=new Set,this.ngSubmit=new o.vpe,this.form=new fe({},St(c),nn(a))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(c){X.then(()=>{const a=this._findContainer(c.path);c.control=a.registerControl(c.name,c.control),sn(c.control,c,this.callSetDisabledState),c.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(c)})}getControl(c){return this.form.get(c.path)}removeControl(c){X.then(()=>{const a=this._findContainer(c.path);a&&a.removeControl(c.name),this._directives.delete(c)})}addFormGroup(c){X.then(()=>{const a=this._findContainer(c.path),g=new fe({});(function cr(C,s){$n(C,s)})(g,c),a.registerControl(c.name,g),g.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(c){X.then(()=>{const a=this._findContainer(c.path);a&&a.removeControl(c.name)})}getFormGroup(c){return this.form.get(c.path)}updateModel(c,a){X.then(()=>{this.form.get(c.path).setValue(a)})}setValue(c){this.control.setValue(c)}onSubmit(c){return this.submitted=!0,function F(C,s){C._syncPendingControls(),s.forEach(c=>{const a=c.control;"submit"===a.updateOn&&a._pendingChange&&(c.viewToModelUpdate(a._pendingValue),a._pendingChange=!1)})}(this.form,this._directives),this.ngSubmit.emit(c),"dialog"===c?.target?.method}onReset(){this.resetForm()}resetForm(c){this.form.reset(c),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(c){return c.pop(),c.length?this.form.get(c):this.form}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(oe,10),o.Y36(be,10),o.Y36(It,8))},C.\u0275dir=o.lG2({type:C,selectors:[["form",3,"ngNoForm","",3,"formGroup",""],["ng-form"],["","ngForm",""]],hostBindings:function(c,a){1&c&&o.NdJ("submit",function(L){return a.onSubmit(L)})("reset",function(){return a.onReset()})},inputs:{options:["ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[o._Bn([Pe]),o.qOj]}),C})();function Ie(C,s){const c=C.indexOf(s);c>-1&&C.splice(c,1)}function je(C){return"object"==typeof C&&null!==C&&2===Object.keys(C).length&&"value"in C&&"disabled"in C}const Re=class extends _e{constructor(s=null,c,a){super(Ht(c),tn(a,c)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(s),this._setUpdateStrategy(c),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),mn(c)&&(c.nonNullable||c.initialValueIsDefault)&&(this.defaultValue=je(s)?s.value:s)}setValue(s,c={}){this.value=this._pendingValue=s,this._onChange.length&&!1!==c.emitModelToViewChange&&this._onChange.forEach(a=>a(this.value,!1!==c.emitViewToModelChange)),this.updateValueAndValidity(c)}patchValue(s,c={}){this.setValue(s,c)}reset(s=this.defaultValue,c={}){this._applyFormState(s),this.markAsPristine(c),this.markAsUntouched(c),this.setValue(this.value,c),this._pendingChange=!1}_updateValue(){}_anyControls(s){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(s){this._onChange.push(s)}_unregisterOnChange(s){Ie(this._onChange,s)}registerOnDisabledChange(s){this._onDisabledChange.push(s)}_unregisterOnDisabledChange(s){Ie(this._onDisabledChange,s)}_forEachChild(s){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(s){je(s)?(this.value=this._pendingValue=s.value,s.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=s}},mr={provide:Vt,useExisting:(0,o.Gpc)(()=>fo)},an=(()=>Promise.resolve())();let fo=(()=>{class C extends Vt{constructor(c,a,g,L,Me,Je){super(),this._changeDetectorRef=Me,this.callSetDisabledState=Je,this.control=new Re,this._registered=!1,this.update=new o.vpe,this._parent=c,this._setValidators(a),this._setAsyncValidators(g),this.valueAccessor=function q(C,s){if(!s)return null;let c,a,g;return Array.isArray(s),s.forEach(L=>{L.constructor===Te?c=L:function rt(C){return Object.getPrototypeOf(C.constructor)===B}(L)?a=L:g=L}),g||a||c||null}(0,L)}ngOnChanges(c){if(this._checkForErrors(),!this._registered||"name"in c){if(this._registered&&(this._checkName(),this.formDirective)){const a=c.name.previousValue;this.formDirective.removeControl({name:a,path:this._getPath(a)})}this._setUpControl()}"isDisabled"in c&&this._updateDisabled(c),function Cn(C,s){if(!C.hasOwnProperty("model"))return!1;const c=C.model;return!!c.isFirstChange()||!Object.is(s,c.currentValue)}(c,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(c){this.viewModel=c,this.update.emit(c)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){sn(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(c){an.then(()=>{this.control.setValue(c,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(c){const a=c.isDisabled.currentValue,g=0!==a&&(0,o.D6c)(a);an.then(()=>{g&&!this.control.disabled?this.control.disable():!g&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(c){return this._parent?function Dn(C,s){return[...s.path,C]}(c,this._parent):[c]}}return C.\u0275fac=function(c){return new(c||C)(o.Y36(kt,9),o.Y36(oe,10),o.Y36(be,10),o.Y36(E,10),o.Y36(o.sBO,8),o.Y36(It,8))},C.\u0275dir=o.lG2({type:C,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[o._Bn([mr]),o.qOj,o.TTD]}),C})(),ho=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275dir=o.lG2({type:C,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""]}),C})(),ar=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({}),C})(),hr=(()=>{class C{constructor(){this._validator=de}ngOnChanges(c){if(this.inputName in c){const a=this.normalizeInput(c[this.inputName].currentValue);this._enabled=this.enabled(a),this._validator=this._enabled?this.createValidator(a):de,this._onChange&&this._onChange()}}validate(c){return this._validator(c)}registerOnValidatorChange(c){this._onChange=c}enabled(c){return null!=c}}return C.\u0275fac=function(c){return new(c||C)},C.\u0275dir=o.lG2({type:C,features:[o.TTD]}),C})();const bo={provide:oe,useExisting:(0,o.Gpc)(()=>Wr),multi:!0};let Wr=(()=>{class C extends hr{constructor(){super(...arguments),this.inputName="required",this.normalizeInput=o.D6c,this.createValidator=c=>O}enabled(c){return c}}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,selectors:[["","required","","formControlName","",3,"type","checkbox"],["","required","","formControl","",3,"type","checkbox"],["","required","","ngModel","",3,"type","checkbox"]],hostVars:1,hostBindings:function(c,a){2&c&&o.uIk("required",a._enabled?"":null)},inputs:{required:"required"},features:[o._Bn([bo]),o.qOj]}),C})();const Zn={provide:oe,useExisting:(0,o.Gpc)(()=>Lr),multi:!0};let Lr=(()=>{class C extends hr{constructor(){super(...arguments),this.inputName="pattern",this.normalizeInput=c=>c,this.createValidator=c=>function ue(C){if(!C)return de;let s,c;return"string"==typeof C?(c="","^"!==C.charAt(0)&&(c+="^"),c+=C,"$"!==C.charAt(C.length-1)&&(c+="$"),s=new RegExp(c)):(c=C.toString(),s=C),a=>{if(Be(a.value))return null;const g=a.value;return s.test(g)?null:{pattern:{requiredPattern:c,actualValue:g}}}}(c)}}return C.\u0275fac=function(){let s;return function(a){return(s||(s=o.n5z(C)))(a||C)}}(),C.\u0275dir=o.lG2({type:C,selectors:[["","pattern","","formControlName",""],["","pattern","","formControl",""],["","pattern","","ngModel",""]],hostVars:1,hostBindings:function(c,a){2&c&&o.uIk("pattern",a._enabled?a.pattern:null)},inputs:{pattern:"pattern"},features:[o._Bn([Zn]),o.qOj]}),C})(),Fo=(()=>{class C{}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({imports:[ar]}),C})(),wo=(()=>{class C{static withConfig(c){return{ngModule:C,providers:[{provide:It,useValue:c.callSetDisabledState??cn}]}}}return C.\u0275fac=function(c){return new(c||C)},C.\u0275mod=o.oAB({type:C}),C.\u0275inj=o.cJS({imports:[Fo]}),C})()},1481:(Qe,Fe,w)=>{"use strict";w.d(Fe,{Dx:()=>gt,b2:()=>kt,q6:()=>Pt});var o=w(6895),x=w(8274);class N extends o.w_{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class ge extends N{static makeCurrent(){(0,o.HT)(new ge)}onAndCancel(fe,ee,Se){return fe.addEventListener(ee,Se,!1),()=>{fe.removeEventListener(ee,Se,!1)}}dispatchEvent(fe,ee){fe.dispatchEvent(ee)}remove(fe){fe.parentNode&&fe.parentNode.removeChild(fe)}createElement(fe,ee){return(ee=ee||this.getDefaultDocument()).createElement(fe)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(fe){return fe.nodeType===Node.ELEMENT_NODE}isShadowRoot(fe){return fe instanceof DocumentFragment}getGlobalEventTarget(fe,ee){return"window"===ee?window:"document"===ee?fe:"body"===ee?fe.body:null}getBaseHref(fe){const ee=function W(){return R=R||document.querySelector("base"),R?R.getAttribute("href"):null}();return null==ee?null:function U(_e){M=M||document.createElement("a"),M.setAttribute("href",_e);const fe=M.pathname;return"/"===fe.charAt(0)?fe:`/${fe}`}(ee)}resetBaseElement(){R=null}getUserAgent(){return window.navigator.userAgent}getCookie(fe){return(0,o.Mx)(document.cookie,fe)}}let M,R=null;const _=new x.OlP("TRANSITION_ID"),G=[{provide:x.ip1,useFactory:function Y(_e,fe,ee){return()=>{ee.get(x.CZH).donePromise.then(()=>{const Se=(0,o.q)(),Le=fe.querySelectorAll(`style[ng-transition="${_e}"]`);for(let yt=0;yt{class _e{build(){return new XMLHttpRequest}}return _e.\u0275fac=function(ee){return new(ee||_e)},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const B=new x.OlP("EventManagerPlugins");let E=(()=>{class _e{constructor(ee,Se){this._zone=Se,this._eventNameToPlugin=new Map,ee.forEach(Le=>Le.manager=this),this._plugins=ee.slice().reverse()}addEventListener(ee,Se,Le){return this._findPluginFor(Se).addEventListener(ee,Se,Le)}addGlobalEventListener(ee,Se,Le){return this._findPluginFor(Se).addGlobalEventListener(ee,Se,Le)}getZone(){return this._zone}_findPluginFor(ee){const Se=this._eventNameToPlugin.get(ee);if(Se)return Se;const Le=this._plugins;for(let yt=0;yt{class _e{constructor(){this._stylesSet=new Set}addStyles(ee){const Se=new Set;ee.forEach(Le=>{this._stylesSet.has(Le)||(this._stylesSet.add(Le),Se.add(Le))}),this.onStylesAdded(Se)}onStylesAdded(ee){}getAllStyles(){return Array.from(this._stylesSet)}}return _e.\u0275fac=function(ee){return new(ee||_e)},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})(),K=(()=>{class _e extends P{constructor(ee){super(),this._doc=ee,this._hostNodes=new Map,this._hostNodes.set(ee.head,[])}_addStylesToHost(ee,Se,Le){ee.forEach(yt=>{const It=this._doc.createElement("style");It.textContent=yt,Le.push(Se.appendChild(It))})}addHost(ee){const Se=[];this._addStylesToHost(this._stylesSet,ee,Se),this._hostNodes.set(ee,Se)}removeHost(ee){const Se=this._hostNodes.get(ee);Se&&Se.forEach(pe),this._hostNodes.delete(ee)}onStylesAdded(ee){this._hostNodes.forEach((Se,Le)=>{this._addStylesToHost(ee,Le,Se)})}ngOnDestroy(){this._hostNodes.forEach(ee=>ee.forEach(pe))}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();function pe(_e){(0,o.q)().remove(_e)}const ke={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},Te=/%COMP%/g;function Q(_e,fe,ee){for(let Se=0;Se{if("__ngUnwrap__"===fe)return _e;!1===_e(fe)&&(fe.preventDefault(),fe.returnValue=!1)}}let O=(()=>{class _e{constructor(ee,Se,Le){this.eventManager=ee,this.sharedStylesHost=Se,this.appId=Le,this.rendererByCompId=new Map,this.defaultRenderer=new te(ee)}createRenderer(ee,Se){if(!ee||!Se)return this.defaultRenderer;switch(Se.encapsulation){case x.ifc.Emulated:{let Le=this.rendererByCompId.get(Se.id);return Le||(Le=new ue(this.eventManager,this.sharedStylesHost,Se,this.appId),this.rendererByCompId.set(Se.id,Le)),Le.applyToHost(ee),Le}case 1:case x.ifc.ShadowDom:return new de(this.eventManager,this.sharedStylesHost,ee,Se);default:if(!this.rendererByCompId.has(Se.id)){const Le=Q(Se.id,Se.styles,[]);this.sharedStylesHost.addStyles(Le),this.rendererByCompId.set(Se.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(E),x.LFG(K),x.LFG(x.AFp))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();class te{constructor(fe){this.eventManager=fe,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(fe,ee){return ee?document.createElementNS(ke[ee]||ee,fe):document.createElement(fe)}createComment(fe){return document.createComment(fe)}createText(fe){return document.createTextNode(fe)}appendChild(fe,ee){(De(fe)?fe.content:fe).appendChild(ee)}insertBefore(fe,ee,Se){fe&&(De(fe)?fe.content:fe).insertBefore(ee,Se)}removeChild(fe,ee){fe&&fe.removeChild(ee)}selectRootElement(fe,ee){let Se="string"==typeof fe?document.querySelector(fe):fe;if(!Se)throw new Error(`The selector "${fe}" did not match any elements`);return ee||(Se.textContent=""),Se}parentNode(fe){return fe.parentNode}nextSibling(fe){return fe.nextSibling}setAttribute(fe,ee,Se,Le){if(Le){ee=Le+":"+ee;const yt=ke[Le];yt?fe.setAttributeNS(yt,ee,Se):fe.setAttribute(ee,Se)}else fe.setAttribute(ee,Se)}removeAttribute(fe,ee,Se){if(Se){const Le=ke[Se];Le?fe.removeAttributeNS(Le,ee):fe.removeAttribute(`${Se}:${ee}`)}else fe.removeAttribute(ee)}addClass(fe,ee){fe.classList.add(ee)}removeClass(fe,ee){fe.classList.remove(ee)}setStyle(fe,ee,Se,Le){Le&(x.JOm.DashCase|x.JOm.Important)?fe.style.setProperty(ee,Se,Le&x.JOm.Important?"important":""):fe.style[ee]=Se}removeStyle(fe,ee,Se){Se&x.JOm.DashCase?fe.style.removeProperty(ee):fe.style[ee]=""}setProperty(fe,ee,Se){fe[ee]=Se}setValue(fe,ee){fe.nodeValue=ee}listen(fe,ee,Se){return"string"==typeof fe?this.eventManager.addGlobalEventListener(fe,ee,T(Se)):this.eventManager.addEventListener(fe,ee,T(Se))}}function De(_e){return"TEMPLATE"===_e.tagName&&void 0!==_e.content}class ue extends te{constructor(fe,ee,Se,Le){super(fe),this.component=Se;const yt=Q(Le+"-"+Se.id,Se.styles,[]);ee.addStyles(yt),this.contentAttr=function be(_e){return"_ngcontent-%COMP%".replace(Te,_e)}(Le+"-"+Se.id),this.hostAttr=function Ne(_e){return"_nghost-%COMP%".replace(Te,_e)}(Le+"-"+Se.id)}applyToHost(fe){super.setAttribute(fe,this.hostAttr,"")}createElement(fe,ee){const Se=super.createElement(fe,ee);return super.setAttribute(Se,this.contentAttr,""),Se}}class de extends te{constructor(fe,ee,Se,Le){super(fe),this.sharedStylesHost=ee,this.hostEl=Se,this.shadowRoot=Se.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const yt=Q(Le.id,Le.styles,[]);for(let It=0;It{class _e extends j{constructor(ee){super(ee)}supports(ee){return!0}addEventListener(ee,Se,Le){return ee.addEventListener(Se,Le,!1),()=>this.removeEventListener(ee,Se,Le)}removeEventListener(ee,Se,Le){return ee.removeEventListener(Se,Le)}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const Ee=["alt","control","meta","shift"],Ce={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},ze={alt:_e=>_e.altKey,control:_e=>_e.ctrlKey,meta:_e=>_e.metaKey,shift:_e=>_e.shiftKey};let dt=(()=>{class _e extends j{constructor(ee){super(ee)}supports(ee){return null!=_e.parseEventName(ee)}addEventListener(ee,Se,Le){const yt=_e.parseEventName(Se),It=_e.eventCallback(yt.fullKey,Le,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>(0,o.q)().onAndCancel(ee,yt.domEventName,It))}static parseEventName(ee){const Se=ee.toLowerCase().split("."),Le=Se.shift();if(0===Se.length||"keydown"!==Le&&"keyup"!==Le)return null;const yt=_e._normalizeKey(Se.pop());let It="",cn=Se.indexOf("code");if(cn>-1&&(Se.splice(cn,1),It="code."),Ee.forEach(sn=>{const dn=Se.indexOf(sn);dn>-1&&(Se.splice(dn,1),It+=sn+".")}),It+=yt,0!=Se.length||0===yt.length)return null;const Dn={};return Dn.domEventName=Le,Dn.fullKey=It,Dn}static matchEventFullKeyCode(ee,Se){let Le=Ce[ee.key]||ee.key,yt="";return Se.indexOf("code.")>-1&&(Le=ee.code,yt="code."),!(null==Le||!Le)&&(Le=Le.toLowerCase()," "===Le?Le="space":"."===Le&&(Le="dot"),Ee.forEach(It=>{It!==Le&&(0,ze[It])(ee)&&(yt+=It+".")}),yt+=Le,yt===Se)}static eventCallback(ee,Se,Le){return yt=>{_e.matchEventFullKeyCode(yt,ee)&&Le.runGuarded(()=>Se(yt))}}static _normalizeKey(ee){return"esc"===ee?"escape":ee}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:_e.\u0275fac}),_e})();const Pt=(0,x.eFA)(x._c5,"browser",[{provide:x.Lbi,useValue:o.bD},{provide:x.g9A,useValue:function wt(){ge.makeCurrent()},multi:!0},{provide:o.K0,useFactory:function Kt(){return(0,x.RDi)(document),document},deps:[]}]),Ut=new x.OlP(""),it=[{provide:x.rWj,useClass:class Z{addToWindow(fe){x.dqk.getAngularTestability=(Se,Le=!0)=>{const yt=fe.findTestabilityInTree(Se,Le);if(null==yt)throw new Error("Could not find testability for element.");return yt},x.dqk.getAllAngularTestabilities=()=>fe.getAllTestabilities(),x.dqk.getAllAngularRootElements=()=>fe.getAllRootElements(),x.dqk.frameworkStabilizers||(x.dqk.frameworkStabilizers=[]),x.dqk.frameworkStabilizers.push(Se=>{const Le=x.dqk.getAllAngularTestabilities();let yt=Le.length,It=!1;const cn=function(Dn){It=It||Dn,yt--,0==yt&&Se(It)};Le.forEach(function(Dn){Dn.whenStable(cn)})})}findTestabilityInTree(fe,ee,Se){return null==ee?null:fe.getTestability(ee)??(Se?(0,o.q)().isShadowRoot(ee)?this.findTestabilityInTree(fe,ee.host,!0):this.findTestabilityInTree(fe,ee.parentElement,!0):null)}},deps:[]},{provide:x.lri,useClass:x.dDg,deps:[x.R0b,x.eoX,x.rWj]},{provide:x.dDg,useClass:x.dDg,deps:[x.R0b,x.eoX,x.rWj]}],Xt=[{provide:x.zSh,useValue:"root"},{provide:x.qLn,useFactory:function Rt(){return new x.qLn},deps:[]},{provide:B,useClass:ne,multi:!0,deps:[o.K0,x.R0b,x.Lbi]},{provide:B,useClass:dt,multi:!0,deps:[o.K0]},{provide:O,useClass:O,deps:[E,K,x.AFp]},{provide:x.FYo,useExisting:O},{provide:P,useExisting:K},{provide:K,useClass:K,deps:[o.K0]},{provide:E,useClass:E,deps:[B,x.R0b]},{provide:o.JF,useClass:S,deps:[]},[]];let kt=(()=>{class _e{constructor(ee){}static withServerTransition(ee){return{ngModule:_e,providers:[{provide:x.AFp,useValue:ee.appId},{provide:_,useExisting:x.AFp},G]}}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(Ut,12))},_e.\u0275mod=x.oAB({type:_e}),_e.\u0275inj=x.cJS({providers:[...Xt,...it],imports:[o.ez,x.hGG]}),_e})(),gt=(()=>{class _e{constructor(ee){this._doc=ee}getTitle(){return this._doc.title}setTitle(ee){this._doc.title=ee||""}}return _e.\u0275fac=function(ee){return new(ee||_e)(x.LFG(o.K0))},_e.\u0275prov=x.Yz7({token:_e,factory:function(ee){let Se=null;return Se=ee?new ee:function en(){return new gt((0,x.LFG)(o.K0))}(),Se},providedIn:"root"}),_e})();typeof window<"u"&&window},5472:(Qe,Fe,w)=>{"use strict";w.d(Fe,{gz:()=>Rr,y6:()=>fr,OD:()=>Mt,eC:()=>it,wm:()=>Dl,wN:()=>ya,F0:()=>or,rH:()=>mi,Bz:()=>Zu,Hx:()=>pt});var o=w(8274),x=w(2076),N=w(9646),ge=w(1135);const W=(0,w(3888).d)(f=>function(){f(this),this.name="EmptyError",this.message="no elements in sequence"});var M=w(9751),U=w(4742),_=w(4671),Y=w(3268),G=w(3269),Z=w(1810),S=w(5403),B=w(9672);function E(...f){const h=(0,G.yG)(f),d=(0,G.jO)(f),{args:m,keys:b}=(0,U.D)(f);if(0===m.length)return(0,x.D)([],h);const $=new M.y(function j(f,h,d=_.y){return m=>{P(h,()=>{const{length:b}=f,$=new Array(b);let z=b,ve=b;for(let We=0;We{const ft=(0,x.D)(f[We],h);let bt=!1;ft.subscribe((0,S.x)(m,jt=>{$[We]=jt,bt||(bt=!0,ve--),ve||m.next(d($.slice()))},()=>{--z||m.complete()}))},m)},m)}}(m,h,b?z=>(0,Z.n)(b,z):_.y));return d?$.pipe((0,Y.Z)(d)):$}function P(f,h,d){f?(0,B.f)(d,f,h):h()}var K=w(8189);function ke(...f){return function pe(){return(0,K.J)(1)}()((0,x.D)(f,(0,G.yG)(f)))}var Te=w(8421);function ie(f){return new M.y(h=>{(0,Te.Xf)(f()).subscribe(h)})}var Be=w(9635),re=w(576);function oe(f,h){const d=(0,re.m)(f)?f:()=>f,m=b=>b.error(d());return new M.y(h?b=>h.schedule(m,0,b):m)}var be=w(515),Ne=w(727),Q=w(4482);function T(){return(0,Q.e)((f,h)=>{let d=null;f._refCount++;const m=(0,S.x)(h,void 0,void 0,void 0,()=>{if(!f||f._refCount<=0||0<--f._refCount)return void(d=null);const b=f._connection,$=d;d=null,b&&(!$||b===$)&&b.unsubscribe(),h.unsubscribe()});f.subscribe(m),m.closed||(d=f.connect())})}class k extends M.y{constructor(h,d){super(),this.source=h,this.subjectFactory=d,this._subject=null,this._refCount=0,this._connection=null,(0,Q.A)(h)&&(this.lift=h.lift)}_subscribe(h){return this.getSubject().subscribe(h)}getSubject(){const h=this._subject;return(!h||h.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:h}=this;this._subject=this._connection=null,h?.unsubscribe()}connect(){let h=this._connection;if(!h){h=this._connection=new Ne.w0;const d=this.getSubject();h.add(this.source.subscribe((0,S.x)(d,void 0,()=>{this._teardown(),d.complete()},m=>{this._teardown(),d.error(m)},()=>this._teardown()))),h.closed&&(this._connection=null,h=Ne.w0.EMPTY)}return h}refCount(){return T()(this)}}var O=w(7579),te=w(6895),ce=w(4004),Ae=w(3900),De=w(5698),de=w(9300),ne=w(5577);function Ee(f){return(0,Q.e)((h,d)=>{let m=!1;h.subscribe((0,S.x)(d,b=>{m=!0,d.next(b)},()=>{m||d.next(f),d.complete()}))})}function Ce(f=ze){return(0,Q.e)((h,d)=>{let m=!1;h.subscribe((0,S.x)(d,b=>{m=!0,d.next(b)},()=>m?d.complete():d.error(f())))})}function ze(){return new W}function dt(f,h){const d=arguments.length>=2;return m=>m.pipe(f?(0,de.h)((b,$)=>f(b,$,m)):_.y,(0,De.q)(1),d?Ee(h):Ce(()=>new W))}var et=w(4351),Ue=w(8505);function St(f){return(0,Q.e)((h,d)=>{let $,m=null,b=!1;m=h.subscribe((0,S.x)(d,void 0,void 0,z=>{$=(0,Te.Xf)(f(z,St(f)(h))),m?(m.unsubscribe(),m=null,$.subscribe(d)):b=!0})),b&&(m.unsubscribe(),m=null,$.subscribe(d))})}function Ke(f,h,d,m,b){return($,z)=>{let ve=d,We=h,ft=0;$.subscribe((0,S.x)(z,bt=>{const jt=ft++;We=ve?f(We,bt,jt):(ve=!0,bt),m&&z.next(We)},b&&(()=>{ve&&z.next(We),z.complete()})))}}function nn(f,h){return(0,Q.e)(Ke(f,h,arguments.length>=2,!0))}function wt(f){return f<=0?()=>be.E:(0,Q.e)((h,d)=>{let m=[];h.subscribe((0,S.x)(d,b=>{m.push(b),f{for(const b of m)d.next(b);d.complete()},void 0,()=>{m=null}))})}function Rt(f,h){const d=arguments.length>=2;return m=>m.pipe(f?(0,de.h)((b,$)=>f(b,$,m)):_.y,wt(1),d?Ee(h):Ce(()=>new W))}var Kt=w(2529),Pt=w(8746),Ut=w(1481);const it="primary",Xt=Symbol("RouteTitle");class kt{constructor(h){this.params=h||{}}has(h){return Object.prototype.hasOwnProperty.call(this.params,h)}get(h){if(this.has(h)){const d=this.params[h];return Array.isArray(d)?d[0]:d}return null}getAll(h){if(this.has(h)){const d=this.params[h];return Array.isArray(d)?d:[d]}return[]}get keys(){return Object.keys(this.params)}}function Vt(f){return new kt(f)}function rn(f,h,d){const m=d.path.split("/");if(m.length>f.length||"full"===d.pathMatch&&(h.hasChildren()||m.lengthm[$]===b)}return f===h}function Yt(f){return Array.prototype.concat.apply([],f)}function ht(f){return f.length>0?f[f.length-1]:null}function Et(f,h){for(const d in f)f.hasOwnProperty(d)&&h(f[d],d)}function ut(f){return(0,o.CqO)(f)?f:(0,o.QGY)(f)?(0,x.D)(Promise.resolve(f)):(0,N.of)(f)}const Ct=!1,qe={exact:function Hn(f,h,d){if(!He(f.segments,h.segments)||!Xn(f.segments,h.segments,d)||f.numberOfChildren!==h.numberOfChildren)return!1;for(const m in h.children)if(!f.children[m]||!Hn(f.children[m],h.children[m],d))return!1;return!0},subset:Er},on={exact:function Nt(f,h){return en(f,h)},subset:function zt(f,h){return Object.keys(h).length<=Object.keys(f).length&&Object.keys(h).every(d=>gt(f[d],h[d]))},ignored:()=>!0};function gn(f,h,d){return qe[d.paths](f.root,h.root,d.matrixParams)&&on[d.queryParams](f.queryParams,h.queryParams)&&!("exact"===d.fragment&&f.fragment!==h.fragment)}function Er(f,h,d){return jn(f,h,h.segments,d)}function jn(f,h,d,m){if(f.segments.length>d.length){const b=f.segments.slice(0,d.length);return!(!He(b,d)||h.hasChildren()||!Xn(b,d,m))}if(f.segments.length===d.length){if(!He(f.segments,d)||!Xn(f.segments,d,m))return!1;for(const b in h.children)if(!f.children[b]||!Er(f.children[b],h.children[b],m))return!1;return!0}{const b=d.slice(0,f.segments.length),$=d.slice(f.segments.length);return!!(He(f.segments,b)&&Xn(f.segments,b,m)&&f.children[it])&&jn(f.children[it],h,$,m)}}function Xn(f,h,d){return h.every((m,b)=>on[d](f[b].parameters,m.parameters))}class En{constructor(h=new xe([],{}),d={},m=null){this.root=h,this.queryParams=d,this.fragment=m}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Vt(this.queryParams)),this._queryParamMap}toString(){return Ht.serialize(this)}}class xe{constructor(h,d){this.segments=h,this.children=d,this.parent=null,Et(d,(m,b)=>m.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return _t(this)}}class se{constructor(h,d){this.path=h,this.parameters=d}get parameterMap(){return this._parameterMap||(this._parameterMap=Vt(this.parameters)),this._parameterMap}toString(){return ee(this)}}function He(f,h){return f.length===h.length&&f.every((d,m)=>d.path===h[m].path)}let pt=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return new vt},providedIn:"root"}),f})();class vt{parse(h){const d=new er(h);return new En(d.parseRootSegment(),d.parseQueryParams(),d.parseFragment())}serialize(h){const d=`/${tn(h.root,!0)}`,m=function Le(f){const h=Object.keys(f).map(d=>{const m=f[d];return Array.isArray(m)?m.map(b=>`${mn(d)}=${mn(b)}`).join("&"):`${mn(d)}=${mn(m)}`}).filter(d=>!!d);return h.length?`?${h.join("&")}`:""}(h.queryParams);return`${d}${m}${"string"==typeof h.fragment?`#${function ln(f){return encodeURI(f)}(h.fragment)}`:""}`}}const Ht=new vt;function _t(f){return f.segments.map(h=>ee(h)).join("/")}function tn(f,h){if(!f.hasChildren())return _t(f);if(h){const d=f.children[it]?tn(f.children[it],!1):"",m=[];return Et(f.children,(b,$)=>{$!==it&&m.push(`${$}:${tn(b,!1)}`)}),m.length>0?`${d}(${m.join("//")})`:d}{const d=function Ye(f,h){let d=[];return Et(f.children,(m,b)=>{b===it&&(d=d.concat(h(m,b)))}),Et(f.children,(m,b)=>{b!==it&&(d=d.concat(h(m,b)))}),d}(f,(m,b)=>b===it?[tn(f.children[it],!1)]:[`${b}:${tn(m,!1)}`]);return 1===Object.keys(f.children).length&&null!=f.children[it]?`${_t(f)}/${d[0]}`:`${_t(f)}/(${d.join("//")})`}}function Ln(f){return encodeURIComponent(f).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function mn(f){return Ln(f).replace(/%3B/gi,";")}function Ft(f){return Ln(f).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function _e(f){return decodeURIComponent(f)}function fe(f){return _e(f.replace(/\+/g,"%20"))}function ee(f){return`${Ft(f.path)}${function Se(f){return Object.keys(f).map(h=>`;${Ft(h)}=${Ft(f[h])}`).join("")}(f.parameters)}`}const yt=/^[^\/()?;=#]+/;function It(f){const h=f.match(yt);return h?h[0]:""}const cn=/^[^=?&#]+/,sn=/^[^&#]+/;class er{constructor(h){this.url=h,this.remaining=h}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new xe([],{}):new xe([],this.parseChildren())}parseQueryParams(){const h={};if(this.consumeOptional("?"))do{this.parseQueryParam(h)}while(this.consumeOptional("&"));return h}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const h=[];for(this.peekStartsWith("(")||h.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),h.push(this.parseSegment());let d={};this.peekStartsWith("/(")&&(this.capture("/"),d=this.parseParens(!0));let m={};return this.peekStartsWith("(")&&(m=this.parseParens(!1)),(h.length>0||Object.keys(d).length>0)&&(m[it]=new xe(h,d)),m}parseSegment(){const h=It(this.remaining);if(""===h&&this.peekStartsWith(";"))throw new o.vHH(4009,Ct);return this.capture(h),new se(_e(h),this.parseMatrixParams())}parseMatrixParams(){const h={};for(;this.consumeOptional(";");)this.parseParam(h);return h}parseParam(h){const d=It(this.remaining);if(!d)return;this.capture(d);let m="";if(this.consumeOptional("=")){const b=It(this.remaining);b&&(m=b,this.capture(m))}h[_e(d)]=_e(m)}parseQueryParam(h){const d=function Dn(f){const h=f.match(cn);return h?h[0]:""}(this.remaining);if(!d)return;this.capture(d);let m="";if(this.consumeOptional("=")){const z=function dn(f){const h=f.match(sn);return h?h[0]:""}(this.remaining);z&&(m=z,this.capture(m))}const b=fe(d),$=fe(m);if(h.hasOwnProperty(b)){let z=h[b];Array.isArray(z)||(z=[z],h[b]=z),z.push($)}else h[b]=$}parseParens(h){const d={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const m=It(this.remaining),b=this.remaining[m.length];if("/"!==b&&")"!==b&&";"!==b)throw new o.vHH(4010,Ct);let $;m.indexOf(":")>-1?($=m.slice(0,m.indexOf(":")),this.capture($),this.capture(":")):h&&($=it);const z=this.parseChildren();d[$]=1===Object.keys(z).length?z[it]:new xe([],z),this.consumeOptional("//")}return d}peekStartsWith(h){return this.remaining.startsWith(h)}consumeOptional(h){return!!this.peekStartsWith(h)&&(this.remaining=this.remaining.substring(h.length),!0)}capture(h){if(!this.consumeOptional(h))throw new o.vHH(4011,Ct)}}function sr(f){return f.segments.length>0?new xe([],{[it]:f}):f}function $n(f){const h={};for(const m of Object.keys(f.children)){const $=$n(f.children[m]);($.segments.length>0||$.hasChildren())&&(h[m]=$)}return function Tn(f){if(1===f.numberOfChildren&&f.children[it]){const h=f.children[it];return new xe(f.segments.concat(h.segments),h.children)}return f}(new xe(f.segments,h))}function xn(f){return f instanceof En}function gr(f,h,d,m,b){if(0===d.length)return Qt(h.root,h.root,h.root,m,b);const $=function Cn(f){if("string"==typeof f[0]&&1===f.length&&"/"===f[0])return new On(!0,0,f);let h=0,d=!1;const m=f.reduce((b,$,z)=>{if("object"==typeof $&&null!=$){if($.outlets){const ve={};return Et($.outlets,(We,ft)=>{ve[ft]="string"==typeof We?We.split("/"):We}),[...b,{outlets:ve}]}if($.segmentPath)return[...b,$.segmentPath]}return"string"!=typeof $?[...b,$]:0===z?($.split("/").forEach((ve,We)=>{0==We&&"."===ve||(0==We&&""===ve?d=!0:".."===ve?h++:""!=ve&&b.push(ve))}),b):[...b,$]},[]);return new On(d,h,m)}(d);return $.toRoot()?Qt(h.root,h.root,new xe([],{}),m,b):function z(We){const ft=function q(f,h,d,m){if(f.isAbsolute)return new rt(h.root,!0,0);if(-1===m)return new rt(d,d===h.root,0);return function he(f,h,d){let m=f,b=h,$=d;for(;$>b;){if($-=b,m=m.parent,!m)throw new o.vHH(4005,!1);b=m.segments.length}return new rt(m,!1,b-$)}(d,m+($t(f.commands[0])?0:1),f.numberOfDoubleDots)}($,h,f.snapshot?._urlSegment,We),bt=ft.processChildren?X(ft.segmentGroup,ft.index,$.commands):Pe(ft.segmentGroup,ft.index,$.commands);return Qt(h.root,ft.segmentGroup,bt,m,b)}(f.snapshot?._lastPathIndex)}function $t(f){return"object"==typeof f&&null!=f&&!f.outlets&&!f.segmentPath}function fn(f){return"object"==typeof f&&null!=f&&f.outlets}function Qt(f,h,d,m,b){let z,$={};m&&Et(m,(We,ft)=>{$[ft]=Array.isArray(We)?We.map(bt=>`${bt}`):`${We}`}),z=f===h?d:Un(f,h,d);const ve=sr($n(z));return new En(ve,$,b)}function Un(f,h,d){const m={};return Et(f.children,(b,$)=>{m[$]=b===h?d:Un(b,h,d)}),new xe(f.segments,m)}class On{constructor(h,d,m){if(this.isAbsolute=h,this.numberOfDoubleDots=d,this.commands=m,h&&m.length>0&&$t(m[0]))throw new o.vHH(4003,!1);const b=m.find(fn);if(b&&b!==ht(m))throw new o.vHH(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class rt{constructor(h,d,m){this.segmentGroup=h,this.processChildren=d,this.index=m}}function Pe(f,h,d){if(f||(f=new xe([],{})),0===f.segments.length&&f.hasChildren())return X(f,h,d);const m=function le(f,h,d){let m=0,b=h;const $={match:!1,pathIndex:0,commandIndex:0};for(;b=d.length)return $;const z=f.segments[b],ve=d[m];if(fn(ve))break;const We=`${ve}`,ft=m0&&void 0===We)break;if(We&&ft&&"object"==typeof ft&&void 0===ft.outlets){if(!ot(We,ft,z))return $;m+=2}else{if(!ot(We,{},z))return $;m++}b++}return{match:!0,pathIndex:b,commandIndex:m}}(f,h,d),b=d.slice(m.commandIndex);if(m.match&&m.pathIndex{"string"==typeof $&&($=[$]),null!==$&&(b[z]=Pe(f.children[z],h,$))}),Et(f.children,($,z)=>{void 0===m[z]&&(b[z]=$)}),new xe(f.segments,b)}}function Ie(f,h,d){const m=f.segments.slice(0,h);let b=0;for(;b{"string"==typeof d&&(d=[d]),null!==d&&(h[m]=Ie(new xe([],{}),0,d))}),h}function Re(f){const h={};return Et(f,(d,m)=>h[m]=`${d}`),h}function ot(f,h,d){return f==d.path&&en(h,d.parameters)}class st{constructor(h,d){this.id=h,this.url=d}}class Mt extends st{constructor(h,d,m="imperative",b=null){super(h,d),this.type=0,this.navigationTrigger=m,this.restoredState=b}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class Wt extends st{constructor(h,d,m){super(h,d),this.urlAfterRedirects=m,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class Bt extends st{constructor(h,d,m,b){super(h,d),this.reason=m,this.code=b,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class An extends st{constructor(h,d,m,b){super(h,d),this.error=m,this.target=b,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class Rn extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Pn extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class ur extends st{constructor(h,d,m,b,$){super(h,d),this.urlAfterRedirects=m,this.state=b,this.shouldActivate=$,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class mr extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class an extends st{constructor(h,d,m,b){super(h,d),this.urlAfterRedirects=m,this.state=b,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class fo{constructor(h){this.route=h,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class ho{constructor(h){this.route=h,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class Zr{constructor(h){this.snapshot=h,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class jr{constructor(h){this.snapshot=h,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class xr{constructor(h){this.snapshot=h,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Or{constructor(h){this.snapshot=h,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class ar{constructor(h,d,m){this.routerEvent=h,this.position=d,this.anchor=m,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class po{constructor(h){this._root=h}get root(){return this._root.value}parent(h){const d=this.pathFromRoot(h);return d.length>1?d[d.length-2]:null}children(h){const d=Fn(h,this._root);return d?d.children.map(m=>m.value):[]}firstChild(h){const d=Fn(h,this._root);return d&&d.children.length>0?d.children[0].value:null}siblings(h){const d=zn(h,this._root);return d.length<2?[]:d[d.length-2].children.map(b=>b.value).filter(b=>b!==h)}pathFromRoot(h){return zn(h,this._root).map(d=>d.value)}}function Fn(f,h){if(f===h.value)return h;for(const d of h.children){const m=Fn(f,d);if(m)return m}return null}function zn(f,h){if(f===h.value)return[h];for(const d of h.children){const m=zn(f,d);if(m.length)return m.unshift(h),m}return[]}class qn{constructor(h,d){this.value=h,this.children=d}toString(){return`TreeNode(${this.value})`}}function dr(f){const h={};return f&&f.children.forEach(d=>h[d.value.outlet]=d),h}class Sr extends po{constructor(h,d){super(h),this.snapshot=d,vo(this,h)}toString(){return this.snapshot.toString()}}function Gn(f,h){const d=function go(f,h){const z=new Pr([],{},{},"",{},it,h,null,f.root,-1,{});return new xo("",new qn(z,[]))}(f,h),m=new ge.X([new se("",{})]),b=new ge.X({}),$=new ge.X({}),z=new ge.X({}),ve=new ge.X(""),We=new Rr(m,b,z,ve,$,it,h,d.root);return We.snapshot=d.root,new Sr(new qn(We,[]),d)}class Rr{constructor(h,d,m,b,$,z,ve,We){this.url=h,this.params=d,this.queryParams=m,this.fragment=b,this.data=$,this.outlet=z,this.component=ve,this.title=this.data?.pipe((0,ce.U)(ft=>ft[Xt]))??(0,N.of)(void 0),this._futureSnapshot=We}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe((0,ce.U)(h=>Vt(h)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe((0,ce.U)(h=>Vt(h)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function vr(f,h="emptyOnly"){const d=f.pathFromRoot;let m=0;if("always"!==h)for(m=d.length-1;m>=1;){const b=d[m],$=d[m-1];if(b.routeConfig&&""===b.routeConfig.path)m--;else{if($.component)break;m--}}return function mo(f){return f.reduce((h,d)=>({params:{...h.params,...d.params},data:{...h.data,...d.data},resolve:{...d.data,...h.resolve,...d.routeConfig?.data,...d._resolvedData}}),{params:{},data:{},resolve:{}})}(d.slice(m))}class Pr{constructor(h,d,m,b,$,z,ve,We,ft,bt,jt){this.url=h,this.params=d,this.queryParams=m,this.fragment=b,this.data=$,this.outlet=z,this.component=ve,this.routeConfig=We,this._urlSegment=ft,this._lastPathIndex=bt,this._resolve=jt}get title(){return this.data?.[Xt]}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=Vt(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Vt(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(m=>m.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class xo extends po{constructor(h,d){super(d),this.url=h,vo(this,d)}toString(){return yo(this._root)}}function vo(f,h){h.value._routerState=f,h.children.forEach(d=>vo(f,d))}function yo(f){const h=f.children.length>0?` { ${f.children.map(yo).join(", ")} } `:"";return`${f.value}${h}`}function Oo(f){if(f.snapshot){const h=f.snapshot,d=f._futureSnapshot;f.snapshot=d,en(h.queryParams,d.queryParams)||f.queryParams.next(d.queryParams),h.fragment!==d.fragment&&f.fragment.next(d.fragment),en(h.params,d.params)||f.params.next(d.params),function Vn(f,h){if(f.length!==h.length)return!1;for(let d=0;den(d.parameters,h[m].parameters))}(f.url,h.url);return d&&!(!f.parent!=!h.parent)&&(!f.parent||Jr(f.parent,h.parent))}function Fr(f,h,d){if(d&&f.shouldReuseRoute(h.value,d.value.snapshot)){const m=d.value;m._futureSnapshot=h.value;const b=function Yo(f,h,d){return h.children.map(m=>{for(const b of d.children)if(f.shouldReuseRoute(m.value,b.value.snapshot))return Fr(f,m,b);return Fr(f,m)})}(f,h,d);return new qn(m,b)}{if(f.shouldAttach(h.value)){const $=f.retrieve(h.value);if(null!==$){const z=$.route;return z.value._futureSnapshot=h.value,z.children=h.children.map(ve=>Fr(f,ve)),z}}const m=function si(f){return new Rr(new ge.X(f.url),new ge.X(f.params),new ge.X(f.queryParams),new ge.X(f.fragment),new ge.X(f.data),f.outlet,f.component,f)}(h.value),b=h.children.map($=>Fr(f,$));return new qn(m,b)}}const Ro="ngNavigationCancelingError";function Ur(f,h){const{redirectTo:d,navigationBehaviorOptions:m}=xn(h)?{redirectTo:h,navigationBehaviorOptions:void 0}:h,b=zr(!1,0,h);return b.url=d,b.navigationBehaviorOptions=m,b}function zr(f,h,d){const m=new Error("NavigationCancelingError: "+(f||""));return m[Ro]=!0,m.cancellationCode=h,d&&(m.url=d),m}function Do(f){return Gr(f)&&xn(f.url)}function Gr(f){return f&&f[Ro]}class Yr{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.injector=null,this.children=new fr,this.attachRef=null}}let fr=(()=>{class f{constructor(){this.contexts=new Map}onChildOutletCreated(d,m){const b=this.getOrCreateContext(d);b.outlet=m,this.contexts.set(d,b)}onChildOutletDestroyed(d){const m=this.getContext(d);m&&(m.outlet=null,m.attachRef=null)}onOutletDeactivated(){const d=this.contexts;return this.contexts=new Map,d}onOutletReAttached(d){this.contexts=d}getOrCreateContext(d){let m=this.getContext(d);return m||(m=new Yr,this.contexts.set(d,m)),m}getContext(d){return this.contexts.get(d)||null}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const hr=!1;let ai=(()=>{class f{constructor(){this.activated=null,this._activatedRoute=null,this.name=it,this.activateEvents=new o.vpe,this.deactivateEvents=new o.vpe,this.attachEvents=new o.vpe,this.detachEvents=new o.vpe,this.parentContexts=(0,o.f3M)(fr),this.location=(0,o.f3M)(o.s_b),this.changeDetector=(0,o.f3M)(o.sBO),this.environmentInjector=(0,o.f3M)(o.lqb)}ngOnChanges(d){if(d.name){const{firstChange:m,previousValue:b}=d.name;if(m)return;this.isTrackedInParentContexts(b)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(b)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name)}isTrackedInParentContexts(d){return this.parentContexts.getContext(d)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const d=this.parentContexts.getContext(this.name);d?.route&&(d.attachRef?this.attach(d.attachRef,d.route):this.activateWith(d.route,d.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new o.vHH(4012,hr);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new o.vHH(4012,hr);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new o.vHH(4012,hr);this.location.detach();const d=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(d.instance),d}attach(d,m){this.activated=d,this._activatedRoute=m,this.location.insert(d.hostView),this.attachEvents.emit(d.instance)}deactivate(){if(this.activated){const d=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(d)}}activateWith(d,m){if(this.isActivated)throw new o.vHH(4013,hr);this._activatedRoute=d;const b=this.location,z=d.snapshot.component,ve=this.parentContexts.getOrCreateContext(this.name).children,We=new nr(d,ve,b.injector);if(m&&function li(f){return!!f.resolveComponentFactory}(m)){const ft=m.resolveComponentFactory(z);this.activated=b.createComponent(ft,b.length,We)}else this.activated=b.createComponent(z,{index:b.length,injector:We,environmentInjector:m??this.environmentInjector});this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275dir=o.lG2({type:f,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[o.TTD]}),f})();class nr{constructor(h,d,m){this.route=h,this.childContexts=d,this.parent=m}get(h,d){return h===Rr?this.route:h===fr?this.childContexts:this.parent.get(h,d)}}let kr=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275cmp=o.Xpm({type:f,selectors:[["ng-component"]],standalone:!0,features:[o.jDz],decls:1,vars:0,template:function(d,m){1&d&&o._UZ(0,"router-outlet")},dependencies:[ai],encapsulation:2}),f})();function bo(f,h){return f.providers&&!f._injector&&(f._injector=(0,o.MMx)(f.providers,h,`Route: ${f.path}`)),f._injector??h}function Nr(f){const h=f.children&&f.children.map(Nr),d=h?{...f,children:h}:{...f};return!d.component&&!d.loadComponent&&(h||d.loadChildren)&&d.outlet&&d.outlet!==it&&(d.component=kr),d}function Zn(f){return f.outlet||it}function Lr(f,h){const d=f.filter(m=>Zn(m)===h);return d.push(...f.filter(m=>Zn(m)!==h)),d}function Po(f){if(!f)return null;if(f.routeConfig?._injector)return f.routeConfig._injector;for(let h=f.parent;h;h=h.parent){const d=h.routeConfig;if(d?._loadedInjector)return d._loadedInjector;if(d?._injector)return d._injector}return null}class Sn{constructor(h,d,m,b){this.routeReuseStrategy=h,this.futureState=d,this.currState=m,this.forwardEvent=b}activate(h){const d=this.futureState._root,m=this.currState?this.currState._root:null;this.deactivateChildRoutes(d,m,h),Oo(this.futureState.root),this.activateChildRoutes(d,m,h)}deactivateChildRoutes(h,d,m){const b=dr(d);h.children.forEach($=>{const z=$.value.outlet;this.deactivateRoutes($,b[z],m),delete b[z]}),Et(b,($,z)=>{this.deactivateRouteAndItsChildren($,m)})}deactivateRoutes(h,d,m){const b=h.value,$=d?d.value:null;if(b===$)if(b.component){const z=m.getContext(b.outlet);z&&this.deactivateChildRoutes(h,d,z.children)}else this.deactivateChildRoutes(h,d,m);else $&&this.deactivateRouteAndItsChildren(d,m)}deactivateRouteAndItsChildren(h,d){h.value.component&&this.routeReuseStrategy.shouldDetach(h.value.snapshot)?this.detachAndStoreRouteSubtree(h,d):this.deactivateRouteAndOutlet(h,d)}detachAndStoreRouteSubtree(h,d){const m=d.getContext(h.value.outlet),b=m&&h.value.component?m.children:d,$=dr(h);for(const z of Object.keys($))this.deactivateRouteAndItsChildren($[z],b);if(m&&m.outlet){const z=m.outlet.detach(),ve=m.children.onOutletDeactivated();this.routeReuseStrategy.store(h.value.snapshot,{componentRef:z,route:h,contexts:ve})}}deactivateRouteAndOutlet(h,d){const m=d.getContext(h.value.outlet),b=m&&h.value.component?m.children:d,$=dr(h);for(const z of Object.keys($))this.deactivateRouteAndItsChildren($[z],b);m&&m.outlet&&(m.outlet.deactivate(),m.children.onOutletDeactivated(),m.attachRef=null,m.resolver=null,m.route=null)}activateChildRoutes(h,d,m){const b=dr(d);h.children.forEach($=>{this.activateRoutes($,b[$.value.outlet],m),this.forwardEvent(new Or($.value.snapshot))}),h.children.length&&this.forwardEvent(new jr(h.value.snapshot))}activateRoutes(h,d,m){const b=h.value,$=d?d.value:null;if(Oo(b),b===$)if(b.component){const z=m.getOrCreateContext(b.outlet);this.activateChildRoutes(h,d,z.children)}else this.activateChildRoutes(h,d,m);else if(b.component){const z=m.getOrCreateContext(b.outlet);if(this.routeReuseStrategy.shouldAttach(b.snapshot)){const ve=this.routeReuseStrategy.retrieve(b.snapshot);this.routeReuseStrategy.store(b.snapshot,null),z.children.onOutletReAttached(ve.contexts),z.attachRef=ve.componentRef,z.route=ve.route.value,z.outlet&&z.outlet.attach(ve.componentRef,ve.route.value),Oo(ve.route.value),this.activateChildRoutes(h,null,z.children)}else{const ve=Po(b.snapshot),We=ve?.get(o._Vd)??null;z.attachRef=null,z.route=b,z.resolver=We,z.injector=ve,z.outlet&&z.outlet.activateWith(b,z.injector),this.activateChildRoutes(h,null,z.children)}}else this.activateChildRoutes(h,null,m)}}class Fo{constructor(h){this.path=h,this.route=this.path[this.path.length-1]}}class wo{constructor(h,d){this.component=h,this.route=d}}function ko(f,h,d){const m=f._root;return Kr(m,h?h._root:null,d,[m.value])}function to(f,h){const d=Symbol(),m=h.get(f,d);return m===d?"function"!=typeof f||(0,o.Z0I)(f)?h.get(f):f:m}function Kr(f,h,d,m,b={canDeactivateChecks:[],canActivateChecks:[]}){const $=dr(h);return f.children.forEach(z=>{(function no(f,h,d,m,b={canDeactivateChecks:[],canActivateChecks:[]}){const $=f.value,z=h?h.value:null,ve=d?d.getContext(f.value.outlet):null;if(z&&$.routeConfig===z.routeConfig){const We=function rr(f,h,d){if("function"==typeof d)return d(f,h);switch(d){case"pathParamsChange":return!He(f.url,h.url);case"pathParamsOrQueryParamsChange":return!He(f.url,h.url)||!en(f.queryParams,h.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Jr(f,h)||!en(f.queryParams,h.queryParams);default:return!Jr(f,h)}}(z,$,$.routeConfig.runGuardsAndResolvers);We?b.canActivateChecks.push(new Fo(m)):($.data=z.data,$._resolvedData=z._resolvedData),Kr(f,h,$.component?ve?ve.children:null:d,m,b),We&&ve&&ve.outlet&&ve.outlet.isActivated&&b.canDeactivateChecks.push(new wo(ve.outlet.component,z))}else z&&ro(h,ve,b),b.canActivateChecks.push(new Fo(m)),Kr(f,null,$.component?ve?ve.children:null:d,m,b)})(z,$[z.value.outlet],d,m.concat([z.value]),b),delete $[z.value.outlet]}),Et($,(z,ve)=>ro(z,d.getContext(ve),b)),b}function ro(f,h,d){const m=dr(f),b=f.value;Et(m,($,z)=>{ro($,b.component?h?h.children.getContext(z):null:h,d)}),d.canDeactivateChecks.push(new wo(b.component&&h&&h.outlet&&h.outlet.isActivated?h.outlet.component:null,b))}function hn(f){return"function"==typeof f}function Je(f){return f instanceof W||"EmptyError"===f?.name}const at=Symbol("INITIAL_VALUE");function Dt(){return(0,Ae.w)(f=>E(f.map(h=>h.pipe((0,De.q)(1),function ue(...f){const h=(0,G.yG)(f);return(0,Q.e)((d,m)=>{(h?ke(f,d,h):ke(f,d)).subscribe(m)})}(at)))).pipe((0,ce.U)(h=>{for(const d of h)if(!0!==d){if(d===at)return at;if(!1===d||d instanceof En)return d}return!0}),(0,de.h)(h=>h!==at),(0,De.q)(1)))}function br(f){return(0,Be.z)((0,Ue.b)(h=>{if(xn(h))throw Ur(0,h)}),(0,ce.U)(h=>!0===h))}const ci={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function ga(f,h,d,m,b){const $=Gi(f,h,d);return $.matched?function zi(f,h,d,m){const b=h.canMatch;if(!b||0===b.length)return(0,N.of)(!0);const $=b.map(z=>{const ve=to(z,f);return ut(function g(f){return f&&hn(f.canMatch)}(ve)?ve.canMatch(h,d):f.runInContext(()=>ve(h,d)))});return(0,N.of)($).pipe(Dt(),br())}(m=bo(h,m),h,d).pipe((0,ce.U)(z=>!0===z?$:{...ci})):(0,N.of)($)}function Gi(f,h,d){if(""===h.path)return"full"===h.pathMatch&&(f.hasChildren()||d.length>0)?{...ci}:{matched:!0,consumedSegments:[],remainingSegments:d,parameters:{},positionalParamSegments:{}};const b=(h.matcher||rn)(d,f,h);if(!b)return{...ci};const $={};Et(b.posParams,(ve,We)=>{$[We]=ve.path});const z=b.consumed.length>0?{...$,...b.consumed[b.consumed.length-1].parameters}:$;return{matched:!0,consumedSegments:b.consumed,remainingSegments:d.slice(b.consumed.length),parameters:z,positionalParamSegments:b.posParams??{}}}function Yi(f,h,d,m){if(d.length>0&&function oo(f,h,d){return d.some(m=>io(f,h,m)&&Zn(m)!==it)}(f,d,m)){const $=new xe(h,function lr(f,h,d,m){const b={};b[it]=m,m._sourceSegment=f,m._segmentIndexShift=h.length;for(const $ of d)if(""===$.path&&Zn($)!==it){const z=new xe([],{});z._sourceSegment=f,z._segmentIndexShift=h.length,b[Zn($)]=z}return b}(f,h,m,new xe(d,f.children)));return $._sourceSegment=f,$._segmentIndexShift=h.length,{segmentGroup:$,slicedSegments:[]}}if(0===d.length&&function As(f,h,d){return d.some(m=>io(f,h,m))}(f,d,m)){const $=new xe(f.segments,function Ms(f,h,d,m,b){const $={};for(const z of m)if(io(f,d,z)&&!b[Zn(z)]){const ve=new xe([],{});ve._sourceSegment=f,ve._segmentIndexShift=h.length,$[Zn(z)]=ve}return{...b,...$}}(f,h,d,m,f.children));return $._sourceSegment=f,$._segmentIndexShift=h.length,{segmentGroup:$,slicedSegments:d}}const b=new xe(f.segments,f.children);return b._sourceSegment=f,b._segmentIndexShift=h.length,{segmentGroup:b,slicedSegments:d}}function io(f,h,d){return(!(f.hasChildren()||h.length>0)||"full"!==d.pathMatch)&&""===d.path}function Br(f,h,d,m){return!!(Zn(f)===m||m!==it&&io(h,d,f))&&("**"===f.path||Gi(h,f,d).matched)}function Ts(f,h,d){return 0===h.length&&!f.children[d]}const qo=!1;class ui{constructor(h){this.segmentGroup=h||null}}class xs{constructor(h){this.urlTree=h}}function No(f){return oe(new ui(f))}function Mi(f){return oe(new xs(f))}class Rs{constructor(h,d,m,b,$){this.injector=h,this.configLoader=d,this.urlSerializer=m,this.urlTree=b,this.config=$,this.allowRedirects=!0}apply(){const h=Yi(this.urlTree.root,[],[],this.config).segmentGroup,d=new xe(h.segments,h.children);return this.expandSegmentGroup(this.injector,this.config,d,it).pipe((0,ce.U)($=>this.createUrlTree($n($),this.urlTree.queryParams,this.urlTree.fragment))).pipe(St($=>{if($ instanceof xs)return this.allowRedirects=!1,this.match($.urlTree);throw $ instanceof ui?this.noMatchError($):$}))}match(h){return this.expandSegmentGroup(this.injector,this.config,h.root,it).pipe((0,ce.U)(b=>this.createUrlTree($n(b),h.queryParams,h.fragment))).pipe(St(b=>{throw b instanceof ui?this.noMatchError(b):b}))}noMatchError(h){return new o.vHH(4002,qo)}createUrlTree(h,d,m){const b=sr(h);return new En(b,d,m)}expandSegmentGroup(h,d,m,b){return 0===m.segments.length&&m.hasChildren()?this.expandChildren(h,d,m).pipe((0,ce.U)($=>new xe([],$))):this.expandSegment(h,m,d,m.segments,b,!0)}expandChildren(h,d,m){const b=[];for(const $ of Object.keys(m.children))"primary"===$?b.unshift($):b.push($);return(0,x.D)(b).pipe((0,et.b)($=>{const z=m.children[$],ve=Lr(d,$);return this.expandSegmentGroup(h,ve,z,$).pipe((0,ce.U)(We=>({segment:We,outlet:$})))}),nn(($,z)=>($[z.outlet]=z.segment,$),{}),Rt())}expandSegment(h,d,m,b,$,z){return(0,x.D)(m).pipe((0,et.b)(ve=>this.expandSegmentAgainstRoute(h,d,m,ve,b,$,z).pipe(St(ft=>{if(ft instanceof ui)return(0,N.of)(null);throw ft}))),dt(ve=>!!ve),St((ve,We)=>{if(Je(ve))return Ts(d,b,$)?(0,N.of)(new xe([],{})):No(d);throw ve}))}expandSegmentAgainstRoute(h,d,m,b,$,z,ve){return Br(b,d,$,z)?void 0===b.redirectTo?this.matchSegmentAgainstRoute(h,d,b,$,z):ve&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z):No(d):No(d)}expandSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z){return"**"===b.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(h,m,b,z):this.expandRegularSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z)}expandWildCardWithParamsAgainstRouteUsingRedirect(h,d,m,b){const $=this.applyRedirectCommands([],m.redirectTo,{});return m.redirectTo.startsWith("/")?Mi($):this.lineralizeSegments(m,$).pipe((0,ne.z)(z=>{const ve=new xe(z,{});return this.expandSegment(h,ve,d,z,b,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(h,d,m,b,$,z){const{matched:ve,consumedSegments:We,remainingSegments:ft,positionalParamSegments:bt}=Gi(d,b,$);if(!ve)return No(d);const jt=this.applyRedirectCommands(We,b.redirectTo,bt);return b.redirectTo.startsWith("/")?Mi(jt):this.lineralizeSegments(b,jt).pipe((0,ne.z)(wn=>this.expandSegment(h,d,m,wn.concat(ft),z,!1)))}matchSegmentAgainstRoute(h,d,m,b,$){return"**"===m.path?(h=bo(m,h),m.loadChildren?(m._loadedRoutes?(0,N.of)({routes:m._loadedRoutes,injector:m._loadedInjector}):this.configLoader.loadChildren(h,m)).pipe((0,ce.U)(ve=>(m._loadedRoutes=ve.routes,m._loadedInjector=ve.injector,new xe(b,{})))):(0,N.of)(new xe(b,{}))):ga(d,m,b,h).pipe((0,Ae.w)(({matched:z,consumedSegments:ve,remainingSegments:We})=>z?this.getChildConfig(h=m._injector??h,m,b).pipe((0,ne.z)(bt=>{const jt=bt.injector??h,wn=bt.routes,{segmentGroup:lo,slicedSegments:$o}=Yi(d,ve,We,wn),Ci=new xe(lo.segments,lo.children);if(0===$o.length&&Ci.hasChildren())return this.expandChildren(jt,wn,Ci).pipe((0,ce.U)(_i=>new xe(ve,_i)));if(0===wn.length&&0===$o.length)return(0,N.of)(new xe(ve,{}));const Hr=Zn(m)===$;return this.expandSegment(jt,Ci,wn,$o,Hr?it:$,!0).pipe((0,ce.U)(Ri=>new xe(ve.concat(Ri.segments),Ri.children)))})):No(d)))}getChildConfig(h,d,m){return d.children?(0,N.of)({routes:d.children,injector:h}):d.loadChildren?void 0!==d._loadedRoutes?(0,N.of)({routes:d._loadedRoutes,injector:d._loadedInjector}):function Xo(f,h,d,m){const b=h.canLoad;if(void 0===b||0===b.length)return(0,N.of)(!0);const $=b.map(z=>{const ve=to(z,f);return ut(function C(f){return f&&hn(f.canLoad)}(ve)?ve.canLoad(h,d):f.runInContext(()=>ve(h,d)))});return(0,N.of)($).pipe(Dt(),br())}(h,d,m).pipe((0,ne.z)(b=>b?this.configLoader.loadChildren(h,d).pipe((0,Ue.b)($=>{d._loadedRoutes=$.routes,d._loadedInjector=$.injector})):function Wi(f){return oe(zr(qo,3))}())):(0,N.of)({routes:[],injector:h})}lineralizeSegments(h,d){let m=[],b=d.root;for(;;){if(m=m.concat(b.segments),0===b.numberOfChildren)return(0,N.of)(m);if(b.numberOfChildren>1||!b.children[it])return oe(new o.vHH(4e3,qo));b=b.children[it]}}applyRedirectCommands(h,d,m){return this.applyRedirectCreateUrlTree(d,this.urlSerializer.parse(d),h,m)}applyRedirectCreateUrlTree(h,d,m,b){const $=this.createSegmentGroup(h,d.root,m,b);return new En($,this.createQueryParams(d.queryParams,this.urlTree.queryParams),d.fragment)}createQueryParams(h,d){const m={};return Et(h,(b,$)=>{if("string"==typeof b&&b.startsWith(":")){const ve=b.substring(1);m[$]=d[ve]}else m[$]=b}),m}createSegmentGroup(h,d,m,b){const $=this.createSegments(h,d.segments,m,b);let z={};return Et(d.children,(ve,We)=>{z[We]=this.createSegmentGroup(h,ve,m,b)}),new xe($,z)}createSegments(h,d,m,b){return d.map($=>$.path.startsWith(":")?this.findPosParam(h,$,b):this.findOrReturn($,m))}findPosParam(h,d,m){const b=m[d.path.substring(1)];if(!b)throw new o.vHH(4001,qo);return b}findOrReturn(h,d){let m=0;for(const b of d){if(b.path===h.path)return d.splice(m),b;m++}return h}}class A{}class ae{constructor(h,d,m,b,$,z,ve){this.injector=h,this.rootComponentType=d,this.config=m,this.urlTree=b,this.url=$,this.paramsInheritanceStrategy=z,this.urlSerializer=ve}recognize(){const h=Yi(this.urlTree.root,[],[],this.config.filter(d=>void 0===d.redirectTo)).segmentGroup;return this.processSegmentGroup(this.injector,this.config,h,it).pipe((0,ce.U)(d=>{if(null===d)return null;const m=new Pr([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},it,this.rootComponentType,null,this.urlTree.root,-1,{}),b=new qn(m,d),$=new xo(this.url,b);return this.inheritParamsAndData($._root),$}))}inheritParamsAndData(h){const d=h.value,m=vr(d,this.paramsInheritanceStrategy);d.params=Object.freeze(m.params),d.data=Object.freeze(m.data),h.children.forEach(b=>this.inheritParamsAndData(b))}processSegmentGroup(h,d,m,b){return 0===m.segments.length&&m.hasChildren()?this.processChildren(h,d,m):this.processSegment(h,d,m,m.segments,b)}processChildren(h,d,m){return(0,x.D)(Object.keys(m.children)).pipe((0,et.b)(b=>{const $=m.children[b],z=Lr(d,b);return this.processSegmentGroup(h,z,$,b)}),nn((b,$)=>b&&$?(b.push(...$),b):null),(0,Kt.o)(b=>null!==b),Ee(null),Rt(),(0,ce.U)(b=>{if(null===b)return null;const $=qt(b);return function $e(f){f.sort((h,d)=>h.value.outlet===it?-1:d.value.outlet===it?1:h.value.outlet.localeCompare(d.value.outlet))}($),$}))}processSegment(h,d,m,b,$){return(0,x.D)(d).pipe((0,et.b)(z=>this.processSegmentAgainstRoute(z._injector??h,z,m,b,$)),dt(z=>!!z),St(z=>{if(Je(z))return Ts(m,b,$)?(0,N.of)([]):(0,N.of)(null);throw z}))}processSegmentAgainstRoute(h,d,m,b,$){if(d.redirectTo||!Br(d,m,b,$))return(0,N.of)(null);let z;if("**"===d.path){const ve=b.length>0?ht(b).parameters:{},We=Jt(m)+b.length,ft=new Pr(b,ve,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,yn(d),Zn(d),d.component??d._loadedComponent??null,d,un(m),We,Wn(d));z=(0,N.of)({snapshot:ft,consumedSegments:[],remainingSegments:[]})}else z=ga(m,d,b,h).pipe((0,ce.U)(({matched:ve,consumedSegments:We,remainingSegments:ft,parameters:bt})=>{if(!ve)return null;const jt=Jt(m)+We.length;return{snapshot:new Pr(We,bt,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,yn(d),Zn(d),d.component??d._loadedComponent??null,d,un(m),jt,Wn(d)),consumedSegments:We,remainingSegments:ft}}));return z.pipe((0,Ae.w)(ve=>{if(null===ve)return(0,N.of)(null);const{snapshot:We,consumedSegments:ft,remainingSegments:bt}=ve;h=d._injector??h;const jt=d._loadedInjector??h,wn=function Xe(f){return f.children?f.children:f.loadChildren?f._loadedRoutes:[]}(d),{segmentGroup:lo,slicedSegments:$o}=Yi(m,ft,bt,wn.filter(Hr=>void 0===Hr.redirectTo));if(0===$o.length&&lo.hasChildren())return this.processChildren(jt,wn,lo).pipe((0,ce.U)(Hr=>null===Hr?null:[new qn(We,Hr)]));if(0===wn.length&&0===$o.length)return(0,N.of)([new qn(We,[])]);const Ci=Zn(d)===$;return this.processSegment(jt,wn,lo,$o,Ci?it:$).pipe((0,ce.U)(Hr=>null===Hr?null:[new qn(We,Hr)]))}))}}function lt(f){const h=f.value.routeConfig;return h&&""===h.path&&void 0===h.redirectTo}function qt(f){const h=[],d=new Set;for(const m of f){if(!lt(m)){h.push(m);continue}const b=h.find($=>m.value.routeConfig===$.value.routeConfig);void 0!==b?(b.children.push(...m.children),d.add(b)):h.push(m)}for(const m of d){const b=qt(m.children);h.push(new qn(m.value,b))}return h.filter(m=>!d.has(m))}function un(f){let h=f;for(;h._sourceSegment;)h=h._sourceSegment;return h}function Jt(f){let h=f,d=h._segmentIndexShift??0;for(;h._sourceSegment;)h=h._sourceSegment,d+=h._segmentIndexShift??0;return d-1}function yn(f){return f.data||{}}function Wn(f){return f.resolve||{}}function Ai(f){return"string"==typeof f.title||null===f.title}function so(f){return(0,Ae.w)(h=>{const d=f(h);return d?(0,x.D)(d).pipe((0,ce.U)(()=>h)):(0,N.of)(h)})}class gl{constructor(h){this.router=h,this.currentNavigation=null}setupNavigations(h){const d=this.router.events;return h.pipe((0,de.h)(m=>0!==m.id),(0,ce.U)(m=>({...m,extractedUrl:this.router.urlHandlingStrategy.extract(m.rawUrl)})),(0,Ae.w)(m=>{let b=!1,$=!1;return(0,N.of)(m).pipe((0,Ue.b)(z=>{this.currentNavigation={id:z.id,initialUrl:z.rawUrl,extractedUrl:z.extractedUrl,trigger:z.source,extras:z.extras,previousNavigation:this.router.lastSuccessfulNavigation?{...this.router.lastSuccessfulNavigation,previousNavigation:null}:null}}),(0,Ae.w)(z=>{const ve=this.router.browserUrlTree.toString(),We=!this.router.navigated||z.extractedUrl.toString()!==ve||ve!==this.router.currentUrlTree.toString();if(("reload"===this.router.onSameUrlNavigation||We)&&this.router.urlHandlingStrategy.shouldProcessUrl(z.rawUrl))return va(z.source)&&(this.router.browserUrlTree=z.extractedUrl),(0,N.of)(z).pipe((0,Ae.w)(bt=>{const jt=this.router.transitions.getValue();return d.next(new Mt(bt.id,this.router.serializeUrl(bt.extractedUrl),bt.source,bt.restoredState)),jt!==this.router.transitions.getValue()?be.E:Promise.resolve(bt)}),function Ki(f,h,d,m){return(0,Ae.w)(b=>function ma(f,h,d,m,b){return new Rs(f,h,d,m,b).apply()}(f,h,d,b.extractedUrl,m).pipe((0,ce.U)($=>({...b,urlAfterRedirects:$}))))}(this.router.ngModule.injector,this.router.configLoader,this.router.urlSerializer,this.router.config),(0,Ue.b)(bt=>{this.currentNavigation={...this.currentNavigation,finalUrl:bt.urlAfterRedirects},m.urlAfterRedirects=bt.urlAfterRedirects}),function Eo(f,h,d,m,b){return(0,ne.z)($=>function H(f,h,d,m,b,$,z="emptyOnly"){return new ae(f,h,d,m,b,z,$).recognize().pipe((0,Ae.w)(ve=>null===ve?function D(f){return new M.y(h=>h.error(f))}(new A):(0,N.of)(ve)))}(f,h,d,$.urlAfterRedirects,m.serialize($.urlAfterRedirects),m,b).pipe((0,ce.U)(z=>({...$,targetSnapshot:z}))))}(this.router.ngModule.injector,this.router.rootComponentType,this.router.config,this.router.urlSerializer,this.router.paramsInheritanceStrategy),(0,Ue.b)(bt=>{if(m.targetSnapshot=bt.targetSnapshot,"eager"===this.router.urlUpdateStrategy){if(!bt.extras.skipLocationChange){const wn=this.router.urlHandlingStrategy.merge(bt.urlAfterRedirects,bt.rawUrl);this.router.setBrowserUrl(wn,bt)}this.router.browserUrlTree=bt.urlAfterRedirects}const jt=new Rn(bt.id,this.router.serializeUrl(bt.extractedUrl),this.router.serializeUrl(bt.urlAfterRedirects),bt.targetSnapshot);d.next(jt)}));if(We&&this.router.rawUrlTree&&this.router.urlHandlingStrategy.shouldProcessUrl(this.router.rawUrlTree)){const{id:jt,extractedUrl:wn,source:lo,restoredState:$o,extras:Ci}=z,Hr=new Mt(jt,this.router.serializeUrl(wn),lo,$o);d.next(Hr);const Cr=Gn(wn,this.router.rootComponentType).snapshot;return m={...z,targetSnapshot:Cr,urlAfterRedirects:wn,extras:{...Ci,skipLocationChange:!1,replaceUrl:!1}},(0,N.of)(m)}return this.router.rawUrlTree=z.rawUrl,z.resolve(null),be.E}),(0,Ue.b)(z=>{const ve=new Pn(z.id,this.router.serializeUrl(z.extractedUrl),this.router.serializeUrl(z.urlAfterRedirects),z.targetSnapshot);this.router.triggerEvent(ve)}),(0,ce.U)(z=>m={...z,guards:ko(z.targetSnapshot,z.currentSnapshot,this.router.rootContexts)}),function Zt(f,h){return(0,ne.z)(d=>{const{targetSnapshot:m,currentSnapshot:b,guards:{canActivateChecks:$,canDeactivateChecks:z}}=d;return 0===z.length&&0===$.length?(0,N.of)({...d,guardsResult:!0}):function bn(f,h,d,m){return(0,x.D)(f).pipe((0,ne.z)(b=>function $r(f,h,d,m,b){const $=h&&h.routeConfig?h.routeConfig.canDeactivate:null;if(!$||0===$.length)return(0,N.of)(!0);const z=$.map(ve=>{const We=Po(h)??b,ft=to(ve,We);return ut(function a(f){return f&&hn(f.canDeactivate)}(ft)?ft.canDeactivate(f,h,d,m):We.runInContext(()=>ft(f,h,d,m))).pipe(dt())});return(0,N.of)(z).pipe(Dt())}(b.component,b.route,d,h,m)),dt(b=>!0!==b,!0))}(z,m,b,f).pipe((0,ne.z)(ve=>ve&&function Ui(f){return"boolean"==typeof f}(ve)?function Ve(f,h,d,m){return(0,x.D)(h).pipe((0,et.b)(b=>ke(function yr(f,h){return null!==f&&h&&h(new Zr(f)),(0,N.of)(!0)}(b.route.parent,m),function At(f,h){return null!==f&&h&&h(new xr(f)),(0,N.of)(!0)}(b.route,m),function Mn(f,h,d){const m=h[h.length-1],$=h.slice(0,h.length-1).reverse().map(z=>function Jn(f){const h=f.routeConfig?f.routeConfig.canActivateChild:null;return h&&0!==h.length?{node:f,guards:h}:null}(z)).filter(z=>null!==z).map(z=>ie(()=>{const ve=z.guards.map(We=>{const ft=Po(z.node)??d,bt=to(We,ft);return ut(function c(f){return f&&hn(f.canActivateChild)}(bt)?bt.canActivateChild(m,f):ft.runInContext(()=>bt(m,f))).pipe(dt())});return(0,N.of)(ve).pipe(Dt())}));return(0,N.of)($).pipe(Dt())}(f,b.path,d),function Dr(f,h,d){const m=h.routeConfig?h.routeConfig.canActivate:null;if(!m||0===m.length)return(0,N.of)(!0);const b=m.map($=>ie(()=>{const z=Po(h)??d,ve=to($,z);return ut(function s(f){return f&&hn(f.canActivate)}(ve)?ve.canActivate(h,f):z.runInContext(()=>ve(h,f))).pipe(dt())}));return(0,N.of)(b).pipe(Dt())}(f,b.route,d))),dt(b=>!0!==b,!0))}(m,$,f,h):(0,N.of)(ve)),(0,ce.U)(ve=>({...d,guardsResult:ve})))})}(this.router.ngModule.injector,z=>this.router.triggerEvent(z)),(0,Ue.b)(z=>{if(m.guardsResult=z.guardsResult,xn(z.guardsResult))throw Ur(0,z.guardsResult);const ve=new ur(z.id,this.router.serializeUrl(z.extractedUrl),this.router.serializeUrl(z.urlAfterRedirects),z.targetSnapshot,!!z.guardsResult);this.router.triggerEvent(ve)}),(0,de.h)(z=>!!z.guardsResult||(this.router.restoreHistory(z),this.router.cancelNavigationTransition(z,"",3),!1)),so(z=>{if(z.guards.canActivateChecks.length)return(0,N.of)(z).pipe((0,Ue.b)(ve=>{const We=new mr(ve.id,this.router.serializeUrl(ve.extractedUrl),this.router.serializeUrl(ve.urlAfterRedirects),ve.targetSnapshot);this.router.triggerEvent(We)}),(0,Ae.w)(ve=>{let We=!1;return(0,N.of)(ve).pipe(function pr(f,h){return(0,ne.z)(d=>{const{targetSnapshot:m,guards:{canActivateChecks:b}}=d;if(!b.length)return(0,N.of)(d);let $=0;return(0,x.D)(b).pipe((0,et.b)(z=>function Vr(f,h,d,m){const b=f.routeConfig,$=f._resolve;return void 0!==b?.title&&!Ai(b)&&($[Xt]=b.title),function Mr(f,h,d,m){const b=function Lo(f){return[...Object.keys(f),...Object.getOwnPropertySymbols(f)]}(f);if(0===b.length)return(0,N.of)({});const $={};return(0,x.D)(b).pipe((0,ne.z)(z=>function di(f,h,d,m){const b=Po(h)??m,$=to(f,b);return ut($.resolve?$.resolve(h,d):b.runInContext(()=>$(h,d)))}(f[z],h,d,m).pipe(dt(),(0,Ue.b)(ve=>{$[z]=ve}))),wt(1),function pn(f){return(0,ce.U)(()=>f)}($),St(z=>Je(z)?be.E:oe(z)))}($,f,h,m).pipe((0,ce.U)(z=>(f._resolvedData=z,f.data=vr(f,d).resolve,b&&Ai(b)&&(f.data[Xt]=b.title),null)))}(z.route,m,f,h)),(0,Ue.b)(()=>$++),wt(1),(0,ne.z)(z=>$===b.length?(0,N.of)(d):be.E))})}(this.router.paramsInheritanceStrategy,this.router.ngModule.injector),(0,Ue.b)({next:()=>We=!0,complete:()=>{We||(this.router.restoreHistory(ve),this.router.cancelNavigationTransition(ve,"",2))}}))}),(0,Ue.b)(ve=>{const We=new an(ve.id,this.router.serializeUrl(ve.extractedUrl),this.router.serializeUrl(ve.urlAfterRedirects),ve.targetSnapshot);this.router.triggerEvent(We)}))}),so(z=>{const ve=We=>{const ft=[];We.routeConfig?.loadComponent&&!We.routeConfig._loadedComponent&&ft.push(this.router.configLoader.loadComponent(We.routeConfig).pipe((0,Ue.b)(bt=>{We.component=bt}),(0,ce.U)(()=>{})));for(const bt of We.children)ft.push(...ve(bt));return ft};return E(ve(z.targetSnapshot.root)).pipe(Ee(),(0,De.q)(1))}),so(()=>this.router.afterPreactivation()),(0,ce.U)(z=>{const ve=function Go(f,h,d){const m=Fr(f,h._root,d?d._root:void 0);return new Sr(m,h)}(this.router.routeReuseStrategy,z.targetSnapshot,z.currentRouterState);return m={...z,targetRouterState:ve}}),(0,Ue.b)(z=>{this.router.currentUrlTree=z.urlAfterRedirects,this.router.rawUrlTree=this.router.urlHandlingStrategy.merge(z.urlAfterRedirects,z.rawUrl),this.router.routerState=z.targetRouterState,"deferred"===this.router.urlUpdateStrategy&&(z.extras.skipLocationChange||this.router.setBrowserUrl(this.router.rawUrlTree,z),this.router.browserUrlTree=z.urlAfterRedirects)}),((f,h,d)=>(0,ce.U)(m=>(new Sn(h,m.targetRouterState,m.currentRouterState,d).activate(f),m)))(this.router.rootContexts,this.router.routeReuseStrategy,z=>this.router.triggerEvent(z)),(0,Ue.b)({next(){b=!0},complete(){b=!0}}),(0,Pt.x)(()=>{b||$||this.router.cancelNavigationTransition(m,"",1),this.currentNavigation?.id===m.id&&(this.currentNavigation=null)}),St(z=>{if($=!0,Gr(z)){Do(z)||(this.router.navigated=!0,this.router.restoreHistory(m,!0));const ve=new Bt(m.id,this.router.serializeUrl(m.extractedUrl),z.message,z.cancellationCode);if(d.next(ve),Do(z)){const We=this.router.urlHandlingStrategy.merge(z.url,this.router.rawUrlTree),ft={skipLocationChange:m.extras.skipLocationChange,replaceUrl:"eager"===this.router.urlUpdateStrategy||va(m.source)};this.router.scheduleNavigation(We,"imperative",null,ft,{resolve:m.resolve,reject:m.reject,promise:m.promise})}else m.resolve(!1)}else{this.router.restoreHistory(m,!0);const ve=new An(m.id,this.router.serializeUrl(m.extractedUrl),z,m.targetSnapshot??void 0);d.next(ve);try{m.resolve(this.router.errorHandler(z))}catch(We){m.reject(We)}}return be.E}))}))}}function va(f){return"imperative"!==f}let hi=(()=>{class f{buildTitle(d){let m,b=d.root;for(;void 0!==b;)m=this.getResolvedTitleForRoute(b)??m,b=b.children.find($=>$.outlet===it);return m}getResolvedTitleForRoute(d){return d.data[Xt]}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(Ps)},providedIn:"root"}),f})(),Ps=(()=>{class f extends hi{constructor(d){super(),this.title=d}updateTitle(d){const m=this.buildTitle(d);void 0!==m&&this.title.setTitle(m)}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(Ut.Dx))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})(),ya=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(Wu)},providedIn:"root"}),f})();class ml{shouldDetach(h){return!1}store(h,d){}shouldAttach(h){return!1}retrieve(h){return null}shouldReuseRoute(h,d){return h.routeConfig===d.routeConfig}}let Wu=(()=>{class f extends ml{}return f.\u0275fac=function(){let h;return function(m){return(h||(h=o.n5z(f)))(m||f)}}(),f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const pi=new o.OlP("",{providedIn:"root",factory:()=>({})}),ao=new o.OlP("ROUTES");let Xi=(()=>{class f{constructor(d,m){this.injector=d,this.compiler=m,this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap}loadComponent(d){if(this.componentLoaders.get(d))return this.componentLoaders.get(d);if(d._loadedComponent)return(0,N.of)(d._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(d);const m=ut(d.loadComponent()).pipe((0,ce.U)(Zo),(0,Ue.b)($=>{this.onLoadEndListener&&this.onLoadEndListener(d),d._loadedComponent=$}),(0,Pt.x)(()=>{this.componentLoaders.delete(d)})),b=new k(m,()=>new O.x).pipe(T());return this.componentLoaders.set(d,b),b}loadChildren(d,m){if(this.childrenLoaders.get(m))return this.childrenLoaders.get(m);if(m._loadedRoutes)return(0,N.of)({routes:m._loadedRoutes,injector:m._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(m);const $=this.loadModuleFactoryOrRoutes(m.loadChildren).pipe((0,ce.U)(ve=>{this.onLoadEndListener&&this.onLoadEndListener(m);let We,ft,bt=!1;Array.isArray(ve)?ft=ve:(We=ve.create(d).injector,ft=Yt(We.get(ao,[],o.XFs.Self|o.XFs.Optional)));return{routes:ft.map(Nr),injector:We}}),(0,Pt.x)(()=>{this.childrenLoaders.delete(m)})),z=new k($,()=>new O.x).pipe(T());return this.childrenLoaders.set(m,z),z}loadModuleFactoryOrRoutes(d){return ut(d()).pipe((0,ce.U)(Zo),(0,ne.z)(b=>b instanceof o.YKP||Array.isArray(b)?(0,N.of)(b):(0,x.D)(this.compiler.compileModuleAsync(b))))}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(o.zs3),o.LFG(o.Sil))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();function Zo(f){return function ba(f){return f&&"object"==typeof f&&"default"in f}(f)?f.default:f}let vl=(()=>{class f{}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:function(){return(0,o.f3M)(gi)},providedIn:"root"}),f})(),gi=(()=>{class f{shouldProcessUrl(d){return!0}extract(d){return d}merge(d,m){return d}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();function Zi(f){throw f}function Xu(f,h,d){return h.parse("/")}const Ca={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},_a={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};function Xr(){const f=(0,o.f3M)(pt),h=(0,o.f3M)(fr),d=(0,o.f3M)(te.Ye),m=(0,o.f3M)(o.zs3),b=(0,o.f3M)(o.Sil),$=(0,o.f3M)(ao,{optional:!0})??[],z=(0,o.f3M)(pi,{optional:!0})??{},ve=new or(null,f,h,d,m,b,Yt($));return function yl(f,h){f.errorHandler&&(h.errorHandler=f.errorHandler),f.malformedUriErrorHandler&&(h.malformedUriErrorHandler=f.malformedUriErrorHandler),f.onSameUrlNavigation&&(h.onSameUrlNavigation=f.onSameUrlNavigation),f.paramsInheritanceStrategy&&(h.paramsInheritanceStrategy=f.paramsInheritanceStrategy),f.urlUpdateStrategy&&(h.urlUpdateStrategy=f.urlUpdateStrategy),f.canceledNavigationResolution&&(h.canceledNavigationResolution=f.canceledNavigationResolution)}(z,ve),ve}let or=(()=>{class f{constructor(d,m,b,$,z,ve,We){this.rootComponentType=d,this.urlSerializer=m,this.rootContexts=b,this.location=$,this.config=We,this.lastSuccessfulNavigation=null,this.disposed=!1,this.navigationId=0,this.currentPageId=0,this.isNgZoneEnabled=!1,this.events=new O.x,this.errorHandler=Zi,this.malformedUriErrorHandler=Xu,this.navigated=!1,this.lastSuccessfulId=-1,this.afterPreactivation=()=>(0,N.of)(void 0),this.urlHandlingStrategy=(0,o.f3M)(vl),this.routeReuseStrategy=(0,o.f3M)(ya),this.titleStrategy=(0,o.f3M)(hi),this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.canceledNavigationResolution="replace",this.navigationTransitions=new gl(this),this.configLoader=z.get(Xi),this.configLoader.onLoadEndListener=wn=>this.triggerEvent(new ho(wn)),this.configLoader.onLoadStartListener=wn=>this.triggerEvent(new fo(wn)),this.ngModule=z.get(o.h0i),this.console=z.get(o.c2e);const jt=z.get(o.R0b);this.isNgZoneEnabled=jt instanceof o.R0b&&o.R0b.isInAngularZone(),this.resetConfig(We),this.currentUrlTree=new En,this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=Gn(this.currentUrlTree,this.rootComponentType),this.transitions=new ge.X({id:0,targetPageId:0,currentUrlTree:this.currentUrlTree,extractedUrl:this.urlHandlingStrategy.extract(this.currentUrlTree),urlAfterRedirects:this.urlHandlingStrategy.extract(this.currentUrlTree),rawUrl:this.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:"imperative",restoredState:null,currentSnapshot:this.routerState.snapshot,targetSnapshot:null,currentRouterState:this.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.navigations=this.navigationTransitions.setupNavigations(this.transitions),this.processNavigations()}get browserPageId(){return this.location.getState()?.\u0275routerPageId}resetRootComponentType(d){this.rootComponentType=d,this.routerState.root.component=this.rootComponentType}setTransition(d){this.transitions.next({...this.transitions.value,...d})}initialNavigation(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(d=>{const m="popstate"===d.type?"popstate":"hashchange";"popstate"===m&&setTimeout(()=>{const b={replaceUrl:!0},$=d.state?.navigationId?d.state:null;if(d.state){const ve={...d.state};delete ve.navigationId,delete ve.\u0275routerPageId,0!==Object.keys(ve).length&&(b.state=ve)}const z=this.parseUrl(d.url);this.scheduleNavigation(z,m,$,b)},0)}))}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}triggerEvent(d){this.events.next(d)}resetConfig(d){this.config=d.map(Nr),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.transitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0}createUrlTree(d,m={}){const{relativeTo:b,queryParams:$,fragment:z,queryParamsHandling:ve,preserveFragment:We}=m,ft=b||this.routerState.root,bt=We?this.currentUrlTree.fragment:z;let jt=null;switch(ve){case"merge":jt={...this.currentUrlTree.queryParams,...$};break;case"preserve":jt=this.currentUrlTree.queryParams;break;default:jt=$||null}return null!==jt&&(jt=this.removeEmptyProps(jt)),gr(ft,this.currentUrlTree,d,jt,bt??null)}navigateByUrl(d,m={skipLocationChange:!1}){const b=xn(d)?d:this.parseUrl(d),$=this.urlHandlingStrategy.merge(b,this.rawUrlTree);return this.scheduleNavigation($,"imperative",null,m)}navigate(d,m={skipLocationChange:!1}){return function Ji(f){for(let h=0;h{const $=d[b];return null!=$&&(m[b]=$),m},{})}processNavigations(){this.navigations.subscribe(d=>{this.navigated=!0,this.lastSuccessfulId=d.id,this.currentPageId=d.targetPageId,this.events.next(new Wt(d.id,this.serializeUrl(d.extractedUrl),this.serializeUrl(this.currentUrlTree))),this.lastSuccessfulNavigation=this.getCurrentNavigation(),this.titleStrategy?.updateTitle(this.routerState.snapshot),d.resolve(!0)},d=>{this.console.warn(`Unhandled Navigation Error: ${d}`)})}scheduleNavigation(d,m,b,$,z){if(this.disposed)return Promise.resolve(!1);let ve,We,ft;z?(ve=z.resolve,We=z.reject,ft=z.promise):ft=new Promise((wn,lo)=>{ve=wn,We=lo});const bt=++this.navigationId;let jt;return"computed"===this.canceledNavigationResolution?(0===this.currentPageId&&(b=this.location.getState()),jt=b&&b.\u0275routerPageId?b.\u0275routerPageId:$.replaceUrl||$.skipLocationChange?this.browserPageId??0:(this.browserPageId??0)+1):jt=0,this.setTransition({id:bt,targetPageId:jt,source:m,restoredState:b,currentUrlTree:this.currentUrlTree,rawUrl:d,extras:$,resolve:ve,reject:We,promise:ft,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),ft.catch(wn=>Promise.reject(wn))}setBrowserUrl(d,m){const b=this.urlSerializer.serialize(d),$={...m.extras.state,...this.generateNgRouterState(m.id,m.targetPageId)};this.location.isCurrentPathEqualTo(b)||m.extras.replaceUrl?this.location.replaceState(b,"",$):this.location.go(b,"",$)}restoreHistory(d,m=!1){if("computed"===this.canceledNavigationResolution){const b=this.currentPageId-d.targetPageId;"popstate"!==d.source&&"eager"!==this.urlUpdateStrategy&&this.currentUrlTree!==this.getCurrentNavigation()?.finalUrl||0===b?this.currentUrlTree===this.getCurrentNavigation()?.finalUrl&&0===b&&(this.resetState(d),this.browserUrlTree=d.currentUrlTree,this.resetUrlToCurrentUrlTree()):this.location.historyGo(b)}else"replace"===this.canceledNavigationResolution&&(m&&this.resetState(d),this.resetUrlToCurrentUrlTree())}resetState(d){this.routerState=d.currentRouterState,this.currentUrlTree=d.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,d.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}cancelNavigationTransition(d,m,b){const $=new Bt(d.id,this.serializeUrl(d.extractedUrl),m,b);this.triggerEvent($),d.resolve(!1)}generateNgRouterState(d,m){return"computed"===this.canceledNavigationResolution?{navigationId:d,\u0275routerPageId:m}:{navigationId:d}}}return f.\u0275fac=function(d){o.$Z()},f.\u0275prov=o.Yz7({token:f,factory:function(){return Xr()},providedIn:"root"}),f})(),mi=(()=>{class f{constructor(d,m,b,$,z,ve){this.router=d,this.route=m,this.tabIndexAttribute=b,this.renderer=$,this.el=z,this.locationStrategy=ve,this._preserveFragment=!1,this._skipLocationChange=!1,this._replaceUrl=!1,this.href=null,this.commands=null,this.onChanges=new O.x;const We=z.nativeElement.tagName;this.isAnchorElement="A"===We||"AREA"===We,this.isAnchorElement?this.subscription=d.events.subscribe(ft=>{ft instanceof Wt&&this.updateHref()}):this.setTabIndexIfNotOnNativeEl("0")}set preserveFragment(d){this._preserveFragment=(0,o.D6c)(d)}get preserveFragment(){return this._preserveFragment}set skipLocationChange(d){this._skipLocationChange=(0,o.D6c)(d)}get skipLocationChange(){return this._skipLocationChange}set replaceUrl(d){this._replaceUrl=(0,o.D6c)(d)}get replaceUrl(){return this._replaceUrl}setTabIndexIfNotOnNativeEl(d){null!=this.tabIndexAttribute||this.isAnchorElement||this.applyAttributeValue("tabindex",d)}ngOnChanges(d){this.isAnchorElement&&this.updateHref(),this.onChanges.next(this)}set routerLink(d){null!=d?(this.commands=Array.isArray(d)?d:[d],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(d,m,b,$,z){return!!(null===this.urlTree||this.isAnchorElement&&(0!==d||m||b||$||z||"string"==typeof this.target&&"_self"!=this.target))||(this.router.navigateByUrl(this.urlTree,{skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state}),!this.isAnchorElement)}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){this.href=null!==this.urlTree&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(this.urlTree)):null;const d=null===this.href?null:(0,o.P3R)(this.href,this.el.nativeElement.tagName.toLowerCase(),"href");this.applyAttributeValue("href",d)}applyAttributeValue(d,m){const b=this.renderer,$=this.el.nativeElement;null!==m?b.setAttribute($,d,m):b.removeAttribute($,d)}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}}return f.\u0275fac=function(d){return new(d||f)(o.Y36(or),o.Y36(Rr),o.$8M("tabindex"),o.Y36(o.Qsj),o.Y36(o.SBq),o.Y36(te.S$))},f.\u0275dir=o.lG2({type:f,selectors:[["","routerLink",""]],hostVars:1,hostBindings:function(d,m){1&d&&o.NdJ("click",function($){return m.onClick($.button,$.ctrlKey,$.shiftKey,$.altKey,$.metaKey)}),2&d&&o.uIk("target",m.target)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",relativeTo:"relativeTo",preserveFragment:"preserveFragment",skipLocationChange:"skipLocationChange",replaceUrl:"replaceUrl",routerLink:"routerLink"},standalone:!0,features:[o.TTD]}),f})();class es{}let Dl=(()=>{class f{preload(d,m){return m().pipe(St(()=>(0,N.of)(null)))}}return f.\u0275fac=function(d){return new(d||f)},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})(),wa=(()=>{class f{constructor(d,m,b,$,z){this.router=d,this.injector=b,this.preloadingStrategy=$,this.loader=z}setUpPreloading(){this.subscription=this.router.events.pipe((0,de.h)(d=>d instanceof Wt),(0,et.b)(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(d,m){const b=[];for(const $ of m){$.providers&&!$._injector&&($._injector=(0,o.MMx)($.providers,d,`Route: ${$.path}`));const z=$._injector??d,ve=$._loadedInjector??z;$.loadChildren&&!$._loadedRoutes&&void 0===$.canLoad||$.loadComponent&&!$._loadedComponent?b.push(this.preloadConfig(z,$)):($.children||$._loadedRoutes)&&b.push(this.processRoutes(ve,$.children??$._loadedRoutes))}return(0,x.D)(b).pipe((0,K.J)())}preloadConfig(d,m){return this.preloadingStrategy.preload(m,()=>{let b;b=m.loadChildren&&void 0===m.canLoad?this.loader.loadChildren(d,m):(0,N.of)(null);const $=b.pipe((0,ne.z)(z=>null===z?(0,N.of)(void 0):(m._loadedRoutes=z.routes,m._loadedInjector=z.injector,this.processRoutes(z.injector??d,z.routes))));if(m.loadComponent&&!m._loadedComponent){const z=this.loader.loadComponent(m);return(0,x.D)([$,z]).pipe((0,K.J)())}return $})}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(or),o.LFG(o.Sil),o.LFG(o.lqb),o.LFG(es),o.LFG(Xi))},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})();const ts=new o.OlP("");let Ns=(()=>{class f{constructor(d,m,b,$={}){this.router=d,this.viewportScroller=m,this.zone=b,this.options=$,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},$.scrollPositionRestoration=$.scrollPositionRestoration||"disabled",$.anchorScrolling=$.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.router.events.subscribe(d=>{d instanceof Mt?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=d.navigationTrigger,this.restoredId=d.restoredState?d.restoredState.navigationId:0):d instanceof Wt&&(this.lastId=d.id,this.scheduleScrollEvent(d,this.router.parseUrl(d.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.router.events.subscribe(d=>{d instanceof ar&&(d.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(d.position):d.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(d.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(d,m){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.router.triggerEvent(new ar(d,"popstate"===this.lastSource?this.store[this.restoredId]:null,m))})},0)})}ngOnDestroy(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()}}return f.\u0275fac=function(d){o.$Z()},f.\u0275prov=o.Yz7({token:f,factory:f.\u0275fac}),f})();function yi(f,h){return{\u0275kind:f,\u0275providers:h}}function $s(){const f=(0,o.f3M)(o.zs3);return h=>{const d=f.get(o.z2F);if(h!==d.components[0])return;const m=f.get(or),b=f.get(rs);1===f.get(Bs)&&m.initialNavigation(),f.get(Qo,null,o.XFs.Optional)?.setUpPreloading(),f.get(ts,null,o.XFs.Optional)?.init(),m.resetRootComponentType(d.componentTypes[0]),b.closed||(b.next(),b.unsubscribe())}}const rs=new o.OlP("",{factory:()=>new O.x}),Bs=new o.OlP("",{providedIn:"root",factory:()=>1});const Qo=new o.OlP("");function bi(f){return yi(0,[{provide:Qo,useExisting:wa},{provide:es,useExisting:f}])}const _l=new o.OlP("ROUTER_FORROOT_GUARD"),wl=[te.Ye,{provide:pt,useClass:vt},{provide:or,useFactory:Xr},fr,{provide:Rr,useFactory:function Jo(f){return f.routerState.root},deps:[or]},Xi,[]];function _n(){return new o.PXZ("Router",or)}let Zu=(()=>{class f{constructor(d){}static forRoot(d,m){return{ngModule:f,providers:[wl,[],{provide:ao,multi:!0,useValue:d},{provide:_l,useFactory:td,deps:[[or,new o.FiY,new o.tp0]]},{provide:pi,useValue:m||{}},m?.useHash?{provide:te.S$,useClass:te.Do}:{provide:te.S$,useClass:te.b0},{provide:ts,useFactory:()=>{const f=(0,o.f3M)(or),h=(0,o.f3M)(te.EM),d=(0,o.f3M)(o.R0b),m=(0,o.f3M)(pi);return m.scrollOffset&&h.setOffset(m.scrollOffset),new Ns(f,h,d,m)}},m?.preloadingStrategy?bi(m.preloadingStrategy).\u0275providers:[],{provide:o.PXZ,multi:!0,useFactory:_n},m?.initialNavigation?nd(m):[],[{provide:El,useFactory:$s},{provide:o.tb,multi:!0,useExisting:El}]]}}static forChild(d){return{ngModule:f,providers:[{provide:ao,multi:!0,useValue:d}]}}}return f.\u0275fac=function(d){return new(d||f)(o.LFG(_l,8))},f.\u0275mod=o.oAB({type:f}),f.\u0275inj=o.cJS({imports:[kr]}),f})();function td(f){return"guarded"}function nd(f){return["disabled"===f.initialNavigation?yi(3,[{provide:o.ip1,multi:!0,useFactory:()=>{const h=(0,o.f3M)(or);return()=>{h.setUpLocationChangeListener()}}},{provide:Bs,useValue:2}]).\u0275providers:[],"enabledBlocking"===f.initialNavigation?yi(2,[{provide:Bs,useValue:0},{provide:o.ip1,multi:!0,deps:[o.zs3],useFactory:h=>{const d=h.get(te.V_,Promise.resolve());return()=>d.then(()=>new Promise(b=>{const $=h.get(or),z=h.get(rs);(function m(b){h.get(or).events.pipe((0,de.h)(z=>z instanceof Wt||z instanceof Bt||z instanceof An),(0,ce.U)(z=>z instanceof Wt||z instanceof Bt&&(0===z.code||1===z.code)&&null),(0,de.h)(z=>null!==z),(0,De.q)(1)).subscribe(()=>{b()})})(()=>{b(!0)}),$.afterPreactivation=()=>(b(!0),z.closed?(0,N.of)(void 0):z),$.initialNavigation()}))}}]).\u0275providers:[]]}const El=new o.OlP("")},5861:(Qe,Fe,w)=>{"use strict";function o(N,ge,R,W,M,U,_){try{var Y=N[U](_),G=Y.value}catch(Z){return void R(Z)}Y.done?ge(G):Promise.resolve(G).then(W,M)}function x(N){return function(){var ge=this,R=arguments;return new Promise(function(W,M){var U=N.apply(ge,R);function _(G){o(U,W,M,_,Y,"next",G)}function Y(G){o(U,W,M,_,Y,"throw",G)}_(void 0)})}}w.d(Fe,{Z:()=>x})}},Qe=>{Qe(Qe.s=1394)}]); \ No newline at end of file diff --git a/src/main/resources/app/runtime.bf11d3681906b638.js b/src/main/resources/app/runtime.bf11d3681906b638.js deleted file mode 100644 index bc0256c32..000000000 --- a/src/main/resources/app/runtime.bf11d3681906b638.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,v={},g={};function f(e){var d=g[e];if(void 0!==d)return d.exports;var a=g[e]={exports:{}};return v[e].call(a.exports,a,a.exports,f),a.exports}f.m=v,e=[],f.O=(d,a,r,b)=>{if(!a){var t=1/0;for(c=0;c=b)&&Object.keys(f.O).every(p=>f.O[p](a[n]))?a.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[a,r,b]},f.n=e=>{var d=e&&e.__esModule?()=>e.default:()=>e;return f.d(d,{a:d}),d},(()=>{var d,e=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;f.t=function(a,r){if(1&r&&(a=this(a)),8&r||"object"==typeof a&&a&&(4&r&&a.__esModule||16&r&&"function"==typeof a.then))return a;var b=Object.create(null);f.r(b);var c={};d=d||[null,e({}),e([]),e(e)];for(var t=2&r&&a;"object"==typeof t&&!~d.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>a[l]);return c.default=()=>a,f.d(b,c),b}})(),f.d=(e,d)=>{for(var a in d)f.o(d,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:d[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((d,a)=>(f.f[a](e,d),d),[])),f.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"fc6a678bdb89d268",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2539:"044258b00f51d3ab",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"6d41065e22e54a84",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),f.miniCssF=e=>{},f.o=(e,d)=>Object.prototype.hasOwnProperty.call(e,d),(()=>{var e={},d="app:";f.l=(a,r,b,c)=>{if(e[a])e[a].push(r);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[a];if(delete e[a],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),f.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;f.tt=()=>(void 0===e&&(e={createScriptURL:d=>d},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),f.tu=e=>f.tt().createScriptURL(e),f.p="",(()=>{var e={3666:0};f.f.j=(r,b)=>{var c=f.o(e,r)?e[r]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=r){var t=new Promise((o,s)=>c=e[r]=[o,s]);b.push(c[2]=t);var l=f.p+f.u(r),n=new Error;f.l(l,o=>{if(f.o(e,r)&&(0!==(c=e[r])&&(e[r]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+r+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+r,r)}else e[r]=0},f.O.j=r=>0===e[r];var d=(r,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)f.o(t,n)&&(f.m[n]=t[n]);if(l)var s=l(f)}for(r&&r(b);o{"use strict";var e,v={},g={};function a(e){var r=g[e];if(void 0!==r)return r.exports;var f=g[e]={exports:{}};return v[e].call(f.exports,f,f.exports,a),f.exports}a.m=v,e=[],a.O=(r,f,d,b)=>{if(!f){var t=1/0;for(c=0;c=b)&&Object.keys(a.O).every(p=>a.O[p](f[n]))?f.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[f,d,b]},a.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return a.d(r,{a:r}),r},(()=>{var r,e=Object.getPrototypeOf?f=>Object.getPrototypeOf(f):f=>f.__proto__;a.t=function(f,d){if(1&d&&(f=this(f)),8&d||"object"==typeof f&&f&&(4&d&&f.__esModule||16&d&&"function"==typeof f.then))return f;var b=Object.create(null);a.r(b);var c={};r=r||[null,e({}),e([]),e(e)];for(var t=2&d&&f;"object"==typeof t&&!~r.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>f[l]);return c.default=()=>f,a.d(b,c),b}})(),a.d=(e,r)=>{for(var f in r)a.o(r,f)&&!a.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:r[f]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce((r,f)=>(a.f[f](e,r),r),[])),a.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"fc6a678bdb89d268",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3195:"2459a55b1d9db929",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"6d41065e22e54a84",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),a.miniCssF=e=>{},a.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e={},r="app:";a.l=(f,d,b,c)=>{if(e[f])e[f].push(d);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[f];if(delete e[f],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),a.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;a.tt=()=>(void 0===e&&(e={createScriptURL:r=>r},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),a.tu=e=>a.tt().createScriptURL(e),a.p="",(()=>{var e={3666:0};a.f.j=(d,b)=>{var c=a.o(e,d)?e[d]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=d){var t=new Promise((o,s)=>c=e[d]=[o,s]);b.push(c[2]=t);var l=a.p+a.u(d),n=new Error;a.l(l,o=>{if(a.o(e,d)&&(0!==(c=e[d])&&(e[d]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+d+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+d,d)}else e[d]=0},a.O.j=d=>0===e[d];var r=(d,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)a.o(t,n)&&(a.m[n]=t[n]);if(l)var s=l(a)}for(d&&d(b);o Date: Mon, 29 May 2023 00:19:36 +0200 Subject: [PATCH 95/99] fix initial upload deadlock-issue --- .../seidel/kutu/domain/WettkampfService.scala | 5 +- .../ch/seidel/kutu/http/WettkampfRoutes.scala | 48 ++++++++++--------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala index d1216698f..a868cc0a5 100644 --- a/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala +++ b/src/main/scala/ch/seidel/kutu/domain/WettkampfService.scala @@ -42,7 +42,10 @@ trait WettkampfService extends DBService } def listRootProgramme(): List[ProgrammView] = { - val allPgmsQuery = sql"""select * from programm where parent_id is null or parent_id = 0""".as[ProgrammRaw] + val allPgmsQuery = + sql"""select + id, name, aggregate, parent_id, ord, alter_von, alter_bis, uuid, riegenmode + from programm where parent_id is null or parent_id = 0""".as[ProgrammRaw] .map{l => l.map(p => p.id -> p).toMap} .map{map => map.foldLeft(List[ProgrammView]()){(acc, pgmEntry) => val (id, pgm) = pgmEntry diff --git a/src/main/scala/ch/seidel/kutu/http/WettkampfRoutes.scala b/src/main/scala/ch/seidel/kutu/http/WettkampfRoutes.scala index 1097bf0b3..d8d9eb597 100644 --- a/src/main/scala/ch/seidel/kutu/http/WettkampfRoutes.scala +++ b/src/main/scala/ch/seidel/kutu/http/WettkampfRoutes.scala @@ -11,7 +11,7 @@ import akka.http.scaladsl.server.Route import akka.http.scaladsl.unmarshalling.Unmarshal import akka.stream.scaladsl.{Sink, Source, StreamConverters} import akka.util.ByteString -import ch.seidel.jwt.JsonWebToken +import ch.seidel.jwt.{JsonWebToken, JwtClaimsSetMap} import ch.seidel.kutu.Config._ import ch.seidel.kutu.akka.{StartDurchgang, _} import ch.seidel.kutu.data.ResourceExchanger @@ -341,27 +341,33 @@ trait WettkampfRoutes extends SprayJsonSupport // do something with the file and file metadata ... log.info(s"receiving new wettkampf: $metadata, $wkuuid") import Core.materializer - val is = file.runWith(StreamConverters.asInputStream(FiniteDuration(180, TimeUnit.SECONDS))) - try { - val wettkampf = ResourceExchanger.importWettkampf(is) - val decodedorigin = s"${if (uri.authority.host.toString().contains("localhost")) "http" else "https"}://${uri.authority}" - val link = s"$decodedorigin/api/registrations/${wettkampf.uuid.get}/approvemail?mail=${encodeURIParam(wettkampf.notificationEMail)}" - AthletIndexActor.publish(ResyncIndex) - CompetitionRegistrationClientActor.publish(CompetitionCreated(wkuuid.toString, link), clientId) - val claims = setClaims(wkuuid.toString, Int.MaxValue) - respondWithHeader(RawHeader(jwtAuthorizationKey, JsonWebToken(jwtHeader, claims, jwtSecretKey))) { - if (wettkampf.notificationEMail == null || wettkampf.notificationEMail.trim.isEmpty) { - complete(StatusCodes.Conflict, s"Die EMail-Adresse für die Notifikation von Online-Registrierungen ist noch nicht erfasst.") - } else { - complete(StatusCodes.OK) - } + val is = file.async.runWith(StreamConverters.asInputStream(FiniteDuration(180, TimeUnit.SECONDS))) + val processor = Future[(Wettkampf,JwtClaimsSetMap)] { + try { + val wettkampf = ResourceExchanger.importWettkampf(is) + val decodedorigin = s"${if (uri.authority.host.toString().contains("localhost")) "http" else "https"}://${uri.authority}" + val link = s"$decodedorigin/api/registrations/${wettkampf.uuid.get}/approvemail?mail=${encodeURIParam(wettkampf.notificationEMail)}" + AthletIndexActor.publish(ResyncIndex) + CompetitionRegistrationClientActor.publish(CompetitionCreated(wkuuid.toString, link), clientId) + val claims = setClaims(wkuuid.toString, Int.MaxValue) + (wettkampf, claims) + } finally { + is.close() } - } catch { - case e: Exception => + } + onComplete(processor) { + case Success((wettkampf, claims)) => + respondWithHeader(RawHeader(jwtAuthorizationKey, JsonWebToken(jwtHeader, claims, jwtSecretKey))) { + if (wettkampf.notificationEMail == null || wettkampf.notificationEMail.trim.isEmpty) { + complete(StatusCodes.Conflict, s"Die EMail-Adresse für die Notifikation von Online-Registrierungen ist noch nicht erfasst.") + } else { + complete(StatusCodes.OK) + } + } + + case Failure(e) => log.warning(s"wettkampf $wkuuid cannot be uploaded: " + e.toString) complete(StatusCodes.Conflict, s"Wettkampf $wkuuid konnte wg. einem technischen Fehler nicht hochgeladen werden. (${e.toString})") - } finally { - is.close() } } case _ => @@ -413,9 +419,7 @@ trait WettkampfRoutes extends SprayJsonSupport log.error(e, s"wettkampf $wkuuid cannot be uploaded: " + e.toString) complete(StatusCodes.BadRequest, s"""Der Wettkampf ${metadata.fileName} - - |konnte wg. einem technischen Fehler n - + |konnte wg. einem technischen Fehler nicht hochgeladen werden! |=>${e.getMessage}""". stripMargin) } From ee68a2140cad9973735007f111d9ce467f30da38 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Mon, 29 May 2023 00:51:16 +0200 Subject: [PATCH 96/99] #698 add avg score-editor - fix single-value update --- newclient/resultcatcher/src/app/app.scss | 3 +- .../wertung-avg-calc.component copy.html | 28 ------------------- .../wertung-avg-calc.component.html | 17 +++++++---- .../wertung-avg-calc.component.scss | 8 +++++- .../wertung-avg-calc.component.ts | 26 +++++++++++++---- 5 files changed, 41 insertions(+), 41 deletions(-) delete mode 100644 newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component copy.html diff --git a/newclient/resultcatcher/src/app/app.scss b/newclient/resultcatcher/src/app/app.scss index ec974adac..dd6334b0b 100644 --- a/newclient/resultcatcher/src/app/app.scss +++ b/newclient/resultcatcher/src/app/app.scss @@ -28,7 +28,8 @@ ion-icon { //background-color: var(--ion-item-background-color); - color: var(--ion-color-step-500); + //color: var(--ion-color-step-500); + color: var(--ion-item-color, var(--ion-text-color, #000)); } ion-toolbar { --background: var(--ion-toolbar-background-color); diff --git a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component copy.html b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component copy.html deleted file mode 100644 index 0f9a1f6db..000000000 --- a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component copy.html +++ /dev/null @@ -1,28 +0,0 @@ - - {{valueTitle}} - {{avg()}} - - - Wertung # - {{valueTitle}} - Action - - - {{ i }}. - -
            - -
            - - - -
            - - - + - -
            -
            diff --git a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.html b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.html index 08d0cd28b..51a81f027 100644 --- a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.html +++ b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.html @@ -1,13 +1,16 @@ {{title}} - + - {{title}} - ø {{avgValue}} + {{title}} ø {{avgValue}} + +
            Kommastellen
            + +
            {{i+1}}. Wertung @@ -39,12 +44,12 @@ (ionBlur)="onBlur($event, item)"> - + - - + + Weitere Wertung hinzufügen
            diff --git a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.scss b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.scss index 62b03c395..220409291 100644 --- a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.scss +++ b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.scss @@ -19,6 +19,13 @@ //flex-basis: 20%; &.decimals { flex: 0 0 6em; + position:relative; top: -0.6em; + ion-input { + height: 100%; + outline: none; + text-align: right; + border: 1px solid #a9a9a9; + } } &.table-action { flex: 0 0 1.5em; @@ -44,7 +51,6 @@ overflow: hidden; ion-input { height: 100%; - width: 100%; outline: none; text-align: right; border: 1px solid #a9a9a9; diff --git a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.ts b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.ts index 4605a7bbd..ac984f4dd 100644 --- a/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.ts +++ b/newclient/resultcatcher/src/app/component/wertung-avg-calc/wertung-avg-calc.component.ts @@ -1,6 +1,5 @@ import { Component, EventEmitter, HostBinding, Input, OnInit, Output, ViewChild } from '@angular/core'; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; -import { Subject } from 'rxjs'; @Component({ selector: 'app-wertung-avg-calc', @@ -19,7 +18,7 @@ export class WertungAvgCalcComponent implements ControlValueAccessor { @HostBinding() id = `avg-calc-input-${WertungAvgCalcComponent.nextId++}`; - _fixed: number = 3; + _fixed: number = Number(localStorage.getItem('avg-calc-decimals') || 2); get fixed(): number { return this._fixed; @@ -28,6 +27,7 @@ export class WertungAvgCalcComponent implements ControlValueAccessor { @Input() set fixed(value: number) { this._fixed = value; + localStorage.setItem('avg-calc-decimals', '' + this._fixed); this.calcAvg(); this.markAsTouched(); } @@ -59,12 +59,24 @@ export class WertungAvgCalcComponent implements ControlValueAccessor { return this.singleValues[0]?.value || this.avgValue; } - set singleValueContainer(value: number) { - this.writeValue(value); + set singleValueContainer(avgValue: number) { + this.singleValues = [{value: avgValue}]; this.calcAvg(); this.markAsTouched(); } + addKomma() { + if (this._fixed < 3) { + this.fixed += 1; + } + } + + removeKomma() { + if (this._fixed > 0) { + this.fixed -= 1; + } + } + add() { if (!this.disabled) { this.singleValues = [...this.singleValues, {value: 0.000}]; @@ -84,9 +96,13 @@ export class WertungAvgCalcComponent implements ControlValueAccessor { const avg1 = this.singleValues .filter(item => !!item.value) .map(item => Number(item.value)) + .filter(item => !isNaN(item)) .filter(item => item > 0) + if (avg1.length === 0) { + return this.avgValue; + } const avg2 = Number((avg1.reduce((sum, current) => sum + current, 0) / avg1.length).toFixed(this.fixed)); - if (!this.disabled && this.avgValue !== avg2) { + if (!this.disabled && this.avgValue !== avg2 && !isNaN(avg2)) { this.avgValue = avg2; this.onChange(avg2); console.log('value updated: ' + avg2); From 7800e6ccf1a79d2580bcc3eb5d280412d56207d7 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sun, 28 May 2023 22:53:15 +0000 Subject: [PATCH 97/99] update with generated Client from Github Actions CI for build with [skip ci] --- src/main/resources/app/3195.2459a55b1d9db929.js | 1 - src/main/resources/app/3195.2fff41a85276f1e9.js | 1 + src/main/resources/app/index.html | 4 ++-- ...untime.ffe888036bd0294d.js => runtime.48414f9b526919b0.js} | 2 +- src/main/resources/app/styles.c63ef859f4bdc635.css | 1 - src/main/resources/app/styles.f6c3bb51aaf1fc59.css | 1 + 6 files changed, 5 insertions(+), 5 deletions(-) delete mode 100644 src/main/resources/app/3195.2459a55b1d9db929.js create mode 100644 src/main/resources/app/3195.2fff41a85276f1e9.js rename src/main/resources/app/{runtime.ffe888036bd0294d.js => runtime.48414f9b526919b0.js} (71%) delete mode 100644 src/main/resources/app/styles.c63ef859f4bdc635.css create mode 100644 src/main/resources/app/styles.f6c3bb51aaf1fc59.css diff --git a/src/main/resources/app/3195.2459a55b1d9db929.js b/src/main/resources/app/3195.2459a55b1d9db929.js deleted file mode 100644 index d77cc0f8f..000000000 --- a/src/main/resources/app/3195.2459a55b1d9db929.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[3195],{3195:(q,d,g)=>{g.r(d),g.d(d,{WertungEditorPageModule:()=>F});var c=g(6895),u=g(433),h=g(5472),a=g(502),p=g(5861),_=g(7423),e=g(8274),m=g(600);const f=["noteInput"];function b(o,l){if(1&o&&(e.TgZ(0,"ion-label"),e._uU(1),e.qZA()),2&o){const t=e.oxw();e.xp6(1),e.Oqu(t.title)}}function v(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-input",5,6),e.NdJ("ngModelChange",function(i){e.CHM(t);const r=e.oxw();return e.KtG(r.singleValueContainer=i)}),e.qZA()}if(2&o){const t=e.oxw();e.Q6J("disabled",t.waiting||t.disabled)("ngModel",t.singleValueContainer)}}function C(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-button",7),e.NdJ("click",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.add())}),e._UZ(1,"ion-icon",8),e.qZA()}}function w(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-input",22,6),e.NdJ("ionChange",function(i){e.CHM(t);const r=e.oxw().$implicit,s=e.oxw(2);return e.KtG(s.onItemChange(i,r))})("ionBlur",function(i){e.CHM(t);const r=e.oxw().$implicit,s=e.oxw(2);return e.KtG(s.onBlur(i,r))}),e.qZA()}if(2&o){const t=e.oxw(),n=t.index,i=t.$implicit,r=e.oxw(2);e.hYB("name","",r.valueTitle,"",n,""),e.Q6J("disabled",r.waiting||r.disabled)("ngModel",i.value)}}function x(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-input",22),e.NdJ("ionChange",function(i){e.CHM(t);const r=e.oxw().$implicit,s=e.oxw(2);return e.KtG(s.onItemChange(i,r))})("ionBlur",function(i){e.CHM(t);const r=e.oxw().$implicit,s=e.oxw(2);return e.KtG(s.onBlur(i,r))}),e.qZA()}if(2&o){const t=e.oxw(),n=t.index,i=t.$implicit,r=e.oxw(2);e.hYB("name","",r.valueTitle,"",n,""),e.Q6J("disabled",r.waiting||r.disabled)("ngModel",i.value)}}function M(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-row")(1,"ion-col",15),e._uU(2),e.qZA(),e.TgZ(3,"ion-col",16),e._UZ(4,"div",17),e.YNc(5,w,2,4,"ion-input",18),e.YNc(6,x,1,4,"ion-input",18),e.qZA(),e.TgZ(7,"ion-col",19)(8,"ion-button",20),e.NdJ("click",function(){const r=e.CHM(t).index,s=e.oxw(2);return e.KtG(s.remove(r))}),e._UZ(9,"ion-icon",21),e.qZA()()()}if(2&o){const t=l.index;e.xp6(2),e.hij("",t+1,". Wertung"),e.xp6(3),e.Q6J("ngIf",0===t),e.xp6(1),e.Q6J("ngIf",t>0)}}function T(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-row",10)(1,"ion-col")(2,"ion-button",23),e.NdJ("click",function(){e.CHM(t);const i=e.oxw(2);return e.KtG(i.add())}),e._UZ(3,"ion-icon",8),e.qZA()()()}}function k(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-grid",9)(1,"ion-row")(2,"ion-col",10),e._uU(3),e.qZA(),e.TgZ(4,"ion-col",11)(5,"div"),e._uU(6,"Kommastellen"),e.qZA(),e.TgZ(7,"ion-input",12),e.NdJ("ngModelChange",function(i){e.CHM(t);const r=e.oxw();return e.KtG(r.fixed=i)}),e.qZA()()(),e.YNc(8,M,10,3,"ion-row",13),e.YNc(9,T,4,0,"ion-row",14),e.qZA()}if(2&o){const t=e.oxw();e.xp6(3),e.AsE("",t.title," - \xf8 ",t.avgValue,""),e.xp6(4),e.Q6J("ngModel",t.fixed)("disabled",t.waiting||t.disabled),e.xp6(1),e.Q6J("ngForOf",t.singleValues),e.xp6(1),e.Q6J("ngIf",!t.disabled)}}let A=(()=>{class o{constructor(){this.id="avg-calc-input-"+o.nextId++,this._fixed=3,this.singleValues=[],this.onTouched=()=>{},this.onChange=t=>{},this.touched=!1,this.disabled=!1,this.focused=!1}get fixed(){return this._fixed}set fixed(t){this._fixed=t,this.calcAvg(),this.markAsTouched()}get title(){return this.valueTitle}get singleValueContainer(){return this.singleValues[0]?.value||this.avgValue}set singleValueContainer(t){this.writeValue(t),this.calcAvg(),this.markAsTouched()}add(){this.disabled||(this.singleValues=[...this.singleValues,{value:0}],this.markAsTouched())}remove(t){!this.disabled&&t>-1&&(this.singleValues.splice(t,1),this.calcAvg(),this.markAsTouched())}calcAvg(){const t=this.singleValues.filter(i=>!!i.value).map(i=>Number(i.value)).filter(i=>i>0),n=Number((t.reduce((i,r)=>i+r,0)/t.length).toFixed(this.fixed));return!this.disabled&&this.avgValue!==n&&(this.avgValue=n,this.onChange(n),console.log("value updated: "+n)),n}onItemChange(t,n){n.value=t.target.value,this.calcAvg(),this.markAsTouched()}onBlur(t,n){n.value=Number(t.target.value).toFixed(this.fixed),this.calcAvg(),this.markAsTouched()}writeValue(t){console.log("writValue "+t),this.avgValue=t,this.singleValues=[{value:t}]}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}markAsTouched(){this.touched||(this.onTouched(),this.touched=!0)}setDisabledState(t){this.disabled=t}setFocus(){this.noteInput.setFocus()}}return o.nextId=0,o.\u0275fac=function(t){return new(t||o)},o.\u0275cmp=e.Xpm({type:o,selectors:[["app-wertung-avg-calc"]],viewQuery:function(t,n){if(1&t&&e.Gf(f,5),2&t){let i;e.iGM(i=e.CRH())&&(n.noteInput=i.first)}},hostVars:1,hostBindings:function(t,n){2&t&&e.Ikx("id",n.id)},inputs:{fixed:"fixed",hidden:"hidden",readonly:"readonly",waiting:"waiting",valueTitle:"valueTitle",valueDescription:"valueDescription"},features:[e._Bn([{provide:u.JU,multi:!0,useExisting:o}])],decls:5,vars:5,consts:[[3,"hidden"],[4,"ngIf"],["autofocus","","placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","name","noteInput","step","0.05","min","0.00","max","100.00","required","",3,"disabled","ngModel","ngModelChange",4,"ngIf"],["slot","end","expand","block","color","secondary",3,"click",4,"ngIf"],["class","table","no-padding","",4,"ngIf"],["autofocus","","placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","name","noteInput","step","0.05","min","0.00","max","100.00","required","",3,"disabled","ngModel","ngModelChange"],["noteInput",""],["slot","end","expand","block","color","secondary",3,"click"],["name","add-circle-outline"],["no-padding","",1,"table"],[1,"table-header"],["no-padding","",1,"decimals"],["type","number","name","decimals","step","1","min","0","max","3","required","",3,"ngModel","disabled","ngModelChange"],[4,"ngFor","ngForOf"],["class","table-header",4,"ngIf"],[1,"number"],["id","input-group","no-padding",""],["id","validity"],["placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","step","0.05","min","0.00","max","100.00","required","",3,"name","disabled","ngModel","ionChange","ionBlur",4,"ngIf"],[1,"table-action"],["color","danger",3,"click"],["name","trash-outline"],["placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","step","0.05","min","0.00","max","100.00","required","",3,"name","disabled","ngModel","ionChange","ionBlur"],["expand","block","color","secondary",3,"click"]],template:function(t,n){1&t&&(e.TgZ(0,"ion-item",0),e.YNc(1,b,2,1,"ion-label",1),e.YNc(2,v,2,2,"ion-input",2),e.YNc(3,C,2,0,"ion-button",3),e.YNc(4,k,10,6,"ion-grid",4),e.qZA()),2&t&&(e.Q6J("hidden",n.hidden),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length>1))},dependencies:[c.sg,c.O5,u.JJ,u.Q7,u.On,a.YG,a.wI,a.jY,a.gu,a.pK,a.Ie,a.Q$,a.Nd,a.as],styles:[".table[_ngcontent-%COMP%]{background-color:var(--ion-background-color);height:100%;overflow:hidden;overflow-y:auto}.table[_ngcontent-%COMP%] .table-header[_ngcontent-%COMP%], .table[_ngcontent-%COMP%] .table-subject[_ngcontent-%COMP%]{color:var(--ion-color-primary);font-weight:700}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;flex-wrap:nowrap}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.decimals[_ngcontent-%COMP%]{flex:0 0 6em}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.table-action[_ngcontent-%COMP%]{flex:0 0 1.5em}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.number[_ngcontent-%COMP%]{flex:0 0 6em;letter-spacing:.5px}@media all and (min-height: 720px){.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%]{margin:10px}}#decimals-group[_ngcontent-%COMP%]{height:70%;overflow:hidden}#decimals-group[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{height:100%;width:100%;outline:none;text-align:right;border:1px solid #a9a9a9}#input-group[_ngcontent-%COMP%]{height:70%;overflow:hidden}#input-group[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{width:0;height:0;position:absolute;top:0%;right:0%;border-left:15px solid transparent;border-top:15px solid transparent}#input-group[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{height:100%;width:100%;outline:none;text-align:right;border:1px solid #a9a9a9}#input-group.valid[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{border-left:15px solid transparent;border-top:15px solid var(--ion-color-success)}#input-group.valid[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{border:1px solid var(--ion-color-success)}#input-group.invalid[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{border-left:15px solid transparent;border-top:15px solid var(--ion-color-danger)}#input-group.invalid[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{border:1px solid var(--ion-color-danger)}"]}),o})();const I=["wertungsform"],Z=["enote"],O=["dnote"];function P(o,l){1&o&&(e.TgZ(0,"ion-item"),e._uU(1," Ung\xfcltige Eingabe. Die Werte m\xfcssen im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt) eingegeben werden. "),e.qZA())}function W(o,l){if(1&o&&(e.TgZ(0,"ion-button",16,17),e._UZ(2,"ion-icon",18),e._uU(3,"Speichern & Weiter"),e.qZA()),2&o){const t=e.oxw(),n=e.MAs(13);e.Q6J("disabled",t.waiting||!n.valid)}}function N(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-button",19),e.NdJ("click",function(){e.CHM(t);const i=e.oxw(),r=e.MAs(13);return e.KtG(i.saveClose(r))}),e._UZ(1,"ion-icon",20),e._uU(2,"Speichern"),e.qZA()}if(2&o){const t=e.oxw(),n=e.MAs(13);e.Q6J("disabled",t.waiting||!n.valid)}}let y=(()=>{class o{constructor(t,n,i,r,s,U,V){this.navCtrl=t,this.route=n,this.alertCtrl=i,this.toastController=r,this.backendService=s,this.platform=U,this.zone=V,this.waiting=!1,this.isDNoteUsed=!0,this.durchgang=s.durchgang,this.step=s.step,this.geraetId=s.geraet;const S=parseInt(this.route.snapshot.paramMap.get("itemId"));this.updateUI(s.wertungen.find(Q=>Q.id===S)),this.isDNoteUsed=this.item.isDNoteUsed}ionViewWillLeave(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}ionViewWillEnter(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0),this.subscription=this.backendService.wertungUpdated.subscribe(t=>{console.log("incoming wertung from service",t),t.wertung.athletId===this.wertung.athletId&&t.wertung.wettkampfdisziplinId===this.wertung.wettkampfdisziplinId&&t.wertung.endnote!==this.wertung.endnote&&(console.log("updateing wertung from service"),this.item.wertung=Object.assign({},t.wertung),this.itemOriginal.wertung=Object.assign({},t.wertung),this.wertung=Object.assign({noteD:0,noteE:0,endnote:0},this.item.wertung))}),this.platform.ready().then(()=>{setTimeout(()=>{let t;"web"!==_.dV.getPlatform()&&t.show&&(t.show(),console.log("keyboard called")),this.isDNoteUsed&&this.dnote?(this.dnote.setFocus(),console.log("dnote focused")):this.enote&&(this.enote.setFocus(),console.log("enote focused"))},400)})}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.item=Object.assign({},t),this.itemOriginal=Object.assign({},t),this.wertung=Object.assign({noteD:0,noteE:0,endnote:0},this.itemOriginal.wertung),this.ionViewWillEnter()})}ensureInitialValues(t){return Object.assign(this.wertung,t)}saveClose(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.updateUI(n),this.navCtrl.pop()},error:n=>{this.waiting=!1,console.log(n)}}))}save(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.updateUI(n)},error:n=>{this.waiting=!1,console.log(n)}}))}saveNext(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.waiting=!1;const i=this.backendService.wertungen.findIndex(s=>s.wertung.id===n.wertung.id);i<0&&console.log("unexpected wertung - id matches not with current wertung: "+n.wertung.id);let r=i+1;if(i<0)r=0;else if(i>=this.backendService.wertungen.length-1){if(0===this.backendService.wertungen.filter(s=>void 0===s.wertung.endnote).length)return this.navCtrl.pop(),void this.toastSuggestCompletnessCheck();r=this.backendService.wertungen.findIndex(s=>void 0===s.wertung.endnote),this.toastMissingResult(t,this.backendService.wertungen[r].vorname+" "+this.backendService.wertungen[r].name)}t.resetForm(),this.updateUI(this.backendService.wertungen[r])},error:n=>{this.waiting=!1,console.log(n)}}))}nextEmptyOrFinish(t){const n=this.backendService.wertungen.findIndex(i=>i.wertung.id===this.wertung.id);if(0===this.backendService.wertungen.filter((i,r)=>r>n&&void 0===i.wertung.endnote).length)return this.navCtrl.pop(),void this.toastSuggestCompletnessCheck();{const i=this.backendService.wertungen.findIndex((r,s)=>s>n&&void 0===r.wertung.endnote);this.toastMissingResult(t,this.backendService.wertungen[i].vorname+" "+this.backendService.wertungen[i].name),t.resetForm(),this.updateUI(this.backendService.wertungen[i])}}geraetName(){return this.backendService.geraete?this.backendService.geraete.find(t=>t.id===this.geraetId).name:""}toastSuggestCompletnessCheck(){var t=this;return(0,p.Z)(function*(){(yield t.toastController.create({header:"Qualit\xe4tskontrolle",message:"Es sind jetzt alle Resultate erfasst. Bitte ZU ZWEIT die Resultate pr\xfcfen und abschliessen!",animated:!0,position:"middle",buttons:[{text:"OK, gelesen.",icon:"checkmark-circle",role:"cancel",handler:()=>{console.log("OK, gelesen. clicked")}}]})).present()})()}toastMissingResult(t,n){var i=this;return(0,p.Z)(function*(){(yield i.alertCtrl.create({header:"Achtung",subHeader:"Fehlendes Resultat!",message:"Nach der Erfassung der letzten Wertung in dieser Riege scheint es noch leere Wertungen zu geben. Bitte pr\xfcfen, ob "+n.toUpperCase()+" geturnt hat.",buttons:[{text:"Nicht geturnt",role:"edit",handler:()=>{i.nextEmptyOrFinish(t)}},{text:"Korrigieren",role:"cancel",handler:()=>{console.log("Korrigieren clicked")}}]})).present()})()}}return o.\u0275fac=function(t){return new(t||o)(e.Y36(a.SH),e.Y36(h.gz),e.Y36(a.Br),e.Y36(a.yF),e.Y36(m.v),e.Y36(a.t4),e.Y36(e.R0b))},o.\u0275cmp=e.Xpm({type:o,selectors:[["app-wertung-editor"]],viewQuery:function(t,n){if(1&t&&(e.Gf(I,5),e.Gf(Z,5),e.Gf(O,5)),2&t){let i;e.iGM(i=e.CRH())&&(n.form=i.first),e.iGM(i=e.CRH())&&(n.enote=i.first),e.iGM(i=e.CRH())&&(n.dnote=i.first)}},decls:28,vars:15,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[1,"riege"],[3,"ngSubmit","keyup.enter"],["wertungsform","ngForm"],["name","noteD",3,"hidden","waiting","valueTitle","ngModel","ngModelChange"],["dnote",""],["name","noteE",3,"hidden","waiting","valueTitle","ngModel","ngModelChange"],["enote",""],["type","number","readonly","","name","endnote",3,"ngModel"],["endnote",""],[4,"ngIf"],["size","large","expand","block","type","submit","color","success",3,"disabled",4,"ngIf"],["size","large","expand","block","color","secondary",3,"disabled","click",4,"ngIf"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name","arrow-forward-circle-outline"],["size","large","expand","block","color","secondary",3,"disabled","click"],["slot","start","name","checkmark-circle"]],template:function(t,n){if(1&t){const i=e.EpF();e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA(),e.TgZ(9,"div",4),e._uU(10),e.qZA()()()(),e.TgZ(11,"ion-content")(12,"form",5,6),e.NdJ("ngSubmit",function(){e.CHM(i);const s=e.MAs(13);return e.KtG(n.saveNext(s))})("keyup.enter",function(){e.CHM(i);const s=e.MAs(13);return e.KtG(n.saveNext(s))}),e.TgZ(14,"ion-list")(15,"app-wertung-avg-calc",7,8),e.NdJ("ngModelChange",function(s){return n.wertung.noteD=s}),e.qZA(),e.TgZ(17,"app-wertung-avg-calc",9,10),e.NdJ("ngModelChange",function(s){return n.wertung.noteE=s}),e.qZA(),e.TgZ(19,"ion-item")(20,"ion-label"),e._uU(21,"Endnote"),e.qZA(),e._UZ(22,"ion-input",11,12),e.qZA()(),e.TgZ(24,"ion-list"),e.YNc(25,P,2,0,"ion-item",13),e.YNc(26,W,4,1,"ion-button",14),e.YNc(27,N,3,1,"ion-button",15),e.qZA()()()}if(2&t){const i=e.MAs(13);e.xp6(5),e.Oqu(n.geraetName()),e.xp6(3),e.Oqu(n.item.vorname+" "+n.item.name),e.xp6(2),e.Oqu(n.wertung.riege),e.xp6(5),e.Q6J("hidden",!n.isDNoteUsed)("waiting",n.waiting)("valueTitle","D-Note")("ngModel",n.wertung.noteD),e.xp6(2),e.Q6J("hidden",!1)("waiting",n.waiting)("valueTitle","E-Note")("ngModel",n.wertung.noteE),e.xp6(5),e.Q6J("ngModel",n.wertung.endnote),e.xp6(3),e.Q6J("ngIf",!i.valid),e.xp6(1),e.Q6J("ngIf",n.editable()),e.xp6(1),e.Q6J("ngIf",n.editable())}},dependencies:[c.O5,u._Y,u.JJ,u.JL,u.On,u.F,a.oU,a.YG,a.Sm,a.W2,a.Gu,a.gu,a.pK,a.Ie,a.Q$,a.q_,a.uN,a.wd,a.sr,a.as,a.cs,A],styles:[".riege[_ngcontent-%COMP%]{font-size:small;padding-right:16px;color:var(--ion-color-medium)}.athlet[_ngcontent-%COMP%]{font-size:larger;padding-right:16px;font-weight:bolder;color:var(--ion-color-primary)}"]}),o})();var E=g(5051);const J=[{path:"",component:y}];let F=(()=>{class o{}return o.\u0275fac=function(t){return new(t||o)},o.\u0275mod=e.oAB({type:o}),o.\u0275inj=e.cJS({imports:[c.ez,u.u5,a.Pc,h.Bz.forChild(J),E.K]}),o})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/3195.2fff41a85276f1e9.js b/src/main/resources/app/3195.2fff41a85276f1e9.js new file mode 100644 index 000000000..40bda15e5 --- /dev/null +++ b/src/main/resources/app/3195.2fff41a85276f1e9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[3195],{3195:(q,d,g)=>{g.r(d),g.d(d,{WertungEditorPageModule:()=>U});var u=g(6895),c=g(433),_=g(5472),a=g(502),p=g(5861),h=g(7423),e=g(8274),m=g(600);const f=["noteInput"];function b(o,l){if(1&o&&(e.TgZ(0,"ion-label"),e._uU(1),e.qZA()),2&o){const t=e.oxw();e.xp6(1),e.Oqu(t.title)}}function C(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-input",5,6),e.NdJ("ngModelChange",function(i){e.CHM(t);const r=e.oxw();return e.KtG(r.singleValueContainer=i)}),e.qZA()}if(2&o){const t=e.oxw();e.Q6J("disabled",t.waiting||t.disabled)("ngModel",t.singleValueContainer)}}function v(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-button",7),e.NdJ("click",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.add())}),e._UZ(1,"ion-icon",8),e.qZA()}if(2&o){const t=e.oxw();e.Q6J("disabled",t.waiting||t.disabled)}}function w(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-input",25,6),e.NdJ("ionChange",function(i){e.CHM(t);const r=e.oxw().$implicit,s=e.oxw(2);return e.KtG(s.onItemChange(i,r))})("ionBlur",function(i){e.CHM(t);const r=e.oxw().$implicit,s=e.oxw(2);return e.KtG(s.onBlur(i,r))}),e.qZA()}if(2&o){const t=e.oxw(),n=t.index,i=t.$implicit,r=e.oxw(2);e.hYB("name","",r.valueTitle,"",n,""),e.Q6J("disabled",r.waiting||r.disabled)("ngModel",i.value)}}function x(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-input",25),e.NdJ("ionChange",function(i){e.CHM(t);const r=e.oxw().$implicit,s=e.oxw(2);return e.KtG(s.onItemChange(i,r))})("ionBlur",function(i){e.CHM(t);const r=e.oxw().$implicit,s=e.oxw(2);return e.KtG(s.onBlur(i,r))}),e.qZA()}if(2&o){const t=e.oxw(),n=t.index,i=t.$implicit,r=e.oxw(2);e.hYB("name","",r.valueTitle,"",n,""),e.Q6J("disabled",r.waiting||r.disabled)("ngModel",i.value)}}function M(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-row")(1,"ion-col",19),e._uU(2),e.qZA(),e.TgZ(3,"ion-col",20),e._UZ(4,"div",21),e.YNc(5,w,2,4,"ion-input",22),e.YNc(6,x,1,4,"ion-input",22),e.qZA(),e.TgZ(7,"ion-col",11)(8,"ion-button",23),e.NdJ("click",function(){const r=e.CHM(t).index,s=e.oxw(2);return e.KtG(s.remove(r))}),e._UZ(9,"ion-icon",24),e.qZA()()()}if(2&o){const t=l.index,n=e.oxw(2);e.xp6(2),e.hij("",t+1,". Wertung"),e.xp6(3),e.Q6J("ngIf",0===t),e.xp6(1),e.Q6J("ngIf",t>0),e.xp6(2),e.Q6J("disabled",n.waiting||n.disabled)}}function T(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-row",10)(1,"ion-col")(2,"ion-button",26),e.NdJ("click",function(){e.CHM(t);const i=e.oxw(2);return e.KtG(i.add())}),e._UZ(3,"ion-icon",8),e._uU(4,"Weitere Wertung hinzuf\xfcgen"),e.qZA()()()}if(2&o){const t=e.oxw(2);e.xp6(2),e.Q6J("disabled",t.waiting||t.disabled)}}function k(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-grid",9)(1,"ion-row")(2,"ion-col",10),e._uU(3),e.qZA(),e.TgZ(4,"ion-col",11)(5,"ion-button",12),e.NdJ("click",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.removeKomma())}),e._UZ(6,"ion-icon",13),e.qZA()(),e.TgZ(7,"ion-col",14)(8,"div"),e._uU(9,"Kommastellen"),e.qZA(),e.TgZ(10,"ion-input",15),e.NdJ("ngModelChange",function(i){e.CHM(t);const r=e.oxw();return e.KtG(r.fixed=i)}),e.qZA()(),e.TgZ(11,"ion-col",11)(12,"ion-button",12),e.NdJ("click",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.addKomma())}),e._UZ(13,"ion-icon",16),e.qZA()()(),e.YNc(14,M,10,4,"ion-row",17),e.YNc(15,T,5,1,"ion-row",18),e.qZA()}if(2&o){const t=e.oxw();e.xp6(3),e.AsE("",t.title," \xf8 ",t.avgValue,""),e.xp6(2),e.Q6J("disabled",t.waiting||t.disabled||t.fixed<=0),e.xp6(5),e.Q6J("ngModel",t.fixed)("disabled",t.waiting||t.disabled),e.xp6(2),e.Q6J("disabled",t.waiting||t.disabled||t.fixed>=3),e.xp6(2),e.Q6J("ngForOf",t.singleValues),e.xp6(1),e.Q6J("ngIf",!t.disabled)}}let A=(()=>{class o{constructor(){this.id="avg-calc-input-"+o.nextId++,this._fixed=Number(localStorage.getItem("avg-calc-decimals")||2),this.singleValues=[],this.onTouched=()=>{},this.onChange=t=>{},this.touched=!1,this.disabled=!1,this.focused=!1}get fixed(){return this._fixed}set fixed(t){this._fixed=t,localStorage.setItem("avg-calc-decimals",""+this._fixed),this.calcAvg(),this.markAsTouched()}get title(){return this.valueTitle}get singleValueContainer(){return this.singleValues[0]?.value||this.avgValue}set singleValueContainer(t){this.singleValues=[{value:t}],this.calcAvg(),this.markAsTouched()}addKomma(){this._fixed<3&&(this.fixed+=1)}removeKomma(){this._fixed>0&&(this.fixed-=1)}add(){this.disabled||(this.singleValues=[...this.singleValues,{value:0}],this.markAsTouched())}remove(t){!this.disabled&&t>-1&&(this.singleValues.splice(t,1),this.calcAvg(),this.markAsTouched())}calcAvg(){const t=this.singleValues.filter(i=>!!i.value).map(i=>Number(i.value)).filter(i=>!isNaN(i)).filter(i=>i>0);if(0===t.length)return this.avgValue;const n=Number((t.reduce((i,r)=>i+r,0)/t.length).toFixed(this.fixed));return!this.disabled&&this.avgValue!==n&&!isNaN(n)&&(this.avgValue=n,this.onChange(n),console.log("value updated: "+n)),n}onItemChange(t,n){n.value=t.target.value,this.calcAvg(),this.markAsTouched()}onBlur(t,n){n.value=Number(t.target.value).toFixed(this.fixed),this.calcAvg(),this.markAsTouched()}writeValue(t){console.log("writValue "+t),this.avgValue=t,this.singleValues=[{value:t}]}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}markAsTouched(){this.touched||(this.onTouched(),this.touched=!0)}setDisabledState(t){this.disabled=t}setFocus(){this.noteInput.setFocus()}}return o.nextId=0,o.\u0275fac=function(t){return new(t||o)},o.\u0275cmp=e.Xpm({type:o,selectors:[["app-wertung-avg-calc"]],viewQuery:function(t,n){if(1&t&&e.Gf(f,5),2&t){let i;e.iGM(i=e.CRH())&&(n.noteInput=i.first)}},hostVars:1,hostBindings:function(t,n){2&t&&e.Ikx("id",n.id)},inputs:{fixed:"fixed",hidden:"hidden",readonly:"readonly",waiting:"waiting",valueTitle:"valueTitle",valueDescription:"valueDescription"},features:[e._Bn([{provide:c.JU,multi:!0,useExisting:o}])],decls:5,vars:5,consts:[[3,"hidden"],[4,"ngIf"],["autofocus","","placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","name","noteInput","type","number","step","0.05","min","0.00","max","100.00","required","",3,"disabled","ngModel","ngModelChange",4,"ngIf"],["slot","end","expand","block","color","secondary",3,"disabled","click",4,"ngIf"],["class","table","no-padding","",4,"ngIf"],["autofocus","","placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","name","noteInput","type","number","step","0.05","min","0.00","max","100.00","required","",3,"disabled","ngModel","ngModelChange"],["noteInput",""],["slot","end","expand","block","color","secondary",3,"disabled","click"],["name","add-circle-outline"],["no-padding","",1,"table"],[1,"table-header"],[1,"table-action"],["color","secondary",3,"disabled","click"],["name","remove-outline"],["no-padding","",1,"decimals"],["type","number","name","decimals","step","1","min","0","max","3","required","",3,"ngModel","disabled","ngModelChange"],["name","add-outline"],[4,"ngFor","ngForOf"],["class","table-header",4,"ngIf"],[1,"number"],["id","input-group","no-padding",""],["id","validity"],["placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","step","0.05","min","0.00","max","100.00","required","",3,"name","disabled","ngModel","ionChange","ionBlur",4,"ngIf"],["color","danger",3,"disabled","click"],["name","trash-outline"],["placeholder","Notenwert im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt)","type","number","step","0.05","min","0.00","max","100.00","required","",3,"name","disabled","ngModel","ionChange","ionBlur"],["expand","block","color","secondary",3,"disabled","click"]],template:function(t,n){1&t&&(e.TgZ(0,"ion-item",0),e.YNc(1,b,2,1,"ion-label",1),e.YNc(2,C,2,2,"ion-input",2),e.YNc(3,v,2,1,"ion-button",3),e.YNc(4,k,16,8,"ion-grid",4),e.qZA()),2&t&&(e.Q6J("hidden",n.hidden),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length<2),e.xp6(1),e.Q6J("ngIf",n.singleValues.length>1))},dependencies:[u.sg,u.O5,c.JJ,c.Q7,c.On,a.YG,a.wI,a.jY,a.gu,a.pK,a.Ie,a.Q$,a.Nd,a.as],styles:[".table[_ngcontent-%COMP%]{background-color:var(--ion-background-color);height:100%;overflow:hidden;overflow-y:auto}.table[_ngcontent-%COMP%] .table-header[_ngcontent-%COMP%], .table[_ngcontent-%COMP%] .table-subject[_ngcontent-%COMP%]{color:var(--ion-color-primary);font-weight:700}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;flex-wrap:nowrap}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.decimals[_ngcontent-%COMP%]{flex:0 0 6em;position:relative;top:-.6em}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.decimals[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{height:100%;outline:none;text-align:right;border:1px solid #a9a9a9}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.table-action[_ngcontent-%COMP%]{flex:0 0 1.5em}.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%] ion-col.number[_ngcontent-%COMP%]{flex:0 0 6em;letter-spacing:.5px}@media all and (min-height: 720px){.table[_ngcontent-%COMP%] ion-row[_ngcontent-%COMP%]{margin:10px}}#decimals-group[_ngcontent-%COMP%]{height:70%;overflow:hidden}#decimals-group[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{height:100%;outline:none;text-align:right;border:1px solid #a9a9a9}#input-group[_ngcontent-%COMP%]{height:70%;overflow:hidden}#input-group[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{width:0;height:0;position:absolute;top:0%;right:0%;border-left:15px solid transparent;border-top:15px solid transparent}#input-group[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{height:100%;width:100%;outline:none;text-align:right;border:1px solid #a9a9a9}#input-group.valid[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{border-left:15px solid transparent;border-top:15px solid var(--ion-color-success)}#input-group.valid[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{border:1px solid var(--ion-color-success)}#input-group.invalid[_ngcontent-%COMP%] #validity[_ngcontent-%COMP%]{border-left:15px solid transparent;border-top:15px solid var(--ion-color-danger)}#input-group.invalid[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%]{border:1px solid var(--ion-color-danger)}"]}),o})();const I=["wertungsform"],Z=["enote"],O=["dnote"];function P(o,l){1&o&&(e.TgZ(0,"ion-item"),e._uU(1," Ung\xfcltige Eingabe. Die Werte m\xfcssen im Format ##.## (2-3 Nachkommastellen mit Dezimalpunkt) eingegeben werden. "),e.qZA())}function N(o,l){if(1&o&&(e.TgZ(0,"ion-button",16,17),e._UZ(2,"ion-icon",18),e._uU(3,"Speichern & Weiter"),e.qZA()),2&o){const t=e.oxw(),n=e.MAs(13);e.Q6J("disabled",t.waiting||!n.valid)}}function W(o,l){if(1&o){const t=e.EpF();e.TgZ(0,"ion-button",19),e.NdJ("click",function(){e.CHM(t);const i=e.oxw(),r=e.MAs(13);return e.KtG(i.saveClose(r))}),e._UZ(1,"ion-icon",20),e._uU(2,"Speichern"),e.qZA()}if(2&o){const t=e.oxw(),n=e.MAs(13);e.Q6J("disabled",t.waiting||!n.valid)}}let y=(()=>{class o{constructor(t,n,i,r,s,F,Q){this.navCtrl=t,this.route=n,this.alertCtrl=i,this.toastController=r,this.backendService=s,this.platform=F,this.zone=Q,this.waiting=!1,this.isDNoteUsed=!0,this.durchgang=s.durchgang,this.step=s.step,this.geraetId=s.geraet;const V=parseInt(this.route.snapshot.paramMap.get("itemId"));this.updateUI(s.wertungen.find(S=>S.id===V)),this.isDNoteUsed=this.item.isDNoteUsed}ionViewWillLeave(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}ionViewWillEnter(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0),this.subscription=this.backendService.wertungUpdated.subscribe(t=>{console.log("incoming wertung from service",t),t.wertung.athletId===this.wertung.athletId&&t.wertung.wettkampfdisziplinId===this.wertung.wettkampfdisziplinId&&t.wertung.endnote!==this.wertung.endnote&&(console.log("updateing wertung from service"),this.item.wertung=Object.assign({},t.wertung),this.itemOriginal.wertung=Object.assign({},t.wertung),this.wertung=Object.assign({noteD:0,noteE:0,endnote:0},this.item.wertung))}),this.platform.ready().then(()=>{setTimeout(()=>{let t;"web"!==h.dV.getPlatform()&&t.show&&(t.show(),console.log("keyboard called")),this.isDNoteUsed&&this.dnote?(this.dnote.setFocus(),console.log("dnote focused")):this.enote&&(this.enote.setFocus(),console.log("enote focused"))},400)})}editable(){return this.backendService.loggedIn}updateUI(t){this.zone.run(()=>{this.waiting=!1,this.item=Object.assign({},t),this.itemOriginal=Object.assign({},t),this.wertung=Object.assign({noteD:0,noteE:0,endnote:0},this.itemOriginal.wertung),this.ionViewWillEnter()})}ensureInitialValues(t){return Object.assign(this.wertung,t)}saveClose(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.updateUI(n),this.navCtrl.pop()},error:n=>{this.waiting=!1,console.log(n)}}))}save(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.updateUI(n)},error:n=>{this.waiting=!1,console.log(n)}}))}saveNext(t){!t.valid||(this.waiting=!0,this.backendService.updateWertung(this.durchgang,this.step,this.geraetId,this.ensureInitialValues(t.value)).subscribe({next:n=>{this.waiting=!1;const i=this.backendService.wertungen.findIndex(s=>s.wertung.id===n.wertung.id);i<0&&console.log("unexpected wertung - id matches not with current wertung: "+n.wertung.id);let r=i+1;if(i<0)r=0;else if(i>=this.backendService.wertungen.length-1){if(0===this.backendService.wertungen.filter(s=>void 0===s.wertung.endnote).length)return this.navCtrl.pop(),void this.toastSuggestCompletnessCheck();r=this.backendService.wertungen.findIndex(s=>void 0===s.wertung.endnote),this.toastMissingResult(t,this.backendService.wertungen[r].vorname+" "+this.backendService.wertungen[r].name)}t.resetForm(),this.updateUI(this.backendService.wertungen[r])},error:n=>{this.waiting=!1,console.log(n)}}))}nextEmptyOrFinish(t){const n=this.backendService.wertungen.findIndex(i=>i.wertung.id===this.wertung.id);if(0===this.backendService.wertungen.filter((i,r)=>r>n&&void 0===i.wertung.endnote).length)return this.navCtrl.pop(),void this.toastSuggestCompletnessCheck();{const i=this.backendService.wertungen.findIndex((r,s)=>s>n&&void 0===r.wertung.endnote);this.toastMissingResult(t,this.backendService.wertungen[i].vorname+" "+this.backendService.wertungen[i].name),t.resetForm(),this.updateUI(this.backendService.wertungen[i])}}geraetName(){return this.backendService.geraete?this.backendService.geraete.find(t=>t.id===this.geraetId).name:""}toastSuggestCompletnessCheck(){var t=this;return(0,p.Z)(function*(){(yield t.toastController.create({header:"Qualit\xe4tskontrolle",message:"Es sind jetzt alle Resultate erfasst. Bitte ZU ZWEIT die Resultate pr\xfcfen und abschliessen!",animated:!0,position:"middle",buttons:[{text:"OK, gelesen.",icon:"checkmark-circle",role:"cancel",handler:()=>{console.log("OK, gelesen. clicked")}}]})).present()})()}toastMissingResult(t,n){var i=this;return(0,p.Z)(function*(){(yield i.alertCtrl.create({header:"Achtung",subHeader:"Fehlendes Resultat!",message:"Nach der Erfassung der letzten Wertung in dieser Riege scheint es noch leere Wertungen zu geben. Bitte pr\xfcfen, ob "+n.toUpperCase()+" geturnt hat.",buttons:[{text:"Nicht geturnt",role:"edit",handler:()=>{i.nextEmptyOrFinish(t)}},{text:"Korrigieren",role:"cancel",handler:()=>{console.log("Korrigieren clicked")}}]})).present()})()}}return o.\u0275fac=function(t){return new(t||o)(e.Y36(a.SH),e.Y36(_.gz),e.Y36(a.Br),e.Y36(a.yF),e.Y36(m.v),e.Y36(a.t4),e.Y36(e.R0b))},o.\u0275cmp=e.Xpm({type:o,selectors:[["app-wertung-editor"]],viewQuery:function(t,n){if(1&t&&(e.Gf(I,5),e.Gf(Z,5),e.Gf(O,5)),2&t){let i;e.iGM(i=e.CRH())&&(n.form=i.first),e.iGM(i=e.CRH())&&(n.enote=i.first),e.iGM(i=e.CRH())&&(n.dnote=i.first)}},decls:28,vars:15,consts:[["slot","start"],["defaultHref","/"],["slot","end"],[1,"athlet"],[1,"riege"],[3,"ngSubmit","keyup.enter"],["wertungsform","ngForm"],["name","noteD",3,"hidden","waiting","valueTitle","ngModel","ngModelChange"],["dnote",""],["name","noteE",3,"hidden","waiting","valueTitle","ngModel","ngModelChange"],["enote",""],["type","number","readonly","","name","endnote",3,"ngModel"],["endnote",""],[4,"ngIf"],["size","large","expand","block","type","submit","color","success",3,"disabled",4,"ngIf"],["size","large","expand","block","color","secondary",3,"disabled","click",4,"ngIf"],["size","large","expand","block","type","submit","color","success",3,"disabled"],["btnSaveNext",""],["slot","start","name","arrow-forward-circle-outline"],["size","large","expand","block","color","secondary",3,"disabled","click"],["slot","start","name","checkmark-circle"]],template:function(t,n){if(1&t){const i=e.EpF();e.TgZ(0,"ion-header")(1,"ion-toolbar")(2,"ion-buttons",0),e._UZ(3,"ion-back-button",1),e.qZA(),e.TgZ(4,"ion-title"),e._uU(5),e.qZA(),e.TgZ(6,"ion-note",2)(7,"div",3),e._uU(8),e.qZA(),e.TgZ(9,"div",4),e._uU(10),e.qZA()()()(),e.TgZ(11,"ion-content")(12,"form",5,6),e.NdJ("ngSubmit",function(){e.CHM(i);const s=e.MAs(13);return e.KtG(n.saveNext(s))})("keyup.enter",function(){e.CHM(i);const s=e.MAs(13);return e.KtG(n.saveNext(s))}),e.TgZ(14,"ion-list")(15,"app-wertung-avg-calc",7,8),e.NdJ("ngModelChange",function(s){return n.wertung.noteD=s}),e.qZA(),e.TgZ(17,"app-wertung-avg-calc",9,10),e.NdJ("ngModelChange",function(s){return n.wertung.noteE=s}),e.qZA(),e.TgZ(19,"ion-item")(20,"ion-label"),e._uU(21,"Endnote"),e.qZA(),e._UZ(22,"ion-input",11,12),e.qZA()(),e.TgZ(24,"ion-list"),e.YNc(25,P,2,0,"ion-item",13),e.YNc(26,N,4,1,"ion-button",14),e.YNc(27,W,3,1,"ion-button",15),e.qZA()()()}if(2&t){const i=e.MAs(13);e.xp6(5),e.Oqu(n.geraetName()),e.xp6(3),e.Oqu(n.item.vorname+" "+n.item.name),e.xp6(2),e.Oqu(n.wertung.riege),e.xp6(5),e.Q6J("hidden",!n.isDNoteUsed)("waiting",n.waiting)("valueTitle","D-Note")("ngModel",n.wertung.noteD),e.xp6(2),e.Q6J("hidden",!1)("waiting",n.waiting)("valueTitle","E-Note")("ngModel",n.wertung.noteE),e.xp6(5),e.Q6J("ngModel",n.wertung.endnote),e.xp6(3),e.Q6J("ngIf",!i.valid),e.xp6(1),e.Q6J("ngIf",n.editable()),e.xp6(1),e.Q6J("ngIf",n.editable())}},dependencies:[u.O5,c._Y,c.JJ,c.JL,c.On,c.F,a.oU,a.YG,a.Sm,a.W2,a.Gu,a.gu,a.pK,a.Ie,a.Q$,a.q_,a.uN,a.wd,a.sr,a.as,a.cs,A],styles:[".riege[_ngcontent-%COMP%]{font-size:small;padding-right:16px;color:var(--ion-color-medium)}.athlet[_ngcontent-%COMP%]{font-size:larger;padding-right:16px;font-weight:bolder;color:var(--ion-color-primary)}"]}),o})();var J=g(5051);const E=[{path:"",component:y}];let U=(()=>{class o{}return o.\u0275fac=function(t){return new(t||o)},o.\u0275mod=e.oAB({type:o}),o.\u0275inj=e.cJS({imports:[u.ez,c.u5,a.Pc,_.Bz.forChild(E),J.K]}),o})()}}]); \ No newline at end of file diff --git a/src/main/resources/app/index.html b/src/main/resources/app/index.html index 65033c647..55ccc3da0 100644 --- a/src/main/resources/app/index.html +++ b/src/main/resources/app/index.html @@ -16,11 +16,11 @@ - + - + \ No newline at end of file diff --git a/src/main/resources/app/runtime.ffe888036bd0294d.js b/src/main/resources/app/runtime.48414f9b526919b0.js similarity index 71% rename from src/main/resources/app/runtime.ffe888036bd0294d.js rename to src/main/resources/app/runtime.48414f9b526919b0.js index a1a53c188..631d70c91 100644 --- a/src/main/resources/app/runtime.ffe888036bd0294d.js +++ b/src/main/resources/app/runtime.48414f9b526919b0.js @@ -1 +1 @@ -(()=>{"use strict";var e,v={},g={};function a(e){var r=g[e];if(void 0!==r)return r.exports;var f=g[e]={exports:{}};return v[e].call(f.exports,f,f.exports,a),f.exports}a.m=v,e=[],a.O=(r,f,d,b)=>{if(!f){var t=1/0;for(c=0;c=b)&&Object.keys(a.O).every(p=>a.O[p](f[n]))?f.splice(n--,1):(l=!1,b0&&e[c-1][2]>b;c--)e[c]=e[c-1];e[c]=[f,d,b]},a.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return a.d(r,{a:r}),r},(()=>{var r,e=Object.getPrototypeOf?f=>Object.getPrototypeOf(f):f=>f.__proto__;a.t=function(f,d){if(1&d&&(f=this(f)),8&d||"object"==typeof f&&f&&(4&d&&f.__esModule||16&d&&"function"==typeof f.then))return f;var b=Object.create(null);a.r(b);var c={};r=r||[null,e({}),e([]),e(e)];for(var t=2&d&&f;"object"==typeof t&&!~r.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>c[l]=()=>f[l]);return c.default=()=>f,a.d(b,c),b}})(),a.d=(e,r)=>{for(var f in r)a.o(r,f)&&!a.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:r[f]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce((r,f)=>(a.f[f](e,r),r),[])),a.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"fc6a678bdb89d268",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3195:"2459a55b1d9db929",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"6d41065e22e54a84",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),a.miniCssF=e=>{},a.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e={},r="app:";a.l=(f,d,b,c)=>{if(e[f])e[f].push(d);else{var t,l;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[f];if(delete e[f],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),a.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;a.tt=()=>(void 0===e&&(e={createScriptURL:r=>r},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),a.tu=e=>a.tt().createScriptURL(e),a.p="",(()=>{var e={3666:0};a.f.j=(d,b)=>{var c=a.o(e,d)?e[d]:void 0;if(0!==c)if(c)b.push(c[2]);else if(3666!=d){var t=new Promise((o,s)=>c=e[d]=[o,s]);b.push(c[2]=t);var l=a.p+a.u(d),n=new Error;a.l(l,o=>{if(a.o(e,d)&&(0!==(c=e[d])&&(e[d]=void 0),c)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+d+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,c[1](n)}},"chunk-"+d,d)}else e[d]=0},a.O.j=d=>0===e[d];var r=(d,b)=>{var n,i,[c,t,l]=b,o=0;if(c.some(u=>0!==e[u])){for(n in t)a.o(t,n)&&(a.m[n]=t[n]);if(l)var s=l(a)}for(d&&d(b);o{"use strict";var e,v={},g={};function a(e){var r=g[e];if(void 0!==r)return r.exports;var f=g[e]={exports:{}};return v[e].call(f.exports,f,f.exports,a),f.exports}a.m=v,e=[],a.O=(r,f,d,c)=>{if(!f){var t=1/0;for(b=0;b=c)&&Object.keys(a.O).every(p=>a.O[p](f[n]))?f.splice(n--,1):(l=!1,c0&&e[b-1][2]>c;b--)e[b]=e[b-1];e[b]=[f,d,c]},a.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return a.d(r,{a:r}),r},(()=>{var r,e=Object.getPrototypeOf?f=>Object.getPrototypeOf(f):f=>f.__proto__;a.t=function(f,d){if(1&d&&(f=this(f)),8&d||"object"==typeof f&&f&&(4&d&&f.__esModule||16&d&&"function"==typeof f.then))return f;var c=Object.create(null);a.r(c);var b={};r=r||[null,e({}),e([]),e(e)];for(var t=2&d&&f;"object"==typeof t&&!~r.indexOf(t);t=e(t))Object.getOwnPropertyNames(t).forEach(l=>b[l]=()=>f[l]);return b.default=()=>f,a.d(c,b),c}})(),a.d=(e,r)=>{for(var f in r)a.o(r,f)&&!a.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:r[f]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce((r,f)=>(a.f[f](e,r),r),[])),a.u=e=>(({2214:"polyfills-core-js",6748:"polyfills-dom",8592:"common"}[e]||e)+"."+{170:"fc6a678bdb89d268",388:"2cc56dd1e98cae3d",438:"9ec911a0df5afdc0",657:"97259ec190535209",1033:"8bc7ac6ed1863f60",1053:"1dff9d397924ec7a",1118:"1e10687df55a8ab5",1186:"2e9191ac5768a25a",1217:"cb859d639454991e",1435:"5d70ac962fc59e2e",1536:"4983e9b49b3bc0d5",1650:"2e52d42ffe073d54",1709:"d194c3471abadc2e",1994:"0a612de5acb5acc4",2073:"60071770a679be0b",2175:"25786d1025bc61d5",2214:"c8961a92c3ed4c69",2289:"cff53a2ec587ce65",2349:"65a5739ccfbe1733",2680:"a93ed7da6519c29b",2698:"68c89d7500d4f034",2773:"b7f335b54ab92ca2",3050:"416ae5cbb7dd58e0",3093:"49ac46d3e198446f",3195:"2fff41a85276f1e9",3236:"3b398cac944d5f4c",3375:"c4c0ced563034418",3648:"99b5d231b0c18412",3804:"06b8ba0920eec6bf",4174:"e0a2a8348c2cae09",4330:"cd2a28fa8b69e379",4376:"e03b630b27def9e3",4432:"8f312f03b78ff780",4651:"52476a3db8953ded",4711:"c4a543144c001a8a",4753:"87d275a122136765",4902:"38c5bed5c0075cf5",4908:"a89eae9690b9f57d",4959:"e1856852044371b5",5168:"4fd1b9c1f6d3c40b",5201:"365321f9def48ded",5231:"6d41065e22e54a84",5323:"5e9c9a4f6e3d97be",5332:"3da782fd44dacff2",5349:"442240ca7b20893d",5652:"3413c6980ff995a7",5780:"f14e1b137e3620ed",5817:"a096ab3ab0722d3e",5836:"06f1b55dafb5d965",6120:"a487de8d8967bf8a",6482:"0717795ade13026d",6560:"068c5ba74e807553",6748:"5c5f23fb57b03028",7544:"45be1625636d8c0b",7602:"569c2d17835d3b57",8136:"3195a22340db7455",8592:"e4a6c7add2fbb56f",8628:"e6683e6f3d22b168",8939:"e268846754d2f8fb",9016:"c9db6e7c0f38d6ae",9230:"0354d3b2b2238cad",9325:"951188b0daa20ac3",9434:"1f05b1bd06653b68",9536:"2b9096fdb9e0a8c7",9654:"431048840c2eb01f",9718:"735f7870bf946271",9824:"83c2ff07be398614",9922:"ef8b2cd27edd8bee",9946:"67fed27f2e170d12",9958:"dee86144261ff052"}[e]+".js"),a.miniCssF=e=>{},a.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e={},r="app:";a.l=(f,d,c,b)=>{if(e[f])e[f].push(d);else{var t,l;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(u);var y=e[f];if(delete e[f],t.parentNode&&t.parentNode.removeChild(t),y&&y.forEach(_=>_(p)),m)return m(p)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=s.bind(null,t.onerror),t.onload=s.bind(null,t.onload),l&&document.head.appendChild(t)}}})(),a.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;a.tt=()=>(void 0===e&&(e={createScriptURL:r=>r},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),a.tu=e=>a.tt().createScriptURL(e),a.p="",(()=>{var e={3666:0};a.f.j=(d,c)=>{var b=a.o(e,d)?e[d]:void 0;if(0!==b)if(b)c.push(b[2]);else if(3666!=d){var t=new Promise((o,s)=>b=e[d]=[o,s]);c.push(b[2]=t);var l=a.p+a.u(d),n=new Error;a.l(l,o=>{if(a.o(e,d)&&(0!==(b=e[d])&&(e[d]=void 0),b)){var s=o&&("load"===o.type?"missing":o.type),u=o&&o.target&&o.target.src;n.message="Loading chunk "+d+" failed.\n("+s+": "+u+")",n.name="ChunkLoadError",n.type=s,n.request=u,b[1](n)}},"chunk-"+d,d)}else e[d]=0},a.O.j=d=>0===e[d];var r=(d,c)=>{var n,i,[b,t,l]=c,o=0;if(b.some(u=>0!==e[u])){for(n in t)a.o(t,n)&&(a.m[n]=t[n]);if(l)var s=l(a)}for(d&&d(c);o.ion-page.split-pane-main{position:relative}ion-route,ion-route-redirect,ion-router,ion-select-option,ion-nav-controller,ion-menu-controller,ion-action-sheet-controller,ion-alert-controller,ion-loading-controller,ion-modal-controller,ion-picker-controller,ion-popover-controller,ion-toast-controller,.ion-page-hidden,[hidden]{display:none!important}.ion-page-invisible{opacity:0}.can-go-back>ion-header ion-back-button{display:block}html.plt-ios.plt-hybrid,html.plt-ios.plt-pwa{--ion-statusbar-padding: 20px}@supports (padding-top: 20px){html{--ion-safe-area-top: var(--ion-statusbar-padding)}}@supports (padding-top: constant(safe-area-inset-top)){html{--ion-safe-area-top: constant(safe-area-inset-top);--ion-safe-area-bottom: constant(safe-area-inset-bottom);--ion-safe-area-left: constant(safe-area-inset-left);--ion-safe-area-right: constant(safe-area-inset-right)}}@supports (padding-top: env(safe-area-inset-top)){html{--ion-safe-area-top: env(safe-area-inset-top);--ion-safe-area-bottom: env(safe-area-inset-bottom);--ion-safe-area-left: env(safe-area-inset-left);--ion-safe-area-right: env(safe-area-inset-right)}}ion-card.ion-color .ion-inherit-color,ion-card-header.ion-color .ion-inherit-color{color:inherit}.menu-content{transform:translateZ(0)}.menu-content-open{cursor:pointer;touch-action:manipulation;pointer-events:none}.ios .menu-content-reveal{box-shadow:-8px 0 42px #00000014}[dir=rtl].ios .menu-content-reveal{box-shadow:8px 0 42px #00000014}.md .menu-content-reveal,.md .menu-content-push{box-shadow:4px 0 16px #0000002e}ion-accordion-group.accordion-group-expand-inset>ion-accordion:first-of-type{border-top-left-radius:8px;border-top-right-radius:8px}ion-accordion-group.accordion-group-expand-inset>ion-accordion:last-of-type{border-bottom-left-radius:8px;border-bottom-right-radius:8px}ion-accordion-group>ion-accordion:last-of-type ion-item[slot=header]{--border-width: 0px}ion-accordion.accordion-animated>[slot=header] .ion-accordion-toggle-icon{transition:.3s transform cubic-bezier(.25,.8,.5,1)}@media (prefers-reduced-motion: reduce){ion-accordion .ion-accordion-toggle-icon{transition:none!important}}ion-accordion.accordion-expanding>[slot=header] .ion-accordion-toggle-icon,ion-accordion.accordion-expanded>[slot=header] .ion-accordion-toggle-icon{transform:rotate(180deg)}ion-accordion-group.accordion-group-expand-inset.md>ion-accordion.accordion-previous ion-item[slot=header]{--border-width: 0px;--inner-border-width: 0px}ion-accordion-group.accordion-group-expand-inset.md>ion-accordion.accordion-expanding:first-of-type,ion-accordion-group.accordion-group-expand-inset.md>ion-accordion.accordion-expanded:first-of-type{margin-top:0}ion-input input::-webkit-date-and-time-value{text-align:start}.ion-datetime-button-overlay{--width: fit-content;--height: fit-content}.ion-datetime-button-overlay ion-datetime.datetime-grid{width:320px;min-height:320px}audio,canvas,progress,video{vertical-align:baseline}audio:not([controls]){display:none;height:0}b,strong{font-weight:700}img{max-width:100%;border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:1px;border-width:0;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}label,input,select,textarea{font-family:inherit;line-height:normal}textarea{overflow:auto;height:auto;font:inherit;color:inherit}textarea::placeholder{padding-left:2px}form,input,optgroup,select{margin:0;font:inherit;color:inherit}html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}a,a div,a span,a ion-icon,a ion-label,button,button div,button span,button ion-icon,button ion-label,.ion-tappable,[tappable],[tappable] div,[tappable] span,[tappable] ion-icon,[tappable] ion-label,input,textarea{touch-action:manipulation}a ion-label,button ion-label{pointer-events:none}button{padding:0;border:0;border-radius:0;font-family:inherit;font-style:inherit;font-variant:inherit;line-height:1;text-transform:none;cursor:pointer;-webkit-appearance:button}[tappable]{cursor:pointer}a[disabled],button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input[type=checkbox],input[type=radio]{padding:0;box-sizing:border-box}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}html{width:100%;height:100%;-webkit-text-size-adjust:100%;text-size-adjust:100%}html:not(.hydrated) body{display:none}html.ion-ce body{display:block}html.plt-pwa{height:100vh}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin:0;padding:0;position:fixed;width:100%;max-width:100%;height:100%;max-height:100%;transform:translateZ(0);text-rendering:optimizeLegibility;overflow:hidden;touch-action:manipulation;-webkit-user-drag:none;-ms-content-zooming:none;word-wrap:break-word;overscroll-behavior-y:none;-webkit-text-size-adjust:none;text-size-adjust:none}html{font-family:var(--ion-font-family)}a{background-color:transparent;color:var(--ion-color-primary, #3880ff)}h1,h2,h3,h4,h5,h6{margin-top:16px;margin-bottom:10px;font-weight:500;line-height:1.2}h1{margin-top:20px;font-size:26px}h2{margin-top:18px;font-size:24px}h3{font-size:22px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}small{font-size:75%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}.ion-hide,.ion-hide-up,.ion-hide-down{display:none!important}@media (min-width: 576px){.ion-hide-sm-up{display:none!important}}@media (max-width: 575.98px){.ion-hide-sm-down{display:none!important}}@media (min-width: 768px){.ion-hide-md-up{display:none!important}}@media (max-width: 767.98px){.ion-hide-md-down{display:none!important}}@media (min-width: 992px){.ion-hide-lg-up{display:none!important}}@media (max-width: 991.98px){.ion-hide-lg-down{display:none!important}}@media (min-width: 1200px){.ion-hide-xl-up{display:none!important}}@media (max-width: 1199.98px){.ion-hide-xl-down{display:none!important}}.ion-no-padding{--padding-start: 0;--padding-end: 0;--padding-top: 0;--padding-bottom: 0;padding:0}.ion-padding{--padding-start: var(--ion-padding, 16px);--padding-end: var(--ion-padding, 16px);--padding-top: var(--ion-padding, 16px);--padding-bottom: var(--ion-padding, 16px);padding-left:var(--ion-padding, 16px);padding-right:var(--ion-padding, 16px);padding-top:var(--ion-padding, 16px);padding-bottom:var(--ion-padding, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-padding{padding-left:unset;padding-right:unset;padding-inline-start:var(--ion-padding, 16px);padding-inline-end:var(--ion-padding, 16px)}}.ion-padding-top{--padding-top: var(--ion-padding, 16px);padding-top:var(--ion-padding, 16px)}.ion-padding-start{--padding-start: var(--ion-padding, 16px);padding-left:var(--ion-padding, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-padding-start{padding-left:unset;padding-inline-start:var(--ion-padding, 16px)}}.ion-padding-end{--padding-end: var(--ion-padding, 16px);padding-right:var(--ion-padding, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-padding-end{padding-right:unset;padding-inline-end:var(--ion-padding, 16px)}}.ion-padding-bottom{--padding-bottom: var(--ion-padding, 16px);padding-bottom:var(--ion-padding, 16px)}.ion-padding-vertical{--padding-top: var(--ion-padding, 16px);--padding-bottom: var(--ion-padding, 16px);padding-top:var(--ion-padding, 16px);padding-bottom:var(--ion-padding, 16px)}.ion-padding-horizontal{--padding-start: var(--ion-padding, 16px);--padding-end: var(--ion-padding, 16px);padding-left:var(--ion-padding, 16px);padding-right:var(--ion-padding, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-padding-horizontal{padding-left:unset;padding-right:unset;padding-inline-start:var(--ion-padding, 16px);padding-inline-end:var(--ion-padding, 16px)}}.ion-no-margin{--margin-start: 0;--margin-end: 0;--margin-top: 0;--margin-bottom: 0;margin:0}.ion-margin{--margin-start: var(--ion-margin, 16px);--margin-end: var(--ion-margin, 16px);--margin-top: var(--ion-margin, 16px);--margin-bottom: var(--ion-margin, 16px);margin-left:var(--ion-margin, 16px);margin-right:var(--ion-margin, 16px);margin-top:var(--ion-margin, 16px);margin-bottom:var(--ion-margin, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-margin{margin-left:unset;margin-right:unset;margin-inline-start:var(--ion-margin, 16px);margin-inline-end:var(--ion-margin, 16px)}}.ion-margin-top{--margin-top: var(--ion-margin, 16px);margin-top:var(--ion-margin, 16px)}.ion-margin-start{--margin-start: var(--ion-margin, 16px);margin-left:var(--ion-margin, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-margin-start{margin-left:unset;margin-inline-start:var(--ion-margin, 16px)}}.ion-margin-end{--margin-end: var(--ion-margin, 16px);margin-right:var(--ion-margin, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-margin-end{margin-right:unset;margin-inline-end:var(--ion-margin, 16px)}}.ion-margin-bottom{--margin-bottom: var(--ion-margin, 16px);margin-bottom:var(--ion-margin, 16px)}.ion-margin-vertical{--margin-top: var(--ion-margin, 16px);--margin-bottom: var(--ion-margin, 16px);margin-top:var(--ion-margin, 16px);margin-bottom:var(--ion-margin, 16px)}.ion-margin-horizontal{--margin-start: var(--ion-margin, 16px);--margin-end: var(--ion-margin, 16px);margin-left:var(--ion-margin, 16px);margin-right:var(--ion-margin, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-margin-horizontal{margin-left:unset;margin-right:unset;margin-inline-start:var(--ion-margin, 16px);margin-inline-end:var(--ion-margin, 16px)}}.ion-float-left{float:left!important}.ion-float-right{float:right!important}.ion-float-start{float:left!important}[dir=rtl] .ion-float-start,:host-context([dir=rtl]) .ion-float-start{float:right!important}.ion-float-end{float:right!important}[dir=rtl] .ion-float-end,:host-context([dir=rtl]) .ion-float-end{float:left!important}@media (min-width: 576px){.ion-float-sm-left{float:left!important}.ion-float-sm-right{float:right!important}.ion-float-sm-start{float:left!important}[dir=rtl] .ion-float-sm-start,:host-context([dir=rtl]) .ion-float-sm-start{float:right!important}.ion-float-sm-end{float:right!important}[dir=rtl] .ion-float-sm-end,:host-context([dir=rtl]) .ion-float-sm-end{float:left!important}}@media (min-width: 768px){.ion-float-md-left{float:left!important}.ion-float-md-right{float:right!important}.ion-float-md-start{float:left!important}[dir=rtl] .ion-float-md-start,:host-context([dir=rtl]) .ion-float-md-start{float:right!important}.ion-float-md-end{float:right!important}[dir=rtl] .ion-float-md-end,:host-context([dir=rtl]) .ion-float-md-end{float:left!important}}@media (min-width: 992px){.ion-float-lg-left{float:left!important}.ion-float-lg-right{float:right!important}.ion-float-lg-start{float:left!important}[dir=rtl] .ion-float-lg-start,:host-context([dir=rtl]) .ion-float-lg-start{float:right!important}.ion-float-lg-end{float:right!important}[dir=rtl] .ion-float-lg-end,:host-context([dir=rtl]) .ion-float-lg-end{float:left!important}}@media (min-width: 1200px){.ion-float-xl-left{float:left!important}.ion-float-xl-right{float:right!important}.ion-float-xl-start{float:left!important}[dir=rtl] .ion-float-xl-start,:host-context([dir=rtl]) .ion-float-xl-start{float:right!important}.ion-float-xl-end{float:right!important}[dir=rtl] .ion-float-xl-end,:host-context([dir=rtl]) .ion-float-xl-end{float:left!important}}.ion-text-center{text-align:center!important}.ion-text-justify{text-align:justify!important}.ion-text-start{text-align:start!important}.ion-text-end{text-align:end!important}.ion-text-left{text-align:left!important}.ion-text-right{text-align:right!important}.ion-text-nowrap{white-space:nowrap!important}.ion-text-wrap{white-space:normal!important}@media (min-width: 576px){.ion-text-sm-center{text-align:center!important}.ion-text-sm-justify{text-align:justify!important}.ion-text-sm-start{text-align:start!important}.ion-text-sm-end{text-align:end!important}.ion-text-sm-left{text-align:left!important}.ion-text-sm-right{text-align:right!important}.ion-text-sm-nowrap{white-space:nowrap!important}.ion-text-sm-wrap{white-space:normal!important}}@media (min-width: 768px){.ion-text-md-center{text-align:center!important}.ion-text-md-justify{text-align:justify!important}.ion-text-md-start{text-align:start!important}.ion-text-md-end{text-align:end!important}.ion-text-md-left{text-align:left!important}.ion-text-md-right{text-align:right!important}.ion-text-md-nowrap{white-space:nowrap!important}.ion-text-md-wrap{white-space:normal!important}}@media (min-width: 992px){.ion-text-lg-center{text-align:center!important}.ion-text-lg-justify{text-align:justify!important}.ion-text-lg-start{text-align:start!important}.ion-text-lg-end{text-align:end!important}.ion-text-lg-left{text-align:left!important}.ion-text-lg-right{text-align:right!important}.ion-text-lg-nowrap{white-space:nowrap!important}.ion-text-lg-wrap{white-space:normal!important}}@media (min-width: 1200px){.ion-text-xl-center{text-align:center!important}.ion-text-xl-justify{text-align:justify!important}.ion-text-xl-start{text-align:start!important}.ion-text-xl-end{text-align:end!important}.ion-text-xl-left{text-align:left!important}.ion-text-xl-right{text-align:right!important}.ion-text-xl-nowrap{white-space:nowrap!important}.ion-text-xl-wrap{white-space:normal!important}}.ion-text-uppercase{text-transform:uppercase!important}.ion-text-lowercase{text-transform:lowercase!important}.ion-text-capitalize{text-transform:capitalize!important}@media (min-width: 576px){.ion-text-sm-uppercase{text-transform:uppercase!important}.ion-text-sm-lowercase{text-transform:lowercase!important}.ion-text-sm-capitalize{text-transform:capitalize!important}}@media (min-width: 768px){.ion-text-md-uppercase{text-transform:uppercase!important}.ion-text-md-lowercase{text-transform:lowercase!important}.ion-text-md-capitalize{text-transform:capitalize!important}}@media (min-width: 992px){.ion-text-lg-uppercase{text-transform:uppercase!important}.ion-text-lg-lowercase{text-transform:lowercase!important}.ion-text-lg-capitalize{text-transform:capitalize!important}}@media (min-width: 1200px){.ion-text-xl-uppercase{text-transform:uppercase!important}.ion-text-xl-lowercase{text-transform:lowercase!important}.ion-text-xl-capitalize{text-transform:capitalize!important}}.ion-align-self-start{align-self:flex-start!important}.ion-align-self-end{align-self:flex-end!important}.ion-align-self-center{align-self:center!important}.ion-align-self-stretch{align-self:stretch!important}.ion-align-self-baseline{align-self:baseline!important}.ion-align-self-auto{align-self:auto!important}.ion-wrap{flex-wrap:wrap!important}.ion-nowrap{flex-wrap:nowrap!important}.ion-wrap-reverse{flex-wrap:wrap-reverse!important}.ion-justify-content-start{justify-content:flex-start!important}.ion-justify-content-center{justify-content:center!important}.ion-justify-content-end{justify-content:flex-end!important}.ion-justify-content-around{justify-content:space-around!important}.ion-justify-content-between{justify-content:space-between!important}.ion-justify-content-evenly{justify-content:space-evenly!important}.ion-align-items-start{align-items:flex-start!important}.ion-align-items-center{align-items:center!important}.ion-align-items-end{align-items:flex-end!important}.ion-align-items-stretch{align-items:stretch!important}.ion-align-items-baseline{align-items:baseline!important}ion-auto-complete{overflow:hidden!important;width:90vw;display:inline-block}ion-auto-complete ion-searchbar{padding:1px!important}ion-auto-complete .disabled input.searchbar-input{pointer-events:none;cursor:default}ion-auto-complete ul{position:absolute;width:90vw;margin-top:0;background:#FFF;list-style-type:none;padding:0;left:16px;z-index:999;box-shadow:0 2px 2px #00000024,0 3px 1px -2px #0003,0 1px 5px #0000001f}ion-auto-complete ul li{padding:15px;border-bottom:1px solid #c1c1c1}ion-auto-complete ul li span{pointer-events:none}ion-auto-complete ul ion-auto-complete-item{height:40px;width:100%}ion-auto-complete ul li:last-child{border:none}ion-auto-complete ul li:focus,ion-auto-complete ul li.focus{cursor:pointer;background:#f1f1f1}ion-auto-complete .hidden{display:none}ion-auto-complete .loading input.searchbar-input{background:white url(/assets/loading.gif) no-repeat right 4px center;background-size:25px 25px}ion-auto-complete .searchbar-clear-button.sc-ion-searchbar-md{right:34px}ion-auto-complete .selected-items{float:left} diff --git a/src/main/resources/app/styles.f6c3bb51aaf1fc59.css b/src/main/resources/app/styles.f6c3bb51aaf1fc59.css new file mode 100644 index 000000000..38036fdd9 --- /dev/null +++ b/src/main/resources/app/styles.f6c3bb51aaf1fc59.css @@ -0,0 +1 @@ +:test{primary:#3880ff;secondary:#0cd1e8;tertiary:#7044ff;success:#10dc60;warning:#ffce00;danger:#f04141;dark:#222428;medium:#989aa2;light:#f4f5f8}:root{--ion-color-primary: #3880ff;--ion-color-primary-rgb: 56, 128, 255;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #3171e0;--ion-color-primary-tint: #4c8dff;--ion-color-secondary: #3dc2ff;--ion-color-secondary-rgb: 61, 194, 255;--ion-color-secondary-contrast: #ffffff;--ion-color-secondary-contrast-rgb: 255, 255, 255;--ion-color-secondary-shade: #36abe0;--ion-color-secondary-tint: #50c8ff;--ion-color-tertiary: #5260ff;--ion-color-tertiary-rgb: 82, 96, 255;--ion-color-tertiary-contrast: #ffffff;--ion-color-tertiary-contrast-rgb: 255, 255, 255;--ion-color-tertiary-shade: #4854e0;--ion-color-tertiary-tint: #6370ff;--ion-color-success: #2dd36f;--ion-color-success-rgb: 45, 211, 111;--ion-color-success-contrast: #ffffff;--ion-color-success-contrast-rgb: 255, 255, 255;--ion-color-success-shade: #28ba62;--ion-color-success-tint: #42d77d;--ion-color-warning: #ffc409;--ion-color-warning-rgb: 255, 196, 9;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0ac08;--ion-color-warning-tint: #ffca22;--ion-color-danger: #eb445a;--ion-color-danger-rgb: 235, 68, 90;--ion-color-danger-contrast: #ffffff;--ion-color-danger-contrast-rgb: 255, 255, 255;--ion-color-danger-shade: #cf3c4f;--ion-color-danger-tint: #ed576b;--ion-color-dark: #222428;--ion-color-dark-rgb: 34, 36, 40;--ion-color-dark-contrast: #ffffff;--ion-color-dark-contrast-rgb: 255, 255, 255;--ion-color-dark-shade: #1e2023;--ion-color-dark-tint: #383a3e;--ion-color-medium: #92949c;--ion-color-medium-rgb: 146, 148, 156;--ion-color-medium-contrast: #ffffff;--ion-color-medium-contrast-rgb: 255, 255, 255;--ion-color-medium-shade: #808289;--ion-color-medium-tint: #9d9fa6;--ion-color-light: #f4f5f8;--ion-color-light-rgb: 244, 245, 248;--ion-color-light-contrast: #000000;--ion-color-light-contrast-rgb: 0, 0, 0;--ion-color-light-shade: #d7d8da;--ion-color-light-tint: #f5f6f9;--ion-default-font: "Helvetica Neue", "Roboto", sans-serif}@charset "UTF-8";.alert-head,.alert-head-md,.alert-head-ios{background-color:var(--ion-item-background-color);color:var(--ion-item-text-color)}.alert-radio-label.sc-ion-alert-md,.alert-radio-label.sc-ion-alert-ios{color:var(--ion-item-text-color)}[aria-checked=true].sc-ion-alert-md .alert-radio-label.sc-ion-alert-md,[aria-checked=true].sc-ion-alert-ios .alert-radio-label.sc-ion-alert-ios{color:var(--ion-color-primary)}.sc-ion-loading-md-h,.sc-ion-loading-ios-h{--background: var(--ion-color-step-50,#f2f2f2);--spinner-color: var(--ion-color-primary,#666);color:var(--ion-color-step-850)}ion-icon{color:var(--ion-item-color, var(--ion-text-color, #000))}ion-toolbar{--background: var(--ion-toolbar-background-color)}ion-grid ion-label{color:var(--ion-item-text-color)}ion-toolbar ion-note{font-size:small;padding-right:16px;color:var(--ion-color-primary)}.sc-ion-searchbar-md-h,.sc-ion-searchbar-ios-h{--color: var(--ion-item-text-color)}.alert-head.sc-ion-alert-md+.alert-message.sc-ion-alert-md:empty,.alert-head.sc-ion-alert-ios+.alert-message.sc-ion-alert-ios:empty{padding-top:0;padding-bottom:0}.alert-head+.alert-message,.alert-head.sc-ion-alert-md+.alert-message.sc-ion-alert-md,.alert-head.sc-ion-alert-ios+.alert-message.sc-ion-alert-ios{padding-top:15px}.stateinfo{font-family:Courier New,Courier,monospace;font-weight:700;font-size:smaller}ion-note{color:var(--ion-color-warning)}.gradient-border{--borderWidth: 3px;position:relative;border-radius:var(--borderWidth);background-clip:padding-box;border:solid var(--borderWidth) transparent}.gradient-border ion-card{margin:auto;position:relative;color:var(--ion-card-color);background-color:var(--ion-card-background-color)}.gradient-border:before{content:"";position:absolute;top:calc(-1 * var(--borderWidth));left:calc(-1 * var(--borderWidth));height:calc(100% + var(--borderWidth) * 2);width:calc(100% + var(--borderWidth) * 2);background:linear-gradient(60deg,#f79533,#f37055,#ef4e7b,#a166ab,#5073b8,#1098ad,#07b39b,#6fba82);border-radius:calc(2 * var(--borderWidth));animation:animatedgradient 10s ease alternate;background-size:300% 300%}@keyframes animatedgradient{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}ion-select{max-width:80%!important}.select-alert,.sc-ion-alert-md-h,.my-optionselection-class .alert-wrapper{--width: 80%;--max-width: auto;--min-width: 250px}.my-actionsheet-class .action-sheet-group{--background: var(--ion-item-background-color);--button-background: var(--ion-overlay-background-color);--button-background-selected-opacity: 0;--button-background-activated: var(----ion-item-background-activated);--button-color: var(--ion-item-text-color);--button-color-hover: var(--ion-color-primary);--button-color-focused: var(--ion-color-primary);--color: var(--ion-item-text-color)}.my-actionsheet-class .action-sheet-group .action-sheet-destructive{--color: var(--ion-color-danger);--button-color: var(--ion-color-danger)}.my-actionsheet-class .action-sheet-group .action-sheet-cancel{--color: var(--ion-color-secondary);--button-color: var(--ion-color-secondary)}.suggester{width:100%}.suggester .loading input.searchbar-input{background:var(--ion-overlay-background-color)}.suggester ul{color:var(--ion-item-text-color);background:var(--ion-overlay-background-color)}.suggester ul li{color:var(--ion-item-text-color);background:var(--ion-background-color)}.suggester ul li:hover{background:var(--button-background);color:var(--button-color-hover)}.suggester ul li:focus,.suggester ul li.focus{background:var(----ion-item-background-activated);color:var(--ion-color-primary)}html.ios{--ion-default-font: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Roboto", sans-serif}html.md{--ion-default-font: "Roboto", "Helvetica Neue", sans-serif}html{--ion-font-family: var(--ion-default-font)}body{background:var(--ion-background-color)}body.backdrop-no-scroll{overflow:hidden}html.ios ion-modal.modal-card ion-header ion-toolbar:first-of-type,html.ios ion-modal.modal-sheet ion-header ion-toolbar:first-of-type,html.ios ion-modal ion-footer ion-toolbar:first-of-type{padding-top:6px}html.ios ion-modal.modal-card ion-header ion-toolbar:last-of-type,html.ios ion-modal.modal-sheet ion-header ion-toolbar:last-of-type{padding-bottom:6px}html.ios ion-modal ion-toolbar{padding-right:calc(var(--ion-safe-area-right) + 8px);padding-left:calc(var(--ion-safe-area-left) + 8px)}@media screen and (min-width: 768px){html.ios ion-modal.modal-card:first-of-type{--backdrop-opacity: .18}}ion-modal.modal-default:not(.overlay-hidden)~ion-modal.modal-default{--backdrop-opacity: 0;--box-shadow: none}html.ios ion-modal.modal-card .ion-page{border-top-left-radius:var(--border-radius)}.ion-color-primary{--ion-color-base: var(--ion-color-primary, #3880ff) !important;--ion-color-base-rgb: var(--ion-color-primary-rgb, 56, 128, 255) !important;--ion-color-contrast: var(--ion-color-primary-contrast, #fff) !important;--ion-color-contrast-rgb: var(--ion-color-primary-contrast-rgb, 255, 255, 255) !important;--ion-color-shade: var(--ion-color-primary-shade, #3171e0) !important;--ion-color-tint: var(--ion-color-primary-tint, #4c8dff) !important}.ion-color-secondary{--ion-color-base: var(--ion-color-secondary, #3dc2ff) !important;--ion-color-base-rgb: var(--ion-color-secondary-rgb, 61, 194, 255) !important;--ion-color-contrast: var(--ion-color-secondary-contrast, #fff) !important;--ion-color-contrast-rgb: var(--ion-color-secondary-contrast-rgb, 255, 255, 255) !important;--ion-color-shade: var(--ion-color-secondary-shade, #36abe0) !important;--ion-color-tint: var(--ion-color-secondary-tint, #50c8ff) !important}.ion-color-tertiary{--ion-color-base: var(--ion-color-tertiary, #5260ff) !important;--ion-color-base-rgb: var(--ion-color-tertiary-rgb, 82, 96, 255) !important;--ion-color-contrast: var(--ion-color-tertiary-contrast, #fff) !important;--ion-color-contrast-rgb: var(--ion-color-tertiary-contrast-rgb, 255, 255, 255) !important;--ion-color-shade: var(--ion-color-tertiary-shade, #4854e0) !important;--ion-color-tint: var(--ion-color-tertiary-tint, #6370ff) !important}.ion-color-success{--ion-color-base: var(--ion-color-success, #2dd36f) !important;--ion-color-base-rgb: var(--ion-color-success-rgb, 45, 211, 111) !important;--ion-color-contrast: var(--ion-color-success-contrast, #fff) !important;--ion-color-contrast-rgb: var(--ion-color-success-contrast-rgb, 255, 255, 255) !important;--ion-color-shade: var(--ion-color-success-shade, #28ba62) !important;--ion-color-tint: var(--ion-color-success-tint, #42d77d) !important}.ion-color-warning{--ion-color-base: var(--ion-color-warning, #ffc409) !important;--ion-color-base-rgb: var(--ion-color-warning-rgb, 255, 196, 9) !important;--ion-color-contrast: var(--ion-color-warning-contrast, #000) !important;--ion-color-contrast-rgb: var(--ion-color-warning-contrast-rgb, 0, 0, 0) !important;--ion-color-shade: var(--ion-color-warning-shade, #e0ac08) !important;--ion-color-tint: var(--ion-color-warning-tint, #ffca22) !important}.ion-color-danger{--ion-color-base: var(--ion-color-danger, #eb445a) !important;--ion-color-base-rgb: var(--ion-color-danger-rgb, 235, 68, 90) !important;--ion-color-contrast: var(--ion-color-danger-contrast, #fff) !important;--ion-color-contrast-rgb: var(--ion-color-danger-contrast-rgb, 255, 255, 255) !important;--ion-color-shade: var(--ion-color-danger-shade, #cf3c4f) !important;--ion-color-tint: var(--ion-color-danger-tint, #ed576b) !important}.ion-color-light{--ion-color-base: var(--ion-color-light, #f4f5f8) !important;--ion-color-base-rgb: var(--ion-color-light-rgb, 244, 245, 248) !important;--ion-color-contrast: var(--ion-color-light-contrast, #000) !important;--ion-color-contrast-rgb: var(--ion-color-light-contrast-rgb, 0, 0, 0) !important;--ion-color-shade: var(--ion-color-light-shade, #d7d8da) !important;--ion-color-tint: var(--ion-color-light-tint, #f5f6f9) !important}.ion-color-medium{--ion-color-base: var(--ion-color-medium, #92949c) !important;--ion-color-base-rgb: var(--ion-color-medium-rgb, 146, 148, 156) !important;--ion-color-contrast: var(--ion-color-medium-contrast, #fff) !important;--ion-color-contrast-rgb: var(--ion-color-medium-contrast-rgb, 255, 255, 255) !important;--ion-color-shade: var(--ion-color-medium-shade, #808289) !important;--ion-color-tint: var(--ion-color-medium-tint, #9d9fa6) !important}.ion-color-dark{--ion-color-base: var(--ion-color-dark, #222428) !important;--ion-color-base-rgb: var(--ion-color-dark-rgb, 34, 36, 40) !important;--ion-color-contrast: var(--ion-color-dark-contrast, #fff) !important;--ion-color-contrast-rgb: var(--ion-color-dark-contrast-rgb, 255, 255, 255) !important;--ion-color-shade: var(--ion-color-dark-shade, #1e2023) !important;--ion-color-tint: var(--ion-color-dark-tint, #383a3e) !important}.ion-page{inset:0;display:flex;position:absolute;flex-direction:column;justify-content:space-between;contain:layout size style;overflow:hidden;z-index:0}ion-modal .ion-page:not(ion-nav .ion-page){position:relative;contain:layout style;height:100%}.split-pane-visible>.ion-page.split-pane-main{position:relative}ion-route,ion-route-redirect,ion-router,ion-select-option,ion-nav-controller,ion-menu-controller,ion-action-sheet-controller,ion-alert-controller,ion-loading-controller,ion-modal-controller,ion-picker-controller,ion-popover-controller,ion-toast-controller,.ion-page-hidden,[hidden]{display:none!important}.ion-page-invisible{opacity:0}.can-go-back>ion-header ion-back-button{display:block}html.plt-ios.plt-hybrid,html.plt-ios.plt-pwa{--ion-statusbar-padding: 20px}@supports (padding-top: 20px){html{--ion-safe-area-top: var(--ion-statusbar-padding)}}@supports (padding-top: constant(safe-area-inset-top)){html{--ion-safe-area-top: constant(safe-area-inset-top);--ion-safe-area-bottom: constant(safe-area-inset-bottom);--ion-safe-area-left: constant(safe-area-inset-left);--ion-safe-area-right: constant(safe-area-inset-right)}}@supports (padding-top: env(safe-area-inset-top)){html{--ion-safe-area-top: env(safe-area-inset-top);--ion-safe-area-bottom: env(safe-area-inset-bottom);--ion-safe-area-left: env(safe-area-inset-left);--ion-safe-area-right: env(safe-area-inset-right)}}ion-card.ion-color .ion-inherit-color,ion-card-header.ion-color .ion-inherit-color{color:inherit}.menu-content{transform:translateZ(0)}.menu-content-open{cursor:pointer;touch-action:manipulation;pointer-events:none}.ios .menu-content-reveal{box-shadow:-8px 0 42px #00000014}[dir=rtl].ios .menu-content-reveal{box-shadow:8px 0 42px #00000014}.md .menu-content-reveal,.md .menu-content-push{box-shadow:4px 0 16px #0000002e}ion-accordion-group.accordion-group-expand-inset>ion-accordion:first-of-type{border-top-left-radius:8px;border-top-right-radius:8px}ion-accordion-group.accordion-group-expand-inset>ion-accordion:last-of-type{border-bottom-left-radius:8px;border-bottom-right-radius:8px}ion-accordion-group>ion-accordion:last-of-type ion-item[slot=header]{--border-width: 0px}ion-accordion.accordion-animated>[slot=header] .ion-accordion-toggle-icon{transition:.3s transform cubic-bezier(.25,.8,.5,1)}@media (prefers-reduced-motion: reduce){ion-accordion .ion-accordion-toggle-icon{transition:none!important}}ion-accordion.accordion-expanding>[slot=header] .ion-accordion-toggle-icon,ion-accordion.accordion-expanded>[slot=header] .ion-accordion-toggle-icon{transform:rotate(180deg)}ion-accordion-group.accordion-group-expand-inset.md>ion-accordion.accordion-previous ion-item[slot=header]{--border-width: 0px;--inner-border-width: 0px}ion-accordion-group.accordion-group-expand-inset.md>ion-accordion.accordion-expanding:first-of-type,ion-accordion-group.accordion-group-expand-inset.md>ion-accordion.accordion-expanded:first-of-type{margin-top:0}ion-input input::-webkit-date-and-time-value{text-align:start}.ion-datetime-button-overlay{--width: fit-content;--height: fit-content}.ion-datetime-button-overlay ion-datetime.datetime-grid{width:320px;min-height:320px}audio,canvas,progress,video{vertical-align:baseline}audio:not([controls]){display:none;height:0}b,strong{font-weight:700}img{max-width:100%;border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:1px;border-width:0;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}label,input,select,textarea{font-family:inherit;line-height:normal}textarea{overflow:auto;height:auto;font:inherit;color:inherit}textarea::placeholder{padding-left:2px}form,input,optgroup,select{margin:0;font:inherit;color:inherit}html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}a,a div,a span,a ion-icon,a ion-label,button,button div,button span,button ion-icon,button ion-label,.ion-tappable,[tappable],[tappable] div,[tappable] span,[tappable] ion-icon,[tappable] ion-label,input,textarea{touch-action:manipulation}a ion-label,button ion-label{pointer-events:none}button{padding:0;border:0;border-radius:0;font-family:inherit;font-style:inherit;font-variant:inherit;line-height:1;text-transform:none;cursor:pointer;-webkit-appearance:button}[tappable]{cursor:pointer}a[disabled],button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input[type=checkbox],input[type=radio]{padding:0;box-sizing:border-box}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}html{width:100%;height:100%;-webkit-text-size-adjust:100%;text-size-adjust:100%}html:not(.hydrated) body{display:none}html.ion-ce body{display:block}html.plt-pwa{height:100vh}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin:0;padding:0;position:fixed;width:100%;max-width:100%;height:100%;max-height:100%;transform:translateZ(0);text-rendering:optimizeLegibility;overflow:hidden;touch-action:manipulation;-webkit-user-drag:none;-ms-content-zooming:none;word-wrap:break-word;overscroll-behavior-y:none;-webkit-text-size-adjust:none;text-size-adjust:none}html{font-family:var(--ion-font-family)}a{background-color:transparent;color:var(--ion-color-primary, #3880ff)}h1,h2,h3,h4,h5,h6{margin-top:16px;margin-bottom:10px;font-weight:500;line-height:1.2}h1{margin-top:20px;font-size:26px}h2{margin-top:18px;font-size:24px}h3{font-size:22px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}small{font-size:75%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}.ion-hide,.ion-hide-up,.ion-hide-down{display:none!important}@media (min-width: 576px){.ion-hide-sm-up{display:none!important}}@media (max-width: 575.98px){.ion-hide-sm-down{display:none!important}}@media (min-width: 768px){.ion-hide-md-up{display:none!important}}@media (max-width: 767.98px){.ion-hide-md-down{display:none!important}}@media (min-width: 992px){.ion-hide-lg-up{display:none!important}}@media (max-width: 991.98px){.ion-hide-lg-down{display:none!important}}@media (min-width: 1200px){.ion-hide-xl-up{display:none!important}}@media (max-width: 1199.98px){.ion-hide-xl-down{display:none!important}}.ion-no-padding{--padding-start: 0;--padding-end: 0;--padding-top: 0;--padding-bottom: 0;padding:0}.ion-padding{--padding-start: var(--ion-padding, 16px);--padding-end: var(--ion-padding, 16px);--padding-top: var(--ion-padding, 16px);--padding-bottom: var(--ion-padding, 16px);padding-left:var(--ion-padding, 16px);padding-right:var(--ion-padding, 16px);padding-top:var(--ion-padding, 16px);padding-bottom:var(--ion-padding, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-padding{padding-left:unset;padding-right:unset;padding-inline-start:var(--ion-padding, 16px);padding-inline-end:var(--ion-padding, 16px)}}.ion-padding-top{--padding-top: var(--ion-padding, 16px);padding-top:var(--ion-padding, 16px)}.ion-padding-start{--padding-start: var(--ion-padding, 16px);padding-left:var(--ion-padding, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-padding-start{padding-left:unset;padding-inline-start:var(--ion-padding, 16px)}}.ion-padding-end{--padding-end: var(--ion-padding, 16px);padding-right:var(--ion-padding, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-padding-end{padding-right:unset;padding-inline-end:var(--ion-padding, 16px)}}.ion-padding-bottom{--padding-bottom: var(--ion-padding, 16px);padding-bottom:var(--ion-padding, 16px)}.ion-padding-vertical{--padding-top: var(--ion-padding, 16px);--padding-bottom: var(--ion-padding, 16px);padding-top:var(--ion-padding, 16px);padding-bottom:var(--ion-padding, 16px)}.ion-padding-horizontal{--padding-start: var(--ion-padding, 16px);--padding-end: var(--ion-padding, 16px);padding-left:var(--ion-padding, 16px);padding-right:var(--ion-padding, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-padding-horizontal{padding-left:unset;padding-right:unset;padding-inline-start:var(--ion-padding, 16px);padding-inline-end:var(--ion-padding, 16px)}}.ion-no-margin{--margin-start: 0;--margin-end: 0;--margin-top: 0;--margin-bottom: 0;margin:0}.ion-margin{--margin-start: var(--ion-margin, 16px);--margin-end: var(--ion-margin, 16px);--margin-top: var(--ion-margin, 16px);--margin-bottom: var(--ion-margin, 16px);margin-left:var(--ion-margin, 16px);margin-right:var(--ion-margin, 16px);margin-top:var(--ion-margin, 16px);margin-bottom:var(--ion-margin, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-margin{margin-left:unset;margin-right:unset;margin-inline-start:var(--ion-margin, 16px);margin-inline-end:var(--ion-margin, 16px)}}.ion-margin-top{--margin-top: var(--ion-margin, 16px);margin-top:var(--ion-margin, 16px)}.ion-margin-start{--margin-start: var(--ion-margin, 16px);margin-left:var(--ion-margin, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-margin-start{margin-left:unset;margin-inline-start:var(--ion-margin, 16px)}}.ion-margin-end{--margin-end: var(--ion-margin, 16px);margin-right:var(--ion-margin, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-margin-end{margin-right:unset;margin-inline-end:var(--ion-margin, 16px)}}.ion-margin-bottom{--margin-bottom: var(--ion-margin, 16px);margin-bottom:var(--ion-margin, 16px)}.ion-margin-vertical{--margin-top: var(--ion-margin, 16px);--margin-bottom: var(--ion-margin, 16px);margin-top:var(--ion-margin, 16px);margin-bottom:var(--ion-margin, 16px)}.ion-margin-horizontal{--margin-start: var(--ion-margin, 16px);--margin-end: var(--ion-margin, 16px);margin-left:var(--ion-margin, 16px);margin-right:var(--ion-margin, 16px)}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.ion-margin-horizontal{margin-left:unset;margin-right:unset;margin-inline-start:var(--ion-margin, 16px);margin-inline-end:var(--ion-margin, 16px)}}.ion-float-left{float:left!important}.ion-float-right{float:right!important}.ion-float-start{float:left!important}[dir=rtl] .ion-float-start,:host-context([dir=rtl]) .ion-float-start{float:right!important}.ion-float-end{float:right!important}[dir=rtl] .ion-float-end,:host-context([dir=rtl]) .ion-float-end{float:left!important}@media (min-width: 576px){.ion-float-sm-left{float:left!important}.ion-float-sm-right{float:right!important}.ion-float-sm-start{float:left!important}[dir=rtl] .ion-float-sm-start,:host-context([dir=rtl]) .ion-float-sm-start{float:right!important}.ion-float-sm-end{float:right!important}[dir=rtl] .ion-float-sm-end,:host-context([dir=rtl]) .ion-float-sm-end{float:left!important}}@media (min-width: 768px){.ion-float-md-left{float:left!important}.ion-float-md-right{float:right!important}.ion-float-md-start{float:left!important}[dir=rtl] .ion-float-md-start,:host-context([dir=rtl]) .ion-float-md-start{float:right!important}.ion-float-md-end{float:right!important}[dir=rtl] .ion-float-md-end,:host-context([dir=rtl]) .ion-float-md-end{float:left!important}}@media (min-width: 992px){.ion-float-lg-left{float:left!important}.ion-float-lg-right{float:right!important}.ion-float-lg-start{float:left!important}[dir=rtl] .ion-float-lg-start,:host-context([dir=rtl]) .ion-float-lg-start{float:right!important}.ion-float-lg-end{float:right!important}[dir=rtl] .ion-float-lg-end,:host-context([dir=rtl]) .ion-float-lg-end{float:left!important}}@media (min-width: 1200px){.ion-float-xl-left{float:left!important}.ion-float-xl-right{float:right!important}.ion-float-xl-start{float:left!important}[dir=rtl] .ion-float-xl-start,:host-context([dir=rtl]) .ion-float-xl-start{float:right!important}.ion-float-xl-end{float:right!important}[dir=rtl] .ion-float-xl-end,:host-context([dir=rtl]) .ion-float-xl-end{float:left!important}}.ion-text-center{text-align:center!important}.ion-text-justify{text-align:justify!important}.ion-text-start{text-align:start!important}.ion-text-end{text-align:end!important}.ion-text-left{text-align:left!important}.ion-text-right{text-align:right!important}.ion-text-nowrap{white-space:nowrap!important}.ion-text-wrap{white-space:normal!important}@media (min-width: 576px){.ion-text-sm-center{text-align:center!important}.ion-text-sm-justify{text-align:justify!important}.ion-text-sm-start{text-align:start!important}.ion-text-sm-end{text-align:end!important}.ion-text-sm-left{text-align:left!important}.ion-text-sm-right{text-align:right!important}.ion-text-sm-nowrap{white-space:nowrap!important}.ion-text-sm-wrap{white-space:normal!important}}@media (min-width: 768px){.ion-text-md-center{text-align:center!important}.ion-text-md-justify{text-align:justify!important}.ion-text-md-start{text-align:start!important}.ion-text-md-end{text-align:end!important}.ion-text-md-left{text-align:left!important}.ion-text-md-right{text-align:right!important}.ion-text-md-nowrap{white-space:nowrap!important}.ion-text-md-wrap{white-space:normal!important}}@media (min-width: 992px){.ion-text-lg-center{text-align:center!important}.ion-text-lg-justify{text-align:justify!important}.ion-text-lg-start{text-align:start!important}.ion-text-lg-end{text-align:end!important}.ion-text-lg-left{text-align:left!important}.ion-text-lg-right{text-align:right!important}.ion-text-lg-nowrap{white-space:nowrap!important}.ion-text-lg-wrap{white-space:normal!important}}@media (min-width: 1200px){.ion-text-xl-center{text-align:center!important}.ion-text-xl-justify{text-align:justify!important}.ion-text-xl-start{text-align:start!important}.ion-text-xl-end{text-align:end!important}.ion-text-xl-left{text-align:left!important}.ion-text-xl-right{text-align:right!important}.ion-text-xl-nowrap{white-space:nowrap!important}.ion-text-xl-wrap{white-space:normal!important}}.ion-text-uppercase{text-transform:uppercase!important}.ion-text-lowercase{text-transform:lowercase!important}.ion-text-capitalize{text-transform:capitalize!important}@media (min-width: 576px){.ion-text-sm-uppercase{text-transform:uppercase!important}.ion-text-sm-lowercase{text-transform:lowercase!important}.ion-text-sm-capitalize{text-transform:capitalize!important}}@media (min-width: 768px){.ion-text-md-uppercase{text-transform:uppercase!important}.ion-text-md-lowercase{text-transform:lowercase!important}.ion-text-md-capitalize{text-transform:capitalize!important}}@media (min-width: 992px){.ion-text-lg-uppercase{text-transform:uppercase!important}.ion-text-lg-lowercase{text-transform:lowercase!important}.ion-text-lg-capitalize{text-transform:capitalize!important}}@media (min-width: 1200px){.ion-text-xl-uppercase{text-transform:uppercase!important}.ion-text-xl-lowercase{text-transform:lowercase!important}.ion-text-xl-capitalize{text-transform:capitalize!important}}.ion-align-self-start{align-self:flex-start!important}.ion-align-self-end{align-self:flex-end!important}.ion-align-self-center{align-self:center!important}.ion-align-self-stretch{align-self:stretch!important}.ion-align-self-baseline{align-self:baseline!important}.ion-align-self-auto{align-self:auto!important}.ion-wrap{flex-wrap:wrap!important}.ion-nowrap{flex-wrap:nowrap!important}.ion-wrap-reverse{flex-wrap:wrap-reverse!important}.ion-justify-content-start{justify-content:flex-start!important}.ion-justify-content-center{justify-content:center!important}.ion-justify-content-end{justify-content:flex-end!important}.ion-justify-content-around{justify-content:space-around!important}.ion-justify-content-between{justify-content:space-between!important}.ion-justify-content-evenly{justify-content:space-evenly!important}.ion-align-items-start{align-items:flex-start!important}.ion-align-items-center{align-items:center!important}.ion-align-items-end{align-items:flex-end!important}.ion-align-items-stretch{align-items:stretch!important}.ion-align-items-baseline{align-items:baseline!important}ion-auto-complete{overflow:hidden!important;width:90vw;display:inline-block}ion-auto-complete ion-searchbar{padding:1px!important}ion-auto-complete .disabled input.searchbar-input{pointer-events:none;cursor:default}ion-auto-complete ul{position:absolute;width:90vw;margin-top:0;background:#FFF;list-style-type:none;padding:0;left:16px;z-index:999;box-shadow:0 2px 2px #00000024,0 3px 1px -2px #0003,0 1px 5px #0000001f}ion-auto-complete ul li{padding:15px;border-bottom:1px solid #c1c1c1}ion-auto-complete ul li span{pointer-events:none}ion-auto-complete ul ion-auto-complete-item{height:40px;width:100%}ion-auto-complete ul li:last-child{border:none}ion-auto-complete ul li:focus,ion-auto-complete ul li.focus{cursor:pointer;background:#f1f1f1}ion-auto-complete .hidden{display:none}ion-auto-complete .loading input.searchbar-input{background:white url(/assets/loading.gif) no-repeat right 4px center;background-size:25px 25px}ion-auto-complete .searchbar-clear-button.sc-ion-searchbar-md{right:34px}ion-auto-complete .selected-items{float:left} From c17758cb2d09ca1f4bb2c2c2d0e3843560c89004 Mon Sep 17 00:00:00 2001 From: luechtdiode Date: Sun, 28 May 2023 21:26:33 +0200 Subject: [PATCH 98/99] #704 New context-action for create competition based on copy of an other --- src/main/scala/ch/seidel/kutu/KuTuApp.scala | 59 ++++++++++++++++----- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index d835df697..e8e879517 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -246,7 +246,9 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport } } } - + def makeWettkampfKopierenMenu(copyFrom: WettkampfView): MenuItem = { + makeNeuerWettkampfAnlegenMenu(Some(copyFrom)) + } def makeWettkampfBearbeitenMenu(p: WettkampfView): MenuItem = { makeMenuAction("Wettkampf bearbeiten") { (caption, action) => implicit val e = action @@ -1168,8 +1170,9 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport item } - def makeNeuerWettkampfAnlegenMenu: MenuItem = { - makeMenuAction("Neuen Wettkampf anlegen ...") { (caption, action) => + def makeNeuerWettkampfAnlegenMenu(copyFrom: Option[WettkampfView] = None): MenuItem = { + val menutext = if (copyFrom.isEmpty) "Neuen Wettkampf anlegen ..." else s"Neuen Wettkampf wie ${copyFrom.get.easyprint} anlegen ..." + makeMenuAction(menutext) { (caption, action) => implicit val e = action val txtDatum = new DatePicker { setPromptText("Wettkampf-Datum") @@ -1178,6 +1181,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport val txtTitel = new TextField { prefWidth = 500 promptText = "Wettkampf-Titel" + text.value = copyFrom.map(_.titel).getOrElse("") } val pgms = ObservableBuffer.from(listRootProgramme().sorted) val cmbProgramm = new ComboBox(pgms) { @@ -1185,21 +1189,38 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport buttonCell = new ProgrammListCell cellFactory.value = {_:Any => new ProgrammListCell} promptText = "Programm" + copyFrom.map(_.programm).foreach(pgm => { + val pgmIndex = pgms.indexOf(pgm) + println(pgmIndex) + selectionModel.value.select(pgmIndex) + selectionModel.value.select(pgm) + }) } val txtNotificationEMail = new TextField { prefWidth = 500 promptText = "EMail für die Notifikation von Online-Mutationen" - text = "" + text.value = copyFrom.map(_.notificationEMail).getOrElse("") } val txtAuszeichnung = new TextField { prefWidth = 500 promptText = "%-Angabe, wer eine Auszeichnung bekommt" - text = "40.00%" + text.value = "40.00%" + copyFrom.map(_.auszeichnung).foreach(auszeichnung => { + if (auszeichnung > 100) { + text = dbl2Str(auszeichnung / 100d) + "%" + } + else { + text = s"${auszeichnung}%" + } + }) } val txtAuszeichnungEndnote = new TextField { prefWidth = 500 promptText = "Auszeichnung bei Erreichung des Mindest-Gerätedurchschnittwerts" text = "" + copyFrom.map(_.auszeichnungendnote).foreach(auszeichnungendnote => { + text = auszeichnungendnote.toString() + }) } val cmbRiegenRotationsregel = new ComboBox[String]() { prefWidth = 500 @@ -1220,8 +1241,12 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport ) cmbRiegenRotationsregel.value.onChange { - text.value = RiegenRotationsregel.predefined(cmbRiegenRotationsregel.value.value) + text = RiegenRotationsregel.predefined(cmbRiegenRotationsregel.value.value) } + text.value = RiegenRotationsregel("Einfach/Rotierend/AltInvers").toFormel + copyFrom.map(_.rotation).foreach(rotation => { + text = rotation + }) } val cmbPunktgleichstandsregel = new ComboBox[String]() { prefWidth = 500 @@ -1241,11 +1266,14 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport ) cmbPunktgleichstandsregel.value.onChange { - text.value = Gleichstandsregel.predefined(cmbPunktgleichstandsregel.value.value) + text = Gleichstandsregel.predefined(cmbPunktgleichstandsregel.value.value) } cmbProgramm.value.onChange { - text.value = Gleichstandsregel(cmbProgramm.selectionModel.value.getSelectedItem.id).toFormel + text = Gleichstandsregel(cmbProgramm.selectionModel.value.getSelectedItem.id).toFormel } + copyFrom.map(_.punktegleichstandsregel).foreach(punktegleichstandsregel => { + text = punktegleichstandsregel + }) } val validationSupport = new ValidationSupport validationSupport.registerValidator(txtPunktgleichstandsregel, false, Gleichstandsregel.createValidator) @@ -1268,8 +1296,11 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport ) cmbAltersklassen.value.onChange { - text.value = Altersklasse.predefinedAKs(cmbAltersklassen.value.value) + text = Altersklasse.predefinedAKs(cmbAltersklassen.value.value) } + copyFrom.map(_.altersklassen).foreach(altersklassen => { + text = altersklassen + }) } val cmbJGAltersklassen = new ComboBox[String]() { prefWidth = 500 @@ -1290,8 +1321,11 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport ) cmbJGAltersklassen.value.onChange{ - text.value = Altersklasse.predefinedAKs(cmbJGAltersklassen.value.value) + text = Altersklasse.predefinedAKs(cmbJGAltersklassen.value.value) } + copyFrom.map(_.jahrgangsklassen).foreach(jahrgangsklassen => { + text = jahrgangsklassen + }) } PageDisplayer.showInDialog(caption, new DisplayablePage() { def getPage: Node = { @@ -1346,7 +1380,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport case e: Exception => 0 } }, - Some(UUID.randomUUID().toString()), + Some(UUID.randomUUID().toString), txtAltersklassen.text.value, txtJGAltersklassen.text.value, txtPunktgleichstandsregel.text.value, @@ -2024,7 +2058,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport } case "Wettkämpfe" => controlsView.contextMenu = new ContextMenu() { - items += makeNeuerWettkampfAnlegenMenu + items += makeNeuerWettkampfAnlegenMenu() items += makeNeuerWettkampfImportierenMenu items += new Menu("Netzwerk") { //items += makeLoginMenu @@ -2054,6 +2088,7 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport controlsView.contextMenu = new ContextMenu() { items += makeWettkampfDurchfuehrenMenu(p) items += makeWettkampfBearbeitenMenu(p) + items += makeWettkampfKopierenMenu(p) items += makeWettkampfExportierenMenu(p) items += makeWettkampfDataDirectoryMenu(p) items += makeWettkampfLoeschenMenu(p) From ba05ab4ed4c4d70cdf9dd579918715001bbb9654 Mon Sep 17 00:00:00 2001 From: Roland Seidel Date: Mon, 29 May 2023 14:51:34 +0200 Subject: [PATCH 99/99] #704 Copy of Competition with logo, scoredefs plantimes --- src/main/scala/ch/seidel/kutu/KuTuApp.scala | 40 ++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/main/scala/ch/seidel/kutu/KuTuApp.scala b/src/main/scala/ch/seidel/kutu/KuTuApp.scala index e8e879517..be3b603f1 100644 --- a/src/main/scala/ch/seidel/kutu/KuTuApp.scala +++ b/src/main/scala/ch/seidel/kutu/KuTuApp.scala @@ -8,6 +8,7 @@ import ch.seidel.kutu.akka.KutuAppEvent import ch.seidel.kutu.data.{CaseObjectMetaUtil, ResourceExchanger, Surname} import ch.seidel.kutu.domain._ import ch.seidel.kutu.http.{AuthSupport, EmptyResponse, JsonSupport, JwtSupport, WebSocketClient} +import ch.seidel.kutu.renderer.PrintUtil import javafx.beans.property.SimpleObjectProperty import javafx.concurrent.Task import javafx.scene.control.DatePicker @@ -42,7 +43,8 @@ import scalafx.stage.{FileChooser, Screen} import scalafx.stage.FileChooser.ExtensionFilter import spray.json._ -import java.io.{ByteArrayInputStream, FileInputStream} +import java.io.{ByteArrayInputStream, File, FileInputStream} +import java.nio.file.Files import java.util.concurrent.{Executors, ScheduledExecutorService} import java.util.{Base64, Date, UUID} import scala.collection.mutable @@ -1390,6 +1392,42 @@ object KuTuApp extends JFXApp3 with KutuService with JsonSupport with JwtSupport if (!dir.exists()) { dir.mkdirs(); } + copyFrom.foreach(wkToCopy => { + // Ranglisten (scoredef), Planzeiten und Logo kopieren ... + println(w) + val sourceFolder = new File(homedir + "/" + encodeFileName(copyFrom.get.easyprint)) + val targetFolder = new File(homedir + "/" + encodeFileName(w.easyprint)) + val sourceLogo = PrintUtil.locateLogoFile(sourceFolder) + if (!targetFolder.equals(sourceFolder) && sourceLogo.exists()) { + val logofileCopyTo = targetFolder.toPath.resolve(sourceLogo.getName) + if (!logofileCopyTo.toFile.exists()) { + Files.copy(sourceLogo.toPath, logofileCopyTo) + } + } + if (wkToCopy.programm.id == w.programmId) { + updateOrInsertPlanTimes(loadWettkampfDisziplinTimes(UUID.fromString(wkToCopy.uuid.get)).map(_.toWettkampfPlanTimeRaw.copy(wettkampfId = w.id))) + } + + if (!targetFolder.equals(sourceFolder)) { + sourceFolder + .listFiles() + .filter(f => f.getName.endsWith(".scoredef")) + .toList + .sortBy { + _.getName + } + .foreach(scoreFileSource => { + val targetFilePath = targetFolder.toPath.resolve(scoreFileSource.getName) + if (!targetFilePath.toFile.exists()) { + Files.copy(scoreFileSource.toPath, targetFilePath) + } + }) + } + val scores = Await.result(listPublishedScores(UUID.fromString(wkToCopy.uuid.get)), Duration.Inf) + scores.foreach(score => { + savePublishedScore(wettkampfId = w.id, title = score.title, query = score.query, published = false, propagate = false) + }) + }) updateTree val text = s"${w.titel} ${w.datum}" tree.getLeaves("Wettkämpfe").find { item => text.equals(item.value.value) } match {