@esfaenza/extensions 20.3.2 → 20.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-extensions.mjs","sources":["../../../projects/extensions/src/lib/tokens.ts","../../../projects/extensions/src/lib/services/extensions.dates.service.ts","../../../projects/extensions/src/lib/pipes/loc_date.pipe.ts","../../../projects/extensions/src/lib/modules/extensions.module.ts","../../../projects/extensions/src/lib/services/extensions.hashing.service.ts","../../../projects/extensions/src/lib/services/extensions.messages.service.ts","../../../projects/extensions/src/lib/services/extensions.embedding.service.ts","../../../projects/extensions/src/lib/services/extensions.base.ts","../../../projects/extensions/src/lib/models/ExportConsts.ts","../../../projects/extensions/src/lib/models/TypeCode.ts","../../../projects/extensions/src/lib/services/extensions.utilities.service.ts","../../../projects/extensions/src/lib/services/extensions.exports.service.ts","../../../projects/extensions/src/lib/services/extensions.clipboard.service.ts","../../../projects/extensions/src/lib/models/CallResult.ts","../../../projects/extensions/src/lib/models/CsvHeaders.ts","../../../projects/extensions/src/lib/models/GenericItem.ts","../../../projects/extensions/src/lib/models/InboundMessageTypes.ts","../../../projects/extensions/src/lib/models/InterComMessage.ts","../../../projects/extensions/src/lib/services/extensions.intercom.service.ts","../../../projects/extensions/src/public-api.ts","../../../projects/extensions/src/esfaenza-extensions.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Token che indica il prefisso delle searchView che serve per storicizzarle evitando di tirarsi in memoria anche tutti gli oggetti. Se vuoto viene supposto 'Hot'\r\n */\r\nexport const APPSEARCH_PREFIX: InjectionToken<string> = new InjectionToken<string>('APPSEARCH_PREFIX');\r\n\r\n/**\r\n * Token che indica se i metodi di estensione che utilizzano le date permettono l'uso di date in utc\r\n */\r\nexport const EXT_ALLOW_UTC: InjectionToken<boolean> = new InjectionToken<boolean>('EXT_ALLOW_UTC');\r\n\r\n/** Modalità di Debug */\r\nexport const EXT_DEBUG_MODE: InjectionToken<boolean> = new InjectionToken<boolean>('EXT_DEBUG_MODE');","// Angular\r\nimport { Injectable, Inject, Optional } from \"@angular/core\";\r\n\r\n// Es\r\nimport { BaseLocalization } from \"@esfaenza/localizations\";\r\n\r\n// Modelli\r\nimport { EXT_ALLOW_UTC } from \"../tokens\";\r\n\r\n// Librerie\r\nimport { first } from \"rxjs/operators\";\r\nimport { Dayjs } from \"dayjs\";\r\nimport { ReplaySubject } from \"rxjs\";\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\n declare var dayjs: any;\r\n\r\n /**\r\n * Service che fornisce dei metodi di estensione per la gestione/manipolazione delle date\r\n */\r\n @Injectable({providedIn: \"root\"})\r\nexport class DateService {\r\n \r\n public Initialized: ReplaySubject<void> = new ReplaySubject<void>();\r\n\r\n /**\r\n * Oggetto statico di localizzazione per i messaggi di questa Service\r\n */\r\n private loc = {\r\n \"SMALL_DATE_FORMAT\": { 'en-US': \"MM/DD/YYYY\", 'it-IT': \"DD/MM/YYYY\" },\r\n \"FULL_DATE_FORMAT\": { 'en-US': \"MM/DD/YYYY HH:mm:ss\", 'it-IT': \"DD/MM/YYYY HH:mm:ss\" },\r\n \"FULL_DATE_FORMAT_NO_SS\": { 'en-US': \"MM/DD/YYYY HH:mm\", 'it-IT': \"DD/MM/YYYY HH:mm\" },\r\n \"SMALL_DATE_DISPLAY_FORMAT\": { 'en-US': \"DD/MM/YYYY\", 'it-IT': \"DD/MM/YYYY\" },\r\n \"SMALL_DATE_DISPLAY_FORMAT_WITH_HOUR\": { 'en-US': \"DD/MM/YYYY HH\", 'it-IT': \"DD/MM/YYYY HH\" },\r\n \"SMALL_DATE_DISPLAY_FORMAT_WITH_MINUTE\": { 'en-US': \"DD/MM/YYYY HH:mm\", 'it-IT': \"DD/MM/YYYY HH:mm\" },\r\n \"FULL_DATE_DISPLAY_FORMAT\": { 'en-US': \"DD/MM/YYYY HH:mm:ss\", 'it-IT': \"DD/MM/YYYY HH:mm:ss\" },\r\n \"FULL_DATE_DISPLAY_FORMAT_NO_SS\": { 'en-US': \"DD/MM/YYYY HH:mm\", 'it-IT': \"DD/MM/YYYY HH:mm\" }\r\n };\r\n\r\n /**\r\n * Oggetto di configurazione per tenere da conto le informazioni sui formati\r\n */\r\n private cfg = {\r\n fulldate: \"\",\r\n fulldateDisplay: \"\",\r\n smallDate: \"\",\r\n fulldateNoSS: \"\",\r\n smallDateWithH: \"\",\r\n smallDateWithM: \"\",\r\n fulldateDisplayNoSS: \"\"\r\n }\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n public constructor(@Optional() private locProvider: BaseLocalization, @Optional() @Inject(EXT_ALLOW_UTC) private allowUtc: boolean) {\r\n\r\n this.init();\r\n }\r\n\r\n\r\n\r\n async init(){\r\n let LOCALE = this.locProvider ? await this.locProvider.Locale.pipe(first()).toPromise() : 'it-IT';\r\n \r\n this.cfg.smallDate = this.loc[\"SMALL_DATE_FORMAT\"][LOCALE];\r\n this.cfg.fulldate = this.loc[\"FULL_DATE_FORMAT\"][LOCALE];\r\n this.cfg.fulldateNoSS = this.loc[\"FULL_DATE_FORMAT_NO_SS\"][LOCALE];\r\n this.cfg.fulldateDisplay = this.loc[\"FULL_DATE_DISPLAY_FORMAT\"][LOCALE];\r\n this.cfg.fulldateDisplayNoSS =this.loc[\"FULL_DATE_DISPLAY_FORMAT_NO_SS\"][LOCALE];\r\n this.cfg.smallDate = this.loc[\"SMALL_DATE_DISPLAY_FORMAT\"][LOCALE];\r\n this.cfg.smallDateWithH = this.loc[\"SMALL_DATE_DISPLAY_FORMAT_WITH_HOUR\"][LOCALE];\r\n this.cfg.smallDateWithM = this.loc[\"SMALL_DATE_DISPLAY_FORMAT_WITH_MINUTE\"][LOCALE];\r\n\r\n this.Initialized.next();\r\n }\r\n /**\r\n * Aggiusta una data in \"istante finale\" in base a qual è la parte di data significativa.\r\n * \r\n * Es. Istante finale delle ore: 05/10/1992 --> 04/10/1992 24:00(:00)\r\n * \r\n * @param {any} date Data qualsiasi (Date, stringa, dayjs...), verrà ricondotta ad un oggetto dayJs\r\n * @param {'day' | 'hour' | 'minute'} timepart Parte significativa della data\r\n * @param {boolean} printSeconds Indica se effettuare la stampa dei secondi o no\r\n */\r\n public adjustDateToFinalInstant(date: any, timepart: 'day' | 'hour' | 'minute', printSeconds: boolean = true): string {\r\n let mydt = this.getDateConvertion(date);\r\n if (mydt == null) return \"FE: Not a Date\";\r\n\r\n let isZeroTime = mydt.startOf(timepart).valueOf() === mydt.valueOf();\r\n if (!isZeroTime) {\r\n if (timepart == \"day\" && mydt.subtract(1, \"hour\").hour() == mydt.hour()) {\r\n // Se l'ora precedente è lo stesso orario dell'ora attuale l'istante finale dev'essere mandato avanti di 1\r\n mydt = mydt.add(1, \"hour\");\r\n }\r\n\r\n return printSeconds ? mydt.format(this.cfg.fulldateDisplay) : mydt.format(this.cfg.fulldateDisplayNoSS);\r\n }\r\n\r\n let tmpValue = mydt.subtract(1, timepart);\r\n let value = \"\";\r\n\r\n // Istante finale delle ore: 05/10/1992 --> 04/10/1992 24:00(:00)\r\n if (timepart == 'day')\r\n value = tmpValue.format(this.cfg.smallDate) + \" 24:00\" + (printSeconds ? ':00' : '');\r\n\r\n // Istante finale dei minuti: giorno 05/10/1992 04:00:00 --> 05/10/1992 03:60(:00)\r\n else if (timepart == 'hour')\r\n value = tmpValue.format(this.cfg.smallDateWithH) + \":60\" + (printSeconds ? ':00' : '');\r\n\r\n // Istante finale dei secondi: giorno 05/10/1992 04:10:00 --> 05/10/1992 04:09:60\r\n else if (timepart == 'minute')\r\n value = tmpValue.format(this.cfg.smallDateWithM) + \":60\";\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Funzione che effettua l'ordinamento fra 2 date in base alla direzione specificata\r\n * \r\n * @param {any} a Prima data per il confronto\r\n * @param {any} b Seconda data per il confronto\r\n * @param {'asc' | 'desc'} direction Direzione rispetto a cui ordinare le due date\r\n * \r\n * @returns {number} 0 se le date sono uguali, 1 se la data A deve venire logicamente prima della data B, -1 altrimenti\r\n */\r\n public dateSort(a: any, b: any, direction: 'asc' | 'desc'): number {\r\n if (a < b) return direction == 'asc' ? 1 : -1;\r\n else if (a > b) return direction == 'asc' ? -1 : 1;\r\n\r\n // con a uguale a b\r\n return 0;\r\n }\r\n\r\n /**\r\n * Effettua il trim dei secondi da una data espressa come stringa\r\n * \r\n * @param {string} value Data espressa come stringa\r\n * \r\n * @returns {string} Data senza i secondi\r\n */\r\n public trimSeconds(value: string): string {\r\n //I numeri mangiati da dayjs spesso vengono ricondotti a date vere. Mi assicuro che se ci sono solo numeri proseguo\r\n if (!isNaN(<any>value))\r\n return value;\r\n\r\n //Se non ho qualcosa del tipo XX/YY/ZZZZ aa:bb:cc di sicuro non è una data che mi interessa\r\n if (!/^\\d\\d\\/\\d\\d\\/\\d\\d\\d\\d \\d\\d:\\d\\d:\\d\\d$/g.test(value))\r\n return value;\r\n\r\n //In questo caso mi arrivano valori che devono essere stampati as-is, solo tagliando i secondi\r\n return \"'\" + value.substr(0, value.length - 3);\r\n }\r\n\r\n /**\r\n * Data una lista di date Da e una lista di date A restituisce un oggetto rappresentante il range che include tutte le date passate\r\n * \r\n * @param {any[]} fromDates Lista dei Da\r\n * @param {any[]} toDates Lista dei A\r\n * \r\n * @returns {{ from: any, to: any }} Range di date Da - A che include tutti i valori di **fromDates** e **toDates**\r\n */\r\n public getMinMaxDatesRange(fromDates: any[], toDates: any[]): { from: any, to: any } {\r\n let datesFroms: any[] = [];\r\n let datesTo: any[] = [];\r\n\r\n for(let i = 0; i < fromDates.length; i++)\r\n {\r\n let d = fromDates[i];\r\n var convertion = this.getDateConvertion(d);\r\n if (convertion)\r\n datesFroms.push(convertion);\r\n }\r\n\r\n for(let i = 0; i < toDates.length; i++)\r\n {\r\n let d = toDates[i];\r\n var convertion = this.getDateConvertion(d);\r\n if (convertion)\r\n datesTo.push(convertion);\r\n }\r\n\r\n return { from: dayjs.min(datesFroms), to: dayjs.max(datesTo) };\r\n }\r\n\r\n /**\r\n * Ottiene la conversione di una data in qualsiasi formato al formato standard DayJs\r\n * \r\n * @param {any} date Oggetto rappresentante una data. Potrebbe essere una stringa, un Date o già un DayJs\r\n * @param {boolean} useUtc Indica se usare l'estensione utc di Dayjs per parsare la data o no\r\n * @param {string} format formato in cui emettere la conversione\r\n * \r\n * @returns {any} Data in modalità {format}\r\n */\r\n public getDateConvertion(date: any, useUtc: boolean = false, format: 'date' | 'timestring' | 'dayjs' = 'dayjs', timestringSmall: boolean = true): any {\r\n if (!date)\r\n return null;\r\n\r\n if (this.isDayJs(date))\r\n return this.formattedDayjs(date, format, timestringSmall);\r\n\r\n if(this.isJsDate(date))\r\n return this.formattedDayjs(useUtc ? dayjs.utc(date): dayjs(date), format, timestringSmall);\r\n\r\n // Se non c'è la proprietà length vuol dire che non è una stringa e a questo punto non ho idea di che minchia sia\r\n let length = date.length;\r\n if (!length)\r\n return null;\r\n\r\n if (useUtc && !this.allowUtc)\r\n throw \"@esfaenza/extensions: Richiesta data UTC ma da configurazione la libreria non lo supporta\";\r\n\r\n // Per risparmiare chiamate a tentoni, in base alla lunghezza della stringa chiamo direttamente il metodo giusto, \r\n // controllando poi che mi generi una data come me la aspetto io\r\n let tryThis: Dayjs = null;\r\n let toCall = useUtc ? dayjs.utc : dayjs;\r\n\r\n // Se la data contiene la lettera \"T\" vuol dire che è una data del tipo 2020-10-15T00:00:00, direttamente parsabile dal dayjs col locale corretto.\r\n // Per il resto mi baso sulla lunghezza della stringa\r\n if ((<string>date).includes(\"T\"))\r\n tryThis = toCall(date);\r\n else if (length == this.cfg.fulldate.length)\r\n tryThis = toCall(date, this.cfg.fulldate);\r\n else if (length == this.cfg.smallDate.length)\r\n tryThis = toCall(date, this.cfg.smallDate);\r\n else if (length == this.cfg.fulldateNoSS.length)\r\n tryThis = toCall(date, this.cfg.fulldateNoSS)\r\n\r\n if (tryThis && tryThis.isValid && tryThis.isValid())\r\n return this.formattedDayjs(tryThis, format, timestringSmall);\r\n\r\n // Se niente funziona, null. \r\n // Ricondurre l'Input ad una data non è possibile.\r\n return null;\r\n }\r\n\r\n private formattedDayjs(dayjs: Dayjs, format: \"dayjs\" | \"date\" | \"timestring\", timestringSmall){\r\n return format == 'dayjs' ? dayjs : format == 'date' ? dayjs.toDate() : this.getFormatted(dayjs, timestringSmall, false);\r\n }\r\n \r\n /**\r\n * Helper che restituisce **true** qualora l'oggetto passato fosse una data vera e propria, **false** altrimenti\r\n * \r\n * @param {any} check Oggetto da controllare\r\n * \r\n * @returns {boolean} Indicazione se l'oggetto è un vero Date di Javascript o no\r\n */\r\n private isJsDate(check: any): boolean {\r\n return check && Object.prototype.toString.call(check) === \"[object Date]\" && !isNaN(check);\r\n }\r\n\r\n /**\r\n * Helper che restituisce **true** qualora l'oggetto passato fosse un DayJs vero e proprio, **false** altrimenti\r\n * \r\n * @param {any} check Oggetto da controllare\r\n * @returns {boolean} Indicazione se l'oggetto è un vero DayJs o no\r\n */\r\n private isDayJs(check: any): boolean {\r\n // Non uso instanceof perché sarebbe estremamente più lento\r\n // Non uso nemmeno isDayjs() della libreria Dayjs dato che ha lo stesso problema: https://github.com/iamkun/dayjs/blob/06f88f425828b1ce96b737332d25145a95a4ee9d/src/index.js#L9\r\n return check.$D !== undefined && check.$M !== undefined && check.$y !== undefined;\r\n }\r\n\r\n /**\r\n * Ottiene la formattazione di una data in base alla versione richiesta \"small\" o \"long\" e a se stampare o meno i secondi\r\n * \r\n * @param {any} date Oggetto rappresentante una data. Potrebbe essere una stringa, un Date o già un DayJs\r\n * @param {boolean} small Indica se formattarla con un formato breve (se **true**) o un formato più lungo (se **false**)\r\n * \r\n * @returns {string} Data formattata nel formato richiesto\r\n */\r\n public getFormatted(date: any, small: boolean, seconds: boolean): string {\r\n var date = this.getDateConvertion(date);\r\n if (!date) return null;\r\n\r\n return date.format(small ? this.cfg.smallDate : seconds ? this.cfg.fulldateDisplay : this.cfg.fulldateDisplayNoSS);\r\n }\r\n}","// Angular\r\nimport { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { DateService } from \"../services/extensions.dates.service\";\r\n\r\n/**\r\n * Pipe che permette di formattare una data in base al formato specificato. Utilizza il **DateService** di **@esfaenza/extensions** per ricondurre l'input a una data valida\r\n */\r\n@Pipe({\r\n name: \"loc_date\", pure: true,\r\n standalone: false\r\n})\r\nexport class LocDatePipe implements PipeTransform {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private dts: DateService) { }\r\n\r\n /**\r\n * Trasformazione della data in input in base al formato richiesto\r\n * \r\n * @param {any} value Valore da ricondurre ad una data e formattare\r\n * @param {string} format Formato in output della data da visualizzare\r\n * \r\n * @returns {string} Data formattata in base al formato\r\n */\r\n transform(value: any, format: string = \"DD/MM/YYYY\"): string {\r\n if (value == null || value === \"\") return null;\r\n\r\n var detatchedValue = JSON.parse(JSON.stringify(value));\r\n var dt = this.dts.getDateConvertion(detatchedValue);\r\n return dt.format(format);\r\n }\r\n}","// Angular\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\n// Esfaenza\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\n\r\n// Modelli\r\nimport { ExtensionsModuleConfig } from '../models/ExtensionsModuleConfig';\r\nimport { APPSEARCH_PREFIX, EXT_ALLOW_UTC, EXT_DEBUG_MODE } from '../tokens';\r\n\r\n// Pipes\r\nimport { LocDatePipe } from '../pipes/loc_date.pipe';\r\n\r\n@NgModule({\r\n imports: [LocalizationModule],\r\n declarations: [LocDatePipe],\r\n exports: [LocDatePipe]\r\n})\r\nexport class ExtensionsModule {\r\n static forRoot(config?: ExtensionsModuleConfig): ModuleWithProviders<ExtensionsModule> {\r\n return {\r\n ngModule: ExtensionsModule,\r\n providers: [\r\n { provide: APPSEARCH_PREFIX, useValue: config?.appsearch_prefix || 'Hot'},\r\n { provide: EXT_ALLOW_UTC, useValue: config?.allow_utc == null ? false : config?.allow_utc},\r\n { provide: EXT_DEBUG_MODE, useValue: config?.debugMode || false },\r\n ]\r\n };\r\n }\r\n}","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n/**\r\n * Service che fornisce alcuni semplici funzioni di Hashing / GUID / ecc...\r\n */\r\n@Injectable({providedIn: \"root\"})\r\nexport class HashingService {\r\n\r\n /**\r\n * Generazione di un GUID pseudo-univoco\r\n * \r\n * @returns {string} il GUID generato\r\n */\r\n public getGUID(): string {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, c => {\r\n var r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n /**\r\n * Calcolo dell'hash su un oggetto\r\n * \r\n * @param {any} o Oggetto di cui calcolare l'hash\r\n * @param {number} level Livello di ricorsione nel caso venga effettuato l'hash di un oggetto che contiene altri oggetti\r\n * @param {boolean} navigateFullDepth Indica se navigare l'oggetto per l'intera lunghezza. In caso contrario si ferma al secondo livello\r\n * \r\n * @returns {string} Hash generato per l'oggetto in questione\r\n */\r\n public hashObject(o: any, level: number = 0, navigateFullDepth: boolean = false, precise: boolean = false): string {\r\n var strDef = this.stringify(o, level, navigateFullDepth);\r\n var hash: string = precise ? this.md5(strDef) : this.simpleHash(strDef);\r\n return hash;\r\n }\r\n\r\n /**\r\n * Hash più semplice e più veloce dell'md5, ma meno sicuro\r\n * \r\n * Vedi https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript\r\n *\r\n * @param {string} str Stringa di cui calcolare l'hash\r\n */\r\n private simpleHash(str: string, seed = 0): string {\r\n let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;\r\n for (let i = 0, ch; i < str.length; i++) {\r\n ch = str.charCodeAt(i);\r\n h1 = Math.imul(h1 ^ ch, 2654435761);\r\n h2 = Math.imul(h2 ^ ch, 1597334677);\r\n }\r\n h1 = Math.imul(h1 ^ (h1>>>16), 2246822507) ^ Math.imul(h2 ^ (h2>>>13), 3266489909);\r\n h2 = Math.imul(h2 ^ (h2>>>16), 2246822507) ^ Math.imul(h1 ^ (h1>>>13), 3266489909);\r\n return (4294967296 * (2097151 & h2) + (h1>>>0)).toString();\r\n }\r\n\r\n /**\r\n * Blacklist dei tipi da ignorare quando si effettua l'hashing degli oggetti\r\n */\r\n private objBlacklist = {\r\n \"NgForm\": true, \"ElementRef\": true, \"ExtensionsService\": true, \"ToastrService\": true, \"LocaleService\": true, \"AppState\": true, \"Router\": true,\r\n \"ActivatedRoute\": true, \"HTTPService\": true, \"Location\": true, \"CanvasComponent\": true, \"ModalDirective\": true, \"ChangeDetectorRef\": true,\r\n \"DateService\": true, \"EventEmitter\": true, \"ViewRef_\": true, \"Subscriber\": true, \"ItemLocalization\": true\r\n };\r\n\r\n /**\r\n * Genera una stringa che identifica univocamente l'oggetto in questione\r\n * \r\n * @param {any} o Oggetto di cui calcolare la stringa univoca\r\n * @param {number} level Livello di ricorsione nel caso venga effettuato l'hash di un oggetto che contiene altri oggetti\r\n * @param {boolean} navigateFullDepth Indica se navigare l'oggetto per l'intera lunghezza. In caso contrario si ferma al secondo livello\r\n */\r\n private stringify(o: any, level: number, navigateFullDepth: boolean) {\r\n var i: any, r: any;\r\n if (o === null) return \"n\";\r\n if (o === true) return \"t\";\r\n if (o === false) return \"f\";\r\n if (o instanceof Date) return 'd:'+ o.valueOf().toString();\r\n i = typeof o;\r\n if (i === \"string\") return \"s:\" + o;\r\n if (i === \"number\") return \"n:\" + o;\r\n if (o instanceof Function) return \"m:\" + o.toString();\r\n if (o instanceof Array) {\r\n r = [];\r\n for (i = 0; i < o.length; i++) {\r\n let res = this.stringify(o[i], level, navigateFullDepth);\r\n if (res) r.push(res);\r\n }\r\n return r.length > 0 ? \"a:\" + r.join(\";\") : \"\";\r\n }\r\n r = [];\r\n\r\n //Se è oggetto, escludo tutti quelli di sistema/inutili\r\n if (o) {\r\n var name = o.__proto__.constructor.name;\r\n\r\n if (!this.objBlacklist[name]) {\r\n for (i in o) {\r\n if (o.hasOwnProperty(i) && (level <= 2 || navigateFullDepth)) {\r\n let res = this.stringify(o[i], level + 1, navigateFullDepth);\r\n if (res) r.push(i + \":\" + res);\r\n }\r\n }\r\n }\r\n }\r\n return r.length > 0 ? \"o:\" + r.join(\";\") : \"\";\r\n }\r\n\r\n /**\r\n * Data una stringa restituisce l'md5\r\n * \r\n * @param {string} s Stringa di cui calcolare l'md5\r\n * @returns {string} md5 della stringa **s**\r\n */\r\n public md5(s: string): string {\r\n return this.hex(this.md51(s));\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private md5cycle(x, k) {\r\n var a = x[0], b = x[1], c = x[2], d = x[3];\r\n\r\n a = this.ff(a, b, c, d, k[0], 7, -680876936);\r\n d = this.ff(d, a, b, c, k[1], 12, -389564586);\r\n c = this.ff(c, d, a, b, k[2], 17, 606105819);\r\n b = this.ff(b, c, d, a, k[3], 22, -1044525330);\r\n a = this.ff(a, b, c, d, k[4], 7, -176418897);\r\n d = this.ff(d, a, b, c, k[5], 12, 1200080426);\r\n c = this.ff(c, d, a, b, k[6], 17, -1473231341);\r\n b = this.ff(b, c, d, a, k[7], 22, -45705983);\r\n a = this.ff(a, b, c, d, k[8], 7, 1770035416);\r\n d = this.ff(d, a, b, c, k[9], 12, -1958414417);\r\n c = this.ff(c, d, a, b, k[10], 17, -42063);\r\n b = this.ff(b, c, d, a, k[11], 22, -1990404162);\r\n a = this.ff(a, b, c, d, k[12], 7, 1804603682);\r\n d = this.ff(d, a, b, c, k[13], 12, -40341101);\r\n c = this.ff(c, d, a, b, k[14], 17, -1502002290);\r\n b = this.ff(b, c, d, a, k[15], 22, 1236535329);\r\n\r\n a = this.gg(a, b, c, d, k[1], 5, -165796510);\r\n d = this.gg(d, a, b, c, k[6], 9, -1069501632);\r\n c = this.gg(c, d, a, b, k[11], 14, 643717713);\r\n b = this.gg(b, c, d, a, k[0], 20, -373897302);\r\n a = this.gg(a, b, c, d, k[5], 5, -701558691);\r\n d = this.gg(d, a, b, c, k[10], 9, 38016083);\r\n c = this.gg(c, d, a, b, k[15], 14, -660478335);\r\n b = this.gg(b, c, d, a, k[4], 20, -405537848);\r\n a = this.gg(a, b, c, d, k[9], 5, 568446438);\r\n d = this.gg(d, a, b, c, k[14], 9, -1019803690);\r\n c = this.gg(c, d, a, b, k[3], 14, -187363961);\r\n b = this.gg(b, c, d, a, k[8], 20, 1163531501);\r\n a = this.gg(a, b, c, d, k[13], 5, -1444681467);\r\n d = this.gg(d, a, b, c, k[2], 9, -51403784);\r\n c = this.gg(c, d, a, b, k[7], 14, 1735328473);\r\n b = this.gg(b, c, d, a, k[12], 20, -1926607734);\r\n\r\n a = this.hh(a, b, c, d, k[5], 4, -378558);\r\n d = this.hh(d, a, b, c, k[8], 11, -2022574463);\r\n c = this.hh(c, d, a, b, k[11], 16, 1839030562);\r\n b = this.hh(b, c, d, a, k[14], 23, -35309556);\r\n a = this.hh(a, b, c, d, k[1], 4, -1530992060);\r\n d = this.hh(d, a, b, c, k[4], 11, 1272893353);\r\n c = this.hh(c, d, a, b, k[7], 16, -155497632);\r\n b = this.hh(b, c, d, a, k[10], 23, -1094730640);\r\n a = this.hh(a, b, c, d, k[13], 4, 681279174);\r\n d = this.hh(d, a, b, c, k[0], 11, -358537222);\r\n c = this.hh(c, d, a, b, k[3], 16, -722521979);\r\n b = this.hh(b, c, d, a, k[6], 23, 76029189);\r\n a = this.hh(a, b, c, d, k[9], 4, -640364487);\r\n d = this.hh(d, a, b, c, k[12], 11, -421815835);\r\n c = this.hh(c, d, a, b, k[15], 16, 530742520);\r\n b = this.hh(b, c, d, a, k[2], 23, -995338651);\r\n\r\n a = this.ii(a, b, c, d, k[0], 6, -198630844);\r\n d = this.ii(d, a, b, c, k[7], 10, 1126891415);\r\n c = this.ii(c, d, a, b, k[14], 15, -1416354905);\r\n b = this.ii(b, c, d, a, k[5], 21, -57434055);\r\n a = this.ii(a, b, c, d, k[12], 6, 1700485571);\r\n d = this.ii(d, a, b, c, k[3], 10, -1894986606);\r\n c = this.ii(c, d, a, b, k[10], 15, -1051523);\r\n b = this.ii(b, c, d, a, k[1], 21, -2054922799);\r\n a = this.ii(a, b, c, d, k[8], 6, 1873313359);\r\n d = this.ii(d, a, b, c, k[15], 10, -30611744);\r\n c = this.ii(c, d, a, b, k[6], 15, -1560198380);\r\n b = this.ii(b, c, d, a, k[13], 21, 1309151649);\r\n a = this.ii(a, b, c, d, k[4], 6, -145523070);\r\n d = this.ii(d, a, b, c, k[11], 10, -1120210379);\r\n c = this.ii(c, d, a, b, k[2], 15, 718787259);\r\n b = this.ii(b, c, d, a, k[9], 21, -343485551);\r\n\r\n x[0] = this.add32(a, x[0]);\r\n x[1] = this.add32(b, x[1]);\r\n x[2] = this.add32(c, x[2]);\r\n x[3] = this.add32(d, x[3]);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private cmn(q, a, b, x, s, t) {\r\n a = this.add32(this.add32(a, q), this.add32(x, t));\r\n return this.add32((a << s) | (a >>> (32 - s)), b);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private ff(a, b, c, d, x, s, t) {\r\n return this.cmn((b & c) | ((~b) & d), a, b, x, s, t);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private gg(a, b, c, d, x, s, t) {\r\n return this.cmn((b & d) | (c & (~d)), a, b, x, s, t);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private hh(a, b, c, d, x, s, t) {\r\n return this.cmn(b ^ c ^ d, a, b, x, s, t);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private ii(a, b, c, d, x, s, t) {\r\n return this.cmn(c ^ (b | (~d)), a, b, x, s, t);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private md51(s: string) {\r\n var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i;\r\n\r\n for (i = 64; i <= s.length; i += 64)\r\n this.md5cycle(state, this.md5blk(s.substring(i - 64, i)));\r\n\r\n s = s.substring(i - 64);\r\n var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n for (i = 0; i < s.length; i++)\r\n tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\r\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\r\n if (i > 55) {\r\n this.md5cycle(state, tail);\r\n for (i = 0; i < 16; i++) tail[i] = 0;\r\n }\r\n tail[14] = n * 8;\r\n this.md5cycle(state, tail);\r\n return state;\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private md5blk(s) {\r\n var md5blks = [], i;\r\n for (i = 0; i < 64; i += 4)\r\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\r\n return md5blks;\r\n }\r\n\r\n /**\r\n * Array dei possibili valori di un simbolo esadecimale\r\n */\r\n private hex_chr: string[] = '0123456789abcdef'.split('');\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private rhex(n) {\r\n var s = '', j = 0;\r\n for (; j < 4; j++)\r\n s += this.hex_chr[(n >> (j * 8 + 4)) & 0x0F] + this.hex_chr[(n >> (j * 8)) & 0x0F];\r\n return s;\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private hex(x) {\r\n for (var i = 0; i < x.length; i++)\r\n x[i] = this.rhex(x[i]);\r\n return x.join('');\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private add32(a, b) {\r\n return (a + b) & 0xFFFFFFFF;\r\n }\r\n}","// Angular\r\nimport { Injectable, Inject, Optional, Injector, PLATFORM_ID } from \"@angular/core\";\r\n\r\n// Es\r\nimport { BaseLocalization } from \"@esfaenza/localizations\";\r\n\r\n// Configurazioni\r\nimport { ToastrService } from \"ngx-toastr\";\r\nimport swal from \"sweetalert2\";\r\n\r\n// RXJS\r\nimport { Observable, Subject, of } from \"rxjs\";\r\nimport { filter, first, map, take } from \"rxjs/operators\";\r\n\r\n// Modelli\r\nimport { CallResult } from \"../models/CallResult\";\r\n\r\n// Servizi\r\nimport { HashingService } from \"./extensions.hashing.service\";\r\nimport { isPlatformBrowser } from \"@angular/common\";\r\n\r\n/**\r\n * Service che fornisce funzionalità di alert nei tipi fondamentali: success, info, warning e danger\r\n */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class MessageService {\r\n\r\n /** Oggetto statico in supporto alla localizzazione */\r\n private loc = {\r\n 'Confirm': { 'en-US': \"Confirm\", 'it-IT': \"Conferma\", },\r\n 'Cancel': { 'en-US': \"Cancel\", 'it-IT': \"Annulla\", },\r\n 'Close': { 'en-US': \"Close\", 'it-IT': \"Chiudi\", },\r\n 'Error': { 'en-US': \"Error\", 'it-IT': \"Errore\", },\r\n 'Info': { 'en-US': \"Info\", 'it-IT': \"Informazione\", },\r\n 'Success': { 'en-US': \"Success\", 'it-IT': \"Successo\", },\r\n 'Warning': { 'en-US': \"Warning\", 'it-IT': \"Attenzione\", }\r\n };\r\n\r\n /** Template di un warning con richiesta di conferma */\r\n private warningSwalWithCancel: any;\r\n\r\n /** Template di un warning con richiesta di conferma */\r\n private successSwalWithCancel: any;\r\n\r\n /** Template di un errore */\r\n private errorSwal: any;\r\n\r\n /** Template di un messaggio di successo */\r\n private successSwal: any;\r\n\r\n /** Template di un avviso */\r\n private warningSwal: any;\r\n\r\n /** Template di un messaggio informativo */\r\n private infoSwal: any;\r\n\r\n /** Template di un warning per la sessione scaduta */\r\n private expiredSessionSwal: any;\r\n\r\n /** Getter per il servizio dei toast. ngx-toastr è fatta talmente male che la service dev'essere recuperata in questo modo */\r\n private get toastr(): ToastrService {\r\n return this.injector.get(ToastrService);\r\n }\r\n\r\n /** Supporto all'Embedding */\r\n Embedded: boolean = false;\r\n MainWindow: Window = null;\r\n MessageObserver: Subject<{ event: any, data: any }> = null;\r\n\r\n isBrowser: boolean = true;\r\n\r\n /** Costruttore @ignore */\r\n public constructor(@Inject(Injector) private injector: Injector, @Optional() private locProvider: BaseLocalization, private hash: HashingService, @Inject(PLATFORM_ID) platformId: Object) {\r\n this.isBrowser = isPlatformBrowser(platformId);\r\n\r\n if (this.isBrowser)\r\n this.init();\r\n }\r\n\r\n browserCheck() {\r\n if (!this.isBrowser)\r\n console.error(\"@esfaenza/extensions MessageService is only able to display browser messages at this time. Since you are not running in a browser, all functions witll do nothing\")\r\n\r\n return this.isBrowser\r\n }\r\n\r\n public configureEmbeddability(mainWindow: Window, messageObserver: Subject<{ event: any, data: any }>) {\r\n this.Embedded = true;\r\n this.MainWindow = mainWindow;\r\n this.MessageObserver = messageObserver;\r\n }\r\n\r\n async init() {\r\n let LOCALE = this.locProvider ? await this.locProvider.Locale.pipe(first()).toPromise() : 'it-IT';\r\n\r\n this.expiredSessionSwal = swal.mixin({\r\n showCancelButton: false,\r\n confirmButtonText: 'Login',\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: false,\r\n allowOutsideClick: false,\r\n icon: \"warning\"\r\n });\r\n\r\n this.successSwalWithCancel = swal.mixin({\r\n title: this.loc[\"Success\"][LOCALE],\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n cancelButton: \"btn btn-secondary app-margin-right-10\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true,\r\n showCancelButton: true,\r\n confirmButtonText: this.loc[\"Confirm\"][LOCALE],\r\n cancelButtonText: this.loc[\"Cancel\"][LOCALE],\r\n icon: \"success\"\r\n });\r\n\r\n this.warningSwalWithCancel = swal.mixin({\r\n title: this.loc[\"Warning\"][LOCALE],\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n cancelButton: \"btn btn-secondary app-margin-right-10\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true,\r\n showCancelButton: true,\r\n confirmButtonText: this.loc[\"Confirm\"][LOCALE],\r\n cancelButtonText: this.loc[\"Cancel\"][LOCALE],\r\n icon: \"warning\"\r\n });\r\n\r\n this.warningSwal = swal.mixin({\r\n title: this.loc[\"Warning\"][LOCALE],\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true,\r\n showCancelButton: false,\r\n confirmButtonText: this.loc[\"Close\"][LOCALE],\r\n icon: \"warning\"\r\n });\r\n\r\n this.successSwal = swal.mixin({\r\n title: this.loc[\"Success\"][LOCALE],\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true,\r\n showCancelButton: false,\r\n confirmButtonText: this.loc[\"Close\"][LOCALE],\r\n icon: \"success\"\r\n });\r\n\r\n this.errorSwal = swal.mixin({\r\n title: this.loc[\"Error\"][LOCALE],\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true,\r\n showCancelButton: false,\r\n confirmButtonText: this.loc[\"Close\"][LOCALE],\r\n icon: \"error\"\r\n });\r\n\r\n this.infoSwal = swal.mixin({\r\n title: this.loc[\"Info\"][LOCALE],\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true,\r\n showCancelButton: false,\r\n confirmButtonText: this.loc[\"Close\"][LOCALE],\r\n icon: \"info\"\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Presentazione di un semplice messaggio di successo\r\n * \r\n * Se viene chiamato con le impostazioni di default e toastr è abilitato, viene mostrato al centro\r\n * Se viene chiamato con override su toastr vuol dire che è una notifica secondaria e appare in alto a destra\r\n * \r\n * @param {string} text Testo da mostrare\r\n * @param {\"toastr\" | \"swal\" | null} secondaryNotificationType Qualora sia una notifica secondaria, ne indica il tipo\r\n */\r\n public simpleSuccess(text: string, secondaryNotificationType: \"toastr\" | \"swal\" | null = null, secondaryNotificationTimeout: number = null) {\r\n if (!this.browserCheck()) return;\r\n if (this.Embedded) {\r\n this.MainWindow.postMessage({ type: \"alert\", level: 'success', msg: text }, \"*\");\r\n return;\r\n }\r\n\r\n let tos = this.toastrOrSwal(secondaryNotificationType);\r\n\r\n if (tos == \"swal\") this.successSwal.fire(\"\", text);\r\n else this.toastr.success(text, null, { positionClass: tos == \"toastr\" ? \"toast-top-right\" : \"toast-top-center\", timeOut: secondaryNotificationTimeout || (tos == \"toastr\" ? 0 : 5000), extendedTimeOut: tos == \"toastr\" ? 0 : 1000 });\r\n }\r\n\r\n /**\r\n * Presentazione di un semplice messaggio di informazione\r\n * \r\n * Se viene chiamato con le impostazioni di default e toastr è abilitato, viene mostrato al centro\r\n * Se viene chiamato con override su toastr vuol dire che è una notifica secondaria e appare in alto a destra\r\n * \r\n * @param {string} text Testo da mostrare\r\n * @param {\"toastr\" | \"swal\" | null} secondaryNotificationType Qualora sia una notifica secondaria, ne indica il tipo\r\n */\r\n public simpleInfo(text: string, secondaryNotificationType: \"toastr\" | \"swal\" | null = null, secondaryNotificationTimeout: number = null) {\r\n if (!this.browserCheck()) return;\r\n if (this.Embedded) {\r\n this.MainWindow.postMessage({ type: \"alert\", level: 'info', msg: text }, \"*\");\r\n return;\r\n }\r\n\r\n let tos = this.toastrOrSwal(secondaryNotificationType);\r\n\r\n if (tos == \"swal\") this.infoSwal.fire(\"\", text);\r\n else this.toastr.info(text, null, { positionClass: tos == \"toastr\" ? \"toast-top-right\" : \"toast-top-center\", timeOut: secondaryNotificationTimeout || (tos == \"toastr\" ? 0 : 5000), extendedTimeOut: tos == \"toastr\" ? 0 : 1000 });\r\n }\r\n\r\n /**\r\n * Presentazione di un semplice messaggio di errore\r\n * \r\n * Se viene chiamato con le impostazioni di default e toastr è abilitato, viene mostrato al centro\r\n * Se viene chiamato con override su toastr vuol dire che è una notifica secondaria e appare in alto a destra\r\n * \r\n * @param {string} text Testo da mostrare\r\n * @param {\"toastr\" | \"swal\" | null} secondaryNotificationType Qualora sia una notifica secondaria, ne indica il tipo\r\n */\r\n public simpleError(text: string, secondaryNotificationType: \"toastr\" | \"swal\" | null = null, secondaryNotificationTimeout: number = null) {\r\n if (!this.browserCheck()) return;\r\n if (this.Embedded) {\r\n this.MainWindow.postMessage({ type: \"alert\", level: 'error', msg: text }, \"*\");\r\n return;\r\n }\r\n\r\n let tos = this.toastrOrSwal(secondaryNotificationType);\r\n\r\n if (tos == \"swal\") this.errorSwal.fire(\"\", text);\r\n else this.toastr.error(text, null, { positionClass: tos == \"toastr\" ? \"toast-top-right\" : \"toast-top-center\", timeOut: secondaryNotificationTimeout || (tos == \"toastr\" ? 0 : 5000), extendedTimeOut: tos == \"toastr\" ? 0 : 1000 });\r\n }\r\n\r\n /**\r\n * Presentazione di un semplice messaggio di avviso\r\n * \r\n * Se viene chiamato con le impostazioni di default e toastr è abilitato, viene mostrato al centro\r\n * Se viene chiamato con override su toastr vuol dire che è una notifica secondaria e appare in alto a destra\r\n * \r\n * @param {string} text Testo da mostrare\r\n * @param {\"toastr\" | \"swal\" | null} secondaryNotificationType Qualora sia una notifica secondaria, ne indica il tipo\r\n */\r\n public simpleWarning(text: string, secondaryNotificationType: \"toastr\" | \"swal\" | null = null, secondaryNotificationTimeout: number = null) {\r\n if (!this.browserCheck()) return;\r\n if (this.Embedded) {\r\n this.MainWindow.postMessage({ type: \"alert\", level: 'warning', msg: text }, \"*\");\r\n return;\r\n }\r\n\r\n let tos = this.toastrOrSwal(secondaryNotificationType);\r\n\r\n if (tos == \"swal\") this.warningSwal.fire(\"\", text);\r\n else this.toastr.warning(text, null, { positionClass: tos == \"toastr\" ? \"toast-top-right\" : \"toast-top-center\", timeOut: secondaryNotificationTimeout || (tos == \"toastr\" ? 0 : 5000), extendedTimeOut: tos == \"toastr\" ? 0 : 1000 });\r\n }\r\n\r\n /**\r\n * Ripulisce tutti i messaggi presenti in un dato momento sullo schermo\r\n */\r\n public clearMessages() {\r\n if (!this.browserCheck()) return;\r\n this.toastr.clear();\r\n swal.close();\r\n }\r\n\r\n /**\r\n * Mostra un messaggio di avviso con richiesta di conferma\r\n * \r\n * @param {string} title Titolo del messaggio\r\n * @param {string} text Contenuto del messaggio\r\n * \r\n * @returns {Promise} Restituisce una Promise col risultato scelto dall'utente (conferma o no)\r\n */\r\n public promiseWarningWithChoice(title: string, text: string): Promise<any> {\r\n if (!this.browserCheck()) return;\r\n return this.warningSwalWithCancel.fire(title, text);\r\n }\r\n\r\n /**\r\n * In base alla configurazione attuale e all'eventuale override per la chiamata del caso indica se bisogna utilizzare toastr o sweetalert\r\n * \r\n * @param {\"toastr\" | \"swal\" | null} providerOverride Override alla modalità configurata\r\n * \r\n * @returns {\"toastr\" | \"swal\"} Indicazione su che provider di messaggi di avviso debba essere utilizzato\r\n */\r\n private toastrOrSwal(providerOverride: \"toastr\" | \"swal\" | null): \"toastr\" | \"swal\" {\r\n if (providerOverride != null)\r\n return providerOverride;\r\n return \"swal\";\r\n }\r\n\r\n private GuidRepsonseFunctionsMap: { [id: string]: { onsuccess: Function, onerror: Function } } = {};\r\n\r\n public simpleWarningWithChoice(title: string, text: string, onsuccess?: Function, onerror?: Function, confirmtext: string = \"\", aborttext: string = '') {\r\n if (!this.browserCheck()) return;\r\n this.withChoiceBase(\"warning\", title, text, onsuccess, onerror, confirmtext, aborttext)\r\n }\r\n\r\n public simpleSuccessWithChoice(title: string, text: string, onsuccess?: Function, onerror?: Function, confirmtext: string = \"\", aborttext: string = '') {\r\n if (!this.browserCheck()) return;\r\n this.withChoiceBase(\"success\", title, text, onsuccess, onerror, confirmtext, aborttext)\r\n }\r\n\r\n private withChoiceBase(level: \"warning\" | \"success\", title: string, text: string, onsuccess?: Function, onerror?: Function, confirmtext: string = \"\", aborttext: string = '') {\r\n if (this.Embedded) {\r\n let guid = this.hash.getGUID();\r\n this.GuidRepsonseFunctionsMap[guid] = { onsuccess, onerror };\r\n this.MainWindow.postMessage({ type: \"confirm\", level, title, text, guid }, \"*\");\r\n\r\n // Observe sulla risposta\r\n console.log(\"Inviata confirm request alla pagina principale, in attesa di risposta...\")\r\n this.MessageObserver.pipe(filter(event => event?.data?.type == \"confirm-response\" && event?.data?.guid == guid), take(1)).subscribe(event => {\r\n console.log(\"Event listener su window-message. Risposta pergiunta\");\r\n\r\n if (event?.data?.result === true)\r\n this.GuidRepsonseFunctionsMap[guid].onsuccess();\r\n else if (event?.data?.result === true)\r\n this.GuidRepsonseFunctionsMap[guid].onerror();\r\n })\r\n }\r\n else\r\n (level == \"warning\" ? this._simpleWarningWithChoice.bind(this) : this._simpleSuccessWithChoice.bind(this))(title, text, onsuccess, onerror, confirmtext, aborttext);\r\n }\r\n\r\n /**\r\n * Mostra un messaggio di avviso con richiesta di conferma e gestisce il risultato chiamato i callback **onsuccess** o **onerror**\r\n * \r\n * @param {string} title Titolo del messaggio\r\n * @param {string} text Contenuto del messaggio\r\n * @param {Function} onsuccess Callback da chimare su conferma\r\n * @param {Function} onerror Callback da chimare su errori\r\n */\r\n private _simpleWarningWithChoice(title: string, text: string, onconfirm: Function = null, onabort: Function = null, confirmtext: string = \"\", aborttext: string = '') {\r\n this._simpleWithChoice(this.warningSwalWithCancel, title, text, onconfirm, onabort, confirmtext, aborttext)\r\n }\r\n\r\n /**\r\n * Mostra un messaggio di success con richiesta di conferma e gestisce il risultato chiamato i callback **onconfirm** o **onabort**\r\n * \r\n * @param {string} title Titolo del messaggio\r\n * @param {string} text Contenuto del messaggio\r\n * @param {Function} onconfirm Callback da chimare su conferma\r\n * @param {Function} onabort Callback da chimare su annullamento\r\n * @param {string} confirmtext Testo del pulsante di azione\r\n * @param {string} aborttext Testo del pulsante di annullamento\r\n */\r\n private _simpleSuccessWithChoice(title: string, text: string, onconfirm: Function = null, onabort: Function = null, confirmtext: string = \"\", aborttext: string = '') {\r\n this._simpleWithChoice(this.successSwalWithCancel, title, text, onconfirm, onabort, confirmtext, aborttext)\r\n }\r\n\r\n /**\r\n * Metodo base per richiedere una scelta all'utente\r\n * \r\n * @param {any} swal Swal mixin da utilizzare per visualizzare il messaggio di choice\r\n * @param {string} title Titolo del messaggio\r\n * @param {string} text Contenuto del messaggio\r\n * @param {Function} onconfirm Callback da chimare su conferma\r\n * @param {Function} onabort Callback da chimare su annullamento\r\n * @param {string} confirmtext Testo del pulsante di azione\r\n * @param {string} aborttext Testo del pulsante di annullamento\r\n */\r\n private _simpleWithChoice(swal: any, title: string, text: string, onconfirm: Function = null, onabort: Function = null, confirmtext: string = \"\", aborttext: string = '') {\r\n var configuration = {\r\n title: title,\r\n html: text\r\n };\r\n if (confirmtext)\r\n configuration[\"confirmButtonText\"] = confirmtext;\r\n if (aborttext)\r\n configuration[\"cancelButtonText\"] = aborttext;\r\n\r\n swal.fire(configuration).then((result) => {\r\n if (result.value && onconfirm)\r\n onconfirm();\r\n else if (onabort)\r\n onabort();\r\n });\r\n }\r\n\r\n /**\r\n * Mostra un messaggio di avviso con richiesta di conferma e gestisce il risultato chiamato i callback **onsuccess** o **onerror**\r\n * \r\n * @param {string} title Titolo del messaggio\r\n * @param {string} text Contenuto del messaggio\r\n */\r\n public observableSimpleWarningWithChoice(title: string, text: string): Observable<boolean> {\r\n if (!this.browserCheck()) return of(false);\r\n return of(this.warningSwalWithCancel.fire(title, text)).pipe(map(t => !!t.value))\r\n }\r\n\r\n /**\r\n * Mostra un messaggio di avviso che la sessione corrente è scaduta e propone all'utente di navigare al login. Qualora l'utente decidesse di farlo \r\n * verrà chiamata la funzione di callback **onnavigate\r\n * \r\n * @param {string} title Titolo del messaggio\r\n * @param {string} text Contenuto del messaggio\r\n * @param {Function} onnavigate Callback da chimare su navigazione in corso\r\n */\r\n public expiredSessionMessage(title: string, text: string, onnavigate: Function = null) {\r\n if (!this.browserCheck()) return;\r\n\r\n this.expiredSessionSwal.fire(title, text).then((result) => {\r\n if (result.value && onnavigate)\r\n onnavigate();\r\n });\r\n }\r\n\r\n /**\r\n * Metodo helper per gestire in maniera standardizzata una risposta di tipo **CallResult**\r\n * \r\n * @param {CallResult} response Risposta ricevuta dal server\r\n * @param {string} successMsg Messaggio da visualizzare in caso di successo\r\n * @param {string} errorMsg Messaggio da visualizzare in caso di fallimento\r\n * @param {Function} postSuccess Callback da chimare in caso di successo\r\n * @param {Function} postFailure Callback da chimare in caso di fallimento\r\n */\r\n public manageCallResultResponse(response: CallResult, successMsg: string, errorMsg: string, postSuccess: Function = null, postFailure: Function = null) {\r\n if (!this.browserCheck()) return;\r\n\r\n let anyReponse = <any>response;\r\n if (response.success || anyReponse.Success) {\r\n if (response.haswarning || anyReponse.HasWarning)\r\n this.simpleWarning(response.warning || anyReponse.Warning);\r\n\r\n else if (successMsg)\r\n this.simpleSuccess(successMsg);\r\n\r\n if (postSuccess) postSuccess();\r\n } else {\r\n this.simpleError((errorMsg ? errorMsg + \": \" : \"\") + ((response.haserror || anyReponse.HasError) ? (response.error || anyReponse.Error) : '[NO ERR.]'));\r\n\r\n if (postFailure) postFailure();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo helper per gestire in maniera standardizzata una risposta di tipo **string**, considerando che:\r\n * \r\n * Stringa vuota --> Tutto bene\r\n * \r\n * Stringa piena --> Questo è il messaggio d'errore per cui la chiamata è fallita\r\n * \r\n * @param {string} response Risposta ricevuta dal server\r\n * @param {string} successMsg Messaggio da visualizzare in caso di successo\r\n * @param {string} errorMsg Messaggio da visualizzare in caso di fallimento\r\n * @param {Function} postSuccess Callback da chimare in caso di successo\r\n * @param {Function} postFailure Callback da chimare in caso di fallimento\r\n */\r\n public manageStringResponse(response: string, successMsg: string, errorMsg: string, postSuccess: Function = null, postFailure: Function = null) {\r\n if (!this.browserCheck()) return;\r\n\r\n if (!response) {\r\n if (successMsg)\r\n this.simpleSuccess(successMsg);\r\n\r\n if (postSuccess) postSuccess();\r\n } else {\r\n if (errorMsg)\r\n this.simpleError(errorMsg + \": \" + response);\r\n\r\n if (postFailure) postFailure();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo helper per gestire in maniera standardizzata una risposta di tipo **boolean**\r\n * \r\n * @param {string} response Risposta ricevuta dal server\r\n * @param {string} successMsg Messaggio da visualizzare in caso di successo\r\n * @param {string} errorMsg Messaggio da visualizzare in caso di fallimento\r\n * @param {Function} postSuccess Callback da chimare in caso di successo\r\n * @param {Function} postFailure Callback da chimare in caso di fallimento\r\n */\r\n public manageStringResponseBool(response: boolean, successMsg: string, errorMsg: string, postSuccess: Function = null, postFailure: Function = null) {\r\n if (!this.browserCheck()) return;\r\n\r\n if (response) {\r\n if (successMsg)\r\n this.simpleSuccess(successMsg);\r\n\r\n if (postSuccess) postSuccess();\r\n } else {\r\n if (errorMsg)\r\n this.simpleError(errorMsg);\r\n\r\n if (postFailure) postFailure();\r\n }\r\n }\r\n}","// Angular\r\nimport { Inject, Injectable, PLATFORM_ID } from \"@angular/core\";\r\nimport { isPlatformBrowser, Location } from \"@angular/common\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n// Services\r\nimport { MessageService } from \"./extensions.messages.service\";\r\n\r\n// Libraries\r\nimport { ReplaySubject, Subject, filter } from \"rxjs\";\r\n\r\ndeclare var myconfig: { AppData: { ModuleId: string }; };\r\n\r\n/* Classe che contiene tutte le informazioni sull'embedding in un unico contenitore per semplicità */\r\n@Injectable({ providedIn: \"root\"})\r\nexport class AppEmbeddingExtensions {\r\n\r\n public sidebarWidth: number = 230;\r\n\r\n public EmbeddingSource: ReplaySubject<string> = new ReplaySubject<string>();\r\n public Embedded: boolean = false;\r\n public EmbeddingLevel: number = 0;\r\n public MainWindow: any;\r\n\r\n public MessageObserver: Subject<{ event: any, data: any }> = new Subject<{ event: any, data: any }>();\r\n\r\n private _reloadAllowed: boolean = true;\r\n\r\n public EmbeddedModule: string;\r\n\r\n private pushedHistories: { _pushed: boolean, url: string, from: string }[] = [];\r\n\r\n private isBrowser: boolean = true;\r\n\r\n constructor(private msgService: MessageService, private router: Router, private location: Location, @Inject(PLATFORM_ID) platformId: Object) {\r\n this.isBrowser = isPlatformBrowser(platformId);\r\n if(!this.isBrowser) return;\r\n\r\n this.MainWindow = <{ parent: any, postMessage: Function }>window;\r\n while (this.MainWindow.parent != this.MainWindow) {\r\n this.MainWindow = this.MainWindow.parent;\r\n this.EmbeddingLevel++;\r\n this.Embedded = true;\r\n\r\n // Fallback per farlo funzionare forzatamente mentre lo testo\r\n this.EmbeddedModule = this.location.path().match(/module=([a-zA-Z_]+)/)?.[1];\r\n\r\n if(!this.EmbeddedModule)\r\n this.waitForMyConfigAndForceEmbeddedModule();\r\n }\r\n\r\n this.configureEmbeddability();\r\n\r\n if (this.Embedded)\r\n this.msgService.configureEmbeddability(this.MainWindow, this.MessageObserver);\r\n\r\n this.MessageObserver.pipe(filter(ev => ev.event == \"menu-navigation\")).subscribe(event => {\r\n\r\n // Mi interessa solo roba relativa all'embedding\r\n if (!event.data.routerLink.startsWith(\"embed\"))\r\n return;\r\n\r\n // emb/crm/parties/parties_search;blabla=xyz?blabla --> parties/parties_search\r\n let normalizedRequestedRoute = event.data.routerLink.split(\"?\")[0].split(\";\")[0].split(\"/\").slice(2).join(\"/\");\r\n ///pages_ext/{module}/parties/parties_search;blabla=xyz?blabla --> parties/parties_search\r\n let normalizedFirstRoute = this.pushedHistories.length > 0 ? this.pushedHistories[0].from.split(\"?\")[0].split(\";\")[0].split(\"/\").slice(3).join(\"/\") : \"\";\r\n // La route su cui sto navigando ora è uguale alla route in cui l'embedding è iniziato. \r\n // Significa che devo simulare dei back fino a che non sono arrivato all'inizio\r\n if (normalizedRequestedRoute == normalizedFirstRoute) {\r\n this.router.navigate([\"pages/\" + event.data.routerLink, {wakeup: 1}], { queryParams: event.data.queryParams, onSameUrlNavigation: \"reload\" });\r\n this.pushedHistories = [];\r\n }\r\n });\r\n }\r\n\r\n private waitForMyConfigAndForceEmbeddedModule() {\r\n if(!this.isBrowser) return;\r\n\r\n // Aspetto di ricevere il myconfig e setto con lui l'embeddedmodule. Questo viene eseguito solo se this.location.path() per qualche motivo non contiene il module\r\n let interval = setInterval(() => {\r\n if (myconfig?.AppData?.ModuleId) {\r\n this.EmbeddedModule = myconfig.AppData.ModuleId;\r\n clearInterval(interval);\r\n }\r\n }, 250);\r\n }\r\n\r\n public IsReloadAllowed() {\r\n let ret = this._reloadAllowed;\r\n this._reloadAllowed = true;\r\n return ret;\r\n }\r\n\r\n private MessageBarrierDebouncMs: number = 250;\r\n private OnMessageCallBarrier: { [id: string]: boolean } = {}\r\n private messageHash(event: MessageEvent) {\r\n return `${JSON.parse(JSON.stringify(event?.data))}`;\r\n }\r\n\r\n configureEmbeddability() {\r\n if(!this.isBrowser) return;\r\n\r\n if (this.Embedded)\r\n this.MainWindow.postMessage({ type: \"whois\" }, \"*\");\r\n else\r\n this.EmbeddingSource.next(\"\");\r\n\r\n window.onmessage = (event: MessageEvent) => {\r\n // Ignoro i miei messaggi dato che mi interessano solo quelli degli altri iframe\r\n if (event.source == window && event?.data?.type != \"modal-open\")\r\n return;\r\n\r\n let sourceWindow = (event.source as Window);\r\n\r\n // Posso gestire lo stesso identico messaggio solo 1 volta ogni MessageBarrierDebouncMs\r\n let messageHash = this.messageHash(event);\r\n if (this.OnMessageCallBarrier[messageHash])\r\n return;\r\n else {\r\n this.OnMessageCallBarrier[messageHash] = true;\r\n setTimeout(() => delete this.OnMessageCallBarrier[messageHash], this.MessageBarrierDebouncMs);\r\n }\r\n\r\n this.MessageObserver.next({ event: \"window-message\", data: event?.data });\r\n\r\n if (event?.data?.type == \"alert\") {\r\n console.log(`Window message - alert -> Level: ${event?.data?.level}, Message: ${event?.data?.msg}`);\r\n\r\n switch (event?.data?.level) {\r\n case \"success\": this.msgService.simpleSuccess(event?.data?.msg); break;\r\n case \"warning\": this.msgService.simpleWarning(event?.data?.msg); break;\r\n case \"error\": this.msgService.simpleError(event?.data?.msg); break;\r\n case \"info\": this.msgService.simpleInfo(event?.data?.msg); break;\r\n }\r\n }\r\n else if (event?.data?.type == \"whois\") {\r\n console.log(`Window message - Whois?`);\r\n\r\n sourceWindow.postMessage({ type: \"itsme\", module: myconfig.AppData.ModuleId }, \"*\")\r\n }\r\n else if (event?.data?.type == \"itsme\") {\r\n console.log(`Window message - It'sme -> ` + event?.data?.module);\r\n\r\n this.EmbeddingSource.next(event?.data?.module);\r\n }\r\n else if (event?.data?.type == \"replace-state\") {\r\n console.log(`Window message - replace-state -> Url: ${event?.data?.url}`);\r\n\r\n this.location.replaceState(event?.data?.url);\r\n }\r\n else if (event?.data?.type == \"confirm\") {\r\n console.log(`Window message - confirm -> Level: ${event?.data?.level}, Message: ${event?.data?.text}, Title: ${event?.data?.title}, ID: ${event?.data?.guid}`);\r\n\r\n var baseResponse = { type: \"confirm-response\", guid: event?.data?.guid };\r\n\r\n switch (event?.data?.level) {\r\n case \"success\":\r\n this.msgService.simpleSuccessWithChoice(event?.data?.title, event?.data?.text, () => {\r\n sourceWindow.postMessage({ result: true, ...baseResponse }, \"*\")\r\n }, () => {\r\n sourceWindow.postMessage({ result: false, ...baseResponse }, \"*\")\r\n });\r\n break;\r\n case \"warning\":\r\n this.msgService.simpleWarningWithChoice(event?.data?.title, event?.data?.text, () => {\r\n sourceWindow.postMessage({ result: true, ...baseResponse }, \"*\")\r\n }, () => {\r\n sourceWindow.postMessage({ result: false, ...baseResponse }, \"*\")\r\n });\r\n break;\r\n }\r\n\r\n }\r\n else if (event?.data?.type == \"navigate\") {\r\n console.log(`Window message - navigate -> ${event?.data?.url}`);\r\n var newTab = event?.data?.newTab;\r\n var replaceState = event?.data?.replaceState\r\n var current = event?.data?.current;\r\n\r\n // Controllo se il router sta seguendo la chiamata attuale. Escludo i query params che sono gli unici che possono essere seccati dai replaceState\r\n // e che potrebbero fare del casino. Stesso discorso per i parametri semplici (ad esempio il parametro di wakeup)\r\n if (!window.location.href.includes(this.router.url.split(\"?\")[0].split(\";\")[0])) {\r\n console.warn(\"Doppia chiamata di navigazione, ignoro il secondo evento scoordinato dal router\");\r\n return;\r\n }\r\n\r\n let newRelativeUrl = this.router.createUrlTree([event?.data?.url]);\r\n let baseUrl = window.location.href.split(\"#\")[0] + \"#\";\r\n let appPath = decodeURIComponent(newRelativeUrl.toString());\r\n let newUrl = baseUrl + appPath;\r\n\r\n if (replaceState) {\r\n this.pushedHistories.push({ _pushed: true, url: newUrl, from: current });\r\n history.pushState({ _pushed: true }, \"\", newUrl);\r\n }\r\n else if (newTab)\r\n window.open(newUrl, '_blank');\r\n }\r\n else if (event?.data?.type == \"navigate-back\") {\r\n console.log(`Window message - navigate-back -> ${event?.data?.url}`);\r\n this.onNavigateBack();\r\n }\r\n else if (event?.data?.type == \"redirect\") {\r\n console.log(`Window message - redirect -> ${event?.data?.url}`);\r\n\r\n window.location.href = event?.data?.url;\r\n }\r\n else if (event?.data?.type == \"navigation\") {\r\n console.log(`Window message - Navigation -> ${event?.data?.internalNavigation ? \"[internal]\" : \"\"} ${event?.data?.title}`);\r\n\r\n this.MessageObserver.next({ event: \"navigation\", data: event?.data });\r\n }\r\n else if (event?.data?.type == \"modal-open\") {\r\n const wrapper = document.body.getElementsByClassName(\"main-wrapper\")[0] as HTMLElement;\r\n let wrapperStyles = window.getComputedStyle(wrapper);\r\n const wrapperPaddingLeft = parseInt(wrapperStyles.getPropertyValue(\"padding-left\"));\r\n const wrapperPaddingRight = parseInt(wrapperStyles.getPropertyValue(\"padding-right\"));\r\n\r\n console.log(`Window message - Modal Open -> Backdrop Height: ${event?.data?.backdropHeight}`);\r\n\r\n var bottomLeftover: number = 7; // Valore fisso... robina che rimane di sotto per un motivo o quell'altro\r\n var topHeight: number = 86; // valore fisso, distanza fra il top e l'inizio dell'iframe, non sarà mai diverso\r\n var rightSpace: number = wrapperPaddingRight; // valore fisso, distanza fra la fine dell'iframe e il lato sinistro dello schermo, non sarà mai diverso\r\n var leftSpace: number = this.sidebarWidth + wrapperPaddingLeft;\r\n\r\n let commonStyles = \"position: absolute; z-index: 9999; background-color: #000; opacity: 0.5; \";\r\n\r\n wrapper.style.setProperty(\"overflow\", \"hidden\", \"important\");\r\n\r\n const top = document.createElement(\"div\");\r\n top.className = \"embedded-modal-top\";\r\n top.style.cssText = commonStyles + `height: ${topHeight}px; top: 0; width: calc(100% - ${leftSpace}px); left: ${leftSpace}px`;\r\n top.id = \"top\";\r\n\r\n const left = document.createElement(\"div\");\r\n left.className = \"embedded-modal-left\";\r\n left.style.cssText = commonStyles + `height: 100%; top: 0; width: ${leftSpace}px;`;\r\n left.id = \"left\";\r\n\r\n const right = document.createElement(\"div\");\r\n right.className = \"embedded-modal-right\";\r\n right.style.cssText = commonStyles + `height: calc(100% - ${topHeight}px); top: ${topHeight}px; right: 0; width: ${rightSpace}px;`;\r\n right.id = \"right\";\r\n\r\n const bottom = document.createElement(\"div\");\r\n bottom.className = \"embedded-modal-bottom\";\r\n bottom.style.cssText = commonStyles + `height: ${bottomLeftover}px; bottom: 0; width: calc(100% - ${leftSpace + rightSpace}px); left: ${leftSpace}px`;\r\n bottom.id = \"bottom\";\r\n\r\n document.body.appendChild(top);\r\n document.body.appendChild(left);\r\n document.body.appendChild(right);\r\n document.body.appendChild(bottom);\r\n }\r\n else if (event?.data?.type == \"modal-close\") {\r\n console.log(`Window message - Modal Close`);\r\n\r\n let wrapper = document.body.getElementsByClassName(\"main-wrapper\")[0] as HTMLElement;\r\n wrapper.style.removeProperty(\"overflow\");\r\n\r\n const top = document.getElementById(\"top\");\r\n const left = document.getElementById(\"left\");\r\n const right = document.getElementById(\"right\");\r\n const bottom = document.getElementById(\"bottom\");\r\n\r\n if (top) document.body.removeChild(top);\r\n if (left) document.body.removeChild(left);\r\n if (right) document.body.removeChild(right);\r\n if (bottom) document.body.removeChild(bottom);\r\n }\r\n };\r\n\r\n if (this.Embedded)\r\n document.body.style.setProperty(\"overflow-y\", \"auto\", \"important\");\r\n }\r\n\r\n private onNavigateBack() {\r\n if(!this.isBrowser) return;\r\n\r\n if (history?.state?._pushed) {\r\n this._reloadAllowed = false;\r\n this.pushedHistories.pop();\r\n history.back();\r\n }\r\n }\r\n\r\n public replaceState(basePath: string, url: string) {\r\n if(!this.isBrowser) return;\r\n\r\n // Esempio basePath: pages\r\n // Esempio url: parties/leads_search\r\n\r\n // Normalizzazione senza slash prima o dopo\r\n basePath = basePath.endsWith(\"/\") ? basePath.substring(0, basePath.length -2) : basePath;\r\n url = url.startsWith(\"/\") ? url.substring(1) : url;\r\n\r\n this.location.replaceState(`${basePath}/${url}`);\r\n this.MainWindow.postMessage({ type: \"replace-state\", url: `pages/embed/${this.EmbeddedModule}/${url}` }, \"*\");\r\n }\r\n\r\n public refreshBoundariesOnMenuCollapse() {\r\n if(!this.isBrowser) return;\r\n \r\n const wrapper = document.body.getElementsByClassName(\"main-wrapper\")[0] as HTMLElement;\r\n let wrapperStyles = window.getComputedStyle(wrapper);\r\n const wrapperPaddingLeft = parseInt(wrapperStyles.getPropertyValue(\"padding-left\"));\r\n var leftSpace: number = 230 + wrapperPaddingLeft;\r\n\r\n const left = document.getElementById(\"left\");\r\n const top = document.getElementById(\"top\");\r\n\r\n if (top) {\r\n top.style.setProperty(\"left\", (leftSpace) + \"px\");\r\n top.style.setProperty(\"width\", `calc(100% - ${leftSpace}px)`);\r\n }\r\n\r\n if (left)\r\n left.style.setProperty(\"width\", leftSpace + \"px\");\r\n }\r\n}","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AppEmbeddingExtensions } from \"./extensions.embedding.service\";\r\n\r\n/**\r\n * WIP: per razionalizzare il fill della routesmap (vedi CRM app.extensions.ts)\r\n */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class BaseExtensionsService {\r\n\r\n public RedirectMap: { [index: string]: { url: string, params: string[] } } = {};\r\n public RoutesMap: { [index: string]: { route: (param: string) => any } } = {};\r\n\r\n constructor(private emb: AppEmbeddingExtensions) {\r\n for (let prop in this.RedirectMap) {\r\n this.RoutesMap[prop] = { route: null };\r\n this.RoutesMap[prop].route = (param: string) => {\r\n let obj = {};\r\n obj[this.RedirectMap[prop].params[0]] = param;\r\n return [(this.emb.Embedded ? \"pages_ext/\" : \"pages/\") + this.RedirectMap[prop].url, obj];\r\n }\r\n }\r\n }\r\n}","/**\r\n * Suffisso della proprietà da generare in cui salvare il navigatore \r\n * utilizzato dal servizio di esportazione per prendere il valore delle proprietà di un oggetto\r\n */\r\nexport const csvValueNavigator: string = \"_csvnav\";\r\n/** Suffisso con le informazioni del tipo per le esportazioni di oggetti */\r\nexport const csvValueType: string = \"_csvtype\";\r\n/** Suffisso della proprietà da generare in cui salvare l'ordine di esportazione */\r\nexport const csvOrdPrefix: string = \"_csvord\";\r\n/** Suffisso della proprietà da generare in cui salvare la visibilità di questa proprietà */\r\nexport const csvVisPrefix: string = \"_csvvis\";\r\n/** Suffisso della proprietà da generare in cui salvare il nome della colonna in cui salvare questa proprietà */\r\nexport const csvHdrPrefix: string = \"_csvhdr\";\r\n/** Suffisso della proprietà da generare in cui salvare il codice del th a cui si riferisce questo campo */\r\nexport const csvPropKey: string = \"_csvkey\";\r\n/** Suffisso della proprietà da generare in cui salvare il valore da prendere per una proprietà di tipo Lista */\r\nexport const listCsvValPrefix: string = \"_listcsvval\";\r\n/** Suffisso della proprietà da generare in cui salvare l'Header della proprietà di tipo Lista relativo al valore esportato nella proprietà con suffisso **listCsvValPrefix** */\r\nexport const listCsvHdrPrefix: string = \"_listcsvhdr\";\r\n/** Suffisso della proprietà da generare in cui salvare il formato della proprietà di tipo Lista relativo al valore esportato nella proprietà con suffisso **listCsvValPrefix** */\r\nexport const listCsvValFormat: string = \"_listcsvvalformat\";\r\n/** Suffisso della proprietà da generare in cui salvare il valore da prendere per una proprietà di tipo Dizionario */\r\nexport const dictionaryCsvValPrefix: string = \"_flatlistcsvval\";\r\n/** Suffisso della proprietà da generare in cui salvare l'Header della proprietà di un Dizionario relativo al valore esportato nella proprietà con suffisso **dictionaryCsvValPrefix** */\r\nexport const dictionaryCsvHdrPrefix: string = \"_flatlistcsvhdr\";\r\n/** Suffisso della proprietà da generare in cui salvare il formato della proprietà che si sta esportando */\r\nexport const csvFormatPrefix: string = \"_csvfmt\";\r\n/** Nome della proprietà che contiene tutti i nomi di tutte le proprietà da esportare */\r\nexport const exportList: string = \"__export_list__\";\r\n/** Nome della proprietà che contiene la classe di localizzazione da utilizzare per una data esportazione */\r\nexport const locProperty: string = \"__loc__\";","\r\n/**\r\n * Mappatura del TypeCode del C#\r\n */\r\nexport enum TypeCode {\r\n /** @ignore */ Empty = 0,\r\n /** @ignore */ Obj = 1,\r\n /** @ignore */ DBNull = 2,\r\n /** @ignore */ Boolean = 3,\r\n /** @ignore */ Char = 4,\r\n /** @ignore */ SByte = 5,\r\n /** @ignore */ Byte = 6,\r\n /** @ignore */ Int16 = 7,\r\n /** @ignore */ UInt16 = 8,\r\n /** @ignore */ Int32 = 9,\r\n /** @ignore */ UInt32 = 10,\r\n /** @ignore */ Int64 = 11,\r\n /** @ignore */ UInt64 = 12,\r\n /** @ignore */ Single = 13,\r\n /** @ignore */ Double = 14,\r\n /** @ignore */ Decimal = 15,\r\n /** @ignore */ DateTime = 16,\r\n /** @ignore */ String = 18\r\n}","// Angular\r\nimport { Injectable, Type, WritableSignal } from \"@angular/core\";\r\nimport { NgForm } from \"@angular/forms\";\r\n\r\n// Modelli\r\nimport { TypeCode } from '../models/TypeCode';\r\n\r\n/**\r\n * Service che fornisce metodi di pubblica utilità\r\n */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class UtilityService {\r\n\r\n /**\r\n * Deseleziona il testo eventualmente selezionato\r\n */\r\n public clearTextSelection() {\r\n if (!window) {\r\n console.error(\"This function access the javascript window object which is not defined. Are you executing this outside of browser context?\");\r\n return;\r\n }\r\n\r\n if (window.getSelection().empty) // Chrome\r\n window.getSelection().empty();\r\n else if (window.getSelection().removeAllRanges) // Firefox\r\n window.getSelection().removeAllRanges();\r\n }\r\n\r\n /**\r\n * Partendo da una lista, dato il nome della proprietà chiave e il valore della chiave selezionata, \r\n * trova e restituisce l'oggetto desiderato\r\n * \r\n * @param {T[]} sourceList Lista di oggetti dentro cui cercare\r\n * @param {string} sourceItemIdField Nome della proprietà che rappresenta la chiave di un oggetto di tipo T\r\n * @param {string} selectedValue Valore di chiave selezionato\r\n * \r\n * @returns {T} Oggetto la cui proprietà **sourceItemIdField** assume il valore **selectedValue**\r\n */\r\n public getSelectedItem<T>(sourceList: T[], sourceItemIdField: string, selectedValue: string): T {\r\n for (let i = 0; i < sourceList.length; i++) {\r\n var item = sourceList[i];\r\n if (item[sourceItemIdField] == selectedValue)\r\n return item;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Effettua il reset di un Form di Angular\r\n * \r\n * @param {NgForm} form Form da resettare\r\n * @param {string} exception1 Campo da non resettare\r\n * @param {string} exception2 Campo da non resettare\r\n */\r\n public cleanForm(form: NgForm, exception1: string = null, exception2: string = null) {\r\n for (let name in form.controls) {\r\n if (name && name != exception1 && name != exception1 + \"_internal\" && name != exception2 && name != exception2 + \"_internal\") {\r\n form.controls[name].reset();\r\n }\r\n else {\r\n form.controls[name].markAsPristine();\r\n form.controls[name].markAsUntouched();\r\n }\r\n }\r\n\r\n //Reimposto il submitted\r\n ((<any>form) as { submittedReactive: WritableSignal<boolean> }).submittedReactive.set(false);\r\n }\r\n\r\n /**\r\n * Helper che permette di scaricare un file dato un URL (Generato da una chiamata ad **window.URL.createObjectURL**)\r\n * \r\n * @param {string} url ObjectURL che rappresenta il file da scaricare\r\n * @param {string} filename Nome del file suggerito in fase di salvataggio\r\n */\r\n public fileDownload(url: string, fileName: string) {\r\n if (!document) {\r\n console.error(\"This function access the javascript document object which is not defined. Are you executing this outside of browser context?\");\r\n return;\r\n }\r\n\r\n var a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.className = \"ta-display-none\";\r\n a.href = url;\r\n a.download = fileName;\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n document.body.removeChild(a);\r\n }\r\n\r\n /**\r\n * Helper per la formattazione di un numero di millisecondi in una stringa più comprensibile per un umano\r\n * \r\n * @param {number} duration Tempo espresso in millisecondi\r\n * \r\n * @returns {string} Durata formattata\r\n */\r\n public msToTime(duration: number): string {\r\n if (!duration)\r\n return \"\";\r\n\r\n var milliseconds = parseInt(((duration % 1000) / 100).toString()),\r\n seconds = parseInt(((duration / 1000) % 60).toString()),\r\n minutes = parseInt(((duration / (1000 * 60)) % 60).toString()),\r\n hours = parseInt(((duration / (1000 * 60 * 60)) % 24).toString());\r\n\r\n var st_hours = (hours < 10) ? \"0\" + hours : hours;\r\n var st_minutes = (minutes < 10) ? \"0\" + minutes : minutes;\r\n var st_seconds = (seconds < 10) ? \"0\" + seconds : seconds;\r\n\r\n return st_hours + \":\" + st_minutes + \":\" + st_seconds + \".\" + milliseconds;\r\n }\r\n\r\n /**\r\n * Helper che permette di scaricare un file in Base64\r\n * \r\n * @param {string} base64Data Base64 che rappresenta il file da scaricare\r\n * @param {string} filename Nome del file suggerito in fase di salvataggio\r\n */\r\n public saveFile(base64Data: string, filename: string) {\r\n var sampleArr = this.base64ToArrayBuffer(base64Data);\r\n this.saveByteArray(sampleArr, filename);\r\n }\r\n\r\n /**\r\n * Trasforma un Base64 in un ArrayBuffer\r\n * \r\n * @param {string} base64Data Base64 da trasformare\r\n * \r\n * @returns {Uint8Array} Array UTF8\r\n */\r\n private base64ToArrayBuffer(base64Data: string): Uint8Array {\r\n var binaryString = window.atob(base64Data);\r\n var binaryLen = binaryString.length;\r\n var bytes = new Uint8Array(binaryLen);\r\n for (var i = 0; i < binaryLen; i++) {\r\n var ascii = binaryString.charCodeAt(i);\r\n bytes[i] = ascii;\r\n }\r\n return bytes;\r\n }\r\n\r\n /**\r\n * Helper che permette di scaricare un file dato un array di Byte (**Uint8Array**)\r\n * \r\n * @param {Uint8Array} byte Rappresentazione del file da scaricare\r\n * @param {string} filename Nome del file suggerito in fase di salvataggio\r\n */\r\n private saveByteArray(byte: Uint8Array, filename: string) {\r\n if (!document) {\r\n console.error(\"This function access the javascript document object which is not defined. Are you executing this outside of browser context?\");\r\n return;\r\n }\r\n\r\n var blob = new Blob([byte as any]);\r\n var link = document.createElement(\"a\");\r\n document.body.appendChild(link);\r\n link.href = window.URL.createObjectURL(blob);\r\n var fileName = filename;\r\n link.download = fileName;\r\n link.click();\r\n document.body.removeChild(link);\r\n };\r\n\r\n /**\r\n * Utility per lo swap di due elementi di un array\r\n * \r\n * @param {any[]} array Array di cui invertire due elementi\r\n * @param {number} x Indice del primo elemento\r\n * @param {number} y Indice del secondo elemento\r\n */\r\n public swap(array: any[], x: number, y: number) {\r\n var b = array[x];\r\n array[x] = array[y];\r\n array[y] = b;\r\n }\r\n\r\n /**\r\n * Helper di trascodifica da tipo c# a tipo Typescript\r\n * \r\n * @param {TypeCode} type Tipo da trascodificare\r\n * \r\n * @returns {\"boolean\" | \"number\" | \"string\" | \"date\"} Tipo Typescript corrispondente\r\n */\r\n public getJsTypeFromTypeCode(type: TypeCode): \"boolean\" | \"number\" | \"string\" | \"date\" {\r\n switch (type) {\r\n case TypeCode.Boolean:\r\n return \"boolean\";\r\n\r\n case TypeCode.Decimal:\r\n case TypeCode.Double:\r\n case TypeCode.Single:\r\n case TypeCode.Int16:\r\n case TypeCode.Int32:\r\n case TypeCode.Int64:\r\n case TypeCode.Byte:\r\n case TypeCode.SByte:\r\n case TypeCode.UInt16:\r\n case TypeCode.UInt32:\r\n case TypeCode.UInt64:\r\n return \"number\";\r\n case TypeCode.Char:\r\n case TypeCode.String:\r\n return \"string\";\r\n case TypeCode.DateTime:\r\n return \"date\";\r\n default:\r\n console.log(\"Unrecognized input type. Typecode:\" + type);\r\n return \"string\";\r\n }\r\n }\r\n\r\n /**\r\n * Effettua la clonazione profonda di un oggetto in maniera molto più performante che JSON.parse(JSON.stringify()).\r\n * \r\n * Usare solo per oggetti puri e quantomeno semplici per evitare complicazioni derivanti dalle semplificazioni che questo metodo assume\r\n * \r\n * @param {any} source Oggetto da clonare\r\n * \r\n * @return {any} Clone dell'oggetto passato \r\n */\r\n public deepClone(source: any, type: Type<any> = null): any {\r\n\r\n // Valori semplici\r\n if (source == null || typeof source !== 'object')\r\n return source;\r\n\r\n // Pseudo Struct\r\n switch (toString.call(source)) {\r\n\r\n case '[object Boolean]':\r\n case '[object Number]':\r\n case '[object String]':\r\n case '[object Date]':\r\n return new source.constructor(source.valueOf());\r\n // Clonazione di un file -> Restituisco il riferimento al file stesso\r\n case \"[object File]\":\r\n return source;\r\n default: break;\r\n }\r\n\r\n // Oggetti Complessi\r\n return this.recursiveStep(source, Array.isArray(source) || source instanceof Array ? [] : (type == null ? Object.create(Object.getPrototypeOf(source)) : new type()));\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Step ricorsivo per la clonatura degli oggetti. Vedere **deepClone**\r\n */\r\n private recursiveStep(source: any, destination: any) {\r\n if (Array.isArray(source) || source instanceof Array) {\r\n for (var i = 0, ii = source.length; i < ii; i++)\r\n destination.push(this.deepClone(source[i]));\r\n } else if (source && typeof source.hasOwnProperty === 'function') {\r\n for (let key in source) {\r\n if (source.hasOwnProperty(key))\r\n destination[key] = this.deepClone(source[key]);\r\n }\r\n }\r\n\r\n return destination;\r\n }\r\n\r\n cast(object: any, clss: Type<any>) {\r\n let ret = Object.assign(Object.create(clss.prototype), object);\r\n return ret;\r\n }\r\n\r\n // Funzione di throttling per non spammare richieste in caso di animazioni attivate\r\n //TODO: spostarla in un metodo di utilit� (esfaenza/extensions)\r\n /** @ignore */\r\n private executionTimers: { [index: string]: any } = {};\r\n /** @ignore */\r\n public throttla(id: string, func: Function, throttleTime: number): void {\r\n //Se ho la funzione che vuole eseguire ripulisco quel timeout\r\n if (this.executionTimers[id])\r\n clearTimeout(this.executionTimers[id]);\r\n\r\n //Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi\r\n this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);\r\n }\r\n}","// Angular\r\nimport { Injectable, Type } from \"@angular/core\";\r\n\r\n// Esfaenza\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Configurazioni\r\n\r\nimport { exportList, csvFormatPrefix, csvHdrPrefix, csvOrdPrefix, csvValueNavigator, csvVisPrefix, dictionaryCsvHdrPrefix, dictionaryCsvValPrefix, listCsvHdrPrefix, listCsvValFormat, listCsvValPrefix, csvPropKey, locProperty, csvValueType } from \"../models/ExportConsts\";\r\nimport { DateService } from './extensions.dates.service';\r\nimport { UtilityService } from \"./extensions.utilities.service\";\r\n\r\n// Modelli\r\nimport { CsvHeaders } from \"../models/CsvHeaders\";\r\nimport { GenericItem } from \"../models/GenericItem\";\r\n\r\nimport * as XLSX from 'xlsx';\r\n\r\n/**\r\n * Decoratore che fornisce la classe di localizzazione per tutte le proprietà esportate con @Export e qualsiasi altro tag che richieda localizzazioni.\r\n * \r\n * Sostanzilamente aggiunge la proprietà **__loc__** all'oggetto creato dalla classe corrente assegnandogli come valore il tipo del LocalizationService da usare per la traduzione\r\n * \r\n * @param {Type<LocalizationService>} loc Tipo ereditato dal LocalizationService che può essere creato a runtime sotto contesto della DI di Angular\r\n */\r\nexport function ExportLocalization(loc: Type<LocalizationService>) {\r\n return function integrateLoc<T extends { new(...args: any[]): {} }>(constructor: T) {\r\n return class extends constructor { __loc__ = loc; };\r\n }\r\n}\r\n\r\n/**\r\n * Decoratore di esportazione utilizzabile su una proprietà singola. \r\n * Verranno generate 3 proprietà che gestiranno l'esportazione: (prop, prop_csvvis, prop_csvhdr). \r\n * \r\n * Ad esempio, da questa configurazione:\r\n * \r\n * @example\r\n * ```\r\n * @Export(true, \"MyHeader\")\r\n * ciao: string;\r\n * ```\r\n * \r\n * Nasceranno le seguenti proprietà nell'oggetto esportabile:\r\n * \r\n * @example\r\n * ```\r\n * ciao_csvvis: string; => true\r\n * ciao: string;\r\n * ciao_csvhdr: string => \"MyHeader\"\r\n * ```\r\n * \r\n * @param {number} order Ordine di esportazione. Più piccolo è, prima appare il valore\r\n * @param {string} header Titolo della colonna nel file CSV esportato\r\n * @param {string} format Formato di esportazione. Può essere un formato data per i campi data o 'F' per i campi floating point\r\n */\r\nexport const Export = (order: number, header: string, format: string = null, tableid: string = null) =>\r\n (target: Object, propertyKey: string) => {\r\n if (format)\r\n Object.defineProperty(target, propertyKey + csvFormatPrefix, { value: format, writable: false });\r\n Object.defineProperty(target, propertyKey + csvOrdPrefix, { value: order, writable: false });\r\n Object.defineProperty(target, propertyKey + csvVisPrefix, { value: !!header, writable: false });\r\n Object.defineProperty(target, propertyKey + csvHdrPrefix, { value: header, writable: false });\r\n if (tableid)\r\n Object.defineProperty(target, propertyKey + csvPropKey, { value: tableid, writable: false });\r\n\r\n if (target[exportList])\r\n target[exportList].push(propertyKey + csvVisPrefix);\r\n else\r\n target[exportList] = [propertyKey + csvVisPrefix]\r\n };\r\n\r\n/**\r\n * Decoratore di esportazione utilizzabile su un oggetto. \r\n * Per ogni proprietà dell'oggetto verranno generate 3 proprietà che gestiranno l'esportazione: (prop, prop_csvvis, prop_csvhdr). \r\n * Per essere esportate, le proprietà dell'oggetto devono essere marcate con i Decoratori di esportazione\r\n * \r\n * Ad esempio, da questa configurazione:\r\n * \r\n * @example\r\n * ```\r\n * MyObj {\r\n * @Export(true, \"MyHeader\")\r\n * ciao: string;\r\n * }\r\n * \r\n * @ExportObject(true, \"MyHeader\")\r\n * test: MyObj; \r\n * ```\r\n * \r\n * Nasceranno le seguenti proprietà nell'oggetto esportabile:\r\n * \r\n * @example\r\n * ```\r\n * testciao: string; => Valore di MyObj.ciao\r\n * testciao_csvvis: string; => true\r\n * testciao_csvhdr: string => \"MyHeader\" \r\n * ```\r\n *\r\n * @param {number} order Ordine di esportazione. Più piccolo è, prima appare il valore\r\n * @param {any} type Tipo da esportare\r\n */\r\nexport const ExportAs = (order: number, type: any, prefix?: string) =>\r\n (target: Object, propertyKey: string) => {\r\n var addedHere: { [id: string]: boolean } = {};\r\n\r\n var t = new type();\r\n var props = t[exportList];\r\n for (let i = 0; i < props.length; i++) {\r\n let prop = props[i].replace(csvVisPrefix, '');\r\n\r\n if (addedHere[prop]) continue;\r\n\r\n if (typeof t[prop + csvVisPrefix] !== \"undefined\") {\r\n var toEmit: boolean = t[prop + csvVisPrefix];\r\n var lbl = t[prop + csvHdrPrefix];\r\n var format = t[prop + csvFormatPrefix];\r\n var orderProp = t[prop + csvOrdPrefix];\r\n var ppp = propertyKey + \"$_$\" + prop;\r\n\r\n if (format)\r\n Object.defineProperty(target, ppp + csvFormatPrefix, { value: format, writable: false });\r\n Object.defineProperty(target, ppp + csvOrdPrefix, { value: orderProp + order, writable: false });\r\n Object.defineProperty(target, ppp, { value: null, writable: true, enumerable: true });\r\n Object.defineProperty(target, ppp + csvValueNavigator, { value: propertyKey + \".\" + prop.replace(/\\$_\\$/g, '.'), writable: false });\r\n Object.defineProperty(target, ppp + csvVisPrefix, { value: toEmit, writable: false });\r\n Object.defineProperty(target, ppp + csvHdrPrefix, { value: (prefix ? prefix + ' ' : '') + lbl, writable: false });\r\n Object.defineProperty(target, ppp + csvValueType, { value: type, writable: false });\r\n\r\n if (target[exportList])\r\n target[exportList].push(ppp + csvVisPrefix);\r\n else\r\n target[exportList] = [ppp + csvVisPrefix];\r\n\r\n addedHere[ppp] = true;\r\n }\r\n }\r\n };\r\n\r\n/**\r\n * Decoratore di esportazione utilizzabile su una lista, \r\n * si utilizzano 2 navigator rispettivamente per la valorizzazione dell'Header e del Valore e \r\n * per ogni elemento dell'array verranno generate 3 proprietà che gestiranno l'esportazione: (prop, prop_csvvis, prop_csvhdr)\r\n * \r\n * ATTENZIONE: Gli oggetti esportati in questa modalità non devono presentare altri tag di tipo @Export{...} all'interno. Fa tutto questo decoratore\r\n * \r\n * I navigator hanno questa convenzione:\r\n * \r\n * . --> divide due proprietà da richiamare consecutivamente: \"a.b\" richiamerà \"obj.a.b\";\r\n * \r\n * | --> divide più proprietà per le concatenazioni con uno spazio fra una e l'altra: \"regdesc|slice.slicename\" diventerà obj.regdesc + \" \" + obj.slice.slicename\r\n * \r\n * @param {number} order Ordine di esportazione. Più piccolo è, prima appare il valore\r\n * @param {string} headernavigator Navigator col compito di selezionare il titolo per la colonna\r\n * @param {string} valuenavigator Navigator col compito di selezionare il valore per la colonna\r\n * @param {string} valueformat Formato di esportazione per i valori selezionati dal **valuenavigator**. Può essere un formato data per i campi data o 'F' per i campi floating point\r\n */\r\nexport const ExportList = (order: number, headernavigator: string, valuenavigator: string, valueformat: string = null) =>\r\n (target: Object, propertyKey: string) => {\r\n Object.defineProperty(target, propertyKey + csvOrdPrefix, { value: order, writable: false });\r\n Object.defineProperty(target, propertyKey + listCsvValPrefix, { value: valuenavigator, writable: false });\r\n Object.defineProperty(target, propertyKey + listCsvHdrPrefix, { value: headernavigator, writable: false });\r\n Object.defineProperty(target, propertyKey + listCsvValFormat, { value: valueformat, writable: false });\r\n\r\n if (target[exportList])\r\n target[exportList].push(propertyKey + listCsvHdrPrefix);\r\n else\r\n target[exportList] = [propertyKey + listCsvHdrPrefix]\r\n };\r\n\r\n/**\r\n * Decoratore di esportazione utilizzabile su un dizionario. Se ad esempio si vogliono generare le colonne\r\n * \r\n * Valore A = 1\r\n * \r\n * Valore B = 2\r\n * \r\n * Valore C = 3\r\n * \r\n * partendo da un oggetto iniziale { Valore { A: 1, B: 2, C: 3 } }\r\n * \r\n * @param {number} order Ordine di esportazione. Più piccolo è, prima appare il valore\r\n * @param {string} headerprefix Prefisso per l'header\r\n * @param {string} valueprefix Prefisso per il valore\r\n */\r\nexport const ExportDictionary = (order: number, headerprefix: string, valueprefix: string) =>\r\n (target: Object, propertyKey: string) => {\r\n Object.defineProperty(target, propertyKey + csvOrdPrefix, { value: order, writable: false });\r\n Object.defineProperty(target, propertyKey + dictionaryCsvValPrefix, { value: valueprefix, writable: false });\r\n Object.defineProperty(target, propertyKey + dictionaryCsvHdrPrefix, { value: headerprefix, writable: false });\r\n\r\n if (target[exportList])\r\n target[exportList].push(propertyKey + dictionaryCsvHdrPrefix);\r\n else\r\n target[exportList] = [propertyKey + dictionaryCsvHdrPrefix]\r\n };\r\n\r\n/**\r\n * Service che si occupa dell'esportazione degli oggetti marcati dai Decoratori **ExportDictionary**, **ExportList**, **ExportAs** o **Export**\r\n */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class ExportService {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n public constructor(private dates: DateService, private utiExts: UtilityService, private lc: LocalizationService) { }\r\n\r\n /**\r\n * Data una lista di oggetti genera gli header per l'esportazione e integra ogni oggetto con le proprietà esportabili dalla libreria **@ctrl/ngx-csv**\r\n * \r\n * @param {any[]} objs Oggetti da esportare\r\n * \r\n * @returns {CsvHeaders[]} Header di esportazione già ordinati correttamente\r\n */\r\n public setupForExport(objs: any[], columns: string[] = []): CsvHeaders[] {\r\n let headers: CsvHeaders[] = [];\r\n let headersCache = {};\r\n\r\n if (!objs || objs.length == 0)\r\n return headers;\r\n\r\n // Devo per forza farlo per tutti gli oggetti dato che devo esporre le proprietà che mi servono da esportare\r\n // Gli header li raccolgo tutti poi faccio uan distinct in modo da esportare tutte le proprietà per bene\r\n let columnSelectionDictionary: { [id: string]: true } = {};\r\n\r\n if (columns?.length > 0)\r\n for (let i = 0; i < columns?.length; i++)\r\n columnSelectionDictionary[columns[i]] = true;\r\n\r\n for (let i = 0; i < objs.length; i++) {\r\n let hds = this.parseAndGetHeaders(objs[i], columnSelectionDictionary);\r\n // Aggiungo gli header facendo in modo di non aggiungerne mai due uguali per non dover fare una distinct dopo\r\n // che costerebbe comunque risorse. Utilizzo un dizionario d'appoggio per lookup istantanei\r\n for (let k = 0; k < hds.length; k++) {\r\n if (!headersCache[hds[k].key]) {\r\n headersCache[hds[k].key] = true;\r\n headers.push(hds[k]);\r\n }\r\n }\r\n }\r\n\r\n if (!columns || columns.length == 0)\r\n return headers.sort((a, b) => a.order - b.order);\r\n else {\r\n // Se mi arriva la lista di colonne non mi dà solo la visibilità, ma anche l'ordinamento\r\n // le esporto di conseguenza\r\n let orderedHeaders = [];\r\n for (let i = 0; i < columns.length; i++) {\r\n let thisId = columns[i];\r\n for (let i = 0; i < headers.length; i++) {\r\n if (headers[i].propKey == thisId) {\r\n orderedHeaders.push(headers[i]);\r\n break;\r\n }\r\n }\r\n }\r\n return orderedHeaders;\r\n }\r\n }\r\n\r\n /**\r\n * Data una lista di oggetti generici genera gli header per l'esportazione e integra ogni oggetto con le proprietà esportabili dalla libreria **@ctrl/ngx-csv**\r\n * \r\n * @param {GenericItem[]} objs Oggetti generici da esportare\r\n * @param {CsvHeaders[]} columns Colonne richieste dall'esportazione\r\n * \r\n * @returns {CsvHeaders[]} Header di esportazione già ordinati correttamente\r\n */\r\n public setupForGenericExport(objs: GenericItem[], columns: CsvHeaders[]): CsvHeaders[] {\r\n let headers: CsvHeaders[] = [];\r\n if (!objs || objs.length == 0)\r\n return headers;\r\n\r\n // Devo per forza farlo per tutti gli oggetti dato che devo esporre le proprietà che mi servono da esportare\r\n objs.forEach((obj, index) => {\r\n if (index == 0)\r\n headers = this.parseAndGetGenericHeaders(obj, columns);\r\n else\r\n this.parseAndGetGenericHeaders(obj, columns);\r\n });\r\n\r\n return headers;\r\n }\r\n\r\n /**\r\n * Dato un oggetto generico genera gli header per l'esportazione e lo integra con le proprietà esportabili dalla libreria **@ctrl/ngx-csv**\r\n * \r\n * Metodo interno richiamato da **setupForGenericExport**\r\n * \r\n * @param {GenericItem} obj Oggetto generico da esportare\r\n * @param {CsvColumn[]} columns Colonne richieste dall'esportazione\r\n * \r\n * @returns {CsvHeaders[]} Header di esportazione già ordinati correttamente\r\n */\r\n private parseAndGetGenericHeaders(obj: GenericItem, columns: CsvHeaders[]): CsvHeaders[] {\r\n if (!obj.properties)\r\n return null;\r\n\r\n var headers: CsvHeaders[] = [];\r\n\r\n //Miracle incoming\r\n columns.forEach(t => {\r\n var propValue = obj.properties[t.key];\r\n Object.defineProperty(obj, t.key + \"_exp\", { value: propValue, writable: false, enumerable: true });\r\n headers.push({ label: t.label, key: t.key + \"_exp\", order: t.order, type: t.type, propKey: null });\r\n });\r\n\r\n //Tirati fuori tutti gli header faccio sort sull'ordinamento\r\n return headers.sort((a, b) => { return a.order - b.order });\r\n }\r\n\r\n /**\r\n * Dato un oggetto genera gli header per l'esportazione e lo integra con le proprietà esportabili dalla libreria **@ctrl/ngx-csv**\r\n * \r\n * Metodo interno richiamato da **setupForExport**\r\n * \r\n * @param {any} obj Oggetto generico da esportare\r\n * \r\n * @returns {CsvHeaders[]} Header di esportazione già ordinati correttamente\r\n */\r\n private parseAndGetHeaders(obj: any, columnsSelection?: { [id: string]: true }): CsvHeaders[] {\r\n var headers: CsvHeaders[] = [];\r\n\r\n // Miracle incoming\r\n let exportProps = obj[exportList] || [];\r\n let loc = obj[locProperty] ? this.lc.generateFromType(obj[locProperty]) : null;\r\n\r\n if (exportProps.length == 0)\r\n console.warn(\"[@esfaenza/extensions] Nessuna colonna configurata da esportare!\");\r\n\r\n for (let i = 0; i < exportProps.length; i++) {\r\n let prop = exportProps[i];\r\n let propBase = \"\";\r\n let toCall: Function;\r\n if (prop.endsWith(listCsvHdrPrefix)) {\r\n propBase = prop.replace(listCsvHdrPrefix, '');\r\n toCall = this.parseList.bind(this);\r\n }\r\n else if (prop.endsWith(dictionaryCsvHdrPrefix)) {\r\n propBase = prop.replace(dictionaryCsvHdrPrefix, '');\r\n toCall = this.parseDictionary.bind(this);\r\n }\r\n else if (prop.endsWith(csvVisPrefix)) {\r\n propBase = prop.replace(csvVisPrefix, '');\r\n if (typeof obj[propBase + csvValueNavigator] !== \"undefined\")\r\n toCall = this.parseObject.bind(this);\r\n else\r\n toCall = this.parseProperty.bind(this);\r\n }\r\n\r\n if (toCall)\r\n toCall(obj, propBase, headers, columnsSelection, loc);\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n /**\r\n * Setup per l'esportazione di una singola proprietà. \r\n * Viene generato l'header e la proprietà relativa al valore formattato o no\r\n * \r\n * @param {any} obj Oggetto di cui esportare la proprietà **prop**\r\n * @param {string} prop Proprietà da esportare\r\n * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione \r\n * @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può\r\n */\r\n private parseProperty(obj: any, prop: string, headers: CsvHeaders[], columnsSelection?: { [id: string]: true }, loc?: LocalizationService) {\r\n let toEmit: boolean = obj[prop + csvVisPrefix];\r\n let format: string = obj[prop + csvFormatPrefix];\r\n let propKey = obj[prop + csvPropKey];\r\n\r\n if (propKey && !columnsSelection[propKey] && Object.keys(columnsSelection).length > 0) {\r\n console.log(\"[@esfaenza/extensions] Colonna da non esportare: \" + propKey);\r\n return;\r\n }\r\n\r\n let text = obj[prop + csvHdrPrefix];\r\n let label = loc && text ? loc.loc(text) : text || \"\";\r\n let order = obj[prop + csvOrdPrefix];\r\n\r\n if (!toEmit)\r\n return;\r\n\r\n // Se non ho un formato esporto direttamente\r\n if (!format) {\r\n // Se è un formato data mi assicuro di non stampare mai una data 00:00:00 altrimenti in esportazione viene uno schifo\r\n let val = obj[prop] ? this.dates.trimSeconds(obj[prop].toString()) : \"\";\r\n let key = prop + \"_nofmt\";\r\n Object.defineProperty(obj, key, { value: val, writable: false, enumerable: true });\r\n headers.push({ label, key, order, type: \"string\", propKey });\r\n } else {\r\n let key = prop + \"_fmt\";\r\n\r\n // Caso formato numerico\r\n if (format == \"F\") {\r\n // Check considerando la possibilità di zeri\r\n let val = obj[prop] != null ? obj[prop].toString() : \"\";\r\n // Elimino tutte le virgole (indicatori di migliaia per la culture default en-US)\r\n val = val.replace(/,/, \"\");\r\n // Il singolo punto che c'è, se presente (separatore decimali) lo trasformo in virgola\r\n let valConverted = val.replace(\".\", \",\");\r\n\r\n Object.defineProperty(obj, key, { value: valConverted, writable: false, enumerable: true });\r\n headers.push({ label, key, order, type: \"number\", propKey });\r\n } else {\r\n // Se ho un formato data trasformo in dayjs, formatto ed esporto\r\n // Per la trasformazione in dayjs provo prima a passargli la stringa di netto, sperando la riconosca\r\n // Se non funziona provo a definirgli la formattazione standard del metering per quel linguaggio\r\n let val = this.dates.getFormatted(obj[prop], format.length <= 10, format.length > 16);\r\n Object.defineProperty(obj, key, { value: val ?? \"\", writable: false, enumerable: true });\r\n headers.push({ label, key, order, type: \"date\", propKey });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Setup per l'esportazione di una singola proprietà da un oggetto. \r\n * Viene generato l'header e la proprietà relativa al valore formattato o no. \r\n * \r\n * Per ottenere il valore e l'header della proprietà vengono utilizzati i navigatori auto-generati nel decoratore **ExportAs**\r\n * \r\n * @param {any} obj Oggetto di cui esportare la proprietà **prop**\r\n * @param {string} prop Proprietà da esportare\r\n * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione\r\n * @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può\r\n */\r\n private parseObject(obj: any, prop: string, headers: CsvHeaders[], columnsSelection?: { [id: string]: true }, loc?: LocalizationService) {\r\n //se questa proprietà ha un navigator significa che deriva da un oggetto interno, recupero il valore in questa fase dato che prima non ce l'ho\r\n let valuenavigator = obj[prop + csvValueNavigator];\r\n\r\n //Es. di valuenavigator obj.subobj.subsubobj.property\r\n let jmps = valuenavigator.split(\".\");\r\n\r\n // Localizzazione presa dalla classe base se c'è, altrimenti dalla classe interna (cioè dal primo saltino)\r\n if (!loc) {\r\n let type = obj[prop + csvValueType];\r\n let proto = new type();\r\n loc = proto[locProperty] ? this.lc.generateFromType(proto[locProperty]) : null;\r\n }\r\n\r\n //Mi clono l'oggetto originale per non uccidergli i riferimenti\r\n let clone = JSON.parse(JSON.stringify(obj));\r\n //Salto ricorsivamente su me stesso per arrivare alla proprietà\r\n //Salto 1 > diventa obj\r\n //Salto 2 > diventa obj.subobj\r\n //ecc...\r\n jmps.forEach(pp => { clone = clone?.[pp]; });\r\n\r\n //Valore finale :D\r\n let value = clone;\r\n\r\n let text = obj[prop + csvHdrPrefix];\r\n let label = loc && text ? loc.loc(text) : text || \"\";\r\n let order = obj[prop + csvOrdPrefix];\r\n\r\n //Se per questa proprietà ho un formato lo applico\r\n let format: string = obj[prop + csvFormatPrefix];\r\n let type: 'string' | 'number' | 'date' = \"string\";\r\n if (format == \"F\") {\r\n let val = value.toString();\r\n val = val.replace(/,/, \"\");\r\n value = val.replace(\".\", \",\");\r\n type = \"number\";\r\n }\r\n else if (format) {\r\n value = this.dates.getFormatted(value, format.length <= 10, format.length > 16);\r\n type = \"date\";\r\n }\r\n\r\n Object.defineProperty(obj, prop, { value: value ?? \"\", writable: false, enumerable: true });\r\n headers.push({ label, key: prop, order, type, propKey: null });\r\n }\r\n\r\n /**\r\n * Setup per l'esportazione di una lista di valori pivottati dinamicamente:\r\n * \r\n * => Recupero il valore utilizzando i navigatori\r\n * \r\n * => Recupero l'header utilizzando i navigatori\r\n * \r\n * => Con il valore ci creo la property\r\n * \r\n * => Con l'header e il riferimento alla property appena creata creo un record negli header da esportare\r\n * \r\n * @param {any} obj Oggetto di cui esportare la proprietà **prop**\r\n * @param {string} prop Proprietà da esportare\r\n * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione \r\n * @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può\r\n */\r\n private parseList(obj: any, prop: string, headers: CsvHeaders[], columnsSelection?: { [id: string]: true }, loc?: LocalizationService) {\r\n let headernavigator = obj[prop + listCsvHdrPrefix];\r\n let valuenavigator = obj[prop + listCsvValPrefix];\r\n let valueformat = obj[prop + listCsvValFormat];\r\n let order = obj[prop + csvOrdPrefix];\r\n\r\n var jumps: string[], tmpRes: any;\r\n var objs: any[] = obj[prop];\r\n\r\n for (let idx = 0; idx < objs.length; idx++) {\r\n let listitem = objs[idx];\r\n\r\n var headersplit = headernavigator.split(\" \");\r\n var label = \"\";\r\n\r\n // Per l'header si considera a se stante ogni pezzo separato da spazio per fare le concatenazioni\r\n headersplit.forEach(pr => {\r\n jumps = pr.split(\".\");\r\n tmpRes = JSON.parse(JSON.stringify(listitem));\r\n jumps.forEach(pp => { tmpRes = tmpRes[pp]; });\r\n\r\n let localized = !!loc ? loc.loc(tmpRes) : tmpRes\r\n if (!label) label = localized;\r\n else label += \" \" + localized;\r\n });\r\n\r\n jumps = valuenavigator.split(\".\");\r\n tmpRes = JSON.parse(JSON.stringify(listitem));\r\n jumps.forEach(pp => { tmpRes = tmpRes[pp]; });\r\n let value = tmpRes;\r\n\r\n let type: 'string' | 'number' | 'date' = \"string\";\r\n if (valueformat == \"F\") {\r\n let val = value != null ? value.toString() : \"\";\r\n val = val.replace(/,/, \"\");\r\n value = val.replace(\".\", \",\");\r\n type = \"number\";\r\n }\r\n else if (valueformat) {\r\n value = this.dates.getFormatted(obj[prop], valueformat.length <= 10, valueformat.length > 16);\r\n type = \"date\";\r\n }\r\n\r\n Object.defineProperty(obj, prop + idx, { value: value ?? \"\", writable: false });\r\n headers.push({ label, key: prop + idx, order: order + idx, type, propKey: null });\r\n }\r\n }\r\n\r\n /**\r\n * Setup per l'esportazione di una lista di valori pivottati dinamicamente:\r\n * \r\n * => Recupero il valore utilizzando i navigatori\r\n * \r\n * => Recupero l'header utilizzando i navigatori\r\n * \r\n * => Con il valore ci creo la property\r\n * \r\n * => Con l'header e il riferimento alla property appena creata creo un record negli header da esportare\r\n * \r\n * @param {any} obj Oggetto di cui esportare la proprietà **prop**\r\n * @param {string} prop Proprietà da esportare\r\n * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione\r\n */\r\n private parseDictionary(obj: any, prop: string, headers: CsvHeaders[], columnsSelection?: { [id: string]: true }) {\r\n let headerprefix = obj[prop + dictionaryCsvHdrPrefix];\r\n let valueprefix = obj[prop + dictionaryCsvValPrefix];\r\n let order = obj[prop + csvOrdPrefix];\r\n\r\n var object: { [id: string]: string } = obj[prop];\r\n let idx = 0;\r\n\r\n for (const [key, val] of Object.entries(object)) {\r\n\r\n // Ignoro tutti i cmapi che non fanno parte della selezione delle colonne\r\n if (key && !columnsSelection[key] && Object.keys(columnsSelection).length > 0) {\r\n console.log(\"[@esfaenza/extensions] Colonna da non esportare: \" + key);\r\n return;\r\n }\r\n\r\n let propname = prop + \"_\" + key;\r\n let value = valueprefix ? valueprefix + \" \" + val : val;\r\n let label = headerprefix ? headerprefix + \" \" + key : key;\r\n\r\n Object.defineProperty(obj, propname, { value: value ?? \"\", writable: false });\r\n headers.push({ label: label, key: propname, order: order + idx++, type: 'string', propKey: null });\r\n }\r\n }\r\n\r\n /** \r\n * Effettua l'esportazione in file CSV \r\n */\r\n private exportCSV(fn: string, headers: CsvHeaders[], data: any[]) {\r\n var buffer = this.exportCSVBuffer(fn, headers, data);\r\n var blob = new Blob([new TextDecoder().decode(buffer as any)], { type: 'text/csv' });\r\n var objectUrl = URL.createObjectURL(blob);\r\n this.utiExts.fileDownload(objectUrl, fn.endsWith('.xlsx') ? fn.replace('.xlsx', '.csv') : fn.endsWith('.csv') ? fn : fn + \".csv\");\r\n }\r\n\r\n private exportCSVBuffer(fn: string, headers: CsvHeaders[], data: any[]): Uint8Array {\r\n let csvData = '', row = '', sep = ';';\r\n\r\n for (let i = 0; i < headers.length; i++) {\r\n let h = headers[i];\r\n row += `${row != '' ? sep : ''}\"${h.label}\"`;\r\n }\r\n csvData += row + '\\r\\n';\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n row = '';\r\n let item = data[i];\r\n for (let j = 0; j < headers.length; j++) {\r\n let val = item[headers[j].key];\r\n row += `${row != '' ? sep : ''}\"${val}\"`;\r\n }\r\n csvData += row + '\\r\\n';\r\n }\r\n\r\n var BOM = [0xEF, 0xBB, 0xBF];\r\n var buffer = new Uint8Array([...BOM, ...new TextEncoder().encode(csvData)]);\r\n return buffer;\r\n }\r\n\r\n /** Effettua l'esportazione del file Excel basandosi sul modulo **ExcelJS**, sugli header **headers** e sui dati **data** */\r\n private async exportExcel(fn: string, headers: CsvHeaders[], data: any[]) {\r\n\r\n let buffer: Uint8Array = this.exportExcelBuffer(fn, headers, data);\r\n let blob = new Blob([buffer as any], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;\" });\r\n let objectUrl = URL.createObjectURL(blob);\r\n this.utiExts.fileDownload(objectUrl, fn.endsWith('.csv') ? fn.replace('.csv', '.xlsx') : fn.endsWith('.xlsx') ? fn : fn + \".xlsx\");\r\n }\r\n\r\n private exportExcelBuffer(fn: string, headers: CsvHeaders[], data: any[]): Uint8Array {\r\n\r\n var toExport = [];\r\n headers = headers.sort((a: CsvHeaders, b: CsvHeaders) => a.order - b.order);\r\n\r\n for (let d = 0; d < data.length; d++) {\r\n let toExportItem = {};\r\n\r\n for (let h = 0; h < headers.length; h++) {\r\n let head = headers[h];\r\n let val = data[d][head.key];\r\n\r\n toExportItem[head.label] =\r\n head.type == \"date\" ? this.dates.getDateConvertion(val).toDate() :\r\n head.type == \"number\" ? (isNaN(parseFloat(val.replace(',', '.'))) ? \"\" : parseFloat(val.replace(',', '.'))) :\r\n val;\r\n }\r\n toExport.push(toExportItem);\r\n }\r\n\r\n const ws = XLSX.utils.json_to_sheet(toExport);\r\n\r\n // Aggiustamento date\r\n Object.keys(ws).forEach(cell => { if (ws[cell].t === 'd') ws[cell].z = 'dd/mm/yyyy h:m:s'; });\r\n\r\n const wb = XLSX.utils.book_new();\r\n XLSX.utils.book_append_sheet(wb, ws, 'Data');\r\n let buffer: Uint8Array = XLSX.write(wb, { bookType: 'xlsx', type: 'array', cellDates: true });\r\n return buffer;\r\n }\r\n\r\n /**\r\n * Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**\r\n *\r\n * @param {any[]} items Oggetti da esportare\r\n */\r\n public export(items: any[], format: 'CSV' | 'XLSX', fileName: string, type: Type<any>, columnsFilter?: string[], genericHeaders?: CsvHeaders[]): CsvHeaders[] {\r\n // Deepclone con assegnatura del tipo\r\n var createdItems = items.map(t => this.utiExts.deepClone(t, type));\r\n let headers = genericHeaders ? this.setupForGenericExport(createdItems, genericHeaders) : this.setupForExport(createdItems, columnsFilter);\r\n (format == \"CSV\" ? this.exportCSV : this.exportExcel).bind(this)(fileName, headers, createdItems);\r\n return headers;\r\n }\r\n\r\n /**\r\n * Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**\r\n *\r\n * @param {any[]} items Oggetti da esportare\r\n */\r\n public exportBuffer(items: any[], format: 'CSV' | 'XLSX', fileName: string, type: Type<any>, columnsFilter?: string[], genericHeaders?: CsvHeaders[]): Uint8Array {\r\n // Deepclone con assegnatura del tipo\r\n var createdItems = items.map(t => this.utiExts.deepClone(t, type));\r\n let headers = genericHeaders ? this.setupForGenericExport(createdItems, genericHeaders) : this.setupForExport(createdItems, columnsFilter);\r\n return (format == \"CSV\" ? this.exportCSVBuffer : this.exportExcelBuffer).bind(this)(fileName, headers, createdItems);\r\n }\r\n}","// Angular\r\nimport { Inject, Injectable, Optional, PLATFORM_ID } from \"@angular/core\";\r\n\r\n// Es\r\nimport { BaseLocalization } from \"@esfaenza/localizations\";\r\n\r\n// Modelli\r\nimport { MessageService } from './extensions.messages.service';\r\n\r\n// Librerie\r\nimport Swal from \"sweetalert2\";\r\nimport { first } from \"rxjs/operators\";\r\nimport { isPlatformBrowser } from \"@angular/common\";\r\n\r\n/**\r\n * Service che fornisce un accesso base in lettura/scrittura sulla clipboard\r\n */\r\n@Injectable({providedIn: \"root\"})\r\nexport class ClipboardService {\r\n\r\n /**\r\n * Oggetto statico di localizzazione per i messaggi di questa Service\r\n */\r\n private loc = {\r\n \"Unfortunately Firefox doesn't yet support direct Clipboard access if not via extensions, Please use Chrome to do this operation\": {\r\n 'en-US': \"Unfortunately Firefox doesn't yet support direct Clipboard access if not via extensions, Please use Chrome to do this operation\",\r\n 'it-IT': \"Mi dispiace ma Firefox non supporta l'accesso diretto alla Clipboard, se non attraverso le estensioni. Si prega di usare Chrome\"\r\n },\r\n \"Generic error during 'copy' command execution\": {\r\n 'en-US': \"Generic error during 'copy' command execution\",\r\n 'it-IT': \"Errore generico durante l'esecuzione del comando 'copy'\"\r\n },\r\n \"Error during Clipboard content read operation\": {\r\n 'en-US': \"Error during Clipboard content read operation\",\r\n 'it-IT': \"Errore nella lettura del contenuto della Clipboard\"\r\n },\r\n \"Error during Clipboard content copy operation\":{\r\n 'en-US': \"Error during Clipboard content copy operation\",\r\n 'it-IT': \"Errore nella scrittura del contenuto nella Clipboard\"\r\n },\r\n \"Please insert your clipboard content\": {\r\n 'en-US': \"Please insert your clipboard content\",\r\n 'it-IT': \"Si prega di incollare il contenuto della Clipboard\"\r\n },\r\n \"User input required\": {\r\n 'en-US': \"User input required\",\r\n 'it-IT': \"Richiesto Input utente\"\r\n },\r\n \"Your current browser does not support reading from the clipboard directly. Please paste your clipboard's content in this Input field and confirm the operation\": {\r\n 'en-US': \"Your current browser does not support reading from the clipboard directly. Please paste your clipboard's content in this Input field and confirm the operation\",\r\n 'it-IT': \"Il browser corrente non supporta la lettura diretta dei dati della Clipboard, si prega di effettuare un'incolla (CTRL + V) nella casella di testo e confermare l'operazione\"\r\n },\r\n \"Confirm\": {\r\n 'en-US': \"Confirm\",\r\n 'it-IT': \"Conferma\"\r\n },\r\n \"Cancel\": {\r\n 'en-US': \"Cancel\",\r\n 'it-IT': \"Annulla\"\r\n },\r\n };\r\n\r\n private isBrowser: boolean = true;\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n public constructor(private msgService: MessageService, @Optional() private locProvider: BaseLocalization, @Inject(PLATFORM_ID) platformId: Object) {\r\n this.isBrowser = isPlatformBrowser(platformId);\r\n }\r\n\r\n /**\r\n * Prende il valore della clipboard. \r\n * Si può specificare se ci si aspetta una lista o una matrice di valori in modo da ricevere già un risultato utilizzabile\r\n * \r\n * @param {'array' | 'matrix'} style Stile dell'output desiderato, se array o matrice\r\n * @param {Function} valueFoundCallback Callback che questa funzione chiamerà una volta ottenuto i valori richiesti dalla clipboard\r\n */\r\n public async getClipboard(style: 'array' | 'matrix', valueFoundCallback : (values: string[] | string[][]) => void) {\r\n if(!this.isBrowser) {\r\n console.log(\"@esfaenza/extensions ClipboardService requires browser environment to function. Every call will return the default for the expected value\")\r\n valueFoundCallback([]);\r\n return;\r\n }\r\n \r\n let LOCALE = this.locProvider ? await this.locProvider.Locale.pipe(first()).toPromise() : 'it-IT';\r\n\r\n if (navigator.userAgent.indexOf(\"Firefox\") != -1) {\r\n \r\n Swal.fire({\r\n title: this.loc[\"User input required\"][LOCALE],\r\n text: this.loc[\"Your current browser does not support reading from the clipboard directly. Please paste your clipboard's content in this Input field and confirm the operation\"][LOCALE],\r\n input: 'textarea',\r\n icon: \"warning\",\r\n confirmButtonText: this.loc[\"Confirm\"][LOCALE],\r\n cancelButtonText: this.loc[\"Cancel\"][LOCALE],\r\n showCancelButton: true,\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n cancelButton: \"btn btn-secondary app-margin-right-15\",\r\n container: \"app-wrap\",\r\n },\r\n reverseButtons: true,\r\n allowOutsideClick: false,\r\n inputValidator: (value) => {\r\n if (!value)\r\n return this.loc[\"Please insert your clipboard content\"][LOCALE]\r\n }\r\n }).then(t => {\r\n if (t.isConfirmed) {\r\n console.log(\"[@esfaenza/extensions] Retrieving input data from user input\");\r\n this.doClipboardDataGet(t.value, style, valueFoundCallback);\r\n }\r\n });\r\n return;\r\n }\r\n\r\n if ((<any>window).clipboardData) {\r\n console.log(\"[@esfaenza/extensions] Found clipboardData\");\r\n let data = (<any>window).clipboardData.getData(\"Text\");\r\n this.doClipboardDataGet(data, style, valueFoundCallback);\r\n }\r\n\r\n else if ((<any>window).navigator.clipboard) {\r\n console.log(\"[@esfaenza/extensions] Found navigator clipboard\");\r\n (<any>window).navigator.permissions.query({ name: 'clipboard-read' }).then(result => {\r\n if (!(result.state === 'granted' || result.state === 'prompt'))\r\n {\r\n console.error(\"[@esfaenza/extensions] Clipboard permission not granted\");\r\n if (valueFoundCallback) valueFoundCallback([]);\r\n return;\r\n }\r\n\r\n console.log(\"[@esfaenza/extensions] Clipboard permission granted, retrieving values\");\r\n (<any>window).navigator.clipboard.readText()\r\n .then((t: string) => this.doClipboardDataGet(t, style, valueFoundCallback))\r\n .catch((err: any) => this.msgService.simpleError(this.loc[\"Error during Clipboard content read operation\"][LOCALE] + \": \" + err));\r\n });\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private doClipboardDataGet(clipboardText: string, style: \"matrix\" | \"array\", valueFoundCallback: Function) {\r\n console.log(\"[@esfaenza/extensions] Retrieved clipboard values: \" + clipboardText);\r\n let value = style == \"array\" ? this.getClipboardLines(clipboardText) :\r\n style == \"matrix\" ? this.getClipboardMatrix(clipboardText) : [];\r\n console.log(`[@esfaenza/extensions] Adapted for ${style}: ${JSON.stringify(value)}`);\r\n if (valueFoundCallback) valueFoundCallback(value);\r\n }\r\n\r\n /**\r\n * Ottiene il contenuto della clipboard diviso per righe (separate da newline)\r\n * \r\n * @param {string} data contenuto letto dalla clipboard\r\n * \r\n * @returns {string[]} Array contenente il testo preso dalla clipboard diviso per riga\r\n */\r\n private getClipboardLines(data: string): string[] {\r\n let trimmedData = data.trim();\r\n\r\n if (!trimmedData.includes(\"\\r\\n\") && trimmedData.includes(\"\\n\"))\r\n return trimmedData.split(\"\\n\");\r\n\r\n return trimmedData.split(\"\\r\\n\");\r\n }\r\n\r\n /**\r\n * Ottiene il contenuto della clipboard diviso per righe (separate da newline) e colonne (separate da tab)\r\n * \r\n * @param {string} data contenuto letto dalla clipboard\r\n * \r\n * @returns {string[][]} Matrice contenente il testo preso dalla clipboard diviso per riga e colonna\r\n */\r\n private getClipboardMatrix(data: string): string[][] {\r\n var ret: string[][] = [];\r\n var rows = !data.includes(\"\\r\\n\") && data.includes(\"\\n\") ? data.split(\"\\n\") : data.split(\"\\r\\n\");\r\n\r\n // A quanto pare ogni valore è separato da un \\t... spero che sia uno standard di quando si copia da excel altrimenti ciao\r\n for (let i = 0; i < rows.length; i++)\r\n ret.push(rows[i].split('\\t').map(t => t.trim()));\r\n return ret;\r\n }\r\n\r\n /**\r\n * Metodo che copia un testo all'interno della clipboard\r\n * \r\n * @param {string} text Testo da inserire nella clipboard\r\n */\r\n public async copyTextToClipboard(text: string) {\r\n if(!this.isBrowser) {\r\n console.log(\"@esfaenza/extensions ClipboardService requires browser environment to function. Every call will return the default for the expected value\")\r\n return;\r\n }\r\n\r\n let LOCALE = this.locProvider ? await this.locProvider.Locale.pipe(first()).toPromise() : 'it-IT';\r\n\r\n var textArea = document.createElement(\"textarea\");\r\n\r\n //\r\n // *** This styling is an extra step which is likely not required. ***\r\n //\r\n // Why is it here? To ensure:\r\n // 1. the element is able to have focus and selection.\r\n // 2. if element was to flash render it has minimal visual impact.\r\n // 3. less flakyness with selection and copying which **might** occur if\r\n // the textarea element is not visible.\r\n //\r\n // The likelihood is the element won't even render, not even a flash,\r\n // so some of these are just precautions. However in IE the element\r\n // is visible whilst the popup box asking the user for permission for\r\n // the web page to copy to the clipboard.\r\n //\r\n\r\n // Place in top-left corner of screen regardless of scroll position.\r\n textArea.style.position = \"fixed\";\r\n textArea.style.top = \"0\";\r\n textArea.style.left = \"0\";\r\n\r\n // Ensure it has a small width and height. Setting to 1px / 1em\r\n // doesn't work as this gives a negative w/h on some browsers.\r\n textArea.style.width = \"2em\";\r\n textArea.style.height = \"2em\";\r\n\r\n // We don't need padding, reducing the size if it does flash render.\r\n textArea.style.padding = \"0\";\r\n\r\n // Clean up any borders.\r\n textArea.style.border = \"none\";\r\n textArea.style.outline = \"none\";\r\n textArea.style.boxShadow = \"none\";\r\n\r\n // Avoid flash of white box if rendered for any reason.\r\n textArea.style.background = \"transparent\";\r\n\r\n textArea.value = text;\r\n\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n try {\r\n var successful = document.execCommand(\"copy\");\r\n if(!successful)\r\n this.msgService.simpleError(this.loc[\"Generic error during 'copy' command execution\"][LOCALE]);\r\n } catch (err) {\r\n this.msgService.simpleError(this.loc[\"Error during Clipboard content copy operation\"][LOCALE] + \": \"+ err);\r\n }\r\n\r\n document.body.removeChild(textArea);\r\n }\r\n}","/**\r\n * Classe che rappresenta una risposta ricevuta da un Backend\r\n */\r\nexport class CallResult<T = never>{\r\n\r\n /** Tempo impiegato perché la chiamata terminasse */\r\n elapsedtime: string;\r\n /** **true** se tutto è andato bene, **false** altrimenti */\r\n success: boolean;\r\n /** Indica se ci sono errori */\r\n haserror: boolean;\r\n /** Codice dell'eventuale errore restituito */\r\n errorcode: string;\r\n /** Log dell'eventuale errore restituito */\r\n error: string;\r\n /** ID dell'eventuale entità relativa a questa risposta */\r\n entityid: any;\r\n /** Indica se ci sono warning */\r\n haswarning: boolean;\r\n /** Log dell'eventuale warning restituito */\r\n warning: string;\r\n /** Entità collegata a questo CallResult */\r\n entity: T;\r\n}","/**\r\n * Header per il file CSV che sta venendo generato\r\n */\r\nexport class CsvHeaders {\r\n\r\n /**\r\n * Intestazione della colonna\r\n */\r\n label: string;\r\n\r\n /**\r\n * Nome della proprietà visualizzata in questa colonna\r\n */\r\n key: string;\r\n\r\n /**\r\n * Ordine della colonna\r\n */\r\n order: number;\r\n\r\n /**\r\n * Nome della chiave della proprietà lato es-table\r\n */\r\n propKey: string;\r\n \r\n /**\r\n * Tipo della colonna (per eventuali formattazioni se si scarica in Excel)\r\n */\r\n type: 'string' | 'number' | 'date';\r\n}\r\n","/**\r\n * Rappresentazione di un oggetto generico\r\n */\r\nexport class GenericItem {\r\n\r\n /**\r\n * Dizionario Chiave - Valore delle proprietà di questo oggetto generico\r\n */\r\n properties: Record<string, string>;\r\n}\r\n","/** Enumeratore dei tipi di messaggio che i moduli esterni possono contattare sull'applicazione principale */\r\n\r\nexport enum InboundMessageTypes {\r\n /** Evento di navigazione */\r\n Navigation\r\n}\r\n","/** Classe che rappresenta un generico messaggio scambiato fra applicazione e moduli */\r\n\r\nexport class InterComMessage {\r\n /**\r\n * Costruttore\r\n *\r\n * @param type Tipo di messaggio\r\n * @param message Contenuto del messaggio\r\n */\r\n constructor(public type: any, public message: any) { }\r\n}\r\n","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n// Librerie\r\nimport { Subject } from \"rxjs\";\r\n\r\n// Modelli\r\nimport { InterComMessage } from \"../models/InterComMessage\";\r\n\r\n/** Service che si occupa di gestire la comunicazione fra i moduli interni ed esterni dell'applicativo */\r\n@Injectable({providedIn: \"root\"})\r\nexport class InterComService {\r\n\r\n /** Messaggi in uscita, uno per ogni recipient registratosi dall'entrypoint **register** */\r\n public outbounds: { [id: string]: Subject<InterComMessage> } = {};\r\n /** Messaggi in entrata, unico per applicazione principale */\r\n public inbounds: Subject<InterComMessage> = new Subject<InterComMessage>();\r\n\r\n /**\r\n * Metodo che permette di inviare un messaggio dall'applicazione ad un modulo esterno o viceversa\r\n * \r\n * @param {any} messageType Tipologia di messaggio. Sarà di tipo **InboundMessageTypes** per tutti i messaggi inbound, dinamico per tutti i mesaggi outbound (il tipo dipenderà dagli enum dei messaggi dei moduli esterni)\r\n * @param {any} message Messaggio da inviare che può essere un dto in casi complessi ma dovrà essere gestito a dovere lato implementativo\r\n * @param {string} recipient Destinatario del messaggio. Per i messaggi inbound dev'essere lasciato vuoto, per i messaggi outbound sarà valorizzato alla chiave del modulo a cui si vuole inviare il messaggio\r\n */\r\n public send(messageType: any, message: any, recipient?: string): void {\r\n let msg = new InterComMessage(messageType, message);\r\n\r\n // Se non c'è un recipient significa che è un modulo esterno che invia messaggi al modulo main (quindi messaggio in entrata - inbound)\r\n // Altrimenti significa che è il modulo main ad inviare messaggi ai moduli esterni (messaggio in uscita - outbound)\r\n if (!recipient) {\r\n this.inbounds.next(msg);\r\n }\r\n else {\r\n if (!this.outbounds[recipient])\r\n console.warn(\"@esfaenza/extensions - InterComService: Impossibile inviare il messaggio al recipient \" + recipient + \" assicurarsi che il modulo sia caricato e che effettui la chiamata al metodo 'regisster'\");\r\n else\r\n this.outbounds[recipient].next(msg)\r\n }\r\n }\r\n\r\n /**\r\n * Permette di registrare un modulo esterno alla lista dei moduli in listening sulla coda di messaggi\r\n * \r\n * @param {string} key Chiave del modulo da registrare. Tutti i messaggi inbound saranno inviati dall'applicazione principale su questa chiave\r\n */\r\n public register(key: string): void {\r\n if (this.outbounds[key])\r\n throw \"@esfaenza/extensions - InterComService: Impossibile registrare più volte lo stesso modulo\";\r\n this.outbounds[key] = new Subject<InterComMessage>();\r\n }\r\n}","/*\r\n * Public API Surface of extensions\r\n */\r\nexport * from './lib/modules/extensions.module';\r\nexport * from './lib/services/extensions.base';\r\nexport * from './lib/services/extensions.dates.service';\r\nexport * from './lib/services/extensions.exports.service';\r\nexport * from './lib/services/extensions.clipboard.service';\r\nexport * from './lib/services/extensions.hashing.service';\r\nexport * from './lib/services/extensions.messages.service';\r\nexport * from './lib/services/extensions.utilities.service';\r\nexport * from './lib/services/extensions.embedding.service';\r\nexport * from './lib/tokens';\r\nexport * from './lib/models/CallResult';\r\nexport * from './lib/models/CsvHeaders';\r\nexport * from './lib/models/GenericItem';\r\n\r\nexport * from './lib/pipes/loc_date.pipe';\r\n\r\n/** Intercom */\r\nexport * from './lib/models/InboundMessageTypes';\r\nexport * from './lib/models/InterComMessage';\r\nexport * from './lib/services/extensions.intercom.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DateService","i2.HashingService","filter","i1.AppEmbeddingExtensions","i2.UtilityService","i3","Swal"],"mappings":";;;;;;;;;;;;;AAEA;;AAEG;MACU,gBAAgB,GAA2B,IAAI,cAAc,CAAS,kBAAkB;AAErG;;AAEG;MACU,aAAa,GAA4B,IAAI,cAAc,CAAU,eAAe;AAEjG;MACa,cAAc,GAA4B,IAAI,cAAc,CAAU,gBAAgB;;ACbnG;AAoBC;;AAEE;MAEU,WAAW,CAAA;AAoCmB,IAAA,WAAA;AAA0E,IAAA,QAAA;AAlC1G,IAAA,WAAW,GAAwB,IAAI,aAAa,EAAQ;AAEnE;;AAEG;AACK,IAAA,GAAG,GAAG;QACV,mBAAmB,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE;QACrE,kBAAkB,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,EAAE;QACtF,wBAAwB,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,EAAE;QACtF,2BAA2B,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE;QAC7E,qCAAqC,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE;QAC7F,uCAAuC,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,EAAE;QACrG,0BAA0B,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,EAAE;QAC9F,gCAAgC,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB;KAC/F;AAED;;AAEG;AACK,IAAA,GAAG,GAAG;AACV,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,eAAe,EAAE,EAAE;AACnB,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,cAAc,EAAE,EAAE;AAClB,QAAA,cAAc,EAAE,EAAE;AAClB,QAAA,mBAAmB,EAAE;KACxB;AAED;;;;AAIG;IACH,WAAA,CAAuC,WAA6B,EAA6C,QAAiB,EAAA;QAA3F,IAAA,CAAA,WAAW,GAAX,WAAW;QAA+D,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAErH,IAAI,CAAC,IAAI,EAAE;IACf;AAIA,IAAA,MAAM,IAAI,GAAA;QACN,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,GAAI,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,OAAO;AAElG,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC;AAC1D,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC;AACxD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC;AAClE,QAAA,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC;AACvE,QAAA,IAAI,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,MAAM,CAAC;AACjF,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,MAAM,CAAC;AAClE,QAAA,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,MAAM,CAAC;AACjF,QAAA,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,MAAM,CAAC;AAEnF,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IAC3B;AACA;;;;;;;;AAQG;AACI,IAAA,wBAAwB,CAAC,IAAS,EAAE,QAAmC,EAAE,eAAwB,IAAI,EAAA;QACxG,IAAI,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QACvC,IAAI,IAAI,IAAI,IAAI;AAAE,YAAA,OAAO,gBAAgB;AAEzC,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE;QACpE,IAAI,CAAC,UAAU,EAAE;YACb,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;;gBAErE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;YAC9B;YAEA,OAAO,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC3G;QAEA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC;QACzC,IAAI,KAAK,GAAG,EAAE;;QAGd,IAAI,QAAQ,IAAI,KAAK;YACjB,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,QAAQ,IAAI,YAAY,GAAG,KAAK,GAAG,EAAE,CAAC;;aAGnF,IAAI,QAAQ,IAAI,MAAM;YACvB,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,KAAK,IAAI,YAAY,GAAG,KAAK,GAAG,EAAE,CAAC;;aAGrF,IAAI,QAAQ,IAAI,QAAQ;AACzB,YAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,KAAK;AAE5D,QAAA,OAAO,KAAK;IAChB;AAEA;;;;;;;;AAQG;AACI,IAAA,QAAQ,CAAC,CAAM,EAAE,CAAM,EAAE,SAAyB,EAAA;QACrD,IAAI,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,SAAS,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;aACxC,IAAI,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,SAAS,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;;AAGlD,QAAA,OAAO,CAAC;IACZ;AAEA;;;;;;AAMG;AACI,IAAA,WAAW,CAAC,KAAa,EAAA;;AAE5B,QAAA,IAAI,CAAC,KAAK,CAAM,KAAK,CAAC;AAClB,YAAA,OAAO,KAAK;;AAGhB,QAAA,IAAI,CAAC,wCAAwC,CAAC,IAAI,CAAC,KAAK,CAAC;AACrD,YAAA,OAAO,KAAK;;AAGhB,QAAA,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAClD;AAEA;;;;;;;AAOG;IACI,mBAAmB,CAAC,SAAgB,EAAE,OAAc,EAAA;QACvD,IAAI,UAAU,GAAU,EAAE;QAC1B,IAAI,OAAO,GAAU,EAAE;AAEvB,QAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EACxC;AACI,YAAA,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;YACpB,IAAI,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC1C,YAAA,IAAI,UAAU;AACV,gBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;QACnC;AAEA,QAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EACtC;AACI,YAAA,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YAClB,IAAI,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC1C,YAAA,IAAI,UAAU;AACV,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QAChC;AAEA,QAAA,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;IAClE;AAEA;;;;;;;;AAQG;IACI,iBAAiB,CAAC,IAAS,EAAE,MAAA,GAAkB,KAAK,EAAE,MAAA,GAA0C,OAAO,EAAE,eAAA,GAA2B,IAAI,EAAA;AAC3I,QAAA,IAAI,CAAC,IAAI;AACL,YAAA,OAAO,IAAI;AAEf,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAClB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC;AAE7D,QAAA,IAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAClB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC;;AAG9F,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM;AACxB,QAAA,IAAI,CAAC,MAAM;AACP,YAAA,OAAO,IAAI;AAEf,QAAA,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ;AACxB,YAAA,MAAM,2FAA2F;;;QAIrG,IAAI,OAAO,GAAU,IAAI;AACzB,QAAA,IAAI,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK;;;AAIvC,QAAA,IAAa,IAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC5B,YAAA,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;aACrB,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM;YACvC,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;aACxC,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM;YACxC,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;aACzC,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM;YAC3C,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;QAEjD,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;YAC/C,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC;;;AAIhE,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,cAAc,CAAC,KAAY,EAAE,MAAuC,EAAE,eAAe,EAAA;AACzF,QAAA,OAAO,MAAM,IAAI,OAAO,GAAG,KAAK,GAAG,MAAM,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC;IAC3H;AAEA;;;;;;AAMG;AACK,IAAA,QAAQ,CAAC,KAAU,EAAA;QACvB,OAAO,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,eAAe,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9F;AAEA;;;;;AAKG;AACM,IAAA,OAAO,CAAC,KAAU,EAAA;;;AAGvB,QAAA,OAAO,KAAK,CAAC,EAAE,KAAK,SAAS,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS;IACrF;AAEA;;;;;;;AAOG;AACI,IAAA,YAAY,CAAC,IAAS,EAAE,KAAc,EAAE,OAAgB,EAAA;QAC3D,IAAI,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AAEtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACtH;AAjQS,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,kEAoCsE,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AApC9F,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA;;4FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAqCT;;0BAAmD;;0BAAY,MAAM;2BAAC,aAAa;;;AC5D3G;AAIA;;AAEG;MAKU,WAAW,CAAA;AAKA,IAAA,GAAA;AAHpB;;AAEG;AACH,IAAA,WAAA,CAAoB,GAAgB,EAAA;QAAhB,IAAA,CAAA,GAAG,GAAH,GAAG;IAAiB;AAExC;;;;;;;AAOG;AACH,IAAA,SAAS,CAAC,KAAU,EAAE,MAAA,GAAiB,YAAY,EAAA;AAC/C,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI;AAE9C,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAc,CAAC;AACnD,QAAA,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B;wGArBS,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAX,WAAW,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA;;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI;AAC5B,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACVD;MAkBa,gBAAgB,CAAA;IAC3B,OAAO,OAAO,CAAC,MAA+B,EAAA;QAC5C,OAAO;AACL,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,IAAI,KAAK,EAAC;gBACzE,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,IAAI,IAAI,GAAG,KAAK,GAAG,MAAM,EAAE,SAAS,EAAC;gBAC1F,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,IAAI,KAAK,EAAE;AAClE;SACF;IACH;wGAVW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,CAHZ,WAAW,CAAA,EAAA,OAAA,EAAA,CADhB,kBAAkB,aAElB,WAAW,CAAA,EAAA,CAAA;AAEV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAJjB,kBAAkB,CAAA,EAAA,CAAA;;4FAIjB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,kBAAkB,CAAC;oBAC7B,YAAY,EAAE,CAAC,WAAW,CAAC;oBAC3B,OAAO,EAAE,CAAC,WAAW;AACtB,iBAAA;;;ACjBD;AAGA;;AAEG;MAEU,cAAc,CAAA;AAEvB;;;;AAIG;IACI,OAAO,GAAA;QACV,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAG;AAC/D,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAClE,YAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzB,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;;;AAQG;IACI,UAAU,CAAC,CAAM,EAAE,KAAA,GAAgB,CAAC,EAAE,iBAAA,GAA6B,KAAK,EAAE,OAAA,GAAmB,KAAK,EAAA;AACrG,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC;QACxD,IAAI,IAAI,GAAW,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACvE,QAAA,OAAO,IAAI;IACf;AAEA;;;;;;AAMG;AACK,IAAA,UAAU,CAAC,GAAW,EAAE,IAAI,GAAG,CAAC,EAAA;QACpC,IAAI,EAAE,GAAG,UAAU,GAAG,IAAI,EAAE,EAAE,GAAG,UAAU,GAAG,IAAI;AAClD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YACtB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,CAAC;YACnC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,CAAC;QACvC;AACA,QAAA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAG,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAG,EAAE,CAAC,EAAE,UAAU,CAAC;AAClF,QAAA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAG,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAG,EAAE,CAAC,EAAE,UAAU,CAAC;AAClF,QAAA,OAAO,CAAC,UAAU,IAAI,OAAO,GAAG,EAAE,CAAC,IAAI,EAAE,KAAG,CAAC,CAAC,EAAE,QAAQ,EAAE;IAC9D;AAEA;;AAEG;AACK,IAAA,YAAY,GAAG;QACnB,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI;QAC7I,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI;AACzI,QAAA,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE;KACxG;AAED;;;;;;AAMG;AACK,IAAA,SAAS,CAAC,CAAM,EAAE,KAAa,EAAE,iBAA0B,EAAA;QAC/D,IAAI,CAAM,EAAE,CAAM;QAClB,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,GAAG;QAC1B,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,GAAG;QAC1B,IAAI,CAAC,KAAK,KAAK;AAAE,YAAA,OAAO,GAAG;QAC3B,IAAI,CAAC,YAAY,IAAI;YAAE,OAAO,IAAI,GAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAC1D,CAAC,GAAG,OAAO,CAAC;QACZ,IAAI,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,GAAG,CAAC;QACnC,IAAI,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,GAAG,CAAC;QACnC,IAAI,CAAC,YAAY,QAAQ;AAAE,YAAA,OAAO,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE;AACrD,QAAA,IAAI,CAAC,YAAY,KAAK,EAAE;YACpB,CAAC,GAAG,EAAE;AACN,YAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3B,gBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC;AACxD,gBAAA,IAAI,GAAG;AAAE,oBAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACxB;YACA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;QACjD;QACA,CAAC,GAAG,EAAE;;QAGN,IAAI,CAAC,EAAE;YACH,IAAI,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI;YAEvC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AAC1B,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE;AACT,oBAAA,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,iBAAiB,CAAC,EAAE;AAC1D,wBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,iBAAiB,CAAC;AAC5D,wBAAA,IAAI,GAAG;4BAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;oBAClC;gBACJ;YACJ;QACJ;QACA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;IACjD;AAEA;;;;;AAKG;AACI,IAAA,GAAG,CAAC,CAAS,EAAA;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC;AAEA;;;;AAIG;IACK,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAA;QACjB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;QAC1C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAC/C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAC/C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC;QAE9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC;QAC3C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;QAC3C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC;QAC3C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAE/C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC;QACzC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAC/C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC;QAC3C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;QAE7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAC/C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC;QAC9C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;QAC/C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;AAE7C,QAAA,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B;AAEA;;;;AAIG;IACK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA;QACxB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD;AAEA;;;;AAIG;AACK,IAAA,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxD;AAEA;;;;AAIG;AACK,IAAA,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxD;AAEA;;;;AAIG;AACK,IAAA,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7C;AAEA;;;;AAIG;AACK,IAAA,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD;AAEA;;;;AAIG;AACK,IAAA,IAAI,CAAC,CAAS,EAAA;QAClB,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;AAE7E,QAAA,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7D,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;YACzB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,GAAG,EAAE,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;YAC1B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;AAAE,gBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACxC;AACA,QAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;AAChB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;AAC1B,QAAA,OAAO,KAAK;IAChB;AAEA;;;;AAIG;AACK,IAAA,MAAM,CAAC,CAAC,EAAA;AACZ,QAAA,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QACnB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;YACtB,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9H,QAAA,OAAO,OAAO;IAClB;AAEA;;AAEG;AACK,IAAA,OAAO,GAAa,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;AAExD;;;;AAIG;AACK,IAAA,IAAI,CAAC,CAAC,EAAA;AACV,QAAA,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;AACjB,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACb,YAAA,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACtF,QAAA,OAAO,CAAC;IACZ;AAEA;;;;AAIG;AACK,IAAA,GAAG,CAAC,CAAC,EAAA;AACT,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;AAC7B,YAAA,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACrB;AAEA;;;;AAIG;IACK,KAAK,CAAC,CAAC,EAAE,CAAC,EAAA;AACd,QAAA,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU;IAC/B;wGAtTS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADF,MAAM,EAAA,CAAA;;4FAClB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACNhC;AAqBA;;AAEG;MAEU,cAAc,CAAA;AA+CsB,IAAA,QAAA;AAAwC,IAAA,WAAA;AAAuC,IAAA,IAAA;;AA5CpH,IAAA,GAAG,GAAG;QACV,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG;QACvD,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,GAAG;QACpD,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAG;QACjD,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAG;QACjD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG;QACrD,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG;QACvD,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY;KACzD;;AAGO,IAAA,qBAAqB;;AAGrB,IAAA,qBAAqB;;AAGrB,IAAA,SAAS;;AAGT,IAAA,WAAW;;AAGX,IAAA,WAAW;;AAGX,IAAA,QAAQ;;AAGR,IAAA,kBAAkB;;AAG1B,IAAA,IAAY,MAAM,GAAA;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC;IAC3C;;IAGA,QAAQ,GAAY,KAAK;IACzB,UAAU,GAAW,IAAI;IACzB,eAAe,GAAuC,IAAI;IAE1D,SAAS,GAAY,IAAI;;AAGzB,IAAA,WAAA,CAA6C,QAAkB,EAAsB,WAA6B,EAAU,IAAoB,EAAuB,UAAkB,EAAA;QAA5I,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAAgC,IAAA,CAAA,WAAW,GAAX,WAAW;QAA4B,IAAA,CAAA,IAAI,GAAJ,IAAI;AAC5H,QAAA,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC;QAE9C,IAAI,IAAI,CAAC,SAAS;YACd,IAAI,CAAC,IAAI,EAAE;IACnB;IAEA,YAAY,GAAA;QACR,IAAI,CAAC,IAAI,CAAC,SAAS;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,mKAAmK,CAAC;QAEtL,OAAO,IAAI,CAAC,SAAS;IACzB;IAEO,sBAAsB,CAAC,UAAkB,EAAE,eAAmD,EAAA;AACjG,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;IAC1C;AAEA,IAAA,MAAM,IAAI,GAAA;QACN,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,OAAO;AAEjG,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC;AACjC,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,iBAAiB,EAAE,OAAO;AAC1B,YAAA,WAAW,EAAE;AACT,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,SAAS,EAAE,UAAU;AACxB,aAAA;AACD,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,IAAI,EAAE;AACT,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC;YACpC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;AAClC,YAAA,WAAW,EAAE;AACT,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,YAAY,EAAE,uCAAuC;AACrD,gBAAA,SAAS,EAAE,UAAU;AACxB,aAAA;AACD,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,gBAAgB,EAAE,IAAI;YACtB,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;YAC9C,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AAC5C,YAAA,IAAI,EAAE;AACT,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC;YACpC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;AAClC,YAAA,WAAW,EAAE;AACT,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,YAAY,EAAE,uCAAuC;AACrD,gBAAA,SAAS,EAAE,UAAU;AACxB,aAAA;AACD,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,gBAAgB,EAAE,IAAI;YACtB,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;YAC9C,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AAC5C,YAAA,IAAI,EAAE;AACT,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;YAC1B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;AAClC,YAAA,WAAW,EAAE;AACT,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,SAAS,EAAE,UAAU;AACxB,aAAA;AACD,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,gBAAgB,EAAE,KAAK;YACvB,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AAC5C,YAAA,IAAI,EAAE;AACT,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;YAC1B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;AAClC,YAAA,WAAW,EAAE;AACT,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,SAAS,EAAE,UAAU;AACxB,aAAA;AACD,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,gBAAgB,EAAE,KAAK;YACvB,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AAC5C,YAAA,IAAI,EAAE;AACT,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AAChC,YAAA,WAAW,EAAE;AACT,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,SAAS,EAAE,UAAU;AACxB,aAAA;AACD,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,gBAAgB,EAAE,KAAK;YACvB,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AAC5C,YAAA,IAAI,EAAE;AACT,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AAC/B,YAAA,WAAW,EAAE;AACT,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,SAAS,EAAE,UAAU;AACxB,aAAA;AACD,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,gBAAgB,EAAE,KAAK;YACvB,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AAC5C,YAAA,IAAI,EAAE;AACT,SAAA,CAAC;IAEN;AAEA;;;;;;;;AAQG;AACI,IAAA,aAAa,CAAC,IAAY,EAAE,4BAAsD,IAAI,EAAE,+BAAuC,IAAI,EAAA;AACtI,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;YAChF;QACJ;QAEA,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC;QAEtD,IAAI,GAAG,IAAI,MAAM;YAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;;YAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,GAAG,IAAI,QAAQ,GAAG,iBAAiB,GAAG,kBAAkB,EAAE,OAAO,EAAE,4BAA4B,KAAK,GAAG,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;IACzO;AAEA;;;;;;;;AAQG;AACI,IAAA,UAAU,CAAC,IAAY,EAAE,4BAAsD,IAAI,EAAE,+BAAuC,IAAI,EAAA;AACnI,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;YAC7E;QACJ;QAEA,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC;QAEtD,IAAI,GAAG,IAAI,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;;YAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,GAAG,IAAI,QAAQ,GAAG,iBAAiB,GAAG,kBAAkB,EAAE,OAAO,EAAE,4BAA4B,KAAK,GAAG,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;IACtO;AAEA;;;;;;;;AAQG;AACI,IAAA,WAAW,CAAC,IAAY,EAAE,4BAAsD,IAAI,EAAE,+BAAuC,IAAI,EAAA;AACpI,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;YAC9E;QACJ;QAEA,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC;QAEtD,IAAI,GAAG,IAAI,MAAM;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,GAAG,IAAI,QAAQ,GAAG,iBAAiB,GAAG,kBAAkB,EAAE,OAAO,EAAE,4BAA4B,KAAK,GAAG,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;IACvO;AAEA;;;;;;;;AAQG;AACI,IAAA,aAAa,CAAC,IAAY,EAAE,4BAAsD,IAAI,EAAE,+BAAuC,IAAI,EAAA;AACtI,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;YAChF;QACJ;QAEA,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC;QAEtD,IAAI,GAAG,IAAI,MAAM;YAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;;YAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,GAAG,IAAI,QAAQ,GAAG,iBAAiB,GAAG,kBAAkB,EAAE,OAAO,EAAE,4BAA4B,KAAK,GAAG,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;IACzO;AAEA;;AAEG;IACI,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QACnB,IAAI,CAAC,KAAK,EAAE;IAChB;AAEA;;;;;;;AAOG;IACI,wBAAwB,CAAC,KAAa,EAAE,IAAY,EAAA;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;QAC1B,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;IACvD;AAEA;;;;;;AAMG;AACK,IAAA,YAAY,CAAC,gBAA0C,EAAA;QAC3D,IAAI,gBAAgB,IAAI,IAAI;AACxB,YAAA,OAAO,gBAAgB;AAC3B,QAAA,OAAO,MAAM;IACjB;IAEQ,wBAAwB,GAAiE,EAAE;AAE5F,IAAA,uBAAuB,CAAC,KAAa,EAAE,IAAY,EAAE,SAAoB,EAAE,OAAkB,EAAE,WAAA,GAAsB,EAAE,EAAE,YAAoB,EAAE,EAAA;AAClJ,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC;IAC3F;AAEO,IAAA,uBAAuB,CAAC,KAAa,EAAE,IAAY,EAAE,SAAoB,EAAE,OAAkB,EAAE,WAAA,GAAsB,EAAE,EAAE,YAAoB,EAAE,EAAA;AAClJ,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC;IAC3F;AAEQ,IAAA,cAAc,CAAC,KAA4B,EAAE,KAAa,EAAE,IAAY,EAAE,SAAoB,EAAE,OAAkB,EAAE,WAAA,GAAsB,EAAE,EAAE,YAAoB,EAAE,EAAA;AACxK,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE;YAC5D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;;AAG/E,YAAA,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC;AACvF,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,kBAAkB,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AACxI,gBAAA,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC;AAEnE,gBAAA,IAAI,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI;oBAC5B,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;AAC9C,qBAAA,IAAI,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI;oBACjC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;AACrD,YAAA,CAAC,CAAC;QACN;;AAEI,YAAA,CAAC,KAAK,IAAI,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC;IAC3K;AAEA;;;;;;;AAOG;AACK,IAAA,wBAAwB,CAAC,KAAa,EAAE,IAAY,EAAE,SAAA,GAAsB,IAAI,EAAE,OAAA,GAAoB,IAAI,EAAE,WAAA,GAAsB,EAAE,EAAE,YAAoB,EAAE,EAAA;AAChK,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC;IAC/G;AAEA;;;;;;;;;AASG;AACK,IAAA,wBAAwB,CAAC,KAAa,EAAE,IAAY,EAAE,SAAA,GAAsB,IAAI,EAAE,OAAA,GAAoB,IAAI,EAAE,WAAA,GAAsB,EAAE,EAAE,YAAoB,EAAE,EAAA;AAChK,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC;IAC/G;AAEA;;;;;;;;;;AAUG;AACK,IAAA,iBAAiB,CAAC,IAAS,EAAE,KAAa,EAAE,IAAY,EAAE,SAAA,GAAsB,IAAI,EAAE,UAAoB,IAAI,EAAE,cAAsB,EAAE,EAAE,YAAoB,EAAE,EAAA;AACpK,QAAA,IAAI,aAAa,GAAG;AAChB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE;SACT;AACD,QAAA,IAAI,WAAW;AACX,YAAA,aAAa,CAAC,mBAAmB,CAAC,GAAG,WAAW;AACpD,QAAA,IAAI,SAAS;AACT,YAAA,aAAa,CAAC,kBAAkB,CAAC,GAAG,SAAS;QAEjD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACrC,YAAA,IAAI,MAAM,CAAC,KAAK,IAAI,SAAS;AACzB,gBAAA,SAAS,EAAE;AACV,iBAAA,IAAI,OAAO;AACZ,gBAAA,OAAO,EAAE;AACjB,QAAA,CAAC,CAAC;IACN;AAEA;;;;;AAKG;IACI,iCAAiC,CAAC,KAAa,EAAE,IAAY,EAAA;AAChE,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAAE,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;AAC1C,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrF;AAEA;;;;;;;AAOG;AACI,IAAA,qBAAqB,CAAC,KAAa,EAAE,IAAY,EAAE,aAAuB,IAAI,EAAA;AACjF,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;AAE1B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACtD,YAAA,IAAI,MAAM,CAAC,KAAK,IAAI,UAAU;AAC1B,gBAAA,UAAU,EAAE;AACpB,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;;;AAQG;IACI,wBAAwB,CAAC,QAAoB,EAAE,UAAkB,EAAE,QAAgB,EAAE,WAAA,GAAwB,IAAI,EAAE,WAAA,GAAwB,IAAI,EAAA;AAClJ,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;QAE1B,IAAI,UAAU,GAAQ,QAAQ;QAC9B,IAAI,QAAQ,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE;AACxC,YAAA,IAAI,QAAQ,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU;gBAC5C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC;AAEzD,iBAAA,IAAI,UAAU;AACf,gBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAElC,YAAA,IAAI,WAAW;AAAE,gBAAA,WAAW,EAAE;QAClC;aAAO;YACH,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC;AAEvJ,YAAA,IAAI,WAAW;AAAE,gBAAA,WAAW,EAAE;QAClC;IACJ;AAEA;;;;;;;;;;;;AAYG;IACI,oBAAoB,CAAC,QAAgB,EAAE,UAAkB,EAAE,QAAgB,EAAE,WAAA,GAAwB,IAAI,EAAE,WAAA,GAAwB,IAAI,EAAA;AAC1I,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;QAE1B,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,IAAI,UAAU;AACV,gBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAElC,YAAA,IAAI,WAAW;AAAE,gBAAA,WAAW,EAAE;QAClC;aAAO;AACH,YAAA,IAAI,QAAQ;gBACR,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAAC;AAEhD,YAAA,IAAI,WAAW;AAAE,gBAAA,WAAW,EAAE;QAClC;IACJ;AAEA;;;;;;;;AAQG;IACI,wBAAwB,CAAC,QAAiB,EAAE,UAAkB,EAAE,QAAgB,EAAE,WAAA,GAAwB,IAAI,EAAE,WAAA,GAAwB,IAAI,EAAA;AAC/I,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;QAE1B,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,UAAU;AACV,gBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAElC,YAAA,IAAI,WAAW;AAAE,gBAAA,WAAW,EAAE;QAClC;aAAO;AACH,YAAA,IAAI,QAAQ;AACR,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAE9B,YAAA,IAAI,WAAW;AAAE,gBAAA,WAAW,EAAE;QAClC;IACJ;wGAteS,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA+CI,QAAQ,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAuH,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AA/C5J,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA;;4FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAgDV,MAAM;2BAAC,QAAQ;;0BAA+B;;0BAAiF,MAAM;2BAAC,WAAW;;;ACxEzK;AAaA;MAEa,sBAAsB,CAAA;AAmBX,IAAA,UAAA;AAAoC,IAAA,MAAA;AAAwB,IAAA,QAAA;IAjBzE,YAAY,GAAW,GAAG;AAE1B,IAAA,eAAe,GAA0B,IAAI,aAAa,EAAU;IACpE,QAAQ,GAAY,KAAK;IACzB,cAAc,GAAW,CAAC;AAC1B,IAAA,UAAU;AAEV,IAAA,eAAe,GAAuC,IAAI,OAAO,EAA6B;IAE7F,cAAc,GAAY,IAAI;AAE/B,IAAA,cAAc;IAEb,eAAe,GAAsD,EAAE;IAEvE,SAAS,GAAY,IAAI;AAEjC,IAAA,WAAA,CAAoB,UAA0B,EAAU,MAAc,EAAU,QAAkB,EAAuB,UAAkB,EAAA;QAAvH,IAAA,CAAA,UAAU,GAAV,UAAU;QAA0B,IAAA,CAAA,MAAM,GAAN,MAAM;QAAkB,IAAA,CAAA,QAAQ,GAAR,QAAQ;AACpF,QAAA,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC;QAC9C,IAAG,CAAC,IAAI,CAAC,SAAS;YAAE;AAEpB,QAAA,IAAI,CAAC,UAAU,GAA2C,MAAM;QAChE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;YAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;YACxC,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;AAGpB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAE5E,IAAG,CAAC,IAAI,CAAC,cAAc;gBACnB,IAAI,CAAC,qCAAqC,EAAE;QACpD;QAEA,IAAI,CAAC,sBAAsB,EAAE;QAE7B,IAAI,IAAI,CAAC,QAAQ;AACb,YAAA,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC;QAEjF,IAAI,CAAC,eAAe,CAAC,IAAI,CAACC,QAAM,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;;YAGrF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC1C;;AAGJ,YAAA,IAAI,wBAAwB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;YAE9G,IAAI,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;;;AAGxJ,YAAA,IAAI,wBAAwB,IAAI,oBAAoB,EAAE;AAClD,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAC,MAAM,EAAE,CAAC,EAAC,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC;AAC7I,gBAAA,IAAI,CAAC,eAAe,GAAG,EAAE;YAC7B;AACJ,QAAA,CAAC,CAAC;IACN;IAEQ,qCAAqC,GAAA;QACzC,IAAG,CAAC,IAAI,CAAC,SAAS;YAAE;;AAGpB,QAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,MAAK;AAC5B,YAAA,IAAI,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;gBAC7B,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ;gBAC/C,aAAa,CAAC,QAAQ,CAAC;YAC3B;QACJ,CAAC,EAAE,GAAG,CAAC;IACX;IAEO,eAAe,GAAA;AAClB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,OAAO,GAAG;IACd;IAEQ,uBAAuB,GAAW,GAAG;IACrC,oBAAoB,GAA8B,EAAE;AACpD,IAAA,WAAW,CAAC,KAAmB,EAAA;AACnC,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE;IACvD;IAEA,sBAAsB,GAAA;QAClB,IAAG,CAAC,IAAI,CAAC,SAAS;YAAE;QAEpB,IAAI,IAAI,CAAC,QAAQ;AACb,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC;;AAEnD,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;AAEjC,QAAA,MAAM,CAAC,SAAS,GAAG,CAAC,KAAmB,KAAI;;AAEvC,YAAA,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,YAAY;gBAC3D;AAEJ,YAAA,IAAI,YAAY,GAAI,KAAK,CAAC,MAAiB;;YAG3C,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;gBACtC;iBACC;AACD,gBAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,GAAG,IAAI;AAC7C,gBAAA,UAAU,CAAC,MAAM,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC;YACjG;AAEA,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAEzE,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,OAAO,EAAE;AAC9B,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,iCAAA,EAAoC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAA,WAAA,EAAc,KAAK,EAAE,IAAI,EAAE,GAAG,CAAA,CAAE,CAAC;AAEnG,gBAAA,QAAQ,KAAK,EAAE,IAAI,EAAE,KAAK;AACtB,oBAAA,KAAK,SAAS;wBAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC;wBAAE;AACjE,oBAAA,KAAK,SAAS;wBAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC;wBAAE;AACjE,oBAAA,KAAK,OAAO;wBAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC;wBAAE;AAC7D,oBAAA,KAAK,MAAM;wBAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC;wBAAE;;YAEnE;iBACK,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,OAAO,EAAE;AACnC,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,uBAAA,CAAyB,CAAC;AAEtC,gBAAA,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC;YACvF;iBACK,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,OAAO,EAAE;gBACnC,OAAO,CAAC,GAAG,CAAC,CAAA,2BAAA,CAA6B,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;gBAEhE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;YAClD;iBACK,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,eAAe,EAAE;gBAC3C,OAAO,CAAC,GAAG,CAAC,CAAA,uCAAA,EAA0C,KAAK,EAAE,IAAI,EAAE,GAAG,CAAA,CAAE,CAAC;gBAEzE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC;YAChD;iBACK,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,EAAE;AACrC,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,mCAAA,EAAsC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAA,WAAA,EAAc,KAAK,EAAE,IAAI,EAAE,IAAI,CAAA,SAAA,EAAY,KAAK,EAAE,IAAI,EAAE,KAAK,CAAA,MAAA,EAAS,KAAK,EAAE,IAAI,EAAE,IAAI,CAAA,CAAE,CAAC;AAE9J,gBAAA,IAAI,YAAY,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AAExE,gBAAA,QAAQ,KAAK,EAAE,IAAI,EAAE,KAAK;AACtB,oBAAA,KAAK,SAAS;AACV,wBAAA,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAK;AAChF,4BAAA,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,EAAE,GAAG,CAAC;wBACpE,CAAC,EAAE,MAAK;AACJ,4BAAA,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,EAAE,GAAG,CAAC;AACrE,wBAAA,CAAC,CAAC;wBACF;AACJ,oBAAA,KAAK,SAAS;AACV,wBAAA,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAK;AAChF,4BAAA,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,EAAE,GAAG,CAAC;wBACpE,CAAC,EAAE,MAAK;AACJ,4BAAA,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,EAAE,GAAG,CAAC;AACrE,wBAAA,CAAC,CAAC;wBACF;;YAGZ;iBACK,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,UAAU,EAAE;gBACtC,OAAO,CAAC,GAAG,CAAC,CAAA,6BAAA,EAAgC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAA,CAAE,CAAC;AAC/D,gBAAA,IAAI,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM;AAChC,gBAAA,IAAI,YAAY,GAAG,KAAK,EAAE,IAAI,EAAE,YAAY;AAC5C,gBAAA,IAAI,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,OAAO;;;AAIlC,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7E,oBAAA,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC;oBAC/F;gBACJ;AAEA,gBAAA,IAAI,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AAClE,gBAAA,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;gBACtD,IAAI,OAAO,GAAG,kBAAkB,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;AAC3D,gBAAA,IAAI,MAAM,GAAG,OAAO,GAAG,OAAO;gBAE9B,IAAI,YAAY,EAAE;AACd,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACxE,oBAAA,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC;gBACpD;AACK,qBAAA,IAAI,MAAM;AACX,oBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;YACrC;iBACK,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,eAAe,EAAE;gBAC3C,OAAO,CAAC,GAAG,CAAC,CAAA,kCAAA,EAAqC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAA,CAAE,CAAC;gBACpE,IAAI,CAAC,cAAc,EAAE;YACzB;iBACK,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,UAAU,EAAE;gBACtC,OAAO,CAAC,GAAG,CAAC,CAAA,6BAAA,EAAgC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAA,CAAE,CAAC;gBAE/D,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG;YAC3C;iBACK,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,YAAY,EAAE;gBACxC,OAAO,CAAC,GAAG,CAAC,CAAA,+BAAA,EAAkC,KAAK,EAAE,IAAI,EAAE,kBAAkB,GAAG,YAAY,GAAG,EAAE,CAAA,CAAA,EAAI,KAAK,EAAE,IAAI,EAAE,KAAK,CAAA,CAAE,CAAC;AAE1H,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACzE;iBACK,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,YAAY,EAAE;AACxC,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAgB;gBACtF,IAAI,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;gBACpD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBACnF,MAAM,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;gBAErF,OAAO,CAAC,GAAG,CAAC,CAAA,gDAAA,EAAmD,KAAK,EAAE,IAAI,EAAE,cAAc,CAAA,CAAE,CAAC;AAE7F,gBAAA,IAAI,cAAc,GAAW,CAAC,CAAC;AAC/B,gBAAA,IAAI,SAAS,GAAW,EAAE,CAAC;AAC3B,gBAAA,IAAI,UAAU,GAAW,mBAAmB,CAAC;AAC7C,gBAAA,IAAI,SAAS,GAAW,IAAI,CAAC,YAAY,GAAG,kBAAkB;gBAE9D,IAAI,YAAY,GAAG,2EAA2E;gBAE9F,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC;gBAE5D,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,gBAAA,GAAG,CAAC,SAAS,GAAG,oBAAoB;AACpC,gBAAA,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,CAAA,QAAA,EAAW,SAAS,CAAA,+BAAA,EAAkC,SAAS,CAAA,WAAA,EAAc,SAAS,IAAI;AAC7H,gBAAA,GAAG,CAAC,EAAE,GAAG,KAAK;gBAEd,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,gBAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB;gBACtC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,CAAA,6BAAA,EAAgC,SAAS,CAAA,GAAA,CAAK;AAClF,gBAAA,IAAI,CAAC,EAAE,GAAG,MAAM;gBAEhB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC3C,gBAAA,KAAK,CAAC,SAAS,GAAG,sBAAsB;AACxC,gBAAA,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,CAAA,oBAAA,EAAuB,SAAS,CAAA,UAAA,EAAa,SAAS,CAAA,qBAAA,EAAwB,UAAU,KAAK;AAClI,gBAAA,KAAK,CAAC,EAAE,GAAG,OAAO;gBAElB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC5C,gBAAA,MAAM,CAAC,SAAS,GAAG,uBAAuB;AAC1C,gBAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,CAAA,QAAA,EAAW,cAAc,CAAA,kCAAA,EAAqC,SAAS,GAAG,UAAU,CAAA,WAAA,EAAc,SAAS,IAAI;AACrJ,gBAAA,MAAM,CAAC,EAAE,GAAG,QAAQ;AAEpB,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAC9B,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAChC,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACrC;iBACK,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,aAAa,EAAE;AACzC,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,4BAAA,CAA8B,CAAC;AAE3C,gBAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAgB;AACpF,gBAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC;gBAExC,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;gBAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;gBAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;gBAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;AAEhD,gBAAA,IAAI,GAAG;AAAE,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACvC,gBAAA,IAAI,IAAI;AAAE,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACzC,gBAAA,IAAI,KAAK;AAAE,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3C,gBAAA,IAAI,MAAM;AAAE,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACjD;AACJ,QAAA,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ;AACb,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC;IAC1E;IAEQ,cAAc,GAAA;QAClB,IAAG,CAAC,IAAI,CAAC,SAAS;YAAE;AAEpB,QAAA,IAAI,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;YAC1B,OAAO,CAAC,IAAI,EAAE;QAClB;IACJ;IAEO,YAAY,CAAC,QAAgB,EAAE,GAAW,EAAA;QAC7C,IAAG,CAAC,IAAI,CAAC,SAAS;YAAE;;;;QAMpB,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAE,CAAC,CAAC,GAAG,QAAQ;QACxF,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG;QAElD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,CAAA,YAAA,EAAe,IAAI,CAAC,cAAc,CAAA,CAAA,EAAI,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjH;IAEO,+BAA+B,GAAA;QAClC,IAAG,CAAC,IAAI,CAAC,SAAS;YAAE;AAEpB,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAgB;QACtF,IAAI,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACpD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;AACnF,QAAA,IAAI,SAAS,GAAW,GAAG,GAAG,kBAAkB;QAEhD,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;QAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;QAE1C,IAAI,GAAG,EAAE;AACL,YAAA,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC;YACjD,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAA,YAAA,EAAe,SAAS,CAAA,GAAA,CAAK,CAAC;QACjE;AAEA,QAAA,IAAI,IAAI;YACJ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IACzD;AA/SS,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,2FAmB6E,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAnB9G,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA;;4FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAC;;0BAoBwE,MAAM;2BAAC,WAAW;;;AClC3H;AAIA;;AAEG;MAEU,qBAAqB,CAAA;AAKV,IAAA,GAAA;IAHb,WAAW,GAA2D,EAAE;IACxE,SAAS,GAA2D,EAAE;AAE7E,IAAA,WAAA,CAAoB,GAA2B,EAAA;QAA3B,IAAA,CAAA,GAAG,GAAH,GAAG;AACnB,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;YAC/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;YACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,KAAa,KAAI;gBAC3C,IAAI,GAAG,GAAG,EAAE;AACZ,gBAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;AAC7C,gBAAA,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,GAAG,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;AAC5F,YAAA,CAAC;QACL;IACJ;wGAdS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA;;4FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACPlC;;;AAGG;AACI,MAAM,iBAAiB,GAAW,SAAS;AAClD;AACO,MAAM,YAAY,GAAW,UAAU;AAC9C;AACO,MAAM,YAAY,GAAW,SAAS;AAC7C;AACO,MAAM,YAAY,GAAW,SAAS;AAC7C;AACO,MAAM,YAAY,GAAW,SAAS;AAC7C;AACO,MAAM,UAAU,GAAW,SAAS;AAC3C;AACO,MAAM,gBAAgB,GAAW,aAAa;AACrD;AACO,MAAM,gBAAgB,GAAW,aAAa;AACrD;AACO,MAAM,gBAAgB,GAAW,mBAAmB;AAC3D;AACO,MAAM,sBAAsB,GAAW,iBAAiB;AAC/D;AACO,MAAM,sBAAsB,GAAW,iBAAiB;AAC/D;AACO,MAAM,eAAe,GAAW,SAAS;AAChD;AACO,MAAM,UAAU,GAAW,iBAAiB;AACnD;AACO,MAAM,WAAW,GAAW,SAAS;;AC7B5C;;AAEG;AACH,IAAY,QAmBX;AAnBD,CAAA,UAAY,QAAQ,EAAA;mBACD,yCAAS;mBACT,qCAAO;mBACP,2CAAU;mBACV,6CAAW;mBACX,uCAAQ;mBACR,yCAAS;mBACT,uCAAQ;mBACR,yCAAS;mBACT,2CAAU;mBACV,yCAAS;mBACT,4CAAW;mBACX,0CAAU;mBACV,4CAAW;mBACX,4CAAW;mBACX,4CAAW;mBACX,8CAAY;mBACZ,gDAAa;mBACb,4CAAW;AAC9B,CAAC,EAnBW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;;ACJpB;AAOA;;AAEG;MAEU,cAAc,CAAA;AAEvB;;AAEG;IACI,kBAAkB,GAAA;QACrB,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,4HAA4H,CAAC;YAC3I;QACJ;AAEA,QAAA,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC,KAAK;AAC3B,YAAA,MAAM,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE;AAC5B,aAAA,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC,eAAe;AAC1C,YAAA,MAAM,CAAC,YAAY,EAAE,CAAC,eAAe,EAAE;IAC/C;AAEA;;;;;;;;;AASG;AACI,IAAA,eAAe,CAAI,UAAe,EAAE,iBAAyB,EAAE,aAAqB,EAAA;AACvF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;AACxB,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,aAAa;AACxC,gBAAA,OAAO,IAAI;QACnB;AACA,QAAA,OAAO,IAAI;IACf;AAEA;;;;;;AAMG;AACI,IAAA,SAAS,CAAC,IAAY,EAAE,aAAqB,IAAI,EAAE,aAAqB,IAAI,EAAA;AAC/E,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC5B,IAAI,IAAI,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,GAAG,WAAW,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,GAAG,WAAW,EAAE;gBAC1H,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;YAC/B;iBACK;gBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE;gBACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE;YACzC;QACJ;;AAGO,QAAA,IAAwD,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;IAChG;AAEA;;;;;AAKG;IACI,YAAY,CAAC,GAAW,EAAE,QAAgB,EAAA;QAC5C,IAAI,CAAC,QAAQ,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,8HAA8H,CAAC;YAC7I;QACJ;QAEA,IAAI,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACnC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5B,QAAA,CAAC,CAAC,SAAS,GAAG,iBAAiB;AAC/B,QAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AACZ,QAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;QACrB,CAAC,CAAC,KAAK,EAAE;AACT,QAAA,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAC/B,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAChC;AAEA;;;;;;AAMG;AACI,IAAA,QAAQ,CAAC,QAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ;AACT,YAAA,OAAO,EAAE;AAEb,QAAA,IAAI,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC,EAC7D,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EACvD,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAC9D,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;AAErE,QAAA,IAAI,QAAQ,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,GAAG,GAAG,KAAK,GAAG,KAAK;AACjD,QAAA,IAAI,UAAU,GAAG,CAAC,OAAO,GAAG,EAAE,IAAI,GAAG,GAAG,OAAO,GAAG,OAAO;AACzD,QAAA,IAAI,UAAU,GAAG,CAAC,OAAO,GAAG,EAAE,IAAI,GAAG,GAAG,OAAO,GAAG,OAAO;AAEzD,QAAA,OAAO,QAAQ,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,YAAY;IAC9E;AAEA;;;;;AAKG;IACI,QAAQ,CAAC,UAAkB,EAAE,QAAgB,EAAA;QAChD,IAAI,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;AACpD,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC3C;AAEA;;;;;;AAMG;AACK,IAAA,mBAAmB,CAAC,UAAkB,EAAA;QAC1C,IAAI,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1C,QAAA,IAAI,SAAS,GAAG,YAAY,CAAC,MAAM;AACnC,QAAA,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC;AACrC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;YAChC,IAAI,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;AACtC,YAAA,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;QACpB;AACA,QAAA,OAAO,KAAK;IAChB;AAEA;;;;;AAKG;IACK,aAAa,CAAC,IAAgB,EAAE,QAAgB,EAAA;QACpD,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,OAAO,CAAC,KAAK,CAAC,8HAA8H,CAAC;YAC7I;QACJ;QAEA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAW,CAAC,CAAC;QAClC,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACtC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5C,IAAI,QAAQ,GAAG,QAAQ;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACnC;;AAEA;;;;;;AAMG;AACI,IAAA,IAAI,CAAC,KAAY,EAAE,CAAS,EAAE,CAAS,EAAA;AAC1C,QAAA,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAChB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACnB,QAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IAChB;AAEA;;;;;;AAMG;AACI,IAAA,qBAAqB,CAAC,IAAc,EAAA;QACvC,QAAQ,IAAI;YACR,KAAK,QAAQ,CAAC,OAAO;AACjB,gBAAA,OAAO,SAAS;YAEpB,KAAK,QAAQ,CAAC,OAAO;YACrB,KAAK,QAAQ,CAAC,MAAM;YACpB,KAAK,QAAQ,CAAC,MAAM;YACpB,KAAK,QAAQ,CAAC,KAAK;YACnB,KAAK,QAAQ,CAAC,KAAK;YACnB,KAAK,QAAQ,CAAC,KAAK;YACnB,KAAK,QAAQ,CAAC,IAAI;YAClB,KAAK,QAAQ,CAAC,KAAK;YACnB,KAAK,QAAQ,CAAC,MAAM;YACpB,KAAK,QAAQ,CAAC,MAAM;YACpB,KAAK,QAAQ,CAAC,MAAM;AAChB,gBAAA,OAAO,QAAQ;YACnB,KAAK,QAAQ,CAAC,IAAI;YAClB,KAAK,QAAQ,CAAC,MAAM;AAChB,gBAAA,OAAO,QAAQ;YACnB,KAAK,QAAQ,CAAC,QAAQ;AAClB,gBAAA,OAAO,MAAM;AACjB,YAAA;AACI,gBAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,GAAG,IAAI,CAAC;AACxD,gBAAA,OAAO,QAAQ;;IAE3B;AAEA;;;;;;;;AAQG;AACI,IAAA,SAAS,CAAC,MAAW,EAAE,IAAA,GAAkB,IAAI,EAAA;;AAGhD,QAAA,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;AAC5C,YAAA,OAAO,MAAM;;AAGjB,QAAA,QAAQ,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAEzB,YAAA,KAAK,kBAAkB;AACvB,YAAA,KAAK,iBAAiB;AACtB,YAAA,KAAK,iBAAiB;AACtB,YAAA,KAAK,eAAe;gBAChB,OAAO,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;;AAEnD,YAAA,KAAK,eAAe;AAChB,gBAAA,OAAO,MAAM;YACjB,SAAS;;;QAIb,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,YAAY,KAAK,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;IACzK;AAEA;;;AAGG;IACK,aAAa,CAAC,MAAW,EAAE,WAAgB,EAAA;QAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,YAAY,KAAK,EAAE;AAClD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;AAC3C,gBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD;aAAO,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,UAAU,EAAE;AAC9D,YAAA,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;AACpB,gBAAA,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;AAC1B,oBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtD;QACJ;AAEA,QAAA,OAAO,WAAW;IACtB;IAEA,IAAI,CAAC,MAAW,EAAE,IAAe,EAAA;AAC7B,QAAA,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;AAC9D,QAAA,OAAO,GAAG;IACd;;;;IAKQ,eAAe,GAA6B,EAAE;;AAE/C,IAAA,QAAQ,CAAC,EAAU,EAAE,IAAc,EAAE,YAAoB,EAAA;;AAE5D,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;;AAG1C,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAK,EAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC;IAC3G;wGA9QS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA;;4FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACVlC;AAkBA;;;;;;AAMG;AACG,SAAU,kBAAkB,CAAC,GAA8B,EAAA;IAC/D,OAAO,SAAS,YAAY,CAAwC,WAAc,EAAA;QAChF,OAAO,cAAc,WAAW,CAAA;YAAG,OAAO,GAAG,GAAG;SAAG;AACrD,IAAA,CAAC;AACH;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MACU,MAAM,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,MAAA,GAAiB,IAAI,EAAE,OAAA,GAAkB,IAAI,KACjG,CAAC,MAAc,EAAE,WAAmB,KAAI;AACtC,IAAA,IAAI,MAAM;AACR,QAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAClG,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC5F,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC/F,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7F,IAAA,IAAI,OAAO;AACT,QAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAE9F,IAAI,MAAM,CAAC,UAAU,CAAC;QACpB,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;;QAEnD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC;AACrD;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACI,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,IAAS,EAAE,MAAe,KAChE,CAAC,MAAc,EAAE,WAAmB,KAAI;IACtC,IAAI,SAAS,GAA8B,EAAE;AAE7C,IAAA,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE;AAClB,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC;AACzB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,QAAA,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;QAE7C,IAAI,SAAS,CAAC,IAAI,CAAC;YAAE;QAErB,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,WAAW,EAAE;YACjD,IAAI,MAAM,GAAY,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;YAC5C,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;YAChC,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,eAAe,CAAC;YACtC,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;AACtC,YAAA,IAAI,GAAG,GAAG,WAAW,GAAG,KAAK,GAAG,IAAI;AAEpC,YAAA,IAAI,MAAM;AACR,gBAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC1F,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAChG,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACrF,YAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,iBAAiB,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACnI,YAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACrF,YAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACjH,YAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAEnF,IAAI,MAAM,CAAC,UAAU,CAAC;gBACpB,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;;gBAE3C,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,YAAY,CAAC;AAE3C,YAAA,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI;QACvB;IACF;AACF;AAEF;;;;;;;;;;;;;;;;;AAiBG;MACU,UAAU,GAAG,CAAC,KAAa,EAAE,eAAuB,EAAE,cAAsB,EAAE,WAAA,GAAsB,IAAI,KACnH,CAAC,MAAc,EAAE,WAAmB,KAAI;AACtC,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC5F,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACzG,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC1G,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAEtG,IAAI,MAAM,CAAC,UAAU,CAAC;QACpB,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC;;QAEvD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,GAAG,gBAAgB,CAAC;AACzD;AAEF;;;;;;;;;;;;;;AAcG;AACI,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,YAAoB,EAAE,WAAmB,KACvF,CAAC,MAAc,EAAE,WAAmB,KAAI;AACtC,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC5F,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,sBAAsB,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC5G,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,sBAAsB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAE7G,IAAI,MAAM,CAAC,UAAU,CAAC;QACpB,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,sBAAsB,CAAC;;QAE7D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,GAAG,sBAAsB,CAAC;AAC/D;AAEF;;AAEG;MAEU,aAAa,CAAA;AAOG,IAAA,KAAA;AAA4B,IAAA,OAAA;AAAiC,IAAA,EAAA;AALxF;;;;AAIG;AACH,IAAA,WAAA,CAA2B,KAAkB,EAAU,OAAuB,EAAU,EAAuB,EAAA;QAApF,IAAA,CAAA,KAAK,GAAL,KAAK;QAAuB,IAAA,CAAA,OAAO,GAAP,OAAO;QAA0B,IAAA,CAAA,EAAE,GAAF,EAAE;IAAyB;AAEnH;;;;;;AAMG;AACI,IAAA,cAAc,CAAC,IAAW,EAAE,OAAA,GAAoB,EAAE,EAAA;QACvD,IAAI,OAAO,GAAiB,EAAE;QAC9B,IAAI,YAAY,GAAG,EAAE;AAErB,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;AAC3B,YAAA,OAAO,OAAO;;;QAIhB,IAAI,yBAAyB,GAA2B,EAAE;AAE1D,QAAA,IAAI,OAAO,EAAE,MAAM,GAAG,CAAC;AACrB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE;gBACtC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;AAEhD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAC;;;AAGrE,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;oBAC7B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;oBAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACtB;YACF;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;AACjC,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aAC7C;;;YAGH,IAAI,cAAc,GAAG,EAAE;AACvB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,gBAAA,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;AACvB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACvC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,EAAE;wBAChC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC/B;oBACF;gBACF;YACF;AACA,YAAA,OAAO,cAAc;QACvB;IACF;AAEA;;;;;;;AAOG;IACI,qBAAqB,CAAC,IAAmB,EAAE,OAAqB,EAAA;QACrE,IAAI,OAAO,GAAiB,EAAE;AAC9B,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;AAC3B,YAAA,OAAO,OAAO;;QAGhB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;YAC1B,IAAI,KAAK,IAAI,CAAC;gBACZ,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,EAAE,OAAO,CAAC;;AAEtD,gBAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,EAAE,OAAO,CAAC;AAChD,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,OAAO;IAChB;AAEA;;;;;;;;;AASG;IACK,yBAAyB,CAAC,GAAgB,EAAE,OAAqB,EAAA;QACvE,IAAI,CAAC,GAAG,CAAC,UAAU;AACjB,YAAA,OAAO,IAAI;QAEb,IAAI,OAAO,GAAiB,EAAE;;AAG9B,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAG;YAClB,IAAI,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;YACrC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACnG,YAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpG,QAAA,CAAC,CAAC;;QAGF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI,EAAG,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA,CAAC,CAAC,CAAC;IAC7D;AAEA;;;;;;;;AAQG;IACK,kBAAkB,CAAC,GAAQ,EAAE,gBAAyC,EAAA;QAC5E,IAAI,OAAO,GAAiB,EAAE;;QAG9B,IAAI,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;QACvC,IAAI,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;AAE9E,QAAA,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC;AACzB,YAAA,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC;AAElF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,IAAI,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;YACzB,IAAI,QAAQ,GAAG,EAAE;AACjB,YAAA,IAAI,MAAgB;AACpB,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;gBACnC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;gBAC7C,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YACpC;AACK,iBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE;gBAC9C,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;gBACnD,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C;AACK,iBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;gBACpC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;gBACzC,IAAI,OAAO,GAAG,CAAC,QAAQ,GAAG,iBAAiB,CAAC,KAAK,WAAW;oBAC1D,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;oBAEpC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C;AAEA,YAAA,IAAI,MAAM;gBACR,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,CAAC;QACzD;AAEA,QAAA,OAAO,OAAO;IAChB;AAEA;;;;;;;;AAQG;IACK,aAAa,CAAC,GAAQ,EAAE,IAAY,EAAE,OAAqB,EAAE,gBAAyC,EAAE,GAAyB,EAAA;QACvI,IAAI,MAAM,GAAY,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;QAC9C,IAAI,MAAM,GAAW,GAAG,CAAC,IAAI,GAAG,eAAe,CAAC;QAChD,IAAI,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC;AAEpC,QAAA,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACrF,YAAA,OAAO,CAAC,GAAG,CAAC,mDAAmD,GAAG,OAAO,CAAC;YAC1E;QACF;QAEA,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;QACnC,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE;QACpD,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;AAEpC,QAAA,IAAI,CAAC,MAAM;YACT;;QAGF,IAAI,CAAC,MAAM,EAAE;;YAEX,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE;AACvE,YAAA,IAAI,GAAG,GAAG,IAAI,GAAG,QAAQ;YACzB,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAClF,YAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAC9D;aAAO;AACL,YAAA,IAAI,GAAG,GAAG,IAAI,GAAG,MAAM;;AAGvB,YAAA,IAAI,MAAM,IAAI,GAAG,EAAE;;gBAEjB,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE;;gBAEvD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;;gBAE1B,IAAI,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;gBAExC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC3F,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;YAC9D;iBAAO;;;;gBAIL,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;gBACrF,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACxF,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YAC5D;QACF;IACF;AAEA;;;;;;;;;;AAUG;IACK,WAAW,CAAC,GAAQ,EAAE,IAAY,EAAE,OAAqB,EAAE,gBAAyC,EAAE,GAAyB,EAAA;;QAErI,IAAI,cAAc,GAAG,GAAG,CAAC,IAAI,GAAG,iBAAiB,CAAC;;QAGlD,IAAI,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;;QAGpC,IAAI,CAAC,GAAG,EAAE;YACR,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;AACnC,YAAA,IAAI,KAAK,GAAG,IAAI,IAAI,EAAE;YACtB,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;QAChF;;AAGA,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;;;;;AAK3C,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;;QAG5C,IAAI,KAAK,GAAG,KAAK;QAEjB,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;QACnC,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE;QACpD,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;;QAGpC,IAAI,MAAM,GAAW,GAAG,CAAC,IAAI,GAAG,eAAe,CAAC;QAChD,IAAI,IAAI,GAAiC,QAAQ;AACjD,QAAA,IAAI,MAAM,IAAI,GAAG,EAAE;AACjB,YAAA,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE;YAC1B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;YAC1B,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;YAC7B,IAAI,GAAG,QAAQ;QACjB;aACK,IAAI,MAAM,EAAE;YACf,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;YAC/E,IAAI,GAAG,MAAM;QACf;QAEA,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC3F,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChE;AAEA;;;;;;;;;;;;;;;AAeG;IACK,SAAS,CAAC,GAAQ,EAAE,IAAY,EAAE,OAAqB,EAAE,gBAAyC,EAAE,GAAyB,EAAA;QACnI,IAAI,eAAe,GAAG,GAAG,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAClD,IAAI,cAAc,GAAG,GAAG,CAAC,IAAI,GAAG,gBAAgB,CAAC;QACjD,IAAI,WAAW,GAAG,GAAG,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC9C,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;QAEpC,IAAI,KAAe,EAAE,MAAW;AAChC,QAAA,IAAI,IAAI,GAAU,GAAG,CAAC,IAAI,CAAC;AAE3B,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;AAC1C,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;YAExB,IAAI,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC;YAC5C,IAAI,KAAK,GAAG,EAAE;;AAGd,YAAA,WAAW,CAAC,OAAO,CAAC,EAAE,IAAG;AACvB,gBAAA,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AACrB,gBAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7C,gBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,IAAG,EAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7C,gBAAA,IAAI,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM;AAChD,gBAAA,IAAI,CAAC,KAAK;oBAAE,KAAK,GAAG,SAAS;;AACxB,oBAAA,KAAK,IAAI,GAAG,GAAG,SAAS;AAC/B,YAAA,CAAC,CAAC;AAEF,YAAA,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;AACjC,YAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7C,YAAA,KAAK,CAAC,OAAO,CAAC,EAAE,IAAG,EAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,KAAK,GAAG,MAAM;YAElB,IAAI,IAAI,GAAiC,QAAQ;AACjD,YAAA,IAAI,WAAW,IAAI,GAAG,EAAE;AACtB,gBAAA,IAAI,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE;gBAC/C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;gBAC1B,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;gBAC7B,IAAI,GAAG,QAAQ;YACjB;iBACK,IAAI,WAAW,EAAE;gBACpB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,IAAI,EAAE,EAAE,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC;gBAC7F,IAAI,GAAG,MAAM;YACf;YAEA,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACnF;IACF;AAEA;;;;;;;;;;;;;;AAcG;AACK,IAAA,eAAe,CAAC,GAAQ,EAAE,IAAY,EAAE,OAAqB,EAAE,gBAAyC,EAAA;QAC9G,IAAI,YAAY,GAAG,GAAG,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACrD,IAAI,WAAW,GAAG,GAAG,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACpD,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;AAEpC,QAAA,IAAI,MAAM,GAA6B,GAAG,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,GAAG,CAAC;AAEX,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;AAG/C,YAAA,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7E,gBAAA,OAAO,CAAC,GAAG,CAAC,mDAAmD,GAAG,GAAG,CAAC;gBACtE;YACF;AAEA,YAAA,IAAI,QAAQ,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG;AAC/B,YAAA,IAAI,KAAK,GAAG,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACvD,YAAA,IAAI,KAAK,GAAG,YAAY,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAEzD,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7E,YAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpG;IACF;AAEA;;AAEG;AACK,IAAA,SAAS,CAAC,EAAU,EAAE,OAAqB,EAAE,IAAW,EAAA;AAC9D,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;QACpD,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAa,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QACpF,IAAI,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IACnI;AAEQ,IAAA,eAAe,CAAC,EAAU,EAAE,OAAqB,EAAE,IAAW,EAAA;QACpE,IAAI,OAAO,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG;AAErC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAClB,YAAA,GAAG,IAAI,CAAA,EAAG,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,CAAA,CAAA,EAAI,CAAC,CAAC,KAAK,GAAG;QAC9C;AACA,QAAA,OAAO,IAAI,GAAG,GAAG,MAAM;AAEvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,GAAG,GAAG,EAAE;AACR,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AAClB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC9B,gBAAA,GAAG,IAAI,CAAA,EAAG,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,CAAA,CAAA,EAAI,GAAG,GAAG;YAC1C;AACA,YAAA,OAAO,IAAI,GAAG,GAAG,MAAM;QACzB;QAEA,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC5B,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3E,QAAA,OAAO,MAAM;IACf;;AAGQ,IAAA,MAAM,WAAW,CAAC,EAAU,EAAE,OAAqB,EAAE,IAAW,EAAA;AAEtE,QAAA,IAAI,MAAM,GAAe,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;AAClE,QAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAa,CAAC,EAAE,EAAE,IAAI,EAAE,oEAAoE,EAAE,CAAC;QACpH,IAAI,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACpI;AAEQ,IAAA,iBAAiB,CAAC,EAAU,EAAE,OAAqB,EAAE,IAAW,EAAA;QAEtE,IAAI,QAAQ,GAAG,EAAE;QACjB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAa,EAAE,CAAa,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AAE3E,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,YAAY,GAAG,EAAE;AAErB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,gBAAA,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;gBACrB,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAE3B,gBAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACtB,oBAAA,IAAI,CAAC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AAC9D,wBAAA,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACxG,4BAAA,GAAG;YACX;AACA,YAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;QAC7B;QAEA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC;;QAG7C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG,EAAG,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAE7F,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;QAChC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC;QAC5C,IAAI,MAAM,GAAe,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7F,QAAA,OAAO,MAAM;IACf;AAEA;;;;AAIG;IACI,MAAM,CAAC,KAAY,EAAE,MAAsB,EAAE,QAAgB,EAAE,IAAe,EAAE,aAAwB,EAAE,cAA6B,EAAA;;QAE5I,IAAI,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,OAAO,GAAG,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC;AAC1I,QAAA,CAAC,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC;AACjG,QAAA,OAAO,OAAO;IAChB;AAEA;;;;AAIG;IACI,YAAY,CAAC,KAAY,EAAE,MAAsB,EAAE,QAAgB,EAAE,IAAe,EAAE,aAAwB,EAAE,cAA6B,EAAA;;QAElJ,IAAI,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,OAAO,GAAG,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC;AAC1I,QAAA,OAAO,CAAC,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC;IACtH;wGA5dW,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA;;4FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACxMlC;AAcA;;AAEG;MAEU,gBAAgB,CAAA;AAmDE,IAAA,UAAA;AAAgD,IAAA,WAAA;AAjD3E;;AAEG;AACK,IAAA,GAAG,GAAG;AACV,QAAA,iIAAiI,EAAE;AAC/H,YAAA,OAAO,EAAE,iIAAiI;AAC1I,YAAA,OAAO,EAAE;AACZ,SAAA;AACD,QAAA,+CAA+C,EAAE;AAC7C,YAAA,OAAO,EAAE,+CAA+C;AACxD,YAAA,OAAO,EAAE;AACZ,SAAA;AACD,QAAA,+CAA+C,EAAE;AAC7C,YAAA,OAAO,EAAE,+CAA+C;AACxD,YAAA,OAAO,EAAE;AACZ,SAAA;AACD,QAAA,+CAA+C,EAAC;AAC5C,YAAA,OAAO,EAAE,+CAA+C;AACxD,YAAA,OAAO,EAAE;AACZ,SAAA;AACD,QAAA,sCAAsC,EAAE;AACpC,YAAA,OAAO,EAAE,sCAAsC;AAC/C,YAAA,OAAO,EAAE;AACZ,SAAA;AACD,QAAA,qBAAqB,EAAE;AACnB,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,OAAO,EAAE;AACZ,SAAA;AACD,QAAA,gKAAgK,EAAE;AAC9J,YAAA,OAAO,EAAE,gKAAgK;AACzK,YAAA,OAAO,EAAE;AACZ,SAAA;AACD,QAAA,SAAS,EAAE;AACP,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,OAAO,EAAE;AACZ,SAAA;AACD,QAAA,QAAQ,EAAE;AACN,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,OAAO,EAAE;AACZ,SAAA;KACJ;IAEO,SAAS,GAAY,IAAI;AAEjC;;;;AAIG;AACH,IAAA,WAAA,CAA2B,UAA0B,EAAsB,WAA6B,EAAuB,UAAkB,EAAA;QAAtH,IAAA,CAAA,UAAU,GAAV,UAAU;QAAsC,IAAA,CAAA,WAAW,GAAX,WAAW;AAClF,QAAA,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC;IAClD;AAEA;;;;;;AAMG;AACI,IAAA,MAAM,YAAY,CAAC,KAAyB,EAAE,kBAA4D,EAAA;AAC3G,QAAA,IAAG,CAAC,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,OAAO,CAAC,GAAG,CAAC,2IAA2I,CAAC;YACxJ,kBAAkB,CAAC,EAAE,CAAC;YACtB;QACJ;QAEA,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,GAAI,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,OAAO;AAElG,QAAA,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;YAE9CC,IAAI,CAAC,IAAI,CAAC;gBACN,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC;gBAC9C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,gKAAgK,CAAC,CAAC,MAAM,CAAC;AACxL,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,IAAI,EAAE,SAAS;gBACf,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;gBAC9C,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AAC5C,gBAAA,gBAAgB,EAAE,IAAI;AACtB,gBAAA,WAAW,EAAE;AACT,oBAAA,aAAa,EAAE,iBAAiB;AAChC,oBAAA,YAAY,EAAE,uCAAuC;AACrD,oBAAA,SAAS,EAAE,UAAU;AACxB,iBAAA;AACD,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,iBAAiB,EAAE,KAAK;AACxB,gBAAA,cAAc,EAAE,CAAC,KAAK,KAAI;AACxB,oBAAA,IAAI,CAAC,KAAK;wBACR,OAAO,IAAI,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,MAAM,CAAC;gBACnE;AACD,aAAA,CAAC,CAAC,IAAI,CAAC,CAAC,IAAG;AACR,gBAAA,IAAI,CAAC,CAAC,WAAW,EAAE;AACf,oBAAA,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC;oBAC3E,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,CAAC;gBAC/D;AACJ,YAAA,CAAC,CAAC;YACF;QACN;AAEA,QAAA,IAAU,MAAO,CAAC,aAAa,EAAE;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC;YACzD,IAAI,IAAI,GAAS,MAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;YACtD,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC;QAC5D;AAEK,aAAA,IAAU,MAAO,CAAC,SAAS,CAAC,SAAS,EAAE;AACxC,YAAA,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC;AACzD,YAAA,MAAO,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAG;AAChF,gBAAA,IAAI,EAAE,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,EAC9D;AACI,oBAAA,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC;AACxE,oBAAA,IAAI,kBAAkB;wBAAE,kBAAkB,CAAC,EAAE,CAAC;oBAC9C;gBACJ;AAEA,gBAAA,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC;AAC/E,gBAAA,MAAO,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ;AACrC,qBAAA,IAAI,CAAC,CAAC,CAAS,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC;qBACzE,KAAK,CAAC,CAAC,GAAQ,KAAK,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;AACzI,YAAA,CAAC,CAAC;QACN;IACJ;;AAGQ,IAAA,kBAAkB,CAAC,aAAqB,EAAE,KAAyB,EAAE,kBAA4B,EAAA;AACrG,QAAA,OAAO,CAAC,GAAG,CAAC,qDAAqD,GAAG,aAAa,CAAC;AAClF,QAAA,IAAI,KAAK,GAAG,KAAK,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;AAChE,YAAA,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,EAAE;AACnE,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,mCAAA,EAAsC,KAAK,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC;AACpF,QAAA,IAAI,kBAAkB;YAAE,kBAAkB,CAAC,KAAK,CAAC;IACrD;AAEA;;;;;;AAMG;AACK,IAAA,iBAAiB,CAAC,IAAY,EAAA;AAClC,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;AAE7B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC3D,YAAA,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;AAElC,QAAA,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;IACpC;AAEA;;;;;;AAMG;AACK,IAAA,kBAAkB,CAAC,IAAY,EAAA;QACnC,IAAI,GAAG,GAAe,EAAE;AACxB,QAAA,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;;AAGhG,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAChC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACpD,QAAA,OAAO,GAAG;IACd;AAEA;;;;AAIG;IACI,MAAM,mBAAmB,CAAC,IAAY,EAAA;AACxC,QAAA,IAAG,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,OAAO,CAAC,GAAG,CAAC,2IAA2I,CAAC;YACxJ;QACJ;QAEA,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,GAAI,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,OAAO;QAElG,IAAI,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;AAkBjD,QAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AACjC,QAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG;AACxB,QAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG;;;AAIzB,QAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;AAC5B,QAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;;AAG7B,QAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;;AAG5B,QAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AAC9B,QAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC/B,QAAA,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM;;AAGjC,QAAA,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,aAAa;AAEzC,QAAA,QAAQ,CAAC,KAAK,GAAG,IAAI;AAErB,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QACnC,QAAQ,CAAC,KAAK,EAAE;QAChB,QAAQ,CAAC,MAAM,EAAE;AAEjB,QAAA,IAAI;YACA,IAAI,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;AAC7C,YAAA,IAAG,CAAC,UAAU;AACV,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,MAAM,CAAC,CAAC;QACtG;QAAE,OAAO,GAAG,EAAE;AACV,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,GAAE,GAAG,CAAC;QAC9G;AAEA,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IACvC;AAzOS,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,6FAmDyF,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAnDpH,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADJ,MAAM,EAAA,CAAA;;4FAClB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAoD4B;;0BAAmD,MAAM;2BAAC,WAAW;;;ACrEjI;;AAEG;MACU,UAAU,CAAA;;AAGnB,IAAA,WAAW;;AAEX,IAAA,OAAO;;AAEP,IAAA,QAAQ;;AAER,IAAA,SAAS;;AAET,IAAA,KAAK;;AAEL,IAAA,QAAQ;;AAER,IAAA,UAAU;;AAEV,IAAA,OAAO;;AAEP,IAAA,MAAM;AACT;;ACvBD;;AAEG;MACU,UAAU,CAAA;AAErB;;AAEG;AACH,IAAA,KAAK;AAEL;;AAEG;AACH,IAAA,GAAG;AAEH;;AAEG;AACH,IAAA,KAAK;AAEL;;AAEG;AACH,IAAA,OAAO;AAEP;;AAEG;AACH,IAAA,IAAI;AACL;;AC7BD;;AAEG;MACU,WAAW,CAAA;AAEtB;;AAEG;AACH,IAAA,UAAU;AACX;;ACTD;IAEY;AAAZ,CAAA,UAAY,mBAAmB,EAAA;;AAE3B,IAAA,mBAAA,CAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;AACd,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA;;ACF/B;MAEa,eAAe,CAAA;AAOL,IAAA,IAAA;AAAkB,IAAA,OAAA;AANrC;;;;;AAKG;IACH,WAAA,CAAmB,IAAS,EAAS,OAAY,EAAA;QAA9B,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAc,IAAA,CAAA,OAAO,GAAP,OAAO;IAAS;AACxD;;ACVD;AASA;MAEa,eAAe,CAAA;;IAGjB,SAAS,GAA+C,EAAE;;AAE1D,IAAA,QAAQ,GAA6B,IAAI,OAAO,EAAmB;AAE1E;;;;;;AAMG;AACI,IAAA,IAAI,CAAC,WAAgB,EAAE,OAAY,EAAE,SAAkB,EAAA;QAC1D,IAAI,GAAG,GAAG,IAAI,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC;;;QAInD,IAAI,CAAC,SAAS,EAAE;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3B;aACK;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,wFAAwF,GAAG,SAAS,GAAG,0FAA0F,CAAC;;gBAE/M,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3C;IACJ;AAEA;;;;AAIG;AACI,IAAA,QAAQ,CAAC,GAAW,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACnB,YAAA,MAAM,2FAA2F;QACrG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,EAAmB;IACxD;wGAvCS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADH,MAAM,EAAA,CAAA;;4FAClB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACVhC;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"esfaenza-extensions.mjs","sources":["../../../projects/extensions/src/lib/tokens.ts","../../../projects/extensions/src/lib/services/extensions.dates.service.ts","../../../projects/extensions/src/lib/pipes/loc_date.pipe.ts","../../../projects/extensions/src/lib/modules/extensions.module.ts","../../../projects/extensions/src/lib/services/extensions.hashing.service.ts","../../../projects/extensions/src/lib/services/extensions.messages.service.ts","../../../projects/extensions/src/lib/services/extensions.embedding.service.ts","../../../projects/extensions/src/lib/services/extensions.base.ts","../../../projects/extensions/src/lib/models/ExportConsts.ts","../../../projects/extensions/src/lib/models/TypeCode.ts","../../../projects/extensions/src/lib/services/extensions.utilities.service.ts","../../../projects/extensions/src/lib/services/extensions.exports.service.ts","../../../projects/extensions/src/lib/services/extensions.clipboard.service.ts","../../../projects/extensions/src/lib/models/CallResult.ts","../../../projects/extensions/src/lib/models/CsvHeaders.ts","../../../projects/extensions/src/lib/models/GenericItem.ts","../../../projects/extensions/src/lib/models/InboundMessageTypes.ts","../../../projects/extensions/src/lib/models/InterComMessage.ts","../../../projects/extensions/src/lib/services/extensions.intercom.service.ts","../../../projects/extensions/src/public-api.ts","../../../projects/extensions/src/esfaenza-extensions.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Token che indica il prefisso delle searchView che serve per storicizzarle evitando di tirarsi in memoria anche tutti gli oggetti. Se vuoto viene supposto 'Hot'\r\n */\r\nexport const APPSEARCH_PREFIX: InjectionToken<string> = new InjectionToken<string>('APPSEARCH_PREFIX');\r\n\r\n/**\r\n * Token che indica se i metodi di estensione che utilizzano le date permettono l'uso di date in utc\r\n */\r\nexport const EXT_ALLOW_UTC: InjectionToken<boolean> = new InjectionToken<boolean>('EXT_ALLOW_UTC');\r\n\r\n/** Modalità di Debug */\r\nexport const EXT_DEBUG_MODE: InjectionToken<boolean> = new InjectionToken<boolean>('EXT_DEBUG_MODE');","// Angular\r\nimport { Injectable, Inject, Optional } from \"@angular/core\";\r\n\r\n// Es\r\nimport { BaseLocalization } from \"@esfaenza/localizations\";\r\n\r\n// Modelli\r\nimport { EXT_ALLOW_UTC } from \"../tokens\";\r\n\r\n// Librerie\r\nimport { first } from \"rxjs/operators\";\r\nimport { Dayjs } from \"dayjs\";\r\nimport { ReplaySubject } from \"rxjs\";\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\n declare var dayjs: any;\r\n\r\n /**\r\n * Service che fornisce dei metodi di estensione per la gestione/manipolazione delle date\r\n */\r\n @Injectable({providedIn: \"root\"})\r\nexport class DateService {\r\n \r\n public Initialized: ReplaySubject<void> = new ReplaySubject<void>();\r\n\r\n /**\r\n * Oggetto statico di localizzazione per i messaggi di questa Service\r\n */\r\n private loc = {\r\n \"SMALL_DATE_FORMAT\": { 'en-US': \"MM/DD/YYYY\", 'it-IT': \"DD/MM/YYYY\" },\r\n \"FULL_DATE_FORMAT\": { 'en-US': \"MM/DD/YYYY HH:mm:ss\", 'it-IT': \"DD/MM/YYYY HH:mm:ss\" },\r\n \"FULL_DATE_FORMAT_NO_SS\": { 'en-US': \"MM/DD/YYYY HH:mm\", 'it-IT': \"DD/MM/YYYY HH:mm\" },\r\n \"SMALL_DATE_DISPLAY_FORMAT\": { 'en-US': \"DD/MM/YYYY\", 'it-IT': \"DD/MM/YYYY\" },\r\n \"SMALL_DATE_DISPLAY_FORMAT_WITH_HOUR\": { 'en-US': \"DD/MM/YYYY HH\", 'it-IT': \"DD/MM/YYYY HH\" },\r\n \"SMALL_DATE_DISPLAY_FORMAT_WITH_MINUTE\": { 'en-US': \"DD/MM/YYYY HH:mm\", 'it-IT': \"DD/MM/YYYY HH:mm\" },\r\n \"FULL_DATE_DISPLAY_FORMAT\": { 'en-US': \"DD/MM/YYYY HH:mm:ss\", 'it-IT': \"DD/MM/YYYY HH:mm:ss\" },\r\n \"FULL_DATE_DISPLAY_FORMAT_NO_SS\": { 'en-US': \"DD/MM/YYYY HH:mm\", 'it-IT': \"DD/MM/YYYY HH:mm\" }\r\n };\r\n\r\n /**\r\n * Oggetto di configurazione per tenere da conto le informazioni sui formati\r\n */\r\n private cfg = {\r\n fulldate: \"\",\r\n fulldateDisplay: \"\",\r\n smallDate: \"\",\r\n fulldateNoSS: \"\",\r\n smallDateWithH: \"\",\r\n smallDateWithM: \"\",\r\n fulldateDisplayNoSS: \"\"\r\n }\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n public constructor(@Optional() private locProvider: BaseLocalization, @Optional() @Inject(EXT_ALLOW_UTC) private allowUtc: boolean) {\r\n\r\n this.init();\r\n }\r\n\r\n\r\n\r\n async init(){\r\n let LOCALE = this.locProvider ? await this.locProvider.Locale.pipe(first()).toPromise() : 'it-IT';\r\n \r\n this.cfg.smallDate = this.loc[\"SMALL_DATE_FORMAT\"][LOCALE];\r\n this.cfg.fulldate = this.loc[\"FULL_DATE_FORMAT\"][LOCALE];\r\n this.cfg.fulldateNoSS = this.loc[\"FULL_DATE_FORMAT_NO_SS\"][LOCALE];\r\n this.cfg.fulldateDisplay = this.loc[\"FULL_DATE_DISPLAY_FORMAT\"][LOCALE];\r\n this.cfg.fulldateDisplayNoSS =this.loc[\"FULL_DATE_DISPLAY_FORMAT_NO_SS\"][LOCALE];\r\n this.cfg.smallDate = this.loc[\"SMALL_DATE_DISPLAY_FORMAT\"][LOCALE];\r\n this.cfg.smallDateWithH = this.loc[\"SMALL_DATE_DISPLAY_FORMAT_WITH_HOUR\"][LOCALE];\r\n this.cfg.smallDateWithM = this.loc[\"SMALL_DATE_DISPLAY_FORMAT_WITH_MINUTE\"][LOCALE];\r\n\r\n this.Initialized.next();\r\n }\r\n /**\r\n * Aggiusta una data in \"istante finale\" in base a qual è la parte di data significativa.\r\n * \r\n * Es. Istante finale delle ore: 05/10/1992 --> 04/10/1992 24:00(:00)\r\n * \r\n * @param {any} date Data qualsiasi (Date, stringa, dayjs...), verrà ricondotta ad un oggetto dayJs\r\n * @param {'day' | 'hour' | 'minute'} timepart Parte significativa della data\r\n * @param {boolean} printSeconds Indica se effettuare la stampa dei secondi o no\r\n */\r\n public adjustDateToFinalInstant(date: any, timepart: 'day' | 'hour' | 'minute', printSeconds: boolean = true): string {\r\n let mydt = this.getDateConvertion(date);\r\n if (mydt == null) return \"FE: Not a Date\";\r\n\r\n let isZeroTime = mydt.startOf(timepart).valueOf() === mydt.valueOf();\r\n if (!isZeroTime) {\r\n if (timepart == \"day\" && mydt.subtract(1, \"hour\").hour() == mydt.hour()) {\r\n // Se l'ora precedente è lo stesso orario dell'ora attuale l'istante finale dev'essere mandato avanti di 1\r\n mydt = mydt.add(1, \"hour\");\r\n }\r\n\r\n return printSeconds ? mydt.format(this.cfg.fulldateDisplay) : mydt.format(this.cfg.fulldateDisplayNoSS);\r\n }\r\n\r\n let tmpValue = mydt.subtract(1, timepart);\r\n let value = \"\";\r\n\r\n // Istante finale delle ore: 05/10/1992 --> 04/10/1992 24:00(:00)\r\n if (timepart == 'day')\r\n value = tmpValue.format(this.cfg.smallDate) + \" 24:00\" + (printSeconds ? ':00' : '');\r\n\r\n // Istante finale dei minuti: giorno 05/10/1992 04:00:00 --> 05/10/1992 03:60(:00)\r\n else if (timepart == 'hour')\r\n value = tmpValue.format(this.cfg.smallDateWithH) + \":60\" + (printSeconds ? ':00' : '');\r\n\r\n // Istante finale dei secondi: giorno 05/10/1992 04:10:00 --> 05/10/1992 04:09:60\r\n else if (timepart == 'minute')\r\n value = tmpValue.format(this.cfg.smallDateWithM) + \":60\";\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Funzione che effettua l'ordinamento fra 2 date in base alla direzione specificata\r\n * \r\n * @param {any} a Prima data per il confronto\r\n * @param {any} b Seconda data per il confronto\r\n * @param {'asc' | 'desc'} direction Direzione rispetto a cui ordinare le due date\r\n * \r\n * @returns {number} 0 se le date sono uguali, 1 se la data A deve venire logicamente prima della data B, -1 altrimenti\r\n */\r\n public dateSort(a: any, b: any, direction: 'asc' | 'desc'): number {\r\n if (a < b) return direction == 'asc' ? 1 : -1;\r\n else if (a > b) return direction == 'asc' ? -1 : 1;\r\n\r\n // con a uguale a b\r\n return 0;\r\n }\r\n\r\n /**\r\n * Effettua il trim dei secondi da una data espressa come stringa\r\n * \r\n * @param {string} value Data espressa come stringa\r\n * \r\n * @returns {string} Data senza i secondi\r\n */\r\n public trimSeconds(value: string): string {\r\n //I numeri mangiati da dayjs spesso vengono ricondotti a date vere. Mi assicuro che se ci sono solo numeri proseguo\r\n if (!isNaN(<any>value))\r\n return value;\r\n\r\n //Se non ho qualcosa del tipo XX/YY/ZZZZ aa:bb:cc di sicuro non è una data che mi interessa\r\n if (!/^\\d\\d\\/\\d\\d\\/\\d\\d\\d\\d \\d\\d:\\d\\d:\\d\\d$/g.test(value))\r\n return value;\r\n\r\n //In questo caso mi arrivano valori che devono essere stampati as-is, solo tagliando i secondi\r\n return \"'\" + value.substr(0, value.length - 3);\r\n }\r\n\r\n /**\r\n * Data una lista di date Da e una lista di date A restituisce un oggetto rappresentante il range che include tutte le date passate\r\n * \r\n * @param {any[]} fromDates Lista dei Da\r\n * @param {any[]} toDates Lista dei A\r\n * \r\n * @returns {{ from: any, to: any }} Range di date Da - A che include tutti i valori di **fromDates** e **toDates**\r\n */\r\n public getMinMaxDatesRange(fromDates: any[], toDates: any[]): { from: any, to: any } {\r\n let datesFroms: any[] = [];\r\n let datesTo: any[] = [];\r\n\r\n for(let i = 0; i < fromDates.length; i++)\r\n {\r\n let d = fromDates[i];\r\n var convertion = this.getDateConvertion(d);\r\n if (convertion)\r\n datesFroms.push(convertion);\r\n }\r\n\r\n for(let i = 0; i < toDates.length; i++)\r\n {\r\n let d = toDates[i];\r\n var convertion = this.getDateConvertion(d);\r\n if (convertion)\r\n datesTo.push(convertion);\r\n }\r\n\r\n return { from: dayjs.min(datesFroms), to: dayjs.max(datesTo) };\r\n }\r\n\r\n /**\r\n * Ottiene la conversione di una data in qualsiasi formato al formato standard DayJs\r\n * \r\n * @param {any} date Oggetto rappresentante una data. Potrebbe essere una stringa, un Date o già un DayJs\r\n * @param {boolean} useUtc Indica se usare l'estensione utc di Dayjs per parsare la data o no\r\n * @param {string} format formato in cui emettere la conversione\r\n * \r\n * @returns {any} Data in modalità {format}\r\n */\r\n public getDateConvertion(date: any, useUtc: boolean = false, format: 'date' | 'timestring' | 'dayjs' = 'dayjs', timestringSmall: boolean = true): any {\r\n if (!date)\r\n return null;\r\n\r\n if (this.isDayJs(date))\r\n return this.formattedDayjs(date, format, timestringSmall);\r\n\r\n if(this.isJsDate(date))\r\n return this.formattedDayjs(useUtc ? dayjs.utc(date): dayjs(date), format, timestringSmall);\r\n\r\n // Se non c'è la proprietà length vuol dire che non è una stringa e a questo punto non ho idea di che minchia sia\r\n let length = date.length;\r\n if (!length)\r\n return null;\r\n\r\n if (useUtc && !this.allowUtc)\r\n throw \"@esfaenza/extensions: Richiesta data UTC ma da configurazione la libreria non lo supporta\";\r\n\r\n // Per risparmiare chiamate a tentoni, in base alla lunghezza della stringa chiamo direttamente il metodo giusto, \r\n // controllando poi che mi generi una data come me la aspetto io\r\n let tryThis: Dayjs = null;\r\n let toCall = useUtc ? dayjs.utc : dayjs;\r\n\r\n // Se la data contiene la lettera \"T\" vuol dire che è una data del tipo 2020-10-15T00:00:00, direttamente parsabile dal dayjs col locale corretto.\r\n // Per il resto mi baso sulla lunghezza della stringa\r\n if ((<string>date).includes(\"T\"))\r\n tryThis = toCall(date);\r\n else if (length == this.cfg.fulldate.length)\r\n tryThis = toCall(date, this.cfg.fulldate);\r\n else if (length == this.cfg.smallDate.length)\r\n tryThis = toCall(date, this.cfg.smallDate);\r\n else if (length == this.cfg.fulldateNoSS.length)\r\n tryThis = toCall(date, this.cfg.fulldateNoSS)\r\n\r\n if (tryThis && tryThis.isValid && tryThis.isValid())\r\n return this.formattedDayjs(tryThis, format, timestringSmall);\r\n\r\n // Se niente funziona, null. \r\n // Ricondurre l'Input ad una data non è possibile.\r\n return null;\r\n }\r\n\r\n private formattedDayjs(dayjs: Dayjs, format: \"dayjs\" | \"date\" | \"timestring\", timestringSmall){\r\n return format == 'dayjs' ? dayjs : format == 'date' ? dayjs.toDate() : this.getFormatted(dayjs, timestringSmall, false);\r\n }\r\n \r\n /**\r\n * Helper che restituisce **true** qualora l'oggetto passato fosse una data vera e propria, **false** altrimenti\r\n * \r\n * @param {any} check Oggetto da controllare\r\n * \r\n * @returns {boolean} Indicazione se l'oggetto è un vero Date di Javascript o no\r\n */\r\n private isJsDate(check: any): boolean {\r\n return check && Object.prototype.toString.call(check) === \"[object Date]\" && !isNaN(check);\r\n }\r\n\r\n /**\r\n * Helper che restituisce **true** qualora l'oggetto passato fosse un DayJs vero e proprio, **false** altrimenti\r\n * \r\n * @param {any} check Oggetto da controllare\r\n * @returns {boolean} Indicazione se l'oggetto è un vero DayJs o no\r\n */\r\n private isDayJs(check: any): boolean {\r\n // Non uso instanceof perché sarebbe estremamente più lento\r\n // Non uso nemmeno isDayjs() della libreria Dayjs dato che ha lo stesso problema: https://github.com/iamkun/dayjs/blob/06f88f425828b1ce96b737332d25145a95a4ee9d/src/index.js#L9\r\n return check.$D !== undefined && check.$M !== undefined && check.$y !== undefined;\r\n }\r\n\r\n /**\r\n * Ottiene la formattazione di una data in base alla versione richiesta \"small\" o \"long\" e a se stampare o meno i secondi\r\n * \r\n * @param {any} date Oggetto rappresentante una data. Potrebbe essere una stringa, un Date o già un DayJs\r\n * @param {boolean} small Indica se formattarla con un formato breve (se **true**) o un formato più lungo (se **false**)\r\n * \r\n * @returns {string} Data formattata nel formato richiesto\r\n */\r\n public getFormatted(date: any, small: boolean, seconds: boolean): string {\r\n var date = this.getDateConvertion(date);\r\n if (!date) return null;\r\n\r\n return date.format(small ? this.cfg.smallDate : seconds ? this.cfg.fulldateDisplay : this.cfg.fulldateDisplayNoSS);\r\n }\r\n}","// Angular\r\nimport { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { DateService } from \"../services/extensions.dates.service\";\r\n\r\n/**\r\n * Pipe che permette di formattare una data in base al formato specificato. Utilizza il **DateService** di **@esfaenza/extensions** per ricondurre l'input a una data valida\r\n */\r\n@Pipe({\r\n name: \"loc_date\", pure: true,\r\n standalone: false\r\n})\r\nexport class LocDatePipe implements PipeTransform {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private dts: DateService) { }\r\n\r\n /**\r\n * Trasformazione della data in input in base al formato richiesto\r\n * \r\n * @param {any} value Valore da ricondurre ad una data e formattare\r\n * @param {string} format Formato in output della data da visualizzare\r\n * \r\n * @returns {string} Data formattata in base al formato\r\n */\r\n transform(value: any, format: string = \"DD/MM/YYYY\"): string {\r\n if (value == null || value === \"\") return null;\r\n\r\n var detatchedValue = JSON.parse(JSON.stringify(value));\r\n var dt = this.dts.getDateConvertion(detatchedValue);\r\n return dt.format(format);\r\n }\r\n}","// Angular\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\n// Esfaenza\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\n\r\n// Modelli\r\nimport { ExtensionsModuleConfig } from '../models/ExtensionsModuleConfig';\r\nimport { APPSEARCH_PREFIX, EXT_ALLOW_UTC, EXT_DEBUG_MODE } from '../tokens';\r\n\r\n// Pipes\r\nimport { LocDatePipe } from '../pipes/loc_date.pipe';\r\n\r\n@NgModule({\r\n imports: [LocalizationModule],\r\n declarations: [LocDatePipe],\r\n exports: [LocDatePipe]\r\n})\r\nexport class ExtensionsModule {\r\n static forRoot(config?: ExtensionsModuleConfig): ModuleWithProviders<ExtensionsModule> {\r\n return {\r\n ngModule: ExtensionsModule,\r\n providers: [\r\n { provide: APPSEARCH_PREFIX, useValue: config?.appsearch_prefix || 'Hot'},\r\n { provide: EXT_ALLOW_UTC, useValue: config?.allow_utc == null ? false : config?.allow_utc},\r\n { provide: EXT_DEBUG_MODE, useValue: config?.debugMode || false },\r\n ]\r\n };\r\n }\r\n}","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n/**\r\n * Service che fornisce alcuni semplici funzioni di Hashing / GUID / ecc...\r\n */\r\n@Injectable({providedIn: \"root\"})\r\nexport class HashingService {\r\n\r\n /**\r\n * Generazione di un GUID pseudo-univoco\r\n * \r\n * @returns {string} il GUID generato\r\n */\r\n public getGUID(): string {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, c => {\r\n var r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n /**\r\n * Calcolo dell'hash su un oggetto\r\n * \r\n * @param {any} o Oggetto di cui calcolare l'hash\r\n * @param {number} level Livello di ricorsione nel caso venga effettuato l'hash di un oggetto che contiene altri oggetti\r\n * @param {boolean} navigateFullDepth Indica se navigare l'oggetto per l'intera lunghezza. In caso contrario si ferma al secondo livello\r\n * \r\n * @returns {string} Hash generato per l'oggetto in questione\r\n */\r\n public hashObject(o: any, level: number = 0, navigateFullDepth: boolean = false, precise: boolean = false): string {\r\n var strDef = this.stringify(o, level, navigateFullDepth);\r\n var hash: string = precise ? this.md5(strDef) : this.simpleHash(strDef);\r\n return hash;\r\n }\r\n\r\n /**\r\n * Hash più semplice e più veloce dell'md5, ma meno sicuro\r\n * \r\n * Vedi https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript\r\n *\r\n * @param {string} str Stringa di cui calcolare l'hash\r\n */\r\n private simpleHash(str: string, seed = 0): string {\r\n let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;\r\n for (let i = 0, ch; i < str.length; i++) {\r\n ch = str.charCodeAt(i);\r\n h1 = Math.imul(h1 ^ ch, 2654435761);\r\n h2 = Math.imul(h2 ^ ch, 1597334677);\r\n }\r\n h1 = Math.imul(h1 ^ (h1>>>16), 2246822507) ^ Math.imul(h2 ^ (h2>>>13), 3266489909);\r\n h2 = Math.imul(h2 ^ (h2>>>16), 2246822507) ^ Math.imul(h1 ^ (h1>>>13), 3266489909);\r\n return (4294967296 * (2097151 & h2) + (h1>>>0)).toString();\r\n }\r\n\r\n /**\r\n * Blacklist dei tipi da ignorare quando si effettua l'hashing degli oggetti\r\n */\r\n private objBlacklist = {\r\n \"NgForm\": true, \"ElementRef\": true, \"ExtensionsService\": true, \"ToastrService\": true, \"LocaleService\": true, \"AppState\": true, \"Router\": true,\r\n \"ActivatedRoute\": true, \"HTTPService\": true, \"Location\": true, \"CanvasComponent\": true, \"ModalDirective\": true, \"ChangeDetectorRef\": true,\r\n \"DateService\": true, \"EventEmitter\": true, \"ViewRef_\": true, \"Subscriber\": true, \"ItemLocalization\": true\r\n };\r\n\r\n /**\r\n * Genera una stringa che identifica univocamente l'oggetto in questione\r\n * \r\n * @param {any} o Oggetto di cui calcolare la stringa univoca\r\n * @param {number} level Livello di ricorsione nel caso venga effettuato l'hash di un oggetto che contiene altri oggetti\r\n * @param {boolean} navigateFullDepth Indica se navigare l'oggetto per l'intera lunghezza. In caso contrario si ferma al secondo livello\r\n */\r\n private stringify(o: any, level: number, navigateFullDepth: boolean) {\r\n var i: any, r: any;\r\n if (o === null) return \"n\";\r\n if (o === true) return \"t\";\r\n if (o === false) return \"f\";\r\n if (o instanceof Date) return 'd:'+ o.valueOf().toString();\r\n i = typeof o;\r\n if (i === \"string\") return \"s:\" + o;\r\n if (i === \"number\") return \"n:\" + o;\r\n if (o instanceof Function) return \"m:\" + o.toString();\r\n if (o instanceof Array) {\r\n r = [];\r\n for (i = 0; i < o.length; i++) {\r\n let res = this.stringify(o[i], level, navigateFullDepth);\r\n if (res) r.push(res);\r\n }\r\n return r.length > 0 ? \"a:\" + r.join(\";\") : \"\";\r\n }\r\n r = [];\r\n\r\n //Se è oggetto, escludo tutti quelli di sistema/inutili\r\n if (o) {\r\n var name = o.__proto__.constructor.name;\r\n\r\n if (!this.objBlacklist[name]) {\r\n for (i in o) {\r\n if (o.hasOwnProperty(i) && (level <= 2 || navigateFullDepth)) {\r\n let res = this.stringify(o[i], level + 1, navigateFullDepth);\r\n if (res) r.push(i + \":\" + res);\r\n }\r\n }\r\n }\r\n }\r\n return r.length > 0 ? \"o:\" + r.join(\";\") : \"\";\r\n }\r\n\r\n /**\r\n * Data una stringa restituisce l'md5\r\n * \r\n * @param {string} s Stringa di cui calcolare l'md5\r\n * @returns {string} md5 della stringa **s**\r\n */\r\n public md5(s: string): string {\r\n return this.hex(this.md51(s));\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private md5cycle(x, k) {\r\n var a = x[0], b = x[1], c = x[2], d = x[3];\r\n\r\n a = this.ff(a, b, c, d, k[0], 7, -680876936);\r\n d = this.ff(d, a, b, c, k[1], 12, -389564586);\r\n c = this.ff(c, d, a, b, k[2], 17, 606105819);\r\n b = this.ff(b, c, d, a, k[3], 22, -1044525330);\r\n a = this.ff(a, b, c, d, k[4], 7, -176418897);\r\n d = this.ff(d, a, b, c, k[5], 12, 1200080426);\r\n c = this.ff(c, d, a, b, k[6], 17, -1473231341);\r\n b = this.ff(b, c, d, a, k[7], 22, -45705983);\r\n a = this.ff(a, b, c, d, k[8], 7, 1770035416);\r\n d = this.ff(d, a, b, c, k[9], 12, -1958414417);\r\n c = this.ff(c, d, a, b, k[10], 17, -42063);\r\n b = this.ff(b, c, d, a, k[11], 22, -1990404162);\r\n a = this.ff(a, b, c, d, k[12], 7, 1804603682);\r\n d = this.ff(d, a, b, c, k[13], 12, -40341101);\r\n c = this.ff(c, d, a, b, k[14], 17, -1502002290);\r\n b = this.ff(b, c, d, a, k[15], 22, 1236535329);\r\n\r\n a = this.gg(a, b, c, d, k[1], 5, -165796510);\r\n d = this.gg(d, a, b, c, k[6], 9, -1069501632);\r\n c = this.gg(c, d, a, b, k[11], 14, 643717713);\r\n b = this.gg(b, c, d, a, k[0], 20, -373897302);\r\n a = this.gg(a, b, c, d, k[5], 5, -701558691);\r\n d = this.gg(d, a, b, c, k[10], 9, 38016083);\r\n c = this.gg(c, d, a, b, k[15], 14, -660478335);\r\n b = this.gg(b, c, d, a, k[4], 20, -405537848);\r\n a = this.gg(a, b, c, d, k[9], 5, 568446438);\r\n d = this.gg(d, a, b, c, k[14], 9, -1019803690);\r\n c = this.gg(c, d, a, b, k[3], 14, -187363961);\r\n b = this.gg(b, c, d, a, k[8], 20, 1163531501);\r\n a = this.gg(a, b, c, d, k[13], 5, -1444681467);\r\n d = this.gg(d, a, b, c, k[2], 9, -51403784);\r\n c = this.gg(c, d, a, b, k[7], 14, 1735328473);\r\n b = this.gg(b, c, d, a, k[12], 20, -1926607734);\r\n\r\n a = this.hh(a, b, c, d, k[5], 4, -378558);\r\n d = this.hh(d, a, b, c, k[8], 11, -2022574463);\r\n c = this.hh(c, d, a, b, k[11], 16, 1839030562);\r\n b = this.hh(b, c, d, a, k[14], 23, -35309556);\r\n a = this.hh(a, b, c, d, k[1], 4, -1530992060);\r\n d = this.hh(d, a, b, c, k[4], 11, 1272893353);\r\n c = this.hh(c, d, a, b, k[7], 16, -155497632);\r\n b = this.hh(b, c, d, a, k[10], 23, -1094730640);\r\n a = this.hh(a, b, c, d, k[13], 4, 681279174);\r\n d = this.hh(d, a, b, c, k[0], 11, -358537222);\r\n c = this.hh(c, d, a, b, k[3], 16, -722521979);\r\n b = this.hh(b, c, d, a, k[6], 23, 76029189);\r\n a = this.hh(a, b, c, d, k[9], 4, -640364487);\r\n d = this.hh(d, a, b, c, k[12], 11, -421815835);\r\n c = this.hh(c, d, a, b, k[15], 16, 530742520);\r\n b = this.hh(b, c, d, a, k[2], 23, -995338651);\r\n\r\n a = this.ii(a, b, c, d, k[0], 6, -198630844);\r\n d = this.ii(d, a, b, c, k[7], 10, 1126891415);\r\n c = this.ii(c, d, a, b, k[14], 15, -1416354905);\r\n b = this.ii(b, c, d, a, k[5], 21, -57434055);\r\n a = this.ii(a, b, c, d, k[12], 6, 1700485571);\r\n d = this.ii(d, a, b, c, k[3], 10, -1894986606);\r\n c = this.ii(c, d, a, b, k[10], 15, -1051523);\r\n b = this.ii(b, c, d, a, k[1], 21, -2054922799);\r\n a = this.ii(a, b, c, d, k[8], 6, 1873313359);\r\n d = this.ii(d, a, b, c, k[15], 10, -30611744);\r\n c = this.ii(c, d, a, b, k[6], 15, -1560198380);\r\n b = this.ii(b, c, d, a, k[13], 21, 1309151649);\r\n a = this.ii(a, b, c, d, k[4], 6, -145523070);\r\n d = this.ii(d, a, b, c, k[11], 10, -1120210379);\r\n c = this.ii(c, d, a, b, k[2], 15, 718787259);\r\n b = this.ii(b, c, d, a, k[9], 21, -343485551);\r\n\r\n x[0] = this.add32(a, x[0]);\r\n x[1] = this.add32(b, x[1]);\r\n x[2] = this.add32(c, x[2]);\r\n x[3] = this.add32(d, x[3]);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private cmn(q, a, b, x, s, t) {\r\n a = this.add32(this.add32(a, q), this.add32(x, t));\r\n return this.add32((a << s) | (a >>> (32 - s)), b);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private ff(a, b, c, d, x, s, t) {\r\n return this.cmn((b & c) | ((~b) & d), a, b, x, s, t);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private gg(a, b, c, d, x, s, t) {\r\n return this.cmn((b & d) | (c & (~d)), a, b, x, s, t);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private hh(a, b, c, d, x, s, t) {\r\n return this.cmn(b ^ c ^ d, a, b, x, s, t);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private ii(a, b, c, d, x, s, t) {\r\n return this.cmn(c ^ (b | (~d)), a, b, x, s, t);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private md51(s: string) {\r\n var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i;\r\n\r\n for (i = 64; i <= s.length; i += 64)\r\n this.md5cycle(state, this.md5blk(s.substring(i - 64, i)));\r\n\r\n s = s.substring(i - 64);\r\n var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n for (i = 0; i < s.length; i++)\r\n tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\r\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\r\n if (i > 55) {\r\n this.md5cycle(state, tail);\r\n for (i = 0; i < 16; i++) tail[i] = 0;\r\n }\r\n tail[14] = n * 8;\r\n this.md5cycle(state, tail);\r\n return state;\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private md5blk(s) {\r\n var md5blks = [], i;\r\n for (i = 0; i < 64; i += 4)\r\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\r\n return md5blks;\r\n }\r\n\r\n /**\r\n * Array dei possibili valori di un simbolo esadecimale\r\n */\r\n private hex_chr: string[] = '0123456789abcdef'.split('');\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private rhex(n) {\r\n var s = '', j = 0;\r\n for (; j < 4; j++)\r\n s += this.hex_chr[(n >> (j * 8 + 4)) & 0x0F] + this.hex_chr[(n >> (j * 8)) & 0x0F];\r\n return s;\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private hex(x) {\r\n for (var i = 0; i < x.length; i++)\r\n x[i] = this.rhex(x[i]);\r\n return x.join('');\r\n }\r\n\r\n /**\r\n * @ignore\r\n * \r\n * Metodo di utilità per il calcolo dell'md5\r\n */\r\n private add32(a, b) {\r\n return (a + b) & 0xFFFFFFFF;\r\n }\r\n}","// Angular\r\nimport { Injectable, Inject, Optional, Injector, PLATFORM_ID } from \"@angular/core\";\r\n\r\n// Es\r\nimport { BaseLocalization } from \"@esfaenza/localizations\";\r\n\r\n// Configurazioni\r\nimport { ToastrService } from \"ngx-toastr\";\r\nimport swal from \"sweetalert2\";\r\n\r\n// RXJS\r\nimport { Observable, Subject, of } from \"rxjs\";\r\nimport { filter, first, map, take } from \"rxjs/operators\";\r\n\r\n// Modelli\r\nimport { CallResult } from \"../models/CallResult\";\r\n\r\n// Servizi\r\nimport { HashingService } from \"./extensions.hashing.service\";\r\nimport { isPlatformBrowser } from \"@angular/common\";\r\n\r\n/**\r\n * Service che fornisce funzionalità di alert nei tipi fondamentali: success, info, warning e danger\r\n */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class MessageService {\r\n\r\n /** Oggetto statico in supporto alla localizzazione */\r\n private loc = {\r\n 'Confirm': { 'en-US': \"Confirm\", 'it-IT': \"Conferma\", },\r\n 'Cancel': { 'en-US': \"Cancel\", 'it-IT': \"Annulla\", },\r\n 'Close': { 'en-US': \"Close\", 'it-IT': \"Chiudi\", },\r\n 'Error': { 'en-US': \"Error\", 'it-IT': \"Errore\", },\r\n 'Info': { 'en-US': \"Info\", 'it-IT': \"Informazione\", },\r\n 'Success': { 'en-US': \"Success\", 'it-IT': \"Successo\", },\r\n 'Warning': { 'en-US': \"Warning\", 'it-IT': \"Attenzione\", }\r\n };\r\n\r\n /** Template di un warning con richiesta di conferma */\r\n private warningSwalWithCancel: any;\r\n\r\n /** Template di un warning con richiesta di conferma */\r\n private successSwalWithCancel: any;\r\n\r\n /** Template di un errore */\r\n private errorSwal: any;\r\n\r\n /** Template di un messaggio di successo */\r\n private successSwal: any;\r\n\r\n /** Template di un avviso */\r\n private warningSwal: any;\r\n\r\n /** Template di un messaggio informativo */\r\n private infoSwal: any;\r\n\r\n /** Template di un warning per la sessione scaduta */\r\n private expiredSessionSwal: any;\r\n\r\n /** Getter per il servizio dei toast. ngx-toastr è fatta talmente male che la service dev'essere recuperata in questo modo */\r\n private get toastr(): ToastrService {\r\n return this.injector.get(ToastrService);\r\n }\r\n\r\n /** Supporto all'Embedding */\r\n Embedded: boolean = false;\r\n MainWindow: Window = null;\r\n MessageObserver: Subject<{ event: any, data: any }> = null;\r\n\r\n isBrowser: boolean = true;\r\n\r\n /** Costruttore @ignore */\r\n public constructor(@Inject(Injector) private injector: Injector, @Optional() private locProvider: BaseLocalization, private hash: HashingService, @Inject(PLATFORM_ID) platformId: Object) {\r\n this.isBrowser = isPlatformBrowser(platformId);\r\n\r\n if (this.isBrowser)\r\n this.init();\r\n }\r\n\r\n browserCheck() {\r\n if (!this.isBrowser)\r\n console.error(\"@esfaenza/extensions MessageService is only able to display browser messages at this time. Since you are not running in a browser, all functions witll do nothing\")\r\n\r\n return this.isBrowser\r\n }\r\n\r\n public configureEmbeddability(mainWindow: Window, messageObserver: Subject<{ event: any, data: any }>) {\r\n this.Embedded = true;\r\n this.MainWindow = mainWindow;\r\n this.MessageObserver = messageObserver;\r\n }\r\n\r\n async init() {\r\n let LOCALE = this.locProvider ? await this.locProvider.Locale.pipe(first()).toPromise() : 'it-IT';\r\n\r\n this.expiredSessionSwal = swal.mixin({\r\n showCancelButton: false,\r\n confirmButtonText: 'Login',\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: false,\r\n allowOutsideClick: false,\r\n icon: \"warning\"\r\n });\r\n\r\n this.successSwalWithCancel = swal.mixin({\r\n title: this.loc[\"Success\"][LOCALE],\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n cancelButton: \"btn btn-secondary app-margin-right-10\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true,\r\n showCancelButton: true,\r\n confirmButtonText: this.loc[\"Confirm\"][LOCALE],\r\n cancelButtonText: this.loc[\"Cancel\"][LOCALE],\r\n icon: \"success\"\r\n });\r\n\r\n this.warningSwalWithCancel = swal.mixin({\r\n title: this.loc[\"Warning\"][LOCALE],\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n cancelButton: \"btn btn-secondary app-margin-right-10\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true,\r\n showCancelButton: true,\r\n confirmButtonText: this.loc[\"Confirm\"][LOCALE],\r\n cancelButtonText: this.loc[\"Cancel\"][LOCALE],\r\n icon: \"warning\"\r\n });\r\n\r\n this.warningSwal = swal.mixin({\r\n title: this.loc[\"Warning\"][LOCALE],\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true,\r\n showCancelButton: false,\r\n confirmButtonText: this.loc[\"Close\"][LOCALE],\r\n icon: \"warning\"\r\n });\r\n\r\n this.successSwal = swal.mixin({\r\n title: this.loc[\"Success\"][LOCALE],\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true,\r\n showCancelButton: false,\r\n confirmButtonText: this.loc[\"Close\"][LOCALE],\r\n icon: \"success\"\r\n });\r\n\r\n this.errorSwal = swal.mixin({\r\n title: this.loc[\"Error\"][LOCALE],\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true,\r\n showCancelButton: false,\r\n confirmButtonText: this.loc[\"Close\"][LOCALE],\r\n icon: \"error\"\r\n });\r\n\r\n this.infoSwal = swal.mixin({\r\n title: this.loc[\"Info\"][LOCALE],\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n container: \"app-wrap\",\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true,\r\n showCancelButton: false,\r\n confirmButtonText: this.loc[\"Close\"][LOCALE],\r\n icon: \"info\"\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Presentazione di un semplice messaggio di successo\r\n * \r\n * Se viene chiamato con le impostazioni di default e toastr è abilitato, viene mostrato al centro\r\n * Se viene chiamato con override su toastr vuol dire che è una notifica secondaria e appare in alto a destra\r\n * \r\n * @param {string} text Testo da mostrare\r\n * @param {\"toastr\" | \"swal\" | null} secondaryNotificationType Qualora sia una notifica secondaria, ne indica il tipo\r\n */\r\n public simpleSuccess(text: string, secondaryNotificationType: \"toastr\" | \"swal\" | null = null, secondaryNotificationTimeout: number = null) {\r\n if (!this.browserCheck()) return;\r\n if (this.Embedded) {\r\n this.MainWindow.postMessage({ type: \"alert\", level: 'success', msg: text }, \"*\");\r\n return;\r\n }\r\n\r\n let tos = this.toastrOrSwal(secondaryNotificationType);\r\n\r\n if (tos == \"swal\") this.successSwal.fire(\"\", text);\r\n else this.toastr.success(text, null, { positionClass: tos == \"toastr\" ? \"toast-top-right\" : \"toast-top-center\", timeOut: secondaryNotificationTimeout || (tos == \"toastr\" ? 0 : 5000), extendedTimeOut: tos == \"toastr\" ? 0 : 1000 });\r\n }\r\n\r\n /**\r\n * Presentazione di un semplice messaggio di informazione\r\n * \r\n * Se viene chiamato con le impostazioni di default e toastr è abilitato, viene mostrato al centro\r\n * Se viene chiamato con override su toastr vuol dire che è una notifica secondaria e appare in alto a destra\r\n * \r\n * @param {string} text Testo da mostrare\r\n * @param {\"toastr\" | \"swal\" | null} secondaryNotificationType Qualora sia una notifica secondaria, ne indica il tipo\r\n */\r\n public simpleInfo(text: string, secondaryNotificationType: \"toastr\" | \"swal\" | null = null, secondaryNotificationTimeout: number = null) {\r\n if (!this.browserCheck()) return;\r\n if (this.Embedded) {\r\n this.MainWindow.postMessage({ type: \"alert\", level: 'info', msg: text }, \"*\");\r\n return;\r\n }\r\n\r\n let tos = this.toastrOrSwal(secondaryNotificationType);\r\n\r\n if (tos == \"swal\") this.infoSwal.fire(\"\", text);\r\n else this.toastr.info(text, null, { positionClass: tos == \"toastr\" ? \"toast-top-right\" : \"toast-top-center\", timeOut: secondaryNotificationTimeout || (tos == \"toastr\" ? 0 : 5000), extendedTimeOut: tos == \"toastr\" ? 0 : 1000 });\r\n }\r\n\r\n /**\r\n * Presentazione di un semplice messaggio di errore\r\n * \r\n * Se viene chiamato con le impostazioni di default e toastr è abilitato, viene mostrato al centro\r\n * Se viene chiamato con override su toastr vuol dire che è una notifica secondaria e appare in alto a destra\r\n * \r\n * @param {string} text Testo da mostrare\r\n * @param {\"toastr\" | \"swal\" | null} secondaryNotificationType Qualora sia una notifica secondaria, ne indica il tipo\r\n */\r\n public simpleError(text: string, secondaryNotificationType: \"toastr\" | \"swal\" | null = null, secondaryNotificationTimeout: number = null) {\r\n if (!this.browserCheck()) return;\r\n if (this.Embedded) {\r\n this.MainWindow.postMessage({ type: \"alert\", level: 'error', msg: text }, \"*\");\r\n return;\r\n }\r\n\r\n let tos = this.toastrOrSwal(secondaryNotificationType);\r\n\r\n if (tos == \"swal\") this.errorSwal.fire(\"\", text);\r\n else this.toastr.error(text, null, { positionClass: tos == \"toastr\" ? \"toast-top-right\" : \"toast-top-center\", timeOut: secondaryNotificationTimeout || (tos == \"toastr\" ? 0 : 5000), extendedTimeOut: tos == \"toastr\" ? 0 : 1000 });\r\n }\r\n\r\n /**\r\n * Presentazione di un semplice messaggio di avviso\r\n * \r\n * Se viene chiamato con le impostazioni di default e toastr è abilitato, viene mostrato al centro\r\n * Se viene chiamato con override su toastr vuol dire che è una notifica secondaria e appare in alto a destra\r\n * \r\n * @param {string} text Testo da mostrare\r\n * @param {\"toastr\" | \"swal\" | null} secondaryNotificationType Qualora sia una notifica secondaria, ne indica il tipo\r\n */\r\n public simpleWarning(text: string, secondaryNotificationType: \"toastr\" | \"swal\" | null = null, secondaryNotificationTimeout: number = null) {\r\n if (!this.browserCheck()) return;\r\n if (this.Embedded) {\r\n this.MainWindow.postMessage({ type: \"alert\", level: 'warning', msg: text }, \"*\");\r\n return;\r\n }\r\n\r\n let tos = this.toastrOrSwal(secondaryNotificationType);\r\n\r\n if (tos == \"swal\") this.warningSwal.fire(\"\", text);\r\n else this.toastr.warning(text, null, { positionClass: tos == \"toastr\" ? \"toast-top-right\" : \"toast-top-center\", timeOut: secondaryNotificationTimeout || (tos == \"toastr\" ? 0 : 5000), extendedTimeOut: tos == \"toastr\" ? 0 : 1000 });\r\n }\r\n\r\n /**\r\n * Ripulisce tutti i messaggi presenti in un dato momento sullo schermo\r\n */\r\n public clearMessages() {\r\n if (!this.browserCheck()) return;\r\n this.toastr.clear();\r\n swal.close();\r\n }\r\n\r\n /**\r\n * Mostra un messaggio di avviso con richiesta di conferma\r\n * \r\n * @param {string} title Titolo del messaggio\r\n * @param {string} text Contenuto del messaggio\r\n * \r\n * @returns {Promise} Restituisce una Promise col risultato scelto dall'utente (conferma o no)\r\n */\r\n public promiseWarningWithChoice(title: string, text: string): Promise<any> {\r\n if (!this.browserCheck()) return;\r\n return this.warningSwalWithCancel.fire(title, text);\r\n }\r\n\r\n /**\r\n * In base alla configurazione attuale e all'eventuale override per la chiamata del caso indica se bisogna utilizzare toastr o sweetalert\r\n * \r\n * @param {\"toastr\" | \"swal\" | null} providerOverride Override alla modalità configurata\r\n * \r\n * @returns {\"toastr\" | \"swal\"} Indicazione su che provider di messaggi di avviso debba essere utilizzato\r\n */\r\n private toastrOrSwal(providerOverride: \"toastr\" | \"swal\" | null): \"toastr\" | \"swal\" {\r\n if (providerOverride != null)\r\n return providerOverride;\r\n return \"swal\";\r\n }\r\n\r\n private GuidRepsonseFunctionsMap: { [id: string]: { onsuccess: Function, onerror: Function } } = {};\r\n\r\n public simpleWarningWithChoice(title: string, text: string, onsuccess?: Function, onerror?: Function, confirmtext: string = \"\", aborttext: string = '') {\r\n if (!this.browserCheck()) return;\r\n this.withChoiceBase(\"warning\", title, text, onsuccess, onerror, confirmtext, aborttext)\r\n }\r\n\r\n public simpleSuccessWithChoice(title: string, text: string, onsuccess?: Function, onerror?: Function, confirmtext: string = \"\", aborttext: string = '') {\r\n if (!this.browserCheck()) return;\r\n this.withChoiceBase(\"success\", title, text, onsuccess, onerror, confirmtext, aborttext)\r\n }\r\n\r\n private withChoiceBase(level: \"warning\" | \"success\", title: string, text: string, onsuccess?: Function, onerror?: Function, confirmtext: string = \"\", aborttext: string = '') {\r\n if (this.Embedded) {\r\n let guid = this.hash.getGUID();\r\n this.GuidRepsonseFunctionsMap[guid] = { onsuccess, onerror };\r\n this.MainWindow.postMessage({ type: \"confirm\", level, title, text, guid }, \"*\");\r\n\r\n // Observe sulla risposta\r\n console.log(\"Inviata confirm request alla pagina principale, in attesa di risposta...\")\r\n this.MessageObserver.pipe(filter(event => event?.data?.type == \"confirm-response\" && event?.data?.guid == guid), take(1)).subscribe(event => {\r\n console.log(\"Event listener su window-message. Risposta pergiunta\");\r\n\r\n if (event?.data?.result === true)\r\n this.GuidRepsonseFunctionsMap[guid].onsuccess();\r\n else if (event?.data?.result === true)\r\n this.GuidRepsonseFunctionsMap[guid].onerror();\r\n })\r\n }\r\n else\r\n (level == \"warning\" ? this._simpleWarningWithChoice.bind(this) : this._simpleSuccessWithChoice.bind(this))(title, text, onsuccess, onerror, confirmtext, aborttext);\r\n }\r\n\r\n /**\r\n * Mostra un messaggio di avviso con richiesta di conferma e gestisce il risultato chiamato i callback **onsuccess** o **onerror**\r\n * \r\n * @param {string} title Titolo del messaggio\r\n * @param {string} text Contenuto del messaggio\r\n * @param {Function} onsuccess Callback da chimare su conferma\r\n * @param {Function} onerror Callback da chimare su errori\r\n */\r\n private _simpleWarningWithChoice(title: string, text: string, onconfirm: Function = null, onabort: Function = null, confirmtext: string = \"\", aborttext: string = '') {\r\n this._simpleWithChoice(this.warningSwalWithCancel, title, text, onconfirm, onabort, confirmtext, aborttext)\r\n }\r\n\r\n /**\r\n * Mostra un messaggio di success con richiesta di conferma e gestisce il risultato chiamato i callback **onconfirm** o **onabort**\r\n * \r\n * @param {string} title Titolo del messaggio\r\n * @param {string} text Contenuto del messaggio\r\n * @param {Function} onconfirm Callback da chimare su conferma\r\n * @param {Function} onabort Callback da chimare su annullamento\r\n * @param {string} confirmtext Testo del pulsante di azione\r\n * @param {string} aborttext Testo del pulsante di annullamento\r\n */\r\n private _simpleSuccessWithChoice(title: string, text: string, onconfirm: Function = null, onabort: Function = null, confirmtext: string = \"\", aborttext: string = '') {\r\n this._simpleWithChoice(this.successSwalWithCancel, title, text, onconfirm, onabort, confirmtext, aborttext)\r\n }\r\n\r\n /**\r\n * Metodo base per richiedere una scelta all'utente\r\n * \r\n * @param {any} swal Swal mixin da utilizzare per visualizzare il messaggio di choice\r\n * @param {string} title Titolo del messaggio\r\n * @param {string} text Contenuto del messaggio\r\n * @param {Function} onconfirm Callback da chimare su conferma\r\n * @param {Function} onabort Callback da chimare su annullamento\r\n * @param {string} confirmtext Testo del pulsante di azione\r\n * @param {string} aborttext Testo del pulsante di annullamento\r\n */\r\n private _simpleWithChoice(swal: any, title: string, text: string, onconfirm: Function = null, onabort: Function = null, confirmtext: string = \"\", aborttext: string = '') {\r\n var configuration = {\r\n title: title,\r\n html: text\r\n };\r\n if (confirmtext)\r\n configuration[\"confirmButtonText\"] = confirmtext;\r\n if (aborttext)\r\n configuration[\"cancelButtonText\"] = aborttext;\r\n\r\n swal.fire(configuration).then((result) => {\r\n if (result.value && onconfirm)\r\n onconfirm();\r\n else if (onabort)\r\n onabort();\r\n });\r\n }\r\n\r\n /**\r\n * Mostra un messaggio di avviso con richiesta di conferma e gestisce il risultato chiamato i callback **onsuccess** o **onerror**\r\n * \r\n * @param {string} title Titolo del messaggio\r\n * @param {string} text Contenuto del messaggio\r\n */\r\n public observableSimpleWarningWithChoice(title: string, text: string): Observable<boolean> {\r\n if (!this.browserCheck()) return of(false);\r\n return of(this.warningSwalWithCancel.fire(title, text)).pipe(map(t => !!t.value))\r\n }\r\n\r\n /**\r\n * Mostra un messaggio di avviso che la sessione corrente è scaduta e propone all'utente di navigare al login. Qualora l'utente decidesse di farlo \r\n * verrà chiamata la funzione di callback **onnavigate\r\n * \r\n * @param {string} title Titolo del messaggio\r\n * @param {string} text Contenuto del messaggio\r\n * @param {Function} onnavigate Callback da chimare su navigazione in corso\r\n */\r\n public expiredSessionMessage(title: string, text: string, onnavigate: Function = null) {\r\n if (!this.browserCheck()) return;\r\n\r\n this.expiredSessionSwal.fire(title, text).then((result) => {\r\n if (result.value && onnavigate)\r\n onnavigate();\r\n });\r\n }\r\n\r\n /**\r\n * Metodo helper per gestire in maniera standardizzata una risposta di tipo **CallResult**\r\n * \r\n * @param {CallResult} response Risposta ricevuta dal server\r\n * @param {string} successMsg Messaggio da visualizzare in caso di successo\r\n * @param {string} errorMsg Messaggio da visualizzare in caso di fallimento\r\n * @param {Function} postSuccess Callback da chimare in caso di successo\r\n * @param {Function} postFailure Callback da chimare in caso di fallimento\r\n */\r\n public manageCallResultResponse(response: CallResult, successMsg: string, errorMsg: string, postSuccess: Function = null, postFailure: Function = null) {\r\n if (!this.browserCheck()) return;\r\n\r\n let anyReponse = <any>response;\r\n if (response.success || anyReponse.Success) {\r\n if (response.haswarning || anyReponse.HasWarning)\r\n this.simpleWarning(response.warning || anyReponse.Warning);\r\n\r\n else if (successMsg)\r\n this.simpleSuccess(successMsg);\r\n\r\n if (postSuccess) postSuccess();\r\n } else {\r\n this.simpleError((errorMsg ? errorMsg + \": \" : \"\") + ((response.haserror || anyReponse.HasError) ? (response.error || anyReponse.Error) : '[NO ERR.]'));\r\n\r\n if (postFailure) postFailure();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo helper per gestire in maniera standardizzata una risposta di tipo **string**, considerando che:\r\n * \r\n * Stringa vuota --> Tutto bene\r\n * \r\n * Stringa piena --> Questo è il messaggio d'errore per cui la chiamata è fallita\r\n * \r\n * @param {string} response Risposta ricevuta dal server\r\n * @param {string} successMsg Messaggio da visualizzare in caso di successo\r\n * @param {string} errorMsg Messaggio da visualizzare in caso di fallimento\r\n * @param {Function} postSuccess Callback da chimare in caso di successo\r\n * @param {Function} postFailure Callback da chimare in caso di fallimento\r\n */\r\n public manageStringResponse(response: string, successMsg: string, errorMsg: string, postSuccess: Function = null, postFailure: Function = null) {\r\n if (!this.browserCheck()) return;\r\n\r\n if (!response) {\r\n if (successMsg)\r\n this.simpleSuccess(successMsg);\r\n\r\n if (postSuccess) postSuccess();\r\n } else {\r\n if (errorMsg)\r\n this.simpleError(errorMsg + \": \" + response);\r\n\r\n if (postFailure) postFailure();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo helper per gestire in maniera standardizzata una risposta di tipo **boolean**\r\n * \r\n * @param {string} response Risposta ricevuta dal server\r\n * @param {string} successMsg Messaggio da visualizzare in caso di successo\r\n * @param {string} errorMsg Messaggio da visualizzare in caso di fallimento\r\n * @param {Function} postSuccess Callback da chimare in caso di successo\r\n * @param {Function} postFailure Callback da chimare in caso di fallimento\r\n */\r\n public manageStringResponseBool(response: boolean, successMsg: string, errorMsg: string, postSuccess: Function = null, postFailure: Function = null) {\r\n if (!this.browserCheck()) return;\r\n\r\n if (response) {\r\n if (successMsg)\r\n this.simpleSuccess(successMsg);\r\n\r\n if (postSuccess) postSuccess();\r\n } else {\r\n if (errorMsg)\r\n this.simpleError(errorMsg);\r\n\r\n if (postFailure) postFailure();\r\n }\r\n }\r\n}","// Angular\r\nimport { Inject, Injectable, PLATFORM_ID } from \"@angular/core\";\r\nimport { isPlatformBrowser, Location } from \"@angular/common\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n// Services\r\nimport { MessageService } from \"./extensions.messages.service\";\r\n\r\n// Libraries\r\nimport { ReplaySubject, Subject, filter } from \"rxjs\";\r\n\r\ndeclare var myconfig: { AppData: { ModuleId: string }; };\r\n\r\n/* Classe che contiene tutte le informazioni sull'embedding in un unico contenitore per semplicità */\r\n@Injectable({ providedIn: \"root\"})\r\nexport class AppEmbeddingExtensions {\r\n\r\n public sidebarWidth: number = 230;\r\n\r\n public EmbeddingSource: ReplaySubject<string> = new ReplaySubject<string>();\r\n public Embedded: boolean = false;\r\n public EmbeddingLevel: number = 0;\r\n public MainWindow: any;\r\n\r\n public MessageObserver: Subject<{ event: any, data: any }> = new Subject<{ event: any, data: any }>();\r\n\r\n private _reloadAllowed: boolean = true;\r\n\r\n public EmbeddedModule: string;\r\n\r\n private pushedHistories: { _pushed: boolean, url: string, from: string }[] = [];\r\n\r\n private isBrowser: boolean = true;\r\n\r\n constructor(private msgService: MessageService, private router: Router, private location: Location, @Inject(PLATFORM_ID) platformId: Object) {\r\n this.isBrowser = isPlatformBrowser(platformId);\r\n if(!this.isBrowser) return;\r\n\r\n this.MainWindow = <{ parent: any, postMessage: Function }>window;\r\n while (this.MainWindow.parent != this.MainWindow) {\r\n this.MainWindow = this.MainWindow.parent;\r\n this.EmbeddingLevel++;\r\n this.Embedded = true;\r\n\r\n // Fallback per farlo funzionare forzatamente mentre lo testo\r\n this.EmbeddedModule = this.location.path().match(/module=([a-zA-Z_]+)/)?.[1];\r\n\r\n if(!this.EmbeddedModule)\r\n this.waitForMyConfigAndForceEmbeddedModule();\r\n }\r\n\r\n this.configureEmbeddability();\r\n\r\n if (this.Embedded)\r\n this.msgService.configureEmbeddability(this.MainWindow, this.MessageObserver);\r\n\r\n this.MessageObserver.pipe(filter(ev => ev.event == \"menu-navigation\")).subscribe(event => {\r\n\r\n // Mi interessa solo roba relativa all'embedding\r\n if (!event.data.routerLink.startsWith(\"embed\"))\r\n return;\r\n\r\n // emb/crm/parties/parties_search;blabla=xyz?blabla --> parties/parties_search\r\n let normalizedRequestedRoute = event.data.routerLink.split(\"?\")[0].split(\";\")[0].split(\"/\").slice(2).join(\"/\");\r\n ///pages_ext/{module}/parties/parties_search;blabla=xyz?blabla --> parties/parties_search\r\n let normalizedFirstRoute = this.pushedHistories.length > 0 ? this.pushedHistories[0].from.split(\"?\")[0].split(\";\")[0].split(\"/\").slice(3).join(\"/\") : \"\";\r\n // La route su cui sto navigando ora è uguale alla route in cui l'embedding è iniziato. \r\n // Significa che devo simulare dei back fino a che non sono arrivato all'inizio\r\n if (normalizedRequestedRoute == normalizedFirstRoute) {\r\n this.router.navigate([\"pages/\" + event.data.routerLink, {wakeup: 1}], { queryParams: event.data.queryParams, onSameUrlNavigation: \"reload\" });\r\n this.pushedHistories = [];\r\n }\r\n });\r\n }\r\n\r\n private waitForMyConfigAndForceEmbeddedModule() {\r\n if(!this.isBrowser) return;\r\n\r\n // Aspetto di ricevere il myconfig e setto con lui l'embeddedmodule. Questo viene eseguito solo se this.location.path() per qualche motivo non contiene il module\r\n let interval = setInterval(() => {\r\n if (myconfig?.AppData?.ModuleId) {\r\n this.EmbeddedModule = myconfig.AppData.ModuleId;\r\n clearInterval(interval);\r\n }\r\n }, 250);\r\n }\r\n\r\n public IsReloadAllowed() {\r\n let ret = this._reloadAllowed;\r\n this._reloadAllowed = true;\r\n return ret;\r\n }\r\n\r\n private MessageBarrierDebouncMs: number = 250;\r\n private OnMessageCallBarrier: { [id: string]: boolean } = {}\r\n private messageHash(event: MessageEvent) {\r\n return `${JSON.parse(JSON.stringify(event?.data))}`;\r\n }\r\n\r\n configureEmbeddability() {\r\n if(!this.isBrowser) return;\r\n\r\n if (this.Embedded)\r\n this.MainWindow.postMessage({ type: \"whois\" }, \"*\");\r\n else\r\n this.EmbeddingSource.next(\"\");\r\n\r\n window.onmessage = (event: MessageEvent) => {\r\n // Ignoro i miei messaggi dato che mi interessano solo quelli degli altri iframe\r\n if (event.source == window && event?.data?.type != \"modal-open\")\r\n return;\r\n\r\n let sourceWindow = (event.source as Window);\r\n\r\n // Posso gestire lo stesso identico messaggio solo 1 volta ogni MessageBarrierDebouncMs\r\n let messageHash = this.messageHash(event);\r\n if (this.OnMessageCallBarrier[messageHash])\r\n return;\r\n else {\r\n this.OnMessageCallBarrier[messageHash] = true;\r\n setTimeout(() => delete this.OnMessageCallBarrier[messageHash], this.MessageBarrierDebouncMs);\r\n }\r\n\r\n this.MessageObserver.next({ event: \"window-message\", data: event?.data });\r\n\r\n if (event?.data?.type == \"alert\") {\r\n console.log(`Window message - alert -> Level: ${event?.data?.level}, Message: ${event?.data?.msg}`);\r\n\r\n switch (event?.data?.level) {\r\n case \"success\": this.msgService.simpleSuccess(event?.data?.msg); break;\r\n case \"warning\": this.msgService.simpleWarning(event?.data?.msg); break;\r\n case \"error\": this.msgService.simpleError(event?.data?.msg); break;\r\n case \"info\": this.msgService.simpleInfo(event?.data?.msg); break;\r\n }\r\n }\r\n else if (event?.data?.type == \"whois\") {\r\n console.log(`Window message - Whois?`);\r\n\r\n sourceWindow.postMessage({ type: \"itsme\", module: myconfig.AppData.ModuleId }, \"*\")\r\n }\r\n else if (event?.data?.type == \"itsme\") {\r\n console.log(`Window message - It'sme -> ` + event?.data?.module);\r\n\r\n this.EmbeddingSource.next(event?.data?.module);\r\n }\r\n else if (event?.data?.type == \"replace-state\") {\r\n console.log(`Window message - replace-state -> Url: ${event?.data?.url}`);\r\n\r\n this.location.replaceState(event?.data?.url);\r\n }\r\n else if (event?.data?.type == \"confirm\") {\r\n console.log(`Window message - confirm -> Level: ${event?.data?.level}, Message: ${event?.data?.text}, Title: ${event?.data?.title}, ID: ${event?.data?.guid}`);\r\n\r\n var baseResponse = { type: \"confirm-response\", guid: event?.data?.guid };\r\n\r\n switch (event?.data?.level) {\r\n case \"success\":\r\n this.msgService.simpleSuccessWithChoice(event?.data?.title, event?.data?.text, () => {\r\n sourceWindow.postMessage({ result: true, ...baseResponse }, \"*\")\r\n }, () => {\r\n sourceWindow.postMessage({ result: false, ...baseResponse }, \"*\")\r\n });\r\n break;\r\n case \"warning\":\r\n this.msgService.simpleWarningWithChoice(event?.data?.title, event?.data?.text, () => {\r\n sourceWindow.postMessage({ result: true, ...baseResponse }, \"*\")\r\n }, () => {\r\n sourceWindow.postMessage({ result: false, ...baseResponse }, \"*\")\r\n });\r\n break;\r\n }\r\n\r\n }\r\n else if (event?.data?.type == \"navigate\") {\r\n console.log(`Window message - navigate -> ${event?.data?.url}`);\r\n var newTab = event?.data?.newTab;\r\n var replaceState = event?.data?.replaceState\r\n var current = event?.data?.current;\r\n\r\n // Controllo se il router sta seguendo la chiamata attuale. Escludo i query params che sono gli unici che possono essere seccati dai replaceState\r\n // e che potrebbero fare del casino. Stesso discorso per i parametri semplici (ad esempio il parametro di wakeup)\r\n if (!window.location.href.includes(this.router.url.split(\"?\")[0].split(\";\")[0])) {\r\n console.warn(\"Doppia chiamata di navigazione, ignoro il secondo evento scoordinato dal router\");\r\n return;\r\n }\r\n\r\n let newRelativeUrl = this.router.createUrlTree([event?.data?.url]);\r\n let baseUrl = window.location.href.split(\"#\")[0] + \"#\";\r\n let appPath = decodeURIComponent(newRelativeUrl.toString());\r\n let newUrl = baseUrl + appPath;\r\n\r\n if (replaceState) {\r\n this.pushedHistories.push({ _pushed: true, url: newUrl, from: current });\r\n history.pushState({ _pushed: true }, \"\", newUrl);\r\n }\r\n else if (newTab)\r\n window.open(newUrl, '_blank');\r\n }\r\n else if (event?.data?.type == \"navigate-back\") {\r\n console.log(`Window message - navigate-back -> ${event?.data?.url}`);\r\n this.onNavigateBack();\r\n }\r\n else if (event?.data?.type == \"redirect\") {\r\n console.log(`Window message - redirect -> ${event?.data?.url}`);\r\n\r\n window.location.href = event?.data?.url;\r\n }\r\n else if (event?.data?.type == \"navigation\") {\r\n console.log(`Window message - Navigation -> ${event?.data?.internalNavigation ? \"[internal]\" : \"\"} ${event?.data?.title}`);\r\n\r\n this.MessageObserver.next({ event: \"navigation\", data: event?.data });\r\n }\r\n else if (event?.data?.type == \"modal-open\") {\r\n const wrapper = document.body.getElementsByClassName(\"main-wrapper\")[0] as HTMLElement;\r\n let wrapperStyles = window.getComputedStyle(wrapper);\r\n const wrapperPaddingLeft = parseInt(wrapperStyles.getPropertyValue(\"padding-left\"));\r\n const wrapperPaddingRight = parseInt(wrapperStyles.getPropertyValue(\"padding-right\"));\r\n\r\n console.log(`Window message - Modal Open -> Backdrop Height: ${event?.data?.backdropHeight}`);\r\n\r\n var bottomLeftover: number = 7; // Valore fisso... robina che rimane di sotto per un motivo o quell'altro\r\n var topHeight: number = 86; // valore fisso, distanza fra il top e l'inizio dell'iframe, non sarà mai diverso\r\n var rightSpace: number = wrapperPaddingRight; // valore fisso, distanza fra la fine dell'iframe e il lato sinistro dello schermo, non sarà mai diverso\r\n var leftSpace: number = this.sidebarWidth + wrapperPaddingLeft;\r\n\r\n let commonStyles = \"position: absolute; z-index: 9999; background-color: #000; opacity: 0.5; \";\r\n\r\n wrapper.style.setProperty(\"overflow\", \"hidden\", \"important\");\r\n\r\n const top = document.createElement(\"div\");\r\n top.className = \"embedded-modal-top\";\r\n top.style.cssText = commonStyles + `height: ${topHeight}px; top: 0; width: calc(100% - ${leftSpace}px); left: ${leftSpace}px`;\r\n top.id = \"top\";\r\n\r\n const left = document.createElement(\"div\");\r\n left.className = \"embedded-modal-left\";\r\n left.style.cssText = commonStyles + `height: 100%; top: 0; width: ${leftSpace}px;`;\r\n left.id = \"left\";\r\n\r\n const right = document.createElement(\"div\");\r\n right.className = \"embedded-modal-right\";\r\n right.style.cssText = commonStyles + `height: calc(100% - ${topHeight}px); top: ${topHeight}px; right: 0; width: ${rightSpace}px;`;\r\n right.id = \"right\";\r\n\r\n const bottom = document.createElement(\"div\");\r\n bottom.className = \"embedded-modal-bottom\";\r\n bottom.style.cssText = commonStyles + `height: ${bottomLeftover}px; bottom: 0; width: calc(100% - ${leftSpace + rightSpace}px); left: ${leftSpace}px`;\r\n bottom.id = \"bottom\";\r\n\r\n document.body.appendChild(top);\r\n document.body.appendChild(left);\r\n document.body.appendChild(right);\r\n document.body.appendChild(bottom);\r\n }\r\n else if (event?.data?.type == \"modal-close\") {\r\n console.log(`Window message - Modal Close`);\r\n\r\n let wrapper = document.body.getElementsByClassName(\"main-wrapper\")[0] as HTMLElement;\r\n wrapper.style.removeProperty(\"overflow\");\r\n\r\n const top = document.getElementById(\"top\");\r\n const left = document.getElementById(\"left\");\r\n const right = document.getElementById(\"right\");\r\n const bottom = document.getElementById(\"bottom\");\r\n\r\n if (top) document.body.removeChild(top);\r\n if (left) document.body.removeChild(left);\r\n if (right) document.body.removeChild(right);\r\n if (bottom) document.body.removeChild(bottom);\r\n }\r\n };\r\n\r\n if (this.Embedded)\r\n document.body.style.setProperty(\"overflow-y\", \"auto\", \"important\");\r\n }\r\n\r\n private onNavigateBack() {\r\n if(!this.isBrowser) return;\r\n\r\n if (history?.state?._pushed) {\r\n this._reloadAllowed = false;\r\n this.pushedHistories.pop();\r\n history.back();\r\n }\r\n }\r\n\r\n public replaceState(basePath: string, url: string) {\r\n if(!this.isBrowser) return;\r\n\r\n // Esempio basePath: pages\r\n // Esempio url: parties/leads_search\r\n\r\n // Normalizzazione senza slash prima o dopo\r\n basePath = basePath.endsWith(\"/\") ? basePath.substring(0, basePath.length -2) : basePath;\r\n url = url.startsWith(\"/\") ? url.substring(1) : url;\r\n\r\n this.location.replaceState(`${basePath}/${url}`);\r\n this.MainWindow.postMessage({ type: \"replace-state\", url: `pages/embed/${this.EmbeddedModule}/${url}` }, \"*\");\r\n }\r\n\r\n public refreshBoundariesOnMenuCollapse() {\r\n if(!this.isBrowser) return;\r\n \r\n const wrapper = document.body.getElementsByClassName(\"main-wrapper\")[0] as HTMLElement;\r\n let wrapperStyles = window.getComputedStyle(wrapper);\r\n const wrapperPaddingLeft = parseInt(wrapperStyles.getPropertyValue(\"padding-left\"));\r\n var leftSpace: number = 230 + wrapperPaddingLeft;\r\n\r\n const left = document.getElementById(\"left\");\r\n const top = document.getElementById(\"top\");\r\n\r\n if (top) {\r\n top.style.setProperty(\"left\", (leftSpace) + \"px\");\r\n top.style.setProperty(\"width\", `calc(100% - ${leftSpace}px)`);\r\n }\r\n\r\n if (left)\r\n left.style.setProperty(\"width\", leftSpace + \"px\");\r\n }\r\n}","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AppEmbeddingExtensions } from \"./extensions.embedding.service\";\r\n\r\n/**\r\n * WIP: per razionalizzare il fill della routesmap (vedi CRM app.extensions.ts)\r\n */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class BaseExtensionsService {\r\n\r\n public RedirectMap: { [index: string]: { url: string, params: string[] } } = {};\r\n public RoutesMap: { [index: string]: { route: (param: string) => any } } = {};\r\n\r\n constructor(private emb: AppEmbeddingExtensions) {\r\n for (let prop in this.RedirectMap) {\r\n this.RoutesMap[prop] = { route: null };\r\n this.RoutesMap[prop].route = (param: string) => {\r\n let obj = {};\r\n obj[this.RedirectMap[prop].params[0]] = param;\r\n return [(this.emb.Embedded ? \"pages_ext/\" : \"pages/\") + this.RedirectMap[prop].url, obj];\r\n }\r\n }\r\n }\r\n}","/**\r\n * Suffisso della proprietà da generare in cui salvare il navigatore \r\n * utilizzato dal servizio di esportazione per prendere il valore delle proprietà di un oggetto\r\n */\r\nexport const csvValueNavigator: string = \"_csvnav\";\r\n/** Suffisso con le informazioni del tipo per le esportazioni di oggetti */\r\nexport const csvValueType: string = \"_csvtype\";\r\n/** Suffisso della proprietà da generare in cui salvare l'ordine di esportazione */\r\nexport const csvOrdPrefix: string = \"_csvord\";\r\n/** Suffisso della proprietà da generare in cui salvare la visibilità di questa proprietà */\r\nexport const csvVisPrefix: string = \"_csvvis\";\r\n/** Suffisso della proprietà da generare in cui salvare il nome della colonna in cui salvare questa proprietà */\r\nexport const csvHdrPrefix: string = \"_csvhdr\";\r\n/** Suffisso della proprietà da generare in cui salvare il codice del th a cui si riferisce questo campo */\r\nexport const csvPropKey: string = \"_csvkey\";\r\n/** Suffisso della proprietà da generare in cui salvare il valore da prendere per una proprietà di tipo Lista */\r\nexport const listCsvValPrefix: string = \"_listcsvval\";\r\n/** Suffisso della proprietà da generare in cui salvare l'Header della proprietà di tipo Lista relativo al valore esportato nella proprietà con suffisso **listCsvValPrefix** */\r\nexport const listCsvHdrPrefix: string = \"_listcsvhdr\";\r\n/** Suffisso della proprietà da generare in cui salvare il formato della proprietà di tipo Lista relativo al valore esportato nella proprietà con suffisso **listCsvValPrefix** */\r\nexport const listCsvValFormat: string = \"_listcsvvalformat\";\r\n/** Suffisso della proprietà da generare in cui salvare il valore da prendere per una proprietà di tipo Dizionario */\r\nexport const dictionaryCsvValPrefix: string = \"_flatlistcsvval\";\r\n/** Suffisso della proprietà da generare in cui salvare l'Header della proprietà di un Dizionario relativo al valore esportato nella proprietà con suffisso **dictionaryCsvValPrefix** */\r\nexport const dictionaryCsvHdrPrefix: string = \"_flatlistcsvhdr\";\r\n/** Suffisso della proprietà da generare in cui salvare il formato della proprietà che si sta esportando */\r\nexport const csvFormatPrefix: string = \"_csvfmt\";\r\n/** Nome della proprietà che contiene tutti i nomi di tutte le proprietà da esportare */\r\nexport const exportList: string = \"__export_list__\";\r\n/** Nome della proprietà che contiene la classe di localizzazione da utilizzare per una data esportazione */\r\nexport const locProperty: string = \"__loc__\";","\r\n/**\r\n * Mappatura del TypeCode del C#\r\n */\r\nexport enum TypeCode {\r\n /** @ignore */ Empty = 0,\r\n /** @ignore */ Obj = 1,\r\n /** @ignore */ DBNull = 2,\r\n /** @ignore */ Boolean = 3,\r\n /** @ignore */ Char = 4,\r\n /** @ignore */ SByte = 5,\r\n /** @ignore */ Byte = 6,\r\n /** @ignore */ Int16 = 7,\r\n /** @ignore */ UInt16 = 8,\r\n /** @ignore */ Int32 = 9,\r\n /** @ignore */ UInt32 = 10,\r\n /** @ignore */ Int64 = 11,\r\n /** @ignore */ UInt64 = 12,\r\n /** @ignore */ Single = 13,\r\n /** @ignore */ Double = 14,\r\n /** @ignore */ Decimal = 15,\r\n /** @ignore */ DateTime = 16,\r\n /** @ignore */ String = 18\r\n}","// Angular\r\nimport { Injectable, Type, WritableSignal } from \"@angular/core\";\r\nimport { NgForm } from \"@angular/forms\";\r\n\r\n// Modelli\r\nimport { TypeCode } from '../models/TypeCode';\r\n\r\n/**\r\n * Service che fornisce metodi di pubblica utilità\r\n */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class UtilityService {\r\n\r\n /**\r\n * Deseleziona il testo eventualmente selezionato\r\n */\r\n public clearTextSelection() {\r\n if (!window) {\r\n console.error(\"This function access the javascript window object which is not defined. Are you executing this outside of browser context?\");\r\n return;\r\n }\r\n\r\n if (window.getSelection().empty) // Chrome\r\n window.getSelection().empty();\r\n else if (window.getSelection().removeAllRanges) // Firefox\r\n window.getSelection().removeAllRanges();\r\n }\r\n\r\n /**\r\n * Partendo da una lista, dato il nome della proprietà chiave e il valore della chiave selezionata, \r\n * trova e restituisce l'oggetto desiderato\r\n * \r\n * @param {T[]} sourceList Lista di oggetti dentro cui cercare\r\n * @param {string} sourceItemIdField Nome della proprietà che rappresenta la chiave di un oggetto di tipo T\r\n * @param {string} selectedValue Valore di chiave selezionato\r\n * \r\n * @returns {T} Oggetto la cui proprietà **sourceItemIdField** assume il valore **selectedValue**\r\n */\r\n public getSelectedItem<T>(sourceList: T[], sourceItemIdField: string, selectedValue: string): T {\r\n for (let i = 0; i < sourceList.length; i++) {\r\n var item = sourceList[i];\r\n if (item[sourceItemIdField] == selectedValue)\r\n return item;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Effettua il reset di un Form di Angular\r\n * \r\n * @param {NgForm} form Form da resettare\r\n * @param {string} exception1 Campo da non resettare\r\n * @param {string} exception2 Campo da non resettare\r\n */\r\n public cleanForm(form: NgForm, exception1: string = null, exception2: string = null) {\r\n for (let name in form.controls) {\r\n if (name && name != exception1 && name != exception1 + \"_internal\" && name != exception2 && name != exception2 + \"_internal\") {\r\n form.controls[name].reset();\r\n }\r\n else {\r\n form.controls[name].markAsPristine();\r\n form.controls[name].markAsUntouched();\r\n }\r\n }\r\n\r\n //Reimposto il submitted\r\n ((<any>form) as { submittedReactive: WritableSignal<boolean> }).submittedReactive.set(false);\r\n }\r\n\r\n /**\r\n * Helper che permette di scaricare un file dato un URL (Generato da una chiamata ad **window.URL.createObjectURL**)\r\n * \r\n * @param {string} url ObjectURL che rappresenta il file da scaricare\r\n * @param {string} filename Nome del file suggerito in fase di salvataggio\r\n */\r\n public fileDownload(url: string, fileName: string) {\r\n if (!document) {\r\n console.error(\"This function access the javascript document object which is not defined. Are you executing this outside of browser context?\");\r\n return;\r\n }\r\n\r\n var a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.className = \"ta-display-none\";\r\n a.href = url;\r\n a.download = fileName;\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n document.body.removeChild(a);\r\n }\r\n\r\n /**\r\n * Helper per la formattazione di un numero di millisecondi in una stringa più comprensibile per un umano\r\n * \r\n * @param {number} duration Tempo espresso in millisecondi\r\n * \r\n * @returns {string} Durata formattata\r\n */\r\n public msToTime(duration: number): string {\r\n if (!duration)\r\n return \"\";\r\n\r\n var milliseconds = parseInt(((duration % 1000) / 100).toString()),\r\n seconds = parseInt(((duration / 1000) % 60).toString()),\r\n minutes = parseInt(((duration / (1000 * 60)) % 60).toString()),\r\n hours = parseInt(((duration / (1000 * 60 * 60)) % 24).toString());\r\n\r\n var st_hours = (hours < 10) ? \"0\" + hours : hours;\r\n var st_minutes = (minutes < 10) ? \"0\" + minutes : minutes;\r\n var st_seconds = (seconds < 10) ? \"0\" + seconds : seconds;\r\n\r\n return st_hours + \":\" + st_minutes + \":\" + st_seconds + \".\" + milliseconds;\r\n }\r\n\r\n /**\r\n * Helper che permette di scaricare un file in Base64\r\n * \r\n * @param {string} base64Data Base64 che rappresenta il file da scaricare\r\n * @param {string} filename Nome del file suggerito in fase di salvataggio\r\n */\r\n public saveFile(base64Data: string, filename: string) {\r\n var sampleArr = this.base64ToArrayBuffer(base64Data);\r\n this.saveByteArray(sampleArr, filename);\r\n }\r\n\r\n /**\r\n * Trasforma un Base64 in un ArrayBuffer\r\n * \r\n * @param {string} base64Data Base64 da trasformare\r\n * \r\n * @returns {Uint8Array} Array UTF8\r\n */\r\n private base64ToArrayBuffer(base64Data: string): Uint8Array {\r\n var binaryString = window.atob(base64Data);\r\n var binaryLen = binaryString.length;\r\n var bytes = new Uint8Array(binaryLen);\r\n for (var i = 0; i < binaryLen; i++) {\r\n var ascii = binaryString.charCodeAt(i);\r\n bytes[i] = ascii;\r\n }\r\n return bytes;\r\n }\r\n\r\n /**\r\n * Helper che permette di scaricare un file dato un array di Byte (**Uint8Array**)\r\n * \r\n * @param {Uint8Array} byte Rappresentazione del file da scaricare\r\n * @param {string} filename Nome del file suggerito in fase di salvataggio\r\n */\r\n private saveByteArray(byte: Uint8Array, filename: string) {\r\n if (!document) {\r\n console.error(\"This function access the javascript document object which is not defined. Are you executing this outside of browser context?\");\r\n return;\r\n }\r\n\r\n var blob = new Blob([byte as any]);\r\n var link = document.createElement(\"a\");\r\n document.body.appendChild(link);\r\n link.href = window.URL.createObjectURL(blob);\r\n var fileName = filename;\r\n link.download = fileName;\r\n link.click();\r\n document.body.removeChild(link);\r\n };\r\n\r\n /**\r\n * Utility per lo swap di due elementi di un array\r\n * \r\n * @param {any[]} array Array di cui invertire due elementi\r\n * @param {number} x Indice del primo elemento\r\n * @param {number} y Indice del secondo elemento\r\n */\r\n public swap(array: any[], x: number, y: number) {\r\n var b = array[x];\r\n array[x] = array[y];\r\n array[y] = b;\r\n }\r\n\r\n /**\r\n * Helper di trascodifica da tipo c# a tipo Typescript\r\n * \r\n * @param {TypeCode} type Tipo da trascodificare\r\n * \r\n * @returns {\"boolean\" | \"number\" | \"string\" | \"date\"} Tipo Typescript corrispondente\r\n */\r\n public getJsTypeFromTypeCode(type: TypeCode): \"boolean\" | \"number\" | \"string\" | \"date\" {\r\n switch (type) {\r\n case TypeCode.Boolean:\r\n return \"boolean\";\r\n\r\n case TypeCode.Decimal:\r\n case TypeCode.Double:\r\n case TypeCode.Single:\r\n case TypeCode.Int16:\r\n case TypeCode.Int32:\r\n case TypeCode.Int64:\r\n case TypeCode.Byte:\r\n case TypeCode.SByte:\r\n case TypeCode.UInt16:\r\n case TypeCode.UInt32:\r\n case TypeCode.UInt64:\r\n return \"number\";\r\n case TypeCode.Char:\r\n case TypeCode.String:\r\n return \"string\";\r\n case TypeCode.DateTime:\r\n return \"date\";\r\n default:\r\n console.log(\"Unrecognized input type. Typecode:\" + type);\r\n return \"string\";\r\n }\r\n }\r\n\r\n /**\r\n * Effettua la clonazione profonda di un oggetto in maniera molto più performante che JSON.parse(JSON.stringify()).\r\n * \r\n * Usare solo per oggetti puri e quantomeno semplici per evitare complicazioni derivanti dalle semplificazioni che questo metodo assume\r\n * \r\n * @param {any} source Oggetto da clonare\r\n * \r\n * @return {any} Clone dell'oggetto passato \r\n */\r\n public deepClone(source: any, type: Type<any> = null): any {\r\n\r\n // Valori semplici\r\n if (source == null || typeof source !== 'object')\r\n return source;\r\n\r\n // Pseudo Struct\r\n switch (toString.call(source)) {\r\n\r\n case '[object Boolean]':\r\n case '[object Number]':\r\n case '[object String]':\r\n case '[object Date]':\r\n return new source.constructor(source.valueOf());\r\n // Clonazione di un file -> Restituisco il riferimento al file stesso\r\n case \"[object File]\":\r\n return source;\r\n default: break;\r\n }\r\n\r\n // Oggetti Complessi\r\n return this.recursiveStep(source, Array.isArray(source) || source instanceof Array ? [] : (type == null ? Object.create(Object.getPrototypeOf(source)) : new type()));\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Step ricorsivo per la clonatura degli oggetti. Vedere **deepClone**\r\n */\r\n private recursiveStep(source: any, destination: any) {\r\n if (Array.isArray(source) || source instanceof Array) {\r\n for (var i = 0, ii = source.length; i < ii; i++)\r\n destination.push(this.deepClone(source[i]));\r\n } else if (source && typeof source.hasOwnProperty === 'function') {\r\n for (let key in source) {\r\n if (source.hasOwnProperty(key))\r\n destination[key] = this.deepClone(source[key]);\r\n }\r\n }\r\n\r\n return destination;\r\n }\r\n\r\n cast(object: any, clss: Type<any>) {\r\n let ret = Object.assign(Object.create(clss.prototype), object);\r\n return ret;\r\n }\r\n\r\n // Funzione di throttling per non spammare richieste in caso di animazioni attivate\r\n //TODO: spostarla in un metodo di utilit� (esfaenza/extensions)\r\n /** @ignore */\r\n private executionTimers: { [index: string]: any } = {};\r\n /** @ignore */\r\n public throttla(id: string, func: Function, throttleTime: number): void {\r\n //Se ho la funzione che vuole eseguire ripulisco quel timeout\r\n if (this.executionTimers[id])\r\n clearTimeout(this.executionTimers[id]);\r\n\r\n //Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi\r\n this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);\r\n }\r\n}","// Angular\r\nimport { Injectable, Type } from \"@angular/core\";\r\n\r\n// Esfaenza\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Configurazioni\r\n\r\nimport { exportList, csvFormatPrefix, csvHdrPrefix, csvOrdPrefix, csvValueNavigator, csvVisPrefix, dictionaryCsvHdrPrefix, dictionaryCsvValPrefix, listCsvHdrPrefix, listCsvValFormat, listCsvValPrefix, csvPropKey, locProperty, csvValueType } from \"../models/ExportConsts\";\r\nimport { DateService } from './extensions.dates.service';\r\nimport { UtilityService } from \"./extensions.utilities.service\";\r\n\r\n// Modelli\r\nimport { CsvHeaders } from \"../models/CsvHeaders\";\r\nimport { GenericItem } from \"../models/GenericItem\";\r\n\r\nimport * as XLSX from 'xlsx';\r\n\r\n/**\r\n * Decoratore che fornisce la classe di localizzazione per tutte le proprietà esportate con @Export e qualsiasi altro tag che richieda localizzazioni.\r\n * \r\n * Sostanzilamente aggiunge la proprietà **__loc__** all'oggetto creato dalla classe corrente assegnandogli come valore il tipo del LocalizationService da usare per la traduzione\r\n * \r\n * @param {Type<LocalizationService>} loc Tipo ereditato dal LocalizationService che può essere creato a runtime sotto contesto della DI di Angular\r\n */\r\nexport function ExportLocalization(loc: Type<LocalizationService>) {\r\n return function integrateLoc<T extends { new(...args: any[]): {} }>(constructor: T) {\r\n return class extends constructor { __loc__ = loc; };\r\n }\r\n}\r\n\r\n/**\r\n * Decoratore di esportazione utilizzabile su una proprietà singola. \r\n * Verranno generate 3 proprietà che gestiranno l'esportazione: (prop, prop_csvvis, prop_csvhdr). \r\n * \r\n * Ad esempio, da questa configurazione:\r\n * \r\n * @example\r\n * ```\r\n * @Export(true, \"MyHeader\")\r\n * ciao: string;\r\n * ```\r\n * \r\n * Nasceranno le seguenti proprietà nell'oggetto esportabile:\r\n * \r\n * @example\r\n * ```\r\n * ciao_csvvis: string; => true\r\n * ciao: string;\r\n * ciao_csvhdr: string => \"MyHeader\"\r\n * ```\r\n * \r\n * @param {number} order Ordine di esportazione. Più piccolo è, prima appare il valore\r\n * @param {string} header Titolo della colonna nel file CSV esportato\r\n * @param {string} format Formato di esportazione. Può essere un formato data per i campi data o 'F' per i campi floating point\r\n */\r\nexport const Export = (order: number, header: string, format: string = null, tableid: string = null) =>\r\n (target: Object, propertyKey: string) => {\r\n if (format)\r\n Object.defineProperty(target, propertyKey + csvFormatPrefix, { value: format, writable: false });\r\n Object.defineProperty(target, propertyKey + csvOrdPrefix, { value: order, writable: false });\r\n Object.defineProperty(target, propertyKey + csvVisPrefix, { value: !!header, writable: false });\r\n Object.defineProperty(target, propertyKey + csvHdrPrefix, { value: header, writable: false });\r\n if (tableid)\r\n Object.defineProperty(target, propertyKey + csvPropKey, { value: tableid, writable: false });\r\n\r\n if (target[exportList])\r\n target[exportList].push(propertyKey + csvVisPrefix);\r\n else\r\n target[exportList] = [propertyKey + csvVisPrefix]\r\n };\r\n\r\n/**\r\n * Decoratore di esportazione utilizzabile su un oggetto. \r\n * Per ogni proprietà dell'oggetto verranno generate 3 proprietà che gestiranno l'esportazione: (prop, prop_csvvis, prop_csvhdr). \r\n * Per essere esportate, le proprietà dell'oggetto devono essere marcate con i Decoratori di esportazione\r\n * \r\n * Ad esempio, da questa configurazione:\r\n * \r\n * @example\r\n * ```\r\n * MyObj {\r\n * @Export(true, \"MyHeader\")\r\n * ciao: string;\r\n * }\r\n * \r\n * @ExportObject(true, \"MyHeader\")\r\n * test: MyObj; \r\n * ```\r\n * \r\n * Nasceranno le seguenti proprietà nell'oggetto esportabile:\r\n * \r\n * @example\r\n * ```\r\n * testciao: string; => Valore di MyObj.ciao\r\n * testciao_csvvis: string; => true\r\n * testciao_csvhdr: string => \"MyHeader\" \r\n * ```\r\n *\r\n * @param {number} order Ordine di esportazione. Più piccolo è, prima appare il valore\r\n * @param {any} type Tipo da esportare\r\n */\r\nexport const ExportAs = (order: number, type: any, prefix?: string) =>\r\n (target: Object, propertyKey: string) => {\r\n var addedHere: { [id: string]: boolean } = {};\r\n\r\n var t = new type();\r\n var props = t[exportList];\r\n for (let i = 0; i < props.length; i++) {\r\n let prop = props[i].replace(csvVisPrefix, '');\r\n\r\n if (addedHere[prop]) continue;\r\n\r\n if (typeof t[prop + csvVisPrefix] !== \"undefined\") {\r\n var toEmit: boolean = t[prop + csvVisPrefix];\r\n var lbl = t[prop + csvHdrPrefix];\r\n var format = t[prop + csvFormatPrefix];\r\n var orderProp = t[prop + csvOrdPrefix];\r\n var ppp = propertyKey + \"$_$\" + prop;\r\n\r\n if (format)\r\n Object.defineProperty(target, ppp + csvFormatPrefix, { value: format, writable: false });\r\n Object.defineProperty(target, ppp + csvOrdPrefix, { value: orderProp + order, writable: false });\r\n Object.defineProperty(target, ppp, { value: null, writable: true, enumerable: true });\r\n Object.defineProperty(target, ppp + csvValueNavigator, { value: propertyKey + \".\" + prop.replace(/\\$_\\$/g, '.'), writable: false });\r\n Object.defineProperty(target, ppp + csvVisPrefix, { value: toEmit, writable: false });\r\n Object.defineProperty(target, ppp + csvHdrPrefix, { value: (prefix ? prefix + ' ' : '') + lbl, writable: false });\r\n Object.defineProperty(target, ppp + csvValueType, { value: type, writable: false });\r\n\r\n if (target[exportList])\r\n target[exportList].push(ppp + csvVisPrefix);\r\n else\r\n target[exportList] = [ppp + csvVisPrefix];\r\n\r\n addedHere[ppp] = true;\r\n }\r\n }\r\n };\r\n\r\n/**\r\n * Decoratore di esportazione utilizzabile su una lista, \r\n * si utilizzano 2 navigator rispettivamente per la valorizzazione dell'Header e del Valore e \r\n * per ogni elemento dell'array verranno generate 3 proprietà che gestiranno l'esportazione: (prop, prop_csvvis, prop_csvhdr)\r\n * \r\n * ATTENZIONE: Gli oggetti esportati in questa modalità non devono presentare altri tag di tipo @Export{...} all'interno. Fa tutto questo decoratore\r\n * \r\n * I navigator hanno questa convenzione:\r\n * \r\n * . --> divide due proprietà da richiamare consecutivamente: \"a.b\" richiamerà \"obj.a.b\";\r\n * \r\n * | --> divide più proprietà per le concatenazioni con uno spazio fra una e l'altra: \"regdesc|slice.slicename\" diventerà obj.regdesc + \" \" + obj.slice.slicename\r\n * \r\n * @param {number} order Ordine di esportazione. Più piccolo è, prima appare il valore\r\n * @param {string} headernavigator Navigator col compito di selezionare il titolo per la colonna\r\n * @param {string} valuenavigator Navigator col compito di selezionare il valore per la colonna\r\n * @param {string} valueformat Formato di esportazione per i valori selezionati dal **valuenavigator**. Può essere un formato data per i campi data o 'F' per i campi floating point\r\n */\r\nexport const ExportList = (order: number, headernavigator: string, valuenavigator: string, valueformat: string = null) =>\r\n (target: Object, propertyKey: string) => {\r\n Object.defineProperty(target, propertyKey + csvOrdPrefix, { value: order, writable: false });\r\n Object.defineProperty(target, propertyKey + listCsvValPrefix, { value: valuenavigator, writable: false });\r\n Object.defineProperty(target, propertyKey + listCsvHdrPrefix, { value: headernavigator, writable: false });\r\n Object.defineProperty(target, propertyKey + listCsvValFormat, { value: valueformat, writable: false });\r\n\r\n if (target[exportList])\r\n target[exportList].push(propertyKey + listCsvHdrPrefix);\r\n else\r\n target[exportList] = [propertyKey + listCsvHdrPrefix]\r\n };\r\n\r\n/**\r\n * Decoratore di esportazione utilizzabile su un dizionario. Se ad esempio si vogliono generare le colonne\r\n * \r\n * Valore A = 1\r\n * \r\n * Valore B = 2\r\n * \r\n * Valore C = 3\r\n * \r\n * partendo da un oggetto iniziale { Valore { A: 1, B: 2, C: 3 } }\r\n * \r\n * @param {number} order Ordine di esportazione. Più piccolo è, prima appare il valore\r\n * @param {string} headerprefix Prefisso per l'header\r\n * @param {string} valueprefix Prefisso per il valore\r\n */\r\nexport const ExportDictionary = (order: number, headerprefix: string, valueprefix: string) =>\r\n (target: Object, propertyKey: string) => {\r\n Object.defineProperty(target, propertyKey + csvOrdPrefix, { value: order, writable: false });\r\n Object.defineProperty(target, propertyKey + dictionaryCsvValPrefix, { value: valueprefix, writable: false });\r\n Object.defineProperty(target, propertyKey + dictionaryCsvHdrPrefix, { value: headerprefix, writable: false });\r\n\r\n if (target[exportList])\r\n target[exportList].push(propertyKey + dictionaryCsvHdrPrefix);\r\n else\r\n target[exportList] = [propertyKey + dictionaryCsvHdrPrefix]\r\n };\r\n\r\n/**\r\n * Service che si occupa dell'esportazione degli oggetti marcati dai Decoratori **ExportDictionary**, **ExportList**, **ExportAs** o **Export**\r\n */\r\n@Injectable({ providedIn: \"root\" })\r\nexport class ExportService {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n public constructor(private dates: DateService, private utiExts: UtilityService, private lc: LocalizationService) { }\r\n\r\n /**\r\n * Data una lista di oggetti genera gli header per l'esportazione e integra ogni oggetto con le proprietà esportabili dalla libreria **@ctrl/ngx-csv**\r\n * \r\n * @param {any[]} objs Oggetti da esportare\r\n * \r\n * @returns {CsvHeaders[]} Header di esportazione già ordinati correttamente\r\n */\r\n public setupForExport(objs: any[], columns: string[] = []): CsvHeaders[] {\r\n let headers: CsvHeaders[] = [];\r\n let headersCache = {};\r\n\r\n if (!objs || objs.length == 0)\r\n return headers;\r\n\r\n // Devo per forza farlo per tutti gli oggetti dato che devo esporre le proprietà che mi servono da esportare\r\n // Gli header li raccolgo tutti poi faccio uan distinct in modo da esportare tutte le proprietà per bene\r\n let columnSelectionDictionary: { [id: string]: true } = {};\r\n\r\n if (columns?.length > 0)\r\n for (let i = 0; i < columns?.length; i++)\r\n columnSelectionDictionary[columns[i]] = true;\r\n\r\n for (let i = 0; i < objs.length; i++) {\r\n let hds = this.parseAndGetHeaders(objs[i], columnSelectionDictionary);\r\n // Aggiungo gli header facendo in modo di non aggiungerne mai due uguali per non dover fare una distinct dopo\r\n // che costerebbe comunque risorse. Utilizzo un dizionario d'appoggio per lookup istantanei\r\n for (let k = 0; k < hds.length; k++) {\r\n if (!headersCache[hds[k].key]) {\r\n headersCache[hds[k].key] = true;\r\n headers.push(hds[k]);\r\n }\r\n }\r\n }\r\n\r\n if (!columns || columns.length == 0)\r\n return headers.sort((a, b) => a.order - b.order);\r\n else {\r\n // Se mi arriva la lista di colonne non mi dà solo la visibilità, ma anche l'ordinamento\r\n // le esporto di conseguenza\r\n let orderedHeaders = [];\r\n for (let i = 0; i < columns.length; i++) {\r\n let thisId = columns[i];\r\n for (let i = 0; i < headers.length; i++) {\r\n if (headers[i].propKey == thisId) {\r\n orderedHeaders.push(headers[i]);\r\n break;\r\n }\r\n }\r\n }\r\n return orderedHeaders;\r\n }\r\n }\r\n\r\n /**\r\n * Data una lista di oggetti generici genera gli header per l'esportazione e integra ogni oggetto con le proprietà esportabili dalla libreria **@ctrl/ngx-csv**\r\n * \r\n * @param {GenericItem[]} objs Oggetti generici da esportare\r\n * @param {CsvHeaders[]} columns Colonne richieste dall'esportazione\r\n * \r\n * @returns {CsvHeaders[]} Header di esportazione già ordinati correttamente\r\n */\r\n public setupForGenericExport(objs: GenericItem[], columns: CsvHeaders[]): CsvHeaders[] {\r\n let headers: CsvHeaders[] = [];\r\n if (!objs || objs.length == 0)\r\n return headers;\r\n\r\n // Devo per forza farlo per tutti gli oggetti dato che devo esporre le proprietà che mi servono da esportare\r\n objs.forEach((obj, index) => {\r\n if (index == 0)\r\n headers = this.parseAndGetGenericHeaders(obj, columns);\r\n else\r\n this.parseAndGetGenericHeaders(obj, columns);\r\n });\r\n\r\n return headers;\r\n }\r\n\r\n /**\r\n * Dato un oggetto generico genera gli header per l'esportazione e lo integra con le proprietà esportabili dalla libreria **@ctrl/ngx-csv**\r\n * \r\n * Metodo interno richiamato da **setupForGenericExport**\r\n * \r\n * @param {GenericItem} obj Oggetto generico da esportare\r\n * @param {CsvColumn[]} columns Colonne richieste dall'esportazione\r\n * \r\n * @returns {CsvHeaders[]} Header di esportazione già ordinati correttamente\r\n */\r\n private parseAndGetGenericHeaders(obj: GenericItem, columns: CsvHeaders[]): CsvHeaders[] {\r\n if (!obj.properties)\r\n return null;\r\n\r\n var headers: CsvHeaders[] = [];\r\n\r\n //Miracle incoming\r\n columns.forEach(t => {\r\n var propValue = obj.properties[t.key];\r\n Object.defineProperty(obj, t.key + \"_exp\", { value: propValue, writable: false, enumerable: true });\r\n headers.push({ label: t.label, key: t.key + \"_exp\", order: t.order, type: t.type, propKey: null });\r\n });\r\n\r\n //Tirati fuori tutti gli header faccio sort sull'ordinamento\r\n return headers.sort((a, b) => { return a.order - b.order });\r\n }\r\n\r\n /**\r\n * Dato un oggetto genera gli header per l'esportazione e lo integra con le proprietà esportabili dalla libreria **@ctrl/ngx-csv**\r\n * \r\n * Metodo interno richiamato da **setupForExport**\r\n * \r\n * @param {any} obj Oggetto generico da esportare\r\n * \r\n * @returns {CsvHeaders[]} Header di esportazione già ordinati correttamente\r\n */\r\n private parseAndGetHeaders(obj: any, columnsSelection?: { [id: string]: true }): CsvHeaders[] {\r\n var headers: CsvHeaders[] = [];\r\n\r\n // Miracle incoming\r\n let exportProps = obj[exportList] || [];\r\n let loc = obj[locProperty] ? this.lc.generateFromType(obj[locProperty]) : null;\r\n\r\n if (exportProps.length == 0)\r\n console.warn(\"[@esfaenza/extensions] Nessuna colonna configurata da esportare!\");\r\n\r\n for (let i = 0; i < exportProps.length; i++) {\r\n let prop = exportProps[i];\r\n let propBase = \"\";\r\n let toCall: Function;\r\n if (prop.endsWith(listCsvHdrPrefix)) {\r\n propBase = prop.replace(listCsvHdrPrefix, '');\r\n toCall = this.parseList.bind(this);\r\n }\r\n else if (prop.endsWith(dictionaryCsvHdrPrefix)) {\r\n propBase = prop.replace(dictionaryCsvHdrPrefix, '');\r\n toCall = this.parseDictionary.bind(this);\r\n }\r\n else if (prop.endsWith(csvVisPrefix)) {\r\n propBase = prop.replace(csvVisPrefix, '');\r\n if (typeof obj[propBase + csvValueNavigator] !== \"undefined\")\r\n toCall = this.parseObject.bind(this);\r\n else\r\n toCall = this.parseProperty.bind(this);\r\n }\r\n\r\n if (toCall)\r\n toCall(obj, propBase, headers, columnsSelection, loc);\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n /**\r\n * Setup per l'esportazione di una singola proprietà. \r\n * Viene generato l'header e la proprietà relativa al valore formattato o no\r\n * \r\n * @param {any} obj Oggetto di cui esportare la proprietà **prop**\r\n * @param {string} prop Proprietà da esportare\r\n * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione \r\n * @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può\r\n */\r\n private parseProperty(obj: any, prop: string, headers: CsvHeaders[], columnsSelection?: { [id: string]: true }, loc?: LocalizationService) {\r\n let toEmit: boolean = obj[prop + csvVisPrefix];\r\n let format: string = obj[prop + csvFormatPrefix];\r\n let propKey = obj[prop + csvPropKey];\r\n\r\n if (propKey && !columnsSelection[propKey] && Object.keys(columnsSelection).length > 0) {\r\n console.log(\"[@esfaenza/extensions] Colonna da non esportare: \" + propKey);\r\n return;\r\n }\r\n\r\n let text = obj[prop + csvHdrPrefix];\r\n let label = loc && text ? loc.loc(text) : text || \"\";\r\n let order = obj[prop + csvOrdPrefix];\r\n\r\n if (!toEmit)\r\n return;\r\n\r\n // Se non ho un formato esporto direttamente\r\n if (!format) {\r\n // Se è un formato data mi assicuro di non stampare mai una data 00:00:00 altrimenti in esportazione viene uno schifo\r\n let val = obj[prop] ? this.dates.trimSeconds(obj[prop].toString()) : \"\";\r\n let key = prop + \"_nofmt\";\r\n Object.defineProperty(obj, key, { value: val, writable: false, enumerable: true });\r\n headers.push({ label, key, order, type: \"string\", propKey });\r\n } else {\r\n let key = prop + \"_fmt\";\r\n\r\n // Caso formato numerico\r\n if (format == \"F\") {\r\n // Check considerando la possibilità di zeri\r\n let val = obj[prop] != null ? obj[prop].toString() : \"\";\r\n // Elimino tutte le virgole (indicatori di migliaia per la culture default en-US)\r\n val = val.replace(/,/, \"\");\r\n // Il singolo punto che c'è, se presente (separatore decimali) lo trasformo in virgola\r\n let valConverted = val.replace(\".\", \",\");\r\n\r\n Object.defineProperty(obj, key, { value: valConverted, writable: false, enumerable: true });\r\n headers.push({ label, key, order, type: \"number\", propKey });\r\n } else {\r\n // Se ho un formato data trasformo in dayjs, formatto ed esporto\r\n // Per la trasformazione in dayjs provo prima a passargli la stringa di netto, sperando la riconosca\r\n // Se non funziona provo a definirgli la formattazione standard del metering per quel linguaggio\r\n let val = this.dates.getFormatted(obj[prop], format.length <= 10, format.length > 16);\r\n Object.defineProperty(obj, key, { value: val ?? \"\", writable: false, enumerable: true });\r\n headers.push({ label, key, order, type: \"date\", propKey });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Setup per l'esportazione di una singola proprietà da un oggetto. \r\n * Viene generato l'header e la proprietà relativa al valore formattato o no. \r\n * \r\n * Per ottenere il valore e l'header della proprietà vengono utilizzati i navigatori auto-generati nel decoratore **ExportAs**\r\n * \r\n * @param {any} obj Oggetto di cui esportare la proprietà **prop**\r\n * @param {string} prop Proprietà da esportare\r\n * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione\r\n * @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può\r\n */\r\n private parseObject(obj: any, prop: string, headers: CsvHeaders[], columnsSelection?: { [id: string]: true }, loc?: LocalizationService) {\r\n //se questa proprietà ha un navigator significa che deriva da un oggetto interno, recupero il valore in questa fase dato che prima non ce l'ho\r\n let valuenavigator = obj[prop + csvValueNavigator];\r\n\r\n //Es. di valuenavigator obj.subobj.subsubobj.property\r\n let jmps = valuenavigator.split(\".\");\r\n\r\n // Localizzazione presa dalla classe base se c'è, altrimenti dalla classe interna (cioè dal primo saltino)\r\n if (!loc) {\r\n let type = obj[prop + csvValueType];\r\n let proto = new type();\r\n loc = proto[locProperty] ? this.lc.generateFromType(proto[locProperty]) : null;\r\n }\r\n\r\n //Mi clono l'oggetto originale per non uccidergli i riferimenti\r\n let clone = JSON.parse(JSON.stringify(obj));\r\n //Salto ricorsivamente su me stesso per arrivare alla proprietà\r\n //Salto 1 > diventa obj\r\n //Salto 2 > diventa obj.subobj\r\n //ecc...\r\n jmps.forEach(pp => { clone = clone?.[pp]; });\r\n\r\n //Valore finale :D\r\n let value = clone;\r\n\r\n let text = obj[prop + csvHdrPrefix];\r\n let label = loc && text ? loc.loc(text) : text || \"\";\r\n let order = obj[prop + csvOrdPrefix];\r\n\r\n //Se per questa proprietà ho un formato lo applico\r\n let format: string = obj[prop + csvFormatPrefix];\r\n let type: 'string' | 'number' | 'date' = \"string\";\r\n if (format == \"F\") {\r\n let val = value.toString();\r\n val = val.replace(/,/, \"\");\r\n value = val.replace(\".\", \",\");\r\n type = \"number\";\r\n }\r\n else if (format) {\r\n value = this.dates.getFormatted(value, format.length <= 10, format.length > 16);\r\n type = \"date\";\r\n }\r\n\r\n Object.defineProperty(obj, prop, { value: value ?? \"\", writable: false, enumerable: true });\r\n headers.push({ label, key: prop, order, type, propKey: null });\r\n }\r\n\r\n /**\r\n * Setup per l'esportazione di una lista di valori pivottati dinamicamente:\r\n * \r\n * => Recupero il valore utilizzando i navigatori\r\n * \r\n * => Recupero l'header utilizzando i navigatori\r\n * \r\n * => Con il valore ci creo la property\r\n * \r\n * => Con l'header e il riferimento alla property appena creata creo un record negli header da esportare\r\n * \r\n * @param {any} obj Oggetto di cui esportare la proprietà **prop**\r\n * @param {string} prop Proprietà da esportare\r\n * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione \r\n * @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può\r\n */\r\n private parseList(obj: any, prop: string, headers: CsvHeaders[], columnsSelection?: { [id: string]: true }, loc?: LocalizationService) {\r\n let headernavigator = obj[prop + listCsvHdrPrefix];\r\n let valuenavigator = obj[prop + listCsvValPrefix];\r\n let valueformat = obj[prop + listCsvValFormat];\r\n let order = obj[prop + csvOrdPrefix];\r\n\r\n var jumps: string[], tmpRes: any;\r\n var objs: any[] = obj[prop];\r\n\r\n for (let idx = 0; idx < objs.length; idx++) {\r\n let listitem = objs[idx];\r\n\r\n var headersplit = headernavigator.split(\" \");\r\n var label = \"\";\r\n\r\n // Per l'header si considera a se stante ogni pezzo separato da spazio per fare le concatenazioni\r\n headersplit.forEach(pr => {\r\n jumps = pr.split(\".\");\r\n tmpRes = JSON.parse(JSON.stringify(listitem));\r\n jumps.forEach(pp => { tmpRes = tmpRes[pp]; });\r\n\r\n let localized = !!loc ? loc.loc(tmpRes) : tmpRes\r\n if (!label) label = localized;\r\n else label += \" \" + localized;\r\n });\r\n\r\n jumps = valuenavigator.split(\".\");\r\n tmpRes = JSON.parse(JSON.stringify(listitem));\r\n jumps.forEach(pp => { tmpRes = tmpRes[pp]; });\r\n let value = tmpRes;\r\n\r\n let type: 'string' | 'number' | 'date' = \"string\";\r\n if (valueformat == \"F\") {\r\n let val = value != null ? value.toString() : \"\";\r\n val = val.replace(/,/, \"\");\r\n value = val.replace(\".\", \",\");\r\n type = \"number\";\r\n }\r\n else if (valueformat) {\r\n value = this.dates.getFormatted(obj[prop], valueformat.length <= 10, valueformat.length > 16);\r\n type = \"date\";\r\n }\r\n\r\n Object.defineProperty(obj, prop + idx, { value: value ?? \"\", writable: false });\r\n headers.push({ label, key: prop + idx, order: order + idx, type, propKey: null });\r\n }\r\n }\r\n\r\n /**\r\n * Setup per l'esportazione di una lista di valori pivottati dinamicamente:\r\n * \r\n * => Recupero il valore utilizzando i navigatori\r\n * \r\n * => Recupero l'header utilizzando i navigatori\r\n * \r\n * => Con il valore ci creo la property\r\n * \r\n * => Con l'header e il riferimento alla property appena creata creo un record negli header da esportare\r\n * \r\n * @param {any} obj Oggetto di cui esportare la proprietà **prop**\r\n * @param {string} prop Proprietà da esportare\r\n * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione\r\n */\r\n private parseDictionary(obj: any, prop: string, headers: CsvHeaders[], columnsSelection?: { [id: string]: true }) {\r\n let headerprefix = obj[prop + dictionaryCsvHdrPrefix];\r\n let valueprefix = obj[prop + dictionaryCsvValPrefix];\r\n let order = obj[prop + csvOrdPrefix];\r\n\r\n var object: { [id: string]: string } = obj[prop];\r\n let idx = 0;\r\n\r\n for (const [key, val] of Object.entries(object)) {\r\n\r\n // Ignoro tutti i cmapi che non fanno parte della selezione delle colonne\r\n if (key && !columnsSelection[key] && Object.keys(columnsSelection).length > 0) {\r\n console.log(\"[@esfaenza/extensions] Colonna da non esportare: \" + key);\r\n return;\r\n }\r\n\r\n let propname = prop + \"_\" + key;\r\n let value = valueprefix ? valueprefix + \" \" + val : val;\r\n let label = headerprefix ? headerprefix + \" \" + key : key;\r\n\r\n Object.defineProperty(obj, propname, { value: value ?? \"\", writable: false });\r\n headers.push({ label: label, key: propname, order: order + idx++, type: 'string', propKey: null });\r\n }\r\n }\r\n\r\n /** \r\n * Effettua l'esportazione in file CSV \r\n */\r\n private exportCSV(fn: string, headers: CsvHeaders[], data: any[]) {\r\n var buffer = this.exportCSVBuffer(fn, headers, data);\r\n var blob = new Blob([new TextDecoder().decode(buffer as any)], { type: 'text/csv' });\r\n var objectUrl = URL.createObjectURL(blob);\r\n this.utiExts.fileDownload(objectUrl, fn.endsWith('.xlsx') ? fn.replace('.xlsx', '.csv') : fn.endsWith('.csv') ? fn : fn + \".csv\");\r\n }\r\n\r\n private exportCSVBuffer(fn: string, headers: CsvHeaders[], data: any[]): Uint8Array {\r\n let csvData = '', row = '', sep = ';';\r\n\r\n for (let i = 0; i < headers.length; i++) {\r\n let h = headers[i];\r\n row += `${row != '' ? sep : ''}\"${h.label}\"`;\r\n }\r\n csvData += row + '\\r\\n';\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n row = '';\r\n let item = data[i];\r\n for (let j = 0; j < headers.length; j++) {\r\n let val = item[headers[j].key];\r\n row += `${row != '' ? sep : ''}\"${val}\"`;\r\n }\r\n csvData += row + '\\r\\n';\r\n }\r\n\r\n var BOM = [0xEF, 0xBB, 0xBF];\r\n var buffer = new Uint8Array([...BOM, ...new TextEncoder().encode(csvData)]);\r\n return buffer;\r\n }\r\n\r\n /** Effettua l'esportazione del file Excel basandosi sul modulo **ExcelJS**, sugli header **headers** e sui dati **data** */\r\n private async exportExcel(fn: string, headers: CsvHeaders[], data: any[]) {\r\n\r\n let buffer: Uint8Array = this.exportExcelBuffer(fn, headers, data);\r\n let blob = new Blob([buffer as any], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;\" });\r\n let objectUrl = URL.createObjectURL(blob);\r\n this.utiExts.fileDownload(objectUrl, fn.endsWith('.csv') ? fn.replace('.csv', '.xlsx') : fn.endsWith('.xlsx') ? fn : fn + \".xlsx\");\r\n }\r\n\r\n private exportExcelBuffer(fn: string, headers: CsvHeaders[], data: any[]): Uint8Array {\r\n\r\n var toExport = [];\r\n headers = headers.sort((a: CsvHeaders, b: CsvHeaders) => a.order - b.order);\r\n\r\n for (let d = 0; d < data.length; d++) {\r\n let toExportItem = {};\r\n\r\n for (let h = 0; h < headers.length; h++) {\r\n let head = headers[h];\r\n let val = data[d][head.key];\r\n\r\n if (head.type == \"date\" && val && !this.dates.getDateConvertion(val))\r\n console.error(\"[@esfaenza/extensions - export] Valore data che non è una data per qualche motivo: \" + val);\r\n\r\n toExportItem[head.label] =\r\n head.type == \"date\" ? (val ? this.dates.getDateConvertion(val)?.toDate() : \"\") :\r\n head.type == \"number\" ? (isNaN(parseFloat(val.replace(',', '.'))) ? \"\" : parseFloat(val.replace(',', '.'))) :\r\n val;\r\n }\r\n toExport.push(toExportItem);\r\n }\r\n\r\n const ws = XLSX.utils.json_to_sheet(toExport);\r\n\r\n // Aggiustamento date\r\n Object.keys(ws).forEach(cell => { if (ws[cell].t === 'd') ws[cell].z = 'dd/mm/yyyy h:m:s'; });\r\n\r\n const wb = XLSX.utils.book_new();\r\n XLSX.utils.book_append_sheet(wb, ws, 'Data');\r\n let buffer: Uint8Array = XLSX.write(wb, { bookType: 'xlsx', type: 'array', cellDates: true });\r\n return buffer;\r\n }\r\n\r\n /**\r\n * Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**\r\n *\r\n * @param {any[]} items Oggetti da esportare\r\n */\r\n public export(items: any[], format: 'CSV' | 'XLSX', fileName: string, type: Type<any>, columnsFilter?: string[], genericHeaders?: CsvHeaders[]): CsvHeaders[] {\r\n // Deepclone con assegnatura del tipo\r\n var createdItems = items.map(t => this.utiExts.deepClone(t, type));\r\n let headers = genericHeaders ? this.setupForGenericExport(createdItems, genericHeaders) : this.setupForExport(createdItems, columnsFilter);\r\n (format == \"CSV\" ? this.exportCSV : this.exportExcel).bind(this)(fileName, headers, createdItems);\r\n return headers;\r\n }\r\n\r\n /**\r\n * Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**\r\n *\r\n * @param {any[]} items Oggetti da esportare\r\n */\r\n public exportBuffer(items: any[], format: 'CSV' | 'XLSX', fileName: string, type: Type<any>, columnsFilter?: string[], genericHeaders?: CsvHeaders[]): Uint8Array {\r\n // Deepclone con assegnatura del tipo\r\n var createdItems = items.map(t => this.utiExts.deepClone(t, type));\r\n let headers = genericHeaders ? this.setupForGenericExport(createdItems, genericHeaders) : this.setupForExport(createdItems, columnsFilter);\r\n return (format == \"CSV\" ? this.exportCSVBuffer : this.exportExcelBuffer).bind(this)(fileName, headers, createdItems);\r\n }\r\n}","// Angular\r\nimport { Inject, Injectable, Optional, PLATFORM_ID } from \"@angular/core\";\r\n\r\n// Es\r\nimport { BaseLocalization } from \"@esfaenza/localizations\";\r\n\r\n// Modelli\r\nimport { MessageService } from './extensions.messages.service';\r\n\r\n// Librerie\r\nimport Swal from \"sweetalert2\";\r\nimport { first } from \"rxjs/operators\";\r\nimport { isPlatformBrowser } from \"@angular/common\";\r\n\r\n/**\r\n * Service che fornisce un accesso base in lettura/scrittura sulla clipboard\r\n */\r\n@Injectable({providedIn: \"root\"})\r\nexport class ClipboardService {\r\n\r\n /**\r\n * Oggetto statico di localizzazione per i messaggi di questa Service\r\n */\r\n private loc = {\r\n \"Unfortunately Firefox doesn't yet support direct Clipboard access if not via extensions, Please use Chrome to do this operation\": {\r\n 'en-US': \"Unfortunately Firefox doesn't yet support direct Clipboard access if not via extensions, Please use Chrome to do this operation\",\r\n 'it-IT': \"Mi dispiace ma Firefox non supporta l'accesso diretto alla Clipboard, se non attraverso le estensioni. Si prega di usare Chrome\"\r\n },\r\n \"Generic error during 'copy' command execution\": {\r\n 'en-US': \"Generic error during 'copy' command execution\",\r\n 'it-IT': \"Errore generico durante l'esecuzione del comando 'copy'\"\r\n },\r\n \"Error during Clipboard content read operation\": {\r\n 'en-US': \"Error during Clipboard content read operation\",\r\n 'it-IT': \"Errore nella lettura del contenuto della Clipboard\"\r\n },\r\n \"Error during Clipboard content copy operation\":{\r\n 'en-US': \"Error during Clipboard content copy operation\",\r\n 'it-IT': \"Errore nella scrittura del contenuto nella Clipboard\"\r\n },\r\n \"Please insert your clipboard content\": {\r\n 'en-US': \"Please insert your clipboard content\",\r\n 'it-IT': \"Si prega di incollare il contenuto della Clipboard\"\r\n },\r\n \"User input required\": {\r\n 'en-US': \"User input required\",\r\n 'it-IT': \"Richiesto Input utente\"\r\n },\r\n \"Your current browser does not support reading from the clipboard directly. Please paste your clipboard's content in this Input field and confirm the operation\": {\r\n 'en-US': \"Your current browser does not support reading from the clipboard directly. Please paste your clipboard's content in this Input field and confirm the operation\",\r\n 'it-IT': \"Il browser corrente non supporta la lettura diretta dei dati della Clipboard, si prega di effettuare un'incolla (CTRL + V) nella casella di testo e confermare l'operazione\"\r\n },\r\n \"Confirm\": {\r\n 'en-US': \"Confirm\",\r\n 'it-IT': \"Conferma\"\r\n },\r\n \"Cancel\": {\r\n 'en-US': \"Cancel\",\r\n 'it-IT': \"Annulla\"\r\n },\r\n };\r\n\r\n private isBrowser: boolean = true;\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n public constructor(private msgService: MessageService, @Optional() private locProvider: BaseLocalization, @Inject(PLATFORM_ID) platformId: Object) {\r\n this.isBrowser = isPlatformBrowser(platformId);\r\n }\r\n\r\n /**\r\n * Prende il valore della clipboard. \r\n * Si può specificare se ci si aspetta una lista o una matrice di valori in modo da ricevere già un risultato utilizzabile\r\n * \r\n * @param {'array' | 'matrix'} style Stile dell'output desiderato, se array o matrice\r\n * @param {Function} valueFoundCallback Callback che questa funzione chiamerà una volta ottenuto i valori richiesti dalla clipboard\r\n */\r\n public async getClipboard(style: 'array' | 'matrix', valueFoundCallback : (values: string[] | string[][]) => void) {\r\n if(!this.isBrowser) {\r\n console.log(\"@esfaenza/extensions ClipboardService requires browser environment to function. Every call will return the default for the expected value\")\r\n valueFoundCallback([]);\r\n return;\r\n }\r\n \r\n let LOCALE = this.locProvider ? await this.locProvider.Locale.pipe(first()).toPromise() : 'it-IT';\r\n\r\n if (navigator.userAgent.indexOf(\"Firefox\") != -1) {\r\n \r\n Swal.fire({\r\n title: this.loc[\"User input required\"][LOCALE],\r\n text: this.loc[\"Your current browser does not support reading from the clipboard directly. Please paste your clipboard's content in this Input field and confirm the operation\"][LOCALE],\r\n input: 'textarea',\r\n icon: \"warning\",\r\n confirmButtonText: this.loc[\"Confirm\"][LOCALE],\r\n cancelButtonText: this.loc[\"Cancel\"][LOCALE],\r\n showCancelButton: true,\r\n customClass: {\r\n confirmButton: \"btn btn-primary\",\r\n cancelButton: \"btn btn-secondary app-margin-right-15\",\r\n container: \"app-wrap\",\r\n },\r\n reverseButtons: true,\r\n allowOutsideClick: false,\r\n inputValidator: (value) => {\r\n if (!value)\r\n return this.loc[\"Please insert your clipboard content\"][LOCALE]\r\n }\r\n }).then(t => {\r\n if (t.isConfirmed) {\r\n console.log(\"[@esfaenza/extensions] Retrieving input data from user input\");\r\n this.doClipboardDataGet(t.value, style, valueFoundCallback);\r\n }\r\n });\r\n return;\r\n }\r\n\r\n if ((<any>window).clipboardData) {\r\n console.log(\"[@esfaenza/extensions] Found clipboardData\");\r\n let data = (<any>window).clipboardData.getData(\"Text\");\r\n this.doClipboardDataGet(data, style, valueFoundCallback);\r\n }\r\n\r\n else if ((<any>window).navigator.clipboard) {\r\n console.log(\"[@esfaenza/extensions] Found navigator clipboard\");\r\n (<any>window).navigator.permissions.query({ name: 'clipboard-read' }).then(result => {\r\n if (!(result.state === 'granted' || result.state === 'prompt'))\r\n {\r\n console.error(\"[@esfaenza/extensions] Clipboard permission not granted\");\r\n if (valueFoundCallback) valueFoundCallback([]);\r\n return;\r\n }\r\n\r\n console.log(\"[@esfaenza/extensions] Clipboard permission granted, retrieving values\");\r\n (<any>window).navigator.clipboard.readText()\r\n .then((t: string) => this.doClipboardDataGet(t, style, valueFoundCallback))\r\n .catch((err: any) => this.msgService.simpleError(this.loc[\"Error during Clipboard content read operation\"][LOCALE] + \": \" + err));\r\n });\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private doClipboardDataGet(clipboardText: string, style: \"matrix\" | \"array\", valueFoundCallback: Function) {\r\n console.log(\"[@esfaenza/extensions] Retrieved clipboard values: \" + clipboardText);\r\n let value = style == \"array\" ? this.getClipboardLines(clipboardText) :\r\n style == \"matrix\" ? this.getClipboardMatrix(clipboardText) : [];\r\n console.log(`[@esfaenza/extensions] Adapted for ${style}: ${JSON.stringify(value)}`);\r\n if (valueFoundCallback) valueFoundCallback(value);\r\n }\r\n\r\n /**\r\n * Ottiene il contenuto della clipboard diviso per righe (separate da newline)\r\n * \r\n * @param {string} data contenuto letto dalla clipboard\r\n * \r\n * @returns {string[]} Array contenente il testo preso dalla clipboard diviso per riga\r\n */\r\n private getClipboardLines(data: string): string[] {\r\n let trimmedData = data.trim();\r\n\r\n if (!trimmedData.includes(\"\\r\\n\") && trimmedData.includes(\"\\n\"))\r\n return trimmedData.split(\"\\n\");\r\n\r\n return trimmedData.split(\"\\r\\n\");\r\n }\r\n\r\n /**\r\n * Ottiene il contenuto della clipboard diviso per righe (separate da newline) e colonne (separate da tab)\r\n * \r\n * @param {string} data contenuto letto dalla clipboard\r\n * \r\n * @returns {string[][]} Matrice contenente il testo preso dalla clipboard diviso per riga e colonna\r\n */\r\n private getClipboardMatrix(data: string): string[][] {\r\n var ret: string[][] = [];\r\n var rows = !data.includes(\"\\r\\n\") && data.includes(\"\\n\") ? data.split(\"\\n\") : data.split(\"\\r\\n\");\r\n\r\n // A quanto pare ogni valore è separato da un \\t... spero che sia uno standard di quando si copia da excel altrimenti ciao\r\n for (let i = 0; i < rows.length; i++)\r\n ret.push(rows[i].split('\\t').map(t => t.trim()));\r\n return ret;\r\n }\r\n\r\n /**\r\n * Metodo che copia un testo all'interno della clipboard\r\n * \r\n * @param {string} text Testo da inserire nella clipboard\r\n */\r\n public async copyTextToClipboard(text: string) {\r\n if(!this.isBrowser) {\r\n console.log(\"@esfaenza/extensions ClipboardService requires browser environment to function. Every call will return the default for the expected value\")\r\n return;\r\n }\r\n\r\n let LOCALE = this.locProvider ? await this.locProvider.Locale.pipe(first()).toPromise() : 'it-IT';\r\n\r\n var textArea = document.createElement(\"textarea\");\r\n\r\n //\r\n // *** This styling is an extra step which is likely not required. ***\r\n //\r\n // Why is it here? To ensure:\r\n // 1. the element is able to have focus and selection.\r\n // 2. if element was to flash render it has minimal visual impact.\r\n // 3. less flakyness with selection and copying which **might** occur if\r\n // the textarea element is not visible.\r\n //\r\n // The likelihood is the element won't even render, not even a flash,\r\n // so some of these are just precautions. However in IE the element\r\n // is visible whilst the popup box asking the user for permission for\r\n // the web page to copy to the clipboard.\r\n //\r\n\r\n // Place in top-left corner of screen regardless of scroll position.\r\n textArea.style.position = \"fixed\";\r\n textArea.style.top = \"0\";\r\n textArea.style.left = \"0\";\r\n\r\n // Ensure it has a small width and height. Setting to 1px / 1em\r\n // doesn't work as this gives a negative w/h on some browsers.\r\n textArea.style.width = \"2em\";\r\n textArea.style.height = \"2em\";\r\n\r\n // We don't need padding, reducing the size if it does flash render.\r\n textArea.style.padding = \"0\";\r\n\r\n // Clean up any borders.\r\n textArea.style.border = \"none\";\r\n textArea.style.outline = \"none\";\r\n textArea.style.boxShadow = \"none\";\r\n\r\n // Avoid flash of white box if rendered for any reason.\r\n textArea.style.background = \"transparent\";\r\n\r\n textArea.value = text;\r\n\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n try {\r\n var successful = document.execCommand(\"copy\");\r\n if(!successful)\r\n this.msgService.simpleError(this.loc[\"Generic error during 'copy' command execution\"][LOCALE]);\r\n } catch (err) {\r\n this.msgService.simpleError(this.loc[\"Error during Clipboard content copy operation\"][LOCALE] + \": \"+ err);\r\n }\r\n\r\n document.body.removeChild(textArea);\r\n }\r\n}","/**\r\n * Classe che rappresenta una risposta ricevuta da un Backend\r\n */\r\nexport class CallResult<T = never>{\r\n\r\n /** Tempo impiegato perché la chiamata terminasse */\r\n elapsedtime: string;\r\n /** **true** se tutto è andato bene, **false** altrimenti */\r\n success: boolean;\r\n /** Indica se ci sono errori */\r\n haserror: boolean;\r\n /** Codice dell'eventuale errore restituito */\r\n errorcode: string;\r\n /** Log dell'eventuale errore restituito */\r\n error: string;\r\n /** ID dell'eventuale entità relativa a questa risposta */\r\n entityid: any;\r\n /** Indica se ci sono warning */\r\n haswarning: boolean;\r\n /** Log dell'eventuale warning restituito */\r\n warning: string;\r\n /** Entità collegata a questo CallResult */\r\n entity: T;\r\n}","/**\r\n * Header per il file CSV che sta venendo generato\r\n */\r\nexport class CsvHeaders {\r\n\r\n /**\r\n * Intestazione della colonna\r\n */\r\n label: string;\r\n\r\n /**\r\n * Nome della proprietà visualizzata in questa colonna\r\n */\r\n key: string;\r\n\r\n /**\r\n * Ordine della colonna\r\n */\r\n order: number;\r\n\r\n /**\r\n * Nome della chiave della proprietà lato es-table\r\n */\r\n propKey: string;\r\n \r\n /**\r\n * Tipo della colonna (per eventuali formattazioni se si scarica in Excel)\r\n */\r\n type: 'string' | 'number' | 'date';\r\n}\r\n","/**\r\n * Rappresentazione di un oggetto generico\r\n */\r\nexport class GenericItem {\r\n\r\n /**\r\n * Dizionario Chiave - Valore delle proprietà di questo oggetto generico\r\n */\r\n properties: Record<string, string>;\r\n}\r\n","/** Enumeratore dei tipi di messaggio che i moduli esterni possono contattare sull'applicazione principale */\r\n\r\nexport enum InboundMessageTypes {\r\n /** Evento di navigazione */\r\n Navigation\r\n}\r\n","/** Classe che rappresenta un generico messaggio scambiato fra applicazione e moduli */\r\n\r\nexport class InterComMessage {\r\n /**\r\n * Costruttore\r\n *\r\n * @param type Tipo di messaggio\r\n * @param message Contenuto del messaggio\r\n */\r\n constructor(public type: any, public message: any) { }\r\n}\r\n","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n// Librerie\r\nimport { Subject } from \"rxjs\";\r\n\r\n// Modelli\r\nimport { InterComMessage } from \"../models/InterComMessage\";\r\n\r\n/** Service che si occupa di gestire la comunicazione fra i moduli interni ed esterni dell'applicativo */\r\n@Injectable({providedIn: \"root\"})\r\nexport class InterComService {\r\n\r\n /** Messaggi in uscita, uno per ogni recipient registratosi dall'entrypoint **register** */\r\n public outbounds: { [id: string]: Subject<InterComMessage> } = {};\r\n /** Messaggi in entrata, unico per applicazione principale */\r\n public inbounds: Subject<InterComMessage> = new Subject<InterComMessage>();\r\n\r\n /**\r\n * Metodo che permette di inviare un messaggio dall'applicazione ad un modulo esterno o viceversa\r\n * \r\n * @param {any} messageType Tipologia di messaggio. Sarà di tipo **InboundMessageTypes** per tutti i messaggi inbound, dinamico per tutti i mesaggi outbound (il tipo dipenderà dagli enum dei messaggi dei moduli esterni)\r\n * @param {any} message Messaggio da inviare che può essere un dto in casi complessi ma dovrà essere gestito a dovere lato implementativo\r\n * @param {string} recipient Destinatario del messaggio. Per i messaggi inbound dev'essere lasciato vuoto, per i messaggi outbound sarà valorizzato alla chiave del modulo a cui si vuole inviare il messaggio\r\n */\r\n public send(messageType: any, message: any, recipient?: string): void {\r\n let msg = new InterComMessage(messageType, message);\r\n\r\n // Se non c'è un recipient significa che è un modulo esterno che invia messaggi al modulo main (quindi messaggio in entrata - inbound)\r\n // Altrimenti significa che è il modulo main ad inviare messaggi ai moduli esterni (messaggio in uscita - outbound)\r\n if (!recipient) {\r\n this.inbounds.next(msg);\r\n }\r\n else {\r\n if (!this.outbounds[recipient])\r\n console.warn(\"@esfaenza/extensions - InterComService: Impossibile inviare il messaggio al recipient \" + recipient + \" assicurarsi che il modulo sia caricato e che effettui la chiamata al metodo 'regisster'\");\r\n else\r\n this.outbounds[recipient].next(msg)\r\n }\r\n }\r\n\r\n /**\r\n * Permette di registrare un modulo esterno alla lista dei moduli in listening sulla coda di messaggi\r\n * \r\n * @param {string} key Chiave del modulo da registrare. Tutti i messaggi inbound saranno inviati dall'applicazione principale su questa chiave\r\n */\r\n public register(key: string): void {\r\n if (this.outbounds[key])\r\n throw \"@esfaenza/extensions - InterComService: Impossibile registrare più volte lo stesso modulo\";\r\n this.outbounds[key] = new Subject<InterComMessage>();\r\n }\r\n}","/*\r\n * Public API Surface of extensions\r\n */\r\nexport * from './lib/modules/extensions.module';\r\nexport * from './lib/services/extensions.base';\r\nexport * from './lib/services/extensions.dates.service';\r\nexport * from './lib/services/extensions.exports.service';\r\nexport * from './lib/services/extensions.clipboard.service';\r\nexport * from './lib/services/extensions.hashing.service';\r\nexport * from './lib/services/extensions.messages.service';\r\nexport * from './lib/services/extensions.utilities.service';\r\nexport * from './lib/services/extensions.embedding.service';\r\nexport * from './lib/tokens';\r\nexport * from './lib/models/CallResult';\r\nexport * from './lib/models/CsvHeaders';\r\nexport * from './lib/models/GenericItem';\r\n\r\nexport * from './lib/pipes/loc_date.pipe';\r\n\r\n/** Intercom */\r\nexport * from './lib/models/InboundMessageTypes';\r\nexport * from './lib/models/InterComMessage';\r\nexport * from './lib/services/extensions.intercom.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DateService","i2.HashingService","filter","i1.AppEmbeddingExtensions","i2.UtilityService","i3","Swal"],"mappings":"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"}