diff --git a/.gitignore b/.gitignore index e8a3d06..c918b74 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,10 @@ # See http://help.github.com/ignore-files/ for more about ignoring files. # Compiled output -/dist /tmp /out-tsc /bazel-out +/dist # Node /node_modules diff --git a/angular.json b/angular.json index 5efa987..c6ba19a 100644 --- a/angular.json +++ b/angular.json @@ -13,7 +13,7 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "dist/vaniaferrari-portfolio", + "outputPath": "docs", "index": "src/index.html", "main": "src/main.ts", "polyfills": [ @@ -35,7 +35,9 @@ ] }, "configurations": { - "production": { + "production": { + "baseHref": "/angularPortfolioVaffer/", + "outputPath": "docs", "budgets": [ { "type": "initial", diff --git a/docs/404.html b/docs/404.html index ca05d9b..fc0ce5a 100644 --- a/docs/404.html +++ b/docs/404.html @@ -3,11 +3,11 @@ Vania Ferrari's Portfolio - + - + diff --git a/docs/index.html b/docs/index.html index ca05d9b..fc0ce5a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3,11 +3,11 @@ Vania Ferrari's Portfolio - + - + diff --git a/docs/main.eac843e4a0b35895.js b/docs/main.5fd213a623e59f1b.js similarity index 56% rename from docs/main.eac843e4a0b35895.js rename to docs/main.5fd213a623e59f1b.js index f674db1..2129c67 100644 --- a/docs/main.eac843e4a0b35895.js +++ b/docs/main.5fd213a623e59f1b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkvaniaferrari_portfolio=self.webpackChunkvaniaferrari_portfolio||[]).push([[792],{836:()=>{function ne(e){return"function"==typeof e}function $i(e){const t=e(i=>{Error.call(i),i.stack=(new Error).stack});return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}const po=$i(e=>function(t){e(this),this.message=t?`${t.length} errors occurred during unsubscription:\n${t.map((i,o)=>`${o+1}) ${i.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=t});function Ui(e,n){if(e){const t=e.indexOf(n);0<=t&&e.splice(t,1)}}class Je{constructor(n){this.initialTeardown=n,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let n;if(!this.closed){this.closed=!0;const{_parentage:t}=this;if(t)if(this._parentage=null,Array.isArray(t))for(const r of t)r.remove(this);else t.remove(this);const{initialTeardown:i}=this;if(ne(i))try{i()}catch(r){n=r instanceof po?r.errors:[r]}const{_finalizers:o}=this;if(o){this._finalizers=null;for(const r of o)try{go(r)}catch(s){n=n??[],s instanceof po?n=[...n,...s.errors]:n.push(s)}}if(n)throw new po(n)}}add(n){var t;if(n&&n!==this)if(this.closed)go(n);else{if(n instanceof Je){if(n.closed||n._hasParent(this))return;n._addParent(this)}(this._finalizers=null!==(t=this._finalizers)&&void 0!==t?t:[]).push(n)}}_hasParent(n){const{_parentage:t}=this;return t===n||Array.isArray(t)&&t.includes(n)}_addParent(n){const{_parentage:t}=this;this._parentage=Array.isArray(t)?(t.push(n),t):t?[t,n]:n}_removeParent(n){const{_parentage:t}=this;t===n?this._parentage=null:Array.isArray(t)&&Ui(t,n)}remove(n){const{_finalizers:t}=this;t&&Ui(t,n),n instanceof Je&&n._removeParent(this)}}Je.EMPTY=(()=>{const e=new Je;return e.closed=!0,e})();const Cs=Je.EMPTY;function bl(e){return e instanceof Je||e&&"closed"in e&&ne(e.remove)&&ne(e.add)&&ne(e.unsubscribe)}function go(e){ne(e)?e():e.unsubscribe()}const Gi={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},er={setTimeout(e,n,...t){const{delegate:i}=er;return i?.setTimeout?i.setTimeout(e,n,...t):setTimeout(e,n,...t)},clearTimeout(e){const{delegate:n}=er;return(n?.clearTimeout||clearTimeout)(e)},delegate:void 0};function wd(e){er.setTimeout(()=>{const{onUnhandledError:n}=Gi;if(!n)throw e;n(e)})}function mo(){}const Dd=Ss("C",void 0,void 0);function Ss(e,n,t){return{kind:e,value:n,error:t}}let yi=null;function ei(e){if(Gi.useDeprecatedSynchronousErrorHandling){const n=!yi;if(n&&(yi={errorThrown:!1,error:null}),e(),n){const{errorThrown:t,error:i}=yi;if(yi=null,t)throw i}}else e()}class tr extends Je{constructor(n){super(),this.isStopped=!1,n?(this.destination=n,bl(n)&&n.add(this)):this.destination=Ts}static create(n,t,i){return new bi(n,t,i)}next(n){this.isStopped?Es(function Sd(e){return Ss("N",e,void 0)}(n),this):this._next(n)}error(n){this.isStopped?Es(function Cd(e){return Ss("E",void 0,e)}(n),this):(this.isStopped=!0,this._error(n))}complete(){this.isStopped?Es(Dd,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(n){this.destination.next(n)}_error(n){try{this.destination.error(n)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const wl=Function.prototype.bind;function nr(e,n){return wl.call(e,n)}class Dl{constructor(n){this.partialObserver=n}next(n){const{partialObserver:t}=this;if(t.next)try{t.next(n)}catch(i){tn(i)}}error(n){const{partialObserver:t}=this;if(t.error)try{t.error(n)}catch(i){tn(i)}else tn(n)}complete(){const{partialObserver:n}=this;if(n.complete)try{n.complete()}catch(t){tn(t)}}}class bi extends tr{constructor(n,t,i){let o;if(super(),ne(n)||!n)o={next:n??void 0,error:t??void 0,complete:i??void 0};else{let r;this&&Gi.useDeprecatedNextContext?(r=Object.create(n),r.unsubscribe=()=>this.unsubscribe(),o={next:n.next&&nr(n.next,r),error:n.error&&nr(n.error,r),complete:n.complete&&nr(n.complete,r)}):o=n}this.destination=new Dl(o)}}function tn(e){Gi.useDeprecatedSynchronousErrorHandling?function Ed(e){Gi.useDeprecatedSynchronousErrorHandling&&yi&&(yi.errorThrown=!0,yi.error=e)}(e):wd(e)}function Es(e,n){const{onStoppedNotification:t}=Gi;t&&er.setTimeout(()=>t(e,n))}const Ts={closed:!0,next:mo,error:function Cl(e){throw e},complete:mo},Ms="function"==typeof Symbol&&Symbol.observable||"@@observable";function xn(e){return e}function El(e){return 0===e.length?xn:1===e.length?e[0]:function(t){return e.reduce((i,o)=>o(i),t)}}let Te=(()=>{class e{constructor(t){t&&(this._subscribe=t)}lift(t){const i=new e;return i.source=this,i.operator=t,i}subscribe(t,i,o){const r=function Md(e){return e&&e instanceof tr||function Td(e){return e&&ne(e.next)&&ne(e.error)&&ne(e.complete)}(e)&&bl(e)}(t)?t:new bi(t,i,o);return ei(()=>{const{operator:s,source:a}=this;r.add(s?s.call(r,a):a?this._subscribe(r):this._trySubscribe(r))}),r}_trySubscribe(t){try{return this._subscribe(t)}catch(i){t.error(i)}}forEach(t,i){return new(i=Tl(i))((o,r)=>{const s=new bi({next:a=>{try{t(a)}catch(l){r(l),s.unsubscribe()}},error:r,complete:o});this.subscribe(s)})}_subscribe(t){var i;return null===(i=this.source)||void 0===i?void 0:i.subscribe(t)}[Ms](){return this}pipe(...t){return El(t)(this)}toPromise(t){return new(t=Tl(t))((i,o)=>{let r;this.subscribe(s=>r=s,s=>o(s),()=>i(r))})}}return e.create=n=>new e(n),e})();function Tl(e){var n;return null!==(n=e??Gi.Promise)&&void 0!==n?n:Promise}const Id=$i(e=>function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});let ye=(()=>{class e extends Te{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(t){const i=new Ml(this,this);return i.operator=t,i}_throwIfClosed(){if(this.closed)throw new Id}next(t){ei(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const i of this.currentObservers)i.next(t)}})}error(t){ei(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=t;const{observers:i}=this;for(;i.length;)i.shift().error(t)}})}complete(){ei(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:t}=this;for(;t.length;)t.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var t;return(null===(t=this.observers)||void 0===t?void 0:t.length)>0}_trySubscribe(t){return this._throwIfClosed(),super._trySubscribe(t)}_subscribe(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)}_innerSubscribe(t){const{hasError:i,isStopped:o,observers:r}=this;return i||o?Cs:(this.currentObservers=null,r.push(t),new Je(()=>{this.currentObservers=null,Ui(r,t)}))}_checkFinalizedStatuses(t){const{hasError:i,thrownError:o,isStopped:r}=this;i?t.error(o):r&&t.complete()}asObservable(){const t=new Te;return t.source=this,t}}return e.create=(n,t)=>new Ml(n,t),e})();class Ml extends ye{constructor(n,t){super(),this.destination=n,this.source=t}next(n){var t,i;null===(i=null===(t=this.destination)||void 0===t?void 0:t.next)||void 0===i||i.call(t,n)}error(n){var t,i;null===(i=null===(t=this.destination)||void 0===t?void 0:t.error)||void 0===i||i.call(t,n)}complete(){var n,t;null===(t=null===(n=this.destination)||void 0===n?void 0:n.complete)||void 0===t||t.call(n)}_subscribe(n){var t,i;return null!==(i=null===(t=this.source)||void 0===t?void 0:t.subscribe(n))&&void 0!==i?i:Cs}}function Is(e){return ne(e?.lift)}function Ue(e){return n=>{if(Is(n))return n.lift(function(t){try{return e(t,this)}catch(i){this.error(i)}});throw new TypeError("Unable to lift unknown Observable type")}}function ke(e,n,t,i,o){return new Nd(e,n,t,i,o)}class Nd extends tr{constructor(n,t,i,o,r,s){super(n),this.onFinalize=r,this.shouldUnsubscribe=s,this._next=t?function(a){try{t(a)}catch(l){n.error(l)}}:super._next,this._error=o?function(a){try{o(a)}catch(l){n.error(l)}finally{this.unsubscribe()}}:super._error,this._complete=i?function(){try{i()}catch(a){n.error(a)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var n;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:t}=this;super.unsubscribe(),!t&&(null===(n=this.onFinalize)||void 0===n||n.call(this))}}}function ue(e,n){return Ue((t,i)=>{let o=0;t.subscribe(ke(i,r=>{i.next(e.call(n,r,o++))}))})}function $t(e){return this instanceof $t?(this.v=e,this):new $t(e)}function Ut(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=function Ke(e){var n="function"==typeof Symbol&&Symbol.iterator,t=n&&e[n],i=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}(e),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(r){t[r]=e[r]&&function(s){return new Promise(function(a,l){!function o(r,s,a,l){Promise.resolve(l).then(function(d){r({value:d,done:a})},s)}(a,l,(s=e[r](s)).done,s.value)})}}}"function"==typeof SuppressedError&&SuppressedError;const kd=e=>e&&"number"==typeof e.length&&"function"!=typeof e;function Bm(e){return ne(e?.then)}function Hm(e){return ne(e[Ms])}function $m(e){return Symbol.asyncIterator&&ne(e?.[Symbol.asyncIterator])}function Um(e){return new TypeError(`You provided ${null!==e&&"object"==typeof e?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}const Gm=function nM(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}();function zm(e){return ne(e?.[Gm])}function Wm(e){return function vo(e,n,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,i=t.apply(e,n||[]),r=[];return o=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",function s(v){return function(_){return Promise.resolve(_).then(v,p)}}),o[Symbol.asyncIterator]=function(){return this},o;function a(v,_){i[v]&&(o[v]=function(b){return new Promise(function(C,E){r.push([v,b,C,E])>1||l(v,b)})},_&&(o[v]=_(o[v])))}function l(v,_){try{!function d(v){v.value instanceof $t?Promise.resolve(v.value.v).then(h,p):g(r[0][2],v)}(i[v](_))}catch(b){g(r[0][3],b)}}function h(v){l("next",v)}function p(v){l("throw",v)}function g(v,_){v(_),r.shift(),r.length&&l(r[0][0],r[0][1])}}(this,arguments,function*(){const t=e.getReader();try{for(;;){const{value:i,done:o}=yield $t(t.read());if(o)return yield $t(void 0);yield yield $t(i)}}finally{t.releaseLock()}})}function qm(e){return ne(e?.getReader)}function at(e){if(e instanceof Te)return e;if(null!=e){if(Hm(e))return function iM(e){return new Te(n=>{const t=e[Ms]();if(ne(t.subscribe))return t.subscribe(n);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(e);if(kd(e))return function oM(e){return new Te(n=>{for(let t=0;t{e.then(t=>{n.closed||(n.next(t),n.complete())},t=>n.error(t)).then(null,wd)})}(e);if($m(e))return Ym(e);if(zm(e))return function sM(e){return new Te(n=>{for(const t of e)if(n.next(t),n.closed)return;n.complete()})}(e);if(qm(e))return function aM(e){return Ym(Wm(e))}(e)}throw Um(e)}function Ym(e){return new Te(n=>{(function lM(e,n){var t,i,o,r;return function T(e,n,t,i){return new(t||(t=Promise))(function(r,s){function a(h){try{d(i.next(h))}catch(p){s(p)}}function l(h){try{d(i.throw(h))}catch(p){s(p)}}function d(h){h.done?r(h.value):function o(r){return r instanceof t?r:new t(function(s){s(r)})}(h.value).then(a,l)}d((i=i.apply(e,n||[])).next())})}(this,void 0,void 0,function*(){try{for(t=Ut(e);!(i=yield t.next()).done;)if(n.next(i.value),n.closed)return}catch(s){o={error:s}}finally{try{i&&!i.done&&(r=t.return)&&(yield r.call(t))}finally{if(o)throw o.error}}n.complete()})})(e,n).catch(t=>n.error(t))})}function Di(e,n,t,i=0,o=!1){const r=n.schedule(function(){t(),o?e.add(this.schedule(null,i)):this.unsubscribe()},i);if(e.add(r),!o)return r}function lt(e,n,t=1/0){return ne(n)?lt((i,o)=>ue((r,s)=>n(i,r,o,s))(at(e(i,o))),t):("number"==typeof n&&(t=n),Ue((i,o)=>function cM(e,n,t,i,o,r,s,a){const l=[];let d=0,h=0,p=!1;const g=()=>{p&&!l.length&&!d&&n.complete()},v=b=>d{r&&n.next(b),d++;let C=!1;at(t(b,h++)).subscribe(ke(n,E=>{o?.(E),r?v(E):n.next(E)},()=>{C=!0},void 0,()=>{if(C)try{for(d--;l.length&&d_(E)):_(E)}g()}catch(E){n.error(E)}}))};return e.subscribe(ke(n,v,()=>{p=!0,g()})),()=>{a?.()}}(i,o,e,t)))}function rr(e=1/0){return lt(xn,e)}const mn=new Te(e=>e.complete());function Zm(e){return e&&ne(e.schedule)}function Fd(e){return e[e.length-1]}function Al(e){return ne(Fd(e))?e.pop():void 0}function As(e){return Zm(Fd(e))?e.pop():void 0}function Qm(e,n=0){return Ue((t,i)=>{t.subscribe(ke(i,o=>Di(i,e,()=>i.next(o),n),()=>Di(i,e,()=>i.complete(),n),o=>Di(i,e,()=>i.error(o),n)))})}function Jm(e,n=0){return Ue((t,i)=>{i.add(e.schedule(()=>t.subscribe(i),n))})}function Km(e,n){if(!e)throw new Error("Iterable cannot be null");return new Te(t=>{Di(t,n,()=>{const i=e[Symbol.asyncIterator]();Di(t,n,()=>{i.next().then(o=>{o.done?t.complete():t.next(o.value)})},0,!0)})})}function pt(e,n){return n?function vM(e,n){if(null!=e){if(Hm(e))return function fM(e,n){return at(e).pipe(Jm(n),Qm(n))}(e,n);if(kd(e))return function pM(e,n){return new Te(t=>{let i=0;return n.schedule(function(){i===e.length?t.complete():(t.next(e[i++]),t.closed||this.schedule())})})}(e,n);if(Bm(e))return function hM(e,n){return at(e).pipe(Jm(n),Qm(n))}(e,n);if($m(e))return Km(e,n);if(zm(e))return function gM(e,n){return new Te(t=>{let i;return Di(t,n,()=>{i=e[Gm](),Di(t,n,()=>{let o,r;try{({value:o,done:r}=i.next())}catch(s){return void t.error(s)}r?t.complete():t.next(o)},0,!0)}),()=>ne(i?.return)&&i.return()})}(e,n);if(qm(e))return function mM(e,n){return Km(Wm(e),n)}(e,n)}throw Um(e)}(e,n):at(e)}class vn extends ye{constructor(n){super(),this._value=n}get value(){return this.getValue()}_subscribe(n){const t=super._subscribe(n);return!t.closed&&n.next(this._value),t}getValue(){const{hasError:n,thrownError:t,_value:i}=this;if(n)throw t;return this._throwIfClosed(),i}next(n){super.next(this._value=n)}}function W(...e){return pt(e,As(e))}function ev(e={}){const{connector:n=(()=>new ye),resetOnError:t=!0,resetOnComplete:i=!0,resetOnRefCountZero:o=!0}=e;return r=>{let s,a,l,d=0,h=!1,p=!1;const g=()=>{a?.unsubscribe(),a=void 0},v=()=>{g(),s=l=void 0,h=p=!1},_=()=>{const b=s;v(),b?.unsubscribe()};return Ue((b,C)=>{d++,!p&&!h&&g();const E=l=l??n();C.add(()=>{d--,0===d&&!p&&!h&&(a=jd(_,o))}),E.subscribe(C),!s&&d>0&&(s=new bi({next:D=>E.next(D),error:D=>{p=!0,g(),a=jd(v,t,D),E.error(D)},complete:()=>{h=!0,g(),a=jd(v,i),E.complete()}}),at(b).subscribe(s))})(r)}}function jd(e,n,...t){if(!0===n)return void e();if(!1===n)return;const i=new bi({next:()=>{i.unsubscribe(),e()}});return at(n(...t)).subscribe(i)}function Pn(e,n){return Ue((t,i)=>{let o=null,r=0,s=!1;const a=()=>s&&!o&&i.complete();t.subscribe(ke(i,l=>{o?.unsubscribe();let d=0;const h=r++;at(e(l,h)).subscribe(o=ke(i,p=>i.next(n?n(l,p,h,d++):p),()=>{o=null,a()}))},()=>{s=!0,a()}))})}function _M(e,n){return e===n}function Ne(e){for(let n in e)if(e[n]===Ne)return n;throw Error("Could not find renamed property on target object.")}function ct(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(ct).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const n=e.toString();if(null==n)return""+n;const t=n.indexOf("\n");return-1===t?n:n.substring(0,t)}function Ld(e,n){return null==e||""===e?null===n?"":n:null==n||""===n?e:e+" "+n}const yM=Ne({__forward_ref__:Ne});function ie(e){return e.__forward_ref__=ie,e.toString=function(){return ct(this())},e}function Z(e){return Vd(e)?e():e}function Vd(e){return"function"==typeof e&&e.hasOwnProperty(yM)&&e.__forward_ref__===ie}function Bd(e){return e&&!!e.\u0275providers}const nv="https://g.co/ng/security#xss";class O extends Error{constructor(n,t){super(function xl(e,n){return`NG0${Math.abs(e)}${n?": "+n:""}`}(n,t)),this.code=n}}function J(e){return"string"==typeof e?e:null==e?"":String(e)}function Hd(e,n){throw new O(-201,!1)}function _n(e,n){null==e&&function q(e,n,t,i){throw new Error(`ASSERTION ERROR: ${e}`+(null==i?"":` [Expected=> ${t} ${i} ${n} <=Actual]`))}(n,e,null,"!=")}function F(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Ae(e){return{providers:e.providers||[],imports:e.imports||[]}}function Pl(e){return iv(e,Fl)||iv(e,ov)}function iv(e,n){return e.hasOwnProperty(n)?e[n]:null}function kl(e){return e&&(e.hasOwnProperty($d)||e.hasOwnProperty(MM))?e[$d]:null}const Fl=Ne({\u0275prov:Ne}),$d=Ne({\u0275inj:Ne}),ov=Ne({ngInjectableDef:Ne}),MM=Ne({ngInjectorDef:Ne});var oe=function(e){return e[e.Default=0]="Default",e[e.Host=1]="Host",e[e.Self=2]="Self",e[e.SkipSelf=4]="SkipSelf",e[e.Optional=8]="Optional",e}(oe||{});let Ud;function Gt(e){const n=Ud;return Ud=e,n}function sv(e,n,t){const i=Pl(e);return i&&"root"==i.providedIn?void 0===i.value?i.value=i.factory():i.value:t&oe.Optional?null:void 0!==n?n:void Hd(ct(e))}const Fe=globalThis;class U{constructor(n,t){this._desc=n,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof t?this.__NG_ELEMENT_ID__=t:void 0!==t&&(this.\u0275prov=F({token:this,providedIn:t.providedIn||"root",factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}const Rs={},Yd="__NG_DI_FLAG__",jl="ngTempTokenPath",OM=/\n/gm,lv="__source";let sr;function Wi(e){const n=sr;return sr=e,n}function xM(e,n=oe.Default){if(void 0===sr)throw new O(-203,!1);return null===sr?sv(e,void 0,n):sr.get(e,n&oe.Optional?null:void 0,n)}function L(e,n=oe.Default){return(function rv(){return Ud}()||xM)(Z(e),n)}function k(e,n=oe.Default){return L(e,Ll(n))}function Ll(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Zd(e){const n=[];for(let t=0;tn){s=r-1;break}}}for(;rr?"":o[p+1].toLowerCase();const v=8&i?g:null;if(v&&-1!==fv(v,d,0)||2&i&&d!==g){if(Fn(i))return!1;s=!0}}}}else{if(!s&&!Fn(i)&&!Fn(l))return!1;if(s&&Fn(l))continue;s=!1,i=l|1&i}}return Fn(i)||s}function Fn(e){return 0==(1&e)}function BM(e,n,t,i){if(null===n)return-1;let o=0;if(i||!t){let r=!1;for(;o-1)for(t++;t0?'="'+a+'"':"")+"]"}else 8&i?o+="."+s:4&i&&(o+=" "+s);else""!==o&&!Fn(s)&&(n+=yv(r,o),o=""),i=s,r=r||!Fn(i);t++}return""!==o&&(n+=yv(r,o)),n}function se(e){return Ci(()=>{const n=wv(e),t={...n,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===Vl.OnPush,directiveDefs:null,pipeDefs:null,dependencies:n.standalone&&e.dependencies||null,getStandaloneInjector:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||kn.Emulated,styles:e.styles||ge,_:null,schemas:e.schemas||null,tView:null,id:""};Dv(t);const i=e.dependencies;return t.directiveDefs=Hl(i,!1),t.pipeDefs=Hl(i,!0),t.id=function XM(e){let n=0;const t=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,e.consts,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery].join("|");for(const o of t)n=Math.imul(31,n)+o.charCodeAt(0)<<0;return n+=2147483648,"c"+n}(t),t})}function ZM(e){return de(e)||bt(e)}function QM(e){return null!==e}function Re(e){return Ci(()=>({type:e.type,bootstrap:e.bootstrap||ge,declarations:e.declarations||ge,imports:e.imports||ge,exports:e.exports||ge,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function bv(e,n){if(null==e)return ti;const t={};for(const i in e)if(e.hasOwnProperty(i)){let o=e[i],r=o;Array.isArray(o)&&(r=o[1],o=o[0]),t[o]=i,n&&(n[o]=r)}return t}function x(e){return Ci(()=>{const n=wv(e);return Dv(n),n})}function de(e){return e[Bl]||null}function bt(e){return e[Qd]||null}function xt(e){return e[Jd]||null}function on(e,n){const t=e[uv]||null;if(!t&&!0===n)throw new Error(`Type ${ct(e)} does not have '\u0275mod' property.`);return t}function wv(e){const n={};return{type:e.type,providersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:n,inputTransforms:null,inputConfig:e.inputs||ti,exportAs:e.exportAs||null,standalone:!0===e.standalone,signals:!0===e.signals,selectors:e.selectors||ge,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,findHostDirectiveDefs:null,hostDirectives:null,inputs:bv(e.inputs,n),outputs:bv(e.outputs)}}function Dv(e){e.features?.forEach(n=>n(e))}function Hl(e,n){if(!e)return null;const t=n?xt:ZM;return()=>("function"==typeof e?e():e).map(i=>t(i)).filter(QM)}const qe=0,V=1,ee=2,He=3,jn=4,Fs=5,Ot=6,lr=7,Xe=8,qi=9,cr=10,K=11,js=12,Cv=13,ur=14,et=15,Ls=16,dr=17,ni=18,Vs=19,Sv=20,Yi=21,Ei=22,Bs=23,Hs=24,re=25,Xd=1,Ev=2,ii=7,fr=9,wt=11;function Wt(e){return Array.isArray(e)&&"object"==typeof e[Xd]}function Pt(e){return Array.isArray(e)&&!0===e[Xd]}function ef(e){return 0!=(4&e.flags)}function yo(e){return e.componentOffset>-1}function Ul(e){return 1==(1&e.flags)}function Ln(e){return!!e.template}function tf(e){return 0!=(512&e[ee])}function bo(e,n){return e.hasOwnProperty(Si)?e[Si]:null}let Dt=null,Gl=!1;function yn(e){const n=Dt;return Dt=e,n}const Iv={version:0,dirty:!1,producerNode:void 0,producerLastReadVersion:void 0,producerIndexOfThis:void 0,nextProducerIndex:0,liveConsumerNode:void 0,liveConsumerIndexOfThis:void 0,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{}};function Ov(e){if(!Us(e)||e.dirty){if(!e.producerMustRecompute(e)&&!xv(e))return void(e.dirty=!1);e.producerRecomputeValue(e),e.dirty=!1}}function Rv(e){e.dirty=!0,function Av(e){if(void 0===e.liveConsumerNode)return;const n=Gl;Gl=!0;try{for(const t of e.liveConsumerNode)t.dirty||Rv(t)}finally{Gl=n}}(e),e.consumerMarkedDirty?.(e)}function rf(e){return e&&(e.nextProducerIndex=0),yn(e)}function sf(e,n){if(yn(n),e&&void 0!==e.producerNode&&void 0!==e.producerIndexOfThis&&void 0!==e.producerLastReadVersion){if(Us(e))for(let t=e.nextProducerIndex;te.nextProducerIndex;)e.producerNode.pop(),e.producerLastReadVersion.pop(),e.producerIndexOfThis.pop()}}function xv(e){hr(e);for(let n=0;n0}function hr(e){e.producerNode??=[],e.producerIndexOfThis??=[],e.producerLastReadVersion??=[]}let jv=null;const Hv=()=>{},fI=(()=>({...Iv,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!1,consumerMarkedDirty:e=>{e.schedule(e.ref)},hasRun:!1,cleanupFn:Hv}))();class hI{constructor(n,t,i){this.previousValue=n,this.currentValue=t,this.firstChange=i}isFirstChange(){return this.firstChange}}function Ct(){return $v}function $v(e){return e.type.prototype.ngOnChanges&&(e.setInput=gI),pI}function pI(){const e=Gv(this),n=e?.current;if(n){const t=e.previous;if(t===ti)e.previous=n;else for(let i in n)t[i]=n[i];e.current=null,this.ngOnChanges(n)}}function gI(e,n,t,i){const o=this.declaredInputs[t],r=Gv(e)||function mI(e,n){return e[Uv]=n}(e,{previous:ti,current:null}),s=r.current||(r.current={}),a=r.previous,l=a[o];s[o]=new hI(l&&l.currentValue,n,a===ti),e[i]=n}Ct.ngInherit=!0;const Uv="__ngSimpleChanges__";function Gv(e){return e[Uv]||null}const oi=function(e,n,t){};function je(e){for(;Array.isArray(e);)e=e[qe];return e}function Wl(e,n){return je(n[e])}function qt(e,n){return je(n[e.index])}function qv(e,n){return e.data[n]}function rn(e,n){const t=n[e];return Wt(t)?t:t[qe]}function Qi(e,n){return null==n?null:e[n]}function Yv(e){e[dr]=0}function DI(e){1024&e[ee]||(e[ee]|=1024,Qv(e,1))}function Zv(e){1024&e[ee]&&(e[ee]&=-1025,Qv(e,-1))}function Qv(e,n){let t=e[He];if(null===t)return;t[Fs]+=n;let i=t;for(t=t[He];null!==t&&(1===n&&1===i[Fs]||-1===n&&0===i[Fs]);)t[Fs]+=n,i=t,t=t[He]}const Y={lFrame:a1(null),bindingsEnabled:!0,skipHydrationRootTNode:null};function Xv(){return Y.bindingsEnabled}function gr(){return null!==Y.skipHydrationRootTNode}function I(){return Y.lFrame.lView}function fe(){return Y.lFrame.tView}function St(){let e=e1();for(;null!==e&&64===e.type;)e=e.parent;return e}function e1(){return Y.lFrame.currentTNode}function ri(e,n){const t=Y.lFrame;t.currentTNode=e,t.isParent=n}function df(){return Y.lFrame.isParent}function ff(){Y.lFrame.isParent=!1}function kt(){const e=Y.lFrame;let n=e.bindingRootIndex;return-1===n&&(n=e.bindingRootIndex=e.tView.bindingStartIndex),n}function mr(){return Y.lFrame.bindingIndex++}function Mi(e){const n=Y.lFrame,t=n.bindingIndex;return n.bindingIndex=n.bindingIndex+e,t}function PI(e,n){const t=Y.lFrame;t.bindingIndex=t.bindingRootIndex=e,hf(n)}function hf(e){Y.lFrame.currentDirectiveIndex=e}function o1(){return Y.lFrame.currentQueryIndex}function gf(e){Y.lFrame.currentQueryIndex=e}function FI(e){const n=e[V];return 2===n.type?n.declTNode:1===n.type?e[Ot]:null}function r1(e,n,t){if(t&oe.SkipSelf){let o=n,r=e;for(;!(o=o.parent,null!==o||t&oe.Host||(o=FI(r),null===o||(r=r[ur],10&o.type))););if(null===o)return!1;n=o,e=r}const i=Y.lFrame=s1();return i.currentTNode=n,i.lView=e,!0}function mf(e){const n=s1(),t=e[V];Y.lFrame=n,n.currentTNode=t.firstChild,n.lView=e,n.tView=t,n.contextLView=e,n.bindingIndex=t.bindingStartIndex,n.inI18n=!1}function s1(){const e=Y.lFrame,n=null===e?null:e.child;return null===n?a1(e):n}function a1(e){const n={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=n),n}function l1(){const e=Y.lFrame;return Y.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const c1=l1;function vf(){const e=l1();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function Ft(){return Y.lFrame.selectedIndex}function wo(e){Y.lFrame.selectedIndex=e}function Ge(){const e=Y.lFrame;return qv(e.tView,e.selectedIndex)}let d1=!0;function ql(){return d1}function Ji(e){d1=e}function Yl(e,n){for(let t=n.directiveStart,i=n.directiveEnd;t=i)break}else n[l]<0&&(e[dr]+=65536),(a>13>16&&(3&e[ee])===n&&(e[ee]+=8192,h1(a,r)):h1(a,r)}const vr=-1;class zs{constructor(n,t,i){this.factory=n,this.resolving=!1,this.canSeeViewProviders=t,this.injectImpl=i}}function bf(e){return e!==vr}function Ws(e){return 32767&e}function qs(e,n){let t=function YI(e){return e>>16}(e),i=n;for(;t>0;)i=i[ur],t--;return i}let wf=!0;function Jl(e){const n=wf;return wf=e,n}const p1=255,g1=5;let ZI=0;const si={};function Kl(e,n){const t=m1(e,n);if(-1!==t)return t;const i=n[V];i.firstCreatePass&&(e.injectorIndex=n.length,Df(i.data,e),Df(n,null),Df(i.blueprint,null));const o=Xl(e,n),r=e.injectorIndex;if(bf(o)){const s=Ws(o),a=qs(o,n),l=a[V].data;for(let d=0;d<8;d++)n[r+d]=a[s+d]|l[s+d]}return n[r+8]=o,r}function Df(e,n){e.push(0,0,0,0,0,0,0,0,n)}function m1(e,n){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===n[e.injectorIndex+8]?-1:e.injectorIndex}function Xl(e,n){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let t=0,i=null,o=n;for(;null!==o;){if(i=C1(o),null===i)return vr;if(t++,o=o[ur],-1!==i.injectorIndex)return i.injectorIndex|t<<16}return vr}function Cf(e,n,t){!function QI(e,n,t){let i;"string"==typeof t?i=t.charCodeAt(0)||0:t.hasOwnProperty(Ps)&&(i=t[Ps]),null==i&&(i=t[Ps]=ZI++);const o=i&p1;n.data[e+(o>>g1)]|=1<=0?n&p1:t2:n}(t);if("function"==typeof r){if(!r1(n,e,i))return i&oe.Host?v1(o,0,i):_1(n,t,i,o);try{let s;if(s=r(i),null!=s||i&oe.Optional)return s;Hd()}finally{c1()}}else if("number"==typeof r){let s=null,a=m1(e,n),l=vr,d=i&oe.Host?n[et][Ot]:null;for((-1===a||i&oe.SkipSelf)&&(l=-1===a?Xl(e,n):n[a+8],l!==vr&&D1(i,!1)?(s=n[V],a=Ws(l),n=qs(l,n)):a=-1);-1!==a;){const h=n[V];if(w1(r,a,h.data)){const p=KI(a,n,t,s,i,d);if(p!==si)return p}l=n[a+8],l!==vr&&D1(i,n[V].data[a+8]===d)&&w1(r,a,n)?(s=h,a=Ws(l),n=qs(l,n)):a=-1}}return o}function KI(e,n,t,i,o,r){const s=n[V],a=s.data[e+8],h=ec(a,s,t,null==i?yo(a)&&wf:i!=s&&0!=(3&a.type),o&oe.Host&&r===a);return null!==h?Do(n,s,h,a):si}function ec(e,n,t,i,o){const r=e.providerIndexes,s=n.data,a=1048575&r,l=e.directiveStart,h=r>>20,g=o?a+h:e.directiveEnd;for(let v=i?a:a+h;v=l&&_.type===t)return v}if(o){const v=s[l];if(v&&Ln(v)&&v.type===t)return l}return null}function Do(e,n,t,i){let o=e[t];const r=n.data;if(function zI(e){return e instanceof zs}(o)){const s=o;s.resolving&&function bM(e,n){const t=n?`. Dependency path: ${n.join(" > ")} > ${e}`:"";throw new O(-200,`Circular dependency in DI detected for ${e}${t}`)}(function be(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():J(e)}(r[t]));const a=Jl(s.canSeeViewProviders);s.resolving=!0;const d=s.injectImpl?Gt(s.injectImpl):null;r1(e,i,oe.Default);try{o=e[t]=s.factory(void 0,r,e,i),n.firstCreatePass&&t>=i.directiveStart&&function UI(e,n,t){const{ngOnChanges:i,ngOnInit:o,ngDoCheck:r}=n.type.prototype;if(i){const s=$v(n);(t.preOrderHooks??=[]).push(e,s),(t.preOrderCheckHooks??=[]).push(e,s)}o&&(t.preOrderHooks??=[]).push(0-e,o),r&&((t.preOrderHooks??=[]).push(e,r),(t.preOrderCheckHooks??=[]).push(e,r))}(t,r[t],n)}finally{null!==d&&Gt(d),Jl(a),s.resolving=!1,c1()}}return o}function w1(e,n,t){return!!(t[n+(e>>g1)]&1<{const n=Sf(Z(e));return n&&n()}:bo(e)}function C1(e){const n=e[V],t=n.type;return 2===t?n.declTNode:1===t?e[Ot]:null}const yr="__parameters__";function wr(e,n,t){return Ci(()=>{const i=function Ef(e){return function(...t){if(e){const i=e(...t);for(const o in i)this[o]=i[o]}}}(n);function o(...r){if(this instanceof o)return i.apply(this,r),this;const s=new o(...r);return a.annotation=s,a;function a(l,d,h){const p=l.hasOwnProperty(yr)?l[yr]:Object.defineProperty(l,yr,{value:[]})[yr];for(;p.length<=h;)p.push(null);return(p[h]=p[h]||[]).push(s),l}}return t&&(o.prototype=Object.create(t.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o})}function Cr(e,n){e.forEach(t=>Array.isArray(t)?Cr(t,n):n(t))}function E1(e,n,t){n>=e.length?e.push(t):e.splice(n,0,t)}function tc(e,n){return n>=e.length-1?e.pop():e.splice(n,1)[0]}function Qs(e,n){const t=[];for(let i=0;i=0?e[1|i]=t:(i=~i,function c2(e,n,t,i){let o=e.length;if(o==n)e.push(t,i);else if(1===o)e.push(i,e[0]),e[0]=t;else{for(o--,e.push(e[o-1],e[o]);o>n;)e[o]=e[o-2],o--;e[n]=t,e[n+1]=i}}(e,i,n,t)),i}function Tf(e,n){const t=Sr(e,n);if(t>=0)return e[1|t]}function Sr(e,n){return function T1(e,n,t){let i=0,o=e.length>>t;for(;o!==i;){const r=i+(o-i>>1),s=e[r<n?o=r:i=r+1}return~(o<0&&(e[t-1][jn]=i[jn]);const r=tc(e,wt+n);!function W2(e,n){ta(e,n,n[K],2,null,null),n[qe]=null,n[Ot]=null}(i[V],i);const s=r[ni];null!==s&&s.detachView(r[V]),i[He]=null,i[jn]=null,i[ee]&=-129}return i}function jf(e,n){if(!(256&n[ee])){const t=n[K];n[Bs]&&Pv(n[Bs]),n[Hs]&&Pv(n[Hs]),t.destroyNode&&ta(e,n,t,3,null,null),function Z2(e){let n=e[js];if(!n)return Lf(e[V],e);for(;n;){let t=null;if(Wt(n))t=n[js];else{const i=n[wt];i&&(t=i)}if(!t){for(;n&&!n[jn]&&n!==e;)Wt(n)&&Lf(n[V],n),n=n[He];null===n&&(n=e),Wt(n)&&Lf(n[V],n),t=n&&n[jn]}n=t}}(n)}}function Lf(e,n){if(!(256&n[ee])){n[ee]&=-129,n[ee]|=256,function X2(e,n){let t;if(null!=e&&null!=(t=e.destroyHooks))for(let i=0;i=0?i[s]():i[-s].unsubscribe(),r+=2}else t[r].call(i[t[r+1]]);null!==i&&(n[lr]=null);const o=n[Yi];if(null!==o){n[Yi]=null;for(let r=0;r-1){const{encapsulation:r}=e.data[i.directiveStart+o];if(r===kn.None||r===kn.Emulated)return null}return qt(i,t)}}(e,n.parent,t)}function So(e,n,t,i,o){e.insertBefore(n,t,i,o)}function K1(e,n,t){e.appendChild(n,t)}function X1(e,n,t,i,o){null!==i?So(e,n,t,i,o):K1(e,n,t)}function pc(e,n){return e.parentNode(n)}function e_(e,n,t){return n_(e,n,t)}let Bf,vc,Gf,_c,n_=function t_(e,n,t){return 40&e.type?qt(e,t):null};function gc(e,n,t,i){const o=Vf(e,i,n),r=n[K],a=e_(i.parent||n[Ot],i,n);if(null!=o)if(Array.isArray(t))for(let l=0;le,createScript:e=>e,createScriptURL:e=>e})}catch{}return vc}()?.createHTML(e)||e}function d_(e){return function zf(){if(void 0===_c&&(_c=null,Fe.trustedTypes))try{_c=Fe.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return _c}()?.createScriptURL(e)||e}class Eo{constructor(n){this.changingThisBreaksApplicationSecurity=n}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${nv})`}}class uN extends Eo{getTypeName(){return"HTML"}}class dN extends Eo{getTypeName(){return"Style"}}class fN extends Eo{getTypeName(){return"Script"}}class hN extends Eo{getTypeName(){return"URL"}}class pN extends Eo{getTypeName(){return"ResourceURL"}}function an(e){return e instanceof Eo?e.changingThisBreaksApplicationSecurity:e}function ai(e,n){const t=function gN(e){return e instanceof Eo&&e.getTypeName()||null}(e);if(null!=t&&t!==n){if("ResourceURL"===t&&"URL"===n)return!0;throw new Error(`Required a safe ${n}, got a ${t} (see ${nv})`)}return t===n}class wN{constructor(n){this.inertDocumentHelper=n}getInertBodyElement(n){n=""+n;try{const t=(new window.DOMParser).parseFromString(Ir(n),"text/html").body;return null===t?this.inertDocumentHelper.getInertBodyElement(n):(t.removeChild(t.firstChild),t)}catch{return null}}}class DN{constructor(n){this.defaultDoc=n,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert")}getInertBodyElement(n){const t=this.inertDocument.createElement("template");return t.innerHTML=Ir(n),t}}const SN=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function yc(e){return(e=String(e)).match(SN)?e:"unsafe:"+e}function Ii(e){const n={};for(const t of e.split(","))n[t]=!0;return n}function na(...e){const n={};for(const t of e)for(const i in t)t.hasOwnProperty(i)&&(n[i]=!0);return n}const h_=Ii("area,br,col,hr,img,wbr"),p_=Ii("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),g_=Ii("rp,rt"),Wf=na(h_,na(p_,Ii("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),na(g_,Ii("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),na(g_,p_)),qf=Ii("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),m_=na(qf,Ii("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),Ii("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext")),EN=Ii("script,style,template");class TN{constructor(){this.sanitizedSomething=!1,this.buf=[]}sanitizeChildren(n){let t=n.firstChild,i=!0;for(;t;)if(t.nodeType===Node.ELEMENT_NODE?i=this.startElement(t):t.nodeType===Node.TEXT_NODE?this.chars(t.nodeValue):this.sanitizedSomething=!0,i&&t.firstChild)t=t.firstChild;else for(;t;){t.nodeType===Node.ELEMENT_NODE&&this.endElement(t);let o=this.checkClobberedElement(t,t.nextSibling);if(o){t=o;break}t=this.checkClobberedElement(t,t.parentNode)}return this.buf.join("")}startElement(n){const t=n.nodeName.toLowerCase();if(!Wf.hasOwnProperty(t))return this.sanitizedSomething=!0,!EN.hasOwnProperty(t);this.buf.push("<"),this.buf.push(t);const i=n.attributes;for(let o=0;o"),!0}endElement(n){const t=n.nodeName.toLowerCase();Wf.hasOwnProperty(t)&&!h_.hasOwnProperty(t)&&(this.buf.push(""))}chars(n){this.buf.push(v_(n))}checkClobberedElement(n,t){if(t&&(n.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${n.outerHTML}`);return t}}const MN=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,IN=/([^\#-~ |!])/g;function v_(e){return e.replace(/&/g,"&").replace(MN,function(n){return"&#"+(1024*(n.charCodeAt(0)-55296)+(n.charCodeAt(1)-56320)+65536)+";"}).replace(IN,function(n){return"&#"+n.charCodeAt(0)+";"}).replace(//g,">")}let bc;function __(e,n){let t=null;try{bc=bc||function f_(e){const n=new DN(e);return function CN(){try{return!!(new window.DOMParser).parseFromString(Ir(""),"text/html")}catch{return!1}}()?new wN(n):n}(e);let i=n?String(n):"";t=bc.getInertBodyElement(i);let o=5,r=i;do{if(0===o)throw new Error("Failed to sanitize html because the input is unstable");o--,i=r,r=t.innerHTML,t=bc.getInertBodyElement(i)}while(i!==r);return Ir((new TN).sanitizeChildren(Yf(t)||t))}finally{if(t){const i=Yf(t)||t;for(;i.firstChild;)i.removeChild(i.firstChild)}}}function Yf(e){return"content"in e&&function NN(e){return e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.nodeName}(e)?e.content:null}var wn=function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e}(wn||{});function Dn(e){const n=ia();return n?n.sanitize(wn.URL,e)||"":ai(e,"URL")?an(e):yc(J(e))}function Zf(e){const n=ia();if(n)return d_(n.sanitize(wn.RESOURCE_URL,e)||"");if(ai(e,"ResourceURL"))return d_(an(e));throw new O(904,!1)}function ia(){const e=I();return e&&e[cr].sanitizer}const oa=new U("ENVIRONMENT_INITIALIZER"),b_=new U("INJECTOR",-1),w_=new U("INJECTOR_DEF_TYPES");class Qf{get(n,t=Rs){if(t===Rs){const i=new Error(`NullInjectorError: No provider for ${ct(n)}!`);throw i.name="NullInjectorError",i}return t}}function FN(...e){return{\u0275providers:C_(0,e),\u0275fromNgModule:!0}}function C_(e,...n){const t=[],i=new Set;let o;const r=s=>{t.push(s)};return Cr(n,s=>{const a=s;wc(a,r,[],i)&&(o||=[],o.push(a))}),void 0!==o&&S_(o,r),t}function S_(e,n){for(let t=0;t{n(r,i)})}}function wc(e,n,t,i){if(!(e=Z(e)))return!1;let o=null,r=kl(e);const s=!r&&de(e);if(r||s){if(s&&!s.standalone)return!1;o=e}else{const l=e.ngModule;if(r=kl(l),!r)return!1;o=l}const a=i.has(o);if(s){if(a)return!1;if(i.add(o),s.dependencies){const l="function"==typeof s.dependencies?s.dependencies():s.dependencies;for(const d of l)wc(d,n,t,i)}}else{if(!r)return!1;{if(null!=r.imports&&!a){let d;i.add(o);try{Cr(r.imports,h=>{wc(h,n,t,i)&&(d||=[],d.push(h))})}finally{}void 0!==d&&S_(d,n)}if(!a){const d=bo(o)||(()=>new o);n({provide:o,useFactory:d,deps:ge},o),n({provide:w_,useValue:o,multi:!0},o),n({provide:oa,useValue:()=>L(o),multi:!0},o)}const l=r.providers;if(null!=l&&!a){const d=e;Jf(l,h=>{n(h,d)})}}}return o!==e&&void 0!==e.providers}function Jf(e,n){for(let t of e)Bd(t)&&(t=t.\u0275providers),Array.isArray(t)?Jf(t,n):n(t)}const jN=Ne({provide:String,useValue:Ne});function Kf(e){return null!==e&&"object"==typeof e&&jN in e}function To(e){return"function"==typeof e}const Xf=new U("Set Injector scope."),Dc={},VN={};let eh;function Cc(){return void 0===eh&&(eh=new Qf),eh}class Zt{}class Or extends Zt{get destroyed(){return this._destroyed}constructor(n,t,i,o){super(),this.parent=t,this.source=i,this.scopes=o,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,nh(n,s=>this.processProvider(s)),this.records.set(b_,Ar(void 0,this)),o.has("environment")&&this.records.set(Zt,Ar(void 0,this));const r=this.records.get(Xf);null!=r&&"string"==typeof r.value&&this.scopes.add(r.value),this.injectorDefTypes=new Set(this.get(w_.multi,ge,oe.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const t of this._ngOnDestroyHooks)t.ngOnDestroy();const n=this._onDestroyHooks;this._onDestroyHooks=[];for(const t of n)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear()}}onDestroy(n){return this.assertNotDestroyed(),this._onDestroyHooks.push(n),()=>this.removeOnDestroy(n)}runInContext(n){this.assertNotDestroyed();const t=Wi(this),i=Gt(void 0);try{return n()}finally{Wi(t),Gt(i)}}get(n,t=Rs,i=oe.Default){if(this.assertNotDestroyed(),n.hasOwnProperty(dv))return n[dv](this);i=Ll(i);const r=Wi(this),s=Gt(void 0);try{if(!(i&oe.SkipSelf)){let l=this.records.get(n);if(void 0===l){const d=function GN(e){return"function"==typeof e||"object"==typeof e&&e instanceof U}(n)&&Pl(n);l=d&&this.injectableDefInScope(d)?Ar(th(n),Dc):null,this.records.set(n,l)}if(null!=l)return this.hydrate(n,l)}return(i&oe.Self?Cc():this.parent).get(n,t=i&oe.Optional&&t===Rs?null:t)}catch(a){if("NullInjectorError"===a.name){if((a[jl]=a[jl]||[]).unshift(ct(n)),r)throw a;return function kM(e,n,t,i){const o=e[jl];throw n[lv]&&o.unshift(n[lv]),e.message=function FM(e,n,t,i=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let o=ct(n);if(Array.isArray(n))o=n.map(ct).join(" -> ");else if("object"==typeof n){let r=[];for(let s in n)if(n.hasOwnProperty(s)){let a=n[s];r.push(s+":"+("string"==typeof a?JSON.stringify(a):ct(a)))}o=`{${r.join(", ")}}`}return`${t}${i?"("+i+")":""}[${o}]: ${e.replace(OM,"\n ")}`}("\n"+e.message,o,t,i),e.ngTokenPath=o,e[jl]=null,e}(a,n,"R3InjectorError",this.source)}throw a}finally{Gt(s),Wi(r)}}resolveInjectorInitializers(){const n=Wi(this),t=Gt(void 0);try{const o=this.get(oa.multi,ge,oe.Self);for(const r of o)r()}finally{Wi(n),Gt(t)}}toString(){const n=[],t=this.records;for(const i of t.keys())n.push(ct(i));return`R3Injector[${n.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new O(205,!1)}processProvider(n){let t=To(n=Z(n))?n:Z(n&&n.provide);const i=function HN(e){return Kf(e)?Ar(void 0,e.useValue):Ar(function M_(e,n,t){let i;if(To(e)){const o=Z(e);return bo(o)||th(o)}if(Kf(e))i=()=>Z(e.useValue);else if(function T_(e){return!(!e||!e.useFactory)}(e))i=()=>e.useFactory(...Zd(e.deps||[]));else if(function E_(e){return!(!e||!e.useExisting)}(e))i=()=>L(Z(e.useExisting));else{const o=Z(e&&(e.useClass||e.provide));if(!function $N(e){return!!e.deps}(e))return bo(o)||th(o);i=()=>new o(...Zd(e.deps))}return i}(e),Dc)}(n);if(To(n)||!0!==n.multi)this.records.get(t);else{let o=this.records.get(t);o||(o=Ar(void 0,Dc,!0),o.factory=()=>Zd(o.multi),this.records.set(t,o)),t=n,o.multi.push(n)}this.records.set(t,i)}hydrate(n,t){return t.value===Dc&&(t.value=VN,t.value=t.factory()),"object"==typeof t.value&&t.value&&function UN(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}injectableDefInScope(n){if(!n.providedIn)return!1;const t=Z(n.providedIn);return"string"==typeof t?"any"===t||this.scopes.has(t):this.injectorDefTypes.has(t)}removeOnDestroy(n){const t=this._onDestroyHooks.indexOf(n);-1!==t&&this._onDestroyHooks.splice(t,1)}}function th(e){const n=Pl(e),t=null!==n?n.factory:bo(e);if(null!==t)return t;if(e instanceof U)throw new O(204,!1);if(e instanceof Function)return function BN(e){const n=e.length;if(n>0)throw Qs(n,"?"),new O(204,!1);const t=function TM(e){return e&&(e[Fl]||e[ov])||null}(e);return null!==t?()=>t.factory(e):()=>new e}(e);throw new O(204,!1)}function Ar(e,n,t=!1){return{factory:e,value:n,multi:t?[]:void 0}}function nh(e,n){for(const t of e)Array.isArray(t)?nh(t,n):t&&Bd(t)?nh(t.\u0275providers,n):n(t)}const Sc=new U("AppId",{providedIn:"root",factory:()=>zN}),zN="ng",I_=new U("Platform Initializer"),Rr=new U("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),N_=new U("CSP nonce",{providedIn:"root",factory:()=>function Nr(){if(void 0!==Gf)return Gf;if(typeof document<"u")return document;throw new O(210,!1)}().body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});let O_=(e,n,t)=>null;function uh(e,n,t=!1){return O_(e,n,t)}class tO{}class x_{}class iO{resolveComponentFactory(n){throw function nO(e){const n=Error(`No component factory found for ${ct(e)}.`);return n.ngComponent=e,n}(n)}}let Oc=(()=>{class e{static{this.NULL=new iO}}return e})();function oO(){return kr(St(),I())}function kr(e,n){return new we(qt(e,n))}let we=(()=>{class e{constructor(t){this.nativeElement=t}static{this.__NG_ELEMENT_ID__=oO}}return e})();function rO(e){return e instanceof we?e.nativeElement:e}class hh{}let ln=(()=>{class e{constructor(){this.destroyNode=null}static{this.__NG_ELEMENT_ID__=()=>function sO(){const e=I(),t=rn(St().index,e);return(Wt(t)?t:e)[K]}()}}return e})(),aO=(()=>{class e{static{this.\u0275prov=F({token:e,providedIn:"root",factory:()=>null})}}return e})();class aa{constructor(n){this.full=n,this.major=n.split(".")[0],this.minor=n.split(".")[1],this.patch=n.split(".").slice(2).join(".")}}const lO=new aa("16.2.12"),ph={};function L_(e,n=null,t=null,i){const o=V_(e,n,t,i);return o.resolveInjectorInitializers(),o}function V_(e,n=null,t=null,i,o=new Set){const r=[t||ge,FN(e)];return i=i||("object"==typeof e?void 0:ct(e)),new Or(r,n||Cc(),i||null,o)}let gt=(()=>{class e{static{this.THROW_IF_NOT_FOUND=Rs}static{this.NULL=new Qf}static create(t,i){if(Array.isArray(t))return L_({name:""},i,t,"");{const o=t.name??"";return L_({name:o},t.parent,t.providers,o)}}static{this.\u0275prov=F({token:e,providedIn:"any",factory:()=>L(b_)})}static{this.__NG_ELEMENT_ID__=-1}}return e})();function gh(e){return e.ngOriginalError}class Ni{constructor(){this._console=console}handleError(n){const t=this._findOriginalError(n);this._console.error("ERROR",n),t&&this._console.error("ORIGINAL ERROR",t)}_findOriginalError(n){let t=n&&gh(n);for(;t&&gh(t);)t=gh(t);return t||null}}function mh(e){return n=>{setTimeout(e,void 0,n)}}const z=class mO extends ye{constructor(n=!1){super(),this.__isAsync=n}emit(n){super.next(n)}subscribe(n,t,i){let o=n,r=t||(()=>null),s=i;if(n&&"object"==typeof n){const l=n;o=l.next?.bind(l),r=l.error?.bind(l),s=l.complete?.bind(l)}this.__isAsync&&(r=mh(r),o&&(o=mh(o)),s&&(s=mh(s)));const a=super.subscribe({next:o,error:r,complete:s});return n instanceof Je&&n.add(a),a}};function H_(...e){}class ae{constructor({enableLongStackTrace:n=!1,shouldCoalesceEventChangeDetection:t=!1,shouldCoalesceRunChangeDetection:i=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new z(!1),this.onMicrotaskEmpty=new z(!1),this.onStable=new z(!1),this.onError=new z(!1),typeof Zone>"u")throw new O(908,!1);Zone.assertZonePatched();const o=this;o._nesting=0,o._outer=o._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(o._inner=o._inner.fork(new Zone.TaskTrackingZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(o._inner=o._inner.fork(Zone.longStackTraceZoneSpec)),o.shouldCoalesceEventChangeDetection=!i&&t,o.shouldCoalesceRunChangeDetection=i,o.lastRequestAnimationFrameId=-1,o.nativeRequestAnimationFrame=function vO(){const e="function"==typeof Fe.requestAnimationFrame;let n=Fe[e?"requestAnimationFrame":"setTimeout"],t=Fe[e?"cancelAnimationFrame":"clearTimeout"];if(typeof Zone<"u"&&n&&t){const i=n[Zone.__symbol__("OriginalDelegate")];i&&(n=i);const o=t[Zone.__symbol__("OriginalDelegate")];o&&(t=o)}return{nativeRequestAnimationFrame:n,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function bO(e){const n=()=>{!function yO(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(Fe,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,_h(e),e.isCheckStableRunning=!0,vh(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),_h(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(t,i,o,r,s,a)=>{if(function DO(e){return!(!Array.isArray(e)||1!==e.length)&&!0===e[0].data?.__ignore_ng_zone__}(a))return t.invokeTask(o,r,s,a);try{return $_(e),t.invokeTask(o,r,s,a)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===r.type||e.shouldCoalesceRunChangeDetection)&&n(),U_(e)}},onInvoke:(t,i,o,r,s,a,l)=>{try{return $_(e),t.invoke(o,r,s,a,l)}finally{e.shouldCoalesceRunChangeDetection&&n(),U_(e)}},onHasTask:(t,i,o,r)=>{t.hasTask(o,r),i===o&&("microTask"==r.change?(e._hasPendingMicrotasks=r.microTask,_h(e),vh(e)):"macroTask"==r.change&&(e.hasPendingMacrotasks=r.macroTask))},onHandleError:(t,i,o,r)=>(t.handleError(o,r),e.runOutsideAngular(()=>e.onError.emit(r)),!1)})}(o)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!ae.isInAngularZone())throw new O(909,!1)}static assertNotInAngularZone(){if(ae.isInAngularZone())throw new O(909,!1)}run(n,t,i){return this._inner.run(n,t,i)}runTask(n,t,i,o){const r=this._inner,s=r.scheduleEventTask("NgZoneEvent: "+o,n,_O,H_,H_);try{return r.runTask(s,t,i)}finally{r.cancelTask(s)}}runGuarded(n,t,i){return this._inner.runGuarded(n,t,i)}runOutsideAngular(n){return this._outer.run(n)}}const _O={};function vh(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function _h(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function $_(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function U_(e){e._nesting--,vh(e)}class wO{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new z,this.onMicrotaskEmpty=new z,this.onStable=new z,this.onError=new z}run(n,t,i){return n.apply(t,i)}runGuarded(n,t,i){return n.apply(t,i)}runOutsideAngular(n){return n()}runTask(n,t,i,o){return n.apply(t,i)}}const G_=new U("",{providedIn:"root",factory:z_});function z_(){const e=k(ae);let n=!0;return function Xm(...e){const n=As(e),t=function dM(e,n){return"number"==typeof Fd(e)?e.pop():n}(e,1/0),i=e;return i.length?1===i.length?at(i[0]):rr(t)(pt(i,n)):mn}(new Te(o=>{n=e.isStable&&!e.hasPendingMacrotasks&&!e.hasPendingMicrotasks,e.runOutsideAngular(()=>{o.next(n),o.complete()})}),new Te(o=>{let r;e.runOutsideAngular(()=>{r=e.onStable.subscribe(()=>{ae.assertNotInAngularZone(),queueMicrotask(()=>{!n&&!e.hasPendingMacrotasks&&!e.hasPendingMicrotasks&&(n=!0,o.next(!0))})})});const s=e.onUnstable.subscribe(()=>{ae.assertInAngularZone(),n&&(n=!1,e.runOutsideAngular(()=>{o.next(!1)}))});return()=>{r.unsubscribe(),s.unsubscribe()}}).pipe(ev()))}function Oi(e){return e instanceof Function?e():e}let yh=(()=>{class e{constructor(){this.renderDepth=0,this.handler=null}begin(){this.handler?.validateBegin(),this.renderDepth++}end(){this.renderDepth--,0===this.renderDepth&&this.handler?.execute()}ngOnDestroy(){this.handler?.destroy(),this.handler=null}static{this.\u0275prov=F({token:e,providedIn:"root",factory:()=>new e})}}return e})();function la(e){for(;e;){e[ee]|=64;const n=Xs(e);if(tf(e)&&!n)return e;e=n}return null}const Q_=new U("",{providedIn:"root",factory:()=>!1});let xc=null;function ey(e,n){return e[n]??iy()}function ty(e,n){const t=iy();t.producerNode?.length&&(e[n]=xc,t.lView=e,xc=ny())}const RO={...Iv,consumerIsAlwaysLive:!0,consumerMarkedDirty:e=>{la(e.lView)},lView:null};function ny(){return Object.create(RO)}function iy(){return xc??=ny(),xc}const X={};function M(e){oy(fe(),I(),Ft()+e,!1)}function oy(e,n,t,i){if(!i)if(3==(3&n[ee])){const r=e.preOrderCheckHooks;null!==r&&Zl(n,r,t)}else{const r=e.preOrderHooks;null!==r&&Ql(n,r,0,t)}wo(t)}function y(e,n=oe.Default){const t=I();return null===t?L(e,n):y1(St(),t,Z(e),n)}function Pc(e,n,t,i,o,r,s,a,l,d,h){const p=n.blueprint.slice();return p[qe]=o,p[ee]=140|i,(null!==d||e&&2048&e[ee])&&(p[ee]|=2048),Yv(p),p[He]=p[ur]=e,p[Xe]=t,p[cr]=s||e&&e[cr],p[K]=a||e&&e[K],p[qi]=l||e&&e[qi]||null,p[Ot]=r,p[Vs]=function P2(){return x2++}(),p[Ei]=h,p[Sv]=d,p[et]=2==n.type?e[et]:p,p}function Vr(e,n,t,i,o){let r=e.data[n];if(null===r)r=function bh(e,n,t,i,o){const r=e1(),s=df(),l=e.data[n]=function BO(e,n,t,i,o,r){let s=n?n.injectorIndex:-1,a=0;return gr()&&(a|=128),{type:t,index:i,insertBeforeIndex:null,injectorIndex:s,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,propertyBindings:null,flags:a,providerIndexes:0,value:o,attrs:r,mergedAttrs:null,localNames:null,initialInputs:void 0,inputs:null,outputs:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:n,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}(0,s?r:r&&r.parent,t,n,i,o);return null===e.firstChild&&(e.firstChild=l),null!==r&&(s?null==r.child&&null!==l.parent&&(r.child=l):null===r.next&&(r.next=l,l.prev=r)),l}(e,n,t,i,o),function xI(){return Y.lFrame.inI18n}()&&(r.flags|=32);else if(64&r.type){r.type=t,r.value=i,r.attrs=o;const s=function Gs(){const e=Y.lFrame,n=e.currentTNode;return e.isParent?n:n.parent}();r.injectorIndex=null===s?-1:s.injectorIndex}return ri(r,!0),r}function ca(e,n,t,i){if(0===t)return-1;const o=n.length;for(let r=0;rre&&oy(e,n,re,!1),oi(a?2:0,o);const d=a?r:null,h=rf(d);try{null!==d&&(d.dirty=!1),t(i,o)}finally{sf(d,h)}}finally{a&&null===n[Bs]&&ty(n,Bs),wo(s),oi(a?3:1,o)}}function wh(e,n,t){if(ef(n)){const i=yn(null);try{const r=n.directiveEnd;for(let s=n.directiveStart;snull;function cy(e,n,t,i){for(let o in e)if(e.hasOwnProperty(o)){t=null===t?{}:t;const r=e[o];null===i?uy(t,n,o,r):i.hasOwnProperty(o)&&uy(t,n,i[o],r)}return t}function uy(e,n,t,i){e.hasOwnProperty(t)?e[t].push(n,i):e[t]=[n,i]}function Eh(e,n,t,i){if(Xv()){const o=null===i?null:{"":-1},r=function ZO(e,n){const t=e.directiveRegistry;let i=null,o=null;if(t)for(let r=0;r0;){const t=e[--n];if("number"==typeof t&&t<0)return t}return 0})(s)!=a&&s.push(a),s.push(t,i,r)}}(e,n,i,ca(e,t,o.hostVars,X),o)}function li(e,n,t,i,o,r){const s=qt(e,n);!function Mh(e,n,t,i,o,r,s){if(null==r)e.removeAttribute(n,o,t);else{const a=null==s?J(r):s(r,i||"",o);e.setAttribute(n,o,a,t)}}(n[K],s,r,e.value,t,i,o)}function tA(e,n,t,i,o,r){const s=r[n];if(null!==s)for(let a=0;a{class e{constructor(){this.all=new Set,this.queue=new Map}create(t,i,o){const r=typeof Zone>"u"?null:Zone.current,s=function dI(e,n,t){const i=Object.create(fI);t&&(i.consumerAllowSignalWrites=!0),i.fn=e,i.schedule=n;const o=s=>{i.cleanupFn=s};return i.ref={notify:()=>Rv(i),run:()=>{if(i.dirty=!1,i.hasRun&&!xv(i))return;i.hasRun=!0;const s=rf(i);try{i.cleanupFn(),i.cleanupFn=Hv,i.fn(o)}finally{sf(i,s)}},cleanup:()=>i.cleanupFn()},i.ref}(t,d=>{this.all.has(d)&&this.queue.set(d,r)},o);let a;this.all.add(s),s.notify();const l=()=>{s.cleanup(),a?.(),this.all.delete(s),this.queue.delete(s)};return a=i?.onDestroy(l),{destroy:l}}flush(){if(0!==this.queue.size)for(const[t,i]of this.queue)this.queue.delete(t),i?i.run(()=>t.run()):t.run()}get isQueueEmpty(){return 0===this.queue.size}static{this.\u0275prov=F({token:e,providedIn:"root",factory:()=>new e})}}return e})();function Fc(e,n,t){let i=t?e.styles:null,o=t?e.classes:null,r=0;if(null!==n)for(let s=0;s0){Cy(e,1);const o=t.components;null!==o&&Ey(e,o,1)}}function Ey(e,n,t){for(let i=0;i-1&&(hc(n,i),tc(t,i))}this._attachedToViewContainer=!1}jf(this._lView[V],this._lView)}onDestroy(n){!function Jv(e,n){if(256==(256&e[ee]))throw new O(911,!1);null===e[Yi]&&(e[Yi]=[]),e[Yi].push(n)}(this._lView,n)}markForCheck(){la(this._cdRefInjectingView||this._lView)}detach(){this._lView[ee]&=-129}reattach(){this._lView[ee]|=128}detectChanges(){jc(this._lView[V],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new O(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function Y2(e,n){ta(e,n,n[K],2,null,null)}(this._lView[V],this._lView)}attachToAppRef(n){if(this._attachedToViewContainer)throw new O(902,!1);this._appRef=n}}class uA extends da{constructor(n){super(n),this._view=n}detectChanges(){const n=this._view;jc(n[V],n,n[Xe],!1)}checkNoChanges(){}get context(){return null}}class Ty extends Oc{constructor(n){super(),this.ngModule=n}resolveComponentFactory(n){const t=de(n);return new fa(t,this.ngModule)}}function My(e){const n=[];for(let t in e)e.hasOwnProperty(t)&&n.push({propName:e[t],templateName:t});return n}class fA{constructor(n,t){this.injector=n,this.parentInjector=t}get(n,t,i){i=Ll(i);const o=this.injector.get(n,ph,i);return o!==ph||t===ph?o:this.parentInjector.get(n,t,i)}}class fa extends x_{get inputs(){const n=this.componentDef,t=n.inputTransforms,i=My(n.inputs);if(null!==t)for(const o of i)t.hasOwnProperty(o.propName)&&(o.transform=t[o.propName]);return i}get outputs(){return My(this.componentDef.outputs)}constructor(n,t){super(),this.componentDef=n,this.ngModule=t,this.componentType=n.type,this.selector=function WM(e){return e.map(zM).join(",")}(n.selectors),this.ngContentSelectors=n.ngContentSelectors?n.ngContentSelectors:[],this.isBoundToModule=!!t}create(n,t,i,o){let r=(o=o||this.ngModule)instanceof Zt?o:o?.injector;r&&null!==this.componentDef.getStandaloneInjector&&(r=this.componentDef.getStandaloneInjector(r)||r);const s=r?new fA(n,r):n,a=s.get(hh,null);if(null===a)throw new O(407,!1);const p={rendererFactory:a,sanitizer:s.get(aO,null),effectManager:s.get(by,null),afterRenderEventManager:s.get(yh,null)},g=a.createRenderer(null,this.componentDef),v=this.componentDef.selectors[0][0]||"div",_=i?function kO(e,n,t,i){const r=i.get(Q_,!1)||t===kn.ShadowDom,s=e.selectRootElement(n,r);return function FO(e){ly(e)}(s),s}(g,i,this.componentDef.encapsulation,s):fc(g,v,function dA(e){const n=e.toLowerCase();return"svg"===n?"svg":"math"===n?"math":null}(v)),E=this.componentDef.signals?4608:this.componentDef.onPush?576:528;let D=null;null!==_&&(D=uh(_,s,!0));const P=Sh(0,null,null,1,0,null,null,null,null,null,null),R=Pc(null,P,null,E,null,null,p,g,s,null,D);let H,Q;mf(R);try{const ce=this.componentDef;let pe,Qe=null;ce.findHostDirectiveDefs?(pe=[],Qe=new Map,ce.findHostDirectiveDefs(ce,pe,Qe),pe.push(ce)):pe=[ce];const ot=function pA(e,n){const t=e[V],i=re;return e[i]=n,Vr(t,i,2,"#host",null)}(R,_),yt=function gA(e,n,t,i,o,r,s){const a=o[V];!function mA(e,n,t,i){for(const o of e)n.mergedAttrs=ks(n.mergedAttrs,o.hostAttrs);null!==n.mergedAttrs&&(Fc(n,n.mergedAttrs,!0),null!==t&&l_(i,t,n))}(i,e,n,s);let l=null;null!==n&&(l=uh(n,o[qi]));const d=r.rendererFactory.createRenderer(n,t);let h=16;t.signals?h=4096:t.onPush&&(h=64);const p=Pc(o,ay(t),null,h,o[e.index],e,r,d,null,null,l);return a.firstCreatePass&&Th(a,e,i.length-1),kc(o,p),o[e.index]=p}(ot,_,ce,pe,R,p,g);Q=qv(P,re),_&&function _A(e,n,t,i){if(i)Kd(e,t,["ng-version",lO.full]);else{const{attrs:o,classes:r}=function qM(e){const n=[],t=[];let i=1,o=2;for(;i0&&a_(e,t,r.join(" "))}}(g,ce,_,i),void 0!==t&&function yA(e,n,t){const i=e.projection=[];for(let o=0;o(Ji(!0),fc(i,o,function u1(){return Y.lFrame.currentNamespace}()));function _a(e){return!!e&&"function"==typeof e.then}function Qy(e){return!!e&&"function"==typeof e.subscribe}function le(e,n,t,i){const o=I(),r=fe(),s=St();return function Ky(e,n,t,i,o,r,s){const a=Ul(i),d=e.firstCreatePass&&vy(e),h=n[Xe],p=my(n);let g=!0;if(3&i.type||s){const b=qt(i,n),C=s?s(b):b,E=p.length,D=s?R=>s(je(R[i.index])):i.index;let P=null;if(!s&&a&&(P=function oR(e,n,t,i){const o=e.cleanup;if(null!=o)for(let r=0;rl?a[l]:null}"string"==typeof s&&(r+=2)}return null}(e,n,o,i.index)),null!==P)(P.__ngLastListenerFn__||P).__ngNextListenerFn__=r,P.__ngLastListenerFn__=r,g=!1;else{r=e0(i,n,h,r,!1);const R=t.listen(C,o,r);p.push(r,R),d&&d.push(o,D,E,E+1)}}else r=e0(i,n,h,r,!1);const v=i.outputs;let _;if(g&&null!==v&&(_=v[o])){const b=_.length;if(b)for(let C=0;C-1?rn(e.index,n):n);let l=Xy(n,t,i,s),d=r.__ngNextListenerFn__;for(;d;)l=Xy(n,t,d,s)&&l,d=d.__ngNextListenerFn__;return o&&!1===l&&s.preventDefault(),l}}function G(e=1){return function jI(e){return(Y.lFrame.contextLView=function LI(e,n){for(;e>0;)n=n[ur],e--;return n}(e,Y.lFrame.contextLView))[Xe]}(e)}function rR(e,n){let t=null;const i=function HM(e){const n=e.attrs;if(null!=n){const t=n.indexOf(5);if(!(1&t))return n[t+1]}return null}(e);for(let o=0;o>17&32767}function Uh(e){return 2|e}function Io(e){return(131068&e)>>2}function Gh(e,n){return-131069&e|n<<2}function zh(e){return 1|e}function u0(e,n,t,i,o){const r=e[t+1],s=null===n;let a=i?Xi(r):Io(r),l=!1;for(;0!==a&&(!1===l||s);){const h=e[a+1];dR(e[a],n)&&(l=!0,e[a+1]=i?zh(h):Uh(h)),a=i?Xi(h):Io(h)}l&&(e[t+1]=i?Uh(r):zh(r))}function dR(e,n){return null===e||null==n||(Array.isArray(e)?e[1]:e)===n||!(!Array.isArray(e)||"string"!=typeof n)&&Sr(e,n)>=0}const dt={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function d0(e){return e.substring(dt.key,dt.keyEnd)}function f0(e,n){const t=dt.textEnd;return t===n?-1:(n=dt.keyEnd=function gR(e,n,t){for(;n32;)n++;return n}(e,dt.key=n,t),Zr(e,n,t))}function Zr(e,n,t){for(;n=0;t=f0(n,t))sn(e,d0(n),!0)}function _0(e,n){return n>=e.expandoStartIndex}function y0(e,n,t,i){const o=e.data;if(null===o[t+1]){const r=o[Ft()],s=_0(e,t);C0(r,i)&&null===n&&!s&&(n=!1),n=function yR(e,n,t,i){const o=function pf(e){const n=Y.lFrame.currentDirectiveIndex;return-1===n?null:e[n]}(e);let r=i?n.residualClasses:n.residualStyles;if(null===o)0===(i?n.classBindings:n.styleBindings)&&(t=ya(t=Wh(null,e,n,t,i),n.attrs,i),r=null);else{const s=n.directiveStylingLast;if(-1===s||e[s]!==o)if(t=Wh(o,e,n,t,i),null===r){let l=function bR(e,n,t){const i=t?n.classBindings:n.styleBindings;if(0!==Io(i))return e[Xi(i)]}(e,n,i);void 0!==l&&Array.isArray(l)&&(l=Wh(null,e,n,l[1],i),l=ya(l,n.attrs,i),function wR(e,n,t,i){e[Xi(t?n.classBindings:n.styleBindings)]=i}(e,n,i,l))}else r=function DR(e,n,t){let i;const o=n.directiveEnd;for(let r=1+n.directiveStylingLast;r0)&&(d=!0)):h=t,o)if(0!==l){const g=Xi(e[a+1]);e[i+1]=zc(g,a),0!==g&&(e[g+1]=Gh(e[g+1],i)),e[a+1]=function aR(e,n){return 131071&e|n<<17}(e[a+1],i)}else e[i+1]=zc(a,0),0!==a&&(e[a+1]=Gh(e[a+1],i)),a=i;else e[i+1]=zc(l,0),0===a?a=i:e[l+1]=Gh(e[l+1],i),l=i;d&&(e[i+1]=Uh(e[i+1])),u0(e,h,i,!0),u0(e,h,i,!1),function uR(e,n,t,i,o){const r=o?e.residualClasses:e.residualStyles;null!=r&&"string"==typeof n&&Sr(r,n)>=0&&(t[i+1]=zh(t[i+1]))}(n,h,e,i,r),s=zc(a,l),r?n.classBindings=s:n.styleBindings=s}(o,r,n,t,s,i)}}function Wh(e,n,t,i,o){let r=null;const s=t.directiveEnd;let a=t.directiveStylingLast;for(-1===a?a=t.directiveStart:a++;a0;){const l=e[o],d=Array.isArray(l),h=d?l[1]:l,p=null===h;let g=t[o+1];g===X&&(g=p?ge:void 0);let v=p?Tf(g,i):h===i?g:void 0;if(d&&!Wc(v)&&(v=Tf(l,i)),Wc(v)&&(a=v,s))return a;const _=e[o+1];o=s?Xi(_):Io(_)}if(null!==n){let l=r?n.residualClasses:n.residualStyles;null!=l&&(a=Tf(l,i))}return a}function Wc(e){return void 0!==e}function C0(e,n){return 0!=(e.flags&(n?8:16))}function f(e,n=""){const t=I(),i=fe(),o=e+re,r=i.firstCreatePass?Vr(i,o,1,n,null):i.data[o],s=S0(i,t,r,n,e);t[o]=s,ql()&&gc(i,t,s,r),ri(r,!1)}let S0=(e,n,t,i,o)=>(Ji(!0),function dc(e,n){return e.createText(n)}(n[K],i));function Le(e){return un("",e,""),Le}function un(e,n,t){const i=I(),o=function Hr(e,n,t,i){return Rt(e,mr(),t)?n+J(t)+i:X}(i,e,n,t);return o!==X&&function Ai(e,n,t){const i=Wl(n,e);!function Z1(e,n,t){e.setValue(n,t)}(e[K],i,t)}(i,Ft(),o),un}const Jr="en-US";let z0=Jr;class Ao{}class vb{}class Xh extends Ao{constructor(n,t,i){super(),this._parent=t,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Ty(this);const o=on(n);this._bootstrapComponents=Oi(o.bootstrap),this._r3Injector=V_(n,t,[{provide:Ao,useValue:this},{provide:Oc,useValue:this.componentFactoryResolver},...i],ct(n),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(n)}get injector(){return this._r3Injector}destroy(){const n=this._r3Injector;!n.destroyed&&n.destroy(),this.destroyCbs.forEach(t=>t()),this.destroyCbs=null}onDestroy(n){this.destroyCbs.push(n)}}class ep extends vb{constructor(n){super(),this.moduleType=n}create(n){return new Xh(this.moduleType,n,[])}}class _b extends Ao{constructor(n){super(),this.componentFactoryResolver=new Ty(this),this.instance=null;const t=new Or([...n.providers,{provide:Ao,useValue:this},{provide:Oc,useValue:this.componentFactoryResolver}],n.parent||Cc(),n.debugName,new Set(["environment"]));this.injector=t,n.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(n){this.injector.onDestroy(n)}}function tp(e,n,t=null){return new _b({providers:e,parent:n,debugName:t,runEnvironmentInitializers:!0}).injector}let Zx=(()=>{class e{constructor(t){this._injector=t,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(t){if(!t.standalone)return null;if(!this.cachedInjectors.has(t)){const i=C_(0,t.type),o=i.length>0?tp([i],this._injector,`Standalone[${t.type.name}]`):null;this.cachedInjectors.set(t,o)}return this.cachedInjectors.get(t)}ngOnDestroy(){try{for(const t of this.cachedInjectors.values())null!==t&&t.destroy()}finally{this.cachedInjectors.clear()}}static{this.\u0275prov=F({token:e,providedIn:"environment",factory:()=>new e(L(Zt))})}}return e})();function En(e){e.getStandaloneInjector=n=>n.get(Zx).getOrCreateStandaloneInjector(e)}function Ri(e,n,t,i){return function Tb(e,n,t,i,o,r){const s=n+t;return Rt(e,s,o)?ci(e,s+1,r?i.call(r,o):i(o)):Ma(e,s+1)}(I(),kt(),e,n,t,i)}function Eb(e,n,t,i,o,r,s){return function Nb(e,n,t,i,o,r,s,a,l){const d=n+t;return function Cn(e,n,t,i,o,r){const s=Mo(e,n,t,i);return Mo(e,n+2,o,r)||s}(e,d,o,r,s,a)?ci(e,d+4,l?i.call(l,o,r,s,a):i(o,r,s,a)):Ma(e,d+4)}(I(),kt(),e,n,t,i,o,r,s)}function Ma(e,n){const t=e[n];return t===X?void 0:t}function vP(){return this._results[Symbol.iterator]()}class op{get changes(){return this._changes||(this._changes=new z)}constructor(n=!1){this._emitDistinctChangesOnly=n,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const t=op.prototype;t[Symbol.iterator]||(t[Symbol.iterator]=vP)}get(n){return this._results[n]}map(n){return this._results.map(n)}filter(n){return this._results.filter(n)}find(n){return this._results.find(n)}reduce(n,t){return this._results.reduce(n,t)}forEach(n){this._results.forEach(n)}some(n){return this._results.some(n)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(n,t){const i=this;i.dirty=!1;const o=function bn(e){return e.flat(Number.POSITIVE_INFINITY)}(n);(this._changesDetected=!function a2(e,n,t){if(e.length!==n.length)return!1;for(let i=0;i0&&(t[o-1][jn]=n),i{class e{static{this.__NG_ELEMENT_ID__=DP}}return e})();const bP=ze,wP=class extends bP{constructor(n,t,i){super(),this._declarationLView=n,this._declarationTContainer=t,this.elementRef=i}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(n,t){return this.createEmbeddedViewImpl(n,t)}createEmbeddedViewImpl(n,t,i){const o=function _P(e,n,t,i){const o=n.tView,a=Pc(e,o,t,4096&e[ee]?4096:16,null,n,null,null,null,i?.injector??null,i?.hydrationInfo??null);a[Ls]=e[n.index];const d=e[ni];return null!==d&&(a[ni]=d.createEmbeddedView(o)),Oh(o,a,t),a}(this._declarationLView,this._declarationTContainer,n,{injector:t,hydrationInfo:i});return new da(o)}};function DP(){return Jc(St(),I())}function Jc(e,n){return 4&e.type?new wP(n,e,kr(e,n)):null}let Tn=(()=>{class e{static{this.__NG_ELEMENT_ID__=IP}}return e})();function IP(){return jb(St(),I())}const NP=Tn,kb=class extends NP{constructor(n,t,i){super(),this._lContainer=n,this._hostTNode=t,this._hostLView=i}get element(){return kr(this._hostTNode,this._hostLView)}get injector(){return new jt(this._hostTNode,this._hostLView)}get parentInjector(){const n=Xl(this._hostTNode,this._hostLView);if(bf(n)){const t=qs(n,this._hostLView),i=Ws(n);return new jt(t[V].data[i+8],t)}return new jt(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(n){const t=Fb(this._lContainer);return null!==t&&t[n]||null}get length(){return this._lContainer.length-wt}createEmbeddedView(n,t,i){let o,r;"number"==typeof i?o=i:null!=i&&(o=i.index,r=i.injector);const a=n.createEmbeddedViewImpl(t||{},r,null);return this.insertImpl(a,o,false),a}createComponent(n,t,i,o,r){const s=n&&!function Zs(e){return"function"==typeof e}(n);let a;if(s)a=t;else{const b=t||{};a=b.index,i=b.injector,o=b.projectableNodes,r=b.environmentInjector||b.ngModuleRef}const l=s?n:new fa(de(n)),d=i||this.parentInjector;if(!r&&null==l.ngModule){const C=(s?d:this.parentInjector).get(Zt,null);C&&(r=C)}de(l.componentType??{});const v=l.create(d,o,null,r);return this.insertImpl(v.hostView,a,false),v}insert(n,t){return this.insertImpl(n,t,!1)}insertImpl(n,t,i){const o=n._lView;if(function wI(e){return Pt(e[He])}(o)){const l=this.indexOf(n);if(-1!==l)this.detach(l);else{const d=o[He],h=new kb(d,d[Ot],d[He]);h.detach(h.indexOf(n))}}const s=this._adjustIndex(t),a=this._lContainer;return yP(a,o,s,!i),n.attachToViewContainerRef(),E1(rp(a),s,n),n}move(n,t){return this.insert(n,t)}indexOf(n){const t=Fb(this._lContainer);return null!==t?t.indexOf(n):-1}remove(n){const t=this._adjustIndex(n,-1),i=hc(this._lContainer,t);i&&(tc(rp(this._lContainer),t),jf(i[V],i))}detach(n){const t=this._adjustIndex(n,-1),i=hc(this._lContainer,t);return i&&null!=tc(rp(this._lContainer),t)?new da(i):null}_adjustIndex(n,t=0){return n??this.length+t}};function Fb(e){return e[8]}function rp(e){return e[8]||(e[8]=[])}function jb(e,n){let t;const i=n[e.index];return Pt(i)?t=i:(t=py(i,n,null,e),n[e.index]=t,kc(n,t)),Lb(t,n,e,i),new kb(t,e,n)}let Lb=function Vb(e,n,t,i){if(e[ii])return;let o;o=8&t.type?je(i):function OP(e,n){const t=e[K],i=t.createComment(""),o=qt(n,e);return So(t,pc(t,o),i,function tN(e,n){return e.nextSibling(n)}(t,o),!1),i}(n,t),e[ii]=o};class sp{constructor(n){this.queryList=n,this.matches=null}clone(){return new sp(this.queryList)}setDirty(){this.queryList.setDirty()}}class ap{constructor(n=[]){this.queries=n}createEmbeddedView(n){const t=n.queries;if(null!==t){const i=null!==n.contentQueries?n.contentQueries[0]:t.length,o=[];for(let r=0;r0)i.push(s[a/2]);else{const d=r[a+1],h=n[-l];for(let p=wt;p{class e{constructor(){this.initialized=!1,this.done=!1,this.donePromise=new Promise((t,i)=>{this.resolve=t,this.reject=i}),this.appInits=k(mp,{optional:!0})??[]}runInitializers(){if(this.initialized)return;const t=[];for(const o of this.appInits){const r=o();if(_a(r))t.push(r);else if(Qy(r)){const s=new Promise((a,l)=>{r.subscribe({complete:a,error:l})});t.push(s)}}const i=()=>{this.done=!0,this.resolve()};Promise.all(t).then(()=>{i()}).catch(o=>{this.reject(o)}),0===t.length&&i(),this.initialized=!0}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),aw=(()=>{class e{log(t){console.log(t)}warn(t){console.warn(t)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"platform"})}}return e})();const Gn=new U("LocaleId",{providedIn:"root",factory:()=>k(Gn,oe.Optional|oe.SkipSelf)||function rk(){return typeof $localize<"u"&&$localize.locale||Jr}()});let lw=(()=>{class e{constructor(){this.taskId=0,this.pendingTasks=new Set,this.hasPendingTasks=new vn(!1)}add(){this.hasPendingTasks.next(!0);const t=this.taskId++;return this.pendingTasks.add(t),t}remove(t){this.pendingTasks.delete(t),0===this.pendingTasks.size&&this.hasPendingTasks.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks.next(!1)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();class lk{constructor(n,t){this.ngModuleFactory=n,this.componentFactories=t}}let cw=(()=>{class e{compileModuleSync(t){return new ep(t)}compileModuleAsync(t){return Promise.resolve(this.compileModuleSync(t))}compileModuleAndAllComponentsSync(t){const i=this.compileModuleSync(t),r=Oi(on(t).declarations).reduce((s,a)=>{const l=de(a);return l&&s.push(new fa(l)),s},[]);return new lk(i,r)}compileModuleAndAllComponentsAsync(t){return Promise.resolve(this.compileModuleAndAllComponentsSync(t))}clearCache(){}clearCacheFor(t){}getModuleId(t){}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();const hw=new U(""),tu=new U("");let Dp,bp=(()=>{class e{constructor(t,i,o){this._ngZone=t,this.registry=i,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,Dp||(function Ok(e){Dp=e}(o),o.addToWindow(i)),this._watchAngularEvents(),t.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{ae.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;0!==this._callbacks.length;){let t=this._callbacks.pop();clearTimeout(t.timeoutId),t.doneCb(this._didWork)}this._didWork=!1});else{let t=this.getPendingTasks();this._callbacks=this._callbacks.filter(i=>!i.updateCb||!i.updateCb(t)||(clearTimeout(i.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(t=>({source:t.source,creationLocation:t.creationLocation,data:t.data})):[]}addCallback(t,i,o){let r=-1;i&&i>0&&(r=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==r),t(this._didWork,this.getPendingTasks())},i)),this._callbacks.push({doneCb:t,timeoutId:r,updateCb:o})}whenStable(t,i,o){if(o&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(t,i,o),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(t){this.registry.registerApplication(t,this)}unregisterApplication(t){this.registry.unregisterApplication(t)}findProviders(t,i,o){return[]}static{this.\u0275fac=function(i){return new(i||e)(L(ae),L(wp),L(tu))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})(),wp=(()=>{class e{constructor(){this._applications=new Map}registerApplication(t,i){this._applications.set(t,i)}unregisterApplication(t){this._applications.delete(t)}unregisterAllApplications(){this._applications.clear()}getTestability(t){return this._applications.get(t)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(t,i=!0){return Dp?.findTestabilityInTree(this,t,i)??null}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"platform"})}}return e})(),to=null;const pw=new U("AllowMultipleToken"),Cp=new U("PlatformDestroyListeners"),Sp=new U("appBootstrapListener");class mw{constructor(n,t){this.name=n,this.token=t}}function _w(e,n,t=[]){const i=`Platform: ${n}`,o=new U(i);return(r=[])=>{let s=Ep();if(!s||s.injector.get(pw,!1)){const a=[...t,...r,{provide:o,useValue:!0}];e?e(a):function xk(e){if(to&&!to.get(pw,!1))throw new O(400,!1);(function gw(){!function sI(e){jv=e}(()=>{throw new O(600,!1)})})(),to=e;const n=e.get(bw);(function vw(e){e.get(I_,null)?.forEach(t=>t())})(e)}(function yw(e=[],n){return gt.create({name:n,providers:[{provide:Xf,useValue:"platform"},{provide:Cp,useValue:new Set([()=>to=null])},...e]})}(a,i))}return function kk(e){const n=Ep();if(!n)throw new O(401,!1);return n}()}}function Ep(){return to?.get(bw)??null}let bw=(()=>{class e{constructor(t){this._injector=t,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(t,i){const o=function Fk(e="zone.js",n){return"noop"===e?new wO:"zone.js"===e?new ae(n):e}(i?.ngZone,function ww(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:e?.eventCoalescing??!1,shouldCoalesceRunChangeDetection:e?.runCoalescing??!1}}({eventCoalescing:i?.ngZoneEventCoalescing,runCoalescing:i?.ngZoneRunCoalescing}));return o.run(()=>{const r=function Yx(e,n,t){return new Xh(e,n,t)}(t.moduleType,this.injector,function Tw(e){return[{provide:ae,useFactory:e},{provide:oa,multi:!0,useFactory:()=>{const n=k(Lk,{optional:!0});return()=>n.initialize()}},{provide:Ew,useFactory:jk},{provide:G_,useFactory:z_}]}(()=>o)),s=r.injector.get(Ni,null);return o.runOutsideAngular(()=>{const a=o.onError.subscribe({next:l=>{s.handleError(l)}});r.onDestroy(()=>{nu(this._modules,r),a.unsubscribe()})}),function Dw(e,n,t){try{const i=t();return _a(i)?i.catch(o=>{throw n.runOutsideAngular(()=>e.handleError(o)),o}):i}catch(i){throw n.runOutsideAngular(()=>e.handleError(i)),i}}(s,o,()=>{const a=r.injector.get(vp);return a.runInitializers(),a.donePromise.then(()=>(function W0(e){_n(e,"Expected localeId to be defined"),"string"==typeof e&&(z0=e.toLowerCase().replace(/_/g,"-"))}(r.injector.get(Gn,Jr)||Jr),this._moduleDoBootstrap(r),r))})})}bootstrapModule(t,i=[]){const o=Cw({},i);return function Ak(e,n,t){const i=new ep(t);return Promise.resolve(i)}(0,0,t).then(r=>this.bootstrapModuleFactory(r,o))}_moduleDoBootstrap(t){const i=t.injector.get(no);if(t._bootstrapComponents.length>0)t._bootstrapComponents.forEach(o=>i.bootstrap(o));else{if(!t.instance.ngDoBootstrap)throw new O(-403,!1);t.instance.ngDoBootstrap(i)}this._modules.push(t)}onDestroy(t){this._destroyListeners.push(t)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new O(404,!1);this._modules.slice().forEach(i=>i.destroy()),this._destroyListeners.forEach(i=>i());const t=this._injector.get(Cp,null);t&&(t.forEach(i=>i()),t.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}static{this.\u0275fac=function(i){return new(i||e)(L(gt))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"platform"})}}return e})();function Cw(e,n){return Array.isArray(n)?n.reduce(Cw,e):{...e,...n}}let no=(()=>{class e{constructor(){this._bootstrapListeners=[],this._runningTick=!1,this._destroyed=!1,this._destroyListeners=[],this._views=[],this.internalErrorHandler=k(Ew),this.zoneIsStable=k(G_),this.componentTypes=[],this.components=[],this.isStable=k(lw).hasPendingTasks.pipe(Pn(t=>t?W(!1):this.zoneIsStable),function tv(e,n=xn){return e=e??_M,Ue((t,i)=>{let o,r=!0;t.subscribe(ke(i,s=>{const a=n(s);(r||!e(o,a))&&(r=!1,o=a,i.next(s))}))})}(),ev()),this._injector=k(Zt)}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(t,i){const o=t instanceof x_;if(!this._injector.get(vp).done)throw!o&&function ar(e){const n=de(e)||bt(e)||xt(e);return null!==n&&n.standalone}(t),new O(405,!1);let s;s=o?t:this._injector.get(Oc).resolveComponentFactory(t),this.componentTypes.push(s.componentType);const a=function Rk(e){return e.isBoundToModule}(s)?void 0:this._injector.get(Ao),d=s.create(gt.NULL,[],i||s.selector,a),h=d.location.nativeElement,p=d.injector.get(hw,null);return p?.registerApplication(h),d.onDestroy(()=>{this.detachView(d.hostView),nu(this.components,d),p?.unregisterApplication(h)}),this._loadComponent(d),d}tick(){if(this._runningTick)throw new O(101,!1);try{this._runningTick=!0;for(let t of this._views)t.detectChanges()}catch(t){this.internalErrorHandler(t)}finally{this._runningTick=!1}}attachView(t){const i=t;this._views.push(i),i.attachToAppRef(this)}detachView(t){const i=t;nu(this._views,i),i.detachFromAppRef()}_loadComponent(t){this.attachView(t.hostView),this.tick(),this.components.push(t);const i=this._injector.get(Sp,[]);i.push(...this._bootstrapListeners),i.forEach(o=>o(t))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(t=>t()),this._views.slice().forEach(t=>t.destroy())}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(t){return this._destroyListeners.push(t),()=>nu(this._destroyListeners,t)}destroy(){if(this._destroyed)throw new O(406,!1);const t=this._injector;t.destroy&&!t.destroyed&&t.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function nu(e,n){const t=e.indexOf(n);t>-1&&e.splice(t,1)}const Ew=new U("",{providedIn:"root",factory:()=>k(Ni).handleError.bind(void 0)});function jk(){const e=k(ae),n=k(Ni);return t=>e.runOutsideAngular(()=>n.handleError(t))}let Lk=(()=>{class e{constructor(){this.zone=k(ae),this.applicationRef=k(no)}initialize(){this._onMicrotaskEmptySubscription||(this._onMicrotaskEmptySubscription=this.zone.onMicrotaskEmpty.subscribe({next:()=>{this.zone.run(()=>{this.applicationRef.tick()})}}))}ngOnDestroy(){this._onMicrotaskEmptySubscription?.unsubscribe()}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();let zn=(()=>{class e{static{this.__NG_ELEMENT_ID__=Bk}}return e})();function Bk(e){return function Hk(e,n,t){if(yo(e)&&!t){const i=rn(e.index,n);return new da(i,i)}return 47&e.type?new da(n[et],n):null}(St(),I(),16==(16&e))}class Aw{constructor(){}supports(n){return Vc(n)}create(n){return new Wk(n)}}const zk=(e,n)=>n;class Wk{constructor(n){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=n||zk}forEachItem(n){let t;for(t=this._itHead;null!==t;t=t._next)n(t)}forEachOperation(n){let t=this._itHead,i=this._removalsHead,o=0,r=null;for(;t||i;){const s=!i||t&&t.currentIndex{s=this._trackByFn(o,a),null!==t&&Object.is(t.trackById,s)?(i&&(t=this._verifyReinsertion(t,a,s,o)),Object.is(t.item,a)||this._addIdentityChange(t,a)):(t=this._mismatch(t,a,s,o),i=!0),t=t._next,o++}),this.length=o;return this._truncate(t),this.collection=n,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let n;for(n=this._previousItHead=this._itHead;null!==n;n=n._next)n._nextPrevious=n._next;for(n=this._additionsHead;null!==n;n=n._nextAdded)n.previousIndex=n.currentIndex;for(this._additionsHead=this._additionsTail=null,n=this._movesHead;null!==n;n=n._nextMoved)n.previousIndex=n.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(n,t,i,o){let r;return null===n?r=this._itTail:(r=n._prev,this._remove(n)),null!==(n=null===this._unlinkedRecords?null:this._unlinkedRecords.get(i,null))?(Object.is(n.item,t)||this._addIdentityChange(n,t),this._reinsertAfter(n,r,o)):null!==(n=null===this._linkedRecords?null:this._linkedRecords.get(i,o))?(Object.is(n.item,t)||this._addIdentityChange(n,t),this._moveAfter(n,r,o)):n=this._addAfter(new qk(t,i),r,o),n}_verifyReinsertion(n,t,i,o){let r=null===this._unlinkedRecords?null:this._unlinkedRecords.get(i,null);return null!==r?n=this._reinsertAfter(r,n._prev,o):n.currentIndex!=o&&(n.currentIndex=o,this._addToMoves(n,o)),n}_truncate(n){for(;null!==n;){const t=n._next;this._addToRemovals(this._unlink(n)),n=t}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(n,t,i){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(n);const o=n._prevRemoved,r=n._nextRemoved;return null===o?this._removalsHead=r:o._nextRemoved=r,null===r?this._removalsTail=o:r._prevRemoved=o,this._insertAfter(n,t,i),this._addToMoves(n,i),n}_moveAfter(n,t,i){return this._unlink(n),this._insertAfter(n,t,i),this._addToMoves(n,i),n}_addAfter(n,t,i){return this._insertAfter(n,t,i),this._additionsTail=null===this._additionsTail?this._additionsHead=n:this._additionsTail._nextAdded=n,n}_insertAfter(n,t,i){const o=null===t?this._itHead:t._next;return n._next=o,n._prev=t,null===o?this._itTail=n:o._prev=n,null===t?this._itHead=n:t._next=n,null===this._linkedRecords&&(this._linkedRecords=new Rw),this._linkedRecords.put(n),n.currentIndex=i,n}_remove(n){return this._addToRemovals(this._unlink(n))}_unlink(n){null!==this._linkedRecords&&this._linkedRecords.remove(n);const t=n._prev,i=n._next;return null===t?this._itHead=i:t._next=i,null===i?this._itTail=t:i._prev=t,n}_addToMoves(n,t){return n.previousIndex===t||(this._movesTail=null===this._movesTail?this._movesHead=n:this._movesTail._nextMoved=n),n}_addToRemovals(n){return null===this._unlinkedRecords&&(this._unlinkedRecords=new Rw),this._unlinkedRecords.put(n),n.currentIndex=null,n._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=n,n._prevRemoved=null):(n._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=n),n}_addIdentityChange(n,t){return n.item=t,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=n:this._identityChangesTail._nextIdentityChange=n,n}}class qk{constructor(n,t){this.item=n,this.trackById=t,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class Yk{constructor(){this._head=null,this._tail=null}add(n){null===this._head?(this._head=this._tail=n,n._nextDup=null,n._prevDup=null):(this._tail._nextDup=n,n._prevDup=this._tail,n._nextDup=null,this._tail=n)}get(n,t){let i;for(i=this._head;null!==i;i=i._nextDup)if((null===t||t<=i.currentIndex)&&Object.is(i.trackById,n))return i;return null}remove(n){const t=n._prevDup,i=n._nextDup;return null===t?this._head=i:t._nextDup=i,null===i?this._tail=t:i._prevDup=t,null===this._head}}class Rw{constructor(){this.map=new Map}put(n){const t=n.trackById;let i=this.map.get(t);i||(i=new Yk,this.map.set(t,i)),i.add(n)}get(n,t){const o=this.map.get(n);return o?o.get(n,t):null}remove(n){const t=n.trackById;return this.map.get(t).remove(n)&&this.map.delete(t),n}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function xw(e,n,t){const i=e.previousIndex;if(null===i)return i;let o=0;return t&&i{if(t&&t.key===o)this._maybeAddToChanges(t,i),this._appendAfter=t,t=t._next;else{const r=this._getOrCreateRecordForKey(o,i);t=this._insertBeforeOrAppend(t,r)}}),t){t._prev&&(t._prev._next=null),this._removalsHead=t;for(let i=t;null!==i;i=i._nextRemoved)i===this._mapHead&&(this._mapHead=null),this._records.delete(i.key),i._nextRemoved=i._next,i.previousValue=i.currentValue,i.currentValue=null,i._prev=null,i._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(n,t){if(n){const i=n._prev;return t._next=n,t._prev=i,n._prev=t,i&&(i._next=t),n===this._mapHead&&(this._mapHead=t),this._appendAfter=n,n}return this._appendAfter?(this._appendAfter._next=t,t._prev=this._appendAfter):this._mapHead=t,this._appendAfter=t,null}_getOrCreateRecordForKey(n,t){if(this._records.has(n)){const o=this._records.get(n);this._maybeAddToChanges(o,t);const r=o._prev,s=o._next;return r&&(r._next=s),s&&(s._prev=r),o._next=null,o._prev=null,o}const i=new Qk(n);return this._records.set(n,i),i.currentValue=t,this._addToAdditions(i),i}_reset(){if(this.isDirty){let n;for(this._previousMapHead=this._mapHead,n=this._previousMapHead;null!==n;n=n._next)n._nextPrevious=n._next;for(n=this._changesHead;null!==n;n=n._nextChanged)n.previousValue=n.currentValue;for(n=this._additionsHead;null!=n;n=n._nextAdded)n.previousValue=n.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(n,t){Object.is(t,n.currentValue)||(n.previousValue=n.currentValue,n.currentValue=t,this._addToChanges(n))}_addToAdditions(n){null===this._additionsHead?this._additionsHead=this._additionsTail=n:(this._additionsTail._nextAdded=n,this._additionsTail=n)}_addToChanges(n){null===this._changesHead?this._changesHead=this._changesTail=n:(this._changesTail._nextChanged=n,this._changesTail=n)}_forEach(n,t){n instanceof Map?n.forEach(t):Object.keys(n).forEach(i=>t(n[i],i))}}class Qk{constructor(n){this.key=n,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function kw(){return new ru([new Aw])}let ru=(()=>{class e{static{this.\u0275prov=F({token:e,providedIn:"root",factory:kw})}constructor(t){this.factories=t}static create(t,i){if(null!=i){const o=i.factories.slice();t=t.concat(o)}return new e(t)}static extend(t){return{provide:e,useFactory:i=>e.create(t,i||kw()),deps:[[e,new oc,new ic]]}}find(t){const i=this.factories.find(o=>o.supports(t));if(null!=i)return i;throw new O(901,!1)}}return e})();function Fw(){return new Aa([new Pw])}let Aa=(()=>{class e{static{this.\u0275prov=F({token:e,providedIn:"root",factory:Fw})}constructor(t){this.factories=t}static create(t,i){if(i){const o=i.factories.slice();t=t.concat(o)}return new e(t)}static extend(t){return{provide:e,useFactory:i=>e.create(t,i||Fw()),deps:[[e,new oc,new ic]]}}find(t){const i=this.factories.find(o=>o.supports(t));if(i)return i;throw new O(901,!1)}}return e})();const Xk=_w(null,"core",[]);let eF=(()=>{class e{constructor(t){}static{this.\u0275fac=function(i){return new(i||e)(L(no))}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();function Ap(e,n){const t=de(e),i=n.elementInjector||Cc();return new fa(t).create(i,n.projectableNodes,n.hostElement,n.environmentInjector)}let Rp=null;function io(){return Rp}class pF{}const nt=new U("DocumentToken");let xp=(()=>{class e{historyGo(t){throw new Error("Not implemented")}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return k(mF)},providedIn:"platform"})}}return e})();const gF=new U("Location Initialized");let mF=(()=>{class e extends xp{constructor(){super(),this._doc=k(nt),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return io().getBaseHref(this._doc)}onPopState(t){const i=io().getGlobalEventTarget(this._doc,"window");return i.addEventListener("popstate",t,!1),()=>i.removeEventListener("popstate",t)}onHashChange(t){const i=io().getGlobalEventTarget(this._doc,"window");return i.addEventListener("hashchange",t,!1),()=>i.removeEventListener("hashchange",t)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(t){this._location.pathname=t}pushState(t,i,o){this._history.pushState(t,i,o)}replaceState(t,i,o){this._history.replaceState(t,i,o)}forward(){this._history.forward()}back(){this._history.back()}historyGo(t=0){this._history.go(t)}getState(){return this._history.state}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return new e},providedIn:"platform"})}}return e})();function Pp(e,n){if(0==e.length)return n;if(0==n.length)return e;let t=0;return e.endsWith("/")&&t++,n.startsWith("/")&&t++,2==t?e+n.substring(1):1==t?e+n:e+"/"+n}function zw(e){const n=e.match(/#|\?|$/),t=n&&n.index||e.length;return e.slice(0,t-("/"===e[t-1]?1:0))+e.slice(t)}function xi(e){return e&&"?"!==e[0]?"?"+e:e}let xo=(()=>{class e{historyGo(t){throw new Error("Not implemented")}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return k(qw)},providedIn:"root"})}}return e})();const Ww=new U("appBaseHref");let qw=(()=>{class e extends xo{constructor(t,i){super(),this._platformLocation=t,this._removeListenerFns=[],this._baseHref=i??this._platformLocation.getBaseHrefFromDOM()??k(nt).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(t){this._removeListenerFns.push(this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t))}getBaseHref(){return this._baseHref}prepareExternalUrl(t){return Pp(this._baseHref,t)}path(t=!1){const i=this._platformLocation.pathname+xi(this._platformLocation.search),o=this._platformLocation.hash;return o&&t?`${i}${o}`:i}pushState(t,i,o,r){const s=this.prepareExternalUrl(o+xi(r));this._platformLocation.pushState(t,i,s)}replaceState(t,i,o,r){const s=this.prepareExternalUrl(o+xi(r));this._platformLocation.replaceState(t,i,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(t=0){this._platformLocation.historyGo?.(t)}static{this.\u0275fac=function(i){return new(i||e)(L(xp),L(Ww,8))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),vF=(()=>{class e extends xo{constructor(t,i){super(),this._platformLocation=t,this._baseHref="",this._removeListenerFns=[],null!=i&&(this._baseHref=i)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(t){this._removeListenerFns.push(this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t))}getBaseHref(){return this._baseHref}path(t=!1){let i=this._platformLocation.hash;return null==i&&(i="#"),i.length>0?i.substring(1):i}prepareExternalUrl(t){const i=Pp(this._baseHref,t);return i.length>0?"#"+i:i}pushState(t,i,o,r){let s=this.prepareExternalUrl(o+xi(r));0==s.length&&(s=this._platformLocation.pathname),this._platformLocation.pushState(t,i,s)}replaceState(t,i,o,r){let s=this.prepareExternalUrl(o+xi(r));0==s.length&&(s=this._platformLocation.pathname),this._platformLocation.replaceState(t,i,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(t=0){this._platformLocation.historyGo?.(t)}static{this.\u0275fac=function(i){return new(i||e)(L(xp),L(Ww,8))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})(),kp=(()=>{class e{constructor(t){this._subject=new z,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=t;const i=this._locationStrategy.getBaseHref();this._basePath=function bF(e){if(new RegExp("^(https?:)?//").test(e)){const[,t]=e.split(/\/\/[^\/]+/);return t}return e}(zw(Yw(i))),this._locationStrategy.onPopState(o=>{this._subject.emit({url:this.path(!0),pop:!0,state:o.state,type:o.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(t=!1){return this.normalize(this._locationStrategy.path(t))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(t,i=""){return this.path()==this.normalize(t+xi(i))}normalize(t){return e.stripTrailingSlash(function yF(e,n){if(!e||!n.startsWith(e))return n;const t=n.substring(e.length);return""===t||["/",";","?","#"].includes(t[0])?t:n}(this._basePath,Yw(t)))}prepareExternalUrl(t){return t&&"/"!==t[0]&&(t="/"+t),this._locationStrategy.prepareExternalUrl(t)}go(t,i="",o=null){this._locationStrategy.pushState(o,"",t,i),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+xi(i)),o)}replaceState(t,i="",o=null){this._locationStrategy.replaceState(o,"",t,i),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+xi(i)),o)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(t=0){this._locationStrategy.historyGo?.(t)}onUrlChange(t){return this._urlChangeListeners.push(t),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(i=>{this._notifyUrlChangeListeners(i.url,i.state)})),()=>{const i=this._urlChangeListeners.indexOf(t);this._urlChangeListeners.splice(i,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(t="",i){this._urlChangeListeners.forEach(o=>o(t,i))}subscribe(t,i,o){return this._subject.subscribe({next:t,error:i,complete:o})}static{this.normalizeQueryParams=xi}static{this.joinWithSlash=Pp}static{this.stripTrailingSlash=zw}static{this.\u0275fac=function(i){return new(i||e)(L(xo))}}static{this.\u0275prov=F({token:e,factory:function(){return function _F(){return new kp(L(xo))}()},providedIn:"root"})}}return e})();function Yw(e){return e.replace(/\/index.html$/,"")}const Wp=/\s+/,rD=[];let vu=(()=>{class e{constructor(t,i,o,r){this._iterableDiffers=t,this._keyValueDiffers=i,this._ngEl=o,this._renderer=r,this.initialClasses=rD,this.stateMap=new Map}set klass(t){this.initialClasses=null!=t?t.trim().split(Wp):rD}set ngClass(t){this.rawClass="string"==typeof t?t.trim().split(Wp):t}ngDoCheck(){for(const i of this.initialClasses)this._updateState(i,!0);const t=this.rawClass;if(Array.isArray(t)||t instanceof Set)for(const i of t)this._updateState(i,!0);else if(null!=t)for(const i of Object.keys(t))this._updateState(i,!!t[i]);this._applyStateDiff()}_updateState(t,i){const o=this.stateMap.get(t);void 0!==o?(o.enabled!==i&&(o.changed=!0,o.enabled=i),o.touched=!0):this.stateMap.set(t,{enabled:i,changed:!0,touched:!0})}_applyStateDiff(){for(const t of this.stateMap){const i=t[0],o=t[1];o.changed?(this._toggleClass(i,o.enabled),o.changed=!1):o.touched||(o.enabled&&this._toggleClass(i,!1),this.stateMap.delete(i)),o.touched=!1}}_toggleClass(t,i){(t=t.trim()).length>0&&t.split(Wp).forEach(o=>{i?this._renderer.addClass(this._ngEl.nativeElement,o):this._renderer.removeClass(this._ngEl.nativeElement,o)})}static{this.\u0275fac=function(i){return new(i||e)(y(ru),y(Aa),y(we),y(ln))}}static{this.\u0275dir=x({type:e,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0})}}return e})();class i3{constructor(n,t,i,o){this.$implicit=n,this.ngForOf=t,this.index=i,this.count=o}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Nn=(()=>{class e{set ngForOf(t){this._ngForOf=t,this._ngForOfDirty=!0}set ngForTrackBy(t){this._trackByFn=t}get ngForTrackBy(){return this._trackByFn}constructor(t,i,o){this._viewContainer=t,this._template=i,this._differs=o,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForTemplate(t){t&&(this._template=t)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const t=this._ngForOf;!this._differ&&t&&(this._differ=this._differs.find(t).create(this.ngForTrackBy))}if(this._differ){const t=this._differ.diff(this._ngForOf);t&&this._applyChanges(t)}}_applyChanges(t){const i=this._viewContainer;t.forEachOperation((o,r,s)=>{if(null==o.previousIndex)i.createEmbeddedView(this._template,new i3(o.item,this._ngForOf,-1,-1),null===s?void 0:s);else if(null==s)i.remove(null===r?void 0:r);else if(null!==r){const a=i.get(r);i.move(a,s),aD(a,o)}});for(let o=0,r=i.length;o{aD(i.get(o.currentIndex),o)})}static ngTemplateContextGuard(t,i){return!0}static{this.\u0275fac=function(i){return new(i||e)(y(Tn),y(ze),y(ru))}}static{this.\u0275dir=x({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0})}}return e})();function aD(e,n){e.context.$implicit=n.item}let Fi=(()=>{class e{constructor(t,i){this._viewContainer=t,this._context=new o3,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=i}set ngIf(t){this._context.$implicit=this._context.ngIf=t,this._updateView()}set ngIfThen(t){lD("ngIfThen",t),this._thenTemplateRef=t,this._thenViewRef=null,this._updateView()}set ngIfElse(t){lD("ngIfElse",t),this._elseTemplateRef=t,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(t,i){return!0}static{this.\u0275fac=function(i){return new(i||e)(y(Tn),y(ze))}}static{this.\u0275dir=x({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0})}}return e})();class o3{constructor(){this.$implicit=null,this.ngIf=null}}function lD(e,n){if(n&&!n.createEmbeddedView)throw new Error(`${e} must be a TemplateRef, but received '${ct(n)}'.`)}let _u=(()=>{class e{constructor(t,i,o){this._ngEl=t,this._differs=i,this._renderer=o,this._ngStyle=null,this._differ=null}set ngStyle(t){this._ngStyle=t,!this._differ&&t&&(this._differ=this._differs.find(t).create())}ngDoCheck(){if(this._differ){const t=this._differ.diff(this._ngStyle);t&&this._applyChanges(t)}}_setStyle(t,i){const[o,r]=t.split("."),s=-1===o.indexOf("-")?void 0:Ki.DashCase;null!=i?this._renderer.setStyle(this._ngEl.nativeElement,o,r?`${i}${r}`:i,s):this._renderer.removeStyle(this._ngEl.nativeElement,o,s)}_applyChanges(t){t.forEachRemovedItem(i=>this._setStyle(i.key,null)),t.forEachAddedItem(i=>this._setStyle(i.key,i.currentValue)),t.forEachChangedItem(i=>this._setStyle(i.key,i.currentValue))}static{this.\u0275fac=function(i){return new(i||e)(y(we),y(Aa),y(ln))}}static{this.\u0275dir=x({type:e,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0})}}return e})(),O3=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();function fD(e){return"server"===e}let P3=(()=>{class e{static{this.\u0275prov=F({token:e,providedIn:"root",factory:()=>new k3(L(nt),window)})}}return e})();class k3{constructor(n,t){this.document=n,this.window=t,this.offset=()=>[0,0]}setOffset(n){this.offset=Array.isArray(n)?()=>n:n}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(n){this.supportsScrolling()&&this.window.scrollTo(n[0],n[1])}scrollToAnchor(n){if(!this.supportsScrolling())return;const t=function F3(e,n){const t=e.getElementById(n)||e.getElementsByName(n)[0];if(t)return t;if("function"==typeof e.createTreeWalker&&e.body&&"function"==typeof e.body.attachShadow){const i=e.createTreeWalker(e.body,NodeFilter.SHOW_ELEMENT);let o=i.currentNode;for(;o;){const r=o.shadowRoot;if(r){const s=r.getElementById(n)||r.querySelector(`[name="${n}"]`);if(s)return s}o=i.nextNode()}}return null}(this.document,n);t&&(this.scrollToElement(t),t.focus())}setHistoryScrollRestoration(n){this.supportsScrolling()&&(this.window.history.scrollRestoration=n)}scrollToElement(n){const t=n.getBoundingClientRect(),i=t.left+this.window.pageXOffset,o=t.top+this.window.pageYOffset,r=this.offset();this.window.scrollTo(i-r[0],o-r[1])}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}class sj extends pF{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class Xp extends sj{static makeCurrent(){!function hF(e){Rp||(Rp=e)}(new Xp)}onAndCancel(n,t,i){return n.addEventListener(t,i),()=>{n.removeEventListener(t,i)}}dispatchEvent(n,t){n.dispatchEvent(t)}remove(n){n.parentNode&&n.parentNode.removeChild(n)}createElement(n,t){return(t=t||this.getDefaultDocument()).createElement(n)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(n){return n.nodeType===Node.ELEMENT_NODE}isShadowRoot(n){return n instanceof DocumentFragment}getGlobalEventTarget(n,t){return"window"===t?window:"document"===t?n:"body"===t?n.body:null}getBaseHref(n){const t=function aj(){return ka=ka||document.querySelector("base"),ka?ka.getAttribute("href"):null}();return null==t?null:function lj(e){wu=wu||document.createElement("a"),wu.setAttribute("href",e);const n=wu.pathname;return"/"===n.charAt(0)?n:`/${n}`}(t)}resetBaseElement(){ka=null}getUserAgent(){return window.navigator.userAgent}getCookie(n){return function t3(e,n){n=encodeURIComponent(n);for(const t of e.split(";")){const i=t.indexOf("="),[o,r]=-1==i?[t,""]:[t.slice(0,i),t.slice(i+1)];if(o.trim()===n)return decodeURIComponent(r)}return null}(document.cookie,n)}}let wu,ka=null,uj=(()=>{class e{build(){return new XMLHttpRequest}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();const eg=new U("EventManagerPlugins");let vD=(()=>{class e{constructor(t,i){this._zone=i,this._eventNameToPlugin=new Map,t.forEach(o=>{o.manager=this}),this._plugins=t.slice().reverse()}addEventListener(t,i,o){return this._findPluginFor(i).addEventListener(t,i,o)}getZone(){return this._zone}_findPluginFor(t){let i=this._eventNameToPlugin.get(t);if(i)return i;if(i=this._plugins.find(r=>r.supports(t)),!i)throw new O(5101,!1);return this._eventNameToPlugin.set(t,i),i}static{this.\u0275fac=function(i){return new(i||e)(L(eg),L(ae))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();class _D{constructor(n){this._doc=n}}const tg="ng-app-id";let yD=(()=>{class e{constructor(t,i,o,r={}){this.doc=t,this.appId=i,this.nonce=o,this.platformId=r,this.styleRef=new Map,this.hostNodes=new Set,this.styleNodesInDOM=this.collectServerRenderedStyles(),this.platformIsServer=fD(r),this.resetHostNodes()}addStyles(t){for(const i of t)1===this.changeUsageCount(i,1)&&this.onStyleAdded(i)}removeStyles(t){for(const i of t)this.changeUsageCount(i,-1)<=0&&this.onStyleRemoved(i)}ngOnDestroy(){const t=this.styleNodesInDOM;t&&(t.forEach(i=>i.remove()),t.clear());for(const i of this.getAllStyles())this.onStyleRemoved(i);this.resetHostNodes()}addHost(t){this.hostNodes.add(t);for(const i of this.getAllStyles())this.addStyleToHost(t,i)}removeHost(t){this.hostNodes.delete(t)}getAllStyles(){return this.styleRef.keys()}onStyleAdded(t){for(const i of this.hostNodes)this.addStyleToHost(i,t)}onStyleRemoved(t){const i=this.styleRef;i.get(t)?.elements?.forEach(o=>o.remove()),i.delete(t)}collectServerRenderedStyles(){const t=this.doc.head?.querySelectorAll(`style[${tg}="${this.appId}"]`);if(t?.length){const i=new Map;return t.forEach(o=>{null!=o.textContent&&i.set(o.textContent,o)}),i}return null}changeUsageCount(t,i){const o=this.styleRef;if(o.has(t)){const r=o.get(t);return r.usage+=i,r.usage}return o.set(t,{usage:i,elements:[]}),i}getStyleElement(t,i){const o=this.styleNodesInDOM,r=o?.get(i);if(r?.parentNode===t)return o.delete(i),r.removeAttribute(tg),r;{const s=this.doc.createElement("style");return this.nonce&&s.setAttribute("nonce",this.nonce),s.textContent=i,this.platformIsServer&&s.setAttribute(tg,this.appId),s}}addStyleToHost(t,i){const o=this.getStyleElement(t,i);t.appendChild(o);const r=this.styleRef,s=r.get(i)?.elements;s?s.push(o):r.set(i,{elements:[o],usage:1})}resetHostNodes(){const t=this.hostNodes;t.clear(),t.add(this.doc.head)}static{this.\u0275fac=function(i){return new(i||e)(L(nt),L(Sc),L(N_,8),L(Rr))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();const ng={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},ig=/%COMP%/g,pj=new U("RemoveStylesOnCompDestroy",{providedIn:"root",factory:()=>!1});function wD(e,n){return n.map(t=>t.replace(ig,e))}let DD=(()=>{class e{constructor(t,i,o,r,s,a,l,d=null){this.eventManager=t,this.sharedStylesHost=i,this.appId=o,this.removeStylesOnCompDestroy=r,this.doc=s,this.platformId=a,this.ngZone=l,this.nonce=d,this.rendererByCompId=new Map,this.platformIsServer=fD(a),this.defaultRenderer=new og(t,s,l,this.platformIsServer)}createRenderer(t,i){if(!t||!i)return this.defaultRenderer;this.platformIsServer&&i.encapsulation===kn.ShadowDom&&(i={...i,encapsulation:kn.Emulated});const o=this.getOrCreateRenderer(t,i);return o instanceof SD?o.applyToHost(t):o instanceof rg&&o.applyStyles(),o}getOrCreateRenderer(t,i){const o=this.rendererByCompId;let r=o.get(i.id);if(!r){const s=this.doc,a=this.ngZone,l=this.eventManager,d=this.sharedStylesHost,h=this.removeStylesOnCompDestroy,p=this.platformIsServer;switch(i.encapsulation){case kn.Emulated:r=new SD(l,d,i,this.appId,h,s,a,p);break;case kn.ShadowDom:return new _j(l,d,t,i,s,a,this.nonce,p);default:r=new rg(l,d,i,h,s,a,p)}o.set(i.id,r)}return r}ngOnDestroy(){this.rendererByCompId.clear()}static{this.\u0275fac=function(i){return new(i||e)(L(vD),L(yD),L(Sc),L(pj),L(nt),L(Rr),L(ae),L(N_))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();class og{constructor(n,t,i,o){this.eventManager=n,this.doc=t,this.ngZone=i,this.platformIsServer=o,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(n,t){return t?this.doc.createElementNS(ng[t]||t,n):this.doc.createElement(n)}createComment(n){return this.doc.createComment(n)}createText(n){return this.doc.createTextNode(n)}appendChild(n,t){(CD(n)?n.content:n).appendChild(t)}insertBefore(n,t,i){n&&(CD(n)?n.content:n).insertBefore(t,i)}removeChild(n,t){n&&n.removeChild(t)}selectRootElement(n,t){let i="string"==typeof n?this.doc.querySelector(n):n;if(!i)throw new O(-5104,!1);return t||(i.textContent=""),i}parentNode(n){return n.parentNode}nextSibling(n){return n.nextSibling}setAttribute(n,t,i,o){if(o){t=o+":"+t;const r=ng[o];r?n.setAttributeNS(r,t,i):n.setAttribute(t,i)}else n.setAttribute(t,i)}removeAttribute(n,t,i){if(i){const o=ng[i];o?n.removeAttributeNS(o,t):n.removeAttribute(`${i}:${t}`)}else n.removeAttribute(t)}addClass(n,t){n.classList.add(t)}removeClass(n,t){n.classList.remove(t)}setStyle(n,t,i,o){o&(Ki.DashCase|Ki.Important)?n.style.setProperty(t,i,o&Ki.Important?"important":""):n.style[t]=i}removeStyle(n,t,i){i&Ki.DashCase?n.style.removeProperty(t):n.style[t]=""}setProperty(n,t,i){n[t]=i}setValue(n,t){n.nodeValue=t}listen(n,t,i){if("string"==typeof n&&!(n=io().getGlobalEventTarget(this.doc,n)))throw new Error(`Unsupported event target ${n} for event ${t}`);return this.eventManager.addEventListener(n,t,this.decoratePreventDefault(i))}decoratePreventDefault(n){return t=>{if("__ngUnwrap__"===t)return n;!1===(this.platformIsServer?this.ngZone.runGuarded(()=>n(t)):n(t))&&t.preventDefault()}}}function CD(e){return"TEMPLATE"===e.tagName&&void 0!==e.content}class _j extends og{constructor(n,t,i,o,r,s,a,l){super(n,r,s,l),this.sharedStylesHost=t,this.hostEl=i,this.shadowRoot=i.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const d=wD(o.id,o.styles);for(const h of d){const p=document.createElement("style");a&&p.setAttribute("nonce",a),p.textContent=h,this.shadowRoot.appendChild(p)}}nodeOrShadowRoot(n){return n===this.hostEl?this.shadowRoot:n}appendChild(n,t){return super.appendChild(this.nodeOrShadowRoot(n),t)}insertBefore(n,t,i){return super.insertBefore(this.nodeOrShadowRoot(n),t,i)}removeChild(n,t){return super.removeChild(this.nodeOrShadowRoot(n),t)}parentNode(n){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(n)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}}class rg extends og{constructor(n,t,i,o,r,s,a,l){super(n,r,s,a),this.sharedStylesHost=t,this.removeStylesOnCompDestroy=o,this.styles=l?wD(l,i.styles):i.styles}applyStyles(){this.sharedStylesHost.addStyles(this.styles)}destroy(){this.removeStylesOnCompDestroy&&this.sharedStylesHost.removeStyles(this.styles)}}class SD extends rg{constructor(n,t,i,o,r,s,a,l){const d=o+"-"+i.id;super(n,t,i,r,s,a,l,d),this.contentAttr=function gj(e){return"_ngcontent-%COMP%".replace(ig,e)}(d),this.hostAttr=function mj(e){return"_nghost-%COMP%".replace(ig,e)}(d)}applyToHost(n){this.applyStyles(),this.setAttribute(n,this.hostAttr,"")}createElement(n,t){const i=super.createElement(n,t);return super.setAttribute(i,this.contentAttr,""),i}}let yj=(()=>{class e extends _D{constructor(t){super(t)}supports(t){return!0}addEventListener(t,i,o){return t.addEventListener(i,o,!1),()=>this.removeEventListener(t,i,o)}removeEventListener(t,i,o){return t.removeEventListener(i,o)}static{this.\u0275fac=function(i){return new(i||e)(L(nt))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();const ED=["alt","control","meta","shift"],bj={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},wj={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey};let Dj=(()=>{class e extends _D{constructor(t){super(t)}supports(t){return null!=e.parseEventName(t)}addEventListener(t,i,o){const r=e.parseEventName(i),s=e.eventCallback(r.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>io().onAndCancel(t,r.domEventName,s))}static parseEventName(t){const i=t.toLowerCase().split("."),o=i.shift();if(0===i.length||"keydown"!==o&&"keyup"!==o)return null;const r=e._normalizeKey(i.pop());let s="",a=i.indexOf("code");if(a>-1&&(i.splice(a,1),s="code."),ED.forEach(d=>{const h=i.indexOf(d);h>-1&&(i.splice(h,1),s+=d+".")}),s+=r,0!=i.length||0===r.length)return null;const l={};return l.domEventName=o,l.fullKey=s,l}static matchEventFullKeyCode(t,i){let o=bj[t.key]||t.key,r="";return i.indexOf("code.")>-1&&(o=t.code,r="code."),!(null==o||!o)&&(o=o.toLowerCase()," "===o?o="space":"."===o&&(o="dot"),ED.forEach(s=>{s!==o&&(0,wj[s])(t)&&(r+=s+".")}),r+=o,r===i)}static eventCallback(t,i,o){return r=>{e.matchEventFullKeyCode(r,t)&&o.runGuarded(()=>i(r))}}static _normalizeKey(t){return"esc"===t?"escape":t}static{this.\u0275fac=function(i){return new(i||e)(L(nt))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();const Tj=_w(Xk,"browser",[{provide:Rr,useValue:"browser"},{provide:I_,useValue:function Cj(){Xp.makeCurrent()},multi:!0},{provide:nt,useFactory:function Ej(){return function cN(e){Gf=e}(document),document},deps:[]}]),Mj=new U(""),ID=[{provide:tu,useClass:class cj{addToWindow(n){Fe.getAngularTestability=(i,o=!0)=>{const r=n.findTestabilityInTree(i,o);if(null==r)throw new O(5103,!1);return r},Fe.getAllAngularTestabilities=()=>n.getAllTestabilities(),Fe.getAllAngularRootElements=()=>n.getAllRootElements(),Fe.frameworkStabilizers||(Fe.frameworkStabilizers=[]),Fe.frameworkStabilizers.push(i=>{const o=Fe.getAllAngularTestabilities();let r=o.length,s=!1;const a=function(l){s=s||l,r--,0==r&&i(s)};o.forEach(l=>{l.whenStable(a)})})}findTestabilityInTree(n,t,i){return null==t?null:n.getTestability(t)??(i?io().isShadowRoot(t)?this.findTestabilityInTree(n,t.host,!0):this.findTestabilityInTree(n,t.parentElement,!0):null)}},deps:[]},{provide:hw,useClass:bp,deps:[ae,wp,tu]},{provide:bp,useClass:bp,deps:[ae,wp,tu]}],ND=[{provide:Xf,useValue:"root"},{provide:Ni,useFactory:function Sj(){return new Ni},deps:[]},{provide:eg,useClass:yj,multi:!0,deps:[nt,ae,Rr]},{provide:eg,useClass:Dj,multi:!0,deps:[nt]},DD,yD,vD,{provide:hh,useExisting:DD},{provide:class j3{},useClass:uj,deps:[]},[]];let Ij=(()=>{class e{constructor(t){}static withServerTransition(t){return{ngModule:e,providers:[{provide:Sc,useValue:t.appId}]}}static{this.\u0275fac=function(i){return new(i||e)(L(Mj,12))}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({providers:[...ND,...ID],imports:[O3,eF]})}}return e})(),OD=(()=>{class e{constructor(t){this._doc=t}getTitle(){return this._doc.title}setTitle(t){this._doc.title=t||""}static{this.\u0275fac=function(i){return new(i||e)(L(nt))}}static{this.\u0275prov=F({token:e,factory:function(i){let o=null;return o=i?new i:function Oj(){return new OD(L(nt))}(),o},providedIn:"root"})}}return e})();typeof window<"u"&&window;let ag=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(i){let o=null;return o=i?new(i||e):L(xD),o},providedIn:"root"})}}return e})(),xD=(()=>{class e extends ag{constructor(t){super(),this._doc=t}sanitize(t,i){if(null==i)return null;switch(t){case wn.NONE:return i;case wn.HTML:return ai(i,"HTML")?an(i):__(this._doc,String(i)).toString();case wn.STYLE:return ai(i,"Style")?an(i):i;case wn.SCRIPT:if(ai(i,"Script"))return an(i);throw new O(5200,!1);case wn.URL:return ai(i,"URL")?an(i):yc(String(i));case wn.RESOURCE_URL:if(ai(i,"ResourceURL"))return an(i);throw new O(5201,!1);default:throw new O(5202,!1)}}bypassSecurityTrustHtml(t){return function mN(e){return new uN(e)}(t)}bypassSecurityTrustStyle(t){return function vN(e){return new dN(e)}(t)}bypassSecurityTrustScript(t){return function _N(e){return new fN(e)}(t)}bypassSecurityTrustUrl(t){return function yN(e){return new hN(e)}(t)}bypassSecurityTrustResourceUrl(t){return function bN(e){return new pN(e)}(t)}static{this.\u0275fac=function(i){return new(i||e)(L(nt))}}static{this.\u0275prov=F({token:e,factory:function(i){let o=null;return o=i?new i:function Pj(e){return new xD(e.get(nt))}(L(gt)),o},providedIn:"root"})}}return e})();const{isArray:Fj}=Array,{getPrototypeOf:jj,prototype:Lj,keys:Vj}=Object;const{isArray:Hj}=Array;function lg(e){return ue(n=>function $j(e,n){return Hj(n)?e(...n):e(n)}(e,n))}function cg(...e){const n=As(e),t=Al(e),{args:i,keys:o}=function kD(e){if(1===e.length){const n=e[0];if(Fj(n))return{args:n,keys:null};if(function Bj(e){return e&&"object"==typeof e&&jj(e)===Lj}(n)){const t=Vj(n);return{args:t.map(i=>n[i]),keys:t}}}return{args:e,keys:null}}(e);if(0===i.length)return pt([],n);const r=new Te(function Uj(e,n,t=xn){return i=>{jD(n,()=>{const{length:o}=e,r=new Array(o);let s=o,a=o;for(let l=0;l{const d=pt(e[l],n);let h=!1;d.subscribe(ke(i,p=>{r[l]=p,h||(h=!0,a--),a||i.next(t(r.slice()))},()=>{--s||i.complete()}))},i)},i)}}(i,n,o?s=>function FD(e,n){return e.reduce((t,i,o)=>(t[i]=n[o],t),{})}(o,s):xn));return t?r.pipe(lg(t)):r}function jD(e,n,t){e?Di(t,e,n):n()}const Du=$i(e=>function(){e(this),this.name="EmptyError",this.message="no elements in sequence"});function Fa(...e){return function Gj(){return rr(1)}()(pt(e,As(e)))}function LD(e){return new Te(n=>{at(e()).subscribe(n)})}function ja(e,n){const t=ne(e)?e:()=>e,i=o=>o.error(t());return new Te(n?o=>n.schedule(i,0,o):i)}function ug(){return Ue((e,n)=>{let t=null;e._refCount++;const i=ke(n,void 0,void 0,void 0,()=>{if(!e||e._refCount<=0||0<--e._refCount)return void(t=null);const o=e._connection,r=t;t=null,o&&(!r||o===r)&&o.unsubscribe(),n.unsubscribe()});e.subscribe(i),i.closed||(t=e.connect())})}class VD extends Te{constructor(n,t){super(),this.source=n,this.subjectFactory=t,this._subject=null,this._refCount=0,this._connection=null,Is(n)&&(this.lift=n.lift)}_subscribe(n){return this.getSubject().subscribe(n)}getSubject(){const n=this._subject;return(!n||n.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:n}=this;this._subject=this._connection=null,n?.unsubscribe()}connect(){let n=this._connection;if(!n){n=this._connection=new Je;const t=this.getSubject();n.add(this.source.subscribe(ke(t,void 0,()=>{this._teardown(),t.complete()},i=>{this._teardown(),t.error(i)},()=>this._teardown()))),n.closed&&(this._connection=null,n=Je.EMPTY)}return n}refCount(){return ug()(this)}}function Et(e){return e<=0?()=>mn:Ue((n,t)=>{let i=0;n.subscribe(ke(t,o=>{++i<=e&&(t.next(o),e<=i&&t.complete())}))})}function vt(e,n){return Ue((t,i)=>{let o=0;t.subscribe(ke(i,r=>e.call(n,r,o++)&&i.next(r)))})}function Cu(e){return Ue((n,t)=>{let i=!1;n.subscribe(ke(t,o=>{i=!0,t.next(o)},()=>{i||t.next(e),t.complete()}))})}function HD(e=zj){return Ue((n,t)=>{let i=!1;n.subscribe(ke(t,o=>{i=!0,t.next(o)},()=>i?t.complete():t.error(e())))})}function zj(){return new Du}function Po(e,n){const t=arguments.length>=2;return i=>i.pipe(e?vt((o,r)=>e(o,r,i)):xn,Et(1),t?Cu(n):HD(()=>new Du))}function La(e,n){return ne(n)?lt(e,n,1):lt(e,1)}function _t(e,n,t){const i=ne(e)||n||t?{next:e,error:n,complete:t}:e;return i?Ue((o,r)=>{var s;null===(s=i.subscribe)||void 0===s||s.call(i);let a=!0;o.subscribe(ke(r,l=>{var d;null===(d=i.next)||void 0===d||d.call(i,l),r.next(l)},()=>{var l;a=!1,null===(l=i.complete)||void 0===l||l.call(i),r.complete()},l=>{var d;a=!1,null===(d=i.error)||void 0===d||d.call(i,l),r.error(l)},()=>{var l,d;a&&(null===(l=i.unsubscribe)||void 0===l||l.call(i)),null===(d=i.finalize)||void 0===d||d.call(i)}))}):xn}function ko(e){return Ue((n,t)=>{let r,i=null,o=!1;i=n.subscribe(ke(t,void 0,void 0,s=>{r=at(e(s,ko(e)(n))),i?(i.unsubscribe(),i=null,r.subscribe(t)):o=!0})),o&&(i.unsubscribe(),i=null,r.subscribe(t))})}function dg(e){return e<=0?()=>mn:Ue((n,t)=>{let i=[];n.subscribe(ke(t,o=>{i.push(o),e{for(const o of i)t.next(o);t.complete()},void 0,()=>{i=null}))})}function fg(e){return Ue((n,t)=>{try{n.subscribe(t)}finally{t.add(e)}})}function Ze(e){return Ue((n,t)=>{at(e).subscribe(ke(t,()=>t.complete(),mo)),!t.closed&&n.subscribe(t)})}const te="primary",Va=Symbol("RouteTitle");class Zj{constructor(n){this.params=n||{}}has(n){return Object.prototype.hasOwnProperty.call(this.params,n)}get(n){if(this.has(n)){const t=this.params[n];return Array.isArray(t)?t[0]:t}return null}getAll(n){if(this.has(n)){const t=this.params[n];return Array.isArray(t)?t:[t]}return[]}get keys(){return Object.keys(this.params)}}function is(e){return new Zj(e)}function Qj(e,n,t){const i=t.path.split("/");if(i.length>e.length||"full"===t.pathMatch&&(n.hasChildren()||i.lengthi[r]===o)}return e===n}function GD(e){return e.length>0?e[e.length-1]:null}function ro(e){return function kj(e){return!!e&&(e instanceof Te||ne(e.lift)&&ne(e.subscribe))}(e)?e:_a(e)?pt(Promise.resolve(e)):W(e)}const Kj={exact:function qD(e,n,t){if(!Fo(e.segments,n.segments)||!Su(e.segments,n.segments,t)||e.numberOfChildren!==n.numberOfChildren)return!1;for(const i in n.children)if(!e.children[i]||!qD(e.children[i],n.children[i],t))return!1;return!0},subset:YD},zD={exact:function Xj(e,n){return pi(e,n)},subset:function e4(e,n){return Object.keys(n).length<=Object.keys(e).length&&Object.keys(n).every(t=>UD(e[t],n[t]))},ignored:()=>!0};function WD(e,n,t){return Kj[t.paths](e.root,n.root,t.matrixParams)&&zD[t.queryParams](e.queryParams,n.queryParams)&&!("exact"===t.fragment&&e.fragment!==n.fragment)}function YD(e,n,t){return ZD(e,n,n.segments,t)}function ZD(e,n,t,i){if(e.segments.length>t.length){const o=e.segments.slice(0,t.length);return!(!Fo(o,t)||n.hasChildren()||!Su(o,t,i))}if(e.segments.length===t.length){if(!Fo(e.segments,t)||!Su(e.segments,t,i))return!1;for(const o in n.children)if(!e.children[o]||!YD(e.children[o],n.children[o],i))return!1;return!0}{const o=t.slice(0,e.segments.length),r=t.slice(e.segments.length);return!!(Fo(e.segments,o)&&Su(e.segments,o,i)&&e.children[te])&&ZD(e.children[te],n,r,i)}}function Su(e,n,t){return n.every((i,o)=>zD[t](e[o].parameters,i.parameters))}class os{constructor(n=new Oe([],{}),t={},i=null){this.root=n,this.queryParams=t,this.fragment=i}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=is(this.queryParams)),this._queryParamMap}toString(){return i4.serialize(this)}}class Oe{constructor(n,t){this.segments=n,this.children=t,this.parent=null,Object.values(t).forEach(i=>i.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return Eu(this)}}class Ba{constructor(n,t){this.path=n,this.parameters=t}get parameterMap(){return this._parameterMap||(this._parameterMap=is(this.parameters)),this._parameterMap}toString(){return KD(this)}}function Fo(e,n){return e.length===n.length&&e.every((t,i)=>t.path===n[i].path)}let Ha=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return new hg},providedIn:"root"})}}return e})();class hg{parse(n){const t=new p4(n);return new os(t.parseRootSegment(),t.parseQueryParams(),t.parseFragment())}serialize(n){const t=`/${$a(n.root,!0)}`,i=function s4(e){const n=Object.keys(e).map(t=>{const i=e[t];return Array.isArray(i)?i.map(o=>`${Tu(t)}=${Tu(o)}`).join("&"):`${Tu(t)}=${Tu(i)}`}).filter(t=>!!t);return n.length?`?${n.join("&")}`:""}(n.queryParams);return`${t}${i}${"string"==typeof n.fragment?`#${function o4(e){return encodeURI(e)}(n.fragment)}`:""}`}}const i4=new hg;function Eu(e){return e.segments.map(n=>KD(n)).join("/")}function $a(e,n){if(!e.hasChildren())return Eu(e);if(n){const t=e.children[te]?$a(e.children[te],!1):"",i=[];return Object.entries(e.children).forEach(([o,r])=>{o!==te&&i.push(`${o}:${$a(r,!1)}`)}),i.length>0?`${t}(${i.join("//")})`:t}{const t=function n4(e,n){let t=[];return Object.entries(e.children).forEach(([i,o])=>{i===te&&(t=t.concat(n(o,i)))}),Object.entries(e.children).forEach(([i,o])=>{i!==te&&(t=t.concat(n(o,i)))}),t}(e,(i,o)=>o===te?[$a(e.children[te],!1)]:[`${o}:${$a(i,!1)}`]);return 1===Object.keys(e.children).length&&null!=e.children[te]?`${Eu(e)}/${t[0]}`:`${Eu(e)}/(${t.join("//")})`}}function QD(e){return encodeURIComponent(e).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function Tu(e){return QD(e).replace(/%3B/gi,";")}function pg(e){return QD(e).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function Mu(e){return decodeURIComponent(e)}function JD(e){return Mu(e.replace(/\+/g,"%20"))}function KD(e){return`${pg(e.path)}${function r4(e){return Object.keys(e).map(n=>`;${pg(n)}=${pg(e[n])}`).join("")}(e.parameters)}`}const a4=/^[^\/()?;#]+/;function gg(e){const n=e.match(a4);return n?n[0]:""}const l4=/^[^\/()?;=#]+/,u4=/^[^=?&#]+/,f4=/^[^&#]+/;class p4{constructor(n){this.url=n,this.remaining=n}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new Oe([],{}):new Oe([],this.parseChildren())}parseQueryParams(){const n={};if(this.consumeOptional("?"))do{this.parseQueryParam(n)}while(this.consumeOptional("&"));return n}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const n=[];for(this.peekStartsWith("(")||n.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),n.push(this.parseSegment());let t={};this.peekStartsWith("/(")&&(this.capture("/"),t=this.parseParens(!0));let i={};return this.peekStartsWith("(")&&(i=this.parseParens(!1)),(n.length>0||Object.keys(t).length>0)&&(i[te]=new Oe(n,t)),i}parseSegment(){const n=gg(this.remaining);if(""===n&&this.peekStartsWith(";"))throw new O(4009,!1);return this.capture(n),new Ba(Mu(n),this.parseMatrixParams())}parseMatrixParams(){const n={};for(;this.consumeOptional(";");)this.parseParam(n);return n}parseParam(n){const t=function c4(e){const n=e.match(l4);return n?n[0]:""}(this.remaining);if(!t)return;this.capture(t);let i="";if(this.consumeOptional("=")){const o=gg(this.remaining);o&&(i=o,this.capture(i))}n[Mu(t)]=Mu(i)}parseQueryParam(n){const t=function d4(e){const n=e.match(u4);return n?n[0]:""}(this.remaining);if(!t)return;this.capture(t);let i="";if(this.consumeOptional("=")){const s=function h4(e){const n=e.match(f4);return n?n[0]:""}(this.remaining);s&&(i=s,this.capture(i))}const o=JD(t),r=JD(i);if(n.hasOwnProperty(o)){let s=n[o];Array.isArray(s)||(s=[s],n[o]=s),s.push(r)}else n[o]=r}parseParens(n){const t={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const i=gg(this.remaining),o=this.remaining[i.length];if("/"!==o&&")"!==o&&";"!==o)throw new O(4010,!1);let r;i.indexOf(":")>-1?(r=i.slice(0,i.indexOf(":")),this.capture(r),this.capture(":")):n&&(r=te);const s=this.parseChildren();t[r]=1===Object.keys(s).length?s[te]:new Oe([],s),this.consumeOptional("//")}return t}peekStartsWith(n){return this.remaining.startsWith(n)}consumeOptional(n){return!!this.peekStartsWith(n)&&(this.remaining=this.remaining.substring(n.length),!0)}capture(n){if(!this.consumeOptional(n))throw new O(4011,!1)}}function XD(e){return e.segments.length>0?new Oe([],{[te]:e}):e}function eC(e){const n={};for(const i of Object.keys(e.children)){const r=eC(e.children[i]);if(i===te&&0===r.segments.length&&r.hasChildren())for(const[s,a]of Object.entries(r.children))n[s]=a;else(r.segments.length>0||r.hasChildren())&&(n[i]=r)}return function g4(e){if(1===e.numberOfChildren&&e.children[te]){const n=e.children[te];return new Oe(e.segments.concat(n.segments),n.children)}return e}(new Oe(e.segments,n))}function jo(e){return e instanceof os}function tC(e){let n;const o=XD(function t(r){const s={};for(const l of r.children){const d=t(l);s[l.outlet]=d}const a=new Oe(r.url,s);return r===e&&(n=a),a}(e.root));return n??o}function nC(e,n,t,i){let o=e;for(;o.parent;)o=o.parent;if(0===n.length)return mg(o,o,o,t,i);const r=function v4(e){if("string"==typeof e[0]&&1===e.length&&"/"===e[0])return new oC(!0,0,e);let n=0,t=!1;const i=e.reduce((o,r,s)=>{if("object"==typeof r&&null!=r){if(r.outlets){const a={};return Object.entries(r.outlets).forEach(([l,d])=>{a[l]="string"==typeof d?d.split("/"):d}),[...o,{outlets:a}]}if(r.segmentPath)return[...o,r.segmentPath]}return"string"!=typeof r?[...o,r]:0===s?(r.split("/").forEach((a,l)=>{0==l&&"."===a||(0==l&&""===a?t=!0:".."===a?n++:""!=a&&o.push(a))}),o):[...o,r]},[]);return new oC(t,n,i)}(n);if(r.toRoot())return mg(o,o,new Oe([],{}),t,i);const s=function _4(e,n,t){if(e.isAbsolute)return new Nu(n,!0,0);if(!t)return new Nu(n,!1,NaN);if(null===t.parent)return new Nu(t,!0,0);const i=Iu(e.commands[0])?0:1;return function y4(e,n,t){let i=e,o=n,r=t;for(;r>o;){if(r-=o,i=i.parent,!i)throw new O(4005,!1);o=i.segments.length}return new Nu(i,!1,o-r)}(t,t.segments.length-1+i,e.numberOfDoubleDots)}(r,o,e),a=s.processChildren?Ga(s.segmentGroup,s.index,r.commands):rC(s.segmentGroup,s.index,r.commands);return mg(o,s.segmentGroup,a,t,i)}function Iu(e){return"object"==typeof e&&null!=e&&!e.outlets&&!e.segmentPath}function Ua(e){return"object"==typeof e&&null!=e&&e.outlets}function mg(e,n,t,i,o){let s,r={};i&&Object.entries(i).forEach(([l,d])=>{r[l]=Array.isArray(d)?d.map(h=>`${h}`):`${d}`}),s=e===n?t:iC(e,n,t);const a=XD(eC(s));return new os(a,r,o)}function iC(e,n,t){const i={};return Object.entries(e.children).forEach(([o,r])=>{i[o]=r===n?t:iC(r,n,t)}),new Oe(e.segments,i)}class oC{constructor(n,t,i){if(this.isAbsolute=n,this.numberOfDoubleDots=t,this.commands=i,n&&i.length>0&&Iu(i[0]))throw new O(4003,!1);const o=i.find(Ua);if(o&&o!==GD(i))throw new O(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class Nu{constructor(n,t,i){this.segmentGroup=n,this.processChildren=t,this.index=i}}function rC(e,n,t){if(e||(e=new Oe([],{})),0===e.segments.length&&e.hasChildren())return Ga(e,n,t);const i=function w4(e,n,t){let i=0,o=n;const r={match:!1,pathIndex:0,commandIndex:0};for(;o=t.length)return r;const s=e.segments[o],a=t[i];if(Ua(a))break;const l=`${a}`,d=i0&&void 0===l)break;if(l&&d&&"object"==typeof d&&void 0===d.outlets){if(!aC(l,d,s))return r;i+=2}else{if(!aC(l,{},s))return r;i++}o++}return{match:!0,pathIndex:o,commandIndex:i}}(e,n,t),o=t.slice(i.commandIndex);if(i.match&&i.pathIndexr!==te)&&e.children[te]&&1===e.numberOfChildren&&0===e.children[te].segments.length){const r=Ga(e.children[te],n,t);return new Oe(e.segments,r.children)}return Object.entries(i).forEach(([r,s])=>{"string"==typeof s&&(s=[s]),null!==s&&(o[r]=rC(e.children[r],n,s))}),Object.entries(e.children).forEach(([r,s])=>{void 0===i[r]&&(o[r]=s)}),new Oe(e.segments,o)}}function vg(e,n,t){const i=e.segments.slice(0,n);let o=0;for(;o{"string"==typeof i&&(i=[i]),null!==i&&(n[t]=vg(new Oe([],{}),0,i))}),n}function sC(e){const n={};return Object.entries(e).forEach(([t,i])=>n[t]=`${i}`),n}function aC(e,n,t){return e==t.path&&pi(n,t.parameters)}const za="imperative";class gi{constructor(n,t){this.id=n,this.url=t}}class Ou extends gi{constructor(n,t,i="imperative",o=null){super(n,t),this.type=0,this.navigationTrigger=i,this.restoredState=o}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class so extends gi{constructor(n,t,i){super(n,t),this.urlAfterRedirects=i,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class Wa extends gi{constructor(n,t,i,o){super(n,t),this.reason=i,this.code=o,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class rs extends gi{constructor(n,t,i,o){super(n,t),this.reason=i,this.code=o,this.type=16}}class Au extends gi{constructor(n,t,i,o){super(n,t),this.error=i,this.target=o,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class lC extends gi{constructor(n,t,i,o){super(n,t),this.urlAfterRedirects=i,this.state=o,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class C4 extends gi{constructor(n,t,i,o){super(n,t),this.urlAfterRedirects=i,this.state=o,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class S4 extends gi{constructor(n,t,i,o,r){super(n,t),this.urlAfterRedirects=i,this.state=o,this.shouldActivate=r,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class E4 extends gi{constructor(n,t,i,o){super(n,t),this.urlAfterRedirects=i,this.state=o,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class T4 extends gi{constructor(n,t,i,o){super(n,t),this.urlAfterRedirects=i,this.state=o,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class M4{constructor(n){this.route=n,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class I4{constructor(n){this.route=n,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class N4{constructor(n){this.snapshot=n,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class O4{constructor(n){this.snapshot=n,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class A4{constructor(n){this.snapshot=n,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class R4{constructor(n){this.snapshot=n,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class cC{constructor(n,t,i){this.routerEvent=n,this.position=t,this.anchor=i,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class _g{}class yg{constructor(n){this.url=n}}class x4{constructor(){this.outlet=null,this.route=null,this.injector=null,this.children=new qa,this.attachRef=null}}let qa=(()=>{class e{constructor(){this.contexts=new Map}onChildOutletCreated(t,i){const o=this.getOrCreateContext(t);o.outlet=i,this.contexts.set(t,o)}onChildOutletDestroyed(t){const i=this.getContext(t);i&&(i.outlet=null,i.attachRef=null)}onOutletDeactivated(){const t=this.contexts;return this.contexts=new Map,t}onOutletReAttached(t){this.contexts=t}getOrCreateContext(t){let i=this.getContext(t);return i||(i=new x4,this.contexts.set(t,i)),i}getContext(t){return this.contexts.get(t)||null}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();class uC{constructor(n){this._root=n}get root(){return this._root.value}parent(n){const t=this.pathFromRoot(n);return t.length>1?t[t.length-2]:null}children(n){const t=bg(n,this._root);return t?t.children.map(i=>i.value):[]}firstChild(n){const t=bg(n,this._root);return t&&t.children.length>0?t.children[0].value:null}siblings(n){const t=wg(n,this._root);return t.length<2?[]:t[t.length-2].children.map(o=>o.value).filter(o=>o!==n)}pathFromRoot(n){return wg(n,this._root).map(t=>t.value)}}function bg(e,n){if(e===n.value)return n;for(const t of n.children){const i=bg(e,t);if(i)return i}return null}function wg(e,n){if(e===n.value)return[n];for(const t of n.children){const i=wg(e,t);if(i.length)return i.unshift(n),i}return[]}class ji{constructor(n,t){this.value=n,this.children=t}toString(){return`TreeNode(${this.value})`}}function ss(e){const n={};return e&&e.children.forEach(t=>n[t.value.outlet]=t),n}class dC extends uC{constructor(n,t){super(n),this.snapshot=t,Dg(this,n)}toString(){return this.snapshot.toString()}}function fC(e,n){const t=function P4(e,n){const s=new Ru([],{},{},"",{},te,n,null,{});return new pC("",new ji(s,[]))}(0,n),i=new vn([new Ba("",{})]),o=new vn({}),r=new vn({}),s=new vn({}),a=new vn(""),l=new as(i,o,s,a,r,te,n,t.root);return l.snapshot=t.root,new dC(new ji(l,[]),t)}class as{constructor(n,t,i,o,r,s,a,l){this.urlSubject=n,this.paramsSubject=t,this.queryParamsSubject=i,this.fragmentSubject=o,this.dataSubject=r,this.outlet=s,this.component=a,this._futureSnapshot=l,this.title=this.dataSubject?.pipe(ue(d=>d[Va]))??W(void 0),this.url=n,this.params=t,this.queryParams=i,this.fragment=o,this.data=r}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe(ue(n=>is(n)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe(ue(n=>is(n)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function hC(e,n="emptyOnly"){const t=e.pathFromRoot;let i=0;if("always"!==n)for(i=t.length-1;i>=1;){const o=t[i],r=t[i-1];if(o.routeConfig&&""===o.routeConfig.path)i--;else{if(r.component)break;i--}}return function k4(e){return e.reduce((n,t)=>({params:{...n.params,...t.params},data:{...n.data,...t.data},resolve:{...t.data,...n.resolve,...t.routeConfig?.data,...t._resolvedData}}),{params:{},data:{},resolve:{}})}(t.slice(i))}class Ru{get title(){return this.data?.[Va]}constructor(n,t,i,o,r,s,a,l,d){this.url=n,this.params=t,this.queryParams=i,this.fragment=o,this.data=r,this.outlet=s,this.component=a,this.routeConfig=l,this._resolve=d}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=is(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=is(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(i=>i.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class pC extends uC{constructor(n,t){super(t),this.url=n,Dg(this,t)}toString(){return gC(this._root)}}function Dg(e,n){n.value._routerState=e,n.children.forEach(t=>Dg(e,t))}function gC(e){const n=e.children.length>0?` { ${e.children.map(gC).join(", ")} } `:"";return`${e.value}${n}`}function Cg(e){if(e.snapshot){const n=e.snapshot,t=e._futureSnapshot;e.snapshot=t,pi(n.queryParams,t.queryParams)||e.queryParamsSubject.next(t.queryParams),n.fragment!==t.fragment&&e.fragmentSubject.next(t.fragment),pi(n.params,t.params)||e.paramsSubject.next(t.params),function Jj(e,n){if(e.length!==n.length)return!1;for(let t=0;tpi(t.parameters,n[i].parameters))}(e.url,n.url);return t&&!(!e.parent!=!n.parent)&&(!e.parent||Sg(e.parent,n.parent))}let Eg=(()=>{class e{constructor(){this.activated=null,this._activatedRoute=null,this.name=te,this.activateEvents=new z,this.deactivateEvents=new z,this.attachEvents=new z,this.detachEvents=new z,this.parentContexts=k(qa),this.location=k(Tn),this.changeDetector=k(zn),this.environmentInjector=k(Zt),this.inputBinder=k(xu,{optional:!0}),this.supportsBindingToComponentInputs=!0}get activatedComponentRef(){return this.activated}ngOnChanges(t){if(t.name){const{firstChange:i,previousValue:o}=t.name;if(i)return;this.isTrackedInParentContexts(o)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(o)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(t){return this.parentContexts.getContext(t)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const t=this.parentContexts.getContext(this.name);t?.route&&(t.attachRef?this.attach(t.attachRef,t.route):this.activateWith(t.route,t.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new O(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new O(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new O(4012,!1);this.location.detach();const t=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(t.instance),t}attach(t,i){this.activated=t,this._activatedRoute=i,this.location.insert(t.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(t.instance)}deactivate(){if(this.activated){const t=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(t)}}activateWith(t,i){if(this.isActivated)throw new O(4013,!1);this._activatedRoute=t;const o=this.location,s=t.snapshot.component,a=this.parentContexts.getOrCreateContext(this.name).children,l=new F4(t,a,o.injector);this.activated=o.createComponent(s,{index:o.length,injector:l,environmentInjector:i??this.environmentInjector}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275dir=x({type:e,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[Ct]})}}return e})();class F4{constructor(n,t,i){this.route=n,this.childContexts=t,this.parent=i}get(n,t){return n===as?this.route:n===qa?this.childContexts:this.parent.get(n,t)}}const xu=new U("");let mC=(()=>{class e{constructor(){this.outletDataSubscriptions=new Map}bindActivatedRouteToOutletComponent(t){this.unsubscribeFromRouteData(t),this.subscribeToRouteData(t)}unsubscribeFromRouteData(t){this.outletDataSubscriptions.get(t)?.unsubscribe(),this.outletDataSubscriptions.delete(t)}subscribeToRouteData(t){const{activatedRoute:i}=t,o=cg([i.queryParams,i.params,i.data]).pipe(Pn(([r,s,a],l)=>(a={...r,...s,...a},0===l?W(a):Promise.resolve(a)))).subscribe(r=>{if(!t.isActivated||!t.activatedComponentRef||t.activatedRoute!==i||null===i.component)return void this.unsubscribeFromRouteData(t);const s=function fF(e){const n=de(e);if(!n)return null;const t=new fa(n);return{get selector(){return t.selector},get type(){return t.componentType},get inputs(){return t.inputs},get outputs(){return t.outputs},get ngContentSelectors(){return t.ngContentSelectors},get isStandalone(){return n.standalone},get isSignal(){return n.signals}}}(i.component);if(s)for(const{templateName:a}of s.inputs)t.activatedComponentRef.setInput(a,r[a]);else this.unsubscribeFromRouteData(t)});this.outletDataSubscriptions.set(t,o)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();function Ya(e,n,t){if(t&&e.shouldReuseRoute(n.value,t.value.snapshot)){const i=t.value;i._futureSnapshot=n.value;const o=function L4(e,n,t){return n.children.map(i=>{for(const o of t.children)if(e.shouldReuseRoute(i.value,o.value.snapshot))return Ya(e,i,o);return Ya(e,i)})}(e,n,t);return new ji(i,o)}{if(e.shouldAttach(n.value)){const r=e.retrieve(n.value);if(null!==r){const s=r.route;return s.value._futureSnapshot=n.value,s.children=n.children.map(a=>Ya(e,a)),s}}const i=function V4(e){return new as(new vn(e.url),new vn(e.params),new vn(e.queryParams),new vn(e.fragment),new vn(e.data),e.outlet,e.component,e)}(n.value),o=n.children.map(r=>Ya(e,r));return new ji(i,o)}}const Tg="ngNavigationCancelingError";function vC(e,n){const{redirectTo:t,navigationBehaviorOptions:i}=jo(n)?{redirectTo:n,navigationBehaviorOptions:void 0}:n,o=_C(!1,0,n);return o.url=t,o.navigationBehaviorOptions=i,o}function _C(e,n,t){const i=new Error("NavigationCancelingError: "+(e||""));return i[Tg]=!0,i.cancellationCode=n,t&&(i.url=t),i}function yC(e){return e&&e[Tg]}let bC=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["ng-component"]],standalone:!0,features:[En],decls:1,vars:0,template:function(i,o){1&i&&m(0,"router-outlet")},dependencies:[Eg],encapsulation:2})}}return e})();function Mg(e){const n=e.children&&e.children.map(Mg),t=n?{...e,children:n}:{...e};return!t.component&&!t.loadComponent&&(n||t.loadChildren)&&t.outlet&&t.outlet!==te&&(t.component=bC),t}function Yn(e){return e.outlet||te}function Za(e){if(!e)return null;if(e.routeConfig?._injector)return e.routeConfig._injector;for(let n=e.parent;n;n=n.parent){const t=n.routeConfig;if(t?._loadedInjector)return t._loadedInjector;if(t?._injector)return t._injector}return null}class q4{constructor(n,t,i,o,r){this.routeReuseStrategy=n,this.futureState=t,this.currState=i,this.forwardEvent=o,this.inputBindingEnabled=r}activate(n){const t=this.futureState._root,i=this.currState?this.currState._root:null;this.deactivateChildRoutes(t,i,n),Cg(this.futureState.root),this.activateChildRoutes(t,i,n)}deactivateChildRoutes(n,t,i){const o=ss(t);n.children.forEach(r=>{const s=r.value.outlet;this.deactivateRoutes(r,o[s],i),delete o[s]}),Object.values(o).forEach(r=>{this.deactivateRouteAndItsChildren(r,i)})}deactivateRoutes(n,t,i){const o=n.value,r=t?t.value:null;if(o===r)if(o.component){const s=i.getContext(o.outlet);s&&this.deactivateChildRoutes(n,t,s.children)}else this.deactivateChildRoutes(n,t,i);else r&&this.deactivateRouteAndItsChildren(t,i)}deactivateRouteAndItsChildren(n,t){n.value.component&&this.routeReuseStrategy.shouldDetach(n.value.snapshot)?this.detachAndStoreRouteSubtree(n,t):this.deactivateRouteAndOutlet(n,t)}detachAndStoreRouteSubtree(n,t){const i=t.getContext(n.value.outlet),o=i&&n.value.component?i.children:t,r=ss(n);for(const s of Object.keys(r))this.deactivateRouteAndItsChildren(r[s],o);if(i&&i.outlet){const s=i.outlet.detach(),a=i.children.onOutletDeactivated();this.routeReuseStrategy.store(n.value.snapshot,{componentRef:s,route:n,contexts:a})}}deactivateRouteAndOutlet(n,t){const i=t.getContext(n.value.outlet),o=i&&n.value.component?i.children:t,r=ss(n);for(const s of Object.keys(r))this.deactivateRouteAndItsChildren(r[s],o);i&&(i.outlet&&(i.outlet.deactivate(),i.children.onOutletDeactivated()),i.attachRef=null,i.route=null)}activateChildRoutes(n,t,i){const o=ss(t);n.children.forEach(r=>{this.activateRoutes(r,o[r.value.outlet],i),this.forwardEvent(new R4(r.value.snapshot))}),n.children.length&&this.forwardEvent(new O4(n.value.snapshot))}activateRoutes(n,t,i){const o=n.value,r=t?t.value:null;if(Cg(o),o===r)if(o.component){const s=i.getOrCreateContext(o.outlet);this.activateChildRoutes(n,t,s.children)}else this.activateChildRoutes(n,t,i);else if(o.component){const s=i.getOrCreateContext(o.outlet);if(this.routeReuseStrategy.shouldAttach(o.snapshot)){const a=this.routeReuseStrategy.retrieve(o.snapshot);this.routeReuseStrategy.store(o.snapshot,null),s.children.onOutletReAttached(a.contexts),s.attachRef=a.componentRef,s.route=a.route.value,s.outlet&&s.outlet.attach(a.componentRef,a.route.value),Cg(a.route.value),this.activateChildRoutes(n,null,s.children)}else{const a=Za(o.snapshot);s.attachRef=null,s.route=o,s.injector=a,s.outlet&&s.outlet.activateWith(o,s.injector),this.activateChildRoutes(n,null,s.children)}}else this.activateChildRoutes(n,null,i)}}class wC{constructor(n){this.path=n,this.route=this.path[this.path.length-1]}}class Pu{constructor(n,t){this.component=n,this.route=t}}function Y4(e,n,t){const i=e._root;return Qa(i,n?n._root:null,t,[i.value])}function ls(e,n){const t=Symbol(),i=n.get(e,t);return i===t?"function"!=typeof e||function EM(e){return null!==Pl(e)}(e)?n.get(e):e:i}function Qa(e,n,t,i,o={canDeactivateChecks:[],canActivateChecks:[]}){const r=ss(n);return e.children.forEach(s=>{(function Q4(e,n,t,i,o={canDeactivateChecks:[],canActivateChecks:[]}){const r=e.value,s=n?n.value:null,a=t?t.getContext(e.value.outlet):null;if(s&&r.routeConfig===s.routeConfig){const l=function J4(e,n,t){if("function"==typeof t)return t(e,n);switch(t){case"pathParamsChange":return!Fo(e.url,n.url);case"pathParamsOrQueryParamsChange":return!Fo(e.url,n.url)||!pi(e.queryParams,n.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Sg(e,n)||!pi(e.queryParams,n.queryParams);default:return!Sg(e,n)}}(s,r,r.routeConfig.runGuardsAndResolvers);l?o.canActivateChecks.push(new wC(i)):(r.data=s.data,r._resolvedData=s._resolvedData),Qa(e,n,r.component?a?a.children:null:t,i,o),l&&a&&a.outlet&&a.outlet.isActivated&&o.canDeactivateChecks.push(new Pu(a.outlet.component,s))}else s&&Ja(n,a,o),o.canActivateChecks.push(new wC(i)),Qa(e,null,r.component?a?a.children:null:t,i,o)})(s,r[s.value.outlet],t,i.concat([s.value]),o),delete r[s.value.outlet]}),Object.entries(r).forEach(([s,a])=>Ja(a,t.getContext(s),o)),o}function Ja(e,n,t){const i=ss(e),o=e.value;Object.entries(i).forEach(([r,s])=>{Ja(s,o.component?n?n.children.getContext(r):null:n,t)}),t.canDeactivateChecks.push(new Pu(o.component&&n&&n.outlet&&n.outlet.isActivated?n.outlet.component:null,o))}function Ka(e){return"function"==typeof e}function DC(e){return e instanceof Du||"EmptyError"===e?.name}const ku=Symbol("INITIAL_VALUE");function cs(){return Pn(e=>cg(e.map(n=>n.pipe(Et(1),function BD(...e){const n=As(e);return Ue((t,i)=>{(n?Fa(e,t,n):Fa(e,t)).subscribe(i)})}(ku)))).pipe(ue(n=>{for(const t of n)if(!0!==t){if(t===ku)return ku;if(!1===t||t instanceof os)return t}return!0}),vt(n=>n!==ku),Et(1)))}function CC(e){return function Sl(...e){return El(e)}(_t(n=>{if(jo(n))throw vC(0,n)}),ue(n=>!0===n))}class Fu{constructor(n){this.segmentGroup=n||null}}class SC{constructor(n){this.urlTree=n}}function us(e){return ja(new Fu(e))}function EC(e){return ja(new SC(e))}class vL{constructor(n,t){this.urlSerializer=n,this.urlTree=t}noMatchError(n){return new O(4002,!1)}lineralizeSegments(n,t){let i=[],o=t.root;for(;;){if(i=i.concat(o.segments),0===o.numberOfChildren)return W(i);if(o.numberOfChildren>1||!o.children[te])return ja(new O(4e3,!1));o=o.children[te]}}applyRedirectCommands(n,t,i){return this.applyRedirectCreateUrlTree(t,this.urlSerializer.parse(t),n,i)}applyRedirectCreateUrlTree(n,t,i,o){const r=this.createSegmentGroup(n,t.root,i,o);return new os(r,this.createQueryParams(t.queryParams,this.urlTree.queryParams),t.fragment)}createQueryParams(n,t){const i={};return Object.entries(n).forEach(([o,r])=>{if("string"==typeof r&&r.startsWith(":")){const a=r.substring(1);i[o]=t[a]}else i[o]=r}),i}createSegmentGroup(n,t,i,o){const r=this.createSegments(n,t.segments,i,o);let s={};return Object.entries(t.children).forEach(([a,l])=>{s[a]=this.createSegmentGroup(n,l,i,o)}),new Oe(r,s)}createSegments(n,t,i,o){return t.map(r=>r.path.startsWith(":")?this.findPosParam(n,r,o):this.findOrReturn(r,i))}findPosParam(n,t,i){const o=i[t.path.substring(1)];if(!o)throw new O(4001,!1);return o}findOrReturn(n,t){let i=0;for(const o of t){if(o.path===n.path)return t.splice(i),o;i++}return n}}const Ig={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function _L(e,n,t,i,o){const r=Ng(e,n,t);return r.matched?(i=function H4(e,n){return e.providers&&!e._injector&&(e._injector=tp(e.providers,n,`Route: ${e.path}`)),e._injector??n}(n,i),function pL(e,n,t,i){const o=n.canMatch;return o&&0!==o.length?W(o.map(s=>{const a=ls(s,e);return ro(function iL(e){return e&&Ka(e.canMatch)}(a)?a.canMatch(n,t):e.runInContext(()=>a(n,t)))})).pipe(cs(),CC()):W(!0)}(i,n,t).pipe(ue(s=>!0===s?r:{...Ig}))):W(r)}function Ng(e,n,t){if(""===n.path)return"full"===n.pathMatch&&(e.hasChildren()||t.length>0)?{...Ig}:{matched:!0,consumedSegments:[],remainingSegments:t,parameters:{},positionalParamSegments:{}};const o=(n.matcher||Qj)(t,e,n);if(!o)return{...Ig};const r={};Object.entries(o.posParams??{}).forEach(([a,l])=>{r[a]=l.path});const s=o.consumed.length>0?{...r,...o.consumed[o.consumed.length-1].parameters}:r;return{matched:!0,consumedSegments:o.consumed,remainingSegments:t.slice(o.consumed.length),parameters:s,positionalParamSegments:o.posParams??{}}}function TC(e,n,t,i){return t.length>0&&function wL(e,n,t){return t.some(i=>ju(e,n,i)&&Yn(i)!==te)}(e,t,i)?{segmentGroup:new Oe(n,bL(i,new Oe(t,e.children))),slicedSegments:[]}:0===t.length&&function DL(e,n,t){return t.some(i=>ju(e,n,i))}(e,t,i)?{segmentGroup:new Oe(e.segments,yL(e,0,t,i,e.children)),slicedSegments:t}:{segmentGroup:new Oe(e.segments,e.children),slicedSegments:t}}function yL(e,n,t,i,o){const r={};for(const s of i)if(ju(e,t,s)&&!o[Yn(s)]){const a=new Oe([],{});r[Yn(s)]=a}return{...o,...r}}function bL(e,n){const t={};t[te]=n;for(const i of e)if(""===i.path&&Yn(i)!==te){const o=new Oe([],{});t[Yn(i)]=o}return t}function ju(e,n,t){return(!(e.hasChildren()||n.length>0)||"full"!==t.pathMatch)&&""===t.path}class TL{constructor(n,t,i,o,r,s,a){this.injector=n,this.configLoader=t,this.rootComponentType=i,this.config=o,this.urlTree=r,this.paramsInheritanceStrategy=s,this.urlSerializer=a,this.allowRedirects=!0,this.applyRedirects=new vL(this.urlSerializer,this.urlTree)}noMatchError(n){return new O(4002,!1)}recognize(){const n=TC(this.urlTree.root,[],[],this.config).segmentGroup;return this.processSegmentGroup(this.injector,this.config,n,te).pipe(ko(t=>{if(t instanceof SC)return this.allowRedirects=!1,this.urlTree=t.urlTree,this.match(t.urlTree);throw t instanceof Fu?this.noMatchError(t):t}),ue(t=>{const i=new Ru([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},te,this.rootComponentType,null,{}),o=new ji(i,t),r=new pC("",o),s=function m4(e,n,t=null,i=null){return nC(tC(e),n,t,i)}(i,[],this.urlTree.queryParams,this.urlTree.fragment);return s.queryParams=this.urlTree.queryParams,r.url=this.urlSerializer.serialize(s),this.inheritParamsAndData(r._root),{state:r,tree:s}}))}match(n){return this.processSegmentGroup(this.injector,this.config,n.root,te).pipe(ko(i=>{throw i instanceof Fu?this.noMatchError(i):i}))}inheritParamsAndData(n){const t=n.value,i=hC(t,this.paramsInheritanceStrategy);t.params=Object.freeze(i.params),t.data=Object.freeze(i.data),n.children.forEach(o=>this.inheritParamsAndData(o))}processSegmentGroup(n,t,i,o){return 0===i.segments.length&&i.hasChildren()?this.processChildren(n,t,i):this.processSegment(n,t,i,i.segments,o,!0)}processChildren(n,t,i){const o=[];for(const r of Object.keys(i.children))"primary"===r?o.unshift(r):o.push(r);return pt(o).pipe(La(r=>{const s=i.children[r],a=function z4(e,n){const t=e.filter(i=>Yn(i)===n);return t.push(...e.filter(i=>Yn(i)!==n)),t}(t,r);return this.processSegmentGroup(n,a,s,r)}),function qj(e,n){return Ue(function Wj(e,n,t,i,o){return(r,s)=>{let a=t,l=n,d=0;r.subscribe(ke(s,h=>{const p=d++;l=a?e(l,h,p):(a=!0,h),i&&s.next(l)},o&&(()=>{a&&s.next(l),s.complete()})))}}(e,n,arguments.length>=2,!0))}((r,s)=>(r.push(...s),r)),Cu(null),function Yj(e,n){const t=arguments.length>=2;return i=>i.pipe(e?vt((o,r)=>e(o,r,i)):xn,dg(1),t?Cu(n):HD(()=>new Du))}(),lt(r=>{if(null===r)return us(i);const s=MC(r);return function ML(e){e.sort((n,t)=>n.value.outlet===te?-1:t.value.outlet===te?1:n.value.outlet.localeCompare(t.value.outlet))}(s),W(s)}))}processSegment(n,t,i,o,r,s){return pt(t).pipe(La(a=>this.processSegmentAgainstRoute(a._injector??n,t,a,i,o,r,s).pipe(ko(l=>{if(l instanceof Fu)return W(null);throw l}))),Po(a=>!!a),ko(a=>{if(DC(a))return function SL(e,n,t){return 0===n.length&&!e.children[t]}(i,o,r)?W([]):us(i);throw a}))}processSegmentAgainstRoute(n,t,i,o,r,s,a){return function CL(e,n,t,i){return!!(Yn(e)===i||i!==te&&ju(n,t,e))&&("**"===e.path||Ng(n,e,t).matched)}(i,o,r,s)?void 0===i.redirectTo?this.matchSegmentAgainstRoute(n,o,i,r,s,a):a&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(n,o,t,i,r,s):us(o):us(o)}expandSegmentAgainstRouteUsingRedirect(n,t,i,o,r,s){return"**"===o.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(n,i,o,s):this.expandRegularSegmentAgainstRouteUsingRedirect(n,t,i,o,r,s)}expandWildCardWithParamsAgainstRouteUsingRedirect(n,t,i,o){const r=this.applyRedirects.applyRedirectCommands([],i.redirectTo,{});return i.redirectTo.startsWith("/")?EC(r):this.applyRedirects.lineralizeSegments(i,r).pipe(lt(s=>{const a=new Oe(s,{});return this.processSegment(n,t,a,s,o,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(n,t,i,o,r,s){const{matched:a,consumedSegments:l,remainingSegments:d,positionalParamSegments:h}=Ng(t,o,r);if(!a)return us(t);const p=this.applyRedirects.applyRedirectCommands(l,o.redirectTo,h);return o.redirectTo.startsWith("/")?EC(p):this.applyRedirects.lineralizeSegments(o,p).pipe(lt(g=>this.processSegment(n,i,t,g.concat(d),s,!1)))}matchSegmentAgainstRoute(n,t,i,o,r,s){let a;if("**"===i.path){const l=o.length>0?GD(o).parameters:{};a=W({snapshot:new Ru(o,l,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,IC(i),Yn(i),i.component??i._loadedComponent??null,i,NC(i)),consumedSegments:[],remainingSegments:[]}),t.children={}}else a=_L(t,i,o,n).pipe(ue(({matched:l,consumedSegments:d,remainingSegments:h,parameters:p})=>l?{snapshot:new Ru(d,p,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,IC(i),Yn(i),i.component??i._loadedComponent??null,i,NC(i)),consumedSegments:d,remainingSegments:h}:null));return a.pipe(Pn(l=>null===l?us(t):this.getChildConfig(n=i._injector??n,i,o).pipe(Pn(({routes:d})=>{const h=i._loadedInjector??n,{snapshot:p,consumedSegments:g,remainingSegments:v}=l,{segmentGroup:_,slicedSegments:b}=TC(t,g,v,d);if(0===b.length&&_.hasChildren())return this.processChildren(h,d,_).pipe(ue(E=>null===E?null:[new ji(p,E)]));if(0===d.length&&0===b.length)return W([new ji(p,[])]);const C=Yn(i)===r;return this.processSegment(h,d,_,b,C?te:r,!0).pipe(ue(E=>[new ji(p,E)]))}))))}getChildConfig(n,t,i){return t.children?W({routes:t.children,injector:n}):t.loadChildren?void 0!==t._loadedRoutes?W({routes:t._loadedRoutes,injector:t._loadedInjector}):function hL(e,n,t,i){const o=n.canLoad;return void 0===o||0===o.length?W(!0):W(o.map(s=>{const a=ls(s,e);return ro(function X4(e){return e&&Ka(e.canLoad)}(a)?a.canLoad(n,t):e.runInContext(()=>a(n,t)))})).pipe(cs(),CC())}(n,t,i).pipe(lt(o=>o?this.configLoader.loadChildren(n,t).pipe(_t(r=>{t._loadedRoutes=r.routes,t._loadedInjector=r.injector})):function mL(e){return ja(_C(!1,3))}())):W({routes:[],injector:n})}}function IL(e){const n=e.value.routeConfig;return n&&""===n.path}function MC(e){const n=[],t=new Set;for(const i of e){if(!IL(i)){n.push(i);continue}const o=n.find(r=>i.value.routeConfig===r.value.routeConfig);void 0!==o?(o.children.push(...i.children),t.add(o)):n.push(i)}for(const i of t){const o=MC(i.children);n.push(new ji(i.value,o))}return n.filter(i=>!t.has(i))}function IC(e){return e.data||{}}function NC(e){return e.resolve||{}}function OL(e,n){return lt(t=>{const{targetSnapshot:i,guards:{canActivateChecks:o}}=t;if(!o.length)return W(t);let r=0;return pt(o).pipe(La(s=>function AL(e,n,t,i){const o=e.routeConfig,r=e._resolve;return void 0!==o?.title&&!OC(o)&&(r[Va]=o.title),function RL(e,n,t,i){const o=function xL(e){return[...Object.keys(e),...Object.getOwnPropertySymbols(e)]}(e);if(0===o.length)return W({});const r={};return pt(o).pipe(lt(s=>function PL(e,n,t,i){const o=Za(n)??i,r=ls(e,o);return ro(r.resolve?r.resolve(n,t):o.runInContext(()=>r(n,t)))}(e[s],n,t,i).pipe(Po(),_t(a=>{r[s]=a}))),dg(1),function $D(e){return ue(()=>e)}(r),ko(s=>DC(s)?mn:ja(s)))}(r,e,n,i).pipe(ue(s=>(e._resolvedData=s,e.data=hC(e,t).resolve,o&&OC(o)&&(e.data[Va]=o.title),null)))}(s.route,i,e,n)),_t(()=>r++),dg(1),lt(s=>r===o.length?W(t):mn))})}function OC(e){return"string"==typeof e.title||null===e.title}function Og(e){return Pn(n=>{const t=e(n);return t?pt(t).pipe(ue(()=>n)):W(n)})}const ds=new U("ROUTES");let Ag=(()=>{class e{constructor(){this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap,this.compiler=k(cw)}loadComponent(t){if(this.componentLoaders.get(t))return this.componentLoaders.get(t);if(t._loadedComponent)return W(t._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(t);const i=ro(t.loadComponent()).pipe(ue(AC),_t(r=>{this.onLoadEndListener&&this.onLoadEndListener(t),t._loadedComponent=r}),fg(()=>{this.componentLoaders.delete(t)})),o=new VD(i,()=>new ye).pipe(ug());return this.componentLoaders.set(t,o),o}loadChildren(t,i){if(this.childrenLoaders.get(i))return this.childrenLoaders.get(i);if(i._loadedRoutes)return W({routes:i._loadedRoutes,injector:i._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(i);const r=function kL(e,n,t,i){return ro(e.loadChildren()).pipe(ue(AC),lt(o=>o instanceof vb||Array.isArray(o)?W(o):pt(n.compileModuleAsync(o))),ue(o=>{i&&i(e);let r,s,a=!1;return Array.isArray(o)?(s=o,!0):(r=o.create(t).injector,s=r.get(ds,[],{optional:!0,self:!0}).flat()),{routes:s.map(Mg),injector:r}}))}(i,this.compiler,t,this.onLoadEndListener).pipe(fg(()=>{this.childrenLoaders.delete(i)})),s=new VD(r,()=>new ye).pipe(ug());return this.childrenLoaders.set(i,s),s}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function AC(e){return function FL(e){return e&&"object"==typeof e&&"default"in e}(e)?e.default:e}let Lu=(()=>{class e{get hasRequestedNavigation(){return 0!==this.navigationId}constructor(){this.currentNavigation=null,this.currentTransition=null,this.lastSuccessfulNavigation=null,this.events=new ye,this.transitionAbortSubject=new ye,this.configLoader=k(Ag),this.environmentInjector=k(Zt),this.urlSerializer=k(Ha),this.rootContexts=k(qa),this.inputBindingEnabled=null!==k(xu,{optional:!0}),this.navigationId=0,this.afterPreactivation=()=>W(void 0),this.rootComponentType=null,this.configLoader.onLoadEndListener=o=>this.events.next(new I4(o)),this.configLoader.onLoadStartListener=o=>this.events.next(new M4(o))}complete(){this.transitions?.complete()}handleNavigationRequest(t){const i=++this.navigationId;this.transitions?.next({...this.transitions.value,...t,id:i})}setupNavigations(t,i,o){return this.transitions=new vn({id:0,currentUrlTree:i,currentRawUrl:i,currentBrowserUrl:i,extractedUrl:t.urlHandlingStrategy.extract(i),urlAfterRedirects:t.urlHandlingStrategy.extract(i),rawUrl:i,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:za,restoredState:null,currentSnapshot:o.snapshot,targetSnapshot:null,currentRouterState:o,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.transitions.pipe(vt(r=>0!==r.id),ue(r=>({...r,extractedUrl:t.urlHandlingStrategy.extract(r.rawUrl)})),Pn(r=>{this.currentTransition=r;let s=!1,a=!1;return W(r).pipe(_t(l=>{this.currentNavigation={id:l.id,initialUrl:l.rawUrl,extractedUrl:l.extractedUrl,trigger:l.source,extras:l.extras,previousNavigation:this.lastSuccessfulNavigation?{...this.lastSuccessfulNavigation,previousNavigation:null}:null}}),Pn(l=>{const d=l.currentBrowserUrl.toString(),h=!t.navigated||l.extractedUrl.toString()!==d||d!==l.currentUrlTree.toString();if(!h&&"reload"!==(l.extras.onSameUrlNavigation??t.onSameUrlNavigation)){const g="";return this.events.next(new rs(l.id,this.urlSerializer.serialize(l.rawUrl),g,0)),l.resolve(null),mn}if(t.urlHandlingStrategy.shouldProcessUrl(l.rawUrl))return W(l).pipe(Pn(g=>{const v=this.transitions?.getValue();return this.events.next(new Ou(g.id,this.urlSerializer.serialize(g.extractedUrl),g.source,g.restoredState)),v!==this.transitions?.getValue()?mn:Promise.resolve(g)}),function NL(e,n,t,i,o,r){return lt(s=>function EL(e,n,t,i,o,r,s="emptyOnly"){return new TL(e,n,t,i,o,s,r).recognize()}(e,n,t,i,s.extractedUrl,o,r).pipe(ue(({state:a,tree:l})=>({...s,targetSnapshot:a,urlAfterRedirects:l}))))}(this.environmentInjector,this.configLoader,this.rootComponentType,t.config,this.urlSerializer,t.paramsInheritanceStrategy),_t(g=>{r.targetSnapshot=g.targetSnapshot,r.urlAfterRedirects=g.urlAfterRedirects,this.currentNavigation={...this.currentNavigation,finalUrl:g.urlAfterRedirects};const v=new lC(g.id,this.urlSerializer.serialize(g.extractedUrl),this.urlSerializer.serialize(g.urlAfterRedirects),g.targetSnapshot);this.events.next(v)}));if(h&&t.urlHandlingStrategy.shouldProcessUrl(l.currentRawUrl)){const{id:g,extractedUrl:v,source:_,restoredState:b,extras:C}=l,E=new Ou(g,this.urlSerializer.serialize(v),_,b);this.events.next(E);const D=fC(0,this.rootComponentType).snapshot;return this.currentTransition=r={...l,targetSnapshot:D,urlAfterRedirects:v,extras:{...C,skipLocationChange:!1,replaceUrl:!1}},W(r)}{const g="";return this.events.next(new rs(l.id,this.urlSerializer.serialize(l.extractedUrl),g,1)),l.resolve(null),mn}}),_t(l=>{const d=new C4(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects),l.targetSnapshot);this.events.next(d)}),ue(l=>(this.currentTransition=r={...l,guards:Y4(l.targetSnapshot,l.currentSnapshot,this.rootContexts)},r)),function rL(e,n){return lt(t=>{const{targetSnapshot:i,currentSnapshot:o,guards:{canActivateChecks:r,canDeactivateChecks:s}}=t;return 0===s.length&&0===r.length?W({...t,guardsResult:!0}):function sL(e,n,t,i){return pt(e).pipe(lt(o=>function fL(e,n,t,i,o){const r=n&&n.routeConfig?n.routeConfig.canDeactivate:null;return r&&0!==r.length?W(r.map(a=>{const l=Za(n)??o,d=ls(a,l);return ro(function nL(e){return e&&Ka(e.canDeactivate)}(d)?d.canDeactivate(e,n,t,i):l.runInContext(()=>d(e,n,t,i))).pipe(Po())})).pipe(cs()):W(!0)}(o.component,o.route,t,n,i)),Po(o=>!0!==o,!0))}(s,i,o,e).pipe(lt(a=>a&&function K4(e){return"boolean"==typeof e}(a)?function aL(e,n,t,i){return pt(n).pipe(La(o=>Fa(function cL(e,n){return null!==e&&n&&n(new N4(e)),W(!0)}(o.route.parent,i),function lL(e,n){return null!==e&&n&&n(new A4(e)),W(!0)}(o.route,i),function dL(e,n,t){const i=n[n.length-1],r=n.slice(0,n.length-1).reverse().map(s=>function Z4(e){const n=e.routeConfig?e.routeConfig.canActivateChild:null;return n&&0!==n.length?{node:e,guards:n}:null}(s)).filter(s=>null!==s).map(s=>LD(()=>W(s.guards.map(l=>{const d=Za(s.node)??t,h=ls(l,d);return ro(function tL(e){return e&&Ka(e.canActivateChild)}(h)?h.canActivateChild(i,e):d.runInContext(()=>h(i,e))).pipe(Po())})).pipe(cs())));return W(r).pipe(cs())}(e,o.path,t),function uL(e,n,t){const i=n.routeConfig?n.routeConfig.canActivate:null;if(!i||0===i.length)return W(!0);const o=i.map(r=>LD(()=>{const s=Za(n)??t,a=ls(r,s);return ro(function eL(e){return e&&Ka(e.canActivate)}(a)?a.canActivate(n,e):s.runInContext(()=>a(n,e))).pipe(Po())}));return W(o).pipe(cs())}(e,o.route,t))),Po(o=>!0!==o,!0))}(i,r,e,n):W(a)),ue(a=>({...t,guardsResult:a})))})}(this.environmentInjector,l=>this.events.next(l)),_t(l=>{if(r.guardsResult=l.guardsResult,jo(l.guardsResult))throw vC(0,l.guardsResult);const d=new S4(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects),l.targetSnapshot,!!l.guardsResult);this.events.next(d)}),vt(l=>!!l.guardsResult||(this.cancelNavigationTransition(l,"",3),!1)),Og(l=>{if(l.guards.canActivateChecks.length)return W(l).pipe(_t(d=>{const h=new E4(d.id,this.urlSerializer.serialize(d.extractedUrl),this.urlSerializer.serialize(d.urlAfterRedirects),d.targetSnapshot);this.events.next(h)}),Pn(d=>{let h=!1;return W(d).pipe(OL(t.paramsInheritanceStrategy,this.environmentInjector),_t({next:()=>h=!0,complete:()=>{h||this.cancelNavigationTransition(d,"",2)}}))}),_t(d=>{const h=new T4(d.id,this.urlSerializer.serialize(d.extractedUrl),this.urlSerializer.serialize(d.urlAfterRedirects),d.targetSnapshot);this.events.next(h)}))}),Og(l=>{const d=h=>{const p=[];h.routeConfig?.loadComponent&&!h.routeConfig._loadedComponent&&p.push(this.configLoader.loadComponent(h.routeConfig).pipe(_t(g=>{h.component=g}),ue(()=>{})));for(const g of h.children)p.push(...d(g));return p};return cg(d(l.targetSnapshot.root)).pipe(Cu(),Et(1))}),Og(()=>this.afterPreactivation()),ue(l=>{const d=function j4(e,n,t){const i=Ya(e,n._root,t?t._root:void 0);return new dC(i,n)}(t.routeReuseStrategy,l.targetSnapshot,l.currentRouterState);return this.currentTransition=r={...l,targetRouterState:d},r}),_t(()=>{this.events.next(new _g)}),((e,n,t,i)=>ue(o=>(new q4(n,o.targetRouterState,o.currentRouterState,t,i).activate(e),o)))(this.rootContexts,t.routeReuseStrategy,l=>this.events.next(l),this.inputBindingEnabled),Et(1),_t({next:l=>{s=!0,this.lastSuccessfulNavigation=this.currentNavigation,this.events.next(new so(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects))),t.titleStrategy?.updateTitle(l.targetRouterState.snapshot),l.resolve(!0)},complete:()=>{s=!0}}),Ze(this.transitionAbortSubject.pipe(_t(l=>{throw l}))),fg(()=>{s||a||this.cancelNavigationTransition(r,"",1),this.currentNavigation?.id===r.id&&(this.currentNavigation=null)}),ko(l=>{if(a=!0,yC(l))this.events.next(new Wa(r.id,this.urlSerializer.serialize(r.extractedUrl),l.message,l.cancellationCode)),function B4(e){return yC(e)&&jo(e.url)}(l)?this.events.next(new yg(l.url)):r.resolve(!1);else{this.events.next(new Au(r.id,this.urlSerializer.serialize(r.extractedUrl),l,r.targetSnapshot??void 0));try{r.resolve(t.errorHandler(l))}catch(d){r.reject(d)}}return mn}))}))}cancelNavigationTransition(t,i,o){const r=new Wa(t.id,this.urlSerializer.serialize(t.extractedUrl),i,o);this.events.next(r),t.resolve(!1)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function RC(e){return e!==za}let xC=(()=>{class e{buildTitle(t){let i,o=t.root;for(;void 0!==o;)i=this.getResolvedTitleForRoute(o)??i,o=o.children.find(r=>r.outlet===te);return i}getResolvedTitleForRoute(t){return t.data[Va]}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return k(jL)},providedIn:"root"})}}return e})(),jL=(()=>{class e extends xC{constructor(t){super(),this.title=t}updateTitle(t){const i=this.buildTitle(t);void 0!==i&&this.title.setTitle(i)}static{this.\u0275fac=function(i){return new(i||e)(L(OD))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),LL=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return k(BL)},providedIn:"root"})}}return e})();class VL{shouldDetach(n){return!1}store(n,t){}shouldAttach(n){return!1}retrieve(n){return null}shouldReuseRoute(n,t){return n.routeConfig===t.routeConfig}}let BL=(()=>{class e extends VL{static{this.\u0275fac=function(){let t;return function(o){return(t||(t=function tt(e){return Ci(()=>{const n=e.prototype.constructor,t=n[Si]||Sf(n),i=Object.prototype;let o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==i;){const r=o[Si]||Sf(o);if(r&&r!==t)return r;o=Object.getPrototypeOf(o)}return r=>new r})}(e)))(o||e)}}()}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();const Vu=new U("",{providedIn:"root",factory:()=>({})});let HL=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return k($L)},providedIn:"root"})}}return e})(),$L=(()=>{class e{shouldProcessUrl(t){return!0}extract(t){return t}merge(t,i){return t}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var Xa=function(e){return e[e.COMPLETE=0]="COMPLETE",e[e.FAILED=1]="FAILED",e[e.REDIRECTING=2]="REDIRECTING",e}(Xa||{});function PC(e,n){e.events.pipe(vt(t=>t instanceof so||t instanceof Wa||t instanceof Au||t instanceof rs),ue(t=>t instanceof so||t instanceof rs?Xa.COMPLETE:t instanceof Wa&&(0===t.code||1===t.code)?Xa.REDIRECTING:Xa.FAILED),vt(t=>t!==Xa.REDIRECTING),Et(1)).subscribe(()=>{n()})}function UL(e){throw e}function GL(e,n,t){return n.parse("/")}const zL={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},WL={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};let On=(()=>{class e{get navigationId(){return this.navigationTransitions.navigationId}get browserPageId(){return"computed"!==this.canceledNavigationResolution?this.currentPageId:this.location.getState()?.\u0275routerPageId??this.currentPageId}get events(){return this._events}constructor(){this.disposed=!1,this.currentPageId=0,this.console=k(aw),this.isNgZoneEnabled=!1,this._events=new ye,this.options=k(Vu,{optional:!0})||{},this.pendingTasks=k(lw),this.errorHandler=this.options.errorHandler||UL,this.malformedUriErrorHandler=this.options.malformedUriErrorHandler||GL,this.navigated=!1,this.lastSuccessfulId=-1,this.urlHandlingStrategy=k(HL),this.routeReuseStrategy=k(LL),this.titleStrategy=k(xC),this.onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore",this.paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly",this.urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred",this.canceledNavigationResolution=this.options.canceledNavigationResolution||"replace",this.config=k(ds,{optional:!0})?.flat()??[],this.navigationTransitions=k(Lu),this.urlSerializer=k(Ha),this.location=k(kp),this.componentInputBindingEnabled=!!k(xu,{optional:!0}),this.eventsSubscription=new Je,this.isNgZoneEnabled=k(ae)instanceof ae&&ae.isInAngularZone(),this.resetConfig(this.config),this.currentUrlTree=new os,this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=fC(0,null),this.navigationTransitions.setupNavigations(this,this.currentUrlTree,this.routerState).subscribe(t=>{this.lastSuccessfulId=t.id,this.currentPageId=this.browserPageId},t=>{this.console.warn(`Unhandled Navigation Error: ${t}`)}),this.subscribeToNavigationEvents()}subscribeToNavigationEvents(){const t=this.navigationTransitions.events.subscribe(i=>{try{const{currentTransition:o}=this.navigationTransitions;if(null===o)return void(kC(i)&&this._events.next(i));if(i instanceof Ou)RC(o.source)&&(this.browserUrlTree=o.extractedUrl);else if(i instanceof rs)this.rawUrlTree=o.rawUrl;else if(i instanceof lC){if("eager"===this.urlUpdateStrategy){if(!o.extras.skipLocationChange){const r=this.urlHandlingStrategy.merge(o.urlAfterRedirects,o.rawUrl);this.setBrowserUrl(r,o)}this.browserUrlTree=o.urlAfterRedirects}}else if(i instanceof _g)this.currentUrlTree=o.urlAfterRedirects,this.rawUrlTree=this.urlHandlingStrategy.merge(o.urlAfterRedirects,o.rawUrl),this.routerState=o.targetRouterState,"deferred"===this.urlUpdateStrategy&&(o.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,o),this.browserUrlTree=o.urlAfterRedirects);else if(i instanceof Wa)0!==i.code&&1!==i.code&&(this.navigated=!0),(3===i.code||2===i.code)&&this.restoreHistory(o);else if(i instanceof yg){const r=this.urlHandlingStrategy.merge(i.url,o.currentRawUrl),s={skipLocationChange:o.extras.skipLocationChange,replaceUrl:"eager"===this.urlUpdateStrategy||RC(o.source)};this.scheduleNavigation(r,za,null,s,{resolve:o.resolve,reject:o.reject,promise:o.promise})}i instanceof Au&&this.restoreHistory(o,!0),i instanceof so&&(this.navigated=!0),kC(i)&&this._events.next(i)}catch(o){this.navigationTransitions.transitionAbortSubject.next(o)}});this.eventsSubscription.add(t)}resetRootComponentType(t){this.routerState.root.component=t,this.navigationTransitions.rootComponentType=t}initialNavigation(){if(this.setUpLocationChangeListener(),!this.navigationTransitions.hasRequestedNavigation){const t=this.location.getState();this.navigateToSyncWithBrowser(this.location.path(!0),za,t)}}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(t=>{const i="popstate"===t.type?"popstate":"hashchange";"popstate"===i&&setTimeout(()=>{this.navigateToSyncWithBrowser(t.url,i,t.state)},0)}))}navigateToSyncWithBrowser(t,i,o){const r={replaceUrl:!0},s=o?.navigationId?o:null;if(o){const l={...o};delete l.navigationId,delete l.\u0275routerPageId,0!==Object.keys(l).length&&(r.state=l)}const a=this.parseUrl(t);this.scheduleNavigation(a,i,s,r)}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(t){this.config=t.map(Mg),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.navigationTransitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(t,i={}){const{relativeTo:o,queryParams:r,fragment:s,queryParamsHandling:a,preserveFragment:l}=i,d=l?this.currentUrlTree.fragment:s;let p,h=null;switch(a){case"merge":h={...this.currentUrlTree.queryParams,...r};break;case"preserve":h=this.currentUrlTree.queryParams;break;default:h=r||null}null!==h&&(h=this.removeEmptyProps(h));try{p=tC(o?o.snapshot:this.routerState.snapshot.root)}catch{("string"!=typeof t[0]||!t[0].startsWith("/"))&&(t=[]),p=this.currentUrlTree.root}return nC(p,t,h,d??null)}navigateByUrl(t,i={skipLocationChange:!1}){const o=jo(t)?t:this.parseUrl(t),r=this.urlHandlingStrategy.merge(o,this.rawUrlTree);return this.scheduleNavigation(r,za,null,i)}navigate(t,i={skipLocationChange:!1}){return function qL(e){for(let n=0;n{const r=t[o];return null!=r&&(i[o]=r),i},{})}scheduleNavigation(t,i,o,r,s){if(this.disposed)return Promise.resolve(!1);let a,l,d;s?(a=s.resolve,l=s.reject,d=s.promise):d=new Promise((p,g)=>{a=p,l=g});const h=this.pendingTasks.add();return PC(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(h))}),this.navigationTransitions.handleNavigationRequest({source:i,restoredState:o,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,currentBrowserUrl:this.browserUrlTree,rawUrl:t,extras:r,resolve:a,reject:l,promise:d,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),d.catch(p=>Promise.reject(p))}setBrowserUrl(t,i){const o=this.urlSerializer.serialize(t);if(this.location.isCurrentPathEqualTo(o)||i.extras.replaceUrl){const s={...i.extras.state,...this.generateNgRouterState(i.id,this.browserPageId)};this.location.replaceState(o,"",s)}else{const r={...i.extras.state,...this.generateNgRouterState(i.id,this.browserPageId+1)};this.location.go(o,"",r)}}restoreHistory(t,i=!1){if("computed"===this.canceledNavigationResolution){const r=this.currentPageId-this.browserPageId;0!==r?this.location.historyGo(r):this.currentUrlTree===this.getCurrentNavigation()?.finalUrl&&0===r&&(this.resetState(t),this.browserUrlTree=t.currentUrlTree,this.resetUrlToCurrentUrlTree())}else"replace"===this.canceledNavigationResolution&&(i&&this.resetState(t),this.resetUrlToCurrentUrlTree())}resetState(t){this.routerState=t.currentRouterState,this.currentUrlTree=t.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,t.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(t,i){return"computed"===this.canceledNavigationResolution?{navigationId:t,\u0275routerPageId:i}:{navigationId:t}}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function kC(e){return!(e instanceof _g||e instanceof yg)}class FC{}let QL=(()=>{class e{constructor(t,i,o,r,s){this.router=t,this.injector=o,this.preloadingStrategy=r,this.loader=s}setUpPreloading(){this.subscription=this.router.events.pipe(vt(t=>t instanceof so),La(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(t,i){const o=[];for(const r of i){r.providers&&!r._injector&&(r._injector=tp(r.providers,t,`Route: ${r.path}`));const s=r._injector??t,a=r._loadedInjector??s;(r.loadChildren&&!r._loadedRoutes&&void 0===r.canLoad||r.loadComponent&&!r._loadedComponent)&&o.push(this.preloadConfig(s,r)),(r.children||r._loadedRoutes)&&o.push(this.processRoutes(a,r.children??r._loadedRoutes))}return pt(o).pipe(rr())}preloadConfig(t,i){return this.preloadingStrategy.preload(i,()=>{let o;o=i.loadChildren&&void 0===i.canLoad?this.loader.loadChildren(t,i):W(null);const r=o.pipe(lt(s=>null===s?W(void 0):(i._loadedRoutes=s.routes,i._loadedInjector=s.injector,this.processRoutes(s.injector??t,s.routes))));return i.loadComponent&&!i._loadedComponent?pt([r,this.loader.loadComponent(i)]).pipe(rr()):r})}static{this.\u0275fac=function(i){return new(i||e)(L(On),L(cw),L(Zt),L(FC),L(Ag))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();const xg=new U("");let jC=(()=>{class e{constructor(t,i,o,r,s={}){this.urlSerializer=t,this.transitions=i,this.viewportScroller=o,this.zone=r,this.options=s,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},s.scrollPositionRestoration=s.scrollPositionRestoration||"disabled",s.anchorScrolling=s.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(t=>{t instanceof Ou?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=t.navigationTrigger,this.restoredId=t.restoredState?t.restoredState.navigationId:0):t instanceof so?(this.lastId=t.id,this.scheduleScrollEvent(t,this.urlSerializer.parse(t.urlAfterRedirects).fragment)):t instanceof rs&&0===t.code&&(this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(t,this.urlSerializer.parse(t.url).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(t=>{t instanceof cC&&(t.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(t.position):t.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(t.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(t,i){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.transitions.events.next(new cC(t,"popstate"===this.lastSource?this.store[this.restoredId]:null,i))})},0)})}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}static{this.\u0275fac=function(i){!function ry(){throw new Error("invalid")}()}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();function Li(e,n){return{\u0275kind:e,\u0275providers:n}}function VC(){const e=k(gt);return n=>{const t=e.get(no);if(n!==t.components[0])return;const i=e.get(On),o=e.get(BC);1===e.get(Pg)&&i.initialNavigation(),e.get(HC,null,oe.Optional)?.setUpPreloading(),e.get(xg,null,oe.Optional)?.init(),i.resetRootComponentType(t.componentTypes[0]),o.closed||(o.next(),o.complete(),o.unsubscribe())}}const BC=new U("",{factory:()=>new ye}),Pg=new U("",{providedIn:"root",factory:()=>1}),HC=new U("");function eV(e){return Li(0,[{provide:HC,useExisting:QL},{provide:FC,useExisting:e}])}const $C=new U("ROUTER_FORROOT_GUARD"),nV=[kp,{provide:Ha,useClass:hg},On,qa,{provide:as,useFactory:function LC(e){return e.routerState.root},deps:[On]},Ag,[]];function iV(){return new mw("Router",On)}let UC=(()=>{class e{constructor(t){}static forRoot(t,i){return{ngModule:e,providers:[nV,[],{provide:ds,multi:!0,useValue:t},{provide:$C,useFactory:aV,deps:[[On,new ic,new oc]]},{provide:Vu,useValue:i||{}},i?.useHash?{provide:xo,useClass:vF}:{provide:xo,useClass:qw},{provide:xg,useFactory:()=>{const e=k(P3),n=k(ae),t=k(Vu),i=k(Lu),o=k(Ha);return t.scrollOffset&&e.setOffset(t.scrollOffset),new jC(o,i,e,n,t)}},i?.preloadingStrategy?eV(i.preloadingStrategy).\u0275providers:[],{provide:mw,multi:!0,useFactory:iV},i?.initialNavigation?lV(i):[],i?.bindToComponentInputs?Li(8,[mC,{provide:xu,useExisting:mC}]).\u0275providers:[],[{provide:GC,useFactory:VC},{provide:Sp,multi:!0,useExisting:GC}]]}}static forChild(t){return{ngModule:e,providers:[{provide:ds,multi:!0,useValue:t}]}}static{this.\u0275fac=function(i){return new(i||e)(L($C,8))}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();function aV(e){return"guarded"}function lV(e){return["disabled"===e.initialNavigation?Li(3,[{provide:mp,multi:!0,useFactory:()=>{const n=k(On);return()=>{n.setUpLocationChangeListener()}}},{provide:Pg,useValue:2}]).\u0275providers:[],"enabledBlocking"===e.initialNavigation?Li(2,[{provide:Pg,useValue:0},{provide:mp,multi:!0,deps:[gt],useFactory:n=>{const t=n.get(gF,Promise.resolve());return()=>t.then(()=>new Promise(i=>{const o=n.get(On),r=n.get(BC);PC(o,()=>{i(!0)}),n.get(Lu).afterPreactivation=()=>(i(!0),r.closed?W(void 0):r),o.initialNavigation()}))}}]).\u0275providers:[]]}const GC=new U("");let zC=(()=>{class e{constructor(){this.experience=[{company:"Exprivia",icon:"assets/images/experience-logos/exprivia.jpg",jobTitle:"Software Engineer",url:"https://exprivia.it/",period:"Apr 2024 - current",location:"Milan, Italy",description:""},{company:"Empatica",icon:"assets/images/experience-logos/empatica.jpg",jobTitle:"Jr Embedded Algorithm Engineer",url:"https://www.empatica.com/",period:"Sept 2022 - Mar 2024",location:"Milano, Italy",description:"I was responsible for integrating and optimizing biomedical DSP algorithms into the core library. My key contribution was improving the runtime performance of the epilepsy detection algorithm by 25%, making real-time seizure detection possible directly on the wearable device. This task involved low-level optimization and close collaboration with the R&D team. It\u2019s a project I\u2019m especially proud of, as it directly impacts the lives of people with epilepsy \u2014 a cause close to my heart."},{company:"Empatica",icon:"assets/images/experience-logos/empatica.jpg",jobTitle:"Graduate Engineer",url:"https://www.empatica.com/",period:"Sept 2021 - Sept 2022",location:"Milano, Italy",description:"As a graduate engineer at Empatica, I rotated across four teams \u2014 Data, Mobile, Front-End, and Embedded Algorithms \u2014 contributing to projects from data validation protocols to Android UI development, web portal features, and real-time algorithm optimization on wearables. This experience gave me a broad, cross-functional view of product development and how diverse engineering disciplines collaborate to deliver impactful solutions."}]}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),WC=(()=>{class e{constructor(){this.education=[{studyTitle:"Master in ICT for Internet and Multimedia Engineering",additionalInfo:"Curriculum: life and health tecnologies",thesisTitle:"Measurement of cardiac related biosignals in wearable during real life",university:"Padova University",url:"https://mime.dei.unipd.it/tracks/ict-for-life-health/",years:"April 2022 (110/110)",graduationPhoto:"assets/images/graduation-photos/unipd.jpg"},{studyTitle:"Ingegneria dell' informazione",university:"Padova University",additionalInfo:"",thesisTitle:"Reinforcement Learning e Q-Learning, come le macchine apprendono dai propri errori",url:"https://didattica.unipd.it/off/2022/LT/IN/IN0513",years:"November 2019",graduationPhoto:"assets/images/graduation-photos/unipd.jpg"}]}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),qC=(()=>{class e{constructor(){this.skills=[{category:"Coding languages and frameworks (working experience)",content:[{name:"Angular",percentage:"90%"},{name:"Unity",percentage:"90%"},{name:"Python",percentage:"90%"},{name:"Matlab",percentage:"90%"},{name:"C",percentage:"90%"}]},{category:"Coding languages and frameworks (personal or university projects)",content:[{name:"Arduino",percentage:"90%"},{name:"C++",percentage:"90%"},{name:"Kotlin",percentage:"70%"},{name:"React",percentage:"20%"},{name:"Typescript",percentage:"20%"},{name:"Javascript",percentage:"20%"},{name:"HTMLL/CSS",percentage:"40%"},{name:"OpenCV",percentage:"40%"},{name:"Pandas",percentage:"40%"}]},{category:"Design&UX tools and methods",content:[{name:"Figma",percentage:"90%"},{name:"Canva",percentage:"70%"},{name:"UX resarch",percentage:"70%"},{name:"Design thinking",percentage:"70%"},{name:"Accessibility",percentage:"70%"}]}]}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();const uV=function(e){return{"education-row-last":e}};let dV=(()=>{class e{constructor(t){this.service=t,this.education=this.service.education}static{this.\u0275fac=function(i){return new(i||e)(y(WC))}}static{this.\u0275cmp=se({type:e,selectors:[["app-education-card"]],inputs:{index:"index"},decls:18,vars:10,consts:[[1,"row"],[1,"education-row",3,"ngClass"],[1,"education-image",3,"src"],[1,"education-text"],["target","_blank",3,"href"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"div",1)(2,"div"),m(3,"img",2),u(),c(4,"div",3)(5,"h3"),f(6),u(),c(7,"small"),f(8),u(),c(9,"p")(10,"a",4),f(11),u(),m(12,"br"),c(13,"small"),f(14),u(),m(15,"br"),c(16,"small"),f(17),u()()()()()),2&i&&(M(1),A("ngClass",Ri(8,uV,o.index===o.education.length-1)),M(2),A("src",o.education[o.index].graduationPhoto,Dn),M(3),Le(o.education[o.index].studyTitle),M(2),Le(o.education[o.index].additionalInfo),M(2),A("href",o.education[o.index].url,Dn),M(1),Le(o.education[o.index].university),M(3),Le(o.education[o.index].years),M(3),un("Thesis: ",o.education[o.index].thesisTitle,""))},dependencies:[vu],styles:[".education-row[_ngcontent-%COMP%]{display:flex;align-items:center;margin-bottom:30px}.education-row-last[_ngcontent-%COMP%]{display:flex;align-items:center;margin-bottom:0}@media (max-width: 575.98px){.education-row[_ngcontent-%COMP%]{flex-direction:column}.education-image[_ngcontent-%COMP%]{margin-bottom:30px;margin-right:0!important}.education-text[_ngcontent-%COMP%]{text-align:center}}.education-text[_ngcontent-%COMP%]{line-height:130%}.education-image[_ngcontent-%COMP%]{flex:none;height:120px;width:120px;margin-right:20px;border-radius:var(--radius-pill);border:3px solid var(--border);position:relative;z-index:400}"]})}}return e})();const fV=function(e){return{"background-image":e}};let hV=(()=>{class e{constructor(t){this.service=t,this.experience=this.service.experience}static{this.\u0275fac=function(i){return new(i||e)(y(zC))}}static{this.\u0275cmp=se({type:e,selectors:[["app-experience-card"]],inputs:{index:"index"},decls:13,vars:8,consts:[[1,"row","experience-card"],[1,"experience-title"],[1,"experience-icon",3,"ngStyle"],["target","_blank",3,"href"],[1,"card-text"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"div",1),m(2,"div",2),c(3,"div")(4,"h3"),f(5),c(6,"a",3),f(7),u()(),c(8,"small"),f(9),u()()(),c(10,"div")(11,"p",4),f(12),u()()()),2&i&&(M(2),A("ngStyle",Ri(6,fV,'url("'+o.experience[o.index].icon+'")')),M(3),un("",o.experience[o.index].jobTitle," - "),M(1),A("href",o.experience[o.index].url,Dn),M(1),Le(o.experience[o.index].company),M(2),Le(o.experience[o.index].period),M(3),Le(o.experience[o.index].description))},dependencies:[_u],styles:[".experience-card[_ngcontent-%COMP%]{margin-bottom:10px}.experience-title[_ngcontent-%COMP%]{display:flex;align-items:center;margin:10px 0}.experience-icon[_ngcontent-%COMP%]{flex:none;height:60px;width:60px;background-color:#fff;background-size:50px;background-repeat:no-repeat;background-position:center center;margin-right:15px;object-fit:cover;border:1px solid rgb(182,182,182);border-radius:var(--radius-sm);padding:5px}@media (max-width: 575.98px){.experience-icon[_ngcontent-%COMP%]{margin-bottom:15px}.experience-title[_ngcontent-%COMP%]{display:unset}}"]})}}return e})();function pV(e,n){if(1&e&&(c(0,"div",1)(1,"span",2),f(2),u()()),2&e){const t=n.index,i=G();M(2),Le(i.skills[i.i].content[t].name)}}let gV=(()=>{class e{constructor(t){this.service=t,this.skills=this.service.skills}static{this.\u0275fac=function(i){return new(i||e)(y(qC))}}static{this.\u0275cmp=se({type:e,selectors:[["app-skill-card"]],inputs:{i:"i"},decls:2,vars:1,consts:[["style","display: inline; margin-right: 3px;",4,"ngFor","ngForOf"],[2,"display","inline","margin-right","3px"],[1,"badge","tool-badge"]],template:function(i,o){1&i&&(c(0,"div"),B(1,pV,3,1,"div",0),u()),2&i&&(M(1),A("ngForOf",o.skills[o.i].content))},dependencies:[Nn],styles:[".skill-card[_ngcontent-%COMP%]{background-color:var(--info)}.skill-progress[_ngcontent-%COMP%]{background-color:var(--textLink)}"]})}}return e})();function mV(e,n){if(1&e&&(c(0,"h2",4),f(1),u()),2&e){const t=G();M(1),Le(t.sectionTitle)}}function vV(e,n){if(1&e&&(c(0,"h3",5),f(1),u()),2&e){const t=G();M(1),Le(t.sectionSubtitle)}}function _V(e,n){if(1&e&&(c(0,"h4",6),f(1),u()),2&e){const t=G();M(1),Le(t.sectionSubsubtitle)}}const yV=["*"];let mi=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-page-section"]],inputs:{sectionTitle:"sectionTitle",sectionSubtitle:"sectionSubtitle",sectionSubsubtitle:"sectionSubsubtitle"},ngContentSelectors:yV,decls:6,vars:3,consts:[[1,"row","row-section"],["class","page-section-title",4,"ngIf"],["class","page-section-subtitle",4,"ngIf"],["class","page-section-subsubtitle",4,"ngIf"],[1,"page-section-title"],[1,"page-section-subtitle"],[1,"page-section-subsubtitle"]],template:function(i,o){1&i&&(Bh(),c(0,"div",0),B(1,mV,2,1,"h2",1),B(2,vV,2,1,"h3",2),B(3,_V,2,1,"h4",3),c(4,"div"),Hh(5),u()()),2&i&&(M(1),A("ngIf",o.sectionTitle),M(1),A("ngIf",o.sectionSubtitle),M(1),A("ngIf",o.sectionSubsubtitle))},dependencies:[Fi],styles:[".page-section-title[_ngcontent-%COMP%]{color:var(--textTitle)}.page-section-subtitle[_ngcontent-%COMP%]{color:var(--textSubtitle)}.page-section-subsubtitle[_ngcontent-%COMP%]{color:var(--text)}.row-section[_ngcontent-%COMP%]{padding-bottom:30px}"]})}}return e})(),bV=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-hobby-card"]],inputs:{imagePath:"imagePath",description:"description"},decls:5,vars:2,consts:[[1,"card-img-top","hobby-image",3,"src"]],template:function(i,o){1&i&&(c(0,"div"),m(1,"img",0),c(2,"div")(3,"p"),f(4),u()()()),2&i&&(M(1),A("src",o.imagePath,Dn),M(3),Le(o.description))},styles:[".hobby-image[_ngcontent-%COMP%]{margin-bottom:5px;border-radius:var(--radius-sm)}"]})}}return e})(),wV=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-language-card"]],inputs:{imagePath:"imagePath",description:"description"},decls:4,vars:2,consts:[[1,"row"],[1,"language-row"],[1,"language-image","mb-1",3,"src"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"div",1),m(2,"img",2),f(3),u()()),2&i&&(M(2),A("src",o.imagePath,Dn),M(1),un(" ",o.description," "))},styles:[".language-row[_ngcontent-%COMP%]{display:flex;align-items:center}.language-image[_ngcontent-%COMP%]{background-repeat:no-repeat;background-position:left center;width:45px;height:30px;margin-right:15px}"]})}}return e})();function DV(e,n){if(1&e&&(c(0,"div",48),m(1,"app-education-card",49),u()),2&e){const t=n.index;M(1),A("index",t)}}function CV(e,n){if(1&e&&(c(0,"div"),m(1,"app-experience-card",49),u()),2&e){const t=n.index;M(1),A("index",t)}}const SV=function(e){return{"skill-row-last":e}};function EV(e,n){if(1&e&&(c(0,"div",50)(1,"h4"),f(2),u(),m(3,"app-skill-card",51),u()),2&e){const t=n.$implicit,i=n.index,o=G();A("ngClass",Ri(3,SV,i===o.skills.length-1)),M(2),Le(t.category),M(1),A("i",i)}}let YC=(()=>{class e{constructor(t,i,o){this.experienceService=t,this.educationService=i,this.skillsService=o,this.coverProjects=["assets/images/Home/Cover ConcertRandomization.jpg","assets/images/Home/Cover NonverbalBehaviour.jpg","assets/images/Home/Cover SituatedMemories.jpg","assets/images/Home/Cover InSignum.jpg","assets/images/Home/Cover PopupBreak.jpg","assets/images/Home/Cover Pearly.jpg","assets/images/Home/Cover Bookflix.jpg","assets/images/Home/Cover Racoomba.png","assets/images/Home/Cover Espoora.png"],this.experience=this.experienceService.experience,this.education=this.educationService.education,this.skills=this.skillsService.skills}static{this.\u0275fac=function(i){return new(i||e)(y(zC),y(WC),y(qC))}}static{this.\u0275cmp=se({type:e,selectors:[["app-home"]],decls:111,vars:3,consts:[[1,"home-cover","text-white","d-flex","align-items-center"],[1,"container"],[1,"row","p-4"],[1,"header-name"],[1,"col-12","col-md-4"],[1,"intro-text"],[1,"row","justify-content-center"],[1,"col"],[1,"portfolio-section","portfolio-section-background"],[1,"row","m-0"],[1,"col-12","col-lg-4","col-xl-3","page-info-extra"],[1,"row"],[1,"col-md-5","col-lg-12","page-info-profile"],["src","/assets/images/profilo_cartoon.png",1,"img-fluid","page-info-picture"],[1,"col","d-flex","align-items-center"],[1,"info-list"],[1,"info-list-job"],[1,"info-list-company"],["href","https://www.exprivia.it/it/","target","_blank"],[1,"info-list-where"],[1,"info-list-email"],["href","mailto:vania.ferrari00@gmail.com"],[1,"col","about-text","mb-4"],[1,"about-text","about-title"],[1,"about-text"],[2,"text-align","right"],[1,"col-lg-8","col-12"],[1,"col","left-section"],["sectionTitle","Education"],["class","education-timeline",4,"ngFor","ngForOf"],["sectionTitle","Experience"],[4,"ngFor","ngForOf"],[1,"col","right-section"],["sectionTitle","Skills"],["class","skill-row",3,"ngClass",4,"ngFor","ngForOf"],["sectionTitle","Languages","sectionSubsubtitle","My mother tongue is"],["imagePath","assets/images/languages/italian.png","description","Italian",1,"language-card"],["sectionSubsubtitle","Other:"],["imagePath","assets/images/languages/english.png","description","I have worked in English speaking environments for almost 3 years",1,"language-card"],["sectionTitle","Hobbies"],[1,"row","row-cols-3","row-cols-lg-2"],["imagePath","assets/images/hobbies/BoardGame.png","description","Board game"],["imagePath","assets/images/hobbies/Chess.png","description","Chess"],["imagePath","assets/images/hobbies/Gymnast.png","description","Artistic gymnastics"],["imagePath","assets/images/hobbies/Beer.png","description","Belgian Beers"],["id","projects",1,"projects-cover","text-white","d-flex","align-items-center","mt-4","mb-4"],[1,"container","p-4"],[1,"row","row-cols-1","row-cols-md-2","row-cols-xl-3","g-4",2,"margin-top","10px","margin-bottom","50px"],[1,"education-timeline"],[3,"index"],[1,"skill-row",3,"ngClass"],[3,"i"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),f(4,"Hello,"),u(),c(5,"h1",3),f(6,"I'm Vania!"),u(),c(7,"div",4)(8,"span",5),f(9,"Multimedia Engineer by profession, riddle-solver by nature. "),m(10,"br"),f(11,"On a mission to turn tech into portals to the wonderfully weird."),u()()()()(),c(12,"div",1)(13,"div",6)(14,"div",7)(15,"div",8)(16,"div",9)(17,"div",10)(18,"div",11)(19,"div",12),m(20,"img",13),u(),c(21,"div",14)(22,"ul",15)(23,"li",16),f(24," Software Engineer "),u(),c(25,"li",17)(26,"a",18),f(27,"Exprivia"),u()(),c(28,"li",19),f(29,"Milan (Italy)"),u(),c(30,"li",20)(31,"a",21),f(32," vania.ferrari00@gmail.com "),u()()()()()(),c(33,"div",22)(34,"h2",23),f(35,"About Me"),u(),m(36,"p",24),c(37,"p"),f(38," \u{1f453} I'm a creative soul driven by the desire to craft "),c(39,"strong"),f(40,"meaningful experiences through technology "),u(),f(41,". My passion lies in immersive tech (like VR and AR) because I believe these tools can transform the real world into a dynamic and playful space, blurring the lines between the physical and the digital. This passion led me to study Multimedia Engineering in Padova. "),m(42,"br")(43,"br"),f(44," \u{1f4a1} I'm fascinated by "),c(45,"strong"),f(46,"logic challenges "),u(),f(47,". I\u2019ve been playing chess since I was a child and have a deep love for intense board game sessions. Passion runs deep in me \u2014 I\u2019ve been teaching chess for almost ten years in a competitive club, raising a delightful squad of nerdy, brainy monsters. "),m(48,"br")(49,"br"),f(50," \u{1f331} Outside of immersive experiences, I love experimenting with "),c(51,"strong"),f(52," IoT and sensory-driven projects "),u(),f(53," in my free time. My goal is always the same: to make life easier, more fun, and more connected through creativity and automation. How many everyday problems could we solve with just a little bit of curiosity and code? "),m(54,"br")(55,"br"),f(56," \u{1f387} Since I deeply believe in technology as a bridge for human connection, I often volunteer to teach coding principles to kids through games and playful interactions. "),m(57,"br")(58,"br"),f(59," \u{1f680} Let\u2019s have fun and reach out if you have an exciting idea or initiative. I\u2019m always up for building something weird and wonderful together. "),u(),c(60,"p",25),f(61," \u2728"),c(62,"i")(63,"strong"),f(64," Play is the highest form of research "),u()(),f(65," - Albert Einstein "),u()()()()()(),c(66,"div",11)(67,"div",26)(68,"div",6)(69,"div",27)(70,"div",8)(71,"app-page-section",28),B(72,DV,2,1,"div",29),u()()()(),c(73,"div",6)(74,"div",27)(75,"div",8)(76,"app-page-section",30),B(77,CV,2,1,"div",31),u()()()()(),c(78,"div",7)(79,"div",6)(80,"div",32)(81,"div",8)(82,"app-page-section",33),B(83,EV,4,5,"div",34),u()()()(),c(84,"div",6)(85,"div",32)(86,"div",8)(87,"app-page-section",35),m(88,"app-language-card",36),u(),c(89,"app-page-section",37),m(90,"app-language-card",38),u()()()(),c(91,"div",6)(92,"div",32)(93,"div",8)(94,"app-page-section",39)(95,"div",40),m(96,"app-hobby-card",41)(97,"app-hobby-card",42)(98,"app-hobby-card",43)(99,"app-hobby-card",44),u()()()()()()()(),c(100,"div",45)(101,"div",46)(102,"h1"),f(103,"Check out some of my work!"),u()()(),c(104,"div",1)(105,"div",47)(106,"div",7)(107,"p"),f(108," ... work in progress!..."),u(),c(109,"p"),f(110,"In the meantime, I may have applied for a position at your company: give me a chance \u2014 I promise I'll show you my amazing projects!"),u()()()()),2&i&&(M(72),A("ngForOf",o.education),M(5),A("ngForOf",o.experience),M(6),A("ngForOf",o.skills))},dependencies:[vu,Nn,dV,hV,gV,mi,bV,wV],styles:['.home-cover[_ngcontent-%COMP%]{background-image:url(landscape_home6.d1e6596fd7361411.png);background-position:bottom center;height:72vh;background-attachment:fixed;background-size:cover;padding:100px 0 50px;background-color:#0009;background-blend-mode:multiply;position:relative;z-index:1}.header-name[_ngcontent-%COMP%]{font-size:3rem}.intro-text[_ngcontent-%COMP%]{display:block;font-size:1.5rem;margin-top:1rem;line-height:1.6}@media (min-width: 576px){.header-name[_ngcontent-%COMP%]{font-size:3.2rem}}@media (min-width: 768px){.header-name[_ngcontent-%COMP%]{font-size:4rem}}@media (min-width: 992px){.header-name[_ngcontent-%COMP%]{font-size:4.5rem}}.header-name-div[_ngcontent-%COMP%]{margin-bottom:100px}.header-icon[_ngcontent-%COMP%]{margin-right:10px}.projects-cover[_ngcontent-%COMP%]{background-image:url(projects_landscape2.93998ca5b7199593.png);background-position:top center;height:30vh;background-attachment:fixed;background-size:cover;background-color:#00000080;background-blend-mode:multiply}.about-title[_ngcontent-%COMP%]{color:var(--textSubtitle)}@media (max-width: 991.98px){.about-text[_ngcontent-%COMP%]{margin-left:0;margin-right:0;padding-left:0;padding-right:0}}.page-info-row[_ngcontent-%COMP%]{background-color:var(--color-background);margin-top:30px;padding:20px;border-radius:var(--radius-md);box-shadow:0 3px 26px #0003}.page-info-extra[_ngcontent-%COMP%]{background-color:var(--info);padding:20px;border-radius:var(--radius-md);background:var(--info);margin-bottom:30px}.page-info-profile[_ngcontent-%COMP%]{display:flex;justify-content:center;margin-bottom:20px}.page-info-picture[_ngcontent-%COMP%]{border-radius:var(--radius-pill);width:180px;height:180px;background-position:center center}.info-icon[_ngcontent-%COMP%]{margin-right:10px}.info-list[_ngcontent-%COMP%]{list-style:none;padding-left:0;margin-bottom:0}.info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{position:relative;padding-left:30px;margin-bottom:10px}.info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child{margin-bottom:0!important}.info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:before{content:"";position:absolute;left:0}.info-list-job[_ngcontent-%COMP%]:before{content:"\\f8fe"!important;font-family:bootstrap-icons;font-size:18px}.info-list-where[_ngcontent-%COMP%]:before{content:"\\f64b"!important;font-family:bootstrap-icons;font-size:18px}.info-list-company[_ngcontent-%COMP%]:before{content:"\\f876"!important;font-family:bootstrap-icons;font-size:18px}.info-list-email[_ngcontent-%COMP%]:before{content:"\\f32c"!important;font-family:bootstrap-icons;font-size:18px}@media (min-width: 992px){.page-info-extra[_ngcontent-%COMP%]{margin-right:20px;height:410px}}@media (min-width: 768px) and (max-width: 991.98px){.page-info-profile[_ngcontent-%COMP%]{margin-bottom:0;justify-content:flex-start}}@media (max-width: 575.98px){.education-timeline[_ngcontent-%COMP%]:before{content:none}}.skill-row[_ngcontent-%COMP%]{margin-bottom:30px}.skill-row-last[_ngcontent-%COMP%]{margin-bottom:0}.about-container[_ngcontent-%COMP%]{margin-top:40px;padding-left:30px;padding-right:30px}.about-list[_ngcontent-%COMP%]{list-style:none;padding-left:0}.language-card[_ngcontent-%COMP%]{margin-bottom:15px}']})}}return e})(),TV=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-immersive-page"]],decls:7,vars:0,consts:[["position","-1 0.5 -3","rotation","0 0 0","color","#4CC3D9"],["position","-0.2 0.2 0.45","radius","0.10"],["position","0.2 0.2 0.45","radius","0.10"],["position","0 -0.1 0.5","height","0.08","width","0.35","depth","0.1"],["position","0 0 -4","rotation","-90 0 0","width","4","height","4","color","#7BC8A4"],["color","#ECECEC"]],template:function(i,o){1&i&&(c(0,"a-scene")(1,"a-box",0),m(2,"a-sphere",1)(3,"a-sphere",2)(4,"a-box",3),u(),m(5,"a-plane",4)(6,"a-sky",5),u())}})}}return e})();const MV=function(e){return{"background-image":e}};let Vi=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-project-cover"]],inputs:{title:"title",image:"image"},decls:3,vars:4,consts:[[1,"project-cover","text-white","p-4",3,"ngStyle"],[1,"project-name"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"h1",1),f(2),u()()),2&i&&(A("ngStyle",Ri(2,MV,'url("'+o.image+'")')),M(2),Le(o.title))},dependencies:[_u],styles:[".project-cover[_ngcontent-%COMP%]{background-position:center center;background-size:cover;background-attachment:fixed;height:100vh;display:flex;justify-content:center;align-items:center;background-color:#00000080;background-blend-mode:multiply}.project-name[_ngcontent-%COMP%]{text-align:center;font-size:3rem}@media (min-width: 576px){.project-name[_ngcontent-%COMP%]{font-size:3.2rem}}@media (min-width: 768px){.project-name[_ngcontent-%COMP%]{font-size:4rem}}@media (min-width: 992px){.project-name[_ngcontent-%COMP%]{font-size:4.5rem}}"]})}}return e})(),IV=(()=>{class e{constructor(t){this.sanitizer=t,this.projects=[{name:"bookflix",about:"Bookflix is a simple system in which you can find books you\u2019re looking for, of any genre.",what:"Group project",where:"Universidad Polit\xe9cnica de Madrid",url:"https://www.fi.upm.es/?pagina=2235",duration:"September 2019 - June 2020",tools:["Figma","User-Centered Design","Interviews","Usability Testing","SUS","UEQ"]},{name:"pearly",about:"Pearly is an online platform where people can play tabletop games and game creators can test their new games for design and feasibility. Through the system, they can search for other players to play with and explore new games. Game creators can create new games from scratch or modify already existing ones. For example, a user can create his own version of an existing game, changing some rules or modifying the design of cards. In the system are included some statistics and surveys (for example: how many people played a particular game, how long the match was, the average time taken per turn). These statistics are useful for game creators to test the game, but also for players in choosing a game to play.",what:"Group project",where:"Universidad Polit\xe9cnica de Madrid",url:"https://www.fi.upm.es/?pagina=2235",duration:"February 2020 - June 2020",github:"https://github.com/miriampunzi/Pearly",tools:["Figma","Android Studio","User-Centered Design","Interviews","Ethnographical observations","Usability Testing"]},{name:"espoora",about:"In this project, we designed and analyzed the business potential of Espoora, a platform facilitating event publication, management, and participation in Espoo. We aim to enhance tourists' travel organization and discovery of city offerings, while streamlining event organizers' tasks. Our platform benefits not only visitors and organizers but also local businesses seeking visibility to those exploring or unfamiliar with the city.",what:'EIT Summer School: "Design Thinking and Scaling Services for Cities"',where:"Aalto University",url:"https://www.eiturbanmobility.eu/partners/aalto-university/",duration:"2 August 2020 \u2013 15 August 2020",tools:["Design Thinking","Personas","Scenarios","Business Modelling","SWOT Analysis","Value Proposition Canvas","Pitching"]},{name:"insignum",about:"InSignum is an interactive system to assist deaf people in their daily life at home. It consists of a smartwatch application and connected directional lights around the house, warning the user of the nature and the location of sounds at home. When something noisy is happening in the house, the smartwatch starts to vibrate, and the app displays what is happening. At the same time, the directional lights turn on guiding the user to the correct location of the sound. The color of the lights indicates the seriousness of the cause of the noise. The combination of the smartwatch app and the directional lights is to don't force users to always have the smartwatch and to have a backup system in case one of the two is not working properly. We tested the system by building a doll-house prototype with Arduino and emulating a smartwatch with Android Studio.",what:"Group project",where:"Universit\xe9 Paris-Saclay",url:"https://www.universite-paris-saclay.fr/en/education/master/computer-science/m2-human-computer-interaction",duration:"September 2020 - October 2020",video:this.getSafeVideoUrl("https://www.youtube.com/embed/iKftsyKDiDo?rel=0"),github:"https://github.com/miriampunzi/WithoutHearing",tools:["Android Studio","Arduino","User-Centered Design","Interviews","Paper Doll-House","Smartwatch"]},{name:"popupbreak",about:"PopUpBreak is a well-being desktop app with an emotional Virtual Coach (VC) that helps users in maintaining good practices for sedentary workers, as well as teaching new ones and keeping track of them. The VC can be customized by the user and, through a pop-up notification on the computer screen, it reminds them to do a pause, eye breaks, drink water, and others. Moreover, the application gives also some recommendations (e.g. how often a person should relax the eyes while working in front of a PC) and summarizes the activities done day by day. We believe that this system encourages people to work more healthily, avoiding the main consequences of a sedentary lifestyle. We use virtual coaching to reinforce users' behaviour, leading to acquiring good habits. ",what:"Group project",where:"Universit\xe9 Paris-Saclay",url:"https://www.universite-paris-saclay.fr/en/education/master/computer-science/m2-human-computer-interaction",duration:"November 2020 - December 2020",github:"https://github.com/mariacamilarg/popupbreak",tools:["Figma","Java Swing","MARC","User-Centered Design","Interviews","Emotion Design"]},{name:"situatedmemories",about:"In this project, we created a prototype of an AR-based application that allows people to attach memories to physical objects. The prototype recognizes 3D objects and shows all the attached digital media (like old photos, videos, or annotations) as floating bubbles around the item. Then, the user can retrieve the memories or save new ones. We aim to amplify users' nostalgic feelings when they look at their past memories situated in their special object, as well as make them aware of the story of that object. ",what:"Group project",where:"Universit\xe9 Paris-Saclay",url:"https://www.universite-paris-saclay.fr/en/education/master/computer-science/m2-human-computer-interaction",duration:"January 2021 - February 2021",video:this.getSafeVideoUrl("https://www.youtube.com/embed/DLVnXWCYp-4?rel=0"),tools:["AR","Unity","Figma","Vuforia","Mobile App"]},{name:"nonverbalbehaviour",about:"This research work investigates the user experience of an alternative method to teach nonverbal behavior to Embodied Conversational Agents (ECAs) in immersive environments. We overcome the limitations of the existing approaches proposing a VR game in which the player takes an active role in improving the learning models of the agents. The study explores how a game interaction in an immersive environment can improve the user experience in performing this interactive task, sharing the same space with the learning agents. ",what:"Master thesis",where:"LISN Lab @ Universit\xe9 Paris-Saclay",url:"https://www.lisn.upsaclay.fr/",duration:"April 2021 - August 2021",publicationUrl:"https://dl.acm.org/doi/10.1145/3490100.3516475",publication:"DOI: 10.1145/3490100.3516475",github:"https://github.com/miriampunzi/AuditionRoom",tools:["VR","Unity","Reinforcement Learning","ML-Agents","Gamification","Optitrack Motion Capture","Final IK","Usability Testing"]},{name:"concertrandomization",about:"This Unity application automatically generates thousands of images of random concert scenarios, with the corresponding labeled version of the image according to the category of the elements. The aim of the program is to generate enough data to train a neural network for semantic segmentation applied to concert photos.",what:"Work as Research Assistant",where:"EventLab",url:"https://www.event-lab.org/",duration:"April 2022 - September 2022",tools:["Unity","Semantic Segmentation","SMPL Model","Cinemachine","Post-Processing","Matlab"]},{name:"racoomba",about:"Get ready for a wild and wacky adventure in Racoomba! Join a mischievous trio of little chubby racoon thieves as they embark on a mission to swipe snacks and treasures from a house where the owners are away while evading the evil and relentless pursuit of robotic guardians! Navigate the house in search of treasure while avoiding a simple hoovering robot, or its counterparts armed with a circular saw, some dynamite or a shocking taser. Delay them by destroying furniture and throwing objects. Grab your treasure and bring them out of the house! Can you lead this band of little chubby furry thieves to victory or will the robots catch them in the act? ",what:"Game of my Global Game Jam 2024",duration:"27-28 January 2024 (48h)",publicationUrl:"https://globalgamejam.org/games/2024/raccoon-project-3",publication:"GGJ24 dashboard",github:"https://github.com/TheL94/GGJ24",video:this.getSafeVideoUrl("https://www.youtube.com/embed/3uZRMXiv-Rw"),tools:["Unity","Game Design","3D Modelling"]}]}getSafeVideoUrl(t){return this.sanitizer.bypassSecurityTrustResourceUrl(t)}static{this.\u0275fac=function(i){return new(i||e)(L(ag))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function NV(e,n){if(1&e&&(c(0,"li",15),f(1),u()),2&e){const t=G();M(1),un(" ",t.project[0].what," ")}}function OV(e,n){if(1&e&&(c(0,"li",16)(1,"a",17),f(2),u()()),2&e){const t=G();M(1),A("href",t.project[0].url,Dn),M(1),Le(t.project[0].where)}}function AV(e,n){if(1&e&&(c(0,"li",18),f(1),u()),2&e){const t=G();M(1),un(" ",t.project[0].duration," ")}}function RV(e,n){if(1&e&&(c(0,"li",19)(1,"a",20)(2,"small"),f(3),u()()()),2&e){const t=G();M(1),A("href",t.project[0].publicationUrl,Dn),M(2),Le(t.project[0].publication)}}function xV(e,n){if(1&e&&(c(0,"li",21)(1,"a",17),f(2,"GitHub repo"),u()()),2&e){const t=G();M(1),A("href",t.project[0].github,Dn)}}function PV(e,n){if(1&e&&(c(0,"div",24)(1,"span",25),f(2),u()()),2&e){const t=n.index,i=G(2);M(2),Le(i.project[0].tools[t])}}function kV(e,n){if(1&e&&(c(0,"li",22),B(1,PV,3,1,"div",23),u()),2&e){const t=G();M(1),A("ngForOf",t.project[0].tools)}}function FV(e,n){if(1&e&&(c(0,"div",26)(1,"div",27)(2,"div",28),m(3,"iframe",29),u()()()),2&e){const t=G();M(3),A("src",t.project[0].video,Zf)}}let Bi=(()=>{class e{constructor(t,i){this.service=t,this.sanitizer=i}ngOnInit(){this.project=this.service.projects.filter(t=>t.name==this.projectName)}getSafeVideoUrl(t){return this.sanitizer.bypassSecurityTrustResourceUrl(t)}static{this.\u0275fac=function(i){return new(i||e)(y(IV),y(ag))}}static{this.\u0275cmp=se({type:e,selectors:[["app-info-section"]],inputs:{projectName:"projectName"},decls:17,vars:8,consts:[[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background",2,"padding-bottom","30px"],[1,"row"],[1,"col-12","col-lg-8"],["sectionTitle","About"],[1,"col","page-info-extra"],[1,"info-list"],["class","info-list-what",4,"ngIf"],["class","info-list-where",4,"ngIf"],["class","info-list-duration",4,"ngIf"],["class","info-list-publication",4,"ngIf"],["class","info-list-github",4,"ngIf"],["class","info-list-tools",4,"ngIf"],["div","","class","row mt-4",4,"ngIf"],[1,"info-list-what"],[1,"info-list-where"],["target","_blank",3,"href"],[1,"info-list-duration"],[1,"info-list-publication"],["target","_blank",1,"text-truncate",3,"href"],[1,"info-list-github"],[1,"info-list-tools"],["style","display: inline; margin-right: 3px",4,"ngFor","ngForOf"],[2,"display","inline","margin-right","3px"],[1,"badge","tool-badge"],["div","",1,"row","mt-4"],[1,"col-12"],[1,"embed-responsive","embed-responsive-16by9"],["allowfullscreen","",1,"embed-responsive-item",3,"src"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3)(4,"div",4)(5,"app-page-section",5)(6,"p"),f(7),u()()(),c(8,"div",6)(9,"ul",7),B(10,NV,2,1,"li",8),B(11,OV,3,2,"li",9),B(12,AV,2,1,"li",10),B(13,RV,4,2,"li",11),B(14,xV,3,1,"li",12),B(15,kV,2,1,"li",13),u()()(),B(16,FV,4,1,"div",14),u()()()),2&i&&(M(7),un(" ",o.project[0].about," "),M(3),A("ngIf",o.project[0].what),M(1),A("ngIf",o.project[0].where),M(1),A("ngIf",o.project[0].duration),M(1),A("ngIf",o.project[0].publication),M(1),A("ngIf",o.project[0].github),M(1),A("ngIf",o.project[0].tools),M(1),A("ngIf",o.project[0].video))},dependencies:[Nn,Fi,mi],styles:['.page-info-row[_ngcontent-%COMP%]{background-color:var(--color-background);margin-top:30px;padding:20px;border-radius:var(--radius-md);box-shadow:0 3px 26px #0003}.page-info-extra[_ngcontent-%COMP%]{background:var(--info);padding:20px;border-radius:var(--radius-md);color:var(--icon);margin:0 20px}.info-icon[_ngcontent-%COMP%]{margin-right:10px}.info-list[_ngcontent-%COMP%]{list-style:none;padding-left:0;margin-bottom:0}.info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{position:relative;padding-left:30px;margin-bottom:10px}.info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child{margin-bottom:0!important}.info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:before{content:"";position:absolute;left:0}.info-list-what[_ngcontent-%COMP%]:before{content:"\\f8fe"!important;font-family:bootstrap-icons;font-size:18px}.info-list-where[_ngcontent-%COMP%]:before{content:"\\f64b"!important;font-family:bootstrap-icons;font-size:18px}.info-list-duration[_ngcontent-%COMP%]:before{content:"\\f291"!important;font-family:bootstrap-icons;font-size:18px}.info-list-publication[_ngcontent-%COMP%]:before{content:"\\f444"!important;font-family:bootstrap-icons;font-size:18px}.info-list-github[_ngcontent-%COMP%]:before{content:"\\f3ed"!important;font-family:bootstrap-icons;font-size:18px}.info-list-tools[_ngcontent-%COMP%]:before{content:"\\f5db"!important;font-family:bootstrap-icons;font-size:18px}.embed-responsive-16by9[_ngcontent-%COMP%]{position:relative;width:100%;padding-bottom:56.25%}.embed-responsive-16by9[_ngcontent-%COMP%] iframe[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;top:0;left:0}']})}}return e})(),jV=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-arrow-images"]],inputs:{imgBefore:"imgBefore",imgAfter:"imgAfter"},decls:8,vars:2,consts:[[1,"arrow-image-section"],[1,"row","d-flex","flex-wrap","align-items-center"],[1,"col-12","col-md-5","d-flex","justify-content-center"],[1,"img-fluid",3,"src"],[1,"col","d-flex","justify-content-center"],["src","/assets/images/Projects/arrow-horizontal.png",1,"img-fluid","arrow-image"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"div",1)(2,"div",2),m(3,"img",3),u(),c(4,"div",4),m(5,"img",5),u(),c(6,"div",2),m(7,"img",3),u()()()),2&i&&(M(3),A("src",o.imgBefore,Dn),M(4),A("src",o.imgAfter,Dn))},styles:[".arrow-image-section[_ngcontent-%COMP%]{margin:5px 0}@media (max-width: 767.98px){.arrow-image[_ngcontent-%COMP%]{content:url(/assets/images/Projects/arrow-vertical.png);height:100px;margin:20px}}"]})}}return e})();const LV=[{path:"",component:YC},{path:"home",component:YC},{path:"aframe",component:TV},{path:"concert-randomization",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-concert-randomization"]],decls:253,vars:0,consts:[["title","Concert Randomization","image","assets/images/project-covers/ConcertRandomization.gif"],[1,"container"],["projectName","concertrandomization"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Problem"],[1,"label-strong"],[1,"row","mt-4","mb-4","d-flex","justify-content-center"],["imgBefore","assets/images/Projects/concert-randomization/before-segmentation.jpg","imgAfter","/assets/images/Projects/concert-randomization/after-segmentation.jpg"],["sectionTitle","Idea"],[1,"list-no-margin"],[1,"row","d-flex","justify-content-center"],["imgBefore","assets/images/Projects/concert-randomization/before-segmentation-2.jpg","imgAfter","/assets/images/Projects/concert-randomization/after-segmentation-2.jpg"],["sectionTitle","Elements to Randomize","sectionSubtitle","Places"],[1,"row","row-cols-2","row-cols-xl-3","g-4"],[1,"col"],["src","assets/images/Projects/concert-randomization/place-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-02.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-03.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-04.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-05.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-06.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-07.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-08.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-09.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-10.jpg",1,"img-fluid"],["sectionSubtitle","People"],[1,"row","row-cols-3","row-cols-md-4","row-cols-lg-6","g-4"],["src","assets/images/Projects/concert-randomization/people-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/people-02.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/people-03.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/people-04.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/people-05.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/people-06.jpg",1,"img-fluid"],["sectionSubsubtitle","Body shape randomization"],["href","https://smpl.is.tue.mpg.de/","target","_blank"],["src","assets/images/Projects/concert-randomization/body-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/body-02.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/body-03.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/body-04.jpg",1,"img-fluid"],["sectionSubsubtitle","Texture randomization"],["src","assets/images/Projects/concert-randomization/texture-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/texture-02.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/texture-03.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/texture-04.jpg",1,"img-fluid"],["sectionSubtitle","Musical instruments"],[1,"row","row-cols-4","row-cols-md-4","row-cols-lg-6","g-4"],["src","assets/images/Projects/concert-randomization/instrument-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/instrument-02.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/instrument-03.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/instrument-04.jpg",1,"img-fluid"],["sectionSubtitle","Objects"],["src","assets/images/Projects/concert-randomization/object-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/object-03.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/object-04.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/object-05.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/object-06.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/object-08.jpg",1,"img-fluid"],["sectionSubtitle","Smoke"],[1,"row","row-cols-1","row-cols-md-2","g-4"],["src","assets/images/Projects/concert-randomization/smoke-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/smoke-02.jpg",1,"img-fluid"],["sectionSubtitle","Lights"],["src","assets/images/Projects/concert-randomization/lights-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/lights-02.jpg",1,"img-fluid"],["sectionSubtitle","Sky"],["src","assets/images/Projects/concert-randomization/sky-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/sky-02.jpg",1,"img-fluid"],["sectionTitle","Development","sectionSubtitle","Placement of spawning points inside the scene"],["src","assets/images/Projects/concert-randomization/spawning-points-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/spawning-points-02.jpg",1,"img-fluid"],[1,"square-element"],[1,"square","square-musician"],[1,"square","square-dancer"],[1,"square","square-object"],[1,"square","square-smoke"],["sectionSubtitle","Crowd setup"],[1,"row","mt-2","g-4"],[1,"col-md-6","col-lg-4","col-xl-3"],["src","assets/images/Projects/concert-randomization/crowd-setup-01.jpg",1,"img-fluid"],[1,"col-md-6","col-lg-8","col-xl-6"],["src","assets/images/Projects/concert-randomization/crowd-setup-02.jpg",1,"img-fluid"],["sectionSubtitle","Animation generation"],["href","https://www.kinetix.tech/","target","_blank"],[1,"col-lg-8","col-xl-6"],["imgBefore","assets/images/Projects/concert-randomization/animation-generation-01.gif","imgAfter","/assets/images/Projects/concert-randomization/animation-generation-02.gif"],["sectionSubtitle","Timeline setup"],["href","https://docs.unity3d.com/Packages/com.unity.cinemachine@2.3/manual/index.html","target","_blank"],["src","assets/images/Projects/concert-randomization/timeline-setup.jpg",1,"img-fluid"],["sectionSubtitle","Postprocessing"],["imgBefore","assets/images/Projects/concert-randomization/pre-postprocessing.jpg","imgAfter","assets/images/Projects/concert-randomization/after-postprocessing.jpg"],["sectionSubtitle","Algorithm (pseudocode)"],[1,"row"],["src","assets/images/Projects/concert-randomization/algorithm.png",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/algorithm.jpg",1,"img-fluid","mt-2"],["sectionSubtitle","When you launch the program, you're gonna see something like this..."],["src","assets/images/Projects/concert-randomization/video-algorithm.jpg",1,"img-fluid",2,"width","100%"],["sectionTitle","Testing","sectionSubtitle","Generated data"],[1,"col-lg-8"],["src","assets/images/Projects/concert-randomization/generated-data.jpg",1,"img-fluid","mt-2"],["sectionSubtitle","Data preparation"],[1,"col-12","col-md-6","col-lg-3"],[1,"col-12","col-md-6","col-lg-4"],[1,"col","mt-4","mt-md-0"],["sectionSubtitle","Network used in Matlab"],["sectionSubtitle","Results"],[1,"row","mb-4"],["src","assets/images/Projects/concert-randomization/results-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/results-02.jpg",1,"img-fluid"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6),f(7," We want to train a neural network that applies "),c(8,"label",7),f(9,"semantic segmentation"),u(),f(10," to concert photos to classify: musicians, musical instruments, stage decorations, etc. "),c(11,"div",8)(12,"div",4),m(13,"app-arrow-images",9),u()(),f(14," Thousands of images (original and labeled ones) are needed ("),c(15,"label",7),f(16,"Supervised Learning"),u(),f(17,") "),c(18,"p"),f(19,"But: the images are labeled by hand using a lot of patience!!"),u()()()()(),c(20,"div",3)(21,"div",4)(22,"div",5)(23,"app-page-section",10)(24,"label",7),f(25,"Automate the process!"),u(),f(26," The program: "),c(27,"ul")(28,"li"),f(29," Generates random concert scenarios (random locations, musicians, musical instruments, ... with random shapes, textures and animations) "),u(),c(30,"li"),f(31," Takes N snapshots of the generated scenario from random viewpoints "),u(),c(32,"li"),f(33,"Annotates the photos automatically."),u()(),f(34," To improve the network accuracy and avoid over-fitting, the concert scenarios to generate have to be as varied as possible: "),c(35,"ul",11)(36,"li"),f(37,"random places, people, musical instruments, objects"),u(),c(38,"li"),f(39,"random positions, textures, shapes"),u(),c(40,"li"),f(41,"random special effects, lights"),u()()(),c(42,"app-page-section")(43,"div",12)(44,"div",4),m(45,"app-arrow-images",13),u()()()()()(),c(46,"div",3)(47,"div",4)(48,"div",5)(49,"app-page-section",14)(50,"div",15)(51,"div",16),m(52,"img",17),u(),c(53,"div",16),m(54,"img",18),u(),c(55,"div",16),m(56,"img",19),u(),c(57,"div",16),m(58,"img",20),u(),c(59,"div",16),m(60,"img",21),u(),c(61,"div",16),m(62,"img",22),u(),c(63,"div",16),m(64,"img",23),u(),c(65,"div",16),m(66,"img",24),u(),c(67,"div",16),m(68,"img",25),u(),c(69,"div",16),m(70,"img",26),u()()(),c(71,"app-page-section",27)(72,"div",28)(73,"div",16),m(74,"img",29),u(),c(75,"div",16),m(76,"img",30),u(),c(77,"div",16),m(78,"img",31),u(),c(79,"div",16),m(80,"img",32),u(),c(81,"div",16),m(82,"img",33),u(),c(83,"div",16),m(84,"img",34),u()()(),c(85,"app-page-section",35)(86,"p"),f(87," HOW: "),c(88,"a",36),f(89,"Skinned Multi-Person Linear Model"),u()(),c(90,"div",28)(91,"div",16),m(92,"img",37),u(),c(93,"div",16),m(94,"img",38),u(),c(95,"div",16),m(96,"img",39),u(),c(97,"div",16),m(98,"img",40),u()()(),c(99,"app-page-section",41)(100,"div",28)(101,"div",16),m(102,"img",42),u(),c(103,"div",16),m(104,"img",43),u(),c(105,"div",16),m(106,"img",44),u(),c(107,"div",16),m(108,"img",45),u()()(),c(109,"app-page-section",46)(110,"div",47)(111,"div",16),m(112,"img",48),u(),c(113,"div",16),m(114,"img",49),u(),c(115,"div",16),m(116,"img",50),u(),c(117,"div",16),m(118,"img",51),u()()(),c(119,"app-page-section",52)(120,"div",47)(121,"div",16),m(122,"img",53),u(),c(123,"div",16),m(124,"img",54),u(),c(125,"div",16),m(126,"img",55),u(),c(127,"div",16),m(128,"img",56),u(),c(129,"div",16),m(130,"img",57),u(),c(131,"div",16),m(132,"img",58),u()()(),c(133,"app-page-section",59)(134,"div",60)(135,"div",16),m(136,"img",61),u(),c(137,"div",16),m(138,"img",62),u()()(),c(139,"app-page-section",63)(140,"div",60)(141,"div",16),m(142,"img",64),u(),c(143,"div",16),m(144,"img",65),u()()(),c(145,"app-page-section",66)(146,"div",60)(147,"div",16),m(148,"img",67),u(),c(149,"div",16),m(150,"img",68),u()()()()()(),c(151,"div",3)(152,"div",4)(153,"div",5)(154,"app-page-section",69)(155,"p"),f(156,"HOW: Overriding the method OnDrowGizmos()"),u(),c(157,"div",60)(158,"div",16),m(159,"img",70),u(),c(160,"div",16),m(161,"img",71),u()(),c(162,"div",72),m(163,"div",73),f(164," Musician Spawn Point: Select type of musician (singer, guitar, piano, drums, cello, violin, ...) "),u(),c(165,"div",72),m(166,"div",74),f(167," Dancer Spawn Point: Select dance modality (sitted on a chair, sitted on the ground, standing) "),u(),c(168,"div",72),m(169,"div",75),f(170," Object Spawn Point: Select type of object "),u(),c(171,"div",72),m(172,"div",76),f(173," Smoke Spawn Point "),u()(),c(174,"app-page-section",77),f(175," Place a crowd in the scene, which will contain random people (with random textures and body shapes), with random separation and density between them. "),c(176,"div",78)(177,"div",79),m(178,"img",80),u(),c(179,"div",81),m(180,"img",82),u()()(),c(181,"app-page-section",83),f(182," HOW: "),c(183,"a",84),f(184,"Kinetix"),u(),c(185,"div",12)(186,"div",85),m(187,"app-arrow-images",86),u()()(),c(188,"app-page-section",87)(189,"p"),f(190," HOW: "),c(191,"a",88),f(192,"Cinemachine Virtual Cameras"),u()(),m(193,"img",89),u(),c(194,"app-page-section",90),m(195,"app-arrow-images",91),u(),c(196,"app-page-section",92)(197,"div",93)(198,"div",16),m(199,"img",94),u(),c(200,"div",16),f(201," Only write the number of how many snapshots you want to generate (numCaptures), and then click play. "),m(202,"img",95),u()()(),c(203,"app-page-section",96),m(204,"img",97),u()()()(),c(205,"div",3)(206,"div",4)(207,"div",5)(208,"app-page-section",98),f(209," 10.000 images with the correspondent labeled ones "),c(210,"div",93)(211,"div",99),m(212,"img",100),u()()(),c(213,"app-page-section",101)(214,"div",93)(215,"div",102)(216,"label",7),f(217,"Database division"),u(),f(218,": "),c(219,"ul")(220,"li"),f(221,"Training set: 60%"),u(),c(222,"li"),f(223,"Validation set: 20%"),u(),c(224,"li"),f(225,"Testing set: 20%"),u()()(),c(226,"div",103)(227,"label",7),f(228,"Data augmentation"),u(),f(229,":"),m(230,"br"),f(231," Improve network accuracy by randomly transforming the original data during training "),u(),c(232,"div",104)(233,"label",7),f(234,"Class balancing with class weighting"),u(),f(235,":"),m(236,"br"),f(237," Give more importance to less dominant classes, because the learning is biased in favor of the classes with more pixels (e.g. the floor) "),u()()(),c(238,"app-page-section",105)(239,"ul")(240,"li"),f(241," Deeplab v3+: convolutional neural network (CNN) designed for semantic image segmentation "),u(),c(242,"li"),f(243," Resnet-18: pre-trained network that initializes the weights for Deeplab v3+ "),u()()(),c(244,"app-page-section",106),f(245," With only 200 images: "),c(246,"div",107)(247,"div",99),m(248,"img",108),u()(),f(249," Test the network on one image (the green and magenta regions highlight areas where the segmentation results differ from the expected ground truth): "),c(250,"div",93)(251,"div",99),m(252,"img",109),u()()()()()()())},dependencies:[mi,Vi,Bi,jV],styles:[".square-element[_ngcontent-%COMP%]{display:flex;margin-top:5px}.square[_ngcontent-%COMP%]{flex:none;width:20px;height:20px;margin-right:10px;margin-top:2px}.square-musician[_ngcontent-%COMP%]{background-color:#00f}.square-dancer[_ngcontent-%COMP%]{background-color:#0f0}.square-object[_ngcontent-%COMP%]{background-color:red}.square-smoke[_ngcontent-%COMP%]{background-color:#00e1ff}"]})}}return e})()},{path:"nonverbal-behaviour",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-nonverbal-behaviour"]],decls:302,vars:0,consts:[["title","Non-verbal Behaviour Reinfocement in VR","image","assets/images/project-covers/Cover NonverbalBehaviour.gif"],[1,"container"],["projectName","nonverbalbehaviour"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Problem"],["sectionTitle","Solution"],["sectionSubtitle","Concepts","sectionSubsubtitle",""],[1,"row"],[1,"col-lg-4"],["sectionTitle","Design","sectionSubtitle","Research questions"],[1,"row","g-4"],[1,"col-2","col-md-1","big-number"],[1,"col-10","col-md-5"],["sectionSubtitle","Users"],[1,"col-6","col-lg-4","d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/nonverbal-behaviour/user-01.jpg",1,"img-fluid","mb-2"],[1,"text-center"],["src","assets/images/Projects/nonverbal-behaviour/user-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionTitle","Game Idea: Casting for a Movie"],["sectionSubtitle","Characters"],[1,"row","g-4","mt-1"],[1,"col-3","col-lg-2"],["src","assets/images/Projects/nonverbal-behaviour/character-01.jpg",1,"img-fluid"],[1,"col-9","col-lg-4"],["src","assets/images/Projects/nonverbal-behaviour/character-02.jpg",1,"img-fluid"],["src","assets/images/Projects/nonverbal-behaviour/character-03.jpg",1,"img-fluid"],["sectionSubtitle","Environment"],[1,"col","d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/nonverbal-behaviour/environment-01.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/nonverbal-behaviour/environment-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionSubtitle","Sequence of events"],[1,"col-6","col-lg-4"],["src","assets/images/Projects/nonverbal-behaviour/events.jpg",1,"img-fluid",2,"width","100%"],[1,"col-12","col-lg-8"],[1,"row","mt-2"],[1,"col-lg-8"],[1,"ratio","ratio-16x9"],["src","https://www.youtube.com/embed/fDzpI3Kcvt4?rel=0","allowfullscreen",""],[1,"col"],["sectionSubtitle","Game interaction"],[1,"row","mb-4"],["src","assets/images/Projects/nonverbal-behaviour/interaction.jpg",1,"img-fluid"],["sectionTitle","Development","sectionSubtitle","Architecture of the system"],["src","assets/images/Projects/nonverbal-behaviour/architecture.jpg",1,"img-fluid",2,"background-color","white"],[1,"col-12","col-lg-4"],["sectionSubtitle","The environment"],["sectionSubtitle","Player motions recording"],["src","https://www.youtube.com/embed/e1_8-f_k7m4?rel=0","allowfullscreen",""],["sectionSubtitle","Motions generation for virtual actors"],["src","assets/images/Projects/nonverbal-behaviour/ik.jpg",1,"img-fluid"],["sectionSubtitle","Motions recording for human actors"],["src","assets/images/Projects/nonverbal-behaviour/recording-01.jpg",1,"img-fluid"],["src","assets/images/Projects/nonverbal-behaviour/recording-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/nonverbal-behaviour/recording-03.jpg",1,"img-fluid"],["sectionTitle","Experiment Design"],[1,"col-lg-5"],["src","assets/images/Projects/nonverbal-behaviour/experiment.jpg",1,"img-fluid"],["sectionSubtitle","Tasks"],[1,"col-12","col-md-6"],["sectionSubtitle","Evaluation methods"],["sectionTitle","Results"],["sectionSubtitle","Common","sectionSubsubtitle","Actor performances"],["sectionSubsubtitle","Smart table interaction"],["sectionSubsubtitle","Recording of emotion"],["sectionTitle","Future Work"],[1,"col-12","col-md-6","col-lg-4"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6)(7,"p"),f(8," Humans don't communicate only through words: the effectiveness of communication depends also on the nonverbal behavior content. Embodied Conversational Agents (ECAs) deserve the same: they can't just look like real humans, they also have to behave like them, communicating verbally and nonverbally, to enhance a good user experience. However, designing proper nonverbal behavior is challenging because of the risk of falling into the uncanny valley. "),u(),c(9,"p"),f(10," So far, to generate nonverbal behavior is through interpolation of keyframes or through motion capture using a body-tracking suit. However, these approaches lack adaptability, because they require either professional actors, particular technologies, too much data, or processing time. "),u()()()()(),c(11,"div",3)(12,"div",4)(13,"div",5)(14,"app-page-section",7),f(15," We want to explore a new approach for teaching nonverbal behavior to ECAs by creating a VR game, in which we gamify the process of the Human-in-the-Loop framework with human preferences. "),u(),c(16,"app-page-section",8)(17,"div",9)(18,"div",10)(19,"h4"),f(20,"VR Systems"),u(),c(21,"p"),f(22," The idea of sharing the same space with the learning agent leads to more effective training of the agent. "),u(),c(23,"p"),f(24," An immersive system provides the trainers with a means of visualization and improves the trainer experience. "),u()(),c(25,"div",10)(26,"h4"),f(27,"Human-in-the-Loop with human preferences"),u(),c(28,"p"),f(29," It learns a reward function from the human feedback, instead of using the human feedback directly as a reward function. "),u(),c(30,"p"),f(31," Users have just to express their preferences between different behavior performed by different agents (no demonstrations). "),u(),c(32,"p"),f(33," The amount of feedback from the human and the hours of experience required are reduced. "),u(),c(34,"p"),f(35," Comparisons are easier and faster to provide rather than giving an absolute numerical score. "),u()(),c(36,"div",10)(37,"h4"),f(38,"Gamification and Adaptive gameplay"),u(),c(39,"p"),f(40," We gamify the Human-in-the-Loop framework, placing the training of ECAs in a game scenario and creating a story around the learning task. "),u(),c(41,"p"),f(42," The AI is trained inside the game through the feedback of the player. They improve time by time, giving us the opportunity to create an adaptable game scenario according to the abilities of the user. "),u()()()()()()(),c(43,"div",3)(44,"div",4)(45,"div",5)(46,"app-page-section",11)(47,"div",12)(48,"div",13),f(49,"01"),u(),c(50,"div",14)(51,"h4"),f(52," How a game interaction can help in keeping engaged the users in performing the learning task? "),u(),f(53," Solving the machine learning problem of teaching nonverbal behavior is out of the scope of our work as we focus on the design of the human-system interaction. "),u(),c(54,"div",13),f(55,"02"),u(),c(56,"div",14)(57,"h4"),f(58," How users should interact with the framework in real-time applications? "),u(),c(59,"ul")(60,"li"),f(61,"How the player should give feedback to the agents."),u(),c(62,"li"),f(63," How the agent should observe the received feedback and the state of the environment to make a decision. "),u()()()()(),c(64,"app-page-section",15)(65,"div",12)(66,"div",16),m(67,"img",17),c(68,"h4",18),f(69,"Virtual Reality Gamers"),u()(),c(70,"div",16),m(71,"img",19),c(72,"h4",18),f(73,"Avatar Designers"),u()()()()()()(),c(74,"div",3)(75,"div",4)(76,"div",5)(77,"app-page-section",20)(78,"p"),f(79," The player takes the role of a movie director, who is looking for an actor for a masked character in a silent movie. Due to these particular constraints, the director has to hire an actor who better performs an emotion with the upper part of the body, without considering the facial expressions and speech. "),u(),c(80,"p"),f(81," Some aspiring actors go to the auditions for this part, but not all of them are professionals. The role of the director is to get rid of the bad actors who try to invade his audition through different rounds of the game. "),u()(),c(82,"app-page-section",21),f(83," Between the actors, some are driven by real humans and others are virtual agents. "),c(84,"div",22)(85,"div",23),m(86,"img",24),u(),c(87,"div",25)(88,"h4"),f(89,"Virtual Actor"),u(),c(90,"p"),f(91," Their performance is generated by the ML algorithm, in real-time. "),u(),c(92,"p"),f(93," Throughout their learning, the game becomes more and more difficult, because they become better at performing the emotions. "),u()(),c(94,"div",23),m(95,"img",26),u(),c(96,"div",25)(97,"h4"),f(98,"Human Actor"),u(),c(99,"p"),f(100,"Their performance is pre-recorded by human actors."),u()(),c(101,"div",23),m(102,"img",27),u(),c(103,"div",25)(104,"h4"),f(105,"Player"),u(),c(106,"p"),f(107,"Takes the role of the movie director."),u(),c(108,"p"),f(109," Doesn't know who between the actors is a \u201chuman\u201d or a \u201cvirtual\u201d agent. "),u(),c(110,"p"),f(111," Task: choose the best actor following their own personal taste. "),u()()()(),c(112,"app-page-section",28)(113,"div",12)(114,"div",29),m(115,"img",30),c(116,"h4",18),f(117,"Movie director's part"),u()(),c(118,"div",29),m(119,"img",31),c(120,"h4",18),f(121,"Actor's part"),u()()()(),c(122,"app-page-section",32)(123,"div",12)(124,"div",33),m(125,"img",34),u(),c(126,"div",35)(127,"ol")(128,"li"),f(129," The player performs an example of the emotion with only the upper part of the body. This motion is recorded to provide new data to the neural networks for the generation of the emotion. "),u(),c(130,"li"),f(131," One by one, all the actors appear in the audition room through the trapdoor to perform their emotion. After every performance, the director can ask for a replay. "),u(),c(132,"li"),f(133," The director, if needed, can call back an actor and ask for a replay of the previous performance. This phase can be skipped. "),u(),c(134,"li"),f(135," All the actors are called back in the room, appearing through the trapdoors. The director votes for the one who won the round. "),u()(),c(136,"p"),f(137," At the end of every round, the player could decide to do another one. "),u()()(),c(138,"div",36)(139,"div",37)(140,"div",38),m(141,"iframe",39),u()(),c(142,"div",40)(143,"p"),f(144," On the left, the virtual characters are training their ML models in the \u201cunderground\u201d. "),u(),c(145,"p"),f(146,"On the right, the user view with an actor on a trapdoor."),u()()()(),c(147,"app-page-section",41)(148,"div",42)(149,"div",37),m(150,"img",43),u()(),c(151,"p"),f(152,"The game experience is Seated VR."),u(),f(153," The interaction is situated in a smart table, where there are the following elements: "),c(154,"ul")(155,"li"),f(156," A screen that guides the user in the round, prompting statements and questions. For example \u201cNow it's the turn of the actor number 3. Are you ready?\u201d, \u201cDo you want to see a replay of the performance?\u201d, \u201cNow it's time to vote!\u201d. "),u(),c(157,"li"),f(158," A \u201cYES\u201d and a \u201cNO\u201d buttons, to answer the questions shown on the screen and proceed with the game round. "),u(),c(159,"li"),f(160," Some numbered buttons, that correspond to the actors, to vote for the best actor or to ask for a replay of a specific actor. "),u()()()()()(),c(161,"div",3)(162,"div",4)(163,"div",5)(164,"app-page-section",44)(165,"div",42)(166,"div",37),m(167,"img",45),u()(),c(168,"div",9)(169,"div",46)(170,"p"),f(171," The Human Actors are prerecorded-driven virtual characters, which reproduce an emotion selected from a database. The database was filled with animations directly playable in Unity, which were generated through a motion capture system using Optitrack Motive. "),u()(),c(172,"div",46)(173,"p"),f(174,' The Virtual Actors are the learning agents, with the 3 "brains". The ML-Agent Plugin gets as input the recorded emotion and the vote from the player, and the emotion-expressed gestures from the Virtual Actors. The Python side of the ML-Agent plugin is to execute the reinforcement learning algorithm for training the Virtual Actors. '),u()(),c(175,"div",46)(176,"p"),f(177," The Player interacts with the system through an HMD, HTC Vive controllers, and VIVE Tracker with Belt Strap. Their gestures are mapped onto a representing invisible avatar through Final Inverse Kinematics (Final IK). "),u()()()(),c(178,"app-page-section",47)(179,"p"),f(180," Tools: Unity ML-Agents Toolkit. Unfortunately, it doesn't provide a mechanism to learn a reward function from the human feedbacks, in order to be able to implement the Human-in-the-loop framework with human preferences. We implemented a temporary solution in which the agents only try to imitate the player movement recorded at the beginning. With this approach, it is possible to implement a reward function manually, but the feedback of the player is ignored. "),u(),c(181,"p"),f(182," Technology: HMD, HTC Vive controllers, and VIVE Tracker with Belt Strap to track users' chest movements. "),u()(),c(183,"app-page-section",48)(184,"div",36)(185,"div",37)(186,"div",38),m(187,"iframe",49),u()(),c(188,"div",40),f(189," There is an invisible character representing the real-time position of the player through Final IK and RootMotion. During the recording phase, all the rotations of the upper-body bones performed by this avatar are saved in CSV files. "),u()()(),c(190,"app-page-section",50)(191,"div",42)(192,"div",37),m(193,"img",51),u()(),f(194," Goal of the agent: imitate the user motion recorded at the beginning. The arms, head, and chest of the characters are moved using the Inverse Kinematic (IK) approach. Every character has 4 cubes used as targets for the IK: one for the left hand, one for the right hand, one for the head, and one for the chest. To imitate the player movement, every character has 3 neural networks learning in parallel: one for the left arm, one for the right arm, and one for the head and chest. Every neural network learns how to move the correspondent body part. Goal of the algorithm: predict the positions and rotations of the cubes used as targets for the IK. "),u(),c(195,"app-page-section",52)(196,"div",12)(197,"div",33),m(198,"img",53),u(),c(199,"div",33),m(200,"img",54)(201,"img",55),u(),c(202,"div",46),f(203," This is me performing some joyful motions while wearing the motion-tracking bodysuit. Tool used: OptiTrack Motion Capture System. We captured several human motions of different expressions of joy, directly playable in Unity. We created a database of 20 different performances of joy (10 made by a female interpreter and 10 by a male interpreter) to have different motions to apply on female and male avatars. "),u()()()()()(),c(204,"div",3)(205,"div",4)(206,"div",5)(207,"app-page-section",56)(208,"div",12)(209,"div",57),m(210,"img",58),u(),c(211,"div",40),f(212," Goal: investigate how game mechanisms can help in maintaining people engaged in an interactive learning task. HT: people in the gamified environment should remain engaged in the task for a longer time period and have a better user experience. How: we created another system that accomplishes the same objective of the main system, without having a game story built around it. The participants were divided equally into 2 groups: the first started testing the Game system and then switched to the other system, while the second did the opposite. "),u()()(),c(213,"app-page-section",59)(214,"div",12)(215,"div",60),f(216," For the Game system: \u201cImagine you are a movie director who organized a casting for an important role. This character wears a mask on his face for the entire movie and is always sitting. At the casting, 5 actors will show up. You have to vote for the one who best interprets the emotion of joy with the upper part of the body.\u201d "),u(),c(217,"div",60),f(218," For the No Game system: \u201cSelect the avatar who best performs the emotion of joy with the upper part of the body.\u201d "),u()()(),c(219,"app-page-section",61)(220,"ul")(221,"li"),f(222," Thinking-aloud method and observation (during the interaction with the systems) "),u(),c(223,"li"),f(224," Open-questions interview: "),c(225,"ol")(226,"li"),f(227,"What do you think about this system?"),u(),c(228,"li"),f(229,"Why did you decide to stop at that time?"),u(),c(230,"li"),f(231," Do you think the system accomplishes the goal of teaching avatars how to perform joy with upper-body language? "),u(),c(232,"li"),f(233," (FOR GAME SYSTEM) Which was your favorite part of the game? "),u(),c(234,"li"),f(235," (FOR GAME SYSTEM) Which was the part that you liked the least in the game? "),u(),c(236,"li"),f(237,"(FOR GAME SYSTEM) Would you play this game again?"),u(),c(238,"li"),f(239," (FOR GAME SYSTEM) Which was your favorite part of the game? "),u(),c(240,"li"),f(241," (FOR GAME SYSTEM) Which was the part that you liked the least in the game? "),u(),c(242,"li"),f(243,"What should be improved in the system?"),u(),c(244,"li"),f(245,"Which system do you prefer?"),u()()(),c(246,"li"),f(247,"SUS questionnaire"),u(),c(248,"li"),f(249,"GodSpeed questionnaire"),u(),c(250,"li"),f(251,"Presence questionnaire"),u()()()()()(),c(252,"div",3)(253,"div",4)(254,"div",5)(255,"app-page-section",62)(256,"p"),f(257," Our research question \u201cHow can a game interaction help in keeping the users engaged in performing the learning task?\u201d seems to be confirmed, since the data collected from all the evaluation methods show more positive outcomes in the Game one. "),u(),c(258,"p"),f(259," The fact that some participants started testing System A and others the System B did not affect at all the user experience. Most of the comments were in common between all the users. "),u(),c(260,"p"),f(261," Because of restrictions imposed by the COVID-19 crisis, it was possible to perform the experiments only with colleagues of the laboratory. So, the information collected through the experiments is biased due to the experience the test subjects have in Virtual Reality programming or Machine Learning techniques. We managed to find only 6 available participants. "),u(),c(262,"p"),f(263," What affected the user experience the most was the effectiveness of the system. The temporary solution for generating the agents' nonverbal behavior impacted the involvement in the game, sometimes decreasing the satisfaction factor. "),u()(),c(264,"app-page-section",63),f(265," Users laughing or scared, especially with impossible movements to perform in reality or weird positions of avatars. Some users noticed that the virtual characters were improving round by round. "),u(),c(266,"app-page-section",64),f(267," Almost all the users liked the SeatedVR experience and the pushing of the buttons on the smart table. One user found it too essential: they would have preferred to also manipulate some virtual objects. Some sentences prompted on the screen are not enough clear. "),u(),c(268,"app-page-section",65),f(269," Part that created more troubles! Some participants did not remember what that part was for, or they were not expecting that the actors were going to imitate the movement. Activity was found to be not intuitive enough. "),u(),c(270,"app-page-section"),f(271," The number of actors influenced the user experience "),c(272,"ul")(273,"li"),f(274," 2/6 users preferred to have more actors, because it implies more unpredictability due to the various performances, leading to a more fun experience. "),u(),c(275,"li"),f(276," 4/6 users preferred to have only 2 actors, because it is easier to keep the focus and it is easier to remember the performances. "),u()()()()()(),c(277,"div",3)(278,"div",4)(279,"div",5)(280,"app-page-section",66)(281,"div",12)(282,"div",67)(283,"h4"),f(284,"Improve ML algorithm"),u(),f(285," Validate the player's decision. Avoid impossible movements with the body by learning agents. "),u(),c(286,"div",67)(287,"h4"),f(288,"Reduce bias in testing population"),u(),f(289," Include the other users we focused on: virtual reality gamers without knowledge in machine learning. "),u(),c(290,"div",67)(291,"h4"),f(292,"Redesign recording of emotion"),u(),f(293," Try to increase the feeling of immersion without impacting the spontaneity of the movement. "),u(),c(294,"div",67)(295,"h4"),f(296,"Improve test design"),u(),f(297," Both systems should have the same number of performing actors since we discovered that it influences the user experience. "),u(),c(298,"div",67)(299,"h4"),f(300,"Explore new interactions"),u(),f(301," Include the navigation in the environment, where the player can go closer to virtual agents. Investigate the perception of the agents from a closer perspective and how this impacts the quality of the nonverbal behavior generated. "),u()()()()()()())},dependencies:[mi,Vi,Bi]})}}return e})()},{path:"situated-memories",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-situated-memories"]],decls:233,vars:0,consts:[["title","Situated Memories","image","assets/images/project-covers/Cover SituatedMemories.jpg"],[1,"container"],["projectName","situatedmemories"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Design Concept"],[1,"row","g-4"],[1,"col-2","col-md-1","big-number"],[1,"col-10","col-md-5"],["sectionTitle","Motivations"],["sectionTitle","Prototype"],[1,"row","mb-4"],[1,"col-lg-8"],["src","assets/images/Projects/situated-memories/prototype.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Navigation Map"],["src","assets/images/Projects/situated-memories/navigation-map.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Crazy scenarios"],["sectionSubtitle","Screens with a scenario"],[1,"row","row-cols-2","row-cols-md-4","row-cols-lg-5","g-4"],[1,"col"],["src","assets/images/Projects/situated-memories/screen-01.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-02.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-03.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-04.jpg",1,"img-fluid"],[1,"mt-2"],["src","assets/images/Projects/situated-memories/screen-05.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-06.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-07.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-08.jpg",1,"img-fluid"],["start","3",1,"mt-2"],["src","assets/images/Projects/situated-memories/screen-10.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-11.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-12.jpg",1,"img-fluid"],["start","6",1,"mt-2"],["src","assets/images/Projects/situated-memories/screen-13.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-14.jpg",1,"img-fluid"],["start","9",1,"mt-2"],["sectionTitle","Development","sectionSubtitle","Tools"],[1,"col-12","col-lg-6","d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/situated-memories/unity.jpg",1,"img-fluid","mb-2"],[1,"text-center"],["src","assets/images/Projects/situated-memories/vuforia.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionSubtitle","Object scanning and saving"],[1,"col-12","col-lg-6"],["src","assets/images/Projects/situated-memories/scanner.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/situated-memories/db.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionSubtitle","Screens"],[1,"col-4","col-lg-3"],["src","assets/images/Projects/situated-memories/top-menu.jpg",1,"img-fluid","mb-2"],[1,"col-8","col-lg-3"],["src","assets/images/Projects/situated-memories/scanning.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/situated-memories/adding.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/situated-memories/bubbles.jpg",1,"img-fluid","mb-2"],["sectionTitle","Challenges"],[1,"col-2","col-lg-1","big-number"],[1,"col-10","col-lg-5"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6)(7,"div",7)(8,"div",8),f(9,"01"),u(),c(10,"div",9)(11,"h4"),f(12,"Memories situated in physical objects"),u(),f(13," Users can save memories directly on the surface of physical objects. Memories: pictures, videos, audios, drawings, or writing annotations. Objects: whatever! From a little ring to the Eiffel Tower. "),u(),c(14,"div",8),f(15,"02"),u(),c(16,"div",9)(17,"h4"),f(18,"Floating bubbles"),u(),f(19," The memories are floating around the object like little bubbles. We use Augmented Reality technology. "),u(),c(20,"div",8),f(21,"03"),u(),c(22,"div",9)(23,"h4"),f(24,"Save or retrieve your memories"),u(),f(25," First, the user has to detect the object on which the memories are saved. Then, they can record a video, or take a photo, to save to the detected object, or they can tap on a bubble to open a past memory. "),u(),c(26,"div",8),f(27,"04"),u(),c(28,"div",9)(29,"h4"),f(30,"Be nostalgic!"),u(),f(31," Feel the nostalgia! Be emotional and take care of your special memories with your special object. We believe in this way memories will become more special. "),u()()()()()(),c(32,"div",3)(33,"div",4)(34,"div",5)(35,"app-page-section",10)(36,"ul")(37,"li"),f(38,"Amplify users emotions attached to an object"),u(),c(39,"li"),f(40," Reduce consumerism! People are more likely to take care of objects with memories "),u(),c(41,"li"),f(42,"Get to know about the past history of second-hand items"),u(),c(43,"li"),f(44," Objects with memories could be placed in museums and can help in teaching "),u(),c(45,"li"),f(46,"Objects could acquire a historical relevance"),u(),c(47,"li"),f(48,"Have a backup of memories"),u()()()()()(),c(49,"div",3)(50,"div",4)(51,"div",5)(52,"app-page-section",11)(53,"div",12)(54,"div",13),m(55,"img",14),u()()(),c(56,"app-page-section",15)(57,"div",12)(58,"div",13),m(59,"img",16),u()()(),c(60,"app-page-section",17)(61,"p"),f(62," You receive as a present the ring engagement of your grand grand grand grand grand mother (this year is exchanged between generations) and you can see the marriage proposal of your grand grand grand grand grand mother associated with the ring. "),u(),c(63,"p"),f(64," You find a ring on a street, and you decide to scan it with the app. You find out it was first created in ancient Egypt, then smuggled through the mediterranean sea, then stolen by nazis from a museum in France, then returned at the end of the 2nd World War and gifted as an engagement ring.\vYou return it to the woman it belongs to that lives in a retiring room just near the street! "),u(),c(65,"p"),f(66," In the year 3000, an archeologist finds a pen, without knowing what that tool was for. So, the archeologist scans it with the app, and WOW! They discover it was for writing! "),u(),c(67,"p"),f(68," Aliens go to Earth and find an unknown object. They scan it and... "),u()(),c(69,"app-page-section",18)(70,"div",19)(71,"div",20),m(72,"img",21),u(),c(73,"div",20),m(74,"img",22),u(),c(75,"div",20),m(76,"img",23),u(),c(77,"div",20),m(78,"img",24),u()(),c(79,"ol",25)(80,"li"),f(81,"You scan your marriage ring"),u(),c(82,"li"),f(83," After the scanning, the + button appears to upload a new memory to the object "),u()(),c(84,"div",19)(85,"div",20),m(86,"img",26),u(),c(87,"div",20),m(88,"img",27),u(),c(89,"div",20),m(90,"img",28),u(),c(91,"div",20),m(92,"img",29),u()(),c(93,"ol",30)(94,"li"),f(95," You click on the + button and you upload a photo of the proposal day "),u(),c(96,"li"),f(97,"After saving, a bubble appears around the object"),u(),c(98,"li"),f(99,"Clicking on a bubble opens the correspondent memory saved"),u()(),c(100,"div",19)(101,"div",20),m(102,"img",21),u(),c(103,"div",20),m(104,"img",31),u(),c(105,"div",20),m(106,"img",32),u(),c(107,"div",20),m(108,"img",33),u()(),c(109,"ol",34)(110,"li"),f(111," 60 years later, your granddaughter is using your special ring "),u(),c(112,"li"),f(113," She scans it and retrieves all the stories uploaded during these years "),u(),c(114,"li"),f(115," She decides to upload a video and an audio related to the ring "),u()(),c(116,"div",19)(117,"div",20),m(118,"img",35),u(),c(119,"div",20),m(120,"img",36),u()(),c(121,"ol",37)(122,"li"),f(123,"The new bubble of the granddaughter appears"),u(),c(124,"li"),f(125," The new story is ready to be shared between generations of exchange of the ring! "),u()()()()()(),c(126,"div",3)(127,"div",4)(128,"div",5)(129,"app-page-section",38)(130,"div",7)(131,"div",39),m(132,"img",40),c(133,"h4",41),f(134,"Unity"),u()(),c(135,"div",39),m(136,"img",42),c(137,"h4",41),f(138,"Vuforia Object Scanner App"),u()()()(),c(139,"app-page-section",43)(140,"div",7)(141,"div",44),m(142,"img",45),u(),c(143,"div",44)(144,"p"),f(145," The scanner of 3D objects is not integrated in our interface: we used the one of Vuforia. "),u()(),c(146,"div",44),m(147,"img",46),u(),c(148,"div",44)(149,"p"),f(150," The database of the 3D objects is the one of Vuforia. The extra information related to memories are initialized at runtime in the code. "),u()()()(),c(151,"app-page-section",47)(152,"div",7)(153,"div",48),m(154,"img",49),u(),c(155,"div",50)(156,"h4"),f(157,"Top Menu"),u(),f(158," Hamburger button: for basic settings (top left). Profile button: for user settings (top right). "),u(),c(159,"div",48),m(160,"img",51),u(),c(161,"div",50)(162,"h4"),f(163,"Scanning"),u(),f(164," Scan button: to scan a new object (not present in the database). "),u(),c(165,"div",48),m(166,"img",52),u(),c(167,"div",50)(168,"h4"),f(169,"Adding a memory"),u(),f(170," Plus button: it appears when the app recognizes a previously scanned object, together with the bubbles. Once the user clicks the plus button, they can see the file browser to upload a media file. "),u(),c(171,"div",48),m(172,"img",53),u(),c(173,"div",50)(174,"h4"),f(175,"Bubbles & Memory retrieval"),u(),f(176," When a previously scanned object is detected, saved memories will be shown as colored spheres. Tapping on them will show the correspondent memory. "),u()()()()()(),c(177,"div",3)(178,"div",4)(179,"div",5)(180,"app-page-section",54)(181,"div",7)(182,"div",55),f(183,"01"),u(),c(184,"div",56)(185,"h4"),f(186,"What to do with different objects that look the same?"),u(),f(187," Almost all the objects in the world are present in multiple copies. If all the memories are shown to all of these objects... "),c(188,"ul")(189,"li"),f(190," Feature! In shops, for example, people can see how to use the object. "),u(),c(191,"li"),f(192," Problem! It can be annoying and it can affect negatively the attachment to the object. "),u()(),f(193," Solutions: "),c(194,"ul")(195,"li"),f(196," Save and retrieve stories using a code, which has to be passed with the object. "),u(),c(197,"li"),f(198,"Put a marker on the object."),u(),c(199,"li"),f(200," Make objects react with the context. For example, according to their location or to who is holding it, it shows different memories and can highlight a particular stories. "),u()()(),c(201,"div",55),f(202,"02"),u(),c(203,"div",56)(204,"h4"),f(205," What to do when an object\u2019s appearance changes as time goes by? "),u(),f(206," Objects change over time (they become older or break). "),c(207,"ul")(208,"li"),f(209," People would be careful about their objects since they inherit the memories they input. "),u(),c(210,"li"),f(211," The concept of memories saved in old objects could be lost. "),u()(),f(212," Does the memory fade away as the object decays? "),c(213,"ul")(214,"li"),f(215," Keep the digital data in case the user wants to access it in another way. But then the design concept of memories situated in objects fells. "),u(),c(216,"li"),f(217,"Delete the digital data from the database."),u()()(),c(218,"div",55),f(219,"03"),u(),c(220,"div",56)(221,"h4"),f(222,"Do we have to moderate the content? By whom?"),u(),c(223,"p"),f(224," Crowdsourced moderation: some users analyze the content of stories and decide if they are appropriate. "),u(),c(225,"h4"),f(226," Who can see what memories? Privacy issues, data osnwership "),u(),f(227," Users may want to keep the stories only for themselves or for a few intimates. Solutions: "),c(228,"ul")(229,"li"),f(230,"Code to access memories."),u(),c(231,"li"),f(232," Indicate the people to whom share the memory (like in social networks). "),u()()()()()()()()())},dependencies:[mi,Vi,Bi]})}}return e})()},{path:"popup-break",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-popup-break"]],decls:350,vars:0,consts:[["title","PopupBreak","image","assets/images/project-covers/Cover PopupBreak.jpg"],[1,"container"],["projectName","popupbreak"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Problem"],["sectionTitle","Interviews"],[1,"row","g-4"],[1,"col-2","col-md-1","big-number"],[1,"col-10","col-md-11"],["sectionTitle","Target Users"],[1,"col-12","col-md-6","d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/popup-break/user-01.jpg",1,"img-fluid","mb-2"],[1,"text-center"],["src","assets/images/Projects/popup-break/user-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionTitle","Design","sectionSubtitle","Alternative designs"],[1,"bi","bi-phone"],[1,"col-10","col-md-5"],[1,"bi","bi-laptop"],["sectionSubtitle","Features of the system"],["sectionSubtitle","Virtual Coach"],[1,"col-12","col-md-6"],[1,"row","row-cols-2","row-cols-md-3","row-cols-xl-4","g-4"],[1,"d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/popup-break/vc-01.jpg",1,"img-fluid","mb-2"],[1,"badge","bg-light","text-dark"],["src","assets/images/Projects/popup-break/vc-02.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/popup-break/vc-03.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/popup-break/vc-04.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/popup-break/vc-05.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/popup-break/vc-06.jpg",1,"img-fluid","mb-2"],["sectionTitle","Prototype"],[1,"col-12","col-xl-6"],["src","assets/images/Projects/popup-break/screen-01.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-03.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-04.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-05.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-06.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-07.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-08.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-09.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionTitle","Usability Testing","sectionSubtitle","Illustrative Scenario"],["src","assets/images/Projects/popup-break/scenario.jpg",1,"img-fluid"],["sectionSubtitle","Video Demo"],[1,"ratio","ratio-16x9"],["src","https://www.youtube.com/embed/yFgZMnE5bU8?rel=0","allowfullscreen",""],["sectionSubtitle","From user thought to feature"],[1,"col-12","col-md-5"],[1,"col-1"],[1,"bi","bi-arrow-right"],[1,"col-11","col-md-6"],["sectionTitle","Development","sectionSubtitle","Tools"],["src","assets/images/Projects/popup-break/marc.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/popup-break/java-swing.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionSubtitle","Architecture of the system"],["src","assets/images/Projects/popup-break/architecture.jpg",1,"img-fluid","mb-2"],[1,"row"],[1,"col-12","col-lg-6"],["sectionSubtitle","State Machine"],["src","assets/images/Projects/popup-break/state-machine.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/popup-break/transitions.jpg",1,"img-fluid"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6)(7,"p"),f(8," Stationary work and study settings may lead to harmful consequences to people's physical and emotional health. Many people start to realize their problems and intend to make a change, but they still need reminders and guidance. "),u(),f(9," We did 9 interviews among students and sedentary workers, investigating their lifestyles. The common problems we found are: "),c(10,"ul")(11,"li"),f(12," Forgetting to take a pause, especially when fully focused on the work. "),u(),c(13,"li"),f(14," Forgetting drinking water or don't drink enough during the day. "),u(),c(15,"li"),f(16,"Eyesight problems due to long screen time."),u(),c(17,"li"),f(18,"Back pain due to bad posture."),u(),c(19,"li"),f(20,"Sleep insomnia due to too much blue light exposure."),u(),c(21,"li"),f(22,"Stress and tension during the week."),u()()()()()(),c(23,"div",3)(24,"div",4)(25,"div",5)(26,"app-page-section",7)(27,"div",8)(28,"div",9),f(29,"01"),u(),c(30,"div",10)(31,"p"),f(32," Routine: occupation, computer usage, sleeping, eating, drinking habits. "),u(),c(33,"ul")(34,"li"),f(35,"What is your occupation?"),u(),c(36,"li"),f(37,"Could you tell us about your routine everyday?"),u(),c(38,"li"),f(39," How many hours do you work/study in front of the computer everyday? "),u(),c(40,"li"),f(41," How structured is your routine? Do you have a fixed schedule or are you more flexible with times? "),u(),c(42,"li"),f(43," Can you tell me about the last time you had trouble falling asleep? Why do you think that happened? "),u(),c(44,"li"),f(45,"How often do you eat something while working?"),u(),c(46,"li"),f(47," How much water do you drink every day? (# glasses, # water bottles) "),u(),c(48,"li"),f(49," How would you qualify your eyesight? Do you think work affects it much? "),u()()(),c(50,"div",9),f(51,"02"),u(),c(52,"div",10)(53,"p"),f(54,"Physical habits: posture and view, problems, exercises."),u(),c(55,"ul")(56,"li"),f(57," How often do you exercise? For how long? Are you satisfied with it? "),u(),c(58,"li"),f(59," Could you tell me the story of the last time you had some sort of pain after working? Why do you think that was? (e.g. back pain, stiffness, \u2026) "),u(),c(60,"li"),f(61," Follow up: Was it due to working long hours on your laptop and how did it affect you? Did you have to go to a doctor? What were his recommendations? "),u(),c(62,"li"),f(63," How would you qualify your posture? How do you keep straight? "),u(),c(64,"li"),f(65," Are you familiar with active pauses? Do you do them? Why not? "),u()()(),c(66,"div",9),f(67,"03"),u(),c(68,"div",10)(69,"p"),f(70,"Breaks: frequence, duration, descriptions"),u(),c(71,"ul")(72,"li"),f(73," What is the longest you have worked without taking a pause? "),u(),c(74,"li"),f(75," How often do you do breaks while working? And how long are they? "),u(),c(76,"li"),f(77," Are the breaks predefined? Or do you do them voluntarily at will? "),u()()(),c(78,"div",9),f(79,"04"),u(),c(80,"div",10)(81,"p"),f(82,"Distractions: frequence, motivations, causes."),u(),c(83,"ul")(84,"li"),f(85," Do you easily distract yourself using the phone while working? Why? What do you do when you are distracted? "),u(),c(86,"li"),f(87," Can you tell me which kind of notifications you do NOT ignore? What is it about them that makes you wanna stop and pay attention to them? "),u(),c(88,"li"),f(89," Can you tell me about the last time you were interrupted while working and you didn\u2019t like it? Can you tell me about another time where you had no problem being interrupted? What was the difference? (tolerance) "),u()()()()()()()(),c(90,"div",3)(91,"div",4)(92,"div",5)(93,"app-page-section",11)(94,"div",8)(95,"div",12),m(96,"img",13),c(97,"h4",14),f(98,"Students"),u()(),c(99,"div",12),m(100,"img",15),c(101,"h4",14),f(102,"Sedentary workers"),u()()()()()()(),c(103,"div",3)(104,"div",4)(105,"div",5)(106,"app-page-section",16)(107,"div",8)(108,"div",9),m(109,"i",17),u(),c(110,"div",18)(111,"h4"),f(112,"Mobile Version"),u(),c(113,"p"),f(114,"Distractions come from that"),u(),c(115,"p"),f(116,"Can't use phone while working sometimes"),u()(),c(117,"div",9),m(118,"i",19),u(),c(119,"div",18)(120,"h4"),f(121,"Desktop App"),u(),c(122,"p"),f(123,"People have already PC open"),u(),c(124,"p"),f(125," Users that don\u2019t use PC while working are not going to use our system probably "),u()()()(),c(126,"app-page-section",20)(127,"ul")(128,"li"),f(129,' Virtual Coach (VC): working as a "ghost friend" to encourage users in applying good practices. It pop-ups on the screen. '),u(),c(130,"li"),f(131," Don't disturb mode: customize the level of intrusiveness, healthy interruptions, and alerting. "),u(),c(132,"li"),f(133,' Customize reminders: customize frequency and reminders. The user can create new ones (e.g. "Remember to take this medicine"). '),u(),c(134,"li"),f(135," Good practices section: to encourage awareness. People can start planning their routine considering them. "),u(),c(136,"li"),f(137," Habit tracker: summarize activities' data (e.g.: work times, number of breaks, liters of water drunk) daily, weekly, monthly. "),u(),c(138,"li"),f(139," Positive reinforcement: the system shows the impact on the user's health of what has been done. "),u(),c(140,"li"),f(141," Gamification: the system could reward the user according to the application of the good practices. "),u(),c(142,"li"),f(143," Calendar synchronization: to bear in mind the other things to do. VC don't pop-up during calls and meetings. "),u()()(),c(144,"app-page-section",21)(145,"div",8)(146,"div",22),f(147," Reminders: "),c(148,"ul")(149,"li"),f(150,"Do active breaks from the work, with stretching"),u(),c(151,"li"),f(152,"Do eye exercises and eye breaks from the screens"),u(),c(153,"li"),f(154,"Drink water"),u(),c(155,"li"),f(156,"Eat a healthy snack"),u(),c(157,"li"),f(158,"Keep a good posture"),u(),c(159,"li"),f(160," Mindfulness: deep breathing, mind spaces at beginning and end of the journey "),u()()(),c(161,"div",22),f(162," Extra features: "),c(163,"ul")(164,"li"),f(165," It shows emotions and facial expressions to encourage the user "),u(),c(166,"li"),f(167," It shows the exercise to perform and tip that you need to do right now "),u(),c(168,"li"),f(169," It does things alongside the user if wanted (e.g. it does eye exercises at the same time with the user) "),u()()()(),c(170,"div",23)(171,"div",24),m(172,"img",25),c(173,"h4",14),f(174,"Happiness"),u(),c(175,"span",26),f(176,"AUs: 6 + 12"),u()(),c(177,"div",24),m(178,"img",27),c(179,"h4",14),f(180,"Courageous"),u(),c(181,"span",26),f(182,"AUs: 10 + 12 + 46 + 55"),u()(),c(183,"div",24),m(184,"img",28),c(185,"h4",14),f(186,"Surprise"),u(),c(187,"span",26),f(188,"AUs: 1 + 2 + 5 + 26"),u()(),c(189,"div",24),m(190,"img",29),c(191,"h4",14),f(192,"Sadness"),u(),c(193,"span",26),f(194,"AUs: 1 + 4 + 15"),u()(),c(195,"div",24),m(196,"img",30),c(197,"h4",14),f(198,"Anger"),u(),c(199,"span",26),f(200,"AUs: 4 + 5 + 7 + 23"),u()(),c(201,"div",24),m(202,"img",31),c(203,"h4",14),f(204,"Disappointment"),u(),c(205,"span",26),f(206,"AUs: 10, 15, 29"),u()(),c(207,"div",24),m(208,"img",31),c(209,"h4",14),f(210,"Neutral"),u(),c(211,"span",26),f(212,"AUs: -"),u()()()()()()(),c(213,"div",3)(214,"div",4)(215,"div",5)(216,"app-page-section",32)(217,"div",8)(218,"div",33),m(219,"img",34),c(220,"h4"),f(221,"Welcome screen"),u(),c(222,"p"),f(223,' The VC is happy and is saying "Hi", showing a positive state of mind and a welcoming facial expression. The screen shows users their agenda for the day so that users can customize their breaks. '),u()(),c(224,"div",33),m(225,"img",35),c(226,"h4"),f(227,"Pop-up"),u(),c(228,"p"),f(229," When it is break time, the VC pops up eagerly at the corner. Users can accept it, postpone it, or deny it. "),u()(),c(230,"div",33),m(231,"img",36),c(232,"h4"),f(233,"Excercise screen"),u(),c(234,"p"),f(235," The VC will do the breathing exercise along with the user, so his facial expression represents guided respiration. The page has instructions that guide users to inhale and exhale. "),u()(),c(236,"div",33),m(237,"img",37),c(238,"h4"),f(239,"Drink reminder"),u(),c(240,"p"),f(241," When the user accepts the drinking advice. Users can choose the amount of water to take. The VC will have a proud emotion here because we want to positively reinforce the user's decision to accept a break. "),u()(),c(242,"div",33),m(243,"img",38),c(244,"h4"),f(245,"Learn more screen"),u(),c(246,"p"),f(247," Users can also check other good practices to encourage awareness. When selecting the desired one the VC will return and react accordingly to the new facts being learned. "),u()(),c(248,"div",33),m(249,"img",39),c(250,"h4"),f(251,"Information screen"),u(),c(252,"p"),f(253," This page is for users to have more information on healthy habits, like the fun facts in drinking water for example. The VC is in a surprised state because they are both learning something new. "),u()(),c(254,"div",33),m(255,"img",40),c(256,"h4"),f(257,"Statistics screen"),u(),c(258,"p"),f(259," The user can also track the evolution of their habits. Comparison of today's data to yesterday's. Weekly and monthly tendencies. The VC's emotion would depend on users' achievements. "),u()(),c(260,"div",33),m(261,"img",41),c(262,"h4"),f(263,"Achievement screen"),u(),c(264,"p"),f(265," Displayed at the end of the working hours. The VC will emphasize the user's achievements of that day. Depending on their behaviour, it will react positively or negatively. "),u()(),c(266,"div",33),m(267,"img",42),c(268,"h4"),f(269,"Customization of reminders screen"),u(),c(270,"p"),f(271," This page is for users to customize their breaking sessions, so that this application can fit every user's habits and goals. On the side, the VC is also offering some pre-set configurations recommended specifically for the user (according to their behavior so far). So his facial expression is winking, so that the user feels more guided towards accepting his suggestions. "),u()()()()()()(),c(272,"div",3)(273,"div",4)(274,"div",5)(275,"app-page-section",43),m(276,"img",44),u(),c(277,"app-page-section",45)(278,"div",46),m(279,"iframe",47),u()(),c(280,"app-page-section",48)(281,"div",8)(282,"div",49),f(283," \"I don't want to invest so much time in setting up everything. I don't want to think, too many configurations\" "),u(),c(284,"div",50)(285,"h4",14),m(286,"i",51),u()(),c(287,"div",52)(288,"ul")(289,"li"),f(290,"Include default settings."),u()()(),c(291,"div",49),f(292,' "I could be embarrassed in doing exercise in front of my colleagues" '),u(),c(293,"div",50)(294,"h4",14),m(295,"i",51),u()(),c(296,"div",52)(297,"ul")(298,"li"),f(299," Customize exercises, include some that are not so visible (like just move the neck, contract some muscles). "),u(),c(300,"li"),f(301,' Create profiles of reminders (e.g. "Work at office", "Work at home"). '),u()()(),c(302,"div",49),f(303,' "I wouldn\'t care a lot about the emotions of the Virtual Coach. How do you keep the users engaged and motivated?" '),u(),c(304,"div",50)(305,"h4",14),m(306,"i",51),u()(),c(307,"div",52)(308,"ul")(309,"li"),f(310," Show videos of people that feel great about these new habits. "),u(),c(311,"li"),f(312," Include motivational messages and reviews from other users. "),u(),c(313,"li"),f(314," Add music according to the type of exercise or break to do. "),u()()()()()()()(),c(315,"div",3)(316,"div",4)(317,"div",5)(318,"app-page-section",53)(319,"div",8)(320,"div",12),m(321,"img",54),c(322,"h4",14),f(323,"MARC"),u()(),c(324,"div",12),m(325,"img",55),c(326,"h4",14),f(327,"Java Swing"),u()()()(),c(328,"app-page-section",56),m(329,"img",57),c(330,"div",58)(331,"div",59)(332,"h4"),f(333,"MARC framework"),u(),c(334,"ul")(335,"li"),f(336," Generates in rea-time the facial animation for the given emotion. "),u(),c(337,"li"),f(338," Maps the emotions to a set of AUs combinations from our predefined library. "),u()()(),c(339,"div",59)(340,"h4"),f(341,"PopUpBreak app"),u(),c(342,"ul")(343,"li"),f(344," Takes that rendered animation and embeds it into our system in the respective screen it corresponds. "),u(),c(345,"li"),f(346," Changes screens depending on the user interaction or if there is a time for a scheduled break. "),u()()()()(),c(347,"app-page-section",60),m(348,"img",61)(349,"img",62),u()()()()())},dependencies:[mi,Vi,Bi]})}}return e})()},{path:"insignum",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-insignum"]],decls:478,vars:0,consts:[["title","InSignum","image","assets/images/project-covers/Cover InSignum.jpg"],[1,"container"],["projectName","insignum"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Problem"],[1,"row","g-4"],[1,"col-lg-10"],["src","assets/images/Projects/insignum/problem-01.jpg",1,"img-fluid"],["src","assets/images/Projects/insignum/problem-02.jpg",1,"img-fluid"],["sectionTitle","Target user"],[1,"row","mb-4"],[1,"col-2","col-lg-1"],["src","assets/images/Projects/insignum/deaf.png",1,"img-fluid"],[1,"col-4","col-lg-5"],["src","assets/images/Projects/insignum/dhh.png",1,"img-fluid"],["sectionTitle","Brainstorming"],[1,"row"],[1,"col-7","col-md-4"],["src","assets/images/Projects/insignum/brainstorming-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/brainstorming-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/brainstorming-03.jpg",1,"img-fluid"],["src","assets/images/Projects/insignum/brainstorming-04.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/brainstorming-05.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/brainstorming-06.jpg",1,"img-fluid"],["src","assets/images/Projects/insignum/brainstorming-07.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/brainstorming-08.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/brainstorming-09.jpg",1,"img-fluid"],["sectionTitle","Interviews: 2 Deaf and 1 Hard of Hearing"],["sectionTitle","Findings"],[1,"row","row-cols-1","row-cols-md-2","row-cols-xl-3","g-4"],[1,"col"],["sectionTitle","Questionnaires","sectionSubtitle","Questions"],[1,"col-12","col-md-8","col-lg-5","col-xl-5"],["src","assets/images/Projects/insignum/questionnaire-01.jpg",1,"img-fluid",2,"width","100%"],[1,"col-12","col-md-10","col-lg-7","col-xl-6"],["src","assets/images/Projects/insignum/questionnaire-02.jpg",1,"img-fluid",2,"width","100%"],["sectionSubtitle","Findings"],[1,"col-12","col-md-6"],["sectionTitle","Ideation","sectionSubtitle","Design choices"],["sectionSubtitle","Architecture of the system"],[1,"col-2","col-lg-1","big-number"],[1,"col-10","col-lg-8"],["src","assets/images/Projects/insignum/smartwatch.jpg",1,"img-fluid"],[1,"row","mt-4"],[1,"col-10","col-lg-11"],["sectionTitle","Design"],["sectionSubtitle","Storyboard"],["sectionSubtitle","Smartwatch application"],["src","assets/images/Projects/insignum/navigation-map.jpg",1,"img-fluid","mb-4"],["sectionTitle","Development","sectionSubtitle","The dollhouse"],[1,"row","row-cols-1","row-cols-md-2","row-cols-lg-3","g-4"],["src","assets/images/Projects/insignum/dollhouse-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/dollhouse-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/dollhouse-03.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/dollhouse-04.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/dollhouse-05.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/dollhouse-06.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/dollhouse-07.jpg",1,"img-fluid","mb-4"],["sectionSubtitle","The smart lighting system"],["src","assets/images/Projects/insignum/smart-light-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-03.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-04.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-05.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-06.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-07.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-08.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-09.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-10.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-11.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-12.jpg",1,"img-fluid","mb-4"],["sectionTitle","Scenario (demo)"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6),f(7," Consciously or not, people able to hear constantly analyze sounds around them, to be able to orientate and to understand what is happening. Deaf people can only rely on visual and haptic stimuli, so their awareness is usually limited to the room in which they are. Our target user is often frustrated or anxious to know what is happening inside the house. Things as simple as someone knocking at the door, or it\u2019s raining outside, are all things we take for granted, without considering that not everyone has this luxury. "),c(8,"div",7)(9,"div",8),m(10,"img",9),u(),c(11,"div",8),m(12,"img",10),u()()()()()(),c(13,"div",3)(14,"div",4)(15,"div",5)(16,"app-page-section",11)(17,"div",12)(18,"div",13),m(19,"img",14),u(),c(20,"div",15)(21,"h4"),f(22,"Deaf"),u()(),c(23,"div",13),m(24,"img",16),u(),c(25,"div",15)(26,"h4"),f(27,"Hard of Hearing (DHH)"),u()()(),c(28,"ul")(29,"li"),f(30,"Often frustrated or anxious."),u(),c(31,"li"),f(32," Invest money in technologies from which to benefit (wearable smart tech, smart lighting solutions). "),u(),c(33,"li"),f(34,"May live alone or not."),u()()()()()(),c(35,"div",3)(36,"div",4)(37,"div",5)(38,"app-page-section",17)(39,"p"),f(40," Sounds categories (to which we associate a color in the prototype): "),u(),c(41,"ul")(42,"li"),f(43,"Alarms: fire alarm, carbon monoxide detector."),u(),c(44,"li"),f(45,"Doorbell: doorbell, phone ring, ring of a video call."),u(),c(46,"li"),f(47," Water: opened taps, water leaks, water sounds inside the house. "),u(),c(48,"li"),f(49," Electronic devices: TV sounds, computers, music from speakers, completed dryer. "),u(),c(50,"li"),f(51," Heating devices: oven. They might involve fire hazards or a fast reaction. "),u(),c(52,"li"),f(53,"Outside noise: rain, automatic watering system, lawnmower."),u()(),c(54,"p"),f(55,"Ideas for smart house systems based on visual clues:"),u(),c(56,"ul")(57,"li"),f(58," Full light system: lights on a surface area (ceiling, wall, floor). "),u(),c(59,"ul")(60,"li"),f(61,"Directional lights: to lead the user to the sound."),u(),c(62,"li"),f(63,"Ripples: to model the intensity of the sound."),u()(),c(64,"li"),f(65," Wearable device: the user would be notified of a sound by a wearable device (such as bracelets, smartwatch, smart glass). "),u(),c(66,"li"),f(67," Central portable board: digital panel the user could put anywhere in the house and on which information would be displayed. "),u(),c(68,"ul")(69,"li"),f(70,"Map of the house on which sound icons are drawn."),u(),c(71,"li"),f(72," Colored grid, where rows are rooms and columns are types of sound. "),u(),c(73,"li"),f(74," Something more abstract: a colored grid or a painting changing depending on the current sounds in the house. "),u()()(),c(75,"div",18)(76,"div",19),m(77,"img",20)(78,"img",21)(79,"img",22),u(),c(80,"div",19),m(81,"img",23)(82,"img",24)(83,"img",25),u(),c(84,"div",19),m(85,"img",26)(86,"img",27)(87,"img",28),u()()()()()(),c(88,"div",3)(89,"div",4)(90,"div",5)(91,"app-page-section",29)(92,"p"),f(93,"General:"),u(),c(94,"ol")(95,"li"),f(96," What was the last time they had difficulties communicating (during their trip for example) or encountered a problem because they couldn\u2019t hear something? "),u(),c(97,"li"),f(98,"How did you deal with the situation?"),u(),c(99,"li"),f(100," What do you think is your biggest struggle that comes from not hearing sounds? And what is your biggest struggle from not being able to communicate verbally? "),u(),c(101,"li"),f(102," What kind of problem do you encounter and that you think hearing people are absolutely not aware of? "),u(),c(103,"li"),f(104," Do you use any kind of device to help you in your daily life? Does it work well? Do you remember a time it couldn\u2019t help you? "),u(),c(105,"li"),f(106," How have the masks for COVID impacted your daily interaction and communication with other people? "),u(),c(107,"li"),f(108," Tell us about a bad experience while you tried to communicate with people wearing masks. "),u(),c(109,"li"),f(110," If there was an alternative medium to warn you of a sound going on around you, which one do you think you would prefer, a vibration or a light? "),u()(),c(111,"p"),f(112,"Specific:"),u(),c(113,"ol")(114,"li"),f(115," Tell us about a situation where you were annoyed by something in the house that you couldn\u2019t hear. "),u(),c(116,"li"),f(117," Tell me about a situation you realized there was something happening outside you would have liked to know earlier. "),u(),c(118,"li"),f(119," Tell me about a situation in which you had a problem with not understanding where a sound was coming from. "),u(),c(120,"li"),f(121," Have you developed any specific habits at home to compensate for the hearing loss? "),u(),c(122,"li"),f(123," What sounds are you the most concerned about because you can\u2019t hear them? "),u(),c(124,"li"),f(125," How would you prefer to be alerted? Examples: vibration on the wrist, or lights, or messages on screens "),u(),c(126,"li"),f(127," Where would you like to receive an alert of a sound? From the room where the sound is happening or from a central place? Or other? "),u(),c(128,"li"),f(129," On which occasions would you prefer to use an automated system that closes something after a certain time? (for example, an automated system that closes fridge doors). "),u(),c(130,"li"),f(131," On which occasions would you prefer to use a detection system that alerts you to close something? "),u(),c(132,"li"),f(133," For people with hearing aids (not completely deaf people): Would you prefer for nonurgent alarms to be louder or replaced with lights? "),u(),c(134,"li"),f(135," Do you find yourself more often in dangerous situations at home or outside your home? "),u()()()()()(),c(136,"div",3)(137,"div",4)(138,"div",5)(139,"app-page-section",30)(140,"div",31)(141,"div",32)(142,"h4"),f(143," Annoying situations because of something that they could not hear "),u(),c(144,"ul")(145,"li"),f(146,"No knowledge about their own sounds."),u(),c(147,"li"),f(148,"Unnecessary careful to don't make noise."),u(),c(149,"li"),f(150," Daylight conditions don't allow them to realize the warning lights. "),u()()(),c(151,"div",32)(152,"h4"),f(153,"Situations related to sounds happening outside the house"),u(),c(154,"ul")(155,"li"),f(156," Fear that someone sneak in through the windows when they fell asleep with the window open. "),u(),c(157,"li"),f(158," Neighbors ring the bell when something bad is happening (e.g. flooding). "),u()()(),c(159,"div",32)(160,"h4"),f(161,"Sounds are they most concerned about"),u(),c(162,"ul")(163,"li"),f(164," Sounds that convey some degree of danger (e.g. burglars sneaking in the house, broken boiler, fires, or water running). "),u(),c(165,"li"),f(166," Sounds in the kitchen are more important as they are more dangerous. "),u(),c(167,"li"),f(168,"Loudness of the TV."),u()()(),c(169,"div",32)(170,"h4"),f(171," Where do they find themselves more often in dangerous situations "),u(),c(172,"ul")(173,"li"),f(174," They believe that accidents happen more often at home rather than outside. "),u(),c(175,"li"),f(176," Outside there are occasions where they can just \u201cfollow\u201d the rest of the people. For example during an evacuation of a place. "),u()()(),c(177,"div",32)(178,"h4"),f(179," Where they would like to receive the warning for the sounds "),u(),c(180,"ul")(181,"li"),f(182," A handheld portable device (like a wristband), since a device for every room could be expensive, and an object to carry all the time is uncomfortable. "),u(),c(183,"li"),f(184," Warning lights on wall or floor (no ceiling because it's harder to notice). In general, at eye level. "),u(),c(185,"li"),f(186," Arrows or light movements to indicate the location of the sound, and colours represent sounds (e.g. blue lights directing to the kitchen could mean open tap). "),u(),c(187,"li"),f(188," No central place, to don't check in that place all the time. "),u()()(),c(189,"div",32)(190,"h4"),f(191," Development of any specific habits at home to compensate with the hearing loss "),u(),c(192,"ul")(193,"li"),f(194," Actively paying close attention to everything, making sure that lights, stoves, or home appliances are off, and taps and windows are closed. "),u(),c(195,"li"),f(196," Linking visual cues to sounds (e.g. turn on the extraction hood light every time she turns it on). "),u(),c(197,"li"),f(198," Checking often the smartphone, especially if they are waiting for someone. "),u(),c(199,"li"),f(200," Asking people to insist ontexting and calling several times, when they don't answer. "),u()()(),c(201,"div",32)(202,"h4"),f(203," Situations they didn't understand where a sound was coming from "),u(),c(204,"ul")(205,"li"),f(206,"Very annoying."),u(),c(207,"li"),f(208," Feeling vibrations, but don't know how to interpret them. "),u(),c(209,"li"),f(210,"Neighbor moving a sliding door making noise."),u()()()()()()()(),c(211,"div",3)(212,"div",4)(213,"div",5)(214,"app-page-section",33)(215,"p"),f(216," Sent it to deaf associations, Facebook pages targeting deaf people, friends of deaf people, in 3 different languages (English, French, and Spanish). "),u(),c(217,"ul")(218,"li"),f(219," What sounds in their home our users find most crucial to be alerted about. "),u(),c(220,"li"),f(221," Whether the sounds they themselves make are relevant to them or not. "),u(),c(222,"li"),f(223," Whether a qualitative evaluation (ON/OFF) of the sounds in their environment is enough or they would value a quantitative approach (Loudness). "),u(),c(224,"li"),f(225," How the user interprets colors: location of the sound, type of sound. "),u(),c(226,"li"),f(227," What colors they instinctively correlate with what kind of sound. "),u(),c(228,"li"),f(229," What colors they instinctively correlate with what room in the house. "),u(),c(230,"li"),f(231," Whether the user would find most valuable in a centralized information panel somewhere in their house or some sort of portable/wearable system. "),u(),c(232,"li"),f(233," For both options above, how the user reacted and interpreted our specific solutions. "),u(),c(234,"li"),f(235," If our system used lights to alert its user, where they would prefer to have them placed. "),u()(),c(236,"div",7)(237,"div",34),m(238,"img",35),u(),c(239,"div",36),m(240,"img",37),u()()(),c(241,"app-page-section",38)(242,"div",7)(243,"div",39)(244,"h4"),f(245,"Ranking of importance of sounds:"),u(),c(246,"li"),f(247,"Doorbell (93%)"),u(),c(248,"li"),f(249,"Water Taps (77%)"),u(),c(250,"li"),f(251,"Smoke/Fire Detector (72%)"),u(),c(252,"li"),f(253,"Major Appliances (66%)"),u(),c(254,"li"),f(255,"Ventilation and Heating (55%)"),u(),c(256,"li"),f(257,"Small Appliances (55%)"),u(),c(258,"li"),f(259,"Broken Glass (50%)"),u(),c(260,"li"),f(261,"Alarm Clock (50%)"),u(),c(262,"li"),f(263,"Sounds from people in the house (44%)"),u(),c(264,"li"),f(265,"Phones & Faxes (38%)"),u(),c(266,"li"),f(267,"Consumer Electronics (38%)"),u(),c(268,"li"),f(269,"Rain/Wind outside (38%)"),u(),c(270,"li"),f(271,"Street Sounds (16%)"),u(),c(272,"li"),f(273,"Neighbors Sounds (16%)"),u()(),c(274,"div",39)(275,"h4"),f(276,"Location of lights in each room:"),u(),c(277,"ul")(278,"li"),f(279,"ceiling (44%)"),u(),c(280,"li"),f(281,"molding (61%)"),u(),c(282,"li"),f(283,"walls (50%)"),u(),c(284,"li"),f(285,"skirting board (38%)"),u(),c(286,"li"),f(287,"floor (50%)."),u()(),c(288,"h4"),f(289,"Wearable component to:"),u(),c(290,"ul")(291,"li"),f(292,"access cameras in the house (44% strongly agreed)"),u(),c(293,"li"),f(294,"snooze/dismiss notifications (70% strongly agreed)"),u(),c(295,"li"),f(296,"know which object is making sound (66% strongly agreed)"),u(),c(297,"li"),f(298," know where the sound is coming from (55% strongly agreed) "),u()(),c(299,"h4"),f(300," Preference for haptic feedback through such wearable device: "),u(),c(301,"ul")(302,"li"),f(303,"vibration (55%)"),u(),c(304,"li"),f(305,"squeeze (0%)"),u(),c(306,"li"),f(307,"taps (0%)"),u(),c(308,"li"),f(309,"a combination of all 3 modes (33%)"),u()()()()()()()(),c(310,"div",3)(311,"div",4)(312,"div",5)(313,"app-page-section",40)(314,"ul")(315,"li"),f(316," 61% want to be aware of their own sounds "),m(317,"br"),f(318," 38 % said they had no interest in that "),m(319,"br"),f(320," \u2192 include their own sounds. "),u(),c(321,"li"),f(322," 72% want to have insights into the intensity of the sounds "),m(323,"br"),f(324," 22% had no interest in that "),m(325,"br"),f(326,"\u2192 include volume. "),u(),c(327,"li"),f(328," 68% correlated sound with the type of objects that are producing it "),m(329,"br"),f(330," 32% correlated it with the type where it is coming from "),m(331,"br"),f(332,"\u2192 set the first one as the default, but allow customization "),u(),c(333,"li"),f(334," Some users would prefer this system to be unrecognizable by visitors as a hearing aid "),m(335,"br"),f(336,"Others did not seem to mind at all "),m(337,"br"),f(338,"\u2192 bridge this gap and design for transparency. "),u(),c(339,"li"),f(340," Users know what object is making a sound mostly for House Map and Decorative Abstract object "),m(341,"br"),f(342,"They are aware of object\u2019s location only with House Map. "),m(343,"br"),f(344,"Grid representing different rooms did not test well for either question. "),m(345,"br"),f(346,"\u2192 access to a centralized House Map could be very fruitful but not necessarily the main attraction of the ideal solution. "),u()()(),c(347,"app-page-section",41)(348,"div",18)(349,"div",42),f(350,"01"),u(),c(351,"div",43)(352,"h4"),f(353,"Vibrating wearable smartwatch"),u(),c(354,"p"),f(355,"WearOS application that alerts to any sound in the house."),u(),m(356,"img",44),u()(),c(357,"div",45)(358,"div",42),f(359,"02"),u(),c(360,"div",46)(361,"h4"),f(362,"House-wide smart lightning"),u(),c(363,"p"),f(364," Indicates the direction to the noise source in case the smartwatch is for some reason not accessible. "),u(),c(365,"p"),f(366,"Easy to set up:"),u(),c(367,"ul")(368,"li"),f(369," Replace ceiling light bulbs with smart-home alternatives "),u(),c(370,"li"),f(371,"Install a light bulb on top of each door."),u()()()(),c(372,"p"),f(373," 2 different alert channels: less anxiety when not paying attention to one of them. "),u(),c(374,"ol")(375,"li"),f(376," The light in the room the user is currently in changes color. "),u(),c(377,"li"),f(378," A notification pop-up in the smartwatch containing location and nature of the sound. "),u()(),c(379,"p"),f(380," A notification pop-up in the smartwatch containing location and nature of the sound. "),u()()()()(),c(381,"div",3)(382,"div",4)(383,"div",5)(384,"app-page-section",47)(385,"app-page-section",48)(386,"p"),f(387," \u201cDiana is a deaf person who lives alone. She is feeling bad at her home, she usually has strong migraine attacks. After having breakfast and try to do some cleaning she has to go to the sofa to lie and rest a bit because she cannot stand the headache anymore. While sleeping on the sofa, she feels a vibration in her smartwatch that slightly wakes her up, then she sees a blue light moving toward the other part of the house. Then she checks the screen of the smartwatch and sees a drop icon with the text, water tap running in the big bathroom. She stands up and goes to close it right before it starts to overflow.\u201d "),u(),c(388,"p"),f(389," \u201cDiana is still in the shower. The light turns red. She get out of the shower to check her smartwatch. She sees a fire alarm icon appear on the screen and takes all of the screen (as it is an emergencies all other notifications are secondary). She clicks on it and see that the kitchen fire alarm is on then she gets there and sees that the radiator started to catch fire\u201d "),u()(),c(390,"app-page-section",49)(391,"p"),f(392,"Navigation map"),u(),m(393,"img",50),f(394," Home screen: shows what is currently happening in the house. \u201cYou have everything under control\u201d when there are no notifications. "),c(395,"ul")(396,"li"),f(397,"Notifications screen: list of all received notifications."),u(),c(398,"li"),f(399," Actions screen: status of the house. It shows: "),c(400,"ul")(401,"li"),f(402," map of the house with icons on locations of noise sources; "),u(),c(403,"li"),f(404," views of the cameras that are around the house (if present); "),u(),c(405,"li"),f(406,"sensors status."),u()()(),c(407,"li"),f(408," Setting screen: "),c(409,"ul")(410,"li"),f(411,"editing house map or names of rooms;"),u(),c(412,"li"),f(413,"configuring sensors and lights;"),u(),c(414,"li"),f(415," define notification settings (priorities or colors of lights) "),u()()()()()()()()(),c(416,"div",3)(417,"div",4)(418,"div",5)(419,"app-page-section",51)(420,"div",52)(421,"div",32),m(422,"img",53),u(),c(423,"div",32),m(424,"img",54),u(),c(425,"div",32),m(426,"img",55),u(),c(427,"div",32),m(428,"img",56),u(),c(429,"div",32),m(430,"img",57),u(),c(431,"div",32),m(432,"img",58),u(),c(433,"div",32),m(434,"img",59),u()()(),c(435,"app-page-section",60)(436,"div",52)(437,"div",32),m(438,"img",61),u(),c(439,"div",32),m(440,"img",62),u(),c(441,"div",32),m(442,"img",63),u(),c(443,"div",32),m(444,"img",64),u(),c(445,"div",32),m(446,"img",65),u(),c(447,"div",32),m(448,"img",66),u(),c(449,"div",32),m(450,"img",67),u(),c(451,"div",32),m(452,"img",68),u(),c(453,"div",32),m(454,"img",69),u(),c(455,"div",32),m(456,"img",70),u(),c(457,"div",32),m(458,"img",71),u(),c(459,"div",32),m(460,"img",72),u()()()()()(),c(461,"div",3)(462,"div",4)(463,"div",5)(464,"app-page-section",73)(465,"ol")(466,"li"),f(467," The user is cooking in the kitchen. Suddenly, the light of the room becomes green and the smartwatch starts to vibrate. They have to check the smartwatch to see what is happening. "),m(468,"br"),f(469," (A person is ringing the bell to deliver a package to the user, so they are testing the notification function and the camera view from the smartwatch). "),u(),c(470,"li"),f(471," The user decides to have breakfast in the living room watching the TV. When they turn on the TV, the light of the living room turns on as well to indicate that the TV is turned on. The user does not want to have this permanent notification, so he decides to deactivate it for 20 minutes. "),m(472,"br"),f(473," (The user is testing the function of deactivating the light and smartwatch notifications for a given amount of time). "),u(),c(474,"li"),f(475," While the user is watching the TV, the light of the room becomes red to indicate that an emergency is happening. Unfortunately, the smartwatch is out of battery, so the user has to follow the path designed by the lights around the house and discover what is happening. "),m(476,"br"),f(477," (The user can test the path built from the lights around the house. Following them, he is able to find that there is a problem in the kitchen: they forgot to close the oven properly). "),u()()()()()()())},dependencies:[mi,Vi,Bi]})}}return e})()},{path:"pearly",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-pearly"]],decls:378,vars:0,consts:[["title","Pearly","image","assets/images/project-covers/Cover Pearly.jpg"],[1,"container"],["projectName","pearly"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Problem"],[1,"row","g-4"],[1,"col-2","col-md-1","big-number"],[1,"col-10","col-md-5"],["sectionTitle","Idea"],[1,"col-12","col-md-6"],["sectionSubtitle","Target Users"],["src","assets/images/Projects/pearly/users-01.jpg",1,"img-fluid","mb-2"],[1,"text-center"],["src","assets/images/Projects/pearly/users-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionTitle","Analysis of Context of use","sectionSubtitle","Ethnographical observations"],[1,"row","mb-4"],[1,"col-lg-8"],["src","assets/images/Projects/pearly/observation-template.jpg",1,"img-fluid",2,"background-color","white"],[1,"row"],[1,"col-12","col-lg-6"],[1,"col-7","col-md-4"],["src","assets/images/Projects/pearly/observation-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/pearly/observation-02.jpg",1,"img-fluid"],["src","assets/images/Projects/pearly/observation-04.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/pearly/observation-05.jpg",1,"img-fluid"],["src","assets/images/Projects/pearly/observation-06.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/pearly/observation-07.jpg",1,"img-fluid"],["sectionSubtitle","Environment analysis"],["src","assets/images/Projects/pearly/environment-analysis.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Interviews"],[1,"col","d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/pearly/interview-01.jpg",1,"img-fluid","mb-2"],["sectionTitle","Design Thinking","sectionSubtitle","Task Scenarios"],["src","assets/images/Projects/pearly/scenario-01.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/scenario-02.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Value Proposition Canvas"],["src","assets/images/Projects/pearly/valuepropcanvas-01.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/valuepropcanvas-02.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","User Journey Map"],["src","assets/images/Projects/pearly/journey-01.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/journey-02.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Task organization model"],["src","assets/images/Projects/pearly/taskmodel-01.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/taskmodel-02.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Sequence of events"],[1,"col-4","col-lg-3"],["src","assets/images/Projects/pearly/lowfi-phone-01.jpg",1,"img-fluid","mb-4",2,"width","100%"],[1,"col-12","col-lg-9"],["src","assets/images/Projects/pearly/lowfi-phone-02.jpg",1,"img-fluid","mb-4",2,"width","100%"],[1,"col-6","col-lg-3"],["src","assets/images/Projects/pearly/lowfi-tablet-01.jpg",1,"img-fluid","mb-4",2,"width","100%"],["src","assets/images/Projects/pearly/lowfi-tablet-02.jpg",1,"img-fluid","mb-4"],["sectionTitle","Usability Testing","sectionSubtitle","Tasks"],["src","assets/images/Projects/pearly/task-01.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/task-02.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Observation sheet"],["sectionSubtitle","Interview"],["src","assets/images/Projects/pearly/interview.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Results"],["src","assets/images/Projects/pearly/effectiveness-01.jpg",1,"img-fluid","mb-4","mt-4",2,"background-color","white"],["src","assets/images/Projects/pearly/efficiency-01.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/effectiveness-02.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/efficiency-02.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubsubtitle","SUS"],["src","assets/images/Projects/pearly/sus-01.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/sus-02.jpg",1,"img-fluid","mb-2"],["sectionSubtitle","Comparison"],["sectionTitle","High-Fidelity Prototype","sectionSubtitle","Navigation map"],["src","assets/images/Projects/pearly/map.jpg",1,"img-fluid"],["sectionSubtitle","Screens from Android App"],[1,"row","row-cols-2","row-cols-md-3","row-cols-xl-4","g-4"],[1,"d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/pearly/screen-01.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-02.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-03.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-04.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-05.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-06.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-07.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-08.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-09.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-10.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-11.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-12.jpg",1,"img-fluid","mb-2"],["sectionTitle","Usability Testing","sectionSubtitle","Effectiveness analysis"],["src","assets/images/Projects/pearly/effectiveness-03.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/effectiveness-04.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Efficiency analysis"],["src","assets/images/Projects/pearly/efficiency-03.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/efficiency-04.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/efficiency-05.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/efficiency-06.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","SUS"],["src","assets/images/Projects/pearly/sus-03.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","UEQ"],["src","assets/images/Projects/pearly/ueq.jpg",1,"img-fluid",2,"background-color","white"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6)(7,"div",7)(8,"div",8),f(9,"01"),u(),c(10,"div",9),f(11," There is no possibility to play tabletop games with friends when: "),c(12,"ul")(13,"li"),f(14,"they are not in the same place;"),u(),c(15,"li"),f(16,"someone forgot to bring or does not have the game;"),u(),c(17,"li"),f(18,"the game is not available in an electronic version."),u()()(),c(19,"div",8),f(20,"02"),u(),c(21,"div",9),f(22," It's difficult to test new games in terms of the design or feasibility of rules, amongst other aspects. Game creators need every time to find players to play with. "),u()()()()()(),c(23,"div",3)(24,"div",4)(25,"div",5)(26,"app-page-section",10)(27,"div",7)(28,"div",11)(29,"h4"),f(30,"Social network to play games online"),u(),f(31," From well-known to new ones. Find people to play with (friends or online people around the world). Discover games looking at people profiles (what they created, what they played). Game publishing houses can sponsor their games. "),u(),c(32,"div",11)(33,"h4"),f(34,"Create new games or modify existing ones"),u(),f(35," Create new games from scratch. Download templates of existing games and modify them to create a new version. Create more accessible games for people with special needs (e.g. UNO for color blindness). "),u(),c(36,"div",11)(37,"h4"),f(38,"Test games through statistics and surveys"),u(),f(39," How many people played, how long the match was, how difficult it was, the average time it took per turn. Game creators can understand how well the game works, and eventually change the rules or the cards. Users can choose a game based on its statistics. "),u(),c(40,"div",11)(41,"h4"),f(42,"Improve test design"),u(),f(43," Both systems should have the same number of performing actors since we discovered that it influences the user experience. "),u()()()()()(),c(44,"div",3)(45,"div",4)(46,"div",5)(47,"app-page-section",12)(48,"div",7)(49,"div",11),m(50,"img",13),c(51,"h4",14),f(52,"Tabletop game players"),u(),c(53,"ul")(54,"li"),f(55,"Main goal of our team: expectation with ICT."),u(),c(56,"li"),f(57,"Characteristics: people who are \u201clegally\u201d able to play."),u(),c(58,"li"),f(59," Motivations: social activity, entertainment, competing (money) "),u(),c(60,"li"),f(61,"Capabilities: medium-high level of technology use."),u(),c(62,"li"),f(63," Observation: difficulty of games increases with the advancement of cognition. "),u()()(),c(64,"div",11),m(65,"img",15),c(66,"h4",14),f(67,"Game creators"),u(),c(68,"ul")(69,"li"),f(70," Main goal of our team: help in getting valuable feedback about created games and provide a platform for expansion. "),u(),c(71,"li"),f(72," Activities: creation, testing, promoting, modifying, customizing, digitalizing. "),u(),c(73,"li"),f(74," Characteristics: people who are legally able to create, for profession or for hobby. "),u(),c(75,"li"),f(76,"Capabilities: medium-high level of technology use."),u()()()()()()()(),c(77,"div",3)(78,"div",4)(79,"div",5)(80,"app-page-section",16)(81,"div",17)(82,"div",18),m(83,"img",19),u()(),c(84,"div",20)(85,"div",21)(86,"h4"),f(87,"Tabletop game players"),u(),c(88,"p"),f(89," Who: people playing card and board games. From kids, to young adults, to adults over 40 coming with their children. Most of them are students (school bags under the table). Most of them are men. Where: Epic Boardgame Caf\xe8. Small and a bit crowded, but nobody seems disturbed. Everyone stays and plays in a respectful way. Full of games to take with recommendations on the wall. What: arrival and meeting at the place, choosing a game, setting up the game, playing the game. Extra: eating, drinking, and relaxing. "),u()(),c(90,"div",21)(91,"h4"),f(92,"Game creators"),u(),c(93,"p"),f(94," Who: professional game designers who were seen in their natural context How: impossible to observe them while creating a game, so we watched videos on YouTube. Where: their room. Plenty of game-related objects. What: gaming community is very strong and they help each other a lot. The YouTuber set the limitation (principle) to start out with a game that only consists of cards because the error possibilities are decreased and cards can be multi-purposed and can have more types. "),u()()(),c(95,"div",20)(96,"div",22),m(97,"img",23)(98,"img",24),u(),c(99,"div",22),m(100,"img",25)(101,"img",26),u(),c(102,"div",22),m(103,"img",27)(104,"img",28),u()()(),c(105,"app-page-section",29)(106,"div",17)(107,"div",18),m(108,"img",30),u()()(),c(109,"app-page-section",31)(110,"div",7)(111,"div",11)(112,"div",32),m(113,"img",33),c(114,"h4",14),f(115,"Game Players"),u()(),f(116," Participants demographic: "),c(117,"ul")(118,"li"),f(119," Students and workers (developer, some engineers, professor). "),u(),c(120,"li"),f(121,"From Spain, Bulgary, Italy, America."),u(),c(122,"li"),f(123,"Between 18 and 24 years old, an adult of 53 years old."),u(),c(124,"li"),f(125,"Use smartphone and laptop. Some of them also tablet."),u()(),f(126," Findings: "),c(127,"ul")(128,"li"),f(129," On average, men play twice or three times a week, while women play once a month "),u(),c(130,"li"),f(131,"The social aspect of the activity is really important."),u(),c(132,"li"),f(133," Time constraints (like duration of the game or schedule of free time) have a great impact on the activity. "),u(),c(134,"li"),f(135,"Some players model games as a hobby."),u(),c(136,"li"),f(137,"Different games will be played in different situations."),u(),c(138,"li"),f(139," Cognitive levels have a big role in decision-making about the game. For example, games played in a family context are different then games played with friends "),u(),c(140,"li"),f(141," The number of players can vary from 2 to 10 people or more. The major trend of this answer is about 4 people. "),u(),c(142,"li"),f(143,"Play with friends, family members, or colleagues."),u(),c(144,"li"),f(145," When the game is not available: choose another one, play the online version, invent a new version. It doesn't happen a lot of times. "),u(),c(146,"li"),f(147," Not enough people to play: play in couples or groups, make people wait for the next round to play, choose another game. It happens a lot of times. "),u(),c(148,"li"),f(149," Discover new games from friend recommendations, the Internet, Youtube channels, in places with games. "),u(),c(150,"li"),f(151," Almost all of them would like to play more. What's stopping them: lack of time, study/work, friends not always available. "),u()()(),c(152,"div",11)(153,"div",32),m(154,"img",33),c(155,"h4",14),f(156,"Game creators"),u()(),f(157," Participants demographic: "),c(158,"ul")(159,"li"),f(160," 2 game creators (one followed on YouTube) for profession, 1 game creator for hobby. "),u(),c(161,"li"),f(162,"From USA, Spain."),u(),c(163,"li"),f(164,"23 and 29 years old."),u(),c(165,"li"),f(166,"Use smartphone and computer."),u()(),f(167," Findings: "),c(168,"ul")(169,"li"),f(170," Professionals prefer paper prototyping, while the hobby-creator prefers coding and printing games. "),u(),c(171,"li"),f(172," Process of game creation: "),c(173,"ol")(174,"li"),f(175," Brainstorming session (take ideas also from other games). "),u(),c(176,"li"),f(177," From a week up to 1-2 months: figure out all the details of the idea. "),u(),c(178,"li"),f(179," Make a prototype: physical tools, laminate elements when they feel it achieved a good version. "),u(),c(180,"li"),f(181," Playtests: alone, discovering scenarios and new, unexpected outcomes. The rules are getting more fixed. "),u()()(),c(182,"li"),f(183," Hobby-creator is influenced by external factors (requests from friends) and is limited by the used technology. "),u(),c(184,"li"),f(185,' Experience and playtests reveal if the design is good or bad. The "core idea" is very important. '),u(),c(186,"li"),f(187," Important design decisions consider the age and cognitive levels of the target group and the number of players. The competitiveness and excitement of the game have a high priority. "),u(),c(188,"li"),f(189," Early testing with friends or on their own. Then, testing in game conventions or dedicated events. "),u(),c(190,"li"),f(191," Considered data during testing: body language, analysis of actions, elements used, questionnaires, and interviews. "),u(),c(192,"li"),f(193," Time to perform a playtest: length of game * 120% + Q&A. "),u(),c(194,"li"),f(195," Promote games through game conventions and through online game community-related platforms. "),u(),c(196,"li"),f(197,"Difficulties: discover problems in late-stage."),u()()()()()()()(),c(198,"div",3)(199,"div",4)(200,"div",5)(201,"app-page-section",34)(202,"div"),m(203,"img",35),u(),c(204,"div"),m(205,"img",36),u()(),c(206,"app-page-section",37)(207,"div"),m(208,"img",38),u(),c(209,"div"),m(210,"img",39),u()(),c(211,"app-page-section",40)(212,"div"),m(213,"img",41),u(),c(214,"div"),m(215,"img",42),u()(),c(216,"app-page-section",43)(217,"div"),m(218,"img",44),u(),c(219,"div"),m(220,"img",45),u()()()()(),c(221,"div",3)(222,"div",4)(223,"div",5)(224,"app-page-section",46)(225,"div",20)(226,"h4"),f(227,"Smartphone"),u(),c(228,"div",47),m(229,"img",48),u(),c(230,"div",49),m(231,"img",50),c(232,"ul")(233,"li"),f(234,"People should be in the same room while playing."),u(),c(235,"li"),f(236," The user needs to scan the playing surface to start playing. "),u(),c(237,"li"),f(238," AR Mode during the playing: it is possible to switch between AR Mode (where the cards on the table are displayed) and card view mode (where only your cards are displayed). "),u(),c(239,"li"),f(240," Search and add a friend manually (like in social media) to play with. "),u(),c(241,"li"),f(242,"Friends, followers, followings."),u(),c(243,"li"),f(244," Game-oriented approach: the user first selects the game and then select the action. "),u()()()(),c(245,"div",20)(246,"h4"),f(247,"Tablet"),u(),c(248,"div",51),m(249,"img",52),u(),c(250,"div",49),m(251,"img",53),c(252,"ul")(253,"li"),f(254,"People can play remotely."),u(),c(255,"li"),f(256,"Add a friend sending the code (like Kahoot)."),u(),c(257,"li"),f(258,"No friends, only followers and followings."),u(),c(259,"li"),f(260," Action-oriented: the user first selects the action and then select the game. "),u()()()()()()()(),c(261,"div",3)(262,"div",4)(263,"div",5)(264,"app-page-section",54)(265,"div"),m(266,"img",55)(267,"img",56),u()(),c(268,"app-page-section",57)(269,"ul")(270,"li"),f(271,"Is this task completed successfully?"),u(),c(272,"li"),f(273,"Number of errors"),u(),c(274,"li"),f(275,"Number of clicks"),u(),c(276,"li"),f(277,"Actions performed incorrectly related to the errors"),u(),c(278,"li"),f(279,"Non-verbal communication"),u()()(),c(280,"app-page-section",58)(281,"div"),m(282,"img",59),u()(),c(283,"app-page-section",60)(284,"div"),f(285," The tablet prototype achieved a higher score amongst users regarding every usability attribute. "),c(286,"div"),m(287,"img",61),u(),c(288,"div"),m(289,"img",62),u(),c(290,"div"),m(291,"img",63),u(),c(292,"div"),m(293,"img",64),u()()(),c(294,"app-page-section",65)(295,"div",7)(296,"div",11)(297,"div",32),m(298,"img",66),c(299,"h4",14),f(300,"Phone prototype score: 58.33"),u()()(),c(301,"div",11)(302,"div",32),m(303,"img",67),c(304,"h4",14),f(305,"Tablet prototype score: 76.66"),u()()()()(),c(306,"app-page-section",68)(307,"div",7)(308,"div",11)(309,"div",32)(310,"h4"),f(311,"Smartphone"),u(),f(312," Complex Difficulties in remembering all the cards, due to the changing between \u201ccard view\u201d and \u201ctable view\u201d (AR functionality) Interesting idea of AR Difficulties to interpret buttons Frustrations with not working buttons (not implemented features) Mandatory step of reading game rules Error in the number of participants Next buttons are provided in the bottom right (accessible in a comfortable way) Lofical flow of actions "),u()(),c(313,"div",11)(314,"div",32)(315,"h4"),f(316,"Tablet"),u(),f(317," Easy to use All the cards are shown on the screen (bigger size of the screen) No AR support provided Buttons have labels that help the user Frustrations with not working buttons (not implemented features) The user can skip game rules Participants join automatically the game Next buttons in the set-up of the game is uncomfortable to click and difficult to see Confusing flow of actions "),u()(),c(318,"div"),f(319," The tablet prototype achieved a higher score amongst users regarding every usability attribute. However, if we zoom in more into the problems and certain aspects of the prototypes, we can find problems with both of them. \u2192 tablet prototype as the basis of the next iteration, including positive aspects of the phone prototype. "),u()()()()()(),c(320,"div",3)(321,"div",4)(322,"div",5)(323,"app-page-section",69),m(324,"img",70),u(),c(325,"app-page-section",71)(326,"div",72)(327,"div",73),m(328,"img",74),u(),c(329,"div",73),m(330,"img",75),u(),c(331,"div",73),m(332,"img",76),u(),c(333,"div",73),m(334,"img",77),u(),c(335,"div",73),m(336,"img",78),u(),c(337,"div",73),m(338,"img",79),u(),c(339,"div",73),m(340,"img",80),u(),c(341,"div",73),m(342,"img",81),u(),c(343,"div",73),m(344,"img",82),u(),c(345,"div",73),m(346,"img",83),u(),c(347,"div",73),m(348,"img",84),u(),c(349,"div",73),m(350,"img",85),u()()()()()(),c(351,"div",3)(352,"div",4)(353,"div",5)(354,"app-page-section",86)(355,"div",20)(356,"div",18),m(357,"img",87),u(),c(358,"div",18),m(359,"img",88),u()()(),c(360,"app-page-section",89)(361,"div",20)(362,"div",18),m(363,"img",90),u(),c(364,"div",18),m(365,"img",91),u(),c(366,"div",18),m(367,"img",92),u(),c(368,"div",18),m(369,"img",93),u()()(),c(370,"app-page-section",94)(371,"div",20)(372,"div",18),m(373,"img",95),u()()(),c(374,"app-page-section",96)(375,"div",20)(376,"div",18),m(377,"img",97),u()()()()()()())},dependencies:[mi,Vi,Bi]})}}return e})()},{path:"bookflix",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-bookflix"]],decls:561,vars:0,consts:[["title","Bookflix","image","assets/images/project-covers/Cover Bookflix.gif"],[1,"container"],["projectName","bookflix"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Motivation"],["sectionSubtitle","Users"],[1,"row","g-4"],[1,"col","d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/bookflix/users-01.jpg",1,"img-fluid","mb-2"],[1,"text-center"],["src","assets/images/Projects/bookflix/users-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionSubtitle","User research","sectionSubtitle","Questionnaire (Google Forms)"],["sectionSubtitle","Interviews (face to face)"],[1,"col-12","col-md-6"],["sectionSubtitle","Results"],[1,"row"],[1,"col-lg-4"],["src","assets/images/Projects/bookflix/results-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/results-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/results-03.jpg",1,"img-fluid"],["sectionTitle","Data elaboration","sectionSubtitle","Points of view"],["sectionSubtitle","Personas"],["src","assets/images/Projects/bookflix/personas-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/personas-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/personas-03.jpg",1,"img-fluid"],["sectionSubtitle","Task scenarios"],[1,"col","col-12","col-lg-10","col-xl-6"],["src","assets/images/Projects/bookflix/task-scenarios-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/task-scenarios-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/task-scenarios-03.jpg",1,"img-fluid"],["sectionSubtitle","Hierarchical Task Analysis"],["src","assets/images/Projects/bookflix/hierarchical-task-analysis.jpg",1,"img-fluid"],["sectionSubtitle","Environment analysis"],[1,"col-12","col-md-8","col-lg-4"],["src","assets/images/Projects/bookflix/environmental-analysis-01.jpg",1,"img-fluid"],[1,"col-12","col-lg-8"],[1,"col-8","col-md-8","col-lg-4"],["src","assets/images/Projects/bookflix/environmental-analysis-02.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/environmental-analysis-03.jpg",1,"img-fluid"],["sectionTitle","Low-fidelity prototype","sectionSubtitle","Alternative designs"],[1,"row","g-4","alternative-designs"],[1,"col-2","col-md-1","big-number"],[1,"bi","bi-phone"],[1,"col-10","col-md-5"],[1,"bi","bi-tablet"],["sectionSubtitle","Navigation map"],["src","assets/images/Projects/bookflix/navigation-map-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/navigation-map-02.jpg",1,"img-fluid"],["sectionSubtitle","Tasks"],[1,"col-12","col-md-6","d-flex","flex-column","justify-content-center"],[1,"ratio","ratio-16x9"],["src","https://www.youtube.com/embed/wjWDS0WioIE?rel=0","allowfullscreen",""],["src","https://www.youtube.com/embed/55hqRHnWoFA?rel=0","allowfullscreen",""],["sectionSubsubtitle","TASK 1: Search, Read and Dark Mode"],["src","assets/images/Projects/bookflix/tasks-01.jpg",1,"img-fluid","mb-4"],["sectionSubsubtitle","TASK 2: Add a friend"],["sectionSubsubtitle","TASK 3: Leave a Review"],["sectionSubsubtitle","TASK 4: Look for Friend Activity"],["sectionSubsubtitle","TASK 5: Discover and read"],["sectionTitle","High-fidelity prototype","sectionSubtitle","Tasks"],["src","https://www.youtube.com/embed/7b5-3cD95VA?rel=0","allowfullscreen",""],["src","https://www.youtube.com/embed/taSAuFhNfgQ?rel=0","allowfullscreen",""],["sectionSubtitle","Smartphone screens"],[1,"row","row-cols-2","row-cols-md-3","row-cols-lg-4","g-4"],[1,"col"],["src","assets/images/Projects/bookflix/smartphone-01.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-02.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-03.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-04.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-05.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-06.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-07.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-08.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-09.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-10.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-11.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-12.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-13.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-14.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-15.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-16.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-17.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-18.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-19.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-20.jpg",1,"img-fluid"],["sectionSubtitle","Tablet screens"],[1,"row","row-cols-1","row-cols-md-2","row-cols-lg-3","g-4"],["src","assets/images/Projects/bookflix/tablet-01.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-02.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-03.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-04.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-05.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-06.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-07.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-08.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-09.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-10.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-11.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-12.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-13.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-14.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-15.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-16.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-17.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-18.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-19.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-20.jpg",1,"img-fluid"],["sectionSubtitle","Comparison"],["src","assets/images/Projects/bookflix/comparison-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/comparison-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/comparison-03.jpg",1,"img-fluid"],["sectionTitle","Usability testing","sectionSubtitle","Research Question"],["sectionSubtitle","Material organization"],["src","assets/images/Projects/bookflix/questionnaires-01.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/bookflix/questionnaires-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionTitle","Results"],["sectionSubtitle","Metrics of the tasks"],["src","assets/images/Projects/bookflix/usability-test-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/usability-test-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/usability-test-03.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/usability-test-04.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/usability-test-05.jpg",1,"img-fluid"],["sectionSubtitle","SUS"],["sectionSubtitle","UEQ"],["src","assets/images/Projects/bookflix/ueq-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/ueq-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/ueq-03.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/ueq-04.jpg",1,"img-fluid"],["sectionSubsubtitle","Confidence intervals"],["src","assets/images/Projects/bookflix/ueq-confidence-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/ueq-confidence-02.jpg",1,"img-fluid"],["sectionSubtitle","Coding"],["src","assets/images/Projects/bookflix/coding-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/coding-02.jpg",1,"img-fluid","mb-4"],["sectionSubtitle","Interpretation"],["src","assets/images/Projects/bookflix/interpretation.jpg",1,"img-fluid","mb-4"],["sectionSubtitle","Main problems of the prototypes"],[1,"col","col-12","col-md-6","col-lg-4"],[1,"col","col-12","col-md-12","col-lg-4"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6),f(7," Have a better identification of the distinct users and reasons why some of them don\u2019t read, so that we can understand if they can be included as potential users. "),c(8,"ul")(9,"li"),f(10,"Understand the reading frequency of people."),u(),c(11,"li"),f(12," Understand personal reading habits (when, where, what... they read). "),u(),c(13,"li"),f(14,"Understand the process for finding reading materials."),u()()()()()(),c(15,"div",3)(16,"div",4)(17,"div",5)(18,"app-page-section",7)(19,"div",8)(20,"div",9),m(21,"img",10),c(22,"h4",11),f(23,"Typical Reader"),u()(),c(24,"div",9),m(25,"img",12),c(26,"h4",11),f(27,"Not-usual reader"),u()()()()()()(),c(28,"div",3)(29,"div",4)(30,"div",5)(31,"app-page-section",13)(32,"div")(33,"ul")(34,"li"),f(35," To have a better idea on how to define who is a typical reader or not in Spain (threshold of read books in a year) "),u(),c(36,"li"),f(37,"To have a better vision of what the people read."),u()(),c(38,"ol")(39,"li"),f(40,"How old are you?"),u(),c(41,"li"),f(42,"Are you student or do you work?"),u(),c(43,"li"),f(44,"How many books you read per year?"),u(),c(45,"li"),f(46," How much money you spend by buying books every year? (Closed answers with ranges of money) "),u(),c(47,"li"),f(48,"Real books or e-book, which one do you prefer?"),u(),c(49,"li"),f(50,"Renting book or buying book, what makes you feel better?"),u(),c(51,"li"),f(52," Which approach do you use to find the book you want? "),c(53,"ul")(54,"li"),f(55,"kindle market"),u(),c(56,"li"),f(57,"bookshop"),u(),c(58,"li"),f(59,"library"),u(),c(60,"li"),f(61,"others _______________________"),u()()(),c(62,"li"),f(63," Do you also read one of these? "),c(64,"ul")(65,"li"),f(66,"magazine"),u(),c(67,"li"),f(68,"comics"),u(),c(69,"li"),f(70,"academic"),u(),c(71,"li"),f(72,"others _______________________"),u()()()()()(),c(73,"app-page-section",14)(74,"ol")(75,"li"),f(76,"Age - Study/Work"),u(),c(77,"li"),f(78,"How many books you read per year?"),u()(),c(79,"div",8)(80,"div",15)(81,"h4"),f(82,"For typical reader:"),u(),c(83,"ol")(84,"li"),f(85,"What do you usually read?"),u(),c(86,"li"),f(87,"Where do you usually read?"),u(),c(88,"li"),f(89," Do you feel like you would want to read more? If so, what\u2019s stopping you? "),u(),c(90,"li"),f(91,"Have you ever used an e-book reader?"),u(),c(92,"li"),f(93," (If the user doesn\u2019t use the ebook reader) Why don\u2019t you use the ebook reader? "),u(),c(94,"li"),f(95," (If the user doesn\u2019t use the ebook reader) Do you take books outside with you? Which problems do you have while doing so? "),u(),c(96,"li"),f(97," Do you read books that you only want to read or are you usually open to suggestion? "),u()()(),c(98,"div",15)(99,"h4"),f(100,"For not usual reader:"),u(),c(101,"ol")(102,"li"),f(103," Do you feel like you would want to read more? If so, what\u2019s stopping you? "),u(),c(104,"li"),f(105," Are there some books that you want to read but you don\u2019t know where to find these? "),u(),c(106,"li"),f(107," Have you ever tried an e-book reader as an alternative to classic books? "),u()()()()(),c(108,"app-page-section",16)(109,"div",17)(110,"div",18)(111,"h4"),f(112,"3 books"),u(),c(113,"p"),f(114," Threshold between readers and nonreaders. Defined through the survey data. "),u()(),c(115,"div",18)(116,"h4"),f(117," Having more time for reading, being relaxed, find easily what they want, being up-to-date. "),u(),c(118,"p"),f(119,"The main needs of the users"),u()(),c(120,"div",18)(121,"h4"),f(122,"Quick breaks, waiting dor someone, at the library"),u(),c(123,"p"),f(124," When and where users like to read. Noticed through ethnographic observation "),u()()(),m(125,"img",19)(126,"img",20)(127,"img",21),u()()()(),c(128,"div",3)(129,"div",4)(130,"div",5)(131,"app-page-section",22)(132,"div")(133,"ul")(134,"li"),f(135," Maria, 22 years old student needs some approach to easily carry books in order to comfortably read without feeling tired. "),u(),c(136,"li"),f(137," Luis, 35 years old reader needs to be able to acquire books simply and legally in order to be happy about not having to take risks looking for digital books on unreliable pages "),u(),c(138,"li"),f(139," Jose, 26 years old reader needs to find more books that he wants ASAP in order to be relaxed and enjoy the most his free moments without wasting time. "),u()()()(),c(140,"app-page-section",23),m(141,"img",24)(142,"img",25)(143,"img",26),u(),c(144,"app-page-section",27)(145,"div",17)(146,"div",28),m(147,"img",29),u(),c(148,"div",28),m(149,"img",30),u(),c(150,"div",28),m(151,"img",31),u()()(),c(152,"app-page-section",32),m(153,"img",33),u(),c(154,"app-page-section",34)(155,"div",8)(156,"div",35),m(157,"img",36),u(),c(158,"div",37)(159,"h4"),f(160,"Transport"),u(),f(161," Technical aspects: "),c(162,"ul")(163,"li"),f(164,"Probability without WiFi, or stable signal."),u()(),f(165," Physical aspects: "),c(166,"ul")(167,"li"),f(168," Not comfortable for reading (no seat, shaking or sharp break). "),u(),c(169,"li"),f(170,"Not a lot of space to lay down your baggage."),u(),c(171,"li"),f(172,"Noise might disturb reading."),u()(),f(173," Sociological aspects: "),c(174,"ul")(175,"li"),f(176,"Other passengers might disturb to get off."),u()()(),c(177,"div",38),m(178,"img",39),u(),c(179,"div",37)(180,"h4"),f(181,"Outside places"),u(),f(182," Technical aspects: "),c(183,"ul")(184,"li"),f(185,"Probability without Wifi, or stable signal."),u()(),f(186," Physical aspects: "),c(187,"ul")(188,"li"),f(189,"Some place don\u2019t have stable light to read."),u(),c(190,"li"),f(191,"Weather sometimes not suitable for reading paper books."),u()(),f(192," Sociological aspects: "),c(193,"ul")(194,"li"),f(195,"Other people can disturb by yelling."),u()()(),c(196,"div",38),m(197,"img",40),u(),c(198,"div",37)(199,"h4"),f(200,"Inside Place"),u(),f(201," Technical aspects: "),c(202,"ul")(203,"li"),f(204,"Access to Wi-Fi."),u()(),f(205," Physical aspects: "),c(206,"ul")(207,"li"),f(208,"Comfortable to read."),u(),c(209,"li"),f(210,"Nice temperature."),u(),c(211,"li"),f(212,"Sufficient light to read."),u()()()()()()()(),c(213,"div",3)(214,"div",4)(215,"div",5)(216,"app-page-section",41)(217,"div",42)(218,"div",43),m(219,"i",44),u(),c(220,"div",45)(221,"h4"),f(222,"Smartphone"),u()(),c(223,"div",43),m(224,"i",46),u(),c(225,"div",45)(226,"h4"),f(227,"Tablet"),u()()()(),c(228,"app-page-section",47),m(229,"img",48)(230,"img",49),u(),c(231,"app-page-section",50)(232,"div",8)(233,"div",51)(234,"div",52),m(235,"iframe",53),u()(),c(236,"div",51)(237,"div",52),m(238,"iframe",54),u()()()(),c(239,"app-page-section",55)(240,"div"),m(241,"img",56),c(242,"p"),f(243," You have gone down to the pool and, after a while, the sun has begun to set. However, you don't feel like going up yet, so you decide to stay for a short reading. "),u(),c(244,"p"),f(245," You decide it's a good time to finally read you Harry Potter and the Philosopher's Stone. Due to the low light, you would like to activate the dark mode. "),u()()(),c(246,"app-page-section",57)(247,"div"),m(248,"img",56),c(249,"p"),f(250," You have to add your new colleague Jay SunnyDay, who has told you that he has a Bookflix account, as a friend in Bookflix in the system. "),u()()(),c(251,"app-page-section",58)(252,"div"),m(253,"img",56),c(254,"p"),f(255,' This morning you finished the book "10 little niggers" and now you would like to add a review saying how much you liked it. '),u()()(),c(256,"app-page-section",59)(257,"div"),m(258,"img",56),c(259,"p"),f(260," You have to add to your list of pending books the one your friend Jay SunnyDay is reading now. "),u()()(),c(261,"app-page-section",60)(262,"div"),m(263,"img",56),c(264,"p"),f(265," Now that you have finished reading all your books you want to read something new but you are not sure which one. "),u(),c(266,"p"),f(267,"Read the currently most trendy book."),u()()()()()(),c(268,"div",3)(269,"div",4)(270,"div",5)(271,"app-page-section",61)(272,"div",8)(273,"div",51)(274,"div",52),m(275,"iframe",62),u()(),c(276,"div",51)(277,"div",52),m(278,"iframe",63),u()()()(),c(279,"app-page-section",64)(280,"div",65)(281,"div",66),m(282,"img",67),u(),c(283,"div",66),m(284,"img",68),u(),c(285,"div",66),m(286,"img",69),u(),c(287,"div",66),m(288,"img",70),u(),c(289,"div",66),m(290,"img",71),u(),c(291,"div",66),m(292,"img",72),u(),c(293,"div",66),m(294,"img",73),u(),c(295,"div",66),m(296,"img",74),u(),c(297,"div",66),m(298,"img",75),u(),c(299,"div",66),m(300,"img",76),u(),c(301,"div",66),m(302,"img",77),u(),c(303,"div",66),m(304,"img",78),u(),c(305,"div",66),m(306,"img",79),u(),c(307,"div",66),m(308,"img",80),u(),c(309,"div",66),m(310,"img",81),u(),c(311,"div",66),m(312,"img",82),u(),c(313,"div",66),m(314,"img",83),u(),c(315,"div",66),m(316,"img",84),u(),c(317,"div",66),m(318,"img",85),u(),c(319,"div",66),m(320,"img",86),u()()(),c(321,"app-page-section",87)(322,"div",88)(323,"div",66),m(324,"img",89),u(),c(325,"div",66),m(326,"img",90),u(),c(327,"div",66),m(328,"img",91),u(),c(329,"div",66),m(330,"img",92),u(),c(331,"div",66),m(332,"img",93),u(),c(333,"div",66),m(334,"img",94),u(),c(335,"div",66),m(336,"img",95),u(),c(337,"div",66),m(338,"img",96),u(),c(339,"div",66),m(340,"img",97),u(),c(341,"div",66),m(342,"img",98),u(),c(343,"div",66),m(344,"img",99),u(),c(345,"div",66),m(346,"img",100),u(),c(347,"div",66),m(348,"img",101),u(),c(349,"div",66),m(350,"img",102),u(),c(351,"div",66),m(352,"img",103),u(),c(353,"div",66),m(354,"img",104),u(),c(355,"div",66),m(356,"img",105),u(),c(357,"div",66),m(358,"img",106),u(),c(359,"div",66),m(360,"img",107),u(),c(361,"div",66),m(362,"img",108),u()()(),c(363,"app-page-section",109),m(364,"img",110)(365,"img",111)(366,"img",112),u()()()(),c(367,"div",3)(368,"div",4)(369,"div",5)(370,"app-page-section",113),f(371," What are the reasons for a person to choose one prototype over another? "),u(),c(372,"app-page-section",114)(373,"div",8)(374,"div",9)(375,"h4"),f(376,"Metric observation"),u(),c(377,"ul")(378,"li"),f(379,"Number of commands/actions used to carry out the task"),u(),c(380,"li"),f(381,"Time spent performing a task"),u(),c(382,"li"),f(383,"Number (or percentage) of errors"),u(),c(384,"li"),f(385,"The ratio of tasks performed correctly"),u(),c(386,"li"),f(387,"Time spent on errors and their recovery"),u(),c(388,"li"),f(389,"Frequency of use of the help (and/or manual)"),u(),c(390,"li"),f(391,"Task completion"),u(),c(392,"li"),f(393,"Satisfaction"),u()()(),c(394,"div",9)(395,"h4"),f(396,"Interview"),u(),c(397,"ul")(398,"li"),f(399,"I saw you did X. Can you tell me why?"),u(),c(400,"li"),f(401,"What is your opinion about the system?"),u(),c(402,"li"),f(403," What was the most difficult thing to do for prototype A? "),u(),c(404,"li"),f(405," If you could change one thing on the system what would it be? "),u(),c(406,"li"),f(407," What is the most natural way of accomplishing this task? "),u(),c(408,"li"),f(409,"Which prototype did you like more?"),u(),c(410,"li"),f(411,"Which one would you use for your routine?"),u()()()(),c(412,"h4"),f(413,"Questionnaires"),u(),c(414,"div",8)(415,"div",66),m(416,"img",115),u(),c(417,"div",66),m(418,"img",116),u()()()()()(),c(419,"div",3)(420,"div",4)(421,"div",5)(422,"app-page-section",117)(423,"p"),f(424,"Problem: device mismatch \u2192 bias, negative influence."),u(),c(425,"p"),f(426," We had to use a laptop screen instead of a tablet to show the prototype because the testings were performed online. "),u()(),c(427,"app-page-section",118),m(428,"img",119)(429,"img",120)(430,"img",121)(431,"img",122)(432,"img",123),u(),c(433,"app-page-section",124)(434,"div",8)(435,"div",43),f(436,"01"),u(),c(437,"div",45)(438,"h4"),f(439,"Score: 75"),u(),c(440,"p"),f(441,"Smartphone prototype"),u()(),c(442,"div",43),f(443,"02"),u(),c(444,"div",45)(445,"h4"),f(446,"Score: 58"),u(),c(447,"p"),f(448,"Tablet prototype"),u()()()(),c(449,"app-page-section",125),m(450,"img",126)(451,"img",127)(452,"img",128)(453,"img",129),u(),c(454,"app-page-section",130),m(455,"img",131)(456,"img",132),u(),c(457,"app-page-section",133),m(458,"img",134)(459,"img",135),c(460,"div",8)(461,"div",43),f(462,"01"),u(),c(463,"div",45)(464,"h4"),f(465,"Prototype related"),u(),c(466,"ul")(467,"li"),f(468,"Opinions about the overall system."),u(),c(469,"li"),f(470,"Statements about the feel and look of the prototype."),u(),c(471,"li"),f(472," Expectation code: when the user was expecting a particular action or a confirmation of an action. "),u()()(),c(473,"div",43),f(474,"02"),u(),c(475,"div",45)(476,"h4"),f(477,"Task related"),u(),c(478,"ul")(479,"li"),f(480,"Statements about actions that the user performed."),u(),c(481,"li"),f(482," Repeated and assumed things to happen strictly related to the task. "),u()()(),c(483,"div",43),f(484,"03"),u(),c(485,"div",45)(486,"h4"),f(487,"Feelings"),u(),c(488,"ul")(489,"li"),f(490,"Emotional responses to the task, prototype."),u(),c(491,"li"),f(492,"Both positive and negative."),u()()(),c(493,"div",43),f(494,"04"),u(),c(495,"div",45)(496,"h4"),f(497,"Errors"),u(),c(498,"ul")(499,"li"),f(500," Statements about different types of errors faced during the process. "),u(),c(501,"li"),f(502," Code division based on what caused them: "),c(503,"ul")(504,"li"),f(505,"device mismatch (we used a laptop to test on)"),u(),c(506,"li"),f(507,"how we formulated the tasks"),u(),c(508,"li"),f(509,"implementation"),u(),c(510,"li"),f(511,"design decisions"),u(),c(512,"li"),f(513,"user-related errors"),u()()()()()()(),c(514,"app-page-section",136),m(515,"img",137),c(516,"ul")(517,"li"),f(518," Technological issues category: comments with technical difficulties the users encountered during the usability test. "),u(),c(519,"li"),f(520," Suggestions category: any type of comment that was a suggestion for the prototype. "),u(),c(521,"li"),f(522," Negative feelings category: bigger number for the tablet prototype. "),u(),c(523,"li"),f(524," Positive feelings category: low for both prototypes, but bigger for the phone prototype. "),u()(),f(525," Conclusion: users prefer the smartphone prototype because it follows more their natural way of thinking and because of that they experience less negative feelings and more positive feelings. "),u(),c(526,"app-page-section",138)(527,"div",8)(528,"div",139)(529,"h4"),f(530,"Prototype A (Phone)"),u(),c(531,"p"),f(532," The level of completion was shown, but only with a bar, and no percentage was provided, as the users would have wanted it. "),u(),c(533,"p"),f(534," The users didn't recognize that the prototype was scrollable because of the prototype mismatch. Missing scrollbar. "),u(),c(535,"p"),f(536," Appearing text for the reviewing was automatically added, and some users wanted to delete the text. "),u(),c(537,"p"),f(538,"No profile view was provided."),u()(),c(539,"div",139)(540,"h4"),f(541,"Prototype B (Tablet)"),u(),c(542,"p"),f(543," The search functionality was joint, which means that searching for a book and a friend used the same search bar. This confused the users. "),u(),c(544,"p"),f(545," The search bar next to the search icon was actually a dropdown list to filter by categories of books. The search icon guided the user to a new searching page with a divided search option, which some users liked and some were confused by. "),u(),c(546,"p"),f(547,"No level of completion was provided on the book list."),u()(),c(548,"div",140)(549,"h4"),f(550,"Both"),u(),c(551,"p"),f(552," Missing additional text information about a book (the cover was not always readable). "),u(),c(553,"p"),f(554," Missing numbers in the top10 ranking, so users were confused about the order. "),u(),c(555,"p"),f(556," No information was given about the chronological order or the date that the book was last opened (or finished). "),u(),c(557,"p"),f(558,"In some cases, the back button was not implemented."),u(),c(559,"p"),f(560," The users associated some of the functionalities not related to reading a book, but a profile setting (e.g. put the dark mode). "),u()()()()()()()())},dependencies:[mi,Vi,Bi],styles:[".alternative-designs[_ngcontent-%COMP%]{display:flex;align-items:center}"]})}}return e})()},{path:"racoomba",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-racoomba"]],decls:3,vars:0,consts:[["title","Racoomba!","image","assets/images/project-covers/Cover Racoomba.png"],[1,"container"],["projectName","racoomba"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),u())},dependencies:[Vi,Bi]})}}return e})()},{path:"espoora",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-espoora"]],decls:196,vars:0,consts:[["title","Espoora","image","assets/images/project-covers/Cover Espoora.png"],[1,"container"],["projectName","espoora"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Problem"],["src","assets/images/Projects/espoora/challenge.png",1,"img-fluid","mb-4"],["src","assets/images/Projects/espoora/map.jpg",1,"img-fluid","mb-4"],["sectionTitle","User Research"],["sectionSubtitle","Personas","sectionSubsubtitle","Tim (the tourist)"],[1,"row"],[1,"col","col-12","col-lg-8"],["src","assets/images/Projects/espoora/persona-01.jpg",1,"img-fluid","mb-4",2,"width","100%"],[1,"col","col-12","col-lg-4"],["sectionSubsubtitle","Elena (the Event Organizer)"],["src","assets/images/Projects/espoora/persona-02.jpg",1,"img-fluid","mb-4",2,"width","100%"],["sectionSubtitle","Key Insights"],["sectionSubsubtitle","Technique of 5 Whys"],[1,"col","col-12","col-md-6"],["sectionSubsubtitle","HMW (How Might We) questions"],[1,"row","g-4"],[1,"col-12","col-md-6"],["sectionTitle","Idea"],[1,"row","g-4","mb-4"],[1,"col-2","col-md-1","big-number"],[1,"col-10","col-md-5"],["sectionSubtitle","Scenario"],[1,"row","mb-4"],["src","assets/images/Projects/espoora/scenario-01.jpg",1,"img-fluid"],["src","assets/images/Projects/espoora/scenario-02.jpg",1,"img-fluid"],["src","assets/images/Projects/espoora/scenario-03.jpg",1,"img-fluid"],["sectionTitle","Portal Design"],["src","assets/images/Projects/espoora/web.png",1,"img-fluid"],["sectionTitle","Business Model"],["src","assets/images/Projects/espoora/business-model.png",1,"img-fluid"],["sectionSubtitle","SWOT analysis"],["src","assets/images/Projects/espoora/swot.png",1,"img-fluid"],["sectionSubtitle","Competitors"],["sectionSubtitle","Value Proposition"],["src","assets/images/Projects/espoora/value-proposition.jpg",1,"img-fluid","mb-4"],["sectionSubtitle","Income Model"],["sectionSubtitle","Enter to the market"],["sectionTitle","The team"],["src","assets/images/Projects/espoora/team.png",1,"img-fluid"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6)(7,"p"),f(8," Espoo is a high tech hotspot where they are planning to have a city as a service model to serve its citizens. It is an innovation and adventure hub and it is the most digitized city in Europe. Most of the tourists visit Espoo to enjoy different events organized in nature, or they come for international conferences and business events. "),u(),c(9,"p"),f(10,"The challenge we had to work on was the following:"),u(),m(11,"img",7),c(12,"p"),f(13," We started listing various groups of people connected to our challenge, mapping how satisfied they are with the current situation and anticipating how they would feel about changes in the area. "),u(),m(14,"img",8),u()()()(),c(15,"div",3)(16,"div",4)(17,"div",5)(18,"app-page-section",9),f(19," For now Espoo haven't focalized a lot on digital communication in the tourism field. Since most of the tourists come to Espoo to join events, we decided to focus on tourists as well as event organizers. So, we performed 5 interviews to them, and we discovered several problems that could be solved with the help of digitalization. "),u(),c(20,"app-page-section",10)(21,"div",11)(22,"div",12),m(23,"img",13),u(),c(24,"div",14)(25,"p"),f(26," Tim is a tourist who would like to participate in some events in Espoo. He has to go on the website visitespoo.fi, and then after having chosen an event, he has to organize the travel. "),u(),c(27,"p"),f(28,"The problems are that:"),u(),c(29,"ul")(30,"li"),f(31," visitespoo.fi is not a famous website, so Tim can not be aware of its existence "),u(),c(32,"li"),f(33," for organizing the travel, he has to keep track of several apps (like Booking, Tripadvisors, GMail, Ryanair) "),u()()()()(),c(34,"app-page-section",15)(35,"div",11)(36,"div",12),m(37,"img",16),u(),c(38,"div",14),f(39," After finding a place and choosing the dates, she has to: "),c(40,"ul")(41,"li"),f(42," contact many places to find one free on the chosen dates "),u(),c(43,"li"),f(44," contact various hotels and restaurants, hoping that they are free as well on the chosen dates "),u(),c(45,"li"),f(46,"organize transportation"),u(),c(47,"li"),f(48,"consider various constraints and tourists requirements"),u()(),c(49,"p"),f(50," All the process is performed among several chatting apps and social media, and all the information of the events are shared between event organizers through excel files or google docs. "),u()()()(),c(51,"app-page-section",17)(52,"ul")(53,"li"),f(54," Cultural event organizer needs advertisement and collaboration with local companies, because its potential participants are not familiar with the event content and thus not aware if it's worth going. "),u(),c(55,"li"),f(56," Foreign tourist needs communication ability and ease of access, because want to make the most out of the experience, avoiding missing grat opportunities. "),u(),c(57,"li"),f(58," Business visitors need travel efficiency and proper communicate instructions, because they don't want to waste time because of time contrasints. "),u()()(),c(59,"app-page-section",18)(60,"div",11)(61,"div",19),f(62," Discoverability of information for tourists is difficult. "),c(63,"ol")(64,"li"),f(65,"Why? Because the system is not so dynamic now."),u(),c(66,"li"),f(67," Why? Because there are only webpages, physical kiosks for tickets and service points. "),u(),c(68,"li"),f(69,"Why? Because the city didn't focus a lot on visitors."),u(),c(70,"li"),f(71," Why? Because Espoo is in the vicinity of Helsinki and other big cities. Visitors prefer staying in these cities after visiting Espoo for any events. "),u(),c(72,"li"),f(73," Why? Becaue initially they didn't focus on tourism but now they want to expand "),u()()(),c(74,"div",19),f(75," Visitor do not prefer to download applications for information. "),c(76,"ol")(77,"li"),f(78," Why? Because they prefer to look for information from other sources. "),u(),c(79,"li"),f(80," Why? Because they don't want to spend time in learning how to use a new app. "),u(),c(81,"li"),f(82," Why? Because it's not worth since they are going to use it only for few days. "),u(),c(83,"li"),f(84," Why? Because they prefer to relax and enjoy the travel more. "),u(),c(85,"li"),f(86,"Why? Because they're on holiday."),u()()()()(),c(87,"app-page-section",20)(88,"div",21)(89,"div",22),f(90," HMW make the communication more effective between event organizers and tourists, so that tourists and event organizers could find, access or create, advertise more easily the events? "),u(),c(91,"div",22),f(92," HMW digitalize the info point, so that tourists could be up-to-date with all the information about events in a more dynamic way? "),u(),c(93,"div",22),f(94," HMW improve the communication between event organizers and local companies, so that event organizers could cooperate in an effortless way with restaurants, hotels and transportations? "),u()()()()()(),c(95,"div",3)(96,"div",4)(97,"div",5)(98,"app-page-section",23)(99,"p"),f(100,"Espoora consists mainly of 2 elements:"),u(),c(101,"div",24)(102,"div",25),f(103,"01"),u(),c(104,"div",26)(105,"h4"),f(106,"Web Portal"),u(),f(107," To present and manage events. "),u(),c(108,"div",25),f(109,"02"),u(),c(110,"div",26)(111,"h4"),f(112,"Chatbot"),u(),f(113," To have a smarter and more interactive access to information on events but also on the city itself. "),u()(),f(114," We didn't want to create a new App, mainly because the visitors will install it and maybe delete in just few days, at the end of the travel. "),u(),c(115,"app-page-section",27)(116,"div",28)(117,"div",12),m(118,"img",29),u(),c(119,"div",14)(120,"p"),f(121," Elena wants to organize a music festival, so she creates the event on Espoora, inserting dates, places and expected number of participants. "),u(),c(122,"p"),f(123," Accommodations, restaurants and other attractions can make offers, discounts or deals for tourists. "),u(),c(124,"p"),f(125," Elena can finally publicize the event on Espoora, so now tourists can see it and join it. "),u()()(),c(126,"div",28)(127,"div",12),m(128,"img",30),u(),c(129,"div",14)(130,"p"),f(131," Tim, on the other hand, discover through the chatbot that there is a new event in Espoo and decides to go. "),u(),c(132,"p"),f(133," So, he chooses one of the suggested accommodations, pays and gets the ticket of the event. "),u()()(),c(134,"div",11)(135,"div",12),m(136,"img",31),u(),c(137,"div",14)(138,"p"),f(139," When Tim arrives in the city, he can eat in one of the restaurants that are sponsored by the event and have a discount. "),u(),c(140,"p"),f(141," Also, through the chatbot he can get information about the event and places to visit around. "),u(),c(142,"p"),f(143,"And finally, he can join the music festival!"),u()()()()()()(),c(144,"div",3)(145,"div",4)(146,"div",5)(147,"app-page-section",32),m(148,"img",33),u()()()(),c(149,"div",3)(150,"div",4)(151,"div",5)(152,"app-page-section",34),m(153,"img",35),u(),c(154,"app-page-section",36),m(155,"img",37),u(),c(156,"app-page-section",38)(157,"ul")(158,"li"),f(159,"They don't focus on specific cities."),u(),c(160,"li"),f(161," There are no efficient channels for communication and collaboration among event organizers and other stakeholders. "),u(),c(162,"li"),f(163," On the tourist side, they don't offer a companion platform that supports services throughout the entire travelling flow. "),u()()(),c(164,"app-page-section",39),m(165,"img",40),c(166,"p"),f(167," For tourists, we create the value of discoverability of events through decentralized information distribution. "),u(),c(168,"p"),f(169," For both tourists and event organizers, the process is simplified because the entire process of organizing or participating in an event is in one place. "),u(),c(170,"p"),f(171," For the local companies like hotels or restaurants, we create visibility. With our platform, the marketplace is more transparent for them. "),u()(),c(172,"app-page-section",41)(173,"p"),f(174," We don't want to make the user pay more just for having an easy and integrated platform to deal with the most problematic aspects of a trip. "),u(),c(175,"p"),f(176," Since Espoora provides a unique ticketing system for events, we are planning to take a percentage out of every ticket sold and every room booked. "),u(),c(177,"p"),f(178," We believe that hotels or those who offer accommodations are willing to give up a small part of the profit for a service like ours, moreover this is what the competition already does. "),u()(),c(179,"app-page-section",42)(180,"ol")(181,"li"),f(182,"Publicize the platform through QR codes and social media."),u(),c(183,"li"),f(184," Expand the team with professionals (designers and engineers). "),u(),c(185,"li"),f(186,"Recruit people that will communicate with all partners."),u(),c(187,"li"),f(188," Better study the processes already existing in hotels and restaurants. in order to better adapt the design of our platform. "),u(),c(189,"li"),f(190," Ask the help of Espoo, which has a history in funding startups that offer services for the city. "),u()()()()()(),c(191,"div",3)(192,"div",4)(193,"div",5)(194,"app-page-section",43),m(195,"img",44),u()()()()())},dependencies:[mi,Vi,Bi]})}}return e})()}];let VV=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({imports:[UC.forRoot(LV),UC]})}}return e})(),BV=(()=>{class e{constructor(){this.currentYear=(new Date).getFullYear()}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-footer"]],decls:20,vars:1,consts:[["data-bs-theme","dark",1,"bg-body-tertiary","text-center","footer-background"],[1,"container","p-3","text-light"],[1,"row"],[1,"col-md-4","mb-4","mb-md-0"],[1,"footer-text"],["href","https://www.linkedin.com/in/vania-ferrari/","target","_blank",1,"ms-2","me-2","link-light","link-body-emphasis"],[1,"bi","bi-linkedin"],["href","https://github.com/vaffer94","target","_blank",1,"ms-2","me-2","link-light","link-body-emphasis"],[1,"bi","bi-github"],["href","mailto:vania.ferrari00@gmail.com"]],template:function(i,o){1&i&&(c(0,"footer",0)(1,"div",1)(2,"div",2)(3,"div",3)(4,"h4"),f(5,"Made with \u2764\ufe0f, \u2615\ufe0f, and Angular"),u(),c(6,"small",4),f(7),u()(),c(8,"div",3)(9,"h4"),f(10,"Follow me"),u(),c(11,"a",5),m(12,"i",6),u(),c(13,"a",7),m(14,"i",8),u()(),c(15,"div",3)(16,"h4"),f(17,"Contact me"),u(),c(18,"a",9),f(19," vania.ferrari00@gmail.com "),u()()()()()),2&i&&(M(7),un("Copyright \xa9 ",o.currentYear," - Miriam Punzi (thanks a lot)"))},styles:[".footer-background[_ngcontent-%COMP%]{background-color:var(--footer)!important;margin-top:90px}.footer-upperdiv[_ngcontent-%COMP%]{padding:10px!important}.footer-copyright[_ngcontent-%COMP%]{color:var(--icon)}.footer-text[_ngcontent-%COMP%]{font-size:.85rem}"]})}}return e})(),HV=(()=>{class e{constructor(){this.isNavbarVisible=!1,this.isCollapsed=!1}ngOnInit(){this.navbar||(this.navbar=document.querySelector(".navbar")),window.addEventListener("scroll",()=>{this.isCollapsed||(window.scrollY>0?this.isNavbarVisible||(this.Show(),this.isNavbarVisible=!0):this.isNavbarVisible&&(this.Hide(),this.isNavbarVisible=!1))})}OnClick(){this.isCollapsed=!this.isCollapsed,this.isCollapsed&&this.Show()}Hide(){this.navbar?.classList.remove("navbar-visible"),this.navbar?.classList.add("navbar-invisible")}Show(){this.navbar?.classList.remove("navbar-invisible"),this.navbar?.classList.add("navbar-visible")}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-navbar"]],decls:17,vars:0,consts:[[1,"navbar","navbar-expand-lg","navbar-dark","navbar-invisible"],[1,"container"],["href","",1,"navbar-brand",2,"margin-left","20px"],["type","button","data-bs-toggle","collapse","data-bs-target","#navbarSupportedContent","aria-controls","navbarSupportedContent","aria-expanded","false","aria-label","Toggle navigation",1,"navbar-toggler",2,"margin-right","10px",3,"click"],[1,"navbar-toggler-icon"],["id","navbarSupportedContent",1,"collapse","navbar-collapse"],[1,"navbar-nav","ms-auto",2,"margin-right","10px"],[1,"nav-item"],["href","",1,"nav-link"],["href","/#projects",1,"nav-link"],["href","/assets/docs/VaniaFerrari_042025.pdf","target","_blank",1,"nav-link"]],template:function(i,o){1&i&&(c(0,"nav",0)(1,"div",1)(2,"a",2),f(3,"Vania Ferrari"),u(),c(4,"button",3),le("click",function(){return o.OnClick()}),m(5,"span",4),u(),c(6,"div",5)(7,"ul",6)(8,"li",7)(9,"a",8),f(10,"Home"),u()(),c(11,"li",7)(12,"a",9),f(13,"Projects"),u()(),c(14,"li",7)(15,"a",10),f(16,"Resume"),u()()()()()())},styles:["nav[_ngcontent-%COMP%]{position:fixed;width:100%;z-index:9999;top:0;transition:background-color .2s}.navbar-invisible[_ngcontent-%COMP%]{background:transparent}.navbar-visible[_ngcontent-%COMP%]{background:var(--navbar)}ul[_ngcontent-%COMP%]{padding-top:0;list-style-type:none;margin-left:0}li[_ngcontent-%COMP%]{padding-bottom:0}a[_ngcontent-%COMP%]{color:#fff}@media (max-width: 991.98px){li[_ngcontent-%COMP%]{margin-left:20px}}"]})}}return e})();const $V=["background"],UV=function(e,n,t,i){return{top:e,left:n,width:t,height:i}};function GV(e,n){if(1&e&&m(0,"div",3),2&e){const t=n.$implicit;A("ngClass",t.className)("ngStyle",Eb(2,UV,t.top+"px",t.left+"px",t.size+"px",t.size+"px"))}}let zV=(()=>{class e{constructor(){this.divs=[]}ngAfterViewInit(){const t=["primary","secondary"];for(let l=0;l<500;l++){var a=250*Math.random()+50;this.divs.push({className:t[Math.floor(Math.random()*t.length)],top:4e4*Math.random(),left:Math.random()*window.innerWidth-150,size:a})}}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-background"]],viewQuery:function(i,o){if(1&i&&eo($V,5),2&i){let r;Se(r=Ee())&&(o.backgroundElement=r.first)}},decls:3,vars:1,consts:[[1,"background-container"],["background",""],["class","background-div",3,"ngClass","ngStyle",4,"ngFor","ngForOf"],[1,"background-div",3,"ngClass","ngStyle"]],template:function(i,o){1&i&&(c(0,"div",0,1),B(2,GV,1,7,"div",2),u()),2&i&&(M(2),A("ngForOf",o.divs))},dependencies:[vu,Nn,_u],styles:[".background-container[_ngcontent-%COMP%]{position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;pointer-events:none;overflow:hidden;background:var(--color-background)}.background-div[_ngcontent-%COMP%]{position:absolute;border-radius:var(--radius-pill);opacity:.5;box-sizing:border-box;filter:blur(.8px);border-radius:var(--radius-md)}.primary[_ngcontent-%COMP%]{background:var(--color-primary-dark);border:1px solid var(--color-primary-light);box-shadow:0 0 3px var(--color-primary-light)}.secondary[_ngcontent-%COMP%]{background:var(--color-secondary-dark);border:1px solid var(--color-secondary-light);box-shadow:0 0 3px var(--color-secondary-light)}"]})}}return e})(),WV=(()=>{class e{constructor(){this.title="vaniaferrari-portfolio"}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-root"]],decls:4,vars:0,template:function(i,o){1&i&&m(0,"app-navbar")(1,"app-background")(2,"router-outlet")(3,"app-footer")},dependencies:[Eg,BV,HV,zV]})}}return e})();const qV=["addListener","removeListener"],YV=["addEventListener","removeEventListener"],ZV=["on","off"];function Tt(e,n,t,i){if(ne(t)&&(i=t,t=void 0),i)return Tt(e,n,t).pipe(lg(i));const[o,r]=function KV(e){return ne(e.addEventListener)&&ne(e.removeEventListener)}(e)?YV.map(s=>a=>e[s](n,a,t)):function QV(e){return ne(e.addListener)&&ne(e.removeListener)}(e)?qV.map(ZC(e,n)):function JV(e){return ne(e.on)&&ne(e.off)}(e)?ZV.map(ZC(e,n)):[];if(!o&&kd(e))return lt(s=>Tt(s,n,t))(at(e));if(!o)throw new TypeError("Invalid event target");return new Te(s=>{const a=(...l)=>s.next(1r(a)})}function ZC(e,n){return t=>i=>e[t](n,i)}class XV extends Je{constructor(n,t){super()}schedule(n,t=0){return this}}const Bu={setInterval(e,n,...t){const{delegate:i}=Bu;return i?.setInterval?i.setInterval(e,n,...t):setInterval(e,n,...t)},clearInterval(e){const{delegate:n}=Bu;return(n?.clearInterval||clearInterval)(e)},delegate:void 0},QC={now:()=>(QC.delegate||Date).now(),delegate:void 0};class el{constructor(n,t=el.now){this.schedulerActionCtor=n,this.now=t}schedule(n,t=0,i){return new this.schedulerActionCtor(this,n).schedule(i,t)}}el.now=QC.now;const n8=new class t8 extends el{constructor(n,t=el.now){super(n,t),this.actions=[],this._active=!1}flush(n){const{actions:t}=this;if(this._active)return void t.push(n);let i;this._active=!0;do{if(i=n.execute(n.state,n.delay))break}while(n=t.shift());if(this._active=!1,i){for(;n=t.shift();)n.unsubscribe();throw i}}}(class e8 extends XV{constructor(n,t){super(n,t),this.scheduler=n,this.work=t,this.pending=!1}schedule(n,t=0){var i;if(this.closed)return this;this.state=n;const o=this.id,r=this.scheduler;return null!=o&&(this.id=this.recycleAsyncId(r,o,t)),this.pending=!0,this.delay=t,this.id=null!==(i=this.id)&&void 0!==i?i:this.requestAsyncId(r,this.id,t),this}requestAsyncId(n,t,i=0){return Bu.setInterval(n.flush.bind(n,this),i)}recycleAsyncId(n,t,i=0){if(null!=i&&this.delay===i&&!1===this.pending)return t;null!=t&&Bu.clearInterval(t)}execute(n,t){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const i=this._execute(n,t);if(i)return i;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(n,t){let o,i=!1;try{this.work(n)}catch(r){i=!0,o=r||new Error("Scheduled action threw falsy error")}if(i)return this.unsubscribe(),o}unsubscribe(){if(!this.closed){const{id:n,scheduler:t}=this,{actions:i}=t;this.work=this.state=this.scheduler=null,this.pending=!1,Ui(i,this),null!=n&&(this.id=this.recycleAsyncId(t,n,null)),this.delay=null,super.unsubscribe()}}});const{isArray:o8}=Array;function XC(e){return 1===e.length&&o8(e[0])?e[0]:e}function kg(...e){const n=Al(e),t=XC(e);return t.length?new Te(i=>{let o=t.map(()=>[]),r=t.map(()=>!1);i.add(()=>{o=r=null});for(let s=0;!i.closed&&s{if(o[s].push(a),o.every(l=>l.length)){const l=o.map(d=>d.shift());i.next(n?n(...l):l),o.some((d,h)=>!d.length&&r[h])&&i.complete()}},()=>{r[s]=!0,!o[s].length&&i.complete()}));return()=>{o=r=null}}):mn}function Fg(...e){const n=Al(e);return Ue((t,i)=>{const o=e.length,r=new Array(o);let s=e.map(()=>!1),a=!1;for(let l=0;l{r[l]=d,!a&&!s[l]&&(s[l]=!0,(a=s.every(xn))&&(s=null))},mo));t.subscribe(ke(i,l=>{if(a){const d=[l,...r];i.next(n?n(...d):d)}}))})}Error,Math,Math,Math;const kB=["*"],d6=["dialog"];function $o(e){return"string"==typeof e}function Uo(e){return null!=e}function _s(e){return(e||document.body).getBoundingClientRect()}const PE={animation:!0,transitionTimerDelayMs:5},iH=()=>{},{transitionTimerDelayMs:oH}=PE,hl=new Map,en=(e,n,t,i)=>{let o=i.context||{};const r=hl.get(n);if(r)switch(i.runningTransition){case"continue":return mn;case"stop":e.run(()=>r.transition$.complete()),o=Object.assign(r.context,o),hl.delete(n)}const s=t(n,i.animation,o)||iH;if(!i.animation||"none"===window.getComputedStyle(n).transitionProperty)return e.run(()=>s()),W(void 0).pipe(function tH(e){return n=>new Te(t=>n.subscribe({next:s=>e.run(()=>t.next(s)),error:s=>e.run(()=>t.error(s)),complete:()=>e.run(()=>t.complete())}))}(e));const a=new ye,l=new ye,d=a.pipe(function s8(...e){return n=>Fa(n,W(...e))}(!0));hl.set(n,{transition$:a,complete:()=>{l.next(),l.complete()},context:o});const h=function nH(e){const{transitionDelay:n,transitionDuration:t}=window.getComputedStyle(e);return 1e3*(parseFloat(n)+parseFloat(t))}(n);return e.runOutsideAngular(()=>{const p=Tt(n,"transitionend").pipe(Ze(d),vt(({target:v})=>v===n));(function eS(...e){return 1===(e=XC(e)).length?at(e[0]):new Te(function r8(e){return n=>{let t=[];for(let i=0;t&&!n.closed&&i{if(t){for(let r=0;r{let r=function i8(e){return e instanceof Date&&!isNaN(e)}(e)?+e-t.now():e;r<0&&(r=0);let s=0;return t.schedule(function(){o.closed||(o.next(s++),0<=i?this.schedule(void 0,i):o.complete())},r)})}(h+oH).pipe(Ze(d)),p,l).pipe(Ze(d)).subscribe(()=>{hl.delete(n),e.run(()=>{s(),a.next(),a.complete()})})}),a.asObservable()};let id=(()=>{class e{constructor(){this.animation=PE.animation}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),UE=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),GE=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),qE=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),YE=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();var Pe=function(e){return e[e.Tab=9]="Tab",e[e.Enter=13]="Enter",e[e.Escape=27]="Escape",e[e.Space=32]="Space",e[e.PageUp=33]="PageUp",e[e.PageDown=34]="PageDown",e[e.End=35]="End",e[e.Home=36]="Home",e[e.ArrowLeft=37]="ArrowLeft",e[e.ArrowUp=38]="ArrowUp",e[e.ArrowRight=39]="ArrowRight",e[e.ArrowDown=40]="ArrowDown",e}(Pe||{});typeof navigator<"u"&&navigator.userAgent&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||/Macintosh/.test(navigator.userAgent)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2||/Android/.test(navigator.userAgent));const tT=["a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","[contenteditable]",'[tabindex]:not([tabindex="-1"])'].join(", ");function nT(e){const n=Array.from(e.querySelectorAll(tT)).filter(t=>-1!==t.tabIndex);return[n[0],n[n.length-1]]}new Date(1882,10,12),new Date(2174,10,25);let gT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),_T=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();class Yo{constructor(n,t,i){this.nodes=n,this.viewRef=t,this.componentRef=i}}let i$=(()=>{class e{constructor(t,i){this._el=t,this._zone=i}ngOnInit(){this._zone.onStable.asObservable().pipe(Et(1)).subscribe(()=>{en(this._zone,this._el.nativeElement,(t,i)=>{i&&_s(t),t.classList.add("show")},{animation:this.animation,runningTransition:"continue"})})}hide(){return en(this._zone,this._el.nativeElement,({classList:t})=>t.remove("show"),{animation:this.animation,runningTransition:"stop"})}static{this.\u0275fac=function(i){return new(i||e)(y(we),y(ae))}}static{this.\u0275cmp=se({type:e,selectors:[["ngb-modal-backdrop"]],hostAttrs:[2,"z-index","1055"],hostVars:6,hostBindings:function(i,o){2&i&&(No("modal-backdrop"+(o.backdropClass?" "+o.backdropClass:"")),me("show",!o.animation)("fade",o.animation))},inputs:{animation:"animation",backdropClass:"backdropClass"},standalone:!0,features:[En],decls:0,vars:0,template:function(i,o){},encapsulation:2})}}return e})();class yT{update(n){}close(n){}dismiss(n){}}const o$=["animation","ariaLabelledBy","ariaDescribedBy","backdrop","centered","fullscreen","keyboard","scrollable","size","windowClass","modalDialogClass"],r$=["animation","backdropClass"];class s${_applyWindowOptions(n,t){o$.forEach(i=>{Uo(t[i])&&(n[i]=t[i])})}_applyBackdropOptions(n,t){r$.forEach(i=>{Uo(t[i])&&(n[i]=t[i])})}update(n){this._applyWindowOptions(this._windowCmptRef.instance,n),this._backdropCmptRef&&this._backdropCmptRef.instance&&this._applyBackdropOptions(this._backdropCmptRef.instance,n)}get componentInstance(){if(this._contentRef&&this._contentRef.componentRef)return this._contentRef.componentRef.instance}get closed(){return this._closed.asObservable().pipe(Ze(this._hidden))}get dismissed(){return this._dismissed.asObservable().pipe(Ze(this._hidden))}get hidden(){return this._hidden.asObservable()}get shown(){return this._windowCmptRef.instance.shown.asObservable()}constructor(n,t,i,o){this._windowCmptRef=n,this._contentRef=t,this._backdropCmptRef=i,this._beforeDismiss=o,this._closed=new ye,this._dismissed=new ye,this._hidden=new ye,n.instance.dismissEvent.subscribe(r=>{this.dismiss(r)}),this.result=new Promise((r,s)=>{this._resolve=r,this._reject=s}),this.result.then(null,()=>{})}close(n){this._windowCmptRef&&(this._closed.next(n),this._resolve(n),this._removeModalElements())}_dismiss(n){this._dismissed.next(n),this._reject(n),this._removeModalElements()}dismiss(n){if(this._windowCmptRef)if(this._beforeDismiss){const t=this._beforeDismiss();!function AE(e){return e&&e.then}(t)?!1!==t&&this._dismiss(n):t.then(i=>{!1!==i&&this._dismiss(n)},()=>{})}else this._dismiss(n)}_removeModalElements(){const n=this._windowCmptRef.instance.hide(),t=this._backdropCmptRef?this._backdropCmptRef.instance.hide():W(void 0);n.subscribe(()=>{const{nativeElement:i}=this._windowCmptRef.location;i.parentNode.removeChild(i),this._windowCmptRef.destroy(),this._contentRef&&this._contentRef.viewRef&&this._contentRef.viewRef.destroy(),this._windowCmptRef=null,this._contentRef=null}),t.subscribe(()=>{if(this._backdropCmptRef){const{nativeElement:i}=this._backdropCmptRef.location;i.parentNode.removeChild(i),this._backdropCmptRef.destroy(),this._backdropCmptRef=null}}),kg(n,t).subscribe(()=>{this._hidden.next(),this._hidden.complete()})}}var Rm=function(e){return e[e.BACKDROP_CLICK=0]="BACKDROP_CLICK",e[e.ESC=1]="ESC",e}(Rm||{});let a$=(()=>{class e{constructor(t,i,o){this._document=t,this._elRef=i,this._zone=o,this._closed$=new ye,this._elWithFocus=null,this.backdrop=!0,this.keyboard=!0,this.dismissEvent=new z,this.shown=new ye,this.hidden=new ye}get fullscreenClass(){return!0===this.fullscreen?" modal-fullscreen":$o(this.fullscreen)?` modal-fullscreen-${this.fullscreen}-down`:""}dismiss(t){this.dismissEvent.emit(t)}ngOnInit(){this._elWithFocus=this._document.activeElement,this._zone.onStable.asObservable().pipe(Et(1)).subscribe(()=>{this._show()})}ngOnDestroy(){this._disableEventHandling()}hide(){const{nativeElement:t}=this._elRef,i={animation:this.animation,runningTransition:"stop"},s=kg(en(this._zone,t,()=>t.classList.remove("show"),i),en(this._zone,this._dialogEl.nativeElement,()=>{},i));return s.subscribe(()=>{this.hidden.next(),this.hidden.complete()}),this._disableEventHandling(),this._restoreFocus(),s}_show(){const t={animation:this.animation,runningTransition:"continue"};kg(en(this._zone,this._elRef.nativeElement,(r,s)=>{s&&_s(r),r.classList.add("show")},t),en(this._zone,this._dialogEl.nativeElement,()=>{},t)).subscribe(()=>{this.shown.next(),this.shown.complete()}),this._enableEventHandling(),this._setFocus()}_enableEventHandling(){const{nativeElement:t}=this._elRef;this._zone.runOutsideAngular(()=>{Tt(t,"keydown").pipe(Ze(this._closed$),vt(o=>o.which===Pe.Escape)).subscribe(o=>{this.keyboard?requestAnimationFrame(()=>{o.defaultPrevented||this._zone.run(()=>this.dismiss(Rm.ESC))}):"static"===this.backdrop&&this._bumpBackdrop()});let i=!1;Tt(this._dialogEl.nativeElement,"mousedown").pipe(Ze(this._closed$),_t(()=>i=!1),Pn(()=>Tt(t,"mouseup").pipe(Ze(this._closed$),Et(1))),vt(({target:o})=>t===o)).subscribe(()=>{i=!0}),Tt(t,"click").pipe(Ze(this._closed$)).subscribe(({target:o})=>{t===o&&("static"===this.backdrop?this._bumpBackdrop():!0===this.backdrop&&!i&&this._zone.run(()=>this.dismiss(Rm.BACKDROP_CLICK))),i=!1})})}_disableEventHandling(){this._closed$.next()}_setFocus(){const{nativeElement:t}=this._elRef;if(!t.contains(document.activeElement)){const i=t.querySelector("[ngbAutofocus]"),o=nT(t)[0];(i||o||t).focus()}}_restoreFocus(){const t=this._document.body,i=this._elWithFocus;let o;o=i&&i.focus&&t.contains(i)?i:t,this._zone.runOutsideAngular(()=>{setTimeout(()=>o.focus()),this._elWithFocus=null})}_bumpBackdrop(){"static"===this.backdrop&&en(this._zone,this._elRef.nativeElement,({classList:t})=>(t.add("modal-static"),()=>t.remove("modal-static")),{animation:this.animation,runningTransition:"continue"})}static{this.\u0275fac=function(i){return new(i||e)(y(nt),y(we),y(ae))}}static{this.\u0275cmp=se({type:e,selectors:[["ngb-modal-window"]],viewQuery:function(i,o){if(1&i&&eo(d6,7),2&i){let r;Se(r=Ee())&&(o._dialogEl=r.first)}},hostAttrs:["role","dialog","tabindex","-1"],hostVars:7,hostBindings:function(i,o){2&i&&(Ce("aria-modal",!0)("aria-labelledby",o.ariaLabelledBy)("aria-describedby",o.ariaDescribedBy),No("modal d-block"+(o.windowClass?" "+o.windowClass:"")),me("fade",o.animation))},inputs:{animation:"animation",ariaLabelledBy:"ariaLabelledBy",ariaDescribedBy:"ariaDescribedBy",backdrop:"backdrop",centered:"centered",fullscreen:"fullscreen",keyboard:"keyboard",scrollable:"scrollable",size:"size",windowClass:"windowClass",modalDialogClass:"modalDialogClass"},outputs:{dismissEvent:"dismiss"},standalone:!0,features:[En],ngContentSelectors:kB,decls:4,vars:2,consts:[["role","document"],["dialog",""],[1,"modal-content"]],template:function(i,o){1&i&&(Bh(),c(0,"div",0,1)(2,"div",2),Hh(3),u()()),2&i&&No("modal-dialog"+(o.size?" modal-"+o.size:"")+(o.centered?" modal-dialog-centered":"")+o.fullscreenClass+(o.scrollable?" modal-dialog-scrollable":"")+(o.modalDialogClass?" "+o.modalDialogClass:""))},styles:["ngb-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}\n"],encapsulation:2})}}return e})(),l$=(()=>{class e{constructor(t){this._document=t}hide(){const t=Math.abs(window.innerWidth-this._document.documentElement.clientWidth),i=this._document.body,o=i.style,{overflow:r,paddingRight:s}=o;if(t>0){const a=parseFloat(window.getComputedStyle(i).paddingRight);o.paddingRight=`${a+t}px`}return o.overflow="hidden",()=>{t>0&&(o.paddingRight=s),o.overflow=r}}static{this.\u0275fac=function(i){return new(i||e)(L(nt))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),c$=(()=>{class e{constructor(t,i,o,r,s,a,l){this._applicationRef=t,this._injector=i,this._environmentInjector=o,this._document=r,this._scrollBar=s,this._rendererFactory=a,this._ngZone=l,this._activeWindowCmptHasChanged=new ye,this._ariaHiddenValues=new Map,this._scrollBarRestoreFn=null,this._modalRefs=[],this._windowCmpts=[],this._activeInstances=new z,this._activeWindowCmptHasChanged.subscribe(()=>{if(this._windowCmpts.length){const d=this._windowCmpts[this._windowCmpts.length-1];((e,n,t,i=!1)=>{e.runOutsideAngular(()=>{const o=Tt(n,"focusin").pipe(Ze(t),ue(r=>r.target));Tt(n,"keydown").pipe(Ze(t),vt(r=>r.which===Pe.Tab),Fg(o)).subscribe(([r,s])=>{const[a,l]=nT(n);(s===a||s===n)&&r.shiftKey&&(l.focus(),r.preventDefault()),s===l&&!r.shiftKey&&(a.focus(),r.preventDefault())}),i&&Tt(n,"click").pipe(Ze(t),Fg(o),ue(r=>r[1])).subscribe(r=>r.focus())})})(this._ngZone,d.location.nativeElement,this._activeWindowCmptHasChanged),this._revertAriaHidden(),this._setAriaHidden(d.location.nativeElement)}})}_restoreScrollBar(){const t=this._scrollBarRestoreFn;t&&(this._scrollBarRestoreFn=null,t())}_hideScrollBar(){this._scrollBarRestoreFn||(this._scrollBarRestoreFn=this._scrollBar.hide())}open(t,i,o){const r=o.container instanceof HTMLElement?o.container:Uo(o.container)?this._document.querySelector(o.container):this._document.body,s=this._rendererFactory.createRenderer(null,null);if(!r)throw new Error(`The specified modal container "${o.container||"body"}" was not found in the DOM.`);this._hideScrollBar();const a=new yT,l=(t=o.injector||t).get(Zt,null)||this._environmentInjector,d=this._getContentRef(t,l,i,a,o);let h=!1!==o.backdrop?this._attachBackdrop(r):void 0,p=this._attachWindowComponent(r,d.nodes),g=new s$(p,d,h,o.beforeDismiss);return this._registerModalRef(g),this._registerWindowCmpt(p),g.hidden.pipe(Et(1)).subscribe(()=>Promise.resolve(!0).then(()=>{this._modalRefs.length||(s.removeClass(this._document.body,"modal-open"),this._restoreScrollBar(),this._revertAriaHidden())})),a.close=v=>{g.close(v)},a.dismiss=v=>{g.dismiss(v)},a.update=v=>{g.update(v)},g.update(o),1===this._modalRefs.length&&s.addClass(this._document.body,"modal-open"),h&&h.instance&&h.changeDetectorRef.detectChanges(),p.changeDetectorRef.detectChanges(),g}get activeInstances(){return this._activeInstances}dismissAll(t){this._modalRefs.forEach(i=>i.dismiss(t))}hasOpenModals(){return this._modalRefs.length>0}_attachBackdrop(t){let i=Ap(i$,{environmentInjector:this._applicationRef.injector,elementInjector:this._injector});return this._applicationRef.attachView(i.hostView),t.appendChild(i.location.nativeElement),i}_attachWindowComponent(t,i){let o=Ap(a$,{environmentInjector:this._applicationRef.injector,elementInjector:this._injector,projectableNodes:i});return this._applicationRef.attachView(o.hostView),t.appendChild(o.location.nativeElement),o}_getContentRef(t,i,o,r,s){return o?o instanceof ze?this._createFromTemplateRef(o,r):$o(o)?this._createFromString(o):this._createFromComponent(t,i,o,r,s):new Yo([])}_createFromTemplateRef(t,i){const r=t.createEmbeddedView({$implicit:i,close(s){i.close(s)},dismiss(s){i.dismiss(s)}});return this._applicationRef.attachView(r),new Yo([r.rootNodes],r)}_createFromString(t){const i=this._document.createTextNode(`${t}`);return new Yo([[i]])}_createFromComponent(t,i,o,r,s){const l=Ap(o,{environmentInjector:i,elementInjector:gt.create({providers:[{provide:yT,useValue:r}],parent:t})}),d=l.location.nativeElement;return s.scrollable&&d.classList.add("component-host-scrollable"),this._applicationRef.attachView(l.hostView),new Yo([[d]],l.hostView,l)}_setAriaHidden(t){const i=t.parentElement;i&&t!==this._document.body&&(Array.from(i.children).forEach(o=>{o!==t&&"SCRIPT"!==o.nodeName&&(this._ariaHiddenValues.set(o,o.getAttribute("aria-hidden")),o.setAttribute("aria-hidden","true"))}),this._setAriaHidden(i))}_revertAriaHidden(){this._ariaHiddenValues.forEach((t,i)=>{t?i.setAttribute("aria-hidden",t):i.removeAttribute("aria-hidden")}),this._ariaHiddenValues.clear()}_registerModalRef(t){const i=()=>{const o=this._modalRefs.indexOf(t);o>-1&&(this._modalRefs.splice(o,1),this._activeInstances.emit(this._modalRefs))};this._modalRefs.push(t),this._activeInstances.emit(this._modalRefs),t.result.then(i,i)}_registerWindowCmpt(t){this._windowCmpts.push(t),this._activeWindowCmptHasChanged.next(),t.onDestroy(()=>{const i=this._windowCmpts.indexOf(t);i>-1&&(this._windowCmpts.splice(i,1),this._activeWindowCmptHasChanged.next())})}static{this.\u0275fac=function(i){return new(i||e)(L(no),L(gt),L(Zt),L(nt),L(l$),L(hh),L(ae))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),u$=(()=>{class e{constructor(t){this._ngbConfig=t,this.backdrop=!0,this.fullscreen=!1,this.keyboard=!0}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(t){this._animation=t}static{this.\u0275fac=function(i){return new(i||e)(L(id))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),d$=(()=>{class e{constructor(t,i,o){this._injector=t,this._modalStack=i,this._config=o}open(t,i={}){const o={...this._config,animation:this._config.animation,...i};return this._modalStack.open(this._injector,t,o)}get activeInstances(){return this._modalStack.activeInstances}dismissAll(t){this._modalStack.dismissAll(t)}hasOpenModals(){return this._modalStack.hasOpenModals()}static{this.\u0275fac=function(i){return new(i||e)(L(gt),L(c$),L(u$))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),bT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({providers:[d$]})}}return e})(),CT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),AT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),RT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),xT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),PT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),kT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),FT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),jT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),LT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();new U("live announcer delay",{providedIn:"root",factory:function T$(){return 100}});let VT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),BT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();const I$=[UE,GE,qE,YE,gT,_T,bT,CT,BT,AT,RT,xT,PT,kT,FT,jT,LT,VT];let N$=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({imports:[I$,UE,GE,qE,YE,gT,_T,bT,CT,BT,AT,RT,xT,PT,kT,FT,jT,LT,VT]})}}return e})(),O$=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e,bootstrap:[WV]})}static{this.\u0275inj=Ae({imports:[Ij,VV,N$]})}}return e})();Tj().bootstrapModule(O$).catch(e=>console.error(e))},73:()=>{const ne=":";Error;const Ns=function(S,...w){if(Ns.translate){const N=Ns.translate(S,w);S=N[0],w=N[1]}let T=Ol(S[0],S.raw[0]);for(let N=1;N{var $i=Ui=>ne(ne.s=Ui);$i(73),$i(836)}]); \ No newline at end of file +"use strict";(self.webpackChunkvaniaferrari_portfolio=self.webpackChunkvaniaferrari_portfolio||[]).push([[792],{836:()=>{function ne(e){return"function"==typeof e}function $i(e){const t=e(i=>{Error.call(i),i.stack=(new Error).stack});return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}const po=$i(e=>function(t){e(this),this.message=t?`${t.length} errors occurred during unsubscription:\n${t.map((i,o)=>`${o+1}) ${i.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=t});function Ui(e,n){if(e){const t=e.indexOf(n);0<=t&&e.splice(t,1)}}class Je{constructor(n){this.initialTeardown=n,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let n;if(!this.closed){this.closed=!0;const{_parentage:t}=this;if(t)if(this._parentage=null,Array.isArray(t))for(const r of t)r.remove(this);else t.remove(this);const{initialTeardown:i}=this;if(ne(i))try{i()}catch(r){n=r instanceof po?r.errors:[r]}const{_finalizers:o}=this;if(o){this._finalizers=null;for(const r of o)try{go(r)}catch(s){n=n??[],s instanceof po?n=[...n,...s.errors]:n.push(s)}}if(n)throw new po(n)}}add(n){var t;if(n&&n!==this)if(this.closed)go(n);else{if(n instanceof Je){if(n.closed||n._hasParent(this))return;n._addParent(this)}(this._finalizers=null!==(t=this._finalizers)&&void 0!==t?t:[]).push(n)}}_hasParent(n){const{_parentage:t}=this;return t===n||Array.isArray(t)&&t.includes(n)}_addParent(n){const{_parentage:t}=this;this._parentage=Array.isArray(t)?(t.push(n),t):t?[t,n]:n}_removeParent(n){const{_parentage:t}=this;t===n?this._parentage=null:Array.isArray(t)&&Ui(t,n)}remove(n){const{_finalizers:t}=this;t&&Ui(t,n),n instanceof Je&&n._removeParent(this)}}Je.EMPTY=(()=>{const e=new Je;return e.closed=!0,e})();const Cs=Je.EMPTY;function bl(e){return e instanceof Je||e&&"closed"in e&&ne(e.remove)&&ne(e.add)&&ne(e.unsubscribe)}function go(e){ne(e)?e():e.unsubscribe()}const Gi={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},er={setTimeout(e,n,...t){const{delegate:i}=er;return i?.setTimeout?i.setTimeout(e,n,...t):setTimeout(e,n,...t)},clearTimeout(e){const{delegate:n}=er;return(n?.clearTimeout||clearTimeout)(e)},delegate:void 0};function wd(e){er.setTimeout(()=>{const{onUnhandledError:n}=Gi;if(!n)throw e;n(e)})}function mo(){}const Dd=Ss("C",void 0,void 0);function Ss(e,n,t){return{kind:e,value:n,error:t}}let yi=null;function ei(e){if(Gi.useDeprecatedSynchronousErrorHandling){const n=!yi;if(n&&(yi={errorThrown:!1,error:null}),e(),n){const{errorThrown:t,error:i}=yi;if(yi=null,t)throw i}}else e()}class tr extends Je{constructor(n){super(),this.isStopped=!1,n?(this.destination=n,bl(n)&&n.add(this)):this.destination=Ts}static create(n,t,i){return new bi(n,t,i)}next(n){this.isStopped?Es(function Sd(e){return Ss("N",e,void 0)}(n),this):this._next(n)}error(n){this.isStopped?Es(function Cd(e){return Ss("E",void 0,e)}(n),this):(this.isStopped=!0,this._error(n))}complete(){this.isStopped?Es(Dd,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(n){this.destination.next(n)}_error(n){try{this.destination.error(n)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const wl=Function.prototype.bind;function nr(e,n){return wl.call(e,n)}class Dl{constructor(n){this.partialObserver=n}next(n){const{partialObserver:t}=this;if(t.next)try{t.next(n)}catch(i){tn(i)}}error(n){const{partialObserver:t}=this;if(t.error)try{t.error(n)}catch(i){tn(i)}else tn(n)}complete(){const{partialObserver:n}=this;if(n.complete)try{n.complete()}catch(t){tn(t)}}}class bi extends tr{constructor(n,t,i){let o;if(super(),ne(n)||!n)o={next:n??void 0,error:t??void 0,complete:i??void 0};else{let r;this&&Gi.useDeprecatedNextContext?(r=Object.create(n),r.unsubscribe=()=>this.unsubscribe(),o={next:n.next&&nr(n.next,r),error:n.error&&nr(n.error,r),complete:n.complete&&nr(n.complete,r)}):o=n}this.destination=new Dl(o)}}function tn(e){Gi.useDeprecatedSynchronousErrorHandling?function Ed(e){Gi.useDeprecatedSynchronousErrorHandling&&yi&&(yi.errorThrown=!0,yi.error=e)}(e):wd(e)}function Es(e,n){const{onStoppedNotification:t}=Gi;t&&er.setTimeout(()=>t(e,n))}const Ts={closed:!0,next:mo,error:function Cl(e){throw e},complete:mo},Ms="function"==typeof Symbol&&Symbol.observable||"@@observable";function xn(e){return e}function El(e){return 0===e.length?xn:1===e.length?e[0]:function(t){return e.reduce((i,o)=>o(i),t)}}let Te=(()=>{class e{constructor(t){t&&(this._subscribe=t)}lift(t){const i=new e;return i.source=this,i.operator=t,i}subscribe(t,i,o){const r=function Md(e){return e&&e instanceof tr||function Td(e){return e&&ne(e.next)&&ne(e.error)&&ne(e.complete)}(e)&&bl(e)}(t)?t:new bi(t,i,o);return ei(()=>{const{operator:s,source:a}=this;r.add(s?s.call(r,a):a?this._subscribe(r):this._trySubscribe(r))}),r}_trySubscribe(t){try{return this._subscribe(t)}catch(i){t.error(i)}}forEach(t,i){return new(i=Tl(i))((o,r)=>{const s=new bi({next:a=>{try{t(a)}catch(l){r(l),s.unsubscribe()}},error:r,complete:o});this.subscribe(s)})}_subscribe(t){var i;return null===(i=this.source)||void 0===i?void 0:i.subscribe(t)}[Ms](){return this}pipe(...t){return El(t)(this)}toPromise(t){return new(t=Tl(t))((i,o)=>{let r;this.subscribe(s=>r=s,s=>o(s),()=>i(r))})}}return e.create=n=>new e(n),e})();function Tl(e){var n;return null!==(n=e??Gi.Promise)&&void 0!==n?n:Promise}const Id=$i(e=>function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});let ye=(()=>{class e extends Te{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(t){const i=new Ml(this,this);return i.operator=t,i}_throwIfClosed(){if(this.closed)throw new Id}next(t){ei(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const i of this.currentObservers)i.next(t)}})}error(t){ei(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=t;const{observers:i}=this;for(;i.length;)i.shift().error(t)}})}complete(){ei(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:t}=this;for(;t.length;)t.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var t;return(null===(t=this.observers)||void 0===t?void 0:t.length)>0}_trySubscribe(t){return this._throwIfClosed(),super._trySubscribe(t)}_subscribe(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)}_innerSubscribe(t){const{hasError:i,isStopped:o,observers:r}=this;return i||o?Cs:(this.currentObservers=null,r.push(t),new Je(()=>{this.currentObservers=null,Ui(r,t)}))}_checkFinalizedStatuses(t){const{hasError:i,thrownError:o,isStopped:r}=this;i?t.error(o):r&&t.complete()}asObservable(){const t=new Te;return t.source=this,t}}return e.create=(n,t)=>new Ml(n,t),e})();class Ml extends ye{constructor(n,t){super(),this.destination=n,this.source=t}next(n){var t,i;null===(i=null===(t=this.destination)||void 0===t?void 0:t.next)||void 0===i||i.call(t,n)}error(n){var t,i;null===(i=null===(t=this.destination)||void 0===t?void 0:t.error)||void 0===i||i.call(t,n)}complete(){var n,t;null===(t=null===(n=this.destination)||void 0===n?void 0:n.complete)||void 0===t||t.call(n)}_subscribe(n){var t,i;return null!==(i=null===(t=this.source)||void 0===t?void 0:t.subscribe(n))&&void 0!==i?i:Cs}}function Is(e){return ne(e?.lift)}function Ue(e){return n=>{if(Is(n))return n.lift(function(t){try{return e(t,this)}catch(i){this.error(i)}});throw new TypeError("Unable to lift unknown Observable type")}}function ke(e,n,t,i,o){return new Nd(e,n,t,i,o)}class Nd extends tr{constructor(n,t,i,o,r,s){super(n),this.onFinalize=r,this.shouldUnsubscribe=s,this._next=t?function(a){try{t(a)}catch(l){n.error(l)}}:super._next,this._error=o?function(a){try{o(a)}catch(l){n.error(l)}finally{this.unsubscribe()}}:super._error,this._complete=i?function(){try{i()}catch(a){n.error(a)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var n;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:t}=this;super.unsubscribe(),!t&&(null===(n=this.onFinalize)||void 0===n||n.call(this))}}}function ue(e,n){return Ue((t,i)=>{let o=0;t.subscribe(ke(i,r=>{i.next(e.call(n,r,o++))}))})}function $t(e){return this instanceof $t?(this.v=e,this):new $t(e)}function Ut(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=function Ke(e){var n="function"==typeof Symbol&&Symbol.iterator,t=n&&e[n],i=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}(e),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(r){t[r]=e[r]&&function(s){return new Promise(function(a,l){!function o(r,s,a,l){Promise.resolve(l).then(function(d){r({value:d,done:a})},s)}(a,l,(s=e[r](s)).done,s.value)})}}}"function"==typeof SuppressedError&&SuppressedError;const kd=e=>e&&"number"==typeof e.length&&"function"!=typeof e;function Bm(e){return ne(e?.then)}function Hm(e){return ne(e[Ms])}function $m(e){return Symbol.asyncIterator&&ne(e?.[Symbol.asyncIterator])}function Um(e){return new TypeError(`You provided ${null!==e&&"object"==typeof e?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}const Gm=function nM(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}();function zm(e){return ne(e?.[Gm])}function Wm(e){return function vo(e,n,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,i=t.apply(e,n||[]),r=[];return o=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",function s(v){return function(_){return Promise.resolve(_).then(v,p)}}),o[Symbol.asyncIterator]=function(){return this},o;function a(v,_){i[v]&&(o[v]=function(b){return new Promise(function(C,E){r.push([v,b,C,E])>1||l(v,b)})},_&&(o[v]=_(o[v])))}function l(v,_){try{!function d(v){v.value instanceof $t?Promise.resolve(v.value.v).then(h,p):g(r[0][2],v)}(i[v](_))}catch(b){g(r[0][3],b)}}function h(v){l("next",v)}function p(v){l("throw",v)}function g(v,_){v(_),r.shift(),r.length&&l(r[0][0],r[0][1])}}(this,arguments,function*(){const t=e.getReader();try{for(;;){const{value:i,done:o}=yield $t(t.read());if(o)return yield $t(void 0);yield yield $t(i)}}finally{t.releaseLock()}})}function qm(e){return ne(e?.getReader)}function at(e){if(e instanceof Te)return e;if(null!=e){if(Hm(e))return function iM(e){return new Te(n=>{const t=e[Ms]();if(ne(t.subscribe))return t.subscribe(n);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(e);if(kd(e))return function oM(e){return new Te(n=>{for(let t=0;t{e.then(t=>{n.closed||(n.next(t),n.complete())},t=>n.error(t)).then(null,wd)})}(e);if($m(e))return Ym(e);if(zm(e))return function sM(e){return new Te(n=>{for(const t of e)if(n.next(t),n.closed)return;n.complete()})}(e);if(qm(e))return function aM(e){return Ym(Wm(e))}(e)}throw Um(e)}function Ym(e){return new Te(n=>{(function lM(e,n){var t,i,o,r;return function T(e,n,t,i){return new(t||(t=Promise))(function(r,s){function a(h){try{d(i.next(h))}catch(p){s(p)}}function l(h){try{d(i.throw(h))}catch(p){s(p)}}function d(h){h.done?r(h.value):function o(r){return r instanceof t?r:new t(function(s){s(r)})}(h.value).then(a,l)}d((i=i.apply(e,n||[])).next())})}(this,void 0,void 0,function*(){try{for(t=Ut(e);!(i=yield t.next()).done;)if(n.next(i.value),n.closed)return}catch(s){o={error:s}}finally{try{i&&!i.done&&(r=t.return)&&(yield r.call(t))}finally{if(o)throw o.error}}n.complete()})})(e,n).catch(t=>n.error(t))})}function Di(e,n,t,i=0,o=!1){const r=n.schedule(function(){t(),o?e.add(this.schedule(null,i)):this.unsubscribe()},i);if(e.add(r),!o)return r}function lt(e,n,t=1/0){return ne(n)?lt((i,o)=>ue((r,s)=>n(i,r,o,s))(at(e(i,o))),t):("number"==typeof n&&(t=n),Ue((i,o)=>function cM(e,n,t,i,o,r,s,a){const l=[];let d=0,h=0,p=!1;const g=()=>{p&&!l.length&&!d&&n.complete()},v=b=>d{r&&n.next(b),d++;let C=!1;at(t(b,h++)).subscribe(ke(n,E=>{o?.(E),r?v(E):n.next(E)},()=>{C=!0},void 0,()=>{if(C)try{for(d--;l.length&&d_(E)):_(E)}g()}catch(E){n.error(E)}}))};return e.subscribe(ke(n,v,()=>{p=!0,g()})),()=>{a?.()}}(i,o,e,t)))}function rr(e=1/0){return lt(xn,e)}const mn=new Te(e=>e.complete());function Zm(e){return e&&ne(e.schedule)}function Fd(e){return e[e.length-1]}function Al(e){return ne(Fd(e))?e.pop():void 0}function As(e){return Zm(Fd(e))?e.pop():void 0}function Qm(e,n=0){return Ue((t,i)=>{t.subscribe(ke(i,o=>Di(i,e,()=>i.next(o),n),()=>Di(i,e,()=>i.complete(),n),o=>Di(i,e,()=>i.error(o),n)))})}function Jm(e,n=0){return Ue((t,i)=>{i.add(e.schedule(()=>t.subscribe(i),n))})}function Km(e,n){if(!e)throw new Error("Iterable cannot be null");return new Te(t=>{Di(t,n,()=>{const i=e[Symbol.asyncIterator]();Di(t,n,()=>{i.next().then(o=>{o.done?t.complete():t.next(o.value)})},0,!0)})})}function pt(e,n){return n?function vM(e,n){if(null!=e){if(Hm(e))return function fM(e,n){return at(e).pipe(Jm(n),Qm(n))}(e,n);if(kd(e))return function pM(e,n){return new Te(t=>{let i=0;return n.schedule(function(){i===e.length?t.complete():(t.next(e[i++]),t.closed||this.schedule())})})}(e,n);if(Bm(e))return function hM(e,n){return at(e).pipe(Jm(n),Qm(n))}(e,n);if($m(e))return Km(e,n);if(zm(e))return function gM(e,n){return new Te(t=>{let i;return Di(t,n,()=>{i=e[Gm](),Di(t,n,()=>{let o,r;try{({value:o,done:r}=i.next())}catch(s){return void t.error(s)}r?t.complete():t.next(o)},0,!0)}),()=>ne(i?.return)&&i.return()})}(e,n);if(qm(e))return function mM(e,n){return Km(Wm(e),n)}(e,n)}throw Um(e)}(e,n):at(e)}class vn extends ye{constructor(n){super(),this._value=n}get value(){return this.getValue()}_subscribe(n){const t=super._subscribe(n);return!t.closed&&n.next(this._value),t}getValue(){const{hasError:n,thrownError:t,_value:i}=this;if(n)throw t;return this._throwIfClosed(),i}next(n){super.next(this._value=n)}}function W(...e){return pt(e,As(e))}function ev(e={}){const{connector:n=(()=>new ye),resetOnError:t=!0,resetOnComplete:i=!0,resetOnRefCountZero:o=!0}=e;return r=>{let s,a,l,d=0,h=!1,p=!1;const g=()=>{a?.unsubscribe(),a=void 0},v=()=>{g(),s=l=void 0,h=p=!1},_=()=>{const b=s;v(),b?.unsubscribe()};return Ue((b,C)=>{d++,!p&&!h&&g();const E=l=l??n();C.add(()=>{d--,0===d&&!p&&!h&&(a=jd(_,o))}),E.subscribe(C),!s&&d>0&&(s=new bi({next:D=>E.next(D),error:D=>{p=!0,g(),a=jd(v,t,D),E.error(D)},complete:()=>{h=!0,g(),a=jd(v,i),E.complete()}}),at(b).subscribe(s))})(r)}}function jd(e,n,...t){if(!0===n)return void e();if(!1===n)return;const i=new bi({next:()=>{i.unsubscribe(),e()}});return at(n(...t)).subscribe(i)}function Pn(e,n){return Ue((t,i)=>{let o=null,r=0,s=!1;const a=()=>s&&!o&&i.complete();t.subscribe(ke(i,l=>{o?.unsubscribe();let d=0;const h=r++;at(e(l,h)).subscribe(o=ke(i,p=>i.next(n?n(l,p,h,d++):p),()=>{o=null,a()}))},()=>{s=!0,a()}))})}function _M(e,n){return e===n}function Ne(e){for(let n in e)if(e[n]===Ne)return n;throw Error("Could not find renamed property on target object.")}function ct(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(ct).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const n=e.toString();if(null==n)return""+n;const t=n.indexOf("\n");return-1===t?n:n.substring(0,t)}function Ld(e,n){return null==e||""===e?null===n?"":n:null==n||""===n?e:e+" "+n}const yM=Ne({__forward_ref__:Ne});function ie(e){return e.__forward_ref__=ie,e.toString=function(){return ct(this())},e}function Z(e){return Vd(e)?e():e}function Vd(e){return"function"==typeof e&&e.hasOwnProperty(yM)&&e.__forward_ref__===ie}function Bd(e){return e&&!!e.\u0275providers}const nv="https://g.co/ng/security#xss";class O extends Error{constructor(n,t){super(function xl(e,n){return`NG0${Math.abs(e)}${n?": "+n:""}`}(n,t)),this.code=n}}function J(e){return"string"==typeof e?e:null==e?"":String(e)}function Hd(e,n){throw new O(-201,!1)}function _n(e,n){null==e&&function q(e,n,t,i){throw new Error(`ASSERTION ERROR: ${e}`+(null==i?"":` [Expected=> ${t} ${i} ${n} <=Actual]`))}(n,e,null,"!=")}function F(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Ae(e){return{providers:e.providers||[],imports:e.imports||[]}}function Pl(e){return iv(e,Fl)||iv(e,ov)}function iv(e,n){return e.hasOwnProperty(n)?e[n]:null}function kl(e){return e&&(e.hasOwnProperty($d)||e.hasOwnProperty(MM))?e[$d]:null}const Fl=Ne({\u0275prov:Ne}),$d=Ne({\u0275inj:Ne}),ov=Ne({ngInjectableDef:Ne}),MM=Ne({ngInjectorDef:Ne});var oe=function(e){return e[e.Default=0]="Default",e[e.Host=1]="Host",e[e.Self=2]="Self",e[e.SkipSelf=4]="SkipSelf",e[e.Optional=8]="Optional",e}(oe||{});let Ud;function Gt(e){const n=Ud;return Ud=e,n}function sv(e,n,t){const i=Pl(e);return i&&"root"==i.providedIn?void 0===i.value?i.value=i.factory():i.value:t&oe.Optional?null:void 0!==n?n:void Hd(ct(e))}const Fe=globalThis;class U{constructor(n,t){this._desc=n,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof t?this.__NG_ELEMENT_ID__=t:void 0!==t&&(this.\u0275prov=F({token:this,providedIn:t.providedIn||"root",factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}const Rs={},Yd="__NG_DI_FLAG__",jl="ngTempTokenPath",OM=/\n/gm,lv="__source";let sr;function Wi(e){const n=sr;return sr=e,n}function xM(e,n=oe.Default){if(void 0===sr)throw new O(-203,!1);return null===sr?sv(e,void 0,n):sr.get(e,n&oe.Optional?null:void 0,n)}function L(e,n=oe.Default){return(function rv(){return Ud}()||xM)(Z(e),n)}function k(e,n=oe.Default){return L(e,Ll(n))}function Ll(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Zd(e){const n=[];for(let t=0;tn){s=r-1;break}}}for(;rr?"":o[p+1].toLowerCase();const v=8&i?g:null;if(v&&-1!==fv(v,d,0)||2&i&&d!==g){if(Fn(i))return!1;s=!0}}}}else{if(!s&&!Fn(i)&&!Fn(l))return!1;if(s&&Fn(l))continue;s=!1,i=l|1&i}}return Fn(i)||s}function Fn(e){return 0==(1&e)}function BM(e,n,t,i){if(null===n)return-1;let o=0;if(i||!t){let r=!1;for(;o-1)for(t++;t0?'="'+a+'"':"")+"]"}else 8&i?o+="."+s:4&i&&(o+=" "+s);else""!==o&&!Fn(s)&&(n+=yv(r,o),o=""),i=s,r=r||!Fn(i);t++}return""!==o&&(n+=yv(r,o)),n}function se(e){return Ci(()=>{const n=wv(e),t={...n,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===Vl.OnPush,directiveDefs:null,pipeDefs:null,dependencies:n.standalone&&e.dependencies||null,getStandaloneInjector:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||kn.Emulated,styles:e.styles||ge,_:null,schemas:e.schemas||null,tView:null,id:""};Dv(t);const i=e.dependencies;return t.directiveDefs=Hl(i,!1),t.pipeDefs=Hl(i,!0),t.id=function XM(e){let n=0;const t=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,e.consts,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery].join("|");for(const o of t)n=Math.imul(31,n)+o.charCodeAt(0)<<0;return n+=2147483648,"c"+n}(t),t})}function ZM(e){return de(e)||bt(e)}function QM(e){return null!==e}function Re(e){return Ci(()=>({type:e.type,bootstrap:e.bootstrap||ge,declarations:e.declarations||ge,imports:e.imports||ge,exports:e.exports||ge,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function bv(e,n){if(null==e)return ti;const t={};for(const i in e)if(e.hasOwnProperty(i)){let o=e[i],r=o;Array.isArray(o)&&(r=o[1],o=o[0]),t[o]=i,n&&(n[o]=r)}return t}function x(e){return Ci(()=>{const n=wv(e);return Dv(n),n})}function de(e){return e[Bl]||null}function bt(e){return e[Qd]||null}function xt(e){return e[Jd]||null}function on(e,n){const t=e[uv]||null;if(!t&&!0===n)throw new Error(`Type ${ct(e)} does not have '\u0275mod' property.`);return t}function wv(e){const n={};return{type:e.type,providersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:n,inputTransforms:null,inputConfig:e.inputs||ti,exportAs:e.exportAs||null,standalone:!0===e.standalone,signals:!0===e.signals,selectors:e.selectors||ge,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,findHostDirectiveDefs:null,hostDirectives:null,inputs:bv(e.inputs,n),outputs:bv(e.outputs)}}function Dv(e){e.features?.forEach(n=>n(e))}function Hl(e,n){if(!e)return null;const t=n?xt:ZM;return()=>("function"==typeof e?e():e).map(i=>t(i)).filter(QM)}const qe=0,V=1,ee=2,He=3,jn=4,Fs=5,Ot=6,lr=7,Xe=8,qi=9,cr=10,K=11,js=12,Cv=13,ur=14,et=15,Ls=16,dr=17,ni=18,Vs=19,Sv=20,Yi=21,Ei=22,Bs=23,Hs=24,re=25,Xd=1,Ev=2,ii=7,fr=9,wt=11;function Wt(e){return Array.isArray(e)&&"object"==typeof e[Xd]}function Pt(e){return Array.isArray(e)&&!0===e[Xd]}function ef(e){return 0!=(4&e.flags)}function yo(e){return e.componentOffset>-1}function Ul(e){return 1==(1&e.flags)}function Ln(e){return!!e.template}function tf(e){return 0!=(512&e[ee])}function bo(e,n){return e.hasOwnProperty(Si)?e[Si]:null}let Dt=null,Gl=!1;function yn(e){const n=Dt;return Dt=e,n}const Iv={version:0,dirty:!1,producerNode:void 0,producerLastReadVersion:void 0,producerIndexOfThis:void 0,nextProducerIndex:0,liveConsumerNode:void 0,liveConsumerIndexOfThis:void 0,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{}};function Ov(e){if(!Us(e)||e.dirty){if(!e.producerMustRecompute(e)&&!xv(e))return void(e.dirty=!1);e.producerRecomputeValue(e),e.dirty=!1}}function Rv(e){e.dirty=!0,function Av(e){if(void 0===e.liveConsumerNode)return;const n=Gl;Gl=!0;try{for(const t of e.liveConsumerNode)t.dirty||Rv(t)}finally{Gl=n}}(e),e.consumerMarkedDirty?.(e)}function rf(e){return e&&(e.nextProducerIndex=0),yn(e)}function sf(e,n){if(yn(n),e&&void 0!==e.producerNode&&void 0!==e.producerIndexOfThis&&void 0!==e.producerLastReadVersion){if(Us(e))for(let t=e.nextProducerIndex;te.nextProducerIndex;)e.producerNode.pop(),e.producerLastReadVersion.pop(),e.producerIndexOfThis.pop()}}function xv(e){hr(e);for(let n=0;n0}function hr(e){e.producerNode??=[],e.producerIndexOfThis??=[],e.producerLastReadVersion??=[]}let jv=null;const Hv=()=>{},fI=(()=>({...Iv,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!1,consumerMarkedDirty:e=>{e.schedule(e.ref)},hasRun:!1,cleanupFn:Hv}))();class hI{constructor(n,t,i){this.previousValue=n,this.currentValue=t,this.firstChange=i}isFirstChange(){return this.firstChange}}function Ct(){return $v}function $v(e){return e.type.prototype.ngOnChanges&&(e.setInput=gI),pI}function pI(){const e=Gv(this),n=e?.current;if(n){const t=e.previous;if(t===ti)e.previous=n;else for(let i in n)t[i]=n[i];e.current=null,this.ngOnChanges(n)}}function gI(e,n,t,i){const o=this.declaredInputs[t],r=Gv(e)||function mI(e,n){return e[Uv]=n}(e,{previous:ti,current:null}),s=r.current||(r.current={}),a=r.previous,l=a[o];s[o]=new hI(l&&l.currentValue,n,a===ti),e[i]=n}Ct.ngInherit=!0;const Uv="__ngSimpleChanges__";function Gv(e){return e[Uv]||null}const oi=function(e,n,t){};function je(e){for(;Array.isArray(e);)e=e[qe];return e}function Wl(e,n){return je(n[e])}function qt(e,n){return je(n[e.index])}function qv(e,n){return e.data[n]}function rn(e,n){const t=n[e];return Wt(t)?t:t[qe]}function Qi(e,n){return null==n?null:e[n]}function Yv(e){e[dr]=0}function DI(e){1024&e[ee]||(e[ee]|=1024,Qv(e,1))}function Zv(e){1024&e[ee]&&(e[ee]&=-1025,Qv(e,-1))}function Qv(e,n){let t=e[He];if(null===t)return;t[Fs]+=n;let i=t;for(t=t[He];null!==t&&(1===n&&1===i[Fs]||-1===n&&0===i[Fs]);)t[Fs]+=n,i=t,t=t[He]}const Y={lFrame:a1(null),bindingsEnabled:!0,skipHydrationRootTNode:null};function Xv(){return Y.bindingsEnabled}function gr(){return null!==Y.skipHydrationRootTNode}function I(){return Y.lFrame.lView}function fe(){return Y.lFrame.tView}function St(){let e=e1();for(;null!==e&&64===e.type;)e=e.parent;return e}function e1(){return Y.lFrame.currentTNode}function ri(e,n){const t=Y.lFrame;t.currentTNode=e,t.isParent=n}function df(){return Y.lFrame.isParent}function ff(){Y.lFrame.isParent=!1}function kt(){const e=Y.lFrame;let n=e.bindingRootIndex;return-1===n&&(n=e.bindingRootIndex=e.tView.bindingStartIndex),n}function mr(){return Y.lFrame.bindingIndex++}function Mi(e){const n=Y.lFrame,t=n.bindingIndex;return n.bindingIndex=n.bindingIndex+e,t}function PI(e,n){const t=Y.lFrame;t.bindingIndex=t.bindingRootIndex=e,hf(n)}function hf(e){Y.lFrame.currentDirectiveIndex=e}function o1(){return Y.lFrame.currentQueryIndex}function gf(e){Y.lFrame.currentQueryIndex=e}function FI(e){const n=e[V];return 2===n.type?n.declTNode:1===n.type?e[Ot]:null}function r1(e,n,t){if(t&oe.SkipSelf){let o=n,r=e;for(;!(o=o.parent,null!==o||t&oe.Host||(o=FI(r),null===o||(r=r[ur],10&o.type))););if(null===o)return!1;n=o,e=r}const i=Y.lFrame=s1();return i.currentTNode=n,i.lView=e,!0}function mf(e){const n=s1(),t=e[V];Y.lFrame=n,n.currentTNode=t.firstChild,n.lView=e,n.tView=t,n.contextLView=e,n.bindingIndex=t.bindingStartIndex,n.inI18n=!1}function s1(){const e=Y.lFrame,n=null===e?null:e.child;return null===n?a1(e):n}function a1(e){const n={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=n),n}function l1(){const e=Y.lFrame;return Y.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const c1=l1;function vf(){const e=l1();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function Ft(){return Y.lFrame.selectedIndex}function wo(e){Y.lFrame.selectedIndex=e}function Ge(){const e=Y.lFrame;return qv(e.tView,e.selectedIndex)}let d1=!0;function ql(){return d1}function Ji(e){d1=e}function Yl(e,n){for(let t=n.directiveStart,i=n.directiveEnd;t=i)break}else n[l]<0&&(e[dr]+=65536),(a>13>16&&(3&e[ee])===n&&(e[ee]+=8192,h1(a,r)):h1(a,r)}const vr=-1;class zs{constructor(n,t,i){this.factory=n,this.resolving=!1,this.canSeeViewProviders=t,this.injectImpl=i}}function bf(e){return e!==vr}function Ws(e){return 32767&e}function qs(e,n){let t=function YI(e){return e>>16}(e),i=n;for(;t>0;)i=i[ur],t--;return i}let wf=!0;function Jl(e){const n=wf;return wf=e,n}const p1=255,g1=5;let ZI=0;const si={};function Kl(e,n){const t=m1(e,n);if(-1!==t)return t;const i=n[V];i.firstCreatePass&&(e.injectorIndex=n.length,Df(i.data,e),Df(n,null),Df(i.blueprint,null));const o=Xl(e,n),r=e.injectorIndex;if(bf(o)){const s=Ws(o),a=qs(o,n),l=a[V].data;for(let d=0;d<8;d++)n[r+d]=a[s+d]|l[s+d]}return n[r+8]=o,r}function Df(e,n){e.push(0,0,0,0,0,0,0,0,n)}function m1(e,n){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===n[e.injectorIndex+8]?-1:e.injectorIndex}function Xl(e,n){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let t=0,i=null,o=n;for(;null!==o;){if(i=C1(o),null===i)return vr;if(t++,o=o[ur],-1!==i.injectorIndex)return i.injectorIndex|t<<16}return vr}function Cf(e,n,t){!function QI(e,n,t){let i;"string"==typeof t?i=t.charCodeAt(0)||0:t.hasOwnProperty(Ps)&&(i=t[Ps]),null==i&&(i=t[Ps]=ZI++);const o=i&p1;n.data[e+(o>>g1)]|=1<=0?n&p1:t2:n}(t);if("function"==typeof r){if(!r1(n,e,i))return i&oe.Host?v1(o,0,i):_1(n,t,i,o);try{let s;if(s=r(i),null!=s||i&oe.Optional)return s;Hd()}finally{c1()}}else if("number"==typeof r){let s=null,a=m1(e,n),l=vr,d=i&oe.Host?n[et][Ot]:null;for((-1===a||i&oe.SkipSelf)&&(l=-1===a?Xl(e,n):n[a+8],l!==vr&&D1(i,!1)?(s=n[V],a=Ws(l),n=qs(l,n)):a=-1);-1!==a;){const h=n[V];if(w1(r,a,h.data)){const p=KI(a,n,t,s,i,d);if(p!==si)return p}l=n[a+8],l!==vr&&D1(i,n[V].data[a+8]===d)&&w1(r,a,n)?(s=h,a=Ws(l),n=qs(l,n)):a=-1}}return o}function KI(e,n,t,i,o,r){const s=n[V],a=s.data[e+8],h=ec(a,s,t,null==i?yo(a)&&wf:i!=s&&0!=(3&a.type),o&oe.Host&&r===a);return null!==h?Do(n,s,h,a):si}function ec(e,n,t,i,o){const r=e.providerIndexes,s=n.data,a=1048575&r,l=e.directiveStart,h=r>>20,g=o?a+h:e.directiveEnd;for(let v=i?a:a+h;v=l&&_.type===t)return v}if(o){const v=s[l];if(v&&Ln(v)&&v.type===t)return l}return null}function Do(e,n,t,i){let o=e[t];const r=n.data;if(function zI(e){return e instanceof zs}(o)){const s=o;s.resolving&&function bM(e,n){const t=n?`. Dependency path: ${n.join(" > ")} > ${e}`:"";throw new O(-200,`Circular dependency in DI detected for ${e}${t}`)}(function be(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():J(e)}(r[t]));const a=Jl(s.canSeeViewProviders);s.resolving=!0;const d=s.injectImpl?Gt(s.injectImpl):null;r1(e,i,oe.Default);try{o=e[t]=s.factory(void 0,r,e,i),n.firstCreatePass&&t>=i.directiveStart&&function UI(e,n,t){const{ngOnChanges:i,ngOnInit:o,ngDoCheck:r}=n.type.prototype;if(i){const s=$v(n);(t.preOrderHooks??=[]).push(e,s),(t.preOrderCheckHooks??=[]).push(e,s)}o&&(t.preOrderHooks??=[]).push(0-e,o),r&&((t.preOrderHooks??=[]).push(e,r),(t.preOrderCheckHooks??=[]).push(e,r))}(t,r[t],n)}finally{null!==d&&Gt(d),Jl(a),s.resolving=!1,c1()}}return o}function w1(e,n,t){return!!(t[n+(e>>g1)]&1<{const n=Sf(Z(e));return n&&n()}:bo(e)}function C1(e){const n=e[V],t=n.type;return 2===t?n.declTNode:1===t?e[Ot]:null}const yr="__parameters__";function wr(e,n,t){return Ci(()=>{const i=function Ef(e){return function(...t){if(e){const i=e(...t);for(const o in i)this[o]=i[o]}}}(n);function o(...r){if(this instanceof o)return i.apply(this,r),this;const s=new o(...r);return a.annotation=s,a;function a(l,d,h){const p=l.hasOwnProperty(yr)?l[yr]:Object.defineProperty(l,yr,{value:[]})[yr];for(;p.length<=h;)p.push(null);return(p[h]=p[h]||[]).push(s),l}}return t&&(o.prototype=Object.create(t.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o})}function Cr(e,n){e.forEach(t=>Array.isArray(t)?Cr(t,n):n(t))}function E1(e,n,t){n>=e.length?e.push(t):e.splice(n,0,t)}function tc(e,n){return n>=e.length-1?e.pop():e.splice(n,1)[0]}function Qs(e,n){const t=[];for(let i=0;i=0?e[1|i]=t:(i=~i,function c2(e,n,t,i){let o=e.length;if(o==n)e.push(t,i);else if(1===o)e.push(i,e[0]),e[0]=t;else{for(o--,e.push(e[o-1],e[o]);o>n;)e[o]=e[o-2],o--;e[n]=t,e[n+1]=i}}(e,i,n,t)),i}function Tf(e,n){const t=Sr(e,n);if(t>=0)return e[1|t]}function Sr(e,n){return function T1(e,n,t){let i=0,o=e.length>>t;for(;o!==i;){const r=i+(o-i>>1),s=e[r<n?o=r:i=r+1}return~(o<0&&(e[t-1][jn]=i[jn]);const r=tc(e,wt+n);!function W2(e,n){ta(e,n,n[K],2,null,null),n[qe]=null,n[Ot]=null}(i[V],i);const s=r[ni];null!==s&&s.detachView(r[V]),i[He]=null,i[jn]=null,i[ee]&=-129}return i}function jf(e,n){if(!(256&n[ee])){const t=n[K];n[Bs]&&Pv(n[Bs]),n[Hs]&&Pv(n[Hs]),t.destroyNode&&ta(e,n,t,3,null,null),function Z2(e){let n=e[js];if(!n)return Lf(e[V],e);for(;n;){let t=null;if(Wt(n))t=n[js];else{const i=n[wt];i&&(t=i)}if(!t){for(;n&&!n[jn]&&n!==e;)Wt(n)&&Lf(n[V],n),n=n[He];null===n&&(n=e),Wt(n)&&Lf(n[V],n),t=n&&n[jn]}n=t}}(n)}}function Lf(e,n){if(!(256&n[ee])){n[ee]&=-129,n[ee]|=256,function X2(e,n){let t;if(null!=e&&null!=(t=e.destroyHooks))for(let i=0;i=0?i[s]():i[-s].unsubscribe(),r+=2}else t[r].call(i[t[r+1]]);null!==i&&(n[lr]=null);const o=n[Yi];if(null!==o){n[Yi]=null;for(let r=0;r-1){const{encapsulation:r}=e.data[i.directiveStart+o];if(r===kn.None||r===kn.Emulated)return null}return qt(i,t)}}(e,n.parent,t)}function So(e,n,t,i,o){e.insertBefore(n,t,i,o)}function K1(e,n,t){e.appendChild(n,t)}function X1(e,n,t,i,o){null!==i?So(e,n,t,i,o):K1(e,n,t)}function pc(e,n){return e.parentNode(n)}function e_(e,n,t){return n_(e,n,t)}let Bf,vc,Gf,_c,n_=function t_(e,n,t){return 40&e.type?qt(e,t):null};function gc(e,n,t,i){const o=Vf(e,i,n),r=n[K],a=e_(i.parent||n[Ot],i,n);if(null!=o)if(Array.isArray(t))for(let l=0;le,createScript:e=>e,createScriptURL:e=>e})}catch{}return vc}()?.createHTML(e)||e}function d_(e){return function zf(){if(void 0===_c&&(_c=null,Fe.trustedTypes))try{_c=Fe.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return _c}()?.createScriptURL(e)||e}class Eo{constructor(n){this.changingThisBreaksApplicationSecurity=n}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${nv})`}}class uN extends Eo{getTypeName(){return"HTML"}}class dN extends Eo{getTypeName(){return"Style"}}class fN extends Eo{getTypeName(){return"Script"}}class hN extends Eo{getTypeName(){return"URL"}}class pN extends Eo{getTypeName(){return"ResourceURL"}}function an(e){return e instanceof Eo?e.changingThisBreaksApplicationSecurity:e}function ai(e,n){const t=function gN(e){return e instanceof Eo&&e.getTypeName()||null}(e);if(null!=t&&t!==n){if("ResourceURL"===t&&"URL"===n)return!0;throw new Error(`Required a safe ${n}, got a ${t} (see ${nv})`)}return t===n}class wN{constructor(n){this.inertDocumentHelper=n}getInertBodyElement(n){n=""+n;try{const t=(new window.DOMParser).parseFromString(Ir(n),"text/html").body;return null===t?this.inertDocumentHelper.getInertBodyElement(n):(t.removeChild(t.firstChild),t)}catch{return null}}}class DN{constructor(n){this.defaultDoc=n,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert")}getInertBodyElement(n){const t=this.inertDocument.createElement("template");return t.innerHTML=Ir(n),t}}const SN=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function yc(e){return(e=String(e)).match(SN)?e:"unsafe:"+e}function Ii(e){const n={};for(const t of e.split(","))n[t]=!0;return n}function na(...e){const n={};for(const t of e)for(const i in t)t.hasOwnProperty(i)&&(n[i]=!0);return n}const h_=Ii("area,br,col,hr,img,wbr"),p_=Ii("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),g_=Ii("rp,rt"),Wf=na(h_,na(p_,Ii("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),na(g_,Ii("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),na(g_,p_)),qf=Ii("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),m_=na(qf,Ii("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),Ii("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext")),EN=Ii("script,style,template");class TN{constructor(){this.sanitizedSomething=!1,this.buf=[]}sanitizeChildren(n){let t=n.firstChild,i=!0;for(;t;)if(t.nodeType===Node.ELEMENT_NODE?i=this.startElement(t):t.nodeType===Node.TEXT_NODE?this.chars(t.nodeValue):this.sanitizedSomething=!0,i&&t.firstChild)t=t.firstChild;else for(;t;){t.nodeType===Node.ELEMENT_NODE&&this.endElement(t);let o=this.checkClobberedElement(t,t.nextSibling);if(o){t=o;break}t=this.checkClobberedElement(t,t.parentNode)}return this.buf.join("")}startElement(n){const t=n.nodeName.toLowerCase();if(!Wf.hasOwnProperty(t))return this.sanitizedSomething=!0,!EN.hasOwnProperty(t);this.buf.push("<"),this.buf.push(t);const i=n.attributes;for(let o=0;o"),!0}endElement(n){const t=n.nodeName.toLowerCase();Wf.hasOwnProperty(t)&&!h_.hasOwnProperty(t)&&(this.buf.push(""))}chars(n){this.buf.push(v_(n))}checkClobberedElement(n,t){if(t&&(n.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${n.outerHTML}`);return t}}const MN=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,IN=/([^\#-~ |!])/g;function v_(e){return e.replace(/&/g,"&").replace(MN,function(n){return"&#"+(1024*(n.charCodeAt(0)-55296)+(n.charCodeAt(1)-56320)+65536)+";"}).replace(IN,function(n){return"&#"+n.charCodeAt(0)+";"}).replace(//g,">")}let bc;function __(e,n){let t=null;try{bc=bc||function f_(e){const n=new DN(e);return function CN(){try{return!!(new window.DOMParser).parseFromString(Ir(""),"text/html")}catch{return!1}}()?new wN(n):n}(e);let i=n?String(n):"";t=bc.getInertBodyElement(i);let o=5,r=i;do{if(0===o)throw new Error("Failed to sanitize html because the input is unstable");o--,i=r,r=t.innerHTML,t=bc.getInertBodyElement(i)}while(i!==r);return Ir((new TN).sanitizeChildren(Yf(t)||t))}finally{if(t){const i=Yf(t)||t;for(;i.firstChild;)i.removeChild(i.firstChild)}}}function Yf(e){return"content"in e&&function NN(e){return e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.nodeName}(e)?e.content:null}var wn=function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e}(wn||{});function Dn(e){const n=ia();return n?n.sanitize(wn.URL,e)||"":ai(e,"URL")?an(e):yc(J(e))}function Zf(e){const n=ia();if(n)return d_(n.sanitize(wn.RESOURCE_URL,e)||"");if(ai(e,"ResourceURL"))return d_(an(e));throw new O(904,!1)}function ia(){const e=I();return e&&e[cr].sanitizer}const oa=new U("ENVIRONMENT_INITIALIZER"),b_=new U("INJECTOR",-1),w_=new U("INJECTOR_DEF_TYPES");class Qf{get(n,t=Rs){if(t===Rs){const i=new Error(`NullInjectorError: No provider for ${ct(n)}!`);throw i.name="NullInjectorError",i}return t}}function FN(...e){return{\u0275providers:C_(0,e),\u0275fromNgModule:!0}}function C_(e,...n){const t=[],i=new Set;let o;const r=s=>{t.push(s)};return Cr(n,s=>{const a=s;wc(a,r,[],i)&&(o||=[],o.push(a))}),void 0!==o&&S_(o,r),t}function S_(e,n){for(let t=0;t{n(r,i)})}}function wc(e,n,t,i){if(!(e=Z(e)))return!1;let o=null,r=kl(e);const s=!r&&de(e);if(r||s){if(s&&!s.standalone)return!1;o=e}else{const l=e.ngModule;if(r=kl(l),!r)return!1;o=l}const a=i.has(o);if(s){if(a)return!1;if(i.add(o),s.dependencies){const l="function"==typeof s.dependencies?s.dependencies():s.dependencies;for(const d of l)wc(d,n,t,i)}}else{if(!r)return!1;{if(null!=r.imports&&!a){let d;i.add(o);try{Cr(r.imports,h=>{wc(h,n,t,i)&&(d||=[],d.push(h))})}finally{}void 0!==d&&S_(d,n)}if(!a){const d=bo(o)||(()=>new o);n({provide:o,useFactory:d,deps:ge},o),n({provide:w_,useValue:o,multi:!0},o),n({provide:oa,useValue:()=>L(o),multi:!0},o)}const l=r.providers;if(null!=l&&!a){const d=e;Jf(l,h=>{n(h,d)})}}}return o!==e&&void 0!==e.providers}function Jf(e,n){for(let t of e)Bd(t)&&(t=t.\u0275providers),Array.isArray(t)?Jf(t,n):n(t)}const jN=Ne({provide:String,useValue:Ne});function Kf(e){return null!==e&&"object"==typeof e&&jN in e}function To(e){return"function"==typeof e}const Xf=new U("Set Injector scope."),Dc={},VN={};let eh;function Cc(){return void 0===eh&&(eh=new Qf),eh}class Zt{}class Or extends Zt{get destroyed(){return this._destroyed}constructor(n,t,i,o){super(),this.parent=t,this.source=i,this.scopes=o,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,nh(n,s=>this.processProvider(s)),this.records.set(b_,Ar(void 0,this)),o.has("environment")&&this.records.set(Zt,Ar(void 0,this));const r=this.records.get(Xf);null!=r&&"string"==typeof r.value&&this.scopes.add(r.value),this.injectorDefTypes=new Set(this.get(w_.multi,ge,oe.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const t of this._ngOnDestroyHooks)t.ngOnDestroy();const n=this._onDestroyHooks;this._onDestroyHooks=[];for(const t of n)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear()}}onDestroy(n){return this.assertNotDestroyed(),this._onDestroyHooks.push(n),()=>this.removeOnDestroy(n)}runInContext(n){this.assertNotDestroyed();const t=Wi(this),i=Gt(void 0);try{return n()}finally{Wi(t),Gt(i)}}get(n,t=Rs,i=oe.Default){if(this.assertNotDestroyed(),n.hasOwnProperty(dv))return n[dv](this);i=Ll(i);const r=Wi(this),s=Gt(void 0);try{if(!(i&oe.SkipSelf)){let l=this.records.get(n);if(void 0===l){const d=function GN(e){return"function"==typeof e||"object"==typeof e&&e instanceof U}(n)&&Pl(n);l=d&&this.injectableDefInScope(d)?Ar(th(n),Dc):null,this.records.set(n,l)}if(null!=l)return this.hydrate(n,l)}return(i&oe.Self?Cc():this.parent).get(n,t=i&oe.Optional&&t===Rs?null:t)}catch(a){if("NullInjectorError"===a.name){if((a[jl]=a[jl]||[]).unshift(ct(n)),r)throw a;return function kM(e,n,t,i){const o=e[jl];throw n[lv]&&o.unshift(n[lv]),e.message=function FM(e,n,t,i=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let o=ct(n);if(Array.isArray(n))o=n.map(ct).join(" -> ");else if("object"==typeof n){let r=[];for(let s in n)if(n.hasOwnProperty(s)){let a=n[s];r.push(s+":"+("string"==typeof a?JSON.stringify(a):ct(a)))}o=`{${r.join(", ")}}`}return`${t}${i?"("+i+")":""}[${o}]: ${e.replace(OM,"\n ")}`}("\n"+e.message,o,t,i),e.ngTokenPath=o,e[jl]=null,e}(a,n,"R3InjectorError",this.source)}throw a}finally{Gt(s),Wi(r)}}resolveInjectorInitializers(){const n=Wi(this),t=Gt(void 0);try{const o=this.get(oa.multi,ge,oe.Self);for(const r of o)r()}finally{Wi(n),Gt(t)}}toString(){const n=[],t=this.records;for(const i of t.keys())n.push(ct(i));return`R3Injector[${n.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new O(205,!1)}processProvider(n){let t=To(n=Z(n))?n:Z(n&&n.provide);const i=function HN(e){return Kf(e)?Ar(void 0,e.useValue):Ar(function M_(e,n,t){let i;if(To(e)){const o=Z(e);return bo(o)||th(o)}if(Kf(e))i=()=>Z(e.useValue);else if(function T_(e){return!(!e||!e.useFactory)}(e))i=()=>e.useFactory(...Zd(e.deps||[]));else if(function E_(e){return!(!e||!e.useExisting)}(e))i=()=>L(Z(e.useExisting));else{const o=Z(e&&(e.useClass||e.provide));if(!function $N(e){return!!e.deps}(e))return bo(o)||th(o);i=()=>new o(...Zd(e.deps))}return i}(e),Dc)}(n);if(To(n)||!0!==n.multi)this.records.get(t);else{let o=this.records.get(t);o||(o=Ar(void 0,Dc,!0),o.factory=()=>Zd(o.multi),this.records.set(t,o)),t=n,o.multi.push(n)}this.records.set(t,i)}hydrate(n,t){return t.value===Dc&&(t.value=VN,t.value=t.factory()),"object"==typeof t.value&&t.value&&function UN(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}injectableDefInScope(n){if(!n.providedIn)return!1;const t=Z(n.providedIn);return"string"==typeof t?"any"===t||this.scopes.has(t):this.injectorDefTypes.has(t)}removeOnDestroy(n){const t=this._onDestroyHooks.indexOf(n);-1!==t&&this._onDestroyHooks.splice(t,1)}}function th(e){const n=Pl(e),t=null!==n?n.factory:bo(e);if(null!==t)return t;if(e instanceof U)throw new O(204,!1);if(e instanceof Function)return function BN(e){const n=e.length;if(n>0)throw Qs(n,"?"),new O(204,!1);const t=function TM(e){return e&&(e[Fl]||e[ov])||null}(e);return null!==t?()=>t.factory(e):()=>new e}(e);throw new O(204,!1)}function Ar(e,n,t=!1){return{factory:e,value:n,multi:t?[]:void 0}}function nh(e,n){for(const t of e)Array.isArray(t)?nh(t,n):t&&Bd(t)?nh(t.\u0275providers,n):n(t)}const Sc=new U("AppId",{providedIn:"root",factory:()=>zN}),zN="ng",I_=new U("Platform Initializer"),Rr=new U("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),N_=new U("CSP nonce",{providedIn:"root",factory:()=>function Nr(){if(void 0!==Gf)return Gf;if(typeof document<"u")return document;throw new O(210,!1)}().body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});let O_=(e,n,t)=>null;function uh(e,n,t=!1){return O_(e,n,t)}class tO{}class x_{}class iO{resolveComponentFactory(n){throw function nO(e){const n=Error(`No component factory found for ${ct(e)}.`);return n.ngComponent=e,n}(n)}}let Oc=(()=>{class e{static{this.NULL=new iO}}return e})();function oO(){return kr(St(),I())}function kr(e,n){return new we(qt(e,n))}let we=(()=>{class e{constructor(t){this.nativeElement=t}static{this.__NG_ELEMENT_ID__=oO}}return e})();function rO(e){return e instanceof we?e.nativeElement:e}class hh{}let ln=(()=>{class e{constructor(){this.destroyNode=null}static{this.__NG_ELEMENT_ID__=()=>function sO(){const e=I(),t=rn(St().index,e);return(Wt(t)?t:e)[K]}()}}return e})(),aO=(()=>{class e{static{this.\u0275prov=F({token:e,providedIn:"root",factory:()=>null})}}return e})();class aa{constructor(n){this.full=n,this.major=n.split(".")[0],this.minor=n.split(".")[1],this.patch=n.split(".").slice(2).join(".")}}const lO=new aa("16.2.12"),ph={};function L_(e,n=null,t=null,i){const o=V_(e,n,t,i);return o.resolveInjectorInitializers(),o}function V_(e,n=null,t=null,i,o=new Set){const r=[t||ge,FN(e)];return i=i||("object"==typeof e?void 0:ct(e)),new Or(r,n||Cc(),i||null,o)}let gt=(()=>{class e{static{this.THROW_IF_NOT_FOUND=Rs}static{this.NULL=new Qf}static create(t,i){if(Array.isArray(t))return L_({name:""},i,t,"");{const o=t.name??"";return L_({name:o},t.parent,t.providers,o)}}static{this.\u0275prov=F({token:e,providedIn:"any",factory:()=>L(b_)})}static{this.__NG_ELEMENT_ID__=-1}}return e})();function gh(e){return e.ngOriginalError}class Ni{constructor(){this._console=console}handleError(n){const t=this._findOriginalError(n);this._console.error("ERROR",n),t&&this._console.error("ORIGINAL ERROR",t)}_findOriginalError(n){let t=n&&gh(n);for(;t&&gh(t);)t=gh(t);return t||null}}function mh(e){return n=>{setTimeout(e,void 0,n)}}const z=class mO extends ye{constructor(n=!1){super(),this.__isAsync=n}emit(n){super.next(n)}subscribe(n,t,i){let o=n,r=t||(()=>null),s=i;if(n&&"object"==typeof n){const l=n;o=l.next?.bind(l),r=l.error?.bind(l),s=l.complete?.bind(l)}this.__isAsync&&(r=mh(r),o&&(o=mh(o)),s&&(s=mh(s)));const a=super.subscribe({next:o,error:r,complete:s});return n instanceof Je&&n.add(a),a}};function H_(...e){}class ae{constructor({enableLongStackTrace:n=!1,shouldCoalesceEventChangeDetection:t=!1,shouldCoalesceRunChangeDetection:i=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new z(!1),this.onMicrotaskEmpty=new z(!1),this.onStable=new z(!1),this.onError=new z(!1),typeof Zone>"u")throw new O(908,!1);Zone.assertZonePatched();const o=this;o._nesting=0,o._outer=o._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(o._inner=o._inner.fork(new Zone.TaskTrackingZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(o._inner=o._inner.fork(Zone.longStackTraceZoneSpec)),o.shouldCoalesceEventChangeDetection=!i&&t,o.shouldCoalesceRunChangeDetection=i,o.lastRequestAnimationFrameId=-1,o.nativeRequestAnimationFrame=function vO(){const e="function"==typeof Fe.requestAnimationFrame;let n=Fe[e?"requestAnimationFrame":"setTimeout"],t=Fe[e?"cancelAnimationFrame":"clearTimeout"];if(typeof Zone<"u"&&n&&t){const i=n[Zone.__symbol__("OriginalDelegate")];i&&(n=i);const o=t[Zone.__symbol__("OriginalDelegate")];o&&(t=o)}return{nativeRequestAnimationFrame:n,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function bO(e){const n=()=>{!function yO(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(Fe,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,_h(e),e.isCheckStableRunning=!0,vh(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),_h(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(t,i,o,r,s,a)=>{if(function DO(e){return!(!Array.isArray(e)||1!==e.length)&&!0===e[0].data?.__ignore_ng_zone__}(a))return t.invokeTask(o,r,s,a);try{return $_(e),t.invokeTask(o,r,s,a)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===r.type||e.shouldCoalesceRunChangeDetection)&&n(),U_(e)}},onInvoke:(t,i,o,r,s,a,l)=>{try{return $_(e),t.invoke(o,r,s,a,l)}finally{e.shouldCoalesceRunChangeDetection&&n(),U_(e)}},onHasTask:(t,i,o,r)=>{t.hasTask(o,r),i===o&&("microTask"==r.change?(e._hasPendingMicrotasks=r.microTask,_h(e),vh(e)):"macroTask"==r.change&&(e.hasPendingMacrotasks=r.macroTask))},onHandleError:(t,i,o,r)=>(t.handleError(o,r),e.runOutsideAngular(()=>e.onError.emit(r)),!1)})}(o)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!ae.isInAngularZone())throw new O(909,!1)}static assertNotInAngularZone(){if(ae.isInAngularZone())throw new O(909,!1)}run(n,t,i){return this._inner.run(n,t,i)}runTask(n,t,i,o){const r=this._inner,s=r.scheduleEventTask("NgZoneEvent: "+o,n,_O,H_,H_);try{return r.runTask(s,t,i)}finally{r.cancelTask(s)}}runGuarded(n,t,i){return this._inner.runGuarded(n,t,i)}runOutsideAngular(n){return this._outer.run(n)}}const _O={};function vh(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function _h(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function $_(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function U_(e){e._nesting--,vh(e)}class wO{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new z,this.onMicrotaskEmpty=new z,this.onStable=new z,this.onError=new z}run(n,t,i){return n.apply(t,i)}runGuarded(n,t,i){return n.apply(t,i)}runOutsideAngular(n){return n()}runTask(n,t,i,o){return n.apply(t,i)}}const G_=new U("",{providedIn:"root",factory:z_});function z_(){const e=k(ae);let n=!0;return function Xm(...e){const n=As(e),t=function dM(e,n){return"number"==typeof Fd(e)?e.pop():n}(e,1/0),i=e;return i.length?1===i.length?at(i[0]):rr(t)(pt(i,n)):mn}(new Te(o=>{n=e.isStable&&!e.hasPendingMacrotasks&&!e.hasPendingMicrotasks,e.runOutsideAngular(()=>{o.next(n),o.complete()})}),new Te(o=>{let r;e.runOutsideAngular(()=>{r=e.onStable.subscribe(()=>{ae.assertNotInAngularZone(),queueMicrotask(()=>{!n&&!e.hasPendingMacrotasks&&!e.hasPendingMicrotasks&&(n=!0,o.next(!0))})})});const s=e.onUnstable.subscribe(()=>{ae.assertInAngularZone(),n&&(n=!1,e.runOutsideAngular(()=>{o.next(!1)}))});return()=>{r.unsubscribe(),s.unsubscribe()}}).pipe(ev()))}function Oi(e){return e instanceof Function?e():e}let yh=(()=>{class e{constructor(){this.renderDepth=0,this.handler=null}begin(){this.handler?.validateBegin(),this.renderDepth++}end(){this.renderDepth--,0===this.renderDepth&&this.handler?.execute()}ngOnDestroy(){this.handler?.destroy(),this.handler=null}static{this.\u0275prov=F({token:e,providedIn:"root",factory:()=>new e})}}return e})();function la(e){for(;e;){e[ee]|=64;const n=Xs(e);if(tf(e)&&!n)return e;e=n}return null}const Q_=new U("",{providedIn:"root",factory:()=>!1});let xc=null;function ey(e,n){return e[n]??iy()}function ty(e,n){const t=iy();t.producerNode?.length&&(e[n]=xc,t.lView=e,xc=ny())}const RO={...Iv,consumerIsAlwaysLive:!0,consumerMarkedDirty:e=>{la(e.lView)},lView:null};function ny(){return Object.create(RO)}function iy(){return xc??=ny(),xc}const X={};function M(e){oy(fe(),I(),Ft()+e,!1)}function oy(e,n,t,i){if(!i)if(3==(3&n[ee])){const r=e.preOrderCheckHooks;null!==r&&Zl(n,r,t)}else{const r=e.preOrderHooks;null!==r&&Ql(n,r,0,t)}wo(t)}function y(e,n=oe.Default){const t=I();return null===t?L(e,n):y1(St(),t,Z(e),n)}function Pc(e,n,t,i,o,r,s,a,l,d,h){const p=n.blueprint.slice();return p[qe]=o,p[ee]=140|i,(null!==d||e&&2048&e[ee])&&(p[ee]|=2048),Yv(p),p[He]=p[ur]=e,p[Xe]=t,p[cr]=s||e&&e[cr],p[K]=a||e&&e[K],p[qi]=l||e&&e[qi]||null,p[Ot]=r,p[Vs]=function P2(){return x2++}(),p[Ei]=h,p[Sv]=d,p[et]=2==n.type?e[et]:p,p}function Vr(e,n,t,i,o){let r=e.data[n];if(null===r)r=function bh(e,n,t,i,o){const r=e1(),s=df(),l=e.data[n]=function BO(e,n,t,i,o,r){let s=n?n.injectorIndex:-1,a=0;return gr()&&(a|=128),{type:t,index:i,insertBeforeIndex:null,injectorIndex:s,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,propertyBindings:null,flags:a,providerIndexes:0,value:o,attrs:r,mergedAttrs:null,localNames:null,initialInputs:void 0,inputs:null,outputs:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:n,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}(0,s?r:r&&r.parent,t,n,i,o);return null===e.firstChild&&(e.firstChild=l),null!==r&&(s?null==r.child&&null!==l.parent&&(r.child=l):null===r.next&&(r.next=l,l.prev=r)),l}(e,n,t,i,o),function xI(){return Y.lFrame.inI18n}()&&(r.flags|=32);else if(64&r.type){r.type=t,r.value=i,r.attrs=o;const s=function Gs(){const e=Y.lFrame,n=e.currentTNode;return e.isParent?n:n.parent}();r.injectorIndex=null===s?-1:s.injectorIndex}return ri(r,!0),r}function ca(e,n,t,i){if(0===t)return-1;const o=n.length;for(let r=0;rre&&oy(e,n,re,!1),oi(a?2:0,o);const d=a?r:null,h=rf(d);try{null!==d&&(d.dirty=!1),t(i,o)}finally{sf(d,h)}}finally{a&&null===n[Bs]&&ty(n,Bs),wo(s),oi(a?3:1,o)}}function wh(e,n,t){if(ef(n)){const i=yn(null);try{const r=n.directiveEnd;for(let s=n.directiveStart;snull;function cy(e,n,t,i){for(let o in e)if(e.hasOwnProperty(o)){t=null===t?{}:t;const r=e[o];null===i?uy(t,n,o,r):i.hasOwnProperty(o)&&uy(t,n,i[o],r)}return t}function uy(e,n,t,i){e.hasOwnProperty(t)?e[t].push(n,i):e[t]=[n,i]}function Eh(e,n,t,i){if(Xv()){const o=null===i?null:{"":-1},r=function ZO(e,n){const t=e.directiveRegistry;let i=null,o=null;if(t)for(let r=0;r0;){const t=e[--n];if("number"==typeof t&&t<0)return t}return 0})(s)!=a&&s.push(a),s.push(t,i,r)}}(e,n,i,ca(e,t,o.hostVars,X),o)}function li(e,n,t,i,o,r){const s=qt(e,n);!function Mh(e,n,t,i,o,r,s){if(null==r)e.removeAttribute(n,o,t);else{const a=null==s?J(r):s(r,i||"",o);e.setAttribute(n,o,a,t)}}(n[K],s,r,e.value,t,i,o)}function tA(e,n,t,i,o,r){const s=r[n];if(null!==s)for(let a=0;a{class e{constructor(){this.all=new Set,this.queue=new Map}create(t,i,o){const r=typeof Zone>"u"?null:Zone.current,s=function dI(e,n,t){const i=Object.create(fI);t&&(i.consumerAllowSignalWrites=!0),i.fn=e,i.schedule=n;const o=s=>{i.cleanupFn=s};return i.ref={notify:()=>Rv(i),run:()=>{if(i.dirty=!1,i.hasRun&&!xv(i))return;i.hasRun=!0;const s=rf(i);try{i.cleanupFn(),i.cleanupFn=Hv,i.fn(o)}finally{sf(i,s)}},cleanup:()=>i.cleanupFn()},i.ref}(t,d=>{this.all.has(d)&&this.queue.set(d,r)},o);let a;this.all.add(s),s.notify();const l=()=>{s.cleanup(),a?.(),this.all.delete(s),this.queue.delete(s)};return a=i?.onDestroy(l),{destroy:l}}flush(){if(0!==this.queue.size)for(const[t,i]of this.queue)this.queue.delete(t),i?i.run(()=>t.run()):t.run()}get isQueueEmpty(){return 0===this.queue.size}static{this.\u0275prov=F({token:e,providedIn:"root",factory:()=>new e})}}return e})();function Fc(e,n,t){let i=t?e.styles:null,o=t?e.classes:null,r=0;if(null!==n)for(let s=0;s0){Cy(e,1);const o=t.components;null!==o&&Ey(e,o,1)}}function Ey(e,n,t){for(let i=0;i-1&&(hc(n,i),tc(t,i))}this._attachedToViewContainer=!1}jf(this._lView[V],this._lView)}onDestroy(n){!function Jv(e,n){if(256==(256&e[ee]))throw new O(911,!1);null===e[Yi]&&(e[Yi]=[]),e[Yi].push(n)}(this._lView,n)}markForCheck(){la(this._cdRefInjectingView||this._lView)}detach(){this._lView[ee]&=-129}reattach(){this._lView[ee]|=128}detectChanges(){jc(this._lView[V],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new O(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function Y2(e,n){ta(e,n,n[K],2,null,null)}(this._lView[V],this._lView)}attachToAppRef(n){if(this._attachedToViewContainer)throw new O(902,!1);this._appRef=n}}class uA extends da{constructor(n){super(n),this._view=n}detectChanges(){const n=this._view;jc(n[V],n,n[Xe],!1)}checkNoChanges(){}get context(){return null}}class Ty extends Oc{constructor(n){super(),this.ngModule=n}resolveComponentFactory(n){const t=de(n);return new fa(t,this.ngModule)}}function My(e){const n=[];for(let t in e)e.hasOwnProperty(t)&&n.push({propName:e[t],templateName:t});return n}class fA{constructor(n,t){this.injector=n,this.parentInjector=t}get(n,t,i){i=Ll(i);const o=this.injector.get(n,ph,i);return o!==ph||t===ph?o:this.parentInjector.get(n,t,i)}}class fa extends x_{get inputs(){const n=this.componentDef,t=n.inputTransforms,i=My(n.inputs);if(null!==t)for(const o of i)t.hasOwnProperty(o.propName)&&(o.transform=t[o.propName]);return i}get outputs(){return My(this.componentDef.outputs)}constructor(n,t){super(),this.componentDef=n,this.ngModule=t,this.componentType=n.type,this.selector=function WM(e){return e.map(zM).join(",")}(n.selectors),this.ngContentSelectors=n.ngContentSelectors?n.ngContentSelectors:[],this.isBoundToModule=!!t}create(n,t,i,o){let r=(o=o||this.ngModule)instanceof Zt?o:o?.injector;r&&null!==this.componentDef.getStandaloneInjector&&(r=this.componentDef.getStandaloneInjector(r)||r);const s=r?new fA(n,r):n,a=s.get(hh,null);if(null===a)throw new O(407,!1);const p={rendererFactory:a,sanitizer:s.get(aO,null),effectManager:s.get(by,null),afterRenderEventManager:s.get(yh,null)},g=a.createRenderer(null,this.componentDef),v=this.componentDef.selectors[0][0]||"div",_=i?function kO(e,n,t,i){const r=i.get(Q_,!1)||t===kn.ShadowDom,s=e.selectRootElement(n,r);return function FO(e){ly(e)}(s),s}(g,i,this.componentDef.encapsulation,s):fc(g,v,function dA(e){const n=e.toLowerCase();return"svg"===n?"svg":"math"===n?"math":null}(v)),E=this.componentDef.signals?4608:this.componentDef.onPush?576:528;let D=null;null!==_&&(D=uh(_,s,!0));const P=Sh(0,null,null,1,0,null,null,null,null,null,null),R=Pc(null,P,null,E,null,null,p,g,s,null,D);let H,Q;mf(R);try{const ce=this.componentDef;let pe,Qe=null;ce.findHostDirectiveDefs?(pe=[],Qe=new Map,ce.findHostDirectiveDefs(ce,pe,Qe),pe.push(ce)):pe=[ce];const ot=function pA(e,n){const t=e[V],i=re;return e[i]=n,Vr(t,i,2,"#host",null)}(R,_),yt=function gA(e,n,t,i,o,r,s){const a=o[V];!function mA(e,n,t,i){for(const o of e)n.mergedAttrs=ks(n.mergedAttrs,o.hostAttrs);null!==n.mergedAttrs&&(Fc(n,n.mergedAttrs,!0),null!==t&&l_(i,t,n))}(i,e,n,s);let l=null;null!==n&&(l=uh(n,o[qi]));const d=r.rendererFactory.createRenderer(n,t);let h=16;t.signals?h=4096:t.onPush&&(h=64);const p=Pc(o,ay(t),null,h,o[e.index],e,r,d,null,null,l);return a.firstCreatePass&&Th(a,e,i.length-1),kc(o,p),o[e.index]=p}(ot,_,ce,pe,R,p,g);Q=qv(P,re),_&&function _A(e,n,t,i){if(i)Kd(e,t,["ng-version",lO.full]);else{const{attrs:o,classes:r}=function qM(e){const n=[],t=[];let i=1,o=2;for(;i0&&a_(e,t,r.join(" "))}}(g,ce,_,i),void 0!==t&&function yA(e,n,t){const i=e.projection=[];for(let o=0;o(Ji(!0),fc(i,o,function u1(){return Y.lFrame.currentNamespace}()));function _a(e){return!!e&&"function"==typeof e.then}function Qy(e){return!!e&&"function"==typeof e.subscribe}function le(e,n,t,i){const o=I(),r=fe(),s=St();return function Ky(e,n,t,i,o,r,s){const a=Ul(i),d=e.firstCreatePass&&vy(e),h=n[Xe],p=my(n);let g=!0;if(3&i.type||s){const b=qt(i,n),C=s?s(b):b,E=p.length,D=s?R=>s(je(R[i.index])):i.index;let P=null;if(!s&&a&&(P=function oR(e,n,t,i){const o=e.cleanup;if(null!=o)for(let r=0;rl?a[l]:null}"string"==typeof s&&(r+=2)}return null}(e,n,o,i.index)),null!==P)(P.__ngLastListenerFn__||P).__ngNextListenerFn__=r,P.__ngLastListenerFn__=r,g=!1;else{r=e0(i,n,h,r,!1);const R=t.listen(C,o,r);p.push(r,R),d&&d.push(o,D,E,E+1)}}else r=e0(i,n,h,r,!1);const v=i.outputs;let _;if(g&&null!==v&&(_=v[o])){const b=_.length;if(b)for(let C=0;C-1?rn(e.index,n):n);let l=Xy(n,t,i,s),d=r.__ngNextListenerFn__;for(;d;)l=Xy(n,t,d,s)&&l,d=d.__ngNextListenerFn__;return o&&!1===l&&s.preventDefault(),l}}function G(e=1){return function jI(e){return(Y.lFrame.contextLView=function LI(e,n){for(;e>0;)n=n[ur],e--;return n}(e,Y.lFrame.contextLView))[Xe]}(e)}function rR(e,n){let t=null;const i=function HM(e){const n=e.attrs;if(null!=n){const t=n.indexOf(5);if(!(1&t))return n[t+1]}return null}(e);for(let o=0;o>17&32767}function Uh(e){return 2|e}function Io(e){return(131068&e)>>2}function Gh(e,n){return-131069&e|n<<2}function zh(e){return 1|e}function u0(e,n,t,i,o){const r=e[t+1],s=null===n;let a=i?Xi(r):Io(r),l=!1;for(;0!==a&&(!1===l||s);){const h=e[a+1];dR(e[a],n)&&(l=!0,e[a+1]=i?zh(h):Uh(h)),a=i?Xi(h):Io(h)}l&&(e[t+1]=i?Uh(r):zh(r))}function dR(e,n){return null===e||null==n||(Array.isArray(e)?e[1]:e)===n||!(!Array.isArray(e)||"string"!=typeof n)&&Sr(e,n)>=0}const dt={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function d0(e){return e.substring(dt.key,dt.keyEnd)}function f0(e,n){const t=dt.textEnd;return t===n?-1:(n=dt.keyEnd=function gR(e,n,t){for(;n32;)n++;return n}(e,dt.key=n,t),Zr(e,n,t))}function Zr(e,n,t){for(;n=0;t=f0(n,t))sn(e,d0(n),!0)}function _0(e,n){return n>=e.expandoStartIndex}function y0(e,n,t,i){const o=e.data;if(null===o[t+1]){const r=o[Ft()],s=_0(e,t);C0(r,i)&&null===n&&!s&&(n=!1),n=function yR(e,n,t,i){const o=function pf(e){const n=Y.lFrame.currentDirectiveIndex;return-1===n?null:e[n]}(e);let r=i?n.residualClasses:n.residualStyles;if(null===o)0===(i?n.classBindings:n.styleBindings)&&(t=ya(t=Wh(null,e,n,t,i),n.attrs,i),r=null);else{const s=n.directiveStylingLast;if(-1===s||e[s]!==o)if(t=Wh(o,e,n,t,i),null===r){let l=function bR(e,n,t){const i=t?n.classBindings:n.styleBindings;if(0!==Io(i))return e[Xi(i)]}(e,n,i);void 0!==l&&Array.isArray(l)&&(l=Wh(null,e,n,l[1],i),l=ya(l,n.attrs,i),function wR(e,n,t,i){e[Xi(t?n.classBindings:n.styleBindings)]=i}(e,n,i,l))}else r=function DR(e,n,t){let i;const o=n.directiveEnd;for(let r=1+n.directiveStylingLast;r0)&&(d=!0)):h=t,o)if(0!==l){const g=Xi(e[a+1]);e[i+1]=zc(g,a),0!==g&&(e[g+1]=Gh(e[g+1],i)),e[a+1]=function aR(e,n){return 131071&e|n<<17}(e[a+1],i)}else e[i+1]=zc(a,0),0!==a&&(e[a+1]=Gh(e[a+1],i)),a=i;else e[i+1]=zc(l,0),0===a?a=i:e[l+1]=Gh(e[l+1],i),l=i;d&&(e[i+1]=Uh(e[i+1])),u0(e,h,i,!0),u0(e,h,i,!1),function uR(e,n,t,i,o){const r=o?e.residualClasses:e.residualStyles;null!=r&&"string"==typeof n&&Sr(r,n)>=0&&(t[i+1]=zh(t[i+1]))}(n,h,e,i,r),s=zc(a,l),r?n.classBindings=s:n.styleBindings=s}(o,r,n,t,s,i)}}function Wh(e,n,t,i,o){let r=null;const s=t.directiveEnd;let a=t.directiveStylingLast;for(-1===a?a=t.directiveStart:a++;a0;){const l=e[o],d=Array.isArray(l),h=d?l[1]:l,p=null===h;let g=t[o+1];g===X&&(g=p?ge:void 0);let v=p?Tf(g,i):h===i?g:void 0;if(d&&!Wc(v)&&(v=Tf(l,i)),Wc(v)&&(a=v,s))return a;const _=e[o+1];o=s?Xi(_):Io(_)}if(null!==n){let l=r?n.residualClasses:n.residualStyles;null!=l&&(a=Tf(l,i))}return a}function Wc(e){return void 0!==e}function C0(e,n){return 0!=(e.flags&(n?8:16))}function f(e,n=""){const t=I(),i=fe(),o=e+re,r=i.firstCreatePass?Vr(i,o,1,n,null):i.data[o],s=S0(i,t,r,n,e);t[o]=s,ql()&&gc(i,t,s,r),ri(r,!1)}let S0=(e,n,t,i,o)=>(Ji(!0),function dc(e,n){return e.createText(n)}(n[K],i));function Le(e){return un("",e,""),Le}function un(e,n,t){const i=I(),o=function Hr(e,n,t,i){return Rt(e,mr(),t)?n+J(t)+i:X}(i,e,n,t);return o!==X&&function Ai(e,n,t){const i=Wl(n,e);!function Z1(e,n,t){e.setValue(n,t)}(e[K],i,t)}(i,Ft(),o),un}const Jr="en-US";let z0=Jr;class Ao{}class vb{}class Xh extends Ao{constructor(n,t,i){super(),this._parent=t,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Ty(this);const o=on(n);this._bootstrapComponents=Oi(o.bootstrap),this._r3Injector=V_(n,t,[{provide:Ao,useValue:this},{provide:Oc,useValue:this.componentFactoryResolver},...i],ct(n),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(n)}get injector(){return this._r3Injector}destroy(){const n=this._r3Injector;!n.destroyed&&n.destroy(),this.destroyCbs.forEach(t=>t()),this.destroyCbs=null}onDestroy(n){this.destroyCbs.push(n)}}class ep extends vb{constructor(n){super(),this.moduleType=n}create(n){return new Xh(this.moduleType,n,[])}}class _b extends Ao{constructor(n){super(),this.componentFactoryResolver=new Ty(this),this.instance=null;const t=new Or([...n.providers,{provide:Ao,useValue:this},{provide:Oc,useValue:this.componentFactoryResolver}],n.parent||Cc(),n.debugName,new Set(["environment"]));this.injector=t,n.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(n){this.injector.onDestroy(n)}}function tp(e,n,t=null){return new _b({providers:e,parent:n,debugName:t,runEnvironmentInitializers:!0}).injector}let Zx=(()=>{class e{constructor(t){this._injector=t,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(t){if(!t.standalone)return null;if(!this.cachedInjectors.has(t)){const i=C_(0,t.type),o=i.length>0?tp([i],this._injector,`Standalone[${t.type.name}]`):null;this.cachedInjectors.set(t,o)}return this.cachedInjectors.get(t)}ngOnDestroy(){try{for(const t of this.cachedInjectors.values())null!==t&&t.destroy()}finally{this.cachedInjectors.clear()}}static{this.\u0275prov=F({token:e,providedIn:"environment",factory:()=>new e(L(Zt))})}}return e})();function En(e){e.getStandaloneInjector=n=>n.get(Zx).getOrCreateStandaloneInjector(e)}function Ri(e,n,t,i){return function Tb(e,n,t,i,o,r){const s=n+t;return Rt(e,s,o)?ci(e,s+1,r?i.call(r,o):i(o)):Ma(e,s+1)}(I(),kt(),e,n,t,i)}function Eb(e,n,t,i,o,r,s){return function Nb(e,n,t,i,o,r,s,a,l){const d=n+t;return function Cn(e,n,t,i,o,r){const s=Mo(e,n,t,i);return Mo(e,n+2,o,r)||s}(e,d,o,r,s,a)?ci(e,d+4,l?i.call(l,o,r,s,a):i(o,r,s,a)):Ma(e,d+4)}(I(),kt(),e,n,t,i,o,r,s)}function Ma(e,n){const t=e[n];return t===X?void 0:t}function vP(){return this._results[Symbol.iterator]()}class op{get changes(){return this._changes||(this._changes=new z)}constructor(n=!1){this._emitDistinctChangesOnly=n,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const t=op.prototype;t[Symbol.iterator]||(t[Symbol.iterator]=vP)}get(n){return this._results[n]}map(n){return this._results.map(n)}filter(n){return this._results.filter(n)}find(n){return this._results.find(n)}reduce(n,t){return this._results.reduce(n,t)}forEach(n){this._results.forEach(n)}some(n){return this._results.some(n)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(n,t){const i=this;i.dirty=!1;const o=function bn(e){return e.flat(Number.POSITIVE_INFINITY)}(n);(this._changesDetected=!function a2(e,n,t){if(e.length!==n.length)return!1;for(let i=0;i0&&(t[o-1][jn]=n),i{class e{static{this.__NG_ELEMENT_ID__=DP}}return e})();const bP=ze,wP=class extends bP{constructor(n,t,i){super(),this._declarationLView=n,this._declarationTContainer=t,this.elementRef=i}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(n,t){return this.createEmbeddedViewImpl(n,t)}createEmbeddedViewImpl(n,t,i){const o=function _P(e,n,t,i){const o=n.tView,a=Pc(e,o,t,4096&e[ee]?4096:16,null,n,null,null,null,i?.injector??null,i?.hydrationInfo??null);a[Ls]=e[n.index];const d=e[ni];return null!==d&&(a[ni]=d.createEmbeddedView(o)),Oh(o,a,t),a}(this._declarationLView,this._declarationTContainer,n,{injector:t,hydrationInfo:i});return new da(o)}};function DP(){return Jc(St(),I())}function Jc(e,n){return 4&e.type?new wP(n,e,kr(e,n)):null}let Tn=(()=>{class e{static{this.__NG_ELEMENT_ID__=IP}}return e})();function IP(){return jb(St(),I())}const NP=Tn,kb=class extends NP{constructor(n,t,i){super(),this._lContainer=n,this._hostTNode=t,this._hostLView=i}get element(){return kr(this._hostTNode,this._hostLView)}get injector(){return new jt(this._hostTNode,this._hostLView)}get parentInjector(){const n=Xl(this._hostTNode,this._hostLView);if(bf(n)){const t=qs(n,this._hostLView),i=Ws(n);return new jt(t[V].data[i+8],t)}return new jt(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(n){const t=Fb(this._lContainer);return null!==t&&t[n]||null}get length(){return this._lContainer.length-wt}createEmbeddedView(n,t,i){let o,r;"number"==typeof i?o=i:null!=i&&(o=i.index,r=i.injector);const a=n.createEmbeddedViewImpl(t||{},r,null);return this.insertImpl(a,o,false),a}createComponent(n,t,i,o,r){const s=n&&!function Zs(e){return"function"==typeof e}(n);let a;if(s)a=t;else{const b=t||{};a=b.index,i=b.injector,o=b.projectableNodes,r=b.environmentInjector||b.ngModuleRef}const l=s?n:new fa(de(n)),d=i||this.parentInjector;if(!r&&null==l.ngModule){const C=(s?d:this.parentInjector).get(Zt,null);C&&(r=C)}de(l.componentType??{});const v=l.create(d,o,null,r);return this.insertImpl(v.hostView,a,false),v}insert(n,t){return this.insertImpl(n,t,!1)}insertImpl(n,t,i){const o=n._lView;if(function wI(e){return Pt(e[He])}(o)){const l=this.indexOf(n);if(-1!==l)this.detach(l);else{const d=o[He],h=new kb(d,d[Ot],d[He]);h.detach(h.indexOf(n))}}const s=this._adjustIndex(t),a=this._lContainer;return yP(a,o,s,!i),n.attachToViewContainerRef(),E1(rp(a),s,n),n}move(n,t){return this.insert(n,t)}indexOf(n){const t=Fb(this._lContainer);return null!==t?t.indexOf(n):-1}remove(n){const t=this._adjustIndex(n,-1),i=hc(this._lContainer,t);i&&(tc(rp(this._lContainer),t),jf(i[V],i))}detach(n){const t=this._adjustIndex(n,-1),i=hc(this._lContainer,t);return i&&null!=tc(rp(this._lContainer),t)?new da(i):null}_adjustIndex(n,t=0){return n??this.length+t}};function Fb(e){return e[8]}function rp(e){return e[8]||(e[8]=[])}function jb(e,n){let t;const i=n[e.index];return Pt(i)?t=i:(t=py(i,n,null,e),n[e.index]=t,kc(n,t)),Lb(t,n,e,i),new kb(t,e,n)}let Lb=function Vb(e,n,t,i){if(e[ii])return;let o;o=8&t.type?je(i):function OP(e,n){const t=e[K],i=t.createComment(""),o=qt(n,e);return So(t,pc(t,o),i,function tN(e,n){return e.nextSibling(n)}(t,o),!1),i}(n,t),e[ii]=o};class sp{constructor(n){this.queryList=n,this.matches=null}clone(){return new sp(this.queryList)}setDirty(){this.queryList.setDirty()}}class ap{constructor(n=[]){this.queries=n}createEmbeddedView(n){const t=n.queries;if(null!==t){const i=null!==n.contentQueries?n.contentQueries[0]:t.length,o=[];for(let r=0;r0)i.push(s[a/2]);else{const d=r[a+1],h=n[-l];for(let p=wt;p{class e{constructor(){this.initialized=!1,this.done=!1,this.donePromise=new Promise((t,i)=>{this.resolve=t,this.reject=i}),this.appInits=k(mp,{optional:!0})??[]}runInitializers(){if(this.initialized)return;const t=[];for(const o of this.appInits){const r=o();if(_a(r))t.push(r);else if(Qy(r)){const s=new Promise((a,l)=>{r.subscribe({complete:a,error:l})});t.push(s)}}const i=()=>{this.done=!0,this.resolve()};Promise.all(t).then(()=>{i()}).catch(o=>{this.reject(o)}),0===t.length&&i(),this.initialized=!0}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),aw=(()=>{class e{log(t){console.log(t)}warn(t){console.warn(t)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"platform"})}}return e})();const Gn=new U("LocaleId",{providedIn:"root",factory:()=>k(Gn,oe.Optional|oe.SkipSelf)||function rk(){return typeof $localize<"u"&&$localize.locale||Jr}()});let lw=(()=>{class e{constructor(){this.taskId=0,this.pendingTasks=new Set,this.hasPendingTasks=new vn(!1)}add(){this.hasPendingTasks.next(!0);const t=this.taskId++;return this.pendingTasks.add(t),t}remove(t){this.pendingTasks.delete(t),0===this.pendingTasks.size&&this.hasPendingTasks.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks.next(!1)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();class lk{constructor(n,t){this.ngModuleFactory=n,this.componentFactories=t}}let cw=(()=>{class e{compileModuleSync(t){return new ep(t)}compileModuleAsync(t){return Promise.resolve(this.compileModuleSync(t))}compileModuleAndAllComponentsSync(t){const i=this.compileModuleSync(t),r=Oi(on(t).declarations).reduce((s,a)=>{const l=de(a);return l&&s.push(new fa(l)),s},[]);return new lk(i,r)}compileModuleAndAllComponentsAsync(t){return Promise.resolve(this.compileModuleAndAllComponentsSync(t))}clearCache(){}clearCacheFor(t){}getModuleId(t){}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();const hw=new U(""),tu=new U("");let Dp,bp=(()=>{class e{constructor(t,i,o){this._ngZone=t,this.registry=i,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,Dp||(function Ok(e){Dp=e}(o),o.addToWindow(i)),this._watchAngularEvents(),t.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{ae.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;0!==this._callbacks.length;){let t=this._callbacks.pop();clearTimeout(t.timeoutId),t.doneCb(this._didWork)}this._didWork=!1});else{let t=this.getPendingTasks();this._callbacks=this._callbacks.filter(i=>!i.updateCb||!i.updateCb(t)||(clearTimeout(i.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(t=>({source:t.source,creationLocation:t.creationLocation,data:t.data})):[]}addCallback(t,i,o){let r=-1;i&&i>0&&(r=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==r),t(this._didWork,this.getPendingTasks())},i)),this._callbacks.push({doneCb:t,timeoutId:r,updateCb:o})}whenStable(t,i,o){if(o&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(t,i,o),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(t){this.registry.registerApplication(t,this)}unregisterApplication(t){this.registry.unregisterApplication(t)}findProviders(t,i,o){return[]}static{this.\u0275fac=function(i){return new(i||e)(L(ae),L(wp),L(tu))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})(),wp=(()=>{class e{constructor(){this._applications=new Map}registerApplication(t,i){this._applications.set(t,i)}unregisterApplication(t){this._applications.delete(t)}unregisterAllApplications(){this._applications.clear()}getTestability(t){return this._applications.get(t)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(t,i=!0){return Dp?.findTestabilityInTree(this,t,i)??null}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"platform"})}}return e})(),to=null;const pw=new U("AllowMultipleToken"),Cp=new U("PlatformDestroyListeners"),Sp=new U("appBootstrapListener");class mw{constructor(n,t){this.name=n,this.token=t}}function _w(e,n,t=[]){const i=`Platform: ${n}`,o=new U(i);return(r=[])=>{let s=Ep();if(!s||s.injector.get(pw,!1)){const a=[...t,...r,{provide:o,useValue:!0}];e?e(a):function xk(e){if(to&&!to.get(pw,!1))throw new O(400,!1);(function gw(){!function sI(e){jv=e}(()=>{throw new O(600,!1)})})(),to=e;const n=e.get(bw);(function vw(e){e.get(I_,null)?.forEach(t=>t())})(e)}(function yw(e=[],n){return gt.create({name:n,providers:[{provide:Xf,useValue:"platform"},{provide:Cp,useValue:new Set([()=>to=null])},...e]})}(a,i))}return function kk(e){const n=Ep();if(!n)throw new O(401,!1);return n}()}}function Ep(){return to?.get(bw)??null}let bw=(()=>{class e{constructor(t){this._injector=t,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(t,i){const o=function Fk(e="zone.js",n){return"noop"===e?new wO:"zone.js"===e?new ae(n):e}(i?.ngZone,function ww(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:e?.eventCoalescing??!1,shouldCoalesceRunChangeDetection:e?.runCoalescing??!1}}({eventCoalescing:i?.ngZoneEventCoalescing,runCoalescing:i?.ngZoneRunCoalescing}));return o.run(()=>{const r=function Yx(e,n,t){return new Xh(e,n,t)}(t.moduleType,this.injector,function Tw(e){return[{provide:ae,useFactory:e},{provide:oa,multi:!0,useFactory:()=>{const n=k(Lk,{optional:!0});return()=>n.initialize()}},{provide:Ew,useFactory:jk},{provide:G_,useFactory:z_}]}(()=>o)),s=r.injector.get(Ni,null);return o.runOutsideAngular(()=>{const a=o.onError.subscribe({next:l=>{s.handleError(l)}});r.onDestroy(()=>{nu(this._modules,r),a.unsubscribe()})}),function Dw(e,n,t){try{const i=t();return _a(i)?i.catch(o=>{throw n.runOutsideAngular(()=>e.handleError(o)),o}):i}catch(i){throw n.runOutsideAngular(()=>e.handleError(i)),i}}(s,o,()=>{const a=r.injector.get(vp);return a.runInitializers(),a.donePromise.then(()=>(function W0(e){_n(e,"Expected localeId to be defined"),"string"==typeof e&&(z0=e.toLowerCase().replace(/_/g,"-"))}(r.injector.get(Gn,Jr)||Jr),this._moduleDoBootstrap(r),r))})})}bootstrapModule(t,i=[]){const o=Cw({},i);return function Ak(e,n,t){const i=new ep(t);return Promise.resolve(i)}(0,0,t).then(r=>this.bootstrapModuleFactory(r,o))}_moduleDoBootstrap(t){const i=t.injector.get(no);if(t._bootstrapComponents.length>0)t._bootstrapComponents.forEach(o=>i.bootstrap(o));else{if(!t.instance.ngDoBootstrap)throw new O(-403,!1);t.instance.ngDoBootstrap(i)}this._modules.push(t)}onDestroy(t){this._destroyListeners.push(t)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new O(404,!1);this._modules.slice().forEach(i=>i.destroy()),this._destroyListeners.forEach(i=>i());const t=this._injector.get(Cp,null);t&&(t.forEach(i=>i()),t.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}static{this.\u0275fac=function(i){return new(i||e)(L(gt))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"platform"})}}return e})();function Cw(e,n){return Array.isArray(n)?n.reduce(Cw,e):{...e,...n}}let no=(()=>{class e{constructor(){this._bootstrapListeners=[],this._runningTick=!1,this._destroyed=!1,this._destroyListeners=[],this._views=[],this.internalErrorHandler=k(Ew),this.zoneIsStable=k(G_),this.componentTypes=[],this.components=[],this.isStable=k(lw).hasPendingTasks.pipe(Pn(t=>t?W(!1):this.zoneIsStable),function tv(e,n=xn){return e=e??_M,Ue((t,i)=>{let o,r=!0;t.subscribe(ke(i,s=>{const a=n(s);(r||!e(o,a))&&(r=!1,o=a,i.next(s))}))})}(),ev()),this._injector=k(Zt)}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(t,i){const o=t instanceof x_;if(!this._injector.get(vp).done)throw!o&&function ar(e){const n=de(e)||bt(e)||xt(e);return null!==n&&n.standalone}(t),new O(405,!1);let s;s=o?t:this._injector.get(Oc).resolveComponentFactory(t),this.componentTypes.push(s.componentType);const a=function Rk(e){return e.isBoundToModule}(s)?void 0:this._injector.get(Ao),d=s.create(gt.NULL,[],i||s.selector,a),h=d.location.nativeElement,p=d.injector.get(hw,null);return p?.registerApplication(h),d.onDestroy(()=>{this.detachView(d.hostView),nu(this.components,d),p?.unregisterApplication(h)}),this._loadComponent(d),d}tick(){if(this._runningTick)throw new O(101,!1);try{this._runningTick=!0;for(let t of this._views)t.detectChanges()}catch(t){this.internalErrorHandler(t)}finally{this._runningTick=!1}}attachView(t){const i=t;this._views.push(i),i.attachToAppRef(this)}detachView(t){const i=t;nu(this._views,i),i.detachFromAppRef()}_loadComponent(t){this.attachView(t.hostView),this.tick(),this.components.push(t);const i=this._injector.get(Sp,[]);i.push(...this._bootstrapListeners),i.forEach(o=>o(t))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(t=>t()),this._views.slice().forEach(t=>t.destroy())}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(t){return this._destroyListeners.push(t),()=>nu(this._destroyListeners,t)}destroy(){if(this._destroyed)throw new O(406,!1);const t=this._injector;t.destroy&&!t.destroyed&&t.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function nu(e,n){const t=e.indexOf(n);t>-1&&e.splice(t,1)}const Ew=new U("",{providedIn:"root",factory:()=>k(Ni).handleError.bind(void 0)});function jk(){const e=k(ae),n=k(Ni);return t=>e.runOutsideAngular(()=>n.handleError(t))}let Lk=(()=>{class e{constructor(){this.zone=k(ae),this.applicationRef=k(no)}initialize(){this._onMicrotaskEmptySubscription||(this._onMicrotaskEmptySubscription=this.zone.onMicrotaskEmpty.subscribe({next:()=>{this.zone.run(()=>{this.applicationRef.tick()})}}))}ngOnDestroy(){this._onMicrotaskEmptySubscription?.unsubscribe()}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();let zn=(()=>{class e{static{this.__NG_ELEMENT_ID__=Bk}}return e})();function Bk(e){return function Hk(e,n,t){if(yo(e)&&!t){const i=rn(e.index,n);return new da(i,i)}return 47&e.type?new da(n[et],n):null}(St(),I(),16==(16&e))}class Aw{constructor(){}supports(n){return Vc(n)}create(n){return new Wk(n)}}const zk=(e,n)=>n;class Wk{constructor(n){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=n||zk}forEachItem(n){let t;for(t=this._itHead;null!==t;t=t._next)n(t)}forEachOperation(n){let t=this._itHead,i=this._removalsHead,o=0,r=null;for(;t||i;){const s=!i||t&&t.currentIndex{s=this._trackByFn(o,a),null!==t&&Object.is(t.trackById,s)?(i&&(t=this._verifyReinsertion(t,a,s,o)),Object.is(t.item,a)||this._addIdentityChange(t,a)):(t=this._mismatch(t,a,s,o),i=!0),t=t._next,o++}),this.length=o;return this._truncate(t),this.collection=n,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let n;for(n=this._previousItHead=this._itHead;null!==n;n=n._next)n._nextPrevious=n._next;for(n=this._additionsHead;null!==n;n=n._nextAdded)n.previousIndex=n.currentIndex;for(this._additionsHead=this._additionsTail=null,n=this._movesHead;null!==n;n=n._nextMoved)n.previousIndex=n.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(n,t,i,o){let r;return null===n?r=this._itTail:(r=n._prev,this._remove(n)),null!==(n=null===this._unlinkedRecords?null:this._unlinkedRecords.get(i,null))?(Object.is(n.item,t)||this._addIdentityChange(n,t),this._reinsertAfter(n,r,o)):null!==(n=null===this._linkedRecords?null:this._linkedRecords.get(i,o))?(Object.is(n.item,t)||this._addIdentityChange(n,t),this._moveAfter(n,r,o)):n=this._addAfter(new qk(t,i),r,o),n}_verifyReinsertion(n,t,i,o){let r=null===this._unlinkedRecords?null:this._unlinkedRecords.get(i,null);return null!==r?n=this._reinsertAfter(r,n._prev,o):n.currentIndex!=o&&(n.currentIndex=o,this._addToMoves(n,o)),n}_truncate(n){for(;null!==n;){const t=n._next;this._addToRemovals(this._unlink(n)),n=t}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(n,t,i){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(n);const o=n._prevRemoved,r=n._nextRemoved;return null===o?this._removalsHead=r:o._nextRemoved=r,null===r?this._removalsTail=o:r._prevRemoved=o,this._insertAfter(n,t,i),this._addToMoves(n,i),n}_moveAfter(n,t,i){return this._unlink(n),this._insertAfter(n,t,i),this._addToMoves(n,i),n}_addAfter(n,t,i){return this._insertAfter(n,t,i),this._additionsTail=null===this._additionsTail?this._additionsHead=n:this._additionsTail._nextAdded=n,n}_insertAfter(n,t,i){const o=null===t?this._itHead:t._next;return n._next=o,n._prev=t,null===o?this._itTail=n:o._prev=n,null===t?this._itHead=n:t._next=n,null===this._linkedRecords&&(this._linkedRecords=new Rw),this._linkedRecords.put(n),n.currentIndex=i,n}_remove(n){return this._addToRemovals(this._unlink(n))}_unlink(n){null!==this._linkedRecords&&this._linkedRecords.remove(n);const t=n._prev,i=n._next;return null===t?this._itHead=i:t._next=i,null===i?this._itTail=t:i._prev=t,n}_addToMoves(n,t){return n.previousIndex===t||(this._movesTail=null===this._movesTail?this._movesHead=n:this._movesTail._nextMoved=n),n}_addToRemovals(n){return null===this._unlinkedRecords&&(this._unlinkedRecords=new Rw),this._unlinkedRecords.put(n),n.currentIndex=null,n._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=n,n._prevRemoved=null):(n._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=n),n}_addIdentityChange(n,t){return n.item=t,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=n:this._identityChangesTail._nextIdentityChange=n,n}}class qk{constructor(n,t){this.item=n,this.trackById=t,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class Yk{constructor(){this._head=null,this._tail=null}add(n){null===this._head?(this._head=this._tail=n,n._nextDup=null,n._prevDup=null):(this._tail._nextDup=n,n._prevDup=this._tail,n._nextDup=null,this._tail=n)}get(n,t){let i;for(i=this._head;null!==i;i=i._nextDup)if((null===t||t<=i.currentIndex)&&Object.is(i.trackById,n))return i;return null}remove(n){const t=n._prevDup,i=n._nextDup;return null===t?this._head=i:t._nextDup=i,null===i?this._tail=t:i._prevDup=t,null===this._head}}class Rw{constructor(){this.map=new Map}put(n){const t=n.trackById;let i=this.map.get(t);i||(i=new Yk,this.map.set(t,i)),i.add(n)}get(n,t){const o=this.map.get(n);return o?o.get(n,t):null}remove(n){const t=n.trackById;return this.map.get(t).remove(n)&&this.map.delete(t),n}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function xw(e,n,t){const i=e.previousIndex;if(null===i)return i;let o=0;return t&&i{if(t&&t.key===o)this._maybeAddToChanges(t,i),this._appendAfter=t,t=t._next;else{const r=this._getOrCreateRecordForKey(o,i);t=this._insertBeforeOrAppend(t,r)}}),t){t._prev&&(t._prev._next=null),this._removalsHead=t;for(let i=t;null!==i;i=i._nextRemoved)i===this._mapHead&&(this._mapHead=null),this._records.delete(i.key),i._nextRemoved=i._next,i.previousValue=i.currentValue,i.currentValue=null,i._prev=null,i._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(n,t){if(n){const i=n._prev;return t._next=n,t._prev=i,n._prev=t,i&&(i._next=t),n===this._mapHead&&(this._mapHead=t),this._appendAfter=n,n}return this._appendAfter?(this._appendAfter._next=t,t._prev=this._appendAfter):this._mapHead=t,this._appendAfter=t,null}_getOrCreateRecordForKey(n,t){if(this._records.has(n)){const o=this._records.get(n);this._maybeAddToChanges(o,t);const r=o._prev,s=o._next;return r&&(r._next=s),s&&(s._prev=r),o._next=null,o._prev=null,o}const i=new Qk(n);return this._records.set(n,i),i.currentValue=t,this._addToAdditions(i),i}_reset(){if(this.isDirty){let n;for(this._previousMapHead=this._mapHead,n=this._previousMapHead;null!==n;n=n._next)n._nextPrevious=n._next;for(n=this._changesHead;null!==n;n=n._nextChanged)n.previousValue=n.currentValue;for(n=this._additionsHead;null!=n;n=n._nextAdded)n.previousValue=n.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(n,t){Object.is(t,n.currentValue)||(n.previousValue=n.currentValue,n.currentValue=t,this._addToChanges(n))}_addToAdditions(n){null===this._additionsHead?this._additionsHead=this._additionsTail=n:(this._additionsTail._nextAdded=n,this._additionsTail=n)}_addToChanges(n){null===this._changesHead?this._changesHead=this._changesTail=n:(this._changesTail._nextChanged=n,this._changesTail=n)}_forEach(n,t){n instanceof Map?n.forEach(t):Object.keys(n).forEach(i=>t(n[i],i))}}class Qk{constructor(n){this.key=n,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function kw(){return new ru([new Aw])}let ru=(()=>{class e{static{this.\u0275prov=F({token:e,providedIn:"root",factory:kw})}constructor(t){this.factories=t}static create(t,i){if(null!=i){const o=i.factories.slice();t=t.concat(o)}return new e(t)}static extend(t){return{provide:e,useFactory:i=>e.create(t,i||kw()),deps:[[e,new oc,new ic]]}}find(t){const i=this.factories.find(o=>o.supports(t));if(null!=i)return i;throw new O(901,!1)}}return e})();function Fw(){return new Aa([new Pw])}let Aa=(()=>{class e{static{this.\u0275prov=F({token:e,providedIn:"root",factory:Fw})}constructor(t){this.factories=t}static create(t,i){if(i){const o=i.factories.slice();t=t.concat(o)}return new e(t)}static extend(t){return{provide:e,useFactory:i=>e.create(t,i||Fw()),deps:[[e,new oc,new ic]]}}find(t){const i=this.factories.find(o=>o.supports(t));if(i)return i;throw new O(901,!1)}}return e})();const Xk=_w(null,"core",[]);let eF=(()=>{class e{constructor(t){}static{this.\u0275fac=function(i){return new(i||e)(L(no))}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();function Ap(e,n){const t=de(e),i=n.elementInjector||Cc();return new fa(t).create(i,n.projectableNodes,n.hostElement,n.environmentInjector)}let Rp=null;function io(){return Rp}class pF{}const nt=new U("DocumentToken");let xp=(()=>{class e{historyGo(t){throw new Error("Not implemented")}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return k(mF)},providedIn:"platform"})}}return e})();const gF=new U("Location Initialized");let mF=(()=>{class e extends xp{constructor(){super(),this._doc=k(nt),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return io().getBaseHref(this._doc)}onPopState(t){const i=io().getGlobalEventTarget(this._doc,"window");return i.addEventListener("popstate",t,!1),()=>i.removeEventListener("popstate",t)}onHashChange(t){const i=io().getGlobalEventTarget(this._doc,"window");return i.addEventListener("hashchange",t,!1),()=>i.removeEventListener("hashchange",t)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(t){this._location.pathname=t}pushState(t,i,o){this._history.pushState(t,i,o)}replaceState(t,i,o){this._history.replaceState(t,i,o)}forward(){this._history.forward()}back(){this._history.back()}historyGo(t=0){this._history.go(t)}getState(){return this._history.state}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return new e},providedIn:"platform"})}}return e})();function Pp(e,n){if(0==e.length)return n;if(0==n.length)return e;let t=0;return e.endsWith("/")&&t++,n.startsWith("/")&&t++,2==t?e+n.substring(1):1==t?e+n:e+"/"+n}function zw(e){const n=e.match(/#|\?|$/),t=n&&n.index||e.length;return e.slice(0,t-("/"===e[t-1]?1:0))+e.slice(t)}function xi(e){return e&&"?"!==e[0]?"?"+e:e}let xo=(()=>{class e{historyGo(t){throw new Error("Not implemented")}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return k(qw)},providedIn:"root"})}}return e})();const Ww=new U("appBaseHref");let qw=(()=>{class e extends xo{constructor(t,i){super(),this._platformLocation=t,this._removeListenerFns=[],this._baseHref=i??this._platformLocation.getBaseHrefFromDOM()??k(nt).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(t){this._removeListenerFns.push(this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t))}getBaseHref(){return this._baseHref}prepareExternalUrl(t){return Pp(this._baseHref,t)}path(t=!1){const i=this._platformLocation.pathname+xi(this._platformLocation.search),o=this._platformLocation.hash;return o&&t?`${i}${o}`:i}pushState(t,i,o,r){const s=this.prepareExternalUrl(o+xi(r));this._platformLocation.pushState(t,i,s)}replaceState(t,i,o,r){const s=this.prepareExternalUrl(o+xi(r));this._platformLocation.replaceState(t,i,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(t=0){this._platformLocation.historyGo?.(t)}static{this.\u0275fac=function(i){return new(i||e)(L(xp),L(Ww,8))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),vF=(()=>{class e extends xo{constructor(t,i){super(),this._platformLocation=t,this._baseHref="",this._removeListenerFns=[],null!=i&&(this._baseHref=i)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(t){this._removeListenerFns.push(this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t))}getBaseHref(){return this._baseHref}path(t=!1){let i=this._platformLocation.hash;return null==i&&(i="#"),i.length>0?i.substring(1):i}prepareExternalUrl(t){const i=Pp(this._baseHref,t);return i.length>0?"#"+i:i}pushState(t,i,o,r){let s=this.prepareExternalUrl(o+xi(r));0==s.length&&(s=this._platformLocation.pathname),this._platformLocation.pushState(t,i,s)}replaceState(t,i,o,r){let s=this.prepareExternalUrl(o+xi(r));0==s.length&&(s=this._platformLocation.pathname),this._platformLocation.replaceState(t,i,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(t=0){this._platformLocation.historyGo?.(t)}static{this.\u0275fac=function(i){return new(i||e)(L(xp),L(Ww,8))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})(),kp=(()=>{class e{constructor(t){this._subject=new z,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=t;const i=this._locationStrategy.getBaseHref();this._basePath=function bF(e){if(new RegExp("^(https?:)?//").test(e)){const[,t]=e.split(/\/\/[^\/]+/);return t}return e}(zw(Yw(i))),this._locationStrategy.onPopState(o=>{this._subject.emit({url:this.path(!0),pop:!0,state:o.state,type:o.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(t=!1){return this.normalize(this._locationStrategy.path(t))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(t,i=""){return this.path()==this.normalize(t+xi(i))}normalize(t){return e.stripTrailingSlash(function yF(e,n){if(!e||!n.startsWith(e))return n;const t=n.substring(e.length);return""===t||["/",";","?","#"].includes(t[0])?t:n}(this._basePath,Yw(t)))}prepareExternalUrl(t){return t&&"/"!==t[0]&&(t="/"+t),this._locationStrategy.prepareExternalUrl(t)}go(t,i="",o=null){this._locationStrategy.pushState(o,"",t,i),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+xi(i)),o)}replaceState(t,i="",o=null){this._locationStrategy.replaceState(o,"",t,i),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+xi(i)),o)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(t=0){this._locationStrategy.historyGo?.(t)}onUrlChange(t){return this._urlChangeListeners.push(t),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(i=>{this._notifyUrlChangeListeners(i.url,i.state)})),()=>{const i=this._urlChangeListeners.indexOf(t);this._urlChangeListeners.splice(i,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(t="",i){this._urlChangeListeners.forEach(o=>o(t,i))}subscribe(t,i,o){return this._subject.subscribe({next:t,error:i,complete:o})}static{this.normalizeQueryParams=xi}static{this.joinWithSlash=Pp}static{this.stripTrailingSlash=zw}static{this.\u0275fac=function(i){return new(i||e)(L(xo))}}static{this.\u0275prov=F({token:e,factory:function(){return function _F(){return new kp(L(xo))}()},providedIn:"root"})}}return e})();function Yw(e){return e.replace(/\/index.html$/,"")}const Wp=/\s+/,rD=[];let vu=(()=>{class e{constructor(t,i,o,r){this._iterableDiffers=t,this._keyValueDiffers=i,this._ngEl=o,this._renderer=r,this.initialClasses=rD,this.stateMap=new Map}set klass(t){this.initialClasses=null!=t?t.trim().split(Wp):rD}set ngClass(t){this.rawClass="string"==typeof t?t.trim().split(Wp):t}ngDoCheck(){for(const i of this.initialClasses)this._updateState(i,!0);const t=this.rawClass;if(Array.isArray(t)||t instanceof Set)for(const i of t)this._updateState(i,!0);else if(null!=t)for(const i of Object.keys(t))this._updateState(i,!!t[i]);this._applyStateDiff()}_updateState(t,i){const o=this.stateMap.get(t);void 0!==o?(o.enabled!==i&&(o.changed=!0,o.enabled=i),o.touched=!0):this.stateMap.set(t,{enabled:i,changed:!0,touched:!0})}_applyStateDiff(){for(const t of this.stateMap){const i=t[0],o=t[1];o.changed?(this._toggleClass(i,o.enabled),o.changed=!1):o.touched||(o.enabled&&this._toggleClass(i,!1),this.stateMap.delete(i)),o.touched=!1}}_toggleClass(t,i){(t=t.trim()).length>0&&t.split(Wp).forEach(o=>{i?this._renderer.addClass(this._ngEl.nativeElement,o):this._renderer.removeClass(this._ngEl.nativeElement,o)})}static{this.\u0275fac=function(i){return new(i||e)(y(ru),y(Aa),y(we),y(ln))}}static{this.\u0275dir=x({type:e,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0})}}return e})();class i3{constructor(n,t,i,o){this.$implicit=n,this.ngForOf=t,this.index=i,this.count=o}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Nn=(()=>{class e{set ngForOf(t){this._ngForOf=t,this._ngForOfDirty=!0}set ngForTrackBy(t){this._trackByFn=t}get ngForTrackBy(){return this._trackByFn}constructor(t,i,o){this._viewContainer=t,this._template=i,this._differs=o,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForTemplate(t){t&&(this._template=t)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const t=this._ngForOf;!this._differ&&t&&(this._differ=this._differs.find(t).create(this.ngForTrackBy))}if(this._differ){const t=this._differ.diff(this._ngForOf);t&&this._applyChanges(t)}}_applyChanges(t){const i=this._viewContainer;t.forEachOperation((o,r,s)=>{if(null==o.previousIndex)i.createEmbeddedView(this._template,new i3(o.item,this._ngForOf,-1,-1),null===s?void 0:s);else if(null==s)i.remove(null===r?void 0:r);else if(null!==r){const a=i.get(r);i.move(a,s),aD(a,o)}});for(let o=0,r=i.length;o{aD(i.get(o.currentIndex),o)})}static ngTemplateContextGuard(t,i){return!0}static{this.\u0275fac=function(i){return new(i||e)(y(Tn),y(ze),y(ru))}}static{this.\u0275dir=x({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0})}}return e})();function aD(e,n){e.context.$implicit=n.item}let Fi=(()=>{class e{constructor(t,i){this._viewContainer=t,this._context=new o3,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=i}set ngIf(t){this._context.$implicit=this._context.ngIf=t,this._updateView()}set ngIfThen(t){lD("ngIfThen",t),this._thenTemplateRef=t,this._thenViewRef=null,this._updateView()}set ngIfElse(t){lD("ngIfElse",t),this._elseTemplateRef=t,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(t,i){return!0}static{this.\u0275fac=function(i){return new(i||e)(y(Tn),y(ze))}}static{this.\u0275dir=x({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0})}}return e})();class o3{constructor(){this.$implicit=null,this.ngIf=null}}function lD(e,n){if(n&&!n.createEmbeddedView)throw new Error(`${e} must be a TemplateRef, but received '${ct(n)}'.`)}let _u=(()=>{class e{constructor(t,i,o){this._ngEl=t,this._differs=i,this._renderer=o,this._ngStyle=null,this._differ=null}set ngStyle(t){this._ngStyle=t,!this._differ&&t&&(this._differ=this._differs.find(t).create())}ngDoCheck(){if(this._differ){const t=this._differ.diff(this._ngStyle);t&&this._applyChanges(t)}}_setStyle(t,i){const[o,r]=t.split("."),s=-1===o.indexOf("-")?void 0:Ki.DashCase;null!=i?this._renderer.setStyle(this._ngEl.nativeElement,o,r?`${i}${r}`:i,s):this._renderer.removeStyle(this._ngEl.nativeElement,o,s)}_applyChanges(t){t.forEachRemovedItem(i=>this._setStyle(i.key,null)),t.forEachAddedItem(i=>this._setStyle(i.key,i.currentValue)),t.forEachChangedItem(i=>this._setStyle(i.key,i.currentValue))}static{this.\u0275fac=function(i){return new(i||e)(y(we),y(Aa),y(ln))}}static{this.\u0275dir=x({type:e,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0})}}return e})(),O3=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();function fD(e){return"server"===e}let P3=(()=>{class e{static{this.\u0275prov=F({token:e,providedIn:"root",factory:()=>new k3(L(nt),window)})}}return e})();class k3{constructor(n,t){this.document=n,this.window=t,this.offset=()=>[0,0]}setOffset(n){this.offset=Array.isArray(n)?()=>n:n}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(n){this.supportsScrolling()&&this.window.scrollTo(n[0],n[1])}scrollToAnchor(n){if(!this.supportsScrolling())return;const t=function F3(e,n){const t=e.getElementById(n)||e.getElementsByName(n)[0];if(t)return t;if("function"==typeof e.createTreeWalker&&e.body&&"function"==typeof e.body.attachShadow){const i=e.createTreeWalker(e.body,NodeFilter.SHOW_ELEMENT);let o=i.currentNode;for(;o;){const r=o.shadowRoot;if(r){const s=r.getElementById(n)||r.querySelector(`[name="${n}"]`);if(s)return s}o=i.nextNode()}}return null}(this.document,n);t&&(this.scrollToElement(t),t.focus())}setHistoryScrollRestoration(n){this.supportsScrolling()&&(this.window.history.scrollRestoration=n)}scrollToElement(n){const t=n.getBoundingClientRect(),i=t.left+this.window.pageXOffset,o=t.top+this.window.pageYOffset,r=this.offset();this.window.scrollTo(i-r[0],o-r[1])}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}class sj extends pF{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class Xp extends sj{static makeCurrent(){!function hF(e){Rp||(Rp=e)}(new Xp)}onAndCancel(n,t,i){return n.addEventListener(t,i),()=>{n.removeEventListener(t,i)}}dispatchEvent(n,t){n.dispatchEvent(t)}remove(n){n.parentNode&&n.parentNode.removeChild(n)}createElement(n,t){return(t=t||this.getDefaultDocument()).createElement(n)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(n){return n.nodeType===Node.ELEMENT_NODE}isShadowRoot(n){return n instanceof DocumentFragment}getGlobalEventTarget(n,t){return"window"===t?window:"document"===t?n:"body"===t?n.body:null}getBaseHref(n){const t=function aj(){return ka=ka||document.querySelector("base"),ka?ka.getAttribute("href"):null}();return null==t?null:function lj(e){wu=wu||document.createElement("a"),wu.setAttribute("href",e);const n=wu.pathname;return"/"===n.charAt(0)?n:`/${n}`}(t)}resetBaseElement(){ka=null}getUserAgent(){return window.navigator.userAgent}getCookie(n){return function t3(e,n){n=encodeURIComponent(n);for(const t of e.split(";")){const i=t.indexOf("="),[o,r]=-1==i?[t,""]:[t.slice(0,i),t.slice(i+1)];if(o.trim()===n)return decodeURIComponent(r)}return null}(document.cookie,n)}}let wu,ka=null,uj=(()=>{class e{build(){return new XMLHttpRequest}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();const eg=new U("EventManagerPlugins");let vD=(()=>{class e{constructor(t,i){this._zone=i,this._eventNameToPlugin=new Map,t.forEach(o=>{o.manager=this}),this._plugins=t.slice().reverse()}addEventListener(t,i,o){return this._findPluginFor(i).addEventListener(t,i,o)}getZone(){return this._zone}_findPluginFor(t){let i=this._eventNameToPlugin.get(t);if(i)return i;if(i=this._plugins.find(r=>r.supports(t)),!i)throw new O(5101,!1);return this._eventNameToPlugin.set(t,i),i}static{this.\u0275fac=function(i){return new(i||e)(L(eg),L(ae))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();class _D{constructor(n){this._doc=n}}const tg="ng-app-id";let yD=(()=>{class e{constructor(t,i,o,r={}){this.doc=t,this.appId=i,this.nonce=o,this.platformId=r,this.styleRef=new Map,this.hostNodes=new Set,this.styleNodesInDOM=this.collectServerRenderedStyles(),this.platformIsServer=fD(r),this.resetHostNodes()}addStyles(t){for(const i of t)1===this.changeUsageCount(i,1)&&this.onStyleAdded(i)}removeStyles(t){for(const i of t)this.changeUsageCount(i,-1)<=0&&this.onStyleRemoved(i)}ngOnDestroy(){const t=this.styleNodesInDOM;t&&(t.forEach(i=>i.remove()),t.clear());for(const i of this.getAllStyles())this.onStyleRemoved(i);this.resetHostNodes()}addHost(t){this.hostNodes.add(t);for(const i of this.getAllStyles())this.addStyleToHost(t,i)}removeHost(t){this.hostNodes.delete(t)}getAllStyles(){return this.styleRef.keys()}onStyleAdded(t){for(const i of this.hostNodes)this.addStyleToHost(i,t)}onStyleRemoved(t){const i=this.styleRef;i.get(t)?.elements?.forEach(o=>o.remove()),i.delete(t)}collectServerRenderedStyles(){const t=this.doc.head?.querySelectorAll(`style[${tg}="${this.appId}"]`);if(t?.length){const i=new Map;return t.forEach(o=>{null!=o.textContent&&i.set(o.textContent,o)}),i}return null}changeUsageCount(t,i){const o=this.styleRef;if(o.has(t)){const r=o.get(t);return r.usage+=i,r.usage}return o.set(t,{usage:i,elements:[]}),i}getStyleElement(t,i){const o=this.styleNodesInDOM,r=o?.get(i);if(r?.parentNode===t)return o.delete(i),r.removeAttribute(tg),r;{const s=this.doc.createElement("style");return this.nonce&&s.setAttribute("nonce",this.nonce),s.textContent=i,this.platformIsServer&&s.setAttribute(tg,this.appId),s}}addStyleToHost(t,i){const o=this.getStyleElement(t,i);t.appendChild(o);const r=this.styleRef,s=r.get(i)?.elements;s?s.push(o):r.set(i,{elements:[o],usage:1})}resetHostNodes(){const t=this.hostNodes;t.clear(),t.add(this.doc.head)}static{this.\u0275fac=function(i){return new(i||e)(L(nt),L(Sc),L(N_,8),L(Rr))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();const ng={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},ig=/%COMP%/g,pj=new U("RemoveStylesOnCompDestroy",{providedIn:"root",factory:()=>!1});function wD(e,n){return n.map(t=>t.replace(ig,e))}let DD=(()=>{class e{constructor(t,i,o,r,s,a,l,d=null){this.eventManager=t,this.sharedStylesHost=i,this.appId=o,this.removeStylesOnCompDestroy=r,this.doc=s,this.platformId=a,this.ngZone=l,this.nonce=d,this.rendererByCompId=new Map,this.platformIsServer=fD(a),this.defaultRenderer=new og(t,s,l,this.platformIsServer)}createRenderer(t,i){if(!t||!i)return this.defaultRenderer;this.platformIsServer&&i.encapsulation===kn.ShadowDom&&(i={...i,encapsulation:kn.Emulated});const o=this.getOrCreateRenderer(t,i);return o instanceof SD?o.applyToHost(t):o instanceof rg&&o.applyStyles(),o}getOrCreateRenderer(t,i){const o=this.rendererByCompId;let r=o.get(i.id);if(!r){const s=this.doc,a=this.ngZone,l=this.eventManager,d=this.sharedStylesHost,h=this.removeStylesOnCompDestroy,p=this.platformIsServer;switch(i.encapsulation){case kn.Emulated:r=new SD(l,d,i,this.appId,h,s,a,p);break;case kn.ShadowDom:return new _j(l,d,t,i,s,a,this.nonce,p);default:r=new rg(l,d,i,h,s,a,p)}o.set(i.id,r)}return r}ngOnDestroy(){this.rendererByCompId.clear()}static{this.\u0275fac=function(i){return new(i||e)(L(vD),L(yD),L(Sc),L(pj),L(nt),L(Rr),L(ae),L(N_))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();class og{constructor(n,t,i,o){this.eventManager=n,this.doc=t,this.ngZone=i,this.platformIsServer=o,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(n,t){return t?this.doc.createElementNS(ng[t]||t,n):this.doc.createElement(n)}createComment(n){return this.doc.createComment(n)}createText(n){return this.doc.createTextNode(n)}appendChild(n,t){(CD(n)?n.content:n).appendChild(t)}insertBefore(n,t,i){n&&(CD(n)?n.content:n).insertBefore(t,i)}removeChild(n,t){n&&n.removeChild(t)}selectRootElement(n,t){let i="string"==typeof n?this.doc.querySelector(n):n;if(!i)throw new O(-5104,!1);return t||(i.textContent=""),i}parentNode(n){return n.parentNode}nextSibling(n){return n.nextSibling}setAttribute(n,t,i,o){if(o){t=o+":"+t;const r=ng[o];r?n.setAttributeNS(r,t,i):n.setAttribute(t,i)}else n.setAttribute(t,i)}removeAttribute(n,t,i){if(i){const o=ng[i];o?n.removeAttributeNS(o,t):n.removeAttribute(`${i}:${t}`)}else n.removeAttribute(t)}addClass(n,t){n.classList.add(t)}removeClass(n,t){n.classList.remove(t)}setStyle(n,t,i,o){o&(Ki.DashCase|Ki.Important)?n.style.setProperty(t,i,o&Ki.Important?"important":""):n.style[t]=i}removeStyle(n,t,i){i&Ki.DashCase?n.style.removeProperty(t):n.style[t]=""}setProperty(n,t,i){n[t]=i}setValue(n,t){n.nodeValue=t}listen(n,t,i){if("string"==typeof n&&!(n=io().getGlobalEventTarget(this.doc,n)))throw new Error(`Unsupported event target ${n} for event ${t}`);return this.eventManager.addEventListener(n,t,this.decoratePreventDefault(i))}decoratePreventDefault(n){return t=>{if("__ngUnwrap__"===t)return n;!1===(this.platformIsServer?this.ngZone.runGuarded(()=>n(t)):n(t))&&t.preventDefault()}}}function CD(e){return"TEMPLATE"===e.tagName&&void 0!==e.content}class _j extends og{constructor(n,t,i,o,r,s,a,l){super(n,r,s,l),this.sharedStylesHost=t,this.hostEl=i,this.shadowRoot=i.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const d=wD(o.id,o.styles);for(const h of d){const p=document.createElement("style");a&&p.setAttribute("nonce",a),p.textContent=h,this.shadowRoot.appendChild(p)}}nodeOrShadowRoot(n){return n===this.hostEl?this.shadowRoot:n}appendChild(n,t){return super.appendChild(this.nodeOrShadowRoot(n),t)}insertBefore(n,t,i){return super.insertBefore(this.nodeOrShadowRoot(n),t,i)}removeChild(n,t){return super.removeChild(this.nodeOrShadowRoot(n),t)}parentNode(n){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(n)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}}class rg extends og{constructor(n,t,i,o,r,s,a,l){super(n,r,s,a),this.sharedStylesHost=t,this.removeStylesOnCompDestroy=o,this.styles=l?wD(l,i.styles):i.styles}applyStyles(){this.sharedStylesHost.addStyles(this.styles)}destroy(){this.removeStylesOnCompDestroy&&this.sharedStylesHost.removeStyles(this.styles)}}class SD extends rg{constructor(n,t,i,o,r,s,a,l){const d=o+"-"+i.id;super(n,t,i,r,s,a,l,d),this.contentAttr=function gj(e){return"_ngcontent-%COMP%".replace(ig,e)}(d),this.hostAttr=function mj(e){return"_nghost-%COMP%".replace(ig,e)}(d)}applyToHost(n){this.applyStyles(),this.setAttribute(n,this.hostAttr,"")}createElement(n,t){const i=super.createElement(n,t);return super.setAttribute(i,this.contentAttr,""),i}}let yj=(()=>{class e extends _D{constructor(t){super(t)}supports(t){return!0}addEventListener(t,i,o){return t.addEventListener(i,o,!1),()=>this.removeEventListener(t,i,o)}removeEventListener(t,i,o){return t.removeEventListener(i,o)}static{this.\u0275fac=function(i){return new(i||e)(L(nt))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();const ED=["alt","control","meta","shift"],bj={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},wj={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey};let Dj=(()=>{class e extends _D{constructor(t){super(t)}supports(t){return null!=e.parseEventName(t)}addEventListener(t,i,o){const r=e.parseEventName(i),s=e.eventCallback(r.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>io().onAndCancel(t,r.domEventName,s))}static parseEventName(t){const i=t.toLowerCase().split("."),o=i.shift();if(0===i.length||"keydown"!==o&&"keyup"!==o)return null;const r=e._normalizeKey(i.pop());let s="",a=i.indexOf("code");if(a>-1&&(i.splice(a,1),s="code."),ED.forEach(d=>{const h=i.indexOf(d);h>-1&&(i.splice(h,1),s+=d+".")}),s+=r,0!=i.length||0===r.length)return null;const l={};return l.domEventName=o,l.fullKey=s,l}static matchEventFullKeyCode(t,i){let o=bj[t.key]||t.key,r="";return i.indexOf("code.")>-1&&(o=t.code,r="code."),!(null==o||!o)&&(o=o.toLowerCase()," "===o?o="space":"."===o&&(o="dot"),ED.forEach(s=>{s!==o&&(0,wj[s])(t)&&(r+=s+".")}),r+=o,r===i)}static eventCallback(t,i,o){return r=>{e.matchEventFullKeyCode(r,t)&&o.runGuarded(()=>i(r))}}static _normalizeKey(t){return"esc"===t?"escape":t}static{this.\u0275fac=function(i){return new(i||e)(L(nt))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();const Tj=_w(Xk,"browser",[{provide:Rr,useValue:"browser"},{provide:I_,useValue:function Cj(){Xp.makeCurrent()},multi:!0},{provide:nt,useFactory:function Ej(){return function cN(e){Gf=e}(document),document},deps:[]}]),Mj=new U(""),ID=[{provide:tu,useClass:class cj{addToWindow(n){Fe.getAngularTestability=(i,o=!0)=>{const r=n.findTestabilityInTree(i,o);if(null==r)throw new O(5103,!1);return r},Fe.getAllAngularTestabilities=()=>n.getAllTestabilities(),Fe.getAllAngularRootElements=()=>n.getAllRootElements(),Fe.frameworkStabilizers||(Fe.frameworkStabilizers=[]),Fe.frameworkStabilizers.push(i=>{const o=Fe.getAllAngularTestabilities();let r=o.length,s=!1;const a=function(l){s=s||l,r--,0==r&&i(s)};o.forEach(l=>{l.whenStable(a)})})}findTestabilityInTree(n,t,i){return null==t?null:n.getTestability(t)??(i?io().isShadowRoot(t)?this.findTestabilityInTree(n,t.host,!0):this.findTestabilityInTree(n,t.parentElement,!0):null)}},deps:[]},{provide:hw,useClass:bp,deps:[ae,wp,tu]},{provide:bp,useClass:bp,deps:[ae,wp,tu]}],ND=[{provide:Xf,useValue:"root"},{provide:Ni,useFactory:function Sj(){return new Ni},deps:[]},{provide:eg,useClass:yj,multi:!0,deps:[nt,ae,Rr]},{provide:eg,useClass:Dj,multi:!0,deps:[nt]},DD,yD,vD,{provide:hh,useExisting:DD},{provide:class j3{},useClass:uj,deps:[]},[]];let Ij=(()=>{class e{constructor(t){}static withServerTransition(t){return{ngModule:e,providers:[{provide:Sc,useValue:t.appId}]}}static{this.\u0275fac=function(i){return new(i||e)(L(Mj,12))}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({providers:[...ND,...ID],imports:[O3,eF]})}}return e})(),OD=(()=>{class e{constructor(t){this._doc=t}getTitle(){return this._doc.title}setTitle(t){this._doc.title=t||""}static{this.\u0275fac=function(i){return new(i||e)(L(nt))}}static{this.\u0275prov=F({token:e,factory:function(i){let o=null;return o=i?new i:function Oj(){return new OD(L(nt))}(),o},providedIn:"root"})}}return e})();typeof window<"u"&&window;let ag=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(i){let o=null;return o=i?new(i||e):L(xD),o},providedIn:"root"})}}return e})(),xD=(()=>{class e extends ag{constructor(t){super(),this._doc=t}sanitize(t,i){if(null==i)return null;switch(t){case wn.NONE:return i;case wn.HTML:return ai(i,"HTML")?an(i):__(this._doc,String(i)).toString();case wn.STYLE:return ai(i,"Style")?an(i):i;case wn.SCRIPT:if(ai(i,"Script"))return an(i);throw new O(5200,!1);case wn.URL:return ai(i,"URL")?an(i):yc(String(i));case wn.RESOURCE_URL:if(ai(i,"ResourceURL"))return an(i);throw new O(5201,!1);default:throw new O(5202,!1)}}bypassSecurityTrustHtml(t){return function mN(e){return new uN(e)}(t)}bypassSecurityTrustStyle(t){return function vN(e){return new dN(e)}(t)}bypassSecurityTrustScript(t){return function _N(e){return new fN(e)}(t)}bypassSecurityTrustUrl(t){return function yN(e){return new hN(e)}(t)}bypassSecurityTrustResourceUrl(t){return function bN(e){return new pN(e)}(t)}static{this.\u0275fac=function(i){return new(i||e)(L(nt))}}static{this.\u0275prov=F({token:e,factory:function(i){let o=null;return o=i?new i:function Pj(e){return new xD(e.get(nt))}(L(gt)),o},providedIn:"root"})}}return e})();const{isArray:Fj}=Array,{getPrototypeOf:jj,prototype:Lj,keys:Vj}=Object;const{isArray:Hj}=Array;function lg(e){return ue(n=>function $j(e,n){return Hj(n)?e(...n):e(n)}(e,n))}function cg(...e){const n=As(e),t=Al(e),{args:i,keys:o}=function kD(e){if(1===e.length){const n=e[0];if(Fj(n))return{args:n,keys:null};if(function Bj(e){return e&&"object"==typeof e&&jj(e)===Lj}(n)){const t=Vj(n);return{args:t.map(i=>n[i]),keys:t}}}return{args:e,keys:null}}(e);if(0===i.length)return pt([],n);const r=new Te(function Uj(e,n,t=xn){return i=>{jD(n,()=>{const{length:o}=e,r=new Array(o);let s=o,a=o;for(let l=0;l{const d=pt(e[l],n);let h=!1;d.subscribe(ke(i,p=>{r[l]=p,h||(h=!0,a--),a||i.next(t(r.slice()))},()=>{--s||i.complete()}))},i)},i)}}(i,n,o?s=>function FD(e,n){return e.reduce((t,i,o)=>(t[i]=n[o],t),{})}(o,s):xn));return t?r.pipe(lg(t)):r}function jD(e,n,t){e?Di(t,e,n):n()}const Du=$i(e=>function(){e(this),this.name="EmptyError",this.message="no elements in sequence"});function Fa(...e){return function Gj(){return rr(1)}()(pt(e,As(e)))}function LD(e){return new Te(n=>{at(e()).subscribe(n)})}function ja(e,n){const t=ne(e)?e:()=>e,i=o=>o.error(t());return new Te(n?o=>n.schedule(i,0,o):i)}function ug(){return Ue((e,n)=>{let t=null;e._refCount++;const i=ke(n,void 0,void 0,void 0,()=>{if(!e||e._refCount<=0||0<--e._refCount)return void(t=null);const o=e._connection,r=t;t=null,o&&(!r||o===r)&&o.unsubscribe(),n.unsubscribe()});e.subscribe(i),i.closed||(t=e.connect())})}class VD extends Te{constructor(n,t){super(),this.source=n,this.subjectFactory=t,this._subject=null,this._refCount=0,this._connection=null,Is(n)&&(this.lift=n.lift)}_subscribe(n){return this.getSubject().subscribe(n)}getSubject(){const n=this._subject;return(!n||n.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:n}=this;this._subject=this._connection=null,n?.unsubscribe()}connect(){let n=this._connection;if(!n){n=this._connection=new Je;const t=this.getSubject();n.add(this.source.subscribe(ke(t,void 0,()=>{this._teardown(),t.complete()},i=>{this._teardown(),t.error(i)},()=>this._teardown()))),n.closed&&(this._connection=null,n=Je.EMPTY)}return n}refCount(){return ug()(this)}}function Et(e){return e<=0?()=>mn:Ue((n,t)=>{let i=0;n.subscribe(ke(t,o=>{++i<=e&&(t.next(o),e<=i&&t.complete())}))})}function vt(e,n){return Ue((t,i)=>{let o=0;t.subscribe(ke(i,r=>e.call(n,r,o++)&&i.next(r)))})}function Cu(e){return Ue((n,t)=>{let i=!1;n.subscribe(ke(t,o=>{i=!0,t.next(o)},()=>{i||t.next(e),t.complete()}))})}function HD(e=zj){return Ue((n,t)=>{let i=!1;n.subscribe(ke(t,o=>{i=!0,t.next(o)},()=>i?t.complete():t.error(e())))})}function zj(){return new Du}function Po(e,n){const t=arguments.length>=2;return i=>i.pipe(e?vt((o,r)=>e(o,r,i)):xn,Et(1),t?Cu(n):HD(()=>new Du))}function La(e,n){return ne(n)?lt(e,n,1):lt(e,1)}function _t(e,n,t){const i=ne(e)||n||t?{next:e,error:n,complete:t}:e;return i?Ue((o,r)=>{var s;null===(s=i.subscribe)||void 0===s||s.call(i);let a=!0;o.subscribe(ke(r,l=>{var d;null===(d=i.next)||void 0===d||d.call(i,l),r.next(l)},()=>{var l;a=!1,null===(l=i.complete)||void 0===l||l.call(i),r.complete()},l=>{var d;a=!1,null===(d=i.error)||void 0===d||d.call(i,l),r.error(l)},()=>{var l,d;a&&(null===(l=i.unsubscribe)||void 0===l||l.call(i)),null===(d=i.finalize)||void 0===d||d.call(i)}))}):xn}function ko(e){return Ue((n,t)=>{let r,i=null,o=!1;i=n.subscribe(ke(t,void 0,void 0,s=>{r=at(e(s,ko(e)(n))),i?(i.unsubscribe(),i=null,r.subscribe(t)):o=!0})),o&&(i.unsubscribe(),i=null,r.subscribe(t))})}function dg(e){return e<=0?()=>mn:Ue((n,t)=>{let i=[];n.subscribe(ke(t,o=>{i.push(o),e{for(const o of i)t.next(o);t.complete()},void 0,()=>{i=null}))})}function fg(e){return Ue((n,t)=>{try{n.subscribe(t)}finally{t.add(e)}})}function Ze(e){return Ue((n,t)=>{at(e).subscribe(ke(t,()=>t.complete(),mo)),!t.closed&&n.subscribe(t)})}const te="primary",Va=Symbol("RouteTitle");class Zj{constructor(n){this.params=n||{}}has(n){return Object.prototype.hasOwnProperty.call(this.params,n)}get(n){if(this.has(n)){const t=this.params[n];return Array.isArray(t)?t[0]:t}return null}getAll(n){if(this.has(n)){const t=this.params[n];return Array.isArray(t)?t:[t]}return[]}get keys(){return Object.keys(this.params)}}function is(e){return new Zj(e)}function Qj(e,n,t){const i=t.path.split("/");if(i.length>e.length||"full"===t.pathMatch&&(n.hasChildren()||i.lengthi[r]===o)}return e===n}function GD(e){return e.length>0?e[e.length-1]:null}function ro(e){return function kj(e){return!!e&&(e instanceof Te||ne(e.lift)&&ne(e.subscribe))}(e)?e:_a(e)?pt(Promise.resolve(e)):W(e)}const Kj={exact:function qD(e,n,t){if(!Fo(e.segments,n.segments)||!Su(e.segments,n.segments,t)||e.numberOfChildren!==n.numberOfChildren)return!1;for(const i in n.children)if(!e.children[i]||!qD(e.children[i],n.children[i],t))return!1;return!0},subset:YD},zD={exact:function Xj(e,n){return pi(e,n)},subset:function e4(e,n){return Object.keys(n).length<=Object.keys(e).length&&Object.keys(n).every(t=>UD(e[t],n[t]))},ignored:()=>!0};function WD(e,n,t){return Kj[t.paths](e.root,n.root,t.matrixParams)&&zD[t.queryParams](e.queryParams,n.queryParams)&&!("exact"===t.fragment&&e.fragment!==n.fragment)}function YD(e,n,t){return ZD(e,n,n.segments,t)}function ZD(e,n,t,i){if(e.segments.length>t.length){const o=e.segments.slice(0,t.length);return!(!Fo(o,t)||n.hasChildren()||!Su(o,t,i))}if(e.segments.length===t.length){if(!Fo(e.segments,t)||!Su(e.segments,t,i))return!1;for(const o in n.children)if(!e.children[o]||!YD(e.children[o],n.children[o],i))return!1;return!0}{const o=t.slice(0,e.segments.length),r=t.slice(e.segments.length);return!!(Fo(e.segments,o)&&Su(e.segments,o,i)&&e.children[te])&&ZD(e.children[te],n,r,i)}}function Su(e,n,t){return n.every((i,o)=>zD[t](e[o].parameters,i.parameters))}class os{constructor(n=new Oe([],{}),t={},i=null){this.root=n,this.queryParams=t,this.fragment=i}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=is(this.queryParams)),this._queryParamMap}toString(){return i4.serialize(this)}}class Oe{constructor(n,t){this.segments=n,this.children=t,this.parent=null,Object.values(t).forEach(i=>i.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return Eu(this)}}class Ba{constructor(n,t){this.path=n,this.parameters=t}get parameterMap(){return this._parameterMap||(this._parameterMap=is(this.parameters)),this._parameterMap}toString(){return KD(this)}}function Fo(e,n){return e.length===n.length&&e.every((t,i)=>t.path===n[i].path)}let Ha=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return new hg},providedIn:"root"})}}return e})();class hg{parse(n){const t=new p4(n);return new os(t.parseRootSegment(),t.parseQueryParams(),t.parseFragment())}serialize(n){const t=`/${$a(n.root,!0)}`,i=function s4(e){const n=Object.keys(e).map(t=>{const i=e[t];return Array.isArray(i)?i.map(o=>`${Tu(t)}=${Tu(o)}`).join("&"):`${Tu(t)}=${Tu(i)}`}).filter(t=>!!t);return n.length?`?${n.join("&")}`:""}(n.queryParams);return`${t}${i}${"string"==typeof n.fragment?`#${function o4(e){return encodeURI(e)}(n.fragment)}`:""}`}}const i4=new hg;function Eu(e){return e.segments.map(n=>KD(n)).join("/")}function $a(e,n){if(!e.hasChildren())return Eu(e);if(n){const t=e.children[te]?$a(e.children[te],!1):"",i=[];return Object.entries(e.children).forEach(([o,r])=>{o!==te&&i.push(`${o}:${$a(r,!1)}`)}),i.length>0?`${t}(${i.join("//")})`:t}{const t=function n4(e,n){let t=[];return Object.entries(e.children).forEach(([i,o])=>{i===te&&(t=t.concat(n(o,i)))}),Object.entries(e.children).forEach(([i,o])=>{i!==te&&(t=t.concat(n(o,i)))}),t}(e,(i,o)=>o===te?[$a(e.children[te],!1)]:[`${o}:${$a(i,!1)}`]);return 1===Object.keys(e.children).length&&null!=e.children[te]?`${Eu(e)}/${t[0]}`:`${Eu(e)}/(${t.join("//")})`}}function QD(e){return encodeURIComponent(e).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function Tu(e){return QD(e).replace(/%3B/gi,";")}function pg(e){return QD(e).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function Mu(e){return decodeURIComponent(e)}function JD(e){return Mu(e.replace(/\+/g,"%20"))}function KD(e){return`${pg(e.path)}${function r4(e){return Object.keys(e).map(n=>`;${pg(n)}=${pg(e[n])}`).join("")}(e.parameters)}`}const a4=/^[^\/()?;#]+/;function gg(e){const n=e.match(a4);return n?n[0]:""}const l4=/^[^\/()?;=#]+/,u4=/^[^=?&#]+/,f4=/^[^&#]+/;class p4{constructor(n){this.url=n,this.remaining=n}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new Oe([],{}):new Oe([],this.parseChildren())}parseQueryParams(){const n={};if(this.consumeOptional("?"))do{this.parseQueryParam(n)}while(this.consumeOptional("&"));return n}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const n=[];for(this.peekStartsWith("(")||n.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),n.push(this.parseSegment());let t={};this.peekStartsWith("/(")&&(this.capture("/"),t=this.parseParens(!0));let i={};return this.peekStartsWith("(")&&(i=this.parseParens(!1)),(n.length>0||Object.keys(t).length>0)&&(i[te]=new Oe(n,t)),i}parseSegment(){const n=gg(this.remaining);if(""===n&&this.peekStartsWith(";"))throw new O(4009,!1);return this.capture(n),new Ba(Mu(n),this.parseMatrixParams())}parseMatrixParams(){const n={};for(;this.consumeOptional(";");)this.parseParam(n);return n}parseParam(n){const t=function c4(e){const n=e.match(l4);return n?n[0]:""}(this.remaining);if(!t)return;this.capture(t);let i="";if(this.consumeOptional("=")){const o=gg(this.remaining);o&&(i=o,this.capture(i))}n[Mu(t)]=Mu(i)}parseQueryParam(n){const t=function d4(e){const n=e.match(u4);return n?n[0]:""}(this.remaining);if(!t)return;this.capture(t);let i="";if(this.consumeOptional("=")){const s=function h4(e){const n=e.match(f4);return n?n[0]:""}(this.remaining);s&&(i=s,this.capture(i))}const o=JD(t),r=JD(i);if(n.hasOwnProperty(o)){let s=n[o];Array.isArray(s)||(s=[s],n[o]=s),s.push(r)}else n[o]=r}parseParens(n){const t={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const i=gg(this.remaining),o=this.remaining[i.length];if("/"!==o&&")"!==o&&";"!==o)throw new O(4010,!1);let r;i.indexOf(":")>-1?(r=i.slice(0,i.indexOf(":")),this.capture(r),this.capture(":")):n&&(r=te);const s=this.parseChildren();t[r]=1===Object.keys(s).length?s[te]:new Oe([],s),this.consumeOptional("//")}return t}peekStartsWith(n){return this.remaining.startsWith(n)}consumeOptional(n){return!!this.peekStartsWith(n)&&(this.remaining=this.remaining.substring(n.length),!0)}capture(n){if(!this.consumeOptional(n))throw new O(4011,!1)}}function XD(e){return e.segments.length>0?new Oe([],{[te]:e}):e}function eC(e){const n={};for(const i of Object.keys(e.children)){const r=eC(e.children[i]);if(i===te&&0===r.segments.length&&r.hasChildren())for(const[s,a]of Object.entries(r.children))n[s]=a;else(r.segments.length>0||r.hasChildren())&&(n[i]=r)}return function g4(e){if(1===e.numberOfChildren&&e.children[te]){const n=e.children[te];return new Oe(e.segments.concat(n.segments),n.children)}return e}(new Oe(e.segments,n))}function jo(e){return e instanceof os}function tC(e){let n;const o=XD(function t(r){const s={};for(const l of r.children){const d=t(l);s[l.outlet]=d}const a=new Oe(r.url,s);return r===e&&(n=a),a}(e.root));return n??o}function nC(e,n,t,i){let o=e;for(;o.parent;)o=o.parent;if(0===n.length)return mg(o,o,o,t,i);const r=function v4(e){if("string"==typeof e[0]&&1===e.length&&"/"===e[0])return new oC(!0,0,e);let n=0,t=!1;const i=e.reduce((o,r,s)=>{if("object"==typeof r&&null!=r){if(r.outlets){const a={};return Object.entries(r.outlets).forEach(([l,d])=>{a[l]="string"==typeof d?d.split("/"):d}),[...o,{outlets:a}]}if(r.segmentPath)return[...o,r.segmentPath]}return"string"!=typeof r?[...o,r]:0===s?(r.split("/").forEach((a,l)=>{0==l&&"."===a||(0==l&&""===a?t=!0:".."===a?n++:""!=a&&o.push(a))}),o):[...o,r]},[]);return new oC(t,n,i)}(n);if(r.toRoot())return mg(o,o,new Oe([],{}),t,i);const s=function _4(e,n,t){if(e.isAbsolute)return new Nu(n,!0,0);if(!t)return new Nu(n,!1,NaN);if(null===t.parent)return new Nu(t,!0,0);const i=Iu(e.commands[0])?0:1;return function y4(e,n,t){let i=e,o=n,r=t;for(;r>o;){if(r-=o,i=i.parent,!i)throw new O(4005,!1);o=i.segments.length}return new Nu(i,!1,o-r)}(t,t.segments.length-1+i,e.numberOfDoubleDots)}(r,o,e),a=s.processChildren?Ga(s.segmentGroup,s.index,r.commands):rC(s.segmentGroup,s.index,r.commands);return mg(o,s.segmentGroup,a,t,i)}function Iu(e){return"object"==typeof e&&null!=e&&!e.outlets&&!e.segmentPath}function Ua(e){return"object"==typeof e&&null!=e&&e.outlets}function mg(e,n,t,i,o){let s,r={};i&&Object.entries(i).forEach(([l,d])=>{r[l]=Array.isArray(d)?d.map(h=>`${h}`):`${d}`}),s=e===n?t:iC(e,n,t);const a=XD(eC(s));return new os(a,r,o)}function iC(e,n,t){const i={};return Object.entries(e.children).forEach(([o,r])=>{i[o]=r===n?t:iC(r,n,t)}),new Oe(e.segments,i)}class oC{constructor(n,t,i){if(this.isAbsolute=n,this.numberOfDoubleDots=t,this.commands=i,n&&i.length>0&&Iu(i[0]))throw new O(4003,!1);const o=i.find(Ua);if(o&&o!==GD(i))throw new O(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class Nu{constructor(n,t,i){this.segmentGroup=n,this.processChildren=t,this.index=i}}function rC(e,n,t){if(e||(e=new Oe([],{})),0===e.segments.length&&e.hasChildren())return Ga(e,n,t);const i=function w4(e,n,t){let i=0,o=n;const r={match:!1,pathIndex:0,commandIndex:0};for(;o=t.length)return r;const s=e.segments[o],a=t[i];if(Ua(a))break;const l=`${a}`,d=i0&&void 0===l)break;if(l&&d&&"object"==typeof d&&void 0===d.outlets){if(!aC(l,d,s))return r;i+=2}else{if(!aC(l,{},s))return r;i++}o++}return{match:!0,pathIndex:o,commandIndex:i}}(e,n,t),o=t.slice(i.commandIndex);if(i.match&&i.pathIndexr!==te)&&e.children[te]&&1===e.numberOfChildren&&0===e.children[te].segments.length){const r=Ga(e.children[te],n,t);return new Oe(e.segments,r.children)}return Object.entries(i).forEach(([r,s])=>{"string"==typeof s&&(s=[s]),null!==s&&(o[r]=rC(e.children[r],n,s))}),Object.entries(e.children).forEach(([r,s])=>{void 0===i[r]&&(o[r]=s)}),new Oe(e.segments,o)}}function vg(e,n,t){const i=e.segments.slice(0,n);let o=0;for(;o{"string"==typeof i&&(i=[i]),null!==i&&(n[t]=vg(new Oe([],{}),0,i))}),n}function sC(e){const n={};return Object.entries(e).forEach(([t,i])=>n[t]=`${i}`),n}function aC(e,n,t){return e==t.path&&pi(n,t.parameters)}const za="imperative";class gi{constructor(n,t){this.id=n,this.url=t}}class Ou extends gi{constructor(n,t,i="imperative",o=null){super(n,t),this.type=0,this.navigationTrigger=i,this.restoredState=o}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class so extends gi{constructor(n,t,i){super(n,t),this.urlAfterRedirects=i,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class Wa extends gi{constructor(n,t,i,o){super(n,t),this.reason=i,this.code=o,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class rs extends gi{constructor(n,t,i,o){super(n,t),this.reason=i,this.code=o,this.type=16}}class Au extends gi{constructor(n,t,i,o){super(n,t),this.error=i,this.target=o,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class lC extends gi{constructor(n,t,i,o){super(n,t),this.urlAfterRedirects=i,this.state=o,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class C4 extends gi{constructor(n,t,i,o){super(n,t),this.urlAfterRedirects=i,this.state=o,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class S4 extends gi{constructor(n,t,i,o,r){super(n,t),this.urlAfterRedirects=i,this.state=o,this.shouldActivate=r,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class E4 extends gi{constructor(n,t,i,o){super(n,t),this.urlAfterRedirects=i,this.state=o,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class T4 extends gi{constructor(n,t,i,o){super(n,t),this.urlAfterRedirects=i,this.state=o,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class M4{constructor(n){this.route=n,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class I4{constructor(n){this.route=n,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class N4{constructor(n){this.snapshot=n,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class O4{constructor(n){this.snapshot=n,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class A4{constructor(n){this.snapshot=n,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class R4{constructor(n){this.snapshot=n,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class cC{constructor(n,t,i){this.routerEvent=n,this.position=t,this.anchor=i,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class _g{}class yg{constructor(n){this.url=n}}class x4{constructor(){this.outlet=null,this.route=null,this.injector=null,this.children=new qa,this.attachRef=null}}let qa=(()=>{class e{constructor(){this.contexts=new Map}onChildOutletCreated(t,i){const o=this.getOrCreateContext(t);o.outlet=i,this.contexts.set(t,o)}onChildOutletDestroyed(t){const i=this.getContext(t);i&&(i.outlet=null,i.attachRef=null)}onOutletDeactivated(){const t=this.contexts;return this.contexts=new Map,t}onOutletReAttached(t){this.contexts=t}getOrCreateContext(t){let i=this.getContext(t);return i||(i=new x4,this.contexts.set(t,i)),i}getContext(t){return this.contexts.get(t)||null}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();class uC{constructor(n){this._root=n}get root(){return this._root.value}parent(n){const t=this.pathFromRoot(n);return t.length>1?t[t.length-2]:null}children(n){const t=bg(n,this._root);return t?t.children.map(i=>i.value):[]}firstChild(n){const t=bg(n,this._root);return t&&t.children.length>0?t.children[0].value:null}siblings(n){const t=wg(n,this._root);return t.length<2?[]:t[t.length-2].children.map(o=>o.value).filter(o=>o!==n)}pathFromRoot(n){return wg(n,this._root).map(t=>t.value)}}function bg(e,n){if(e===n.value)return n;for(const t of n.children){const i=bg(e,t);if(i)return i}return null}function wg(e,n){if(e===n.value)return[n];for(const t of n.children){const i=wg(e,t);if(i.length)return i.unshift(n),i}return[]}class ji{constructor(n,t){this.value=n,this.children=t}toString(){return`TreeNode(${this.value})`}}function ss(e){const n={};return e&&e.children.forEach(t=>n[t.value.outlet]=t),n}class dC extends uC{constructor(n,t){super(n),this.snapshot=t,Dg(this,n)}toString(){return this.snapshot.toString()}}function fC(e,n){const t=function P4(e,n){const s=new Ru([],{},{},"",{},te,n,null,{});return new pC("",new ji(s,[]))}(0,n),i=new vn([new Ba("",{})]),o=new vn({}),r=new vn({}),s=new vn({}),a=new vn(""),l=new as(i,o,s,a,r,te,n,t.root);return l.snapshot=t.root,new dC(new ji(l,[]),t)}class as{constructor(n,t,i,o,r,s,a,l){this.urlSubject=n,this.paramsSubject=t,this.queryParamsSubject=i,this.fragmentSubject=o,this.dataSubject=r,this.outlet=s,this.component=a,this._futureSnapshot=l,this.title=this.dataSubject?.pipe(ue(d=>d[Va]))??W(void 0),this.url=n,this.params=t,this.queryParams=i,this.fragment=o,this.data=r}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe(ue(n=>is(n)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe(ue(n=>is(n)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function hC(e,n="emptyOnly"){const t=e.pathFromRoot;let i=0;if("always"!==n)for(i=t.length-1;i>=1;){const o=t[i],r=t[i-1];if(o.routeConfig&&""===o.routeConfig.path)i--;else{if(r.component)break;i--}}return function k4(e){return e.reduce((n,t)=>({params:{...n.params,...t.params},data:{...n.data,...t.data},resolve:{...t.data,...n.resolve,...t.routeConfig?.data,...t._resolvedData}}),{params:{},data:{},resolve:{}})}(t.slice(i))}class Ru{get title(){return this.data?.[Va]}constructor(n,t,i,o,r,s,a,l,d){this.url=n,this.params=t,this.queryParams=i,this.fragment=o,this.data=r,this.outlet=s,this.component=a,this.routeConfig=l,this._resolve=d}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=is(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=is(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(i=>i.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class pC extends uC{constructor(n,t){super(t),this.url=n,Dg(this,t)}toString(){return gC(this._root)}}function Dg(e,n){n.value._routerState=e,n.children.forEach(t=>Dg(e,t))}function gC(e){const n=e.children.length>0?` { ${e.children.map(gC).join(", ")} } `:"";return`${e.value}${n}`}function Cg(e){if(e.snapshot){const n=e.snapshot,t=e._futureSnapshot;e.snapshot=t,pi(n.queryParams,t.queryParams)||e.queryParamsSubject.next(t.queryParams),n.fragment!==t.fragment&&e.fragmentSubject.next(t.fragment),pi(n.params,t.params)||e.paramsSubject.next(t.params),function Jj(e,n){if(e.length!==n.length)return!1;for(let t=0;tpi(t.parameters,n[i].parameters))}(e.url,n.url);return t&&!(!e.parent!=!n.parent)&&(!e.parent||Sg(e.parent,n.parent))}let Eg=(()=>{class e{constructor(){this.activated=null,this._activatedRoute=null,this.name=te,this.activateEvents=new z,this.deactivateEvents=new z,this.attachEvents=new z,this.detachEvents=new z,this.parentContexts=k(qa),this.location=k(Tn),this.changeDetector=k(zn),this.environmentInjector=k(Zt),this.inputBinder=k(xu,{optional:!0}),this.supportsBindingToComponentInputs=!0}get activatedComponentRef(){return this.activated}ngOnChanges(t){if(t.name){const{firstChange:i,previousValue:o}=t.name;if(i)return;this.isTrackedInParentContexts(o)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(o)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(t){return this.parentContexts.getContext(t)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const t=this.parentContexts.getContext(this.name);t?.route&&(t.attachRef?this.attach(t.attachRef,t.route):this.activateWith(t.route,t.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new O(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new O(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new O(4012,!1);this.location.detach();const t=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(t.instance),t}attach(t,i){this.activated=t,this._activatedRoute=i,this.location.insert(t.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(t.instance)}deactivate(){if(this.activated){const t=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(t)}}activateWith(t,i){if(this.isActivated)throw new O(4013,!1);this._activatedRoute=t;const o=this.location,s=t.snapshot.component,a=this.parentContexts.getOrCreateContext(this.name).children,l=new F4(t,a,o.injector);this.activated=o.createComponent(s,{index:o.length,injector:l,environmentInjector:i??this.environmentInjector}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275dir=x({type:e,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[Ct]})}}return e})();class F4{constructor(n,t,i){this.route=n,this.childContexts=t,this.parent=i}get(n,t){return n===as?this.route:n===qa?this.childContexts:this.parent.get(n,t)}}const xu=new U("");let mC=(()=>{class e{constructor(){this.outletDataSubscriptions=new Map}bindActivatedRouteToOutletComponent(t){this.unsubscribeFromRouteData(t),this.subscribeToRouteData(t)}unsubscribeFromRouteData(t){this.outletDataSubscriptions.get(t)?.unsubscribe(),this.outletDataSubscriptions.delete(t)}subscribeToRouteData(t){const{activatedRoute:i}=t,o=cg([i.queryParams,i.params,i.data]).pipe(Pn(([r,s,a],l)=>(a={...r,...s,...a},0===l?W(a):Promise.resolve(a)))).subscribe(r=>{if(!t.isActivated||!t.activatedComponentRef||t.activatedRoute!==i||null===i.component)return void this.unsubscribeFromRouteData(t);const s=function fF(e){const n=de(e);if(!n)return null;const t=new fa(n);return{get selector(){return t.selector},get type(){return t.componentType},get inputs(){return t.inputs},get outputs(){return t.outputs},get ngContentSelectors(){return t.ngContentSelectors},get isStandalone(){return n.standalone},get isSignal(){return n.signals}}}(i.component);if(s)for(const{templateName:a}of s.inputs)t.activatedComponentRef.setInput(a,r[a]);else this.unsubscribeFromRouteData(t)});this.outletDataSubscriptions.set(t,o)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();function Ya(e,n,t){if(t&&e.shouldReuseRoute(n.value,t.value.snapshot)){const i=t.value;i._futureSnapshot=n.value;const o=function L4(e,n,t){return n.children.map(i=>{for(const o of t.children)if(e.shouldReuseRoute(i.value,o.value.snapshot))return Ya(e,i,o);return Ya(e,i)})}(e,n,t);return new ji(i,o)}{if(e.shouldAttach(n.value)){const r=e.retrieve(n.value);if(null!==r){const s=r.route;return s.value._futureSnapshot=n.value,s.children=n.children.map(a=>Ya(e,a)),s}}const i=function V4(e){return new as(new vn(e.url),new vn(e.params),new vn(e.queryParams),new vn(e.fragment),new vn(e.data),e.outlet,e.component,e)}(n.value),o=n.children.map(r=>Ya(e,r));return new ji(i,o)}}const Tg="ngNavigationCancelingError";function vC(e,n){const{redirectTo:t,navigationBehaviorOptions:i}=jo(n)?{redirectTo:n,navigationBehaviorOptions:void 0}:n,o=_C(!1,0,n);return o.url=t,o.navigationBehaviorOptions=i,o}function _C(e,n,t){const i=new Error("NavigationCancelingError: "+(e||""));return i[Tg]=!0,i.cancellationCode=n,t&&(i.url=t),i}function yC(e){return e&&e[Tg]}let bC=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["ng-component"]],standalone:!0,features:[En],decls:1,vars:0,template:function(i,o){1&i&&m(0,"router-outlet")},dependencies:[Eg],encapsulation:2})}}return e})();function Mg(e){const n=e.children&&e.children.map(Mg),t=n?{...e,children:n}:{...e};return!t.component&&!t.loadComponent&&(n||t.loadChildren)&&t.outlet&&t.outlet!==te&&(t.component=bC),t}function Yn(e){return e.outlet||te}function Za(e){if(!e)return null;if(e.routeConfig?._injector)return e.routeConfig._injector;for(let n=e.parent;n;n=n.parent){const t=n.routeConfig;if(t?._loadedInjector)return t._loadedInjector;if(t?._injector)return t._injector}return null}class q4{constructor(n,t,i,o,r){this.routeReuseStrategy=n,this.futureState=t,this.currState=i,this.forwardEvent=o,this.inputBindingEnabled=r}activate(n){const t=this.futureState._root,i=this.currState?this.currState._root:null;this.deactivateChildRoutes(t,i,n),Cg(this.futureState.root),this.activateChildRoutes(t,i,n)}deactivateChildRoutes(n,t,i){const o=ss(t);n.children.forEach(r=>{const s=r.value.outlet;this.deactivateRoutes(r,o[s],i),delete o[s]}),Object.values(o).forEach(r=>{this.deactivateRouteAndItsChildren(r,i)})}deactivateRoutes(n,t,i){const o=n.value,r=t?t.value:null;if(o===r)if(o.component){const s=i.getContext(o.outlet);s&&this.deactivateChildRoutes(n,t,s.children)}else this.deactivateChildRoutes(n,t,i);else r&&this.deactivateRouteAndItsChildren(t,i)}deactivateRouteAndItsChildren(n,t){n.value.component&&this.routeReuseStrategy.shouldDetach(n.value.snapshot)?this.detachAndStoreRouteSubtree(n,t):this.deactivateRouteAndOutlet(n,t)}detachAndStoreRouteSubtree(n,t){const i=t.getContext(n.value.outlet),o=i&&n.value.component?i.children:t,r=ss(n);for(const s of Object.keys(r))this.deactivateRouteAndItsChildren(r[s],o);if(i&&i.outlet){const s=i.outlet.detach(),a=i.children.onOutletDeactivated();this.routeReuseStrategy.store(n.value.snapshot,{componentRef:s,route:n,contexts:a})}}deactivateRouteAndOutlet(n,t){const i=t.getContext(n.value.outlet),o=i&&n.value.component?i.children:t,r=ss(n);for(const s of Object.keys(r))this.deactivateRouteAndItsChildren(r[s],o);i&&(i.outlet&&(i.outlet.deactivate(),i.children.onOutletDeactivated()),i.attachRef=null,i.route=null)}activateChildRoutes(n,t,i){const o=ss(t);n.children.forEach(r=>{this.activateRoutes(r,o[r.value.outlet],i),this.forwardEvent(new R4(r.value.snapshot))}),n.children.length&&this.forwardEvent(new O4(n.value.snapshot))}activateRoutes(n,t,i){const o=n.value,r=t?t.value:null;if(Cg(o),o===r)if(o.component){const s=i.getOrCreateContext(o.outlet);this.activateChildRoutes(n,t,s.children)}else this.activateChildRoutes(n,t,i);else if(o.component){const s=i.getOrCreateContext(o.outlet);if(this.routeReuseStrategy.shouldAttach(o.snapshot)){const a=this.routeReuseStrategy.retrieve(o.snapshot);this.routeReuseStrategy.store(o.snapshot,null),s.children.onOutletReAttached(a.contexts),s.attachRef=a.componentRef,s.route=a.route.value,s.outlet&&s.outlet.attach(a.componentRef,a.route.value),Cg(a.route.value),this.activateChildRoutes(n,null,s.children)}else{const a=Za(o.snapshot);s.attachRef=null,s.route=o,s.injector=a,s.outlet&&s.outlet.activateWith(o,s.injector),this.activateChildRoutes(n,null,s.children)}}else this.activateChildRoutes(n,null,i)}}class wC{constructor(n){this.path=n,this.route=this.path[this.path.length-1]}}class Pu{constructor(n,t){this.component=n,this.route=t}}function Y4(e,n,t){const i=e._root;return Qa(i,n?n._root:null,t,[i.value])}function ls(e,n){const t=Symbol(),i=n.get(e,t);return i===t?"function"!=typeof e||function EM(e){return null!==Pl(e)}(e)?n.get(e):e:i}function Qa(e,n,t,i,o={canDeactivateChecks:[],canActivateChecks:[]}){const r=ss(n);return e.children.forEach(s=>{(function Q4(e,n,t,i,o={canDeactivateChecks:[],canActivateChecks:[]}){const r=e.value,s=n?n.value:null,a=t?t.getContext(e.value.outlet):null;if(s&&r.routeConfig===s.routeConfig){const l=function J4(e,n,t){if("function"==typeof t)return t(e,n);switch(t){case"pathParamsChange":return!Fo(e.url,n.url);case"pathParamsOrQueryParamsChange":return!Fo(e.url,n.url)||!pi(e.queryParams,n.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Sg(e,n)||!pi(e.queryParams,n.queryParams);default:return!Sg(e,n)}}(s,r,r.routeConfig.runGuardsAndResolvers);l?o.canActivateChecks.push(new wC(i)):(r.data=s.data,r._resolvedData=s._resolvedData),Qa(e,n,r.component?a?a.children:null:t,i,o),l&&a&&a.outlet&&a.outlet.isActivated&&o.canDeactivateChecks.push(new Pu(a.outlet.component,s))}else s&&Ja(n,a,o),o.canActivateChecks.push(new wC(i)),Qa(e,null,r.component?a?a.children:null:t,i,o)})(s,r[s.value.outlet],t,i.concat([s.value]),o),delete r[s.value.outlet]}),Object.entries(r).forEach(([s,a])=>Ja(a,t.getContext(s),o)),o}function Ja(e,n,t){const i=ss(e),o=e.value;Object.entries(i).forEach(([r,s])=>{Ja(s,o.component?n?n.children.getContext(r):null:n,t)}),t.canDeactivateChecks.push(new Pu(o.component&&n&&n.outlet&&n.outlet.isActivated?n.outlet.component:null,o))}function Ka(e){return"function"==typeof e}function DC(e){return e instanceof Du||"EmptyError"===e?.name}const ku=Symbol("INITIAL_VALUE");function cs(){return Pn(e=>cg(e.map(n=>n.pipe(Et(1),function BD(...e){const n=As(e);return Ue((t,i)=>{(n?Fa(e,t,n):Fa(e,t)).subscribe(i)})}(ku)))).pipe(ue(n=>{for(const t of n)if(!0!==t){if(t===ku)return ku;if(!1===t||t instanceof os)return t}return!0}),vt(n=>n!==ku),Et(1)))}function CC(e){return function Sl(...e){return El(e)}(_t(n=>{if(jo(n))throw vC(0,n)}),ue(n=>!0===n))}class Fu{constructor(n){this.segmentGroup=n||null}}class SC{constructor(n){this.urlTree=n}}function us(e){return ja(new Fu(e))}function EC(e){return ja(new SC(e))}class vL{constructor(n,t){this.urlSerializer=n,this.urlTree=t}noMatchError(n){return new O(4002,!1)}lineralizeSegments(n,t){let i=[],o=t.root;for(;;){if(i=i.concat(o.segments),0===o.numberOfChildren)return W(i);if(o.numberOfChildren>1||!o.children[te])return ja(new O(4e3,!1));o=o.children[te]}}applyRedirectCommands(n,t,i){return this.applyRedirectCreateUrlTree(t,this.urlSerializer.parse(t),n,i)}applyRedirectCreateUrlTree(n,t,i,o){const r=this.createSegmentGroup(n,t.root,i,o);return new os(r,this.createQueryParams(t.queryParams,this.urlTree.queryParams),t.fragment)}createQueryParams(n,t){const i={};return Object.entries(n).forEach(([o,r])=>{if("string"==typeof r&&r.startsWith(":")){const a=r.substring(1);i[o]=t[a]}else i[o]=r}),i}createSegmentGroup(n,t,i,o){const r=this.createSegments(n,t.segments,i,o);let s={};return Object.entries(t.children).forEach(([a,l])=>{s[a]=this.createSegmentGroup(n,l,i,o)}),new Oe(r,s)}createSegments(n,t,i,o){return t.map(r=>r.path.startsWith(":")?this.findPosParam(n,r,o):this.findOrReturn(r,i))}findPosParam(n,t,i){const o=i[t.path.substring(1)];if(!o)throw new O(4001,!1);return o}findOrReturn(n,t){let i=0;for(const o of t){if(o.path===n.path)return t.splice(i),o;i++}return n}}const Ig={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function _L(e,n,t,i,o){const r=Ng(e,n,t);return r.matched?(i=function H4(e,n){return e.providers&&!e._injector&&(e._injector=tp(e.providers,n,`Route: ${e.path}`)),e._injector??n}(n,i),function pL(e,n,t,i){const o=n.canMatch;return o&&0!==o.length?W(o.map(s=>{const a=ls(s,e);return ro(function iL(e){return e&&Ka(e.canMatch)}(a)?a.canMatch(n,t):e.runInContext(()=>a(n,t)))})).pipe(cs(),CC()):W(!0)}(i,n,t).pipe(ue(s=>!0===s?r:{...Ig}))):W(r)}function Ng(e,n,t){if(""===n.path)return"full"===n.pathMatch&&(e.hasChildren()||t.length>0)?{...Ig}:{matched:!0,consumedSegments:[],remainingSegments:t,parameters:{},positionalParamSegments:{}};const o=(n.matcher||Qj)(t,e,n);if(!o)return{...Ig};const r={};Object.entries(o.posParams??{}).forEach(([a,l])=>{r[a]=l.path});const s=o.consumed.length>0?{...r,...o.consumed[o.consumed.length-1].parameters}:r;return{matched:!0,consumedSegments:o.consumed,remainingSegments:t.slice(o.consumed.length),parameters:s,positionalParamSegments:o.posParams??{}}}function TC(e,n,t,i){return t.length>0&&function wL(e,n,t){return t.some(i=>ju(e,n,i)&&Yn(i)!==te)}(e,t,i)?{segmentGroup:new Oe(n,bL(i,new Oe(t,e.children))),slicedSegments:[]}:0===t.length&&function DL(e,n,t){return t.some(i=>ju(e,n,i))}(e,t,i)?{segmentGroup:new Oe(e.segments,yL(e,0,t,i,e.children)),slicedSegments:t}:{segmentGroup:new Oe(e.segments,e.children),slicedSegments:t}}function yL(e,n,t,i,o){const r={};for(const s of i)if(ju(e,t,s)&&!o[Yn(s)]){const a=new Oe([],{});r[Yn(s)]=a}return{...o,...r}}function bL(e,n){const t={};t[te]=n;for(const i of e)if(""===i.path&&Yn(i)!==te){const o=new Oe([],{});t[Yn(i)]=o}return t}function ju(e,n,t){return(!(e.hasChildren()||n.length>0)||"full"!==t.pathMatch)&&""===t.path}class TL{constructor(n,t,i,o,r,s,a){this.injector=n,this.configLoader=t,this.rootComponentType=i,this.config=o,this.urlTree=r,this.paramsInheritanceStrategy=s,this.urlSerializer=a,this.allowRedirects=!0,this.applyRedirects=new vL(this.urlSerializer,this.urlTree)}noMatchError(n){return new O(4002,!1)}recognize(){const n=TC(this.urlTree.root,[],[],this.config).segmentGroup;return this.processSegmentGroup(this.injector,this.config,n,te).pipe(ko(t=>{if(t instanceof SC)return this.allowRedirects=!1,this.urlTree=t.urlTree,this.match(t.urlTree);throw t instanceof Fu?this.noMatchError(t):t}),ue(t=>{const i=new Ru([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},te,this.rootComponentType,null,{}),o=new ji(i,t),r=new pC("",o),s=function m4(e,n,t=null,i=null){return nC(tC(e),n,t,i)}(i,[],this.urlTree.queryParams,this.urlTree.fragment);return s.queryParams=this.urlTree.queryParams,r.url=this.urlSerializer.serialize(s),this.inheritParamsAndData(r._root),{state:r,tree:s}}))}match(n){return this.processSegmentGroup(this.injector,this.config,n.root,te).pipe(ko(i=>{throw i instanceof Fu?this.noMatchError(i):i}))}inheritParamsAndData(n){const t=n.value,i=hC(t,this.paramsInheritanceStrategy);t.params=Object.freeze(i.params),t.data=Object.freeze(i.data),n.children.forEach(o=>this.inheritParamsAndData(o))}processSegmentGroup(n,t,i,o){return 0===i.segments.length&&i.hasChildren()?this.processChildren(n,t,i):this.processSegment(n,t,i,i.segments,o,!0)}processChildren(n,t,i){const o=[];for(const r of Object.keys(i.children))"primary"===r?o.unshift(r):o.push(r);return pt(o).pipe(La(r=>{const s=i.children[r],a=function z4(e,n){const t=e.filter(i=>Yn(i)===n);return t.push(...e.filter(i=>Yn(i)!==n)),t}(t,r);return this.processSegmentGroup(n,a,s,r)}),function qj(e,n){return Ue(function Wj(e,n,t,i,o){return(r,s)=>{let a=t,l=n,d=0;r.subscribe(ke(s,h=>{const p=d++;l=a?e(l,h,p):(a=!0,h),i&&s.next(l)},o&&(()=>{a&&s.next(l),s.complete()})))}}(e,n,arguments.length>=2,!0))}((r,s)=>(r.push(...s),r)),Cu(null),function Yj(e,n){const t=arguments.length>=2;return i=>i.pipe(e?vt((o,r)=>e(o,r,i)):xn,dg(1),t?Cu(n):HD(()=>new Du))}(),lt(r=>{if(null===r)return us(i);const s=MC(r);return function ML(e){e.sort((n,t)=>n.value.outlet===te?-1:t.value.outlet===te?1:n.value.outlet.localeCompare(t.value.outlet))}(s),W(s)}))}processSegment(n,t,i,o,r,s){return pt(t).pipe(La(a=>this.processSegmentAgainstRoute(a._injector??n,t,a,i,o,r,s).pipe(ko(l=>{if(l instanceof Fu)return W(null);throw l}))),Po(a=>!!a),ko(a=>{if(DC(a))return function SL(e,n,t){return 0===n.length&&!e.children[t]}(i,o,r)?W([]):us(i);throw a}))}processSegmentAgainstRoute(n,t,i,o,r,s,a){return function CL(e,n,t,i){return!!(Yn(e)===i||i!==te&&ju(n,t,e))&&("**"===e.path||Ng(n,e,t).matched)}(i,o,r,s)?void 0===i.redirectTo?this.matchSegmentAgainstRoute(n,o,i,r,s,a):a&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(n,o,t,i,r,s):us(o):us(o)}expandSegmentAgainstRouteUsingRedirect(n,t,i,o,r,s){return"**"===o.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(n,i,o,s):this.expandRegularSegmentAgainstRouteUsingRedirect(n,t,i,o,r,s)}expandWildCardWithParamsAgainstRouteUsingRedirect(n,t,i,o){const r=this.applyRedirects.applyRedirectCommands([],i.redirectTo,{});return i.redirectTo.startsWith("/")?EC(r):this.applyRedirects.lineralizeSegments(i,r).pipe(lt(s=>{const a=new Oe(s,{});return this.processSegment(n,t,a,s,o,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(n,t,i,o,r,s){const{matched:a,consumedSegments:l,remainingSegments:d,positionalParamSegments:h}=Ng(t,o,r);if(!a)return us(t);const p=this.applyRedirects.applyRedirectCommands(l,o.redirectTo,h);return o.redirectTo.startsWith("/")?EC(p):this.applyRedirects.lineralizeSegments(o,p).pipe(lt(g=>this.processSegment(n,i,t,g.concat(d),s,!1)))}matchSegmentAgainstRoute(n,t,i,o,r,s){let a;if("**"===i.path){const l=o.length>0?GD(o).parameters:{};a=W({snapshot:new Ru(o,l,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,IC(i),Yn(i),i.component??i._loadedComponent??null,i,NC(i)),consumedSegments:[],remainingSegments:[]}),t.children={}}else a=_L(t,i,o,n).pipe(ue(({matched:l,consumedSegments:d,remainingSegments:h,parameters:p})=>l?{snapshot:new Ru(d,p,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,IC(i),Yn(i),i.component??i._loadedComponent??null,i,NC(i)),consumedSegments:d,remainingSegments:h}:null));return a.pipe(Pn(l=>null===l?us(t):this.getChildConfig(n=i._injector??n,i,o).pipe(Pn(({routes:d})=>{const h=i._loadedInjector??n,{snapshot:p,consumedSegments:g,remainingSegments:v}=l,{segmentGroup:_,slicedSegments:b}=TC(t,g,v,d);if(0===b.length&&_.hasChildren())return this.processChildren(h,d,_).pipe(ue(E=>null===E?null:[new ji(p,E)]));if(0===d.length&&0===b.length)return W([new ji(p,[])]);const C=Yn(i)===r;return this.processSegment(h,d,_,b,C?te:r,!0).pipe(ue(E=>[new ji(p,E)]))}))))}getChildConfig(n,t,i){return t.children?W({routes:t.children,injector:n}):t.loadChildren?void 0!==t._loadedRoutes?W({routes:t._loadedRoutes,injector:t._loadedInjector}):function hL(e,n,t,i){const o=n.canLoad;return void 0===o||0===o.length?W(!0):W(o.map(s=>{const a=ls(s,e);return ro(function X4(e){return e&&Ka(e.canLoad)}(a)?a.canLoad(n,t):e.runInContext(()=>a(n,t)))})).pipe(cs(),CC())}(n,t,i).pipe(lt(o=>o?this.configLoader.loadChildren(n,t).pipe(_t(r=>{t._loadedRoutes=r.routes,t._loadedInjector=r.injector})):function mL(e){return ja(_C(!1,3))}())):W({routes:[],injector:n})}}function IL(e){const n=e.value.routeConfig;return n&&""===n.path}function MC(e){const n=[],t=new Set;for(const i of e){if(!IL(i)){n.push(i);continue}const o=n.find(r=>i.value.routeConfig===r.value.routeConfig);void 0!==o?(o.children.push(...i.children),t.add(o)):n.push(i)}for(const i of t){const o=MC(i.children);n.push(new ji(i.value,o))}return n.filter(i=>!t.has(i))}function IC(e){return e.data||{}}function NC(e){return e.resolve||{}}function OL(e,n){return lt(t=>{const{targetSnapshot:i,guards:{canActivateChecks:o}}=t;if(!o.length)return W(t);let r=0;return pt(o).pipe(La(s=>function AL(e,n,t,i){const o=e.routeConfig,r=e._resolve;return void 0!==o?.title&&!OC(o)&&(r[Va]=o.title),function RL(e,n,t,i){const o=function xL(e){return[...Object.keys(e),...Object.getOwnPropertySymbols(e)]}(e);if(0===o.length)return W({});const r={};return pt(o).pipe(lt(s=>function PL(e,n,t,i){const o=Za(n)??i,r=ls(e,o);return ro(r.resolve?r.resolve(n,t):o.runInContext(()=>r(n,t)))}(e[s],n,t,i).pipe(Po(),_t(a=>{r[s]=a}))),dg(1),function $D(e){return ue(()=>e)}(r),ko(s=>DC(s)?mn:ja(s)))}(r,e,n,i).pipe(ue(s=>(e._resolvedData=s,e.data=hC(e,t).resolve,o&&OC(o)&&(e.data[Va]=o.title),null)))}(s.route,i,e,n)),_t(()=>r++),dg(1),lt(s=>r===o.length?W(t):mn))})}function OC(e){return"string"==typeof e.title||null===e.title}function Og(e){return Pn(n=>{const t=e(n);return t?pt(t).pipe(ue(()=>n)):W(n)})}const ds=new U("ROUTES");let Ag=(()=>{class e{constructor(){this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap,this.compiler=k(cw)}loadComponent(t){if(this.componentLoaders.get(t))return this.componentLoaders.get(t);if(t._loadedComponent)return W(t._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(t);const i=ro(t.loadComponent()).pipe(ue(AC),_t(r=>{this.onLoadEndListener&&this.onLoadEndListener(t),t._loadedComponent=r}),fg(()=>{this.componentLoaders.delete(t)})),o=new VD(i,()=>new ye).pipe(ug());return this.componentLoaders.set(t,o),o}loadChildren(t,i){if(this.childrenLoaders.get(i))return this.childrenLoaders.get(i);if(i._loadedRoutes)return W({routes:i._loadedRoutes,injector:i._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(i);const r=function kL(e,n,t,i){return ro(e.loadChildren()).pipe(ue(AC),lt(o=>o instanceof vb||Array.isArray(o)?W(o):pt(n.compileModuleAsync(o))),ue(o=>{i&&i(e);let r,s,a=!1;return Array.isArray(o)?(s=o,!0):(r=o.create(t).injector,s=r.get(ds,[],{optional:!0,self:!0}).flat()),{routes:s.map(Mg),injector:r}}))}(i,this.compiler,t,this.onLoadEndListener).pipe(fg(()=>{this.childrenLoaders.delete(i)})),s=new VD(r,()=>new ye).pipe(ug());return this.childrenLoaders.set(i,s),s}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function AC(e){return function FL(e){return e&&"object"==typeof e&&"default"in e}(e)?e.default:e}let Lu=(()=>{class e{get hasRequestedNavigation(){return 0!==this.navigationId}constructor(){this.currentNavigation=null,this.currentTransition=null,this.lastSuccessfulNavigation=null,this.events=new ye,this.transitionAbortSubject=new ye,this.configLoader=k(Ag),this.environmentInjector=k(Zt),this.urlSerializer=k(Ha),this.rootContexts=k(qa),this.inputBindingEnabled=null!==k(xu,{optional:!0}),this.navigationId=0,this.afterPreactivation=()=>W(void 0),this.rootComponentType=null,this.configLoader.onLoadEndListener=o=>this.events.next(new I4(o)),this.configLoader.onLoadStartListener=o=>this.events.next(new M4(o))}complete(){this.transitions?.complete()}handleNavigationRequest(t){const i=++this.navigationId;this.transitions?.next({...this.transitions.value,...t,id:i})}setupNavigations(t,i,o){return this.transitions=new vn({id:0,currentUrlTree:i,currentRawUrl:i,currentBrowserUrl:i,extractedUrl:t.urlHandlingStrategy.extract(i),urlAfterRedirects:t.urlHandlingStrategy.extract(i),rawUrl:i,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:za,restoredState:null,currentSnapshot:o.snapshot,targetSnapshot:null,currentRouterState:o,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.transitions.pipe(vt(r=>0!==r.id),ue(r=>({...r,extractedUrl:t.urlHandlingStrategy.extract(r.rawUrl)})),Pn(r=>{this.currentTransition=r;let s=!1,a=!1;return W(r).pipe(_t(l=>{this.currentNavigation={id:l.id,initialUrl:l.rawUrl,extractedUrl:l.extractedUrl,trigger:l.source,extras:l.extras,previousNavigation:this.lastSuccessfulNavigation?{...this.lastSuccessfulNavigation,previousNavigation:null}:null}}),Pn(l=>{const d=l.currentBrowserUrl.toString(),h=!t.navigated||l.extractedUrl.toString()!==d||d!==l.currentUrlTree.toString();if(!h&&"reload"!==(l.extras.onSameUrlNavigation??t.onSameUrlNavigation)){const g="";return this.events.next(new rs(l.id,this.urlSerializer.serialize(l.rawUrl),g,0)),l.resolve(null),mn}if(t.urlHandlingStrategy.shouldProcessUrl(l.rawUrl))return W(l).pipe(Pn(g=>{const v=this.transitions?.getValue();return this.events.next(new Ou(g.id,this.urlSerializer.serialize(g.extractedUrl),g.source,g.restoredState)),v!==this.transitions?.getValue()?mn:Promise.resolve(g)}),function NL(e,n,t,i,o,r){return lt(s=>function EL(e,n,t,i,o,r,s="emptyOnly"){return new TL(e,n,t,i,o,s,r).recognize()}(e,n,t,i,s.extractedUrl,o,r).pipe(ue(({state:a,tree:l})=>({...s,targetSnapshot:a,urlAfterRedirects:l}))))}(this.environmentInjector,this.configLoader,this.rootComponentType,t.config,this.urlSerializer,t.paramsInheritanceStrategy),_t(g=>{r.targetSnapshot=g.targetSnapshot,r.urlAfterRedirects=g.urlAfterRedirects,this.currentNavigation={...this.currentNavigation,finalUrl:g.urlAfterRedirects};const v=new lC(g.id,this.urlSerializer.serialize(g.extractedUrl),this.urlSerializer.serialize(g.urlAfterRedirects),g.targetSnapshot);this.events.next(v)}));if(h&&t.urlHandlingStrategy.shouldProcessUrl(l.currentRawUrl)){const{id:g,extractedUrl:v,source:_,restoredState:b,extras:C}=l,E=new Ou(g,this.urlSerializer.serialize(v),_,b);this.events.next(E);const D=fC(0,this.rootComponentType).snapshot;return this.currentTransition=r={...l,targetSnapshot:D,urlAfterRedirects:v,extras:{...C,skipLocationChange:!1,replaceUrl:!1}},W(r)}{const g="";return this.events.next(new rs(l.id,this.urlSerializer.serialize(l.extractedUrl),g,1)),l.resolve(null),mn}}),_t(l=>{const d=new C4(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects),l.targetSnapshot);this.events.next(d)}),ue(l=>(this.currentTransition=r={...l,guards:Y4(l.targetSnapshot,l.currentSnapshot,this.rootContexts)},r)),function rL(e,n){return lt(t=>{const{targetSnapshot:i,currentSnapshot:o,guards:{canActivateChecks:r,canDeactivateChecks:s}}=t;return 0===s.length&&0===r.length?W({...t,guardsResult:!0}):function sL(e,n,t,i){return pt(e).pipe(lt(o=>function fL(e,n,t,i,o){const r=n&&n.routeConfig?n.routeConfig.canDeactivate:null;return r&&0!==r.length?W(r.map(a=>{const l=Za(n)??o,d=ls(a,l);return ro(function nL(e){return e&&Ka(e.canDeactivate)}(d)?d.canDeactivate(e,n,t,i):l.runInContext(()=>d(e,n,t,i))).pipe(Po())})).pipe(cs()):W(!0)}(o.component,o.route,t,n,i)),Po(o=>!0!==o,!0))}(s,i,o,e).pipe(lt(a=>a&&function K4(e){return"boolean"==typeof e}(a)?function aL(e,n,t,i){return pt(n).pipe(La(o=>Fa(function cL(e,n){return null!==e&&n&&n(new N4(e)),W(!0)}(o.route.parent,i),function lL(e,n){return null!==e&&n&&n(new A4(e)),W(!0)}(o.route,i),function dL(e,n,t){const i=n[n.length-1],r=n.slice(0,n.length-1).reverse().map(s=>function Z4(e){const n=e.routeConfig?e.routeConfig.canActivateChild:null;return n&&0!==n.length?{node:e,guards:n}:null}(s)).filter(s=>null!==s).map(s=>LD(()=>W(s.guards.map(l=>{const d=Za(s.node)??t,h=ls(l,d);return ro(function tL(e){return e&&Ka(e.canActivateChild)}(h)?h.canActivateChild(i,e):d.runInContext(()=>h(i,e))).pipe(Po())})).pipe(cs())));return W(r).pipe(cs())}(e,o.path,t),function uL(e,n,t){const i=n.routeConfig?n.routeConfig.canActivate:null;if(!i||0===i.length)return W(!0);const o=i.map(r=>LD(()=>{const s=Za(n)??t,a=ls(r,s);return ro(function eL(e){return e&&Ka(e.canActivate)}(a)?a.canActivate(n,e):s.runInContext(()=>a(n,e))).pipe(Po())}));return W(o).pipe(cs())}(e,o.route,t))),Po(o=>!0!==o,!0))}(i,r,e,n):W(a)),ue(a=>({...t,guardsResult:a})))})}(this.environmentInjector,l=>this.events.next(l)),_t(l=>{if(r.guardsResult=l.guardsResult,jo(l.guardsResult))throw vC(0,l.guardsResult);const d=new S4(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects),l.targetSnapshot,!!l.guardsResult);this.events.next(d)}),vt(l=>!!l.guardsResult||(this.cancelNavigationTransition(l,"",3),!1)),Og(l=>{if(l.guards.canActivateChecks.length)return W(l).pipe(_t(d=>{const h=new E4(d.id,this.urlSerializer.serialize(d.extractedUrl),this.urlSerializer.serialize(d.urlAfterRedirects),d.targetSnapshot);this.events.next(h)}),Pn(d=>{let h=!1;return W(d).pipe(OL(t.paramsInheritanceStrategy,this.environmentInjector),_t({next:()=>h=!0,complete:()=>{h||this.cancelNavigationTransition(d,"",2)}}))}),_t(d=>{const h=new T4(d.id,this.urlSerializer.serialize(d.extractedUrl),this.urlSerializer.serialize(d.urlAfterRedirects),d.targetSnapshot);this.events.next(h)}))}),Og(l=>{const d=h=>{const p=[];h.routeConfig?.loadComponent&&!h.routeConfig._loadedComponent&&p.push(this.configLoader.loadComponent(h.routeConfig).pipe(_t(g=>{h.component=g}),ue(()=>{})));for(const g of h.children)p.push(...d(g));return p};return cg(d(l.targetSnapshot.root)).pipe(Cu(),Et(1))}),Og(()=>this.afterPreactivation()),ue(l=>{const d=function j4(e,n,t){const i=Ya(e,n._root,t?t._root:void 0);return new dC(i,n)}(t.routeReuseStrategy,l.targetSnapshot,l.currentRouterState);return this.currentTransition=r={...l,targetRouterState:d},r}),_t(()=>{this.events.next(new _g)}),((e,n,t,i)=>ue(o=>(new q4(n,o.targetRouterState,o.currentRouterState,t,i).activate(e),o)))(this.rootContexts,t.routeReuseStrategy,l=>this.events.next(l),this.inputBindingEnabled),Et(1),_t({next:l=>{s=!0,this.lastSuccessfulNavigation=this.currentNavigation,this.events.next(new so(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects))),t.titleStrategy?.updateTitle(l.targetRouterState.snapshot),l.resolve(!0)},complete:()=>{s=!0}}),Ze(this.transitionAbortSubject.pipe(_t(l=>{throw l}))),fg(()=>{s||a||this.cancelNavigationTransition(r,"",1),this.currentNavigation?.id===r.id&&(this.currentNavigation=null)}),ko(l=>{if(a=!0,yC(l))this.events.next(new Wa(r.id,this.urlSerializer.serialize(r.extractedUrl),l.message,l.cancellationCode)),function B4(e){return yC(e)&&jo(e.url)}(l)?this.events.next(new yg(l.url)):r.resolve(!1);else{this.events.next(new Au(r.id,this.urlSerializer.serialize(r.extractedUrl),l,r.targetSnapshot??void 0));try{r.resolve(t.errorHandler(l))}catch(d){r.reject(d)}}return mn}))}))}cancelNavigationTransition(t,i,o){const r=new Wa(t.id,this.urlSerializer.serialize(t.extractedUrl),i,o);this.events.next(r),t.resolve(!1)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function RC(e){return e!==za}let xC=(()=>{class e{buildTitle(t){let i,o=t.root;for(;void 0!==o;)i=this.getResolvedTitleForRoute(o)??i,o=o.children.find(r=>r.outlet===te);return i}getResolvedTitleForRoute(t){return t.data[Va]}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return k(jL)},providedIn:"root"})}}return e})(),jL=(()=>{class e extends xC{constructor(t){super(),this.title=t}updateTitle(t){const i=this.buildTitle(t);void 0!==i&&this.title.setTitle(i)}static{this.\u0275fac=function(i){return new(i||e)(L(OD))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),LL=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return k(BL)},providedIn:"root"})}}return e})();class VL{shouldDetach(n){return!1}store(n,t){}shouldAttach(n){return!1}retrieve(n){return null}shouldReuseRoute(n,t){return n.routeConfig===t.routeConfig}}let BL=(()=>{class e extends VL{static{this.\u0275fac=function(){let t;return function(o){return(t||(t=function tt(e){return Ci(()=>{const n=e.prototype.constructor,t=n[Si]||Sf(n),i=Object.prototype;let o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==i;){const r=o[Si]||Sf(o);if(r&&r!==t)return r;o=Object.getPrototypeOf(o)}return r=>new r})}(e)))(o||e)}}()}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();const Vu=new U("",{providedIn:"root",factory:()=>({})});let HL=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:function(){return k($L)},providedIn:"root"})}}return e})(),$L=(()=>{class e{shouldProcessUrl(t){return!0}extract(t){return t}merge(t,i){return t}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var Xa=function(e){return e[e.COMPLETE=0]="COMPLETE",e[e.FAILED=1]="FAILED",e[e.REDIRECTING=2]="REDIRECTING",e}(Xa||{});function PC(e,n){e.events.pipe(vt(t=>t instanceof so||t instanceof Wa||t instanceof Au||t instanceof rs),ue(t=>t instanceof so||t instanceof rs?Xa.COMPLETE:t instanceof Wa&&(0===t.code||1===t.code)?Xa.REDIRECTING:Xa.FAILED),vt(t=>t!==Xa.REDIRECTING),Et(1)).subscribe(()=>{n()})}function UL(e){throw e}function GL(e,n,t){return n.parse("/")}const zL={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},WL={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};let On=(()=>{class e{get navigationId(){return this.navigationTransitions.navigationId}get browserPageId(){return"computed"!==this.canceledNavigationResolution?this.currentPageId:this.location.getState()?.\u0275routerPageId??this.currentPageId}get events(){return this._events}constructor(){this.disposed=!1,this.currentPageId=0,this.console=k(aw),this.isNgZoneEnabled=!1,this._events=new ye,this.options=k(Vu,{optional:!0})||{},this.pendingTasks=k(lw),this.errorHandler=this.options.errorHandler||UL,this.malformedUriErrorHandler=this.options.malformedUriErrorHandler||GL,this.navigated=!1,this.lastSuccessfulId=-1,this.urlHandlingStrategy=k(HL),this.routeReuseStrategy=k(LL),this.titleStrategy=k(xC),this.onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore",this.paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly",this.urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred",this.canceledNavigationResolution=this.options.canceledNavigationResolution||"replace",this.config=k(ds,{optional:!0})?.flat()??[],this.navigationTransitions=k(Lu),this.urlSerializer=k(Ha),this.location=k(kp),this.componentInputBindingEnabled=!!k(xu,{optional:!0}),this.eventsSubscription=new Je,this.isNgZoneEnabled=k(ae)instanceof ae&&ae.isInAngularZone(),this.resetConfig(this.config),this.currentUrlTree=new os,this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=fC(0,null),this.navigationTransitions.setupNavigations(this,this.currentUrlTree,this.routerState).subscribe(t=>{this.lastSuccessfulId=t.id,this.currentPageId=this.browserPageId},t=>{this.console.warn(`Unhandled Navigation Error: ${t}`)}),this.subscribeToNavigationEvents()}subscribeToNavigationEvents(){const t=this.navigationTransitions.events.subscribe(i=>{try{const{currentTransition:o}=this.navigationTransitions;if(null===o)return void(kC(i)&&this._events.next(i));if(i instanceof Ou)RC(o.source)&&(this.browserUrlTree=o.extractedUrl);else if(i instanceof rs)this.rawUrlTree=o.rawUrl;else if(i instanceof lC){if("eager"===this.urlUpdateStrategy){if(!o.extras.skipLocationChange){const r=this.urlHandlingStrategy.merge(o.urlAfterRedirects,o.rawUrl);this.setBrowserUrl(r,o)}this.browserUrlTree=o.urlAfterRedirects}}else if(i instanceof _g)this.currentUrlTree=o.urlAfterRedirects,this.rawUrlTree=this.urlHandlingStrategy.merge(o.urlAfterRedirects,o.rawUrl),this.routerState=o.targetRouterState,"deferred"===this.urlUpdateStrategy&&(o.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,o),this.browserUrlTree=o.urlAfterRedirects);else if(i instanceof Wa)0!==i.code&&1!==i.code&&(this.navigated=!0),(3===i.code||2===i.code)&&this.restoreHistory(o);else if(i instanceof yg){const r=this.urlHandlingStrategy.merge(i.url,o.currentRawUrl),s={skipLocationChange:o.extras.skipLocationChange,replaceUrl:"eager"===this.urlUpdateStrategy||RC(o.source)};this.scheduleNavigation(r,za,null,s,{resolve:o.resolve,reject:o.reject,promise:o.promise})}i instanceof Au&&this.restoreHistory(o,!0),i instanceof so&&(this.navigated=!0),kC(i)&&this._events.next(i)}catch(o){this.navigationTransitions.transitionAbortSubject.next(o)}});this.eventsSubscription.add(t)}resetRootComponentType(t){this.routerState.root.component=t,this.navigationTransitions.rootComponentType=t}initialNavigation(){if(this.setUpLocationChangeListener(),!this.navigationTransitions.hasRequestedNavigation){const t=this.location.getState();this.navigateToSyncWithBrowser(this.location.path(!0),za,t)}}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(t=>{const i="popstate"===t.type?"popstate":"hashchange";"popstate"===i&&setTimeout(()=>{this.navigateToSyncWithBrowser(t.url,i,t.state)},0)}))}navigateToSyncWithBrowser(t,i,o){const r={replaceUrl:!0},s=o?.navigationId?o:null;if(o){const l={...o};delete l.navigationId,delete l.\u0275routerPageId,0!==Object.keys(l).length&&(r.state=l)}const a=this.parseUrl(t);this.scheduleNavigation(a,i,s,r)}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(t){this.config=t.map(Mg),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.navigationTransitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(t,i={}){const{relativeTo:o,queryParams:r,fragment:s,queryParamsHandling:a,preserveFragment:l}=i,d=l?this.currentUrlTree.fragment:s;let p,h=null;switch(a){case"merge":h={...this.currentUrlTree.queryParams,...r};break;case"preserve":h=this.currentUrlTree.queryParams;break;default:h=r||null}null!==h&&(h=this.removeEmptyProps(h));try{p=tC(o?o.snapshot:this.routerState.snapshot.root)}catch{("string"!=typeof t[0]||!t[0].startsWith("/"))&&(t=[]),p=this.currentUrlTree.root}return nC(p,t,h,d??null)}navigateByUrl(t,i={skipLocationChange:!1}){const o=jo(t)?t:this.parseUrl(t),r=this.urlHandlingStrategy.merge(o,this.rawUrlTree);return this.scheduleNavigation(r,za,null,i)}navigate(t,i={skipLocationChange:!1}){return function qL(e){for(let n=0;n{const r=t[o];return null!=r&&(i[o]=r),i},{})}scheduleNavigation(t,i,o,r,s){if(this.disposed)return Promise.resolve(!1);let a,l,d;s?(a=s.resolve,l=s.reject,d=s.promise):d=new Promise((p,g)=>{a=p,l=g});const h=this.pendingTasks.add();return PC(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(h))}),this.navigationTransitions.handleNavigationRequest({source:i,restoredState:o,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,currentBrowserUrl:this.browserUrlTree,rawUrl:t,extras:r,resolve:a,reject:l,promise:d,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),d.catch(p=>Promise.reject(p))}setBrowserUrl(t,i){const o=this.urlSerializer.serialize(t);if(this.location.isCurrentPathEqualTo(o)||i.extras.replaceUrl){const s={...i.extras.state,...this.generateNgRouterState(i.id,this.browserPageId)};this.location.replaceState(o,"",s)}else{const r={...i.extras.state,...this.generateNgRouterState(i.id,this.browserPageId+1)};this.location.go(o,"",r)}}restoreHistory(t,i=!1){if("computed"===this.canceledNavigationResolution){const r=this.currentPageId-this.browserPageId;0!==r?this.location.historyGo(r):this.currentUrlTree===this.getCurrentNavigation()?.finalUrl&&0===r&&(this.resetState(t),this.browserUrlTree=t.currentUrlTree,this.resetUrlToCurrentUrlTree())}else"replace"===this.canceledNavigationResolution&&(i&&this.resetState(t),this.resetUrlToCurrentUrlTree())}resetState(t){this.routerState=t.currentRouterState,this.currentUrlTree=t.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,t.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(t,i){return"computed"===this.canceledNavigationResolution?{navigationId:t,\u0275routerPageId:i}:{navigationId:t}}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function kC(e){return!(e instanceof _g||e instanceof yg)}class FC{}let QL=(()=>{class e{constructor(t,i,o,r,s){this.router=t,this.injector=o,this.preloadingStrategy=r,this.loader=s}setUpPreloading(){this.subscription=this.router.events.pipe(vt(t=>t instanceof so),La(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(t,i){const o=[];for(const r of i){r.providers&&!r._injector&&(r._injector=tp(r.providers,t,`Route: ${r.path}`));const s=r._injector??t,a=r._loadedInjector??s;(r.loadChildren&&!r._loadedRoutes&&void 0===r.canLoad||r.loadComponent&&!r._loadedComponent)&&o.push(this.preloadConfig(s,r)),(r.children||r._loadedRoutes)&&o.push(this.processRoutes(a,r.children??r._loadedRoutes))}return pt(o).pipe(rr())}preloadConfig(t,i){return this.preloadingStrategy.preload(i,()=>{let o;o=i.loadChildren&&void 0===i.canLoad?this.loader.loadChildren(t,i):W(null);const r=o.pipe(lt(s=>null===s?W(void 0):(i._loadedRoutes=s.routes,i._loadedInjector=s.injector,this.processRoutes(s.injector??t,s.routes))));return i.loadComponent&&!i._loadedComponent?pt([r,this.loader.loadComponent(i)]).pipe(rr()):r})}static{this.\u0275fac=function(i){return new(i||e)(L(On),L(cw),L(Zt),L(FC),L(Ag))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();const xg=new U("");let jC=(()=>{class e{constructor(t,i,o,r,s={}){this.urlSerializer=t,this.transitions=i,this.viewportScroller=o,this.zone=r,this.options=s,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},s.scrollPositionRestoration=s.scrollPositionRestoration||"disabled",s.anchorScrolling=s.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(t=>{t instanceof Ou?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=t.navigationTrigger,this.restoredId=t.restoredState?t.restoredState.navigationId:0):t instanceof so?(this.lastId=t.id,this.scheduleScrollEvent(t,this.urlSerializer.parse(t.urlAfterRedirects).fragment)):t instanceof rs&&0===t.code&&(this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(t,this.urlSerializer.parse(t.url).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(t=>{t instanceof cC&&(t.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(t.position):t.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(t.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(t,i){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.transitions.events.next(new cC(t,"popstate"===this.lastSource?this.store[this.restoredId]:null,i))})},0)})}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}static{this.\u0275fac=function(i){!function ry(){throw new Error("invalid")}()}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac})}}return e})();function Li(e,n){return{\u0275kind:e,\u0275providers:n}}function VC(){const e=k(gt);return n=>{const t=e.get(no);if(n!==t.components[0])return;const i=e.get(On),o=e.get(BC);1===e.get(Pg)&&i.initialNavigation(),e.get(HC,null,oe.Optional)?.setUpPreloading(),e.get(xg,null,oe.Optional)?.init(),i.resetRootComponentType(t.componentTypes[0]),o.closed||(o.next(),o.complete(),o.unsubscribe())}}const BC=new U("",{factory:()=>new ye}),Pg=new U("",{providedIn:"root",factory:()=>1}),HC=new U("");function eV(e){return Li(0,[{provide:HC,useExisting:QL},{provide:FC,useExisting:e}])}const $C=new U("ROUTER_FORROOT_GUARD"),nV=[kp,{provide:Ha,useClass:hg},On,qa,{provide:as,useFactory:function LC(e){return e.routerState.root},deps:[On]},Ag,[]];function iV(){return new mw("Router",On)}let UC=(()=>{class e{constructor(t){}static forRoot(t,i){return{ngModule:e,providers:[nV,[],{provide:ds,multi:!0,useValue:t},{provide:$C,useFactory:aV,deps:[[On,new ic,new oc]]},{provide:Vu,useValue:i||{}},i?.useHash?{provide:xo,useClass:vF}:{provide:xo,useClass:qw},{provide:xg,useFactory:()=>{const e=k(P3),n=k(ae),t=k(Vu),i=k(Lu),o=k(Ha);return t.scrollOffset&&e.setOffset(t.scrollOffset),new jC(o,i,e,n,t)}},i?.preloadingStrategy?eV(i.preloadingStrategy).\u0275providers:[],{provide:mw,multi:!0,useFactory:iV},i?.initialNavigation?lV(i):[],i?.bindToComponentInputs?Li(8,[mC,{provide:xu,useExisting:mC}]).\u0275providers:[],[{provide:GC,useFactory:VC},{provide:Sp,multi:!0,useExisting:GC}]]}}static forChild(t){return{ngModule:e,providers:[{provide:ds,multi:!0,useValue:t}]}}static{this.\u0275fac=function(i){return new(i||e)(L($C,8))}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();function aV(e){return"guarded"}function lV(e){return["disabled"===e.initialNavigation?Li(3,[{provide:mp,multi:!0,useFactory:()=>{const n=k(On);return()=>{n.setUpLocationChangeListener()}}},{provide:Pg,useValue:2}]).\u0275providers:[],"enabledBlocking"===e.initialNavigation?Li(2,[{provide:Pg,useValue:0},{provide:mp,multi:!0,deps:[gt],useFactory:n=>{const t=n.get(gF,Promise.resolve());return()=>t.then(()=>new Promise(i=>{const o=n.get(On),r=n.get(BC);PC(o,()=>{i(!0)}),n.get(Lu).afterPreactivation=()=>(i(!0),r.closed?W(void 0):r),o.initialNavigation()}))}}]).\u0275providers:[]]}const GC=new U("");let zC=(()=>{class e{constructor(){this.experience=[{company:"Exprivia",icon:"assets/images/experience-logos/exprivia.jpg",jobTitle:"Software Engineer",url:"https://exprivia.it/",period:"Apr 2024 - current",location:"Milan, Italy",description:""},{company:"Empatica",icon:"assets/images/experience-logos/empatica.jpg",jobTitle:"Jr Embedded Algorithm Engineer",url:"https://www.empatica.com/",period:"Sept 2022 - Mar 2024",location:"Milano, Italy",description:"I was responsible for integrating and optimizing biomedical DSP algorithms into the core library. My key contribution was improving the runtime performance of the epilepsy detection algorithm by 25%, making real-time seizure detection possible directly on the wearable device. This task involved low-level optimization and close collaboration with the R&D team. It\u2019s a project I\u2019m especially proud of, as it directly impacts the lives of people with epilepsy \u2014 a cause close to my heart."},{company:"Empatica",icon:"assets/images/experience-logos/empatica.jpg",jobTitle:"Graduate Engineer",url:"https://www.empatica.com/",period:"Sept 2021 - Sept 2022",location:"Milano, Italy",description:"As a graduate engineer at Empatica, I rotated across four teams \u2014 Data, Mobile, Front-End, and Embedded Algorithms \u2014 contributing to projects from data validation protocols to Android UI development, web portal features, and real-time algorithm optimization on wearables. This experience gave me a broad, cross-functional view of product development and how diverse engineering disciplines collaborate to deliver impactful solutions."}]}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),WC=(()=>{class e{constructor(){this.education=[{studyTitle:"Master in ICT for Internet and Multimedia Engineering",additionalInfo:"Curriculum: life and health tecnologies",thesisTitle:"Measurement of cardiac related biosignals in wearable during real life",university:"Padova University",url:"https://mime.dei.unipd.it/tracks/ict-for-life-health/",years:"April 2022 (110/110)",graduationPhoto:"assets/images/graduation-photos/unipd.jpg"},{studyTitle:"Ingegneria dell' informazione",university:"Padova University",additionalInfo:"",thesisTitle:"Reinforcement Learning e Q-Learning, come le macchine apprendono dai propri errori",url:"https://didattica.unipd.it/off/2022/LT/IN/IN0513",years:"November 2019",graduationPhoto:"assets/images/graduation-photos/unipd.jpg"}]}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),qC=(()=>{class e{constructor(){this.skills=[{category:"Coding languages and frameworks (working experience)",content:[{name:"Angular",percentage:"90%"},{name:"Unity",percentage:"90%"},{name:"Python",percentage:"90%"},{name:"Matlab",percentage:"90%"},{name:"C",percentage:"90%"}]},{category:"Coding languages and frameworks (personal or university projects)",content:[{name:"Arduino",percentage:"90%"},{name:"C++",percentage:"90%"},{name:"Kotlin",percentage:"70%"},{name:"React",percentage:"20%"},{name:"Typescript",percentage:"20%"},{name:"Javascript",percentage:"20%"},{name:"HTMLL/CSS",percentage:"40%"},{name:"OpenCV",percentage:"40%"},{name:"Pandas",percentage:"40%"}]},{category:"Design&UX tools and methods",content:[{name:"Figma",percentage:"90%"},{name:"Canva",percentage:"70%"},{name:"UX resarch",percentage:"70%"},{name:"Design thinking",percentage:"70%"},{name:"Accessibility",percentage:"70%"}]}]}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();const uV=function(e){return{"education-row-last":e}};let dV=(()=>{class e{constructor(t){this.service=t,this.education=this.service.education}static{this.\u0275fac=function(i){return new(i||e)(y(WC))}}static{this.\u0275cmp=se({type:e,selectors:[["app-education-card"]],inputs:{index:"index"},decls:18,vars:10,consts:[[1,"row"],[1,"education-row",3,"ngClass"],[1,"education-image",3,"src"],[1,"education-text"],["target","_blank",3,"href"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"div",1)(2,"div"),m(3,"img",2),u(),c(4,"div",3)(5,"h3"),f(6),u(),c(7,"small"),f(8),u(),c(9,"p")(10,"a",4),f(11),u(),m(12,"br"),c(13,"small"),f(14),u(),m(15,"br"),c(16,"small"),f(17),u()()()()()),2&i&&(M(1),A("ngClass",Ri(8,uV,o.index===o.education.length-1)),M(2),A("src",o.education[o.index].graduationPhoto,Dn),M(3),Le(o.education[o.index].studyTitle),M(2),Le(o.education[o.index].additionalInfo),M(2),A("href",o.education[o.index].url,Dn),M(1),Le(o.education[o.index].university),M(3),Le(o.education[o.index].years),M(3),un("Thesis: ",o.education[o.index].thesisTitle,""))},dependencies:[vu],styles:[".education-row[_ngcontent-%COMP%]{display:flex;align-items:center;margin-bottom:30px}.education-row-last[_ngcontent-%COMP%]{display:flex;align-items:center;margin-bottom:0}@media (max-width: 575.98px){.education-row[_ngcontent-%COMP%]{flex-direction:column}.education-image[_ngcontent-%COMP%]{margin-bottom:30px;margin-right:0!important}.education-text[_ngcontent-%COMP%]{text-align:center}}.education-text[_ngcontent-%COMP%]{line-height:130%}.education-image[_ngcontent-%COMP%]{flex:none;height:120px;width:120px;margin-right:20px;border-radius:var(--radius-pill);border:3px solid var(--border);position:relative;z-index:400}"]})}}return e})();const fV=function(e){return{"background-image":e}};let hV=(()=>{class e{constructor(t){this.service=t,this.experience=this.service.experience}static{this.\u0275fac=function(i){return new(i||e)(y(zC))}}static{this.\u0275cmp=se({type:e,selectors:[["app-experience-card"]],inputs:{index:"index"},decls:13,vars:8,consts:[[1,"row","experience-card"],[1,"experience-title"],[1,"experience-icon",3,"ngStyle"],["target","_blank",3,"href"],[1,"card-text"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"div",1),m(2,"div",2),c(3,"div")(4,"h3"),f(5),c(6,"a",3),f(7),u()(),c(8,"small"),f(9),u()()(),c(10,"div")(11,"p",4),f(12),u()()()),2&i&&(M(2),A("ngStyle",Ri(6,fV,'url("'+o.experience[o.index].icon+'")')),M(3),un("",o.experience[o.index].jobTitle," - "),M(1),A("href",o.experience[o.index].url,Dn),M(1),Le(o.experience[o.index].company),M(2),Le(o.experience[o.index].period),M(3),Le(o.experience[o.index].description))},dependencies:[_u],styles:[".experience-card[_ngcontent-%COMP%]{margin-bottom:10px}.experience-title[_ngcontent-%COMP%]{display:flex;align-items:center;margin:10px 0}.experience-icon[_ngcontent-%COMP%]{flex:none;height:60px;width:60px;background-color:#fff;background-size:50px;background-repeat:no-repeat;background-position:center center;margin-right:15px;object-fit:cover;border:1px solid rgb(182,182,182);border-radius:var(--radius-sm);padding:5px}@media (max-width: 575.98px){.experience-icon[_ngcontent-%COMP%]{margin-bottom:15px}.experience-title[_ngcontent-%COMP%]{display:unset}}"]})}}return e})();function pV(e,n){if(1&e&&(c(0,"div",1)(1,"span",2),f(2),u()()),2&e){const t=n.index,i=G();M(2),Le(i.skills[i.i].content[t].name)}}let gV=(()=>{class e{constructor(t){this.service=t,this.skills=this.service.skills}static{this.\u0275fac=function(i){return new(i||e)(y(qC))}}static{this.\u0275cmp=se({type:e,selectors:[["app-skill-card"]],inputs:{i:"i"},decls:2,vars:1,consts:[["style","display: inline; margin-right: 3px;",4,"ngFor","ngForOf"],[2,"display","inline","margin-right","3px"],[1,"badge","tool-badge"]],template:function(i,o){1&i&&(c(0,"div"),B(1,pV,3,1,"div",0),u()),2&i&&(M(1),A("ngForOf",o.skills[o.i].content))},dependencies:[Nn],styles:[".skill-card[_ngcontent-%COMP%]{background-color:var(--info)}.skill-progress[_ngcontent-%COMP%]{background-color:var(--textLink)}"]})}}return e})();function mV(e,n){if(1&e&&(c(0,"h2",4),f(1),u()),2&e){const t=G();M(1),Le(t.sectionTitle)}}function vV(e,n){if(1&e&&(c(0,"h3",5),f(1),u()),2&e){const t=G();M(1),Le(t.sectionSubtitle)}}function _V(e,n){if(1&e&&(c(0,"h4",6),f(1),u()),2&e){const t=G();M(1),Le(t.sectionSubsubtitle)}}const yV=["*"];let mi=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-page-section"]],inputs:{sectionTitle:"sectionTitle",sectionSubtitle:"sectionSubtitle",sectionSubsubtitle:"sectionSubsubtitle"},ngContentSelectors:yV,decls:6,vars:3,consts:[[1,"row","row-section"],["class","page-section-title",4,"ngIf"],["class","page-section-subtitle",4,"ngIf"],["class","page-section-subsubtitle",4,"ngIf"],[1,"page-section-title"],[1,"page-section-subtitle"],[1,"page-section-subsubtitle"]],template:function(i,o){1&i&&(Bh(),c(0,"div",0),B(1,mV,2,1,"h2",1),B(2,vV,2,1,"h3",2),B(3,_V,2,1,"h4",3),c(4,"div"),Hh(5),u()()),2&i&&(M(1),A("ngIf",o.sectionTitle),M(1),A("ngIf",o.sectionSubtitle),M(1),A("ngIf",o.sectionSubsubtitle))},dependencies:[Fi],styles:[".page-section-title[_ngcontent-%COMP%]{color:var(--textTitle)}.page-section-subtitle[_ngcontent-%COMP%]{color:var(--textSubtitle)}.page-section-subsubtitle[_ngcontent-%COMP%]{color:var(--text)}.row-section[_ngcontent-%COMP%]{padding-bottom:30px}"]})}}return e})(),bV=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-hobby-card"]],inputs:{imagePath:"imagePath",description:"description"},decls:5,vars:2,consts:[[1,"card-img-top","hobby-image",3,"src"]],template:function(i,o){1&i&&(c(0,"div"),m(1,"img",0),c(2,"div")(3,"p"),f(4),u()()()),2&i&&(M(1),A("src",o.imagePath,Dn),M(3),Le(o.description))},styles:[".hobby-image[_ngcontent-%COMP%]{margin-bottom:5px;border-radius:var(--radius-sm)}"]})}}return e})(),wV=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-language-card"]],inputs:{imagePath:"imagePath",description:"description"},decls:4,vars:2,consts:[[1,"row"],[1,"language-row"],[1,"language-image","mb-1",3,"src"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"div",1),m(2,"img",2),f(3),u()()),2&i&&(M(2),A("src",o.imagePath,Dn),M(1),un(" ",o.description," "))},styles:[".language-row[_ngcontent-%COMP%]{display:flex;align-items:center}.language-image[_ngcontent-%COMP%]{background-repeat:no-repeat;background-position:left center;width:45px;height:30px;margin-right:15px}"]})}}return e})();function DV(e,n){if(1&e&&(c(0,"div",48),m(1,"app-education-card",49),u()),2&e){const t=n.index;M(1),A("index",t)}}function CV(e,n){if(1&e&&(c(0,"div"),m(1,"app-experience-card",49),u()),2&e){const t=n.index;M(1),A("index",t)}}const SV=function(e){return{"skill-row-last":e}};function EV(e,n){if(1&e&&(c(0,"div",50)(1,"h4"),f(2),u(),m(3,"app-skill-card",51),u()),2&e){const t=n.$implicit,i=n.index,o=G();A("ngClass",Ri(3,SV,i===o.skills.length-1)),M(2),Le(t.category),M(1),A("i",i)}}let YC=(()=>{class e{constructor(t,i,o){this.experienceService=t,this.educationService=i,this.skillsService=o,this.coverProjects=["assets/images/Home/Cover ConcertRandomization.jpg","assets/images/Home/Cover NonverbalBehaviour.jpg","assets/images/Home/Cover SituatedMemories.jpg","assets/images/Home/Cover InSignum.jpg","assets/images/Home/Cover PopupBreak.jpg","assets/images/Home/Cover Pearly.jpg","assets/images/Home/Cover Bookflix.jpg","assets/images/Home/Cover Racoomba.png","assets/images/Home/Cover Espoora.png"],this.experience=this.experienceService.experience,this.education=this.educationService.education,this.skills=this.skillsService.skills}static{this.\u0275fac=function(i){return new(i||e)(y(zC),y(WC),y(qC))}}static{this.\u0275cmp=se({type:e,selectors:[["app-home"]],decls:111,vars:3,consts:[[1,"home-cover","text-white","d-flex","align-items-center"],[1,"container"],[1,"row","p-4"],[1,"header-name"],[1,"col-12","col-md-4"],[1,"intro-text"],[1,"row","justify-content-center"],[1,"col"],[1,"portfolio-section","portfolio-section-background"],[1,"row","m-0"],[1,"col-12","col-lg-4","col-xl-3","page-info-extra"],[1,"row"],[1,"col-md-5","col-lg-12","page-info-profile"],["src","assets/images/profilo_cartoon.png",1,"img-fluid","page-info-picture"],[1,"col","d-flex","align-items-center"],[1,"info-list"],[1,"info-list-job"],[1,"info-list-company"],["href","https://www.exprivia.it/it/","target","_blank"],[1,"info-list-where"],[1,"info-list-email"],["href","mailto:vania.ferrari00@gmail.com"],[1,"col","about-text","mb-4"],[1,"about-text","about-title"],[1,"about-text"],[2,"text-align","right"],[1,"col-lg-8","col-12"],[1,"col","left-section"],["sectionTitle","Education"],["class","education-timeline",4,"ngFor","ngForOf"],["sectionTitle","Experience"],[4,"ngFor","ngForOf"],[1,"col","right-section"],["sectionTitle","Skills"],["class","skill-row",3,"ngClass",4,"ngFor","ngForOf"],["sectionTitle","Languages","sectionSubsubtitle","My mother tongue is"],["imagePath","assets/images/languages/italian.png","description","Italian",1,"language-card"],["sectionSubsubtitle","Other:"],["imagePath","assets/images/languages/english.png","description","I have worked in English speaking environments for almost 3 years",1,"language-card"],["sectionTitle","Hobbies"],[1,"row","row-cols-3","row-cols-lg-2"],["imagePath","assets/images/hobbies/BoardGame.png","description","Board game"],["imagePath","assets/images/hobbies/Chess.png","description","Chess"],["imagePath","assets/images/hobbies/Gymnast.png","description","Artistic gymnastics"],["imagePath","assets/images/hobbies/Beer.png","description","Belgian Beers"],["id","projects",1,"projects-cover","text-white","d-flex","align-items-center","mt-4","mb-4"],[1,"container","p-4"],[1,"row","row-cols-1","row-cols-md-2","row-cols-xl-3","g-4",2,"margin-top","10px","margin-bottom","50px"],[1,"education-timeline"],[3,"index"],[1,"skill-row",3,"ngClass"],[3,"i"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),f(4,"Hello,"),u(),c(5,"h1",3),f(6,"I'm Vania!"),u(),c(7,"div",4)(8,"span",5),f(9,"Multimedia Engineer by profession, riddle-solver by nature. "),m(10,"br"),f(11,"On a mission to turn tech into portals to the wonderfully weird."),u()()()()(),c(12,"div",1)(13,"div",6)(14,"div",7)(15,"div",8)(16,"div",9)(17,"div",10)(18,"div",11)(19,"div",12),m(20,"img",13),u(),c(21,"div",14)(22,"ul",15)(23,"li",16),f(24," Software Engineer "),u(),c(25,"li",17)(26,"a",18),f(27,"Exprivia"),u()(),c(28,"li",19),f(29,"Milan (Italy)"),u(),c(30,"li",20)(31,"a",21),f(32," vania.ferrari00@gmail.com "),u()()()()()(),c(33,"div",22)(34,"h2",23),f(35,"About Me"),u(),m(36,"p",24),c(37,"p"),f(38," \u{1f453} I'm a creative soul driven by the desire to craft "),c(39,"strong"),f(40,"meaningful experiences through technology "),u(),f(41,". My passion lies in immersive tech (like VR and AR) because I believe these tools can transform the real world into a dynamic and playful space, blurring the lines between the physical and the digital. This passion led me to study Multimedia Engineering in Padova. "),m(42,"br")(43,"br"),f(44," \u{1f4a1} I'm fascinated by "),c(45,"strong"),f(46,"logic challenges "),u(),f(47,". I\u2019ve been playing chess since I was a child and have a deep love for intense board game sessions. Passion runs deep in me \u2014 I\u2019ve been teaching chess for almost ten years in a competitive club, raising a delightful squad of nerdy, brainy monsters. "),m(48,"br")(49,"br"),f(50," \u{1f331} Outside of immersive experiences, I love experimenting with "),c(51,"strong"),f(52," IoT and sensory-driven projects "),u(),f(53," in my free time. My goal is always the same: to make life easier, more fun, and more connected through creativity and automation. How many everyday problems could we solve with just a little bit of curiosity and code? "),m(54,"br")(55,"br"),f(56," \u{1f387} Since I deeply believe in technology as a bridge for human connection, I often volunteer to teach coding principles to kids through games and playful interactions. "),m(57,"br")(58,"br"),f(59," \u{1f680} Let\u2019s have fun and reach out if you have an exciting idea or initiative. I\u2019m always up for building something weird and wonderful together. "),u(),c(60,"p",25),f(61," \u2728"),c(62,"i")(63,"strong"),f(64," Play is the highest form of research "),u()(),f(65," - Albert Einstein "),u()()()()()(),c(66,"div",11)(67,"div",26)(68,"div",6)(69,"div",27)(70,"div",8)(71,"app-page-section",28),B(72,DV,2,1,"div",29),u()()()(),c(73,"div",6)(74,"div",27)(75,"div",8)(76,"app-page-section",30),B(77,CV,2,1,"div",31),u()()()()(),c(78,"div",7)(79,"div",6)(80,"div",32)(81,"div",8)(82,"app-page-section",33),B(83,EV,4,5,"div",34),u()()()(),c(84,"div",6)(85,"div",32)(86,"div",8)(87,"app-page-section",35),m(88,"app-language-card",36),u(),c(89,"app-page-section",37),m(90,"app-language-card",38),u()()()(),c(91,"div",6)(92,"div",32)(93,"div",8)(94,"app-page-section",39)(95,"div",40),m(96,"app-hobby-card",41)(97,"app-hobby-card",42)(98,"app-hobby-card",43)(99,"app-hobby-card",44),u()()()()()()()(),c(100,"div",45)(101,"div",46)(102,"h1"),f(103,"Check out some of my work!"),u()()(),c(104,"div",1)(105,"div",47)(106,"div",7)(107,"p"),f(108," ... work in progress!..."),u(),c(109,"p"),f(110,"In the meantime, I may have applied for a position at your company: give me a chance \u2014 I promise I'll show you my amazing projects!"),u()()()()),2&i&&(M(72),A("ngForOf",o.education),M(5),A("ngForOf",o.experience),M(6),A("ngForOf",o.skills))},dependencies:[vu,Nn,dV,hV,gV,mi,bV,wV],styles:['.home-cover[_ngcontent-%COMP%]{background-image:url(landscape_home6.d1e6596fd7361411.png);background-position:bottom center;height:72vh;background-attachment:fixed;background-size:cover;padding:100px 0 50px;background-color:#0009;background-blend-mode:multiply;position:relative;z-index:1}.header-name[_ngcontent-%COMP%]{font-size:3rem}.intro-text[_ngcontent-%COMP%]{display:block;font-size:1.5rem;margin-top:1rem;line-height:1.6}@media (min-width: 576px){.header-name[_ngcontent-%COMP%]{font-size:3.2rem}}@media (min-width: 768px){.header-name[_ngcontent-%COMP%]{font-size:4rem}}@media (min-width: 992px){.header-name[_ngcontent-%COMP%]{font-size:4.5rem}}.header-name-div[_ngcontent-%COMP%]{margin-bottom:100px}.header-icon[_ngcontent-%COMP%]{margin-right:10px}.projects-cover[_ngcontent-%COMP%]{background-image:url(projects_landscape2.93998ca5b7199593.png);background-position:top center;height:30vh;background-attachment:fixed;background-size:cover;background-color:#00000080;background-blend-mode:multiply}.about-title[_ngcontent-%COMP%]{color:var(--textSubtitle)}@media (max-width: 991.98px){.about-text[_ngcontent-%COMP%]{margin-left:0;margin-right:0;padding-left:0;padding-right:0}}.page-info-row[_ngcontent-%COMP%]{background-color:var(--color-background);margin-top:30px;padding:20px;border-radius:var(--radius-md);box-shadow:0 3px 26px #0003}.page-info-extra[_ngcontent-%COMP%]{background-color:var(--info);padding:20px;border-radius:var(--radius-md);background:var(--info);margin-bottom:30px}.page-info-profile[_ngcontent-%COMP%]{display:flex;justify-content:center;margin-bottom:20px}.page-info-picture[_ngcontent-%COMP%]{border-radius:var(--radius-pill);width:180px;height:180px;background-position:center center}.info-icon[_ngcontent-%COMP%]{margin-right:10px}.info-list[_ngcontent-%COMP%]{list-style:none;padding-left:0;margin-bottom:0}.info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{position:relative;padding-left:30px;margin-bottom:10px}.info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child{margin-bottom:0!important}.info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:before{content:"";position:absolute;left:0}.info-list-job[_ngcontent-%COMP%]:before{content:"\\f8fe"!important;font-family:bootstrap-icons;font-size:18px}.info-list-where[_ngcontent-%COMP%]:before{content:"\\f64b"!important;font-family:bootstrap-icons;font-size:18px}.info-list-company[_ngcontent-%COMP%]:before{content:"\\f876"!important;font-family:bootstrap-icons;font-size:18px}.info-list-email[_ngcontent-%COMP%]:before{content:"\\f32c"!important;font-family:bootstrap-icons;font-size:18px}@media (min-width: 992px){.page-info-extra[_ngcontent-%COMP%]{margin-right:20px;height:410px}}@media (min-width: 768px) and (max-width: 991.98px){.page-info-profile[_ngcontent-%COMP%]{margin-bottom:0;justify-content:flex-start}}@media (max-width: 575.98px){.education-timeline[_ngcontent-%COMP%]:before{content:none}}.skill-row[_ngcontent-%COMP%]{margin-bottom:30px}.skill-row-last[_ngcontent-%COMP%]{margin-bottom:0}.about-container[_ngcontent-%COMP%]{margin-top:40px;padding-left:30px;padding-right:30px}.about-list[_ngcontent-%COMP%]{list-style:none;padding-left:0}.language-card[_ngcontent-%COMP%]{margin-bottom:15px}']})}}return e})(),TV=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-immersive-page"]],decls:7,vars:0,consts:[["position","-1 0.5 -3","rotation","0 0 0","color","#4CC3D9"],["position","-0.2 0.2 0.45","radius","0.10"],["position","0.2 0.2 0.45","radius","0.10"],["position","0 -0.1 0.5","height","0.08","width","0.35","depth","0.1"],["position","0 0 -4","rotation","-90 0 0","width","4","height","4","color","#7BC8A4"],["color","#ECECEC"]],template:function(i,o){1&i&&(c(0,"a-scene")(1,"a-box",0),m(2,"a-sphere",1)(3,"a-sphere",2)(4,"a-box",3),u(),m(5,"a-plane",4)(6,"a-sky",5),u())}})}}return e})();const MV=function(e){return{"background-image":e}};let Vi=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-project-cover"]],inputs:{title:"title",image:"image"},decls:3,vars:4,consts:[[1,"project-cover","text-white","p-4",3,"ngStyle"],[1,"project-name"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"h1",1),f(2),u()()),2&i&&(A("ngStyle",Ri(2,MV,'url("'+o.image+'")')),M(2),Le(o.title))},dependencies:[_u],styles:[".project-cover[_ngcontent-%COMP%]{background-position:center center;background-size:cover;background-attachment:fixed;height:100vh;display:flex;justify-content:center;align-items:center;background-color:#00000080;background-blend-mode:multiply}.project-name[_ngcontent-%COMP%]{text-align:center;font-size:3rem}@media (min-width: 576px){.project-name[_ngcontent-%COMP%]{font-size:3.2rem}}@media (min-width: 768px){.project-name[_ngcontent-%COMP%]{font-size:4rem}}@media (min-width: 992px){.project-name[_ngcontent-%COMP%]{font-size:4.5rem}}"]})}}return e})(),IV=(()=>{class e{constructor(t){this.sanitizer=t,this.projects=[{name:"bookflix",about:"Bookflix is a simple system in which you can find books you\u2019re looking for, of any genre.",what:"Group project",where:"Universidad Polit\xe9cnica de Madrid",url:"https://www.fi.upm.es/?pagina=2235",duration:"September 2019 - June 2020",tools:["Figma","User-Centered Design","Interviews","Usability Testing","SUS","UEQ"]},{name:"pearly",about:"Pearly is an online platform where people can play tabletop games and game creators can test their new games for design and feasibility. Through the system, they can search for other players to play with and explore new games. Game creators can create new games from scratch or modify already existing ones. For example, a user can create his own version of an existing game, changing some rules or modifying the design of cards. In the system are included some statistics and surveys (for example: how many people played a particular game, how long the match was, the average time taken per turn). These statistics are useful for game creators to test the game, but also for players in choosing a game to play.",what:"Group project",where:"Universidad Polit\xe9cnica de Madrid",url:"https://www.fi.upm.es/?pagina=2235",duration:"February 2020 - June 2020",github:"https://github.com/miriampunzi/Pearly",tools:["Figma","Android Studio","User-Centered Design","Interviews","Ethnographical observations","Usability Testing"]},{name:"espoora",about:"In this project, we designed and analyzed the business potential of Espoora, a platform facilitating event publication, management, and participation in Espoo. We aim to enhance tourists' travel organization and discovery of city offerings, while streamlining event organizers' tasks. Our platform benefits not only visitors and organizers but also local businesses seeking visibility to those exploring or unfamiliar with the city.",what:'EIT Summer School: "Design Thinking and Scaling Services for Cities"',where:"Aalto University",url:"https://www.eiturbanmobility.eu/partners/aalto-university/",duration:"2 August 2020 \u2013 15 August 2020",tools:["Design Thinking","Personas","Scenarios","Business Modelling","SWOT Analysis","Value Proposition Canvas","Pitching"]},{name:"insignum",about:"InSignum is an interactive system to assist deaf people in their daily life at home. It consists of a smartwatch application and connected directional lights around the house, warning the user of the nature and the location of sounds at home. When something noisy is happening in the house, the smartwatch starts to vibrate, and the app displays what is happening. At the same time, the directional lights turn on guiding the user to the correct location of the sound. The color of the lights indicates the seriousness of the cause of the noise. The combination of the smartwatch app and the directional lights is to don't force users to always have the smartwatch and to have a backup system in case one of the two is not working properly. We tested the system by building a doll-house prototype with Arduino and emulating a smartwatch with Android Studio.",what:"Group project",where:"Universit\xe9 Paris-Saclay",url:"https://www.universite-paris-saclay.fr/en/education/master/computer-science/m2-human-computer-interaction",duration:"September 2020 - October 2020",video:this.getSafeVideoUrl("https://www.youtube.com/embed/iKftsyKDiDo?rel=0"),github:"https://github.com/miriampunzi/WithoutHearing",tools:["Android Studio","Arduino","User-Centered Design","Interviews","Paper Doll-House","Smartwatch"]},{name:"popupbreak",about:"PopUpBreak is a well-being desktop app with an emotional Virtual Coach (VC) that helps users in maintaining good practices for sedentary workers, as well as teaching new ones and keeping track of them. The VC can be customized by the user and, through a pop-up notification on the computer screen, it reminds them to do a pause, eye breaks, drink water, and others. Moreover, the application gives also some recommendations (e.g. how often a person should relax the eyes while working in front of a PC) and summarizes the activities done day by day. We believe that this system encourages people to work more healthily, avoiding the main consequences of a sedentary lifestyle. We use virtual coaching to reinforce users' behaviour, leading to acquiring good habits. ",what:"Group project",where:"Universit\xe9 Paris-Saclay",url:"https://www.universite-paris-saclay.fr/en/education/master/computer-science/m2-human-computer-interaction",duration:"November 2020 - December 2020",github:"https://github.com/mariacamilarg/popupbreak",tools:["Figma","Java Swing","MARC","User-Centered Design","Interviews","Emotion Design"]},{name:"situatedmemories",about:"In this project, we created a prototype of an AR-based application that allows people to attach memories to physical objects. The prototype recognizes 3D objects and shows all the attached digital media (like old photos, videos, or annotations) as floating bubbles around the item. Then, the user can retrieve the memories or save new ones. We aim to amplify users' nostalgic feelings when they look at their past memories situated in their special object, as well as make them aware of the story of that object. ",what:"Group project",where:"Universit\xe9 Paris-Saclay",url:"https://www.universite-paris-saclay.fr/en/education/master/computer-science/m2-human-computer-interaction",duration:"January 2021 - February 2021",video:this.getSafeVideoUrl("https://www.youtube.com/embed/DLVnXWCYp-4?rel=0"),tools:["AR","Unity","Figma","Vuforia","Mobile App"]},{name:"nonverbalbehaviour",about:"This research work investigates the user experience of an alternative method to teach nonverbal behavior to Embodied Conversational Agents (ECAs) in immersive environments. We overcome the limitations of the existing approaches proposing a VR game in which the player takes an active role in improving the learning models of the agents. The study explores how a game interaction in an immersive environment can improve the user experience in performing this interactive task, sharing the same space with the learning agents. ",what:"Master thesis",where:"LISN Lab @ Universit\xe9 Paris-Saclay",url:"https://www.lisn.upsaclay.fr/",duration:"April 2021 - August 2021",publicationUrl:"https://dl.acm.org/doi/10.1145/3490100.3516475",publication:"DOI: 10.1145/3490100.3516475",github:"https://github.com/miriampunzi/AuditionRoom",tools:["VR","Unity","Reinforcement Learning","ML-Agents","Gamification","Optitrack Motion Capture","Final IK","Usability Testing"]},{name:"concertrandomization",about:"This Unity application automatically generates thousands of images of random concert scenarios, with the corresponding labeled version of the image according to the category of the elements. The aim of the program is to generate enough data to train a neural network for semantic segmentation applied to concert photos.",what:"Work as Research Assistant",where:"EventLab",url:"https://www.event-lab.org/",duration:"April 2022 - September 2022",tools:["Unity","Semantic Segmentation","SMPL Model","Cinemachine","Post-Processing","Matlab"]},{name:"racoomba",about:"Get ready for a wild and wacky adventure in Racoomba! Join a mischievous trio of little chubby racoon thieves as they embark on a mission to swipe snacks and treasures from a house where the owners are away while evading the evil and relentless pursuit of robotic guardians! Navigate the house in search of treasure while avoiding a simple hoovering robot, or its counterparts armed with a circular saw, some dynamite or a shocking taser. Delay them by destroying furniture and throwing objects. Grab your treasure and bring them out of the house! Can you lead this band of little chubby furry thieves to victory or will the robots catch them in the act? ",what:"Game of my Global Game Jam 2024",duration:"27-28 January 2024 (48h)",publicationUrl:"https://globalgamejam.org/games/2024/raccoon-project-3",publication:"GGJ24 dashboard",github:"https://github.com/TheL94/GGJ24",video:this.getSafeVideoUrl("https://www.youtube.com/embed/3uZRMXiv-Rw"),tools:["Unity","Game Design","3D Modelling"]}]}getSafeVideoUrl(t){return this.sanitizer.bypassSecurityTrustResourceUrl(t)}static{this.\u0275fac=function(i){return new(i||e)(L(ag))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function NV(e,n){if(1&e&&(c(0,"li",15),f(1),u()),2&e){const t=G();M(1),un(" ",t.project[0].what," ")}}function OV(e,n){if(1&e&&(c(0,"li",16)(1,"a",17),f(2),u()()),2&e){const t=G();M(1),A("href",t.project[0].url,Dn),M(1),Le(t.project[0].where)}}function AV(e,n){if(1&e&&(c(0,"li",18),f(1),u()),2&e){const t=G();M(1),un(" ",t.project[0].duration," ")}}function RV(e,n){if(1&e&&(c(0,"li",19)(1,"a",20)(2,"small"),f(3),u()()()),2&e){const t=G();M(1),A("href",t.project[0].publicationUrl,Dn),M(2),Le(t.project[0].publication)}}function xV(e,n){if(1&e&&(c(0,"li",21)(1,"a",17),f(2,"GitHub repo"),u()()),2&e){const t=G();M(1),A("href",t.project[0].github,Dn)}}function PV(e,n){if(1&e&&(c(0,"div",24)(1,"span",25),f(2),u()()),2&e){const t=n.index,i=G(2);M(2),Le(i.project[0].tools[t])}}function kV(e,n){if(1&e&&(c(0,"li",22),B(1,PV,3,1,"div",23),u()),2&e){const t=G();M(1),A("ngForOf",t.project[0].tools)}}function FV(e,n){if(1&e&&(c(0,"div",26)(1,"div",27)(2,"div",28),m(3,"iframe",29),u()()()),2&e){const t=G();M(3),A("src",t.project[0].video,Zf)}}let Bi=(()=>{class e{constructor(t,i){this.service=t,this.sanitizer=i}ngOnInit(){this.project=this.service.projects.filter(t=>t.name==this.projectName)}getSafeVideoUrl(t){return this.sanitizer.bypassSecurityTrustResourceUrl(t)}static{this.\u0275fac=function(i){return new(i||e)(y(IV),y(ag))}}static{this.\u0275cmp=se({type:e,selectors:[["app-info-section"]],inputs:{projectName:"projectName"},decls:17,vars:8,consts:[[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background",2,"padding-bottom","30px"],[1,"row"],[1,"col-12","col-lg-8"],["sectionTitle","About"],[1,"col","page-info-extra"],[1,"info-list"],["class","info-list-what",4,"ngIf"],["class","info-list-where",4,"ngIf"],["class","info-list-duration",4,"ngIf"],["class","info-list-publication",4,"ngIf"],["class","info-list-github",4,"ngIf"],["class","info-list-tools",4,"ngIf"],["div","","class","row mt-4",4,"ngIf"],[1,"info-list-what"],[1,"info-list-where"],["target","_blank",3,"href"],[1,"info-list-duration"],[1,"info-list-publication"],["target","_blank",1,"text-truncate",3,"href"],[1,"info-list-github"],[1,"info-list-tools"],["style","display: inline; margin-right: 3px",4,"ngFor","ngForOf"],[2,"display","inline","margin-right","3px"],[1,"badge","tool-badge"],["div","",1,"row","mt-4"],[1,"col-12"],[1,"embed-responsive","embed-responsive-16by9"],["allowfullscreen","",1,"embed-responsive-item",3,"src"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3)(4,"div",4)(5,"app-page-section",5)(6,"p"),f(7),u()()(),c(8,"div",6)(9,"ul",7),B(10,NV,2,1,"li",8),B(11,OV,3,2,"li",9),B(12,AV,2,1,"li",10),B(13,RV,4,2,"li",11),B(14,xV,3,1,"li",12),B(15,kV,2,1,"li",13),u()()(),B(16,FV,4,1,"div",14),u()()()),2&i&&(M(7),un(" ",o.project[0].about," "),M(3),A("ngIf",o.project[0].what),M(1),A("ngIf",o.project[0].where),M(1),A("ngIf",o.project[0].duration),M(1),A("ngIf",o.project[0].publication),M(1),A("ngIf",o.project[0].github),M(1),A("ngIf",o.project[0].tools),M(1),A("ngIf",o.project[0].video))},dependencies:[Nn,Fi,mi],styles:['.page-info-row[_ngcontent-%COMP%]{background-color:var(--color-background);margin-top:30px;padding:20px;border-radius:var(--radius-md);box-shadow:0 3px 26px #0003}.page-info-extra[_ngcontent-%COMP%]{background:var(--info);padding:20px;border-radius:var(--radius-md);color:var(--icon);margin:0 20px}.info-icon[_ngcontent-%COMP%]{margin-right:10px}.info-list[_ngcontent-%COMP%]{list-style:none;padding-left:0;margin-bottom:0}.info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{position:relative;padding-left:30px;margin-bottom:10px}.info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child{margin-bottom:0!important}.info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:before{content:"";position:absolute;left:0}.info-list-what[_ngcontent-%COMP%]:before{content:"\\f8fe"!important;font-family:bootstrap-icons;font-size:18px}.info-list-where[_ngcontent-%COMP%]:before{content:"\\f64b"!important;font-family:bootstrap-icons;font-size:18px}.info-list-duration[_ngcontent-%COMP%]:before{content:"\\f291"!important;font-family:bootstrap-icons;font-size:18px}.info-list-publication[_ngcontent-%COMP%]:before{content:"\\f444"!important;font-family:bootstrap-icons;font-size:18px}.info-list-github[_ngcontent-%COMP%]:before{content:"\\f3ed"!important;font-family:bootstrap-icons;font-size:18px}.info-list-tools[_ngcontent-%COMP%]:before{content:"\\f5db"!important;font-family:bootstrap-icons;font-size:18px}.embed-responsive-16by9[_ngcontent-%COMP%]{position:relative;width:100%;padding-bottom:56.25%}.embed-responsive-16by9[_ngcontent-%COMP%] iframe[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;top:0;left:0}']})}}return e})(),jV=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-arrow-images"]],inputs:{imgBefore:"imgBefore",imgAfter:"imgAfter"},decls:8,vars:2,consts:[[1,"arrow-image-section"],[1,"row","d-flex","flex-wrap","align-items-center"],[1,"col-12","col-md-5","d-flex","justify-content-center"],[1,"img-fluid",3,"src"],[1,"col","d-flex","justify-content-center"],["src","/assets/images/Projects/arrow-horizontal.png",1,"img-fluid","arrow-image"]],template:function(i,o){1&i&&(c(0,"div",0)(1,"div",1)(2,"div",2),m(3,"img",3),u(),c(4,"div",4),m(5,"img",5),u(),c(6,"div",2),m(7,"img",3),u()()()),2&i&&(M(3),A("src",o.imgBefore,Dn),M(4),A("src",o.imgAfter,Dn))},styles:[".arrow-image-section[_ngcontent-%COMP%]{margin:5px 0}@media (max-width: 767.98px){.arrow-image[_ngcontent-%COMP%]{content:url(/assets/images/Projects/arrow-vertical.png);height:100px;margin:20px}}"]})}}return e})();const LV=[{path:"",component:YC},{path:"home",component:YC},{path:"aframe",component:TV},{path:"concert-randomization",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-concert-randomization"]],decls:253,vars:0,consts:[["title","Concert Randomization","image","assets/images/project-covers/ConcertRandomization.gif"],[1,"container"],["projectName","concertrandomization"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Problem"],[1,"label-strong"],[1,"row","mt-4","mb-4","d-flex","justify-content-center"],["imgBefore","assets/images/Projects/concert-randomization/before-segmentation.jpg","imgAfter","/assets/images/Projects/concert-randomization/after-segmentation.jpg"],["sectionTitle","Idea"],[1,"list-no-margin"],[1,"row","d-flex","justify-content-center"],["imgBefore","assets/images/Projects/concert-randomization/before-segmentation-2.jpg","imgAfter","/assets/images/Projects/concert-randomization/after-segmentation-2.jpg"],["sectionTitle","Elements to Randomize","sectionSubtitle","Places"],[1,"row","row-cols-2","row-cols-xl-3","g-4"],[1,"col"],["src","assets/images/Projects/concert-randomization/place-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-02.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-03.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-04.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-05.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-06.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-07.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-08.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-09.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/place-10.jpg",1,"img-fluid"],["sectionSubtitle","People"],[1,"row","row-cols-3","row-cols-md-4","row-cols-lg-6","g-4"],["src","assets/images/Projects/concert-randomization/people-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/people-02.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/people-03.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/people-04.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/people-05.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/people-06.jpg",1,"img-fluid"],["sectionSubsubtitle","Body shape randomization"],["href","https://smpl.is.tue.mpg.de/","target","_blank"],["src","assets/images/Projects/concert-randomization/body-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/body-02.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/body-03.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/body-04.jpg",1,"img-fluid"],["sectionSubsubtitle","Texture randomization"],["src","assets/images/Projects/concert-randomization/texture-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/texture-02.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/texture-03.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/texture-04.jpg",1,"img-fluid"],["sectionSubtitle","Musical instruments"],[1,"row","row-cols-4","row-cols-md-4","row-cols-lg-6","g-4"],["src","assets/images/Projects/concert-randomization/instrument-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/instrument-02.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/instrument-03.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/instrument-04.jpg",1,"img-fluid"],["sectionSubtitle","Objects"],["src","assets/images/Projects/concert-randomization/object-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/object-03.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/object-04.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/object-05.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/object-06.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/object-08.jpg",1,"img-fluid"],["sectionSubtitle","Smoke"],[1,"row","row-cols-1","row-cols-md-2","g-4"],["src","assets/images/Projects/concert-randomization/smoke-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/smoke-02.jpg",1,"img-fluid"],["sectionSubtitle","Lights"],["src","assets/images/Projects/concert-randomization/lights-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/lights-02.jpg",1,"img-fluid"],["sectionSubtitle","Sky"],["src","assets/images/Projects/concert-randomization/sky-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/sky-02.jpg",1,"img-fluid"],["sectionTitle","Development","sectionSubtitle","Placement of spawning points inside the scene"],["src","assets/images/Projects/concert-randomization/spawning-points-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/spawning-points-02.jpg",1,"img-fluid"],[1,"square-element"],[1,"square","square-musician"],[1,"square","square-dancer"],[1,"square","square-object"],[1,"square","square-smoke"],["sectionSubtitle","Crowd setup"],[1,"row","mt-2","g-4"],[1,"col-md-6","col-lg-4","col-xl-3"],["src","assets/images/Projects/concert-randomization/crowd-setup-01.jpg",1,"img-fluid"],[1,"col-md-6","col-lg-8","col-xl-6"],["src","assets/images/Projects/concert-randomization/crowd-setup-02.jpg",1,"img-fluid"],["sectionSubtitle","Animation generation"],["href","https://www.kinetix.tech/","target","_blank"],[1,"col-lg-8","col-xl-6"],["imgBefore","assets/images/Projects/concert-randomization/animation-generation-01.gif","imgAfter","/assets/images/Projects/concert-randomization/animation-generation-02.gif"],["sectionSubtitle","Timeline setup"],["href","https://docs.unity3d.com/Packages/com.unity.cinemachine@2.3/manual/index.html","target","_blank"],["src","assets/images/Projects/concert-randomization/timeline-setup.jpg",1,"img-fluid"],["sectionSubtitle","Postprocessing"],["imgBefore","assets/images/Projects/concert-randomization/pre-postprocessing.jpg","imgAfter","assets/images/Projects/concert-randomization/after-postprocessing.jpg"],["sectionSubtitle","Algorithm (pseudocode)"],[1,"row"],["src","assets/images/Projects/concert-randomization/algorithm.png",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/algorithm.jpg",1,"img-fluid","mt-2"],["sectionSubtitle","When you launch the program, you're gonna see something like this..."],["src","assets/images/Projects/concert-randomization/video-algorithm.jpg",1,"img-fluid",2,"width","100%"],["sectionTitle","Testing","sectionSubtitle","Generated data"],[1,"col-lg-8"],["src","assets/images/Projects/concert-randomization/generated-data.jpg",1,"img-fluid","mt-2"],["sectionSubtitle","Data preparation"],[1,"col-12","col-md-6","col-lg-3"],[1,"col-12","col-md-6","col-lg-4"],[1,"col","mt-4","mt-md-0"],["sectionSubtitle","Network used in Matlab"],["sectionSubtitle","Results"],[1,"row","mb-4"],["src","assets/images/Projects/concert-randomization/results-01.jpg",1,"img-fluid"],["src","assets/images/Projects/concert-randomization/results-02.jpg",1,"img-fluid"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6),f(7," We want to train a neural network that applies "),c(8,"label",7),f(9,"semantic segmentation"),u(),f(10," to concert photos to classify: musicians, musical instruments, stage decorations, etc. "),c(11,"div",8)(12,"div",4),m(13,"app-arrow-images",9),u()(),f(14," Thousands of images (original and labeled ones) are needed ("),c(15,"label",7),f(16,"Supervised Learning"),u(),f(17,") "),c(18,"p"),f(19,"But: the images are labeled by hand using a lot of patience!!"),u()()()()(),c(20,"div",3)(21,"div",4)(22,"div",5)(23,"app-page-section",10)(24,"label",7),f(25,"Automate the process!"),u(),f(26," The program: "),c(27,"ul")(28,"li"),f(29," Generates random concert scenarios (random locations, musicians, musical instruments, ... with random shapes, textures and animations) "),u(),c(30,"li"),f(31," Takes N snapshots of the generated scenario from random viewpoints "),u(),c(32,"li"),f(33,"Annotates the photos automatically."),u()(),f(34," To improve the network accuracy and avoid over-fitting, the concert scenarios to generate have to be as varied as possible: "),c(35,"ul",11)(36,"li"),f(37,"random places, people, musical instruments, objects"),u(),c(38,"li"),f(39,"random positions, textures, shapes"),u(),c(40,"li"),f(41,"random special effects, lights"),u()()(),c(42,"app-page-section")(43,"div",12)(44,"div",4),m(45,"app-arrow-images",13),u()()()()()(),c(46,"div",3)(47,"div",4)(48,"div",5)(49,"app-page-section",14)(50,"div",15)(51,"div",16),m(52,"img",17),u(),c(53,"div",16),m(54,"img",18),u(),c(55,"div",16),m(56,"img",19),u(),c(57,"div",16),m(58,"img",20),u(),c(59,"div",16),m(60,"img",21),u(),c(61,"div",16),m(62,"img",22),u(),c(63,"div",16),m(64,"img",23),u(),c(65,"div",16),m(66,"img",24),u(),c(67,"div",16),m(68,"img",25),u(),c(69,"div",16),m(70,"img",26),u()()(),c(71,"app-page-section",27)(72,"div",28)(73,"div",16),m(74,"img",29),u(),c(75,"div",16),m(76,"img",30),u(),c(77,"div",16),m(78,"img",31),u(),c(79,"div",16),m(80,"img",32),u(),c(81,"div",16),m(82,"img",33),u(),c(83,"div",16),m(84,"img",34),u()()(),c(85,"app-page-section",35)(86,"p"),f(87," HOW: "),c(88,"a",36),f(89,"Skinned Multi-Person Linear Model"),u()(),c(90,"div",28)(91,"div",16),m(92,"img",37),u(),c(93,"div",16),m(94,"img",38),u(),c(95,"div",16),m(96,"img",39),u(),c(97,"div",16),m(98,"img",40),u()()(),c(99,"app-page-section",41)(100,"div",28)(101,"div",16),m(102,"img",42),u(),c(103,"div",16),m(104,"img",43),u(),c(105,"div",16),m(106,"img",44),u(),c(107,"div",16),m(108,"img",45),u()()(),c(109,"app-page-section",46)(110,"div",47)(111,"div",16),m(112,"img",48),u(),c(113,"div",16),m(114,"img",49),u(),c(115,"div",16),m(116,"img",50),u(),c(117,"div",16),m(118,"img",51),u()()(),c(119,"app-page-section",52)(120,"div",47)(121,"div",16),m(122,"img",53),u(),c(123,"div",16),m(124,"img",54),u(),c(125,"div",16),m(126,"img",55),u(),c(127,"div",16),m(128,"img",56),u(),c(129,"div",16),m(130,"img",57),u(),c(131,"div",16),m(132,"img",58),u()()(),c(133,"app-page-section",59)(134,"div",60)(135,"div",16),m(136,"img",61),u(),c(137,"div",16),m(138,"img",62),u()()(),c(139,"app-page-section",63)(140,"div",60)(141,"div",16),m(142,"img",64),u(),c(143,"div",16),m(144,"img",65),u()()(),c(145,"app-page-section",66)(146,"div",60)(147,"div",16),m(148,"img",67),u(),c(149,"div",16),m(150,"img",68),u()()()()()(),c(151,"div",3)(152,"div",4)(153,"div",5)(154,"app-page-section",69)(155,"p"),f(156,"HOW: Overriding the method OnDrowGizmos()"),u(),c(157,"div",60)(158,"div",16),m(159,"img",70),u(),c(160,"div",16),m(161,"img",71),u()(),c(162,"div",72),m(163,"div",73),f(164," Musician Spawn Point: Select type of musician (singer, guitar, piano, drums, cello, violin, ...) "),u(),c(165,"div",72),m(166,"div",74),f(167," Dancer Spawn Point: Select dance modality (sitted on a chair, sitted on the ground, standing) "),u(),c(168,"div",72),m(169,"div",75),f(170," Object Spawn Point: Select type of object "),u(),c(171,"div",72),m(172,"div",76),f(173," Smoke Spawn Point "),u()(),c(174,"app-page-section",77),f(175," Place a crowd in the scene, which will contain random people (with random textures and body shapes), with random separation and density between them. "),c(176,"div",78)(177,"div",79),m(178,"img",80),u(),c(179,"div",81),m(180,"img",82),u()()(),c(181,"app-page-section",83),f(182," HOW: "),c(183,"a",84),f(184,"Kinetix"),u(),c(185,"div",12)(186,"div",85),m(187,"app-arrow-images",86),u()()(),c(188,"app-page-section",87)(189,"p"),f(190," HOW: "),c(191,"a",88),f(192,"Cinemachine Virtual Cameras"),u()(),m(193,"img",89),u(),c(194,"app-page-section",90),m(195,"app-arrow-images",91),u(),c(196,"app-page-section",92)(197,"div",93)(198,"div",16),m(199,"img",94),u(),c(200,"div",16),f(201," Only write the number of how many snapshots you want to generate (numCaptures), and then click play. "),m(202,"img",95),u()()(),c(203,"app-page-section",96),m(204,"img",97),u()()()(),c(205,"div",3)(206,"div",4)(207,"div",5)(208,"app-page-section",98),f(209," 10.000 images with the correspondent labeled ones "),c(210,"div",93)(211,"div",99),m(212,"img",100),u()()(),c(213,"app-page-section",101)(214,"div",93)(215,"div",102)(216,"label",7),f(217,"Database division"),u(),f(218,": "),c(219,"ul")(220,"li"),f(221,"Training set: 60%"),u(),c(222,"li"),f(223,"Validation set: 20%"),u(),c(224,"li"),f(225,"Testing set: 20%"),u()()(),c(226,"div",103)(227,"label",7),f(228,"Data augmentation"),u(),f(229,":"),m(230,"br"),f(231," Improve network accuracy by randomly transforming the original data during training "),u(),c(232,"div",104)(233,"label",7),f(234,"Class balancing with class weighting"),u(),f(235,":"),m(236,"br"),f(237," Give more importance to less dominant classes, because the learning is biased in favor of the classes with more pixels (e.g. the floor) "),u()()(),c(238,"app-page-section",105)(239,"ul")(240,"li"),f(241," Deeplab v3+: convolutional neural network (CNN) designed for semantic image segmentation "),u(),c(242,"li"),f(243," Resnet-18: pre-trained network that initializes the weights for Deeplab v3+ "),u()()(),c(244,"app-page-section",106),f(245," With only 200 images: "),c(246,"div",107)(247,"div",99),m(248,"img",108),u()(),f(249," Test the network on one image (the green and magenta regions highlight areas where the segmentation results differ from the expected ground truth): "),c(250,"div",93)(251,"div",99),m(252,"img",109),u()()()()()()())},dependencies:[mi,Vi,Bi,jV],styles:[".square-element[_ngcontent-%COMP%]{display:flex;margin-top:5px}.square[_ngcontent-%COMP%]{flex:none;width:20px;height:20px;margin-right:10px;margin-top:2px}.square-musician[_ngcontent-%COMP%]{background-color:#00f}.square-dancer[_ngcontent-%COMP%]{background-color:#0f0}.square-object[_ngcontent-%COMP%]{background-color:red}.square-smoke[_ngcontent-%COMP%]{background-color:#00e1ff}"]})}}return e})()},{path:"nonverbal-behaviour",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-nonverbal-behaviour"]],decls:302,vars:0,consts:[["title","Non-verbal Behaviour Reinfocement in VR","image","assets/images/project-covers/Cover NonverbalBehaviour.gif"],[1,"container"],["projectName","nonverbalbehaviour"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Problem"],["sectionTitle","Solution"],["sectionSubtitle","Concepts","sectionSubsubtitle",""],[1,"row"],[1,"col-lg-4"],["sectionTitle","Design","sectionSubtitle","Research questions"],[1,"row","g-4"],[1,"col-2","col-md-1","big-number"],[1,"col-10","col-md-5"],["sectionSubtitle","Users"],[1,"col-6","col-lg-4","d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/nonverbal-behaviour/user-01.jpg",1,"img-fluid","mb-2"],[1,"text-center"],["src","assets/images/Projects/nonverbal-behaviour/user-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionTitle","Game Idea: Casting for a Movie"],["sectionSubtitle","Characters"],[1,"row","g-4","mt-1"],[1,"col-3","col-lg-2"],["src","assets/images/Projects/nonverbal-behaviour/character-01.jpg",1,"img-fluid"],[1,"col-9","col-lg-4"],["src","assets/images/Projects/nonverbal-behaviour/character-02.jpg",1,"img-fluid"],["src","assets/images/Projects/nonverbal-behaviour/character-03.jpg",1,"img-fluid"],["sectionSubtitle","Environment"],[1,"col","d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/nonverbal-behaviour/environment-01.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/nonverbal-behaviour/environment-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionSubtitle","Sequence of events"],[1,"col-6","col-lg-4"],["src","assets/images/Projects/nonverbal-behaviour/events.jpg",1,"img-fluid",2,"width","100%"],[1,"col-12","col-lg-8"],[1,"row","mt-2"],[1,"col-lg-8"],[1,"ratio","ratio-16x9"],["src","https://www.youtube.com/embed/fDzpI3Kcvt4?rel=0","allowfullscreen",""],[1,"col"],["sectionSubtitle","Game interaction"],[1,"row","mb-4"],["src","assets/images/Projects/nonverbal-behaviour/interaction.jpg",1,"img-fluid"],["sectionTitle","Development","sectionSubtitle","Architecture of the system"],["src","assets/images/Projects/nonverbal-behaviour/architecture.jpg",1,"img-fluid",2,"background-color","white"],[1,"col-12","col-lg-4"],["sectionSubtitle","The environment"],["sectionSubtitle","Player motions recording"],["src","https://www.youtube.com/embed/e1_8-f_k7m4?rel=0","allowfullscreen",""],["sectionSubtitle","Motions generation for virtual actors"],["src","assets/images/Projects/nonverbal-behaviour/ik.jpg",1,"img-fluid"],["sectionSubtitle","Motions recording for human actors"],["src","assets/images/Projects/nonverbal-behaviour/recording-01.jpg",1,"img-fluid"],["src","assets/images/Projects/nonverbal-behaviour/recording-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/nonverbal-behaviour/recording-03.jpg",1,"img-fluid"],["sectionTitle","Experiment Design"],[1,"col-lg-5"],["src","assets/images/Projects/nonverbal-behaviour/experiment.jpg",1,"img-fluid"],["sectionSubtitle","Tasks"],[1,"col-12","col-md-6"],["sectionSubtitle","Evaluation methods"],["sectionTitle","Results"],["sectionSubtitle","Common","sectionSubsubtitle","Actor performances"],["sectionSubsubtitle","Smart table interaction"],["sectionSubsubtitle","Recording of emotion"],["sectionTitle","Future Work"],[1,"col-12","col-md-6","col-lg-4"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6)(7,"p"),f(8," Humans don't communicate only through words: the effectiveness of communication depends also on the nonverbal behavior content. Embodied Conversational Agents (ECAs) deserve the same: they can't just look like real humans, they also have to behave like them, communicating verbally and nonverbally, to enhance a good user experience. However, designing proper nonverbal behavior is challenging because of the risk of falling into the uncanny valley. "),u(),c(9,"p"),f(10," So far, to generate nonverbal behavior is through interpolation of keyframes or through motion capture using a body-tracking suit. However, these approaches lack adaptability, because they require either professional actors, particular technologies, too much data, or processing time. "),u()()()()(),c(11,"div",3)(12,"div",4)(13,"div",5)(14,"app-page-section",7),f(15," We want to explore a new approach for teaching nonverbal behavior to ECAs by creating a VR game, in which we gamify the process of the Human-in-the-Loop framework with human preferences. "),u(),c(16,"app-page-section",8)(17,"div",9)(18,"div",10)(19,"h4"),f(20,"VR Systems"),u(),c(21,"p"),f(22," The idea of sharing the same space with the learning agent leads to more effective training of the agent. "),u(),c(23,"p"),f(24," An immersive system provides the trainers with a means of visualization and improves the trainer experience. "),u()(),c(25,"div",10)(26,"h4"),f(27,"Human-in-the-Loop with human preferences"),u(),c(28,"p"),f(29," It learns a reward function from the human feedback, instead of using the human feedback directly as a reward function. "),u(),c(30,"p"),f(31," Users have just to express their preferences between different behavior performed by different agents (no demonstrations). "),u(),c(32,"p"),f(33," The amount of feedback from the human and the hours of experience required are reduced. "),u(),c(34,"p"),f(35," Comparisons are easier and faster to provide rather than giving an absolute numerical score. "),u()(),c(36,"div",10)(37,"h4"),f(38,"Gamification and Adaptive gameplay"),u(),c(39,"p"),f(40," We gamify the Human-in-the-Loop framework, placing the training of ECAs in a game scenario and creating a story around the learning task. "),u(),c(41,"p"),f(42," The AI is trained inside the game through the feedback of the player. They improve time by time, giving us the opportunity to create an adaptable game scenario according to the abilities of the user. "),u()()()()()()(),c(43,"div",3)(44,"div",4)(45,"div",5)(46,"app-page-section",11)(47,"div",12)(48,"div",13),f(49,"01"),u(),c(50,"div",14)(51,"h4"),f(52," How a game interaction can help in keeping engaged the users in performing the learning task? "),u(),f(53," Solving the machine learning problem of teaching nonverbal behavior is out of the scope of our work as we focus on the design of the human-system interaction. "),u(),c(54,"div",13),f(55,"02"),u(),c(56,"div",14)(57,"h4"),f(58," How users should interact with the framework in real-time applications? "),u(),c(59,"ul")(60,"li"),f(61,"How the player should give feedback to the agents."),u(),c(62,"li"),f(63," How the agent should observe the received feedback and the state of the environment to make a decision. "),u()()()()(),c(64,"app-page-section",15)(65,"div",12)(66,"div",16),m(67,"img",17),c(68,"h4",18),f(69,"Virtual Reality Gamers"),u()(),c(70,"div",16),m(71,"img",19),c(72,"h4",18),f(73,"Avatar Designers"),u()()()()()()(),c(74,"div",3)(75,"div",4)(76,"div",5)(77,"app-page-section",20)(78,"p"),f(79," The player takes the role of a movie director, who is looking for an actor for a masked character in a silent movie. Due to these particular constraints, the director has to hire an actor who better performs an emotion with the upper part of the body, without considering the facial expressions and speech. "),u(),c(80,"p"),f(81," Some aspiring actors go to the auditions for this part, but not all of them are professionals. The role of the director is to get rid of the bad actors who try to invade his audition through different rounds of the game. "),u()(),c(82,"app-page-section",21),f(83," Between the actors, some are driven by real humans and others are virtual agents. "),c(84,"div",22)(85,"div",23),m(86,"img",24),u(),c(87,"div",25)(88,"h4"),f(89,"Virtual Actor"),u(),c(90,"p"),f(91," Their performance is generated by the ML algorithm, in real-time. "),u(),c(92,"p"),f(93," Throughout their learning, the game becomes more and more difficult, because they become better at performing the emotions. "),u()(),c(94,"div",23),m(95,"img",26),u(),c(96,"div",25)(97,"h4"),f(98,"Human Actor"),u(),c(99,"p"),f(100,"Their performance is pre-recorded by human actors."),u()(),c(101,"div",23),m(102,"img",27),u(),c(103,"div",25)(104,"h4"),f(105,"Player"),u(),c(106,"p"),f(107,"Takes the role of the movie director."),u(),c(108,"p"),f(109," Doesn't know who between the actors is a \u201chuman\u201d or a \u201cvirtual\u201d agent. "),u(),c(110,"p"),f(111," Task: choose the best actor following their own personal taste. "),u()()()(),c(112,"app-page-section",28)(113,"div",12)(114,"div",29),m(115,"img",30),c(116,"h4",18),f(117,"Movie director's part"),u()(),c(118,"div",29),m(119,"img",31),c(120,"h4",18),f(121,"Actor's part"),u()()()(),c(122,"app-page-section",32)(123,"div",12)(124,"div",33),m(125,"img",34),u(),c(126,"div",35)(127,"ol")(128,"li"),f(129," The player performs an example of the emotion with only the upper part of the body. This motion is recorded to provide new data to the neural networks for the generation of the emotion. "),u(),c(130,"li"),f(131," One by one, all the actors appear in the audition room through the trapdoor to perform their emotion. After every performance, the director can ask for a replay. "),u(),c(132,"li"),f(133," The director, if needed, can call back an actor and ask for a replay of the previous performance. This phase can be skipped. "),u(),c(134,"li"),f(135," All the actors are called back in the room, appearing through the trapdoors. The director votes for the one who won the round. "),u()(),c(136,"p"),f(137," At the end of every round, the player could decide to do another one. "),u()()(),c(138,"div",36)(139,"div",37)(140,"div",38),m(141,"iframe",39),u()(),c(142,"div",40)(143,"p"),f(144," On the left, the virtual characters are training their ML models in the \u201cunderground\u201d. "),u(),c(145,"p"),f(146,"On the right, the user view with an actor on a trapdoor."),u()()()(),c(147,"app-page-section",41)(148,"div",42)(149,"div",37),m(150,"img",43),u()(),c(151,"p"),f(152,"The game experience is Seated VR."),u(),f(153," The interaction is situated in a smart table, where there are the following elements: "),c(154,"ul")(155,"li"),f(156," A screen that guides the user in the round, prompting statements and questions. For example \u201cNow it's the turn of the actor number 3. Are you ready?\u201d, \u201cDo you want to see a replay of the performance?\u201d, \u201cNow it's time to vote!\u201d. "),u(),c(157,"li"),f(158," A \u201cYES\u201d and a \u201cNO\u201d buttons, to answer the questions shown on the screen and proceed with the game round. "),u(),c(159,"li"),f(160," Some numbered buttons, that correspond to the actors, to vote for the best actor or to ask for a replay of a specific actor. "),u()()()()()(),c(161,"div",3)(162,"div",4)(163,"div",5)(164,"app-page-section",44)(165,"div",42)(166,"div",37),m(167,"img",45),u()(),c(168,"div",9)(169,"div",46)(170,"p"),f(171," The Human Actors are prerecorded-driven virtual characters, which reproduce an emotion selected from a database. The database was filled with animations directly playable in Unity, which were generated through a motion capture system using Optitrack Motive. "),u()(),c(172,"div",46)(173,"p"),f(174,' The Virtual Actors are the learning agents, with the 3 "brains". The ML-Agent Plugin gets as input the recorded emotion and the vote from the player, and the emotion-expressed gestures from the Virtual Actors. The Python side of the ML-Agent plugin is to execute the reinforcement learning algorithm for training the Virtual Actors. '),u()(),c(175,"div",46)(176,"p"),f(177," The Player interacts with the system through an HMD, HTC Vive controllers, and VIVE Tracker with Belt Strap. Their gestures are mapped onto a representing invisible avatar through Final Inverse Kinematics (Final IK). "),u()()()(),c(178,"app-page-section",47)(179,"p"),f(180," Tools: Unity ML-Agents Toolkit. Unfortunately, it doesn't provide a mechanism to learn a reward function from the human feedbacks, in order to be able to implement the Human-in-the-loop framework with human preferences. We implemented a temporary solution in which the agents only try to imitate the player movement recorded at the beginning. With this approach, it is possible to implement a reward function manually, but the feedback of the player is ignored. "),u(),c(181,"p"),f(182," Technology: HMD, HTC Vive controllers, and VIVE Tracker with Belt Strap to track users' chest movements. "),u()(),c(183,"app-page-section",48)(184,"div",36)(185,"div",37)(186,"div",38),m(187,"iframe",49),u()(),c(188,"div",40),f(189," There is an invisible character representing the real-time position of the player through Final IK and RootMotion. During the recording phase, all the rotations of the upper-body bones performed by this avatar are saved in CSV files. "),u()()(),c(190,"app-page-section",50)(191,"div",42)(192,"div",37),m(193,"img",51),u()(),f(194," Goal of the agent: imitate the user motion recorded at the beginning. The arms, head, and chest of the characters are moved using the Inverse Kinematic (IK) approach. Every character has 4 cubes used as targets for the IK: one for the left hand, one for the right hand, one for the head, and one for the chest. To imitate the player movement, every character has 3 neural networks learning in parallel: one for the left arm, one for the right arm, and one for the head and chest. Every neural network learns how to move the correspondent body part. Goal of the algorithm: predict the positions and rotations of the cubes used as targets for the IK. "),u(),c(195,"app-page-section",52)(196,"div",12)(197,"div",33),m(198,"img",53),u(),c(199,"div",33),m(200,"img",54)(201,"img",55),u(),c(202,"div",46),f(203," This is me performing some joyful motions while wearing the motion-tracking bodysuit. Tool used: OptiTrack Motion Capture System. We captured several human motions of different expressions of joy, directly playable in Unity. We created a database of 20 different performances of joy (10 made by a female interpreter and 10 by a male interpreter) to have different motions to apply on female and male avatars. "),u()()()()()(),c(204,"div",3)(205,"div",4)(206,"div",5)(207,"app-page-section",56)(208,"div",12)(209,"div",57),m(210,"img",58),u(),c(211,"div",40),f(212," Goal: investigate how game mechanisms can help in maintaining people engaged in an interactive learning task. HT: people in the gamified environment should remain engaged in the task for a longer time period and have a better user experience. How: we created another system that accomplishes the same objective of the main system, without having a game story built around it. The participants were divided equally into 2 groups: the first started testing the Game system and then switched to the other system, while the second did the opposite. "),u()()(),c(213,"app-page-section",59)(214,"div",12)(215,"div",60),f(216," For the Game system: \u201cImagine you are a movie director who organized a casting for an important role. This character wears a mask on his face for the entire movie and is always sitting. At the casting, 5 actors will show up. You have to vote for the one who best interprets the emotion of joy with the upper part of the body.\u201d "),u(),c(217,"div",60),f(218," For the No Game system: \u201cSelect the avatar who best performs the emotion of joy with the upper part of the body.\u201d "),u()()(),c(219,"app-page-section",61)(220,"ul")(221,"li"),f(222," Thinking-aloud method and observation (during the interaction with the systems) "),u(),c(223,"li"),f(224," Open-questions interview: "),c(225,"ol")(226,"li"),f(227,"What do you think about this system?"),u(),c(228,"li"),f(229,"Why did you decide to stop at that time?"),u(),c(230,"li"),f(231," Do you think the system accomplishes the goal of teaching avatars how to perform joy with upper-body language? "),u(),c(232,"li"),f(233," (FOR GAME SYSTEM) Which was your favorite part of the game? "),u(),c(234,"li"),f(235," (FOR GAME SYSTEM) Which was the part that you liked the least in the game? "),u(),c(236,"li"),f(237,"(FOR GAME SYSTEM) Would you play this game again?"),u(),c(238,"li"),f(239," (FOR GAME SYSTEM) Which was your favorite part of the game? "),u(),c(240,"li"),f(241," (FOR GAME SYSTEM) Which was the part that you liked the least in the game? "),u(),c(242,"li"),f(243,"What should be improved in the system?"),u(),c(244,"li"),f(245,"Which system do you prefer?"),u()()(),c(246,"li"),f(247,"SUS questionnaire"),u(),c(248,"li"),f(249,"GodSpeed questionnaire"),u(),c(250,"li"),f(251,"Presence questionnaire"),u()()()()()(),c(252,"div",3)(253,"div",4)(254,"div",5)(255,"app-page-section",62)(256,"p"),f(257," Our research question \u201cHow can a game interaction help in keeping the users engaged in performing the learning task?\u201d seems to be confirmed, since the data collected from all the evaluation methods show more positive outcomes in the Game one. "),u(),c(258,"p"),f(259," The fact that some participants started testing System A and others the System B did not affect at all the user experience. Most of the comments were in common between all the users. "),u(),c(260,"p"),f(261," Because of restrictions imposed by the COVID-19 crisis, it was possible to perform the experiments only with colleagues of the laboratory. So, the information collected through the experiments is biased due to the experience the test subjects have in Virtual Reality programming or Machine Learning techniques. We managed to find only 6 available participants. "),u(),c(262,"p"),f(263," What affected the user experience the most was the effectiveness of the system. The temporary solution for generating the agents' nonverbal behavior impacted the involvement in the game, sometimes decreasing the satisfaction factor. "),u()(),c(264,"app-page-section",63),f(265," Users laughing or scared, especially with impossible movements to perform in reality or weird positions of avatars. Some users noticed that the virtual characters were improving round by round. "),u(),c(266,"app-page-section",64),f(267," Almost all the users liked the SeatedVR experience and the pushing of the buttons on the smart table. One user found it too essential: they would have preferred to also manipulate some virtual objects. Some sentences prompted on the screen are not enough clear. "),u(),c(268,"app-page-section",65),f(269," Part that created more troubles! Some participants did not remember what that part was for, or they were not expecting that the actors were going to imitate the movement. Activity was found to be not intuitive enough. "),u(),c(270,"app-page-section"),f(271," The number of actors influenced the user experience "),c(272,"ul")(273,"li"),f(274," 2/6 users preferred to have more actors, because it implies more unpredictability due to the various performances, leading to a more fun experience. "),u(),c(275,"li"),f(276," 4/6 users preferred to have only 2 actors, because it is easier to keep the focus and it is easier to remember the performances. "),u()()()()()(),c(277,"div",3)(278,"div",4)(279,"div",5)(280,"app-page-section",66)(281,"div",12)(282,"div",67)(283,"h4"),f(284,"Improve ML algorithm"),u(),f(285," Validate the player's decision. Avoid impossible movements with the body by learning agents. "),u(),c(286,"div",67)(287,"h4"),f(288,"Reduce bias in testing population"),u(),f(289," Include the other users we focused on: virtual reality gamers without knowledge in machine learning. "),u(),c(290,"div",67)(291,"h4"),f(292,"Redesign recording of emotion"),u(),f(293," Try to increase the feeling of immersion without impacting the spontaneity of the movement. "),u(),c(294,"div",67)(295,"h4"),f(296,"Improve test design"),u(),f(297," Both systems should have the same number of performing actors since we discovered that it influences the user experience. "),u(),c(298,"div",67)(299,"h4"),f(300,"Explore new interactions"),u(),f(301," Include the navigation in the environment, where the player can go closer to virtual agents. Investigate the perception of the agents from a closer perspective and how this impacts the quality of the nonverbal behavior generated. "),u()()()()()()())},dependencies:[mi,Vi,Bi]})}}return e})()},{path:"situated-memories",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-situated-memories"]],decls:233,vars:0,consts:[["title","Situated Memories","image","assets/images/project-covers/Cover SituatedMemories.jpg"],[1,"container"],["projectName","situatedmemories"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Design Concept"],[1,"row","g-4"],[1,"col-2","col-md-1","big-number"],[1,"col-10","col-md-5"],["sectionTitle","Motivations"],["sectionTitle","Prototype"],[1,"row","mb-4"],[1,"col-lg-8"],["src","assets/images/Projects/situated-memories/prototype.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Navigation Map"],["src","assets/images/Projects/situated-memories/navigation-map.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Crazy scenarios"],["sectionSubtitle","Screens with a scenario"],[1,"row","row-cols-2","row-cols-md-4","row-cols-lg-5","g-4"],[1,"col"],["src","assets/images/Projects/situated-memories/screen-01.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-02.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-03.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-04.jpg",1,"img-fluid"],[1,"mt-2"],["src","assets/images/Projects/situated-memories/screen-05.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-06.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-07.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-08.jpg",1,"img-fluid"],["start","3",1,"mt-2"],["src","assets/images/Projects/situated-memories/screen-10.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-11.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-12.jpg",1,"img-fluid"],["start","6",1,"mt-2"],["src","assets/images/Projects/situated-memories/screen-13.jpg",1,"img-fluid"],["src","assets/images/Projects/situated-memories/screen-14.jpg",1,"img-fluid"],["start","9",1,"mt-2"],["sectionTitle","Development","sectionSubtitle","Tools"],[1,"col-12","col-lg-6","d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/situated-memories/unity.jpg",1,"img-fluid","mb-2"],[1,"text-center"],["src","assets/images/Projects/situated-memories/vuforia.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionSubtitle","Object scanning and saving"],[1,"col-12","col-lg-6"],["src","assets/images/Projects/situated-memories/scanner.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/situated-memories/db.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionSubtitle","Screens"],[1,"col-4","col-lg-3"],["src","assets/images/Projects/situated-memories/top-menu.jpg",1,"img-fluid","mb-2"],[1,"col-8","col-lg-3"],["src","assets/images/Projects/situated-memories/scanning.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/situated-memories/adding.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/situated-memories/bubbles.jpg",1,"img-fluid","mb-2"],["sectionTitle","Challenges"],[1,"col-2","col-lg-1","big-number"],[1,"col-10","col-lg-5"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6)(7,"div",7)(8,"div",8),f(9,"01"),u(),c(10,"div",9)(11,"h4"),f(12,"Memories situated in physical objects"),u(),f(13," Users can save memories directly on the surface of physical objects. Memories: pictures, videos, audios, drawings, or writing annotations. Objects: whatever! From a little ring to the Eiffel Tower. "),u(),c(14,"div",8),f(15,"02"),u(),c(16,"div",9)(17,"h4"),f(18,"Floating bubbles"),u(),f(19," The memories are floating around the object like little bubbles. We use Augmented Reality technology. "),u(),c(20,"div",8),f(21,"03"),u(),c(22,"div",9)(23,"h4"),f(24,"Save or retrieve your memories"),u(),f(25," First, the user has to detect the object on which the memories are saved. Then, they can record a video, or take a photo, to save to the detected object, or they can tap on a bubble to open a past memory. "),u(),c(26,"div",8),f(27,"04"),u(),c(28,"div",9)(29,"h4"),f(30,"Be nostalgic!"),u(),f(31," Feel the nostalgia! Be emotional and take care of your special memories with your special object. We believe in this way memories will become more special. "),u()()()()()(),c(32,"div",3)(33,"div",4)(34,"div",5)(35,"app-page-section",10)(36,"ul")(37,"li"),f(38,"Amplify users emotions attached to an object"),u(),c(39,"li"),f(40," Reduce consumerism! People are more likely to take care of objects with memories "),u(),c(41,"li"),f(42,"Get to know about the past history of second-hand items"),u(),c(43,"li"),f(44," Objects with memories could be placed in museums and can help in teaching "),u(),c(45,"li"),f(46,"Objects could acquire a historical relevance"),u(),c(47,"li"),f(48,"Have a backup of memories"),u()()()()()(),c(49,"div",3)(50,"div",4)(51,"div",5)(52,"app-page-section",11)(53,"div",12)(54,"div",13),m(55,"img",14),u()()(),c(56,"app-page-section",15)(57,"div",12)(58,"div",13),m(59,"img",16),u()()(),c(60,"app-page-section",17)(61,"p"),f(62," You receive as a present the ring engagement of your grand grand grand grand grand mother (this year is exchanged between generations) and you can see the marriage proposal of your grand grand grand grand grand mother associated with the ring. "),u(),c(63,"p"),f(64," You find a ring on a street, and you decide to scan it with the app. You find out it was first created in ancient Egypt, then smuggled through the mediterranean sea, then stolen by nazis from a museum in France, then returned at the end of the 2nd World War and gifted as an engagement ring.\vYou return it to the woman it belongs to that lives in a retiring room just near the street! "),u(),c(65,"p"),f(66," In the year 3000, an archeologist finds a pen, without knowing what that tool was for. So, the archeologist scans it with the app, and WOW! They discover it was for writing! "),u(),c(67,"p"),f(68," Aliens go to Earth and find an unknown object. They scan it and... "),u()(),c(69,"app-page-section",18)(70,"div",19)(71,"div",20),m(72,"img",21),u(),c(73,"div",20),m(74,"img",22),u(),c(75,"div",20),m(76,"img",23),u(),c(77,"div",20),m(78,"img",24),u()(),c(79,"ol",25)(80,"li"),f(81,"You scan your marriage ring"),u(),c(82,"li"),f(83," After the scanning, the + button appears to upload a new memory to the object "),u()(),c(84,"div",19)(85,"div",20),m(86,"img",26),u(),c(87,"div",20),m(88,"img",27),u(),c(89,"div",20),m(90,"img",28),u(),c(91,"div",20),m(92,"img",29),u()(),c(93,"ol",30)(94,"li"),f(95," You click on the + button and you upload a photo of the proposal day "),u(),c(96,"li"),f(97,"After saving, a bubble appears around the object"),u(),c(98,"li"),f(99,"Clicking on a bubble opens the correspondent memory saved"),u()(),c(100,"div",19)(101,"div",20),m(102,"img",21),u(),c(103,"div",20),m(104,"img",31),u(),c(105,"div",20),m(106,"img",32),u(),c(107,"div",20),m(108,"img",33),u()(),c(109,"ol",34)(110,"li"),f(111," 60 years later, your granddaughter is using your special ring "),u(),c(112,"li"),f(113," She scans it and retrieves all the stories uploaded during these years "),u(),c(114,"li"),f(115," She decides to upload a video and an audio related to the ring "),u()(),c(116,"div",19)(117,"div",20),m(118,"img",35),u(),c(119,"div",20),m(120,"img",36),u()(),c(121,"ol",37)(122,"li"),f(123,"The new bubble of the granddaughter appears"),u(),c(124,"li"),f(125," The new story is ready to be shared between generations of exchange of the ring! "),u()()()()()(),c(126,"div",3)(127,"div",4)(128,"div",5)(129,"app-page-section",38)(130,"div",7)(131,"div",39),m(132,"img",40),c(133,"h4",41),f(134,"Unity"),u()(),c(135,"div",39),m(136,"img",42),c(137,"h4",41),f(138,"Vuforia Object Scanner App"),u()()()(),c(139,"app-page-section",43)(140,"div",7)(141,"div",44),m(142,"img",45),u(),c(143,"div",44)(144,"p"),f(145," The scanner of 3D objects is not integrated in our interface: we used the one of Vuforia. "),u()(),c(146,"div",44),m(147,"img",46),u(),c(148,"div",44)(149,"p"),f(150," The database of the 3D objects is the one of Vuforia. The extra information related to memories are initialized at runtime in the code. "),u()()()(),c(151,"app-page-section",47)(152,"div",7)(153,"div",48),m(154,"img",49),u(),c(155,"div",50)(156,"h4"),f(157,"Top Menu"),u(),f(158," Hamburger button: for basic settings (top left). Profile button: for user settings (top right). "),u(),c(159,"div",48),m(160,"img",51),u(),c(161,"div",50)(162,"h4"),f(163,"Scanning"),u(),f(164," Scan button: to scan a new object (not present in the database). "),u(),c(165,"div",48),m(166,"img",52),u(),c(167,"div",50)(168,"h4"),f(169,"Adding a memory"),u(),f(170," Plus button: it appears when the app recognizes a previously scanned object, together with the bubbles. Once the user clicks the plus button, they can see the file browser to upload a media file. "),u(),c(171,"div",48),m(172,"img",53),u(),c(173,"div",50)(174,"h4"),f(175,"Bubbles & Memory retrieval"),u(),f(176," When a previously scanned object is detected, saved memories will be shown as colored spheres. Tapping on them will show the correspondent memory. "),u()()()()()(),c(177,"div",3)(178,"div",4)(179,"div",5)(180,"app-page-section",54)(181,"div",7)(182,"div",55),f(183,"01"),u(),c(184,"div",56)(185,"h4"),f(186,"What to do with different objects that look the same?"),u(),f(187," Almost all the objects in the world are present in multiple copies. If all the memories are shown to all of these objects... "),c(188,"ul")(189,"li"),f(190," Feature! In shops, for example, people can see how to use the object. "),u(),c(191,"li"),f(192," Problem! It can be annoying and it can affect negatively the attachment to the object. "),u()(),f(193," Solutions: "),c(194,"ul")(195,"li"),f(196," Save and retrieve stories using a code, which has to be passed with the object. "),u(),c(197,"li"),f(198,"Put a marker on the object."),u(),c(199,"li"),f(200," Make objects react with the context. For example, according to their location or to who is holding it, it shows different memories and can highlight a particular stories. "),u()()(),c(201,"div",55),f(202,"02"),u(),c(203,"div",56)(204,"h4"),f(205," What to do when an object\u2019s appearance changes as time goes by? "),u(),f(206," Objects change over time (they become older or break). "),c(207,"ul")(208,"li"),f(209," People would be careful about their objects since they inherit the memories they input. "),u(),c(210,"li"),f(211," The concept of memories saved in old objects could be lost. "),u()(),f(212," Does the memory fade away as the object decays? "),c(213,"ul")(214,"li"),f(215," Keep the digital data in case the user wants to access it in another way. But then the design concept of memories situated in objects fells. "),u(),c(216,"li"),f(217,"Delete the digital data from the database."),u()()(),c(218,"div",55),f(219,"03"),u(),c(220,"div",56)(221,"h4"),f(222,"Do we have to moderate the content? By whom?"),u(),c(223,"p"),f(224," Crowdsourced moderation: some users analyze the content of stories and decide if they are appropriate. "),u(),c(225,"h4"),f(226," Who can see what memories? Privacy issues, data osnwership "),u(),f(227," Users may want to keep the stories only for themselves or for a few intimates. Solutions: "),c(228,"ul")(229,"li"),f(230,"Code to access memories."),u(),c(231,"li"),f(232," Indicate the people to whom share the memory (like in social networks). "),u()()()()()()()()())},dependencies:[mi,Vi,Bi]})}}return e})()},{path:"popup-break",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-popup-break"]],decls:350,vars:0,consts:[["title","PopupBreak","image","assets/images/project-covers/Cover PopupBreak.jpg"],[1,"container"],["projectName","popupbreak"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Problem"],["sectionTitle","Interviews"],[1,"row","g-4"],[1,"col-2","col-md-1","big-number"],[1,"col-10","col-md-11"],["sectionTitle","Target Users"],[1,"col-12","col-md-6","d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/popup-break/user-01.jpg",1,"img-fluid","mb-2"],[1,"text-center"],["src","assets/images/Projects/popup-break/user-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionTitle","Design","sectionSubtitle","Alternative designs"],[1,"bi","bi-phone"],[1,"col-10","col-md-5"],[1,"bi","bi-laptop"],["sectionSubtitle","Features of the system"],["sectionSubtitle","Virtual Coach"],[1,"col-12","col-md-6"],[1,"row","row-cols-2","row-cols-md-3","row-cols-xl-4","g-4"],[1,"d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/popup-break/vc-01.jpg",1,"img-fluid","mb-2"],[1,"badge","bg-light","text-dark"],["src","assets/images/Projects/popup-break/vc-02.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/popup-break/vc-03.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/popup-break/vc-04.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/popup-break/vc-05.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/popup-break/vc-06.jpg",1,"img-fluid","mb-2"],["sectionTitle","Prototype"],[1,"col-12","col-xl-6"],["src","assets/images/Projects/popup-break/screen-01.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-03.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-04.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-05.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-06.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-07.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-08.jpg",1,"img-fluid","mb-2",2,"width","100%"],["src","assets/images/Projects/popup-break/screen-09.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionTitle","Usability Testing","sectionSubtitle","Illustrative Scenario"],["src","assets/images/Projects/popup-break/scenario.jpg",1,"img-fluid"],["sectionSubtitle","Video Demo"],[1,"ratio","ratio-16x9"],["src","https://www.youtube.com/embed/yFgZMnE5bU8?rel=0","allowfullscreen",""],["sectionSubtitle","From user thought to feature"],[1,"col-12","col-md-5"],[1,"col-1"],[1,"bi","bi-arrow-right"],[1,"col-11","col-md-6"],["sectionTitle","Development","sectionSubtitle","Tools"],["src","assets/images/Projects/popup-break/marc.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/popup-break/java-swing.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionSubtitle","Architecture of the system"],["src","assets/images/Projects/popup-break/architecture.jpg",1,"img-fluid","mb-2"],[1,"row"],[1,"col-12","col-lg-6"],["sectionSubtitle","State Machine"],["src","assets/images/Projects/popup-break/state-machine.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/popup-break/transitions.jpg",1,"img-fluid"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6)(7,"p"),f(8," Stationary work and study settings may lead to harmful consequences to people's physical and emotional health. Many people start to realize their problems and intend to make a change, but they still need reminders and guidance. "),u(),f(9," We did 9 interviews among students and sedentary workers, investigating their lifestyles. The common problems we found are: "),c(10,"ul")(11,"li"),f(12," Forgetting to take a pause, especially when fully focused on the work. "),u(),c(13,"li"),f(14," Forgetting drinking water or don't drink enough during the day. "),u(),c(15,"li"),f(16,"Eyesight problems due to long screen time."),u(),c(17,"li"),f(18,"Back pain due to bad posture."),u(),c(19,"li"),f(20,"Sleep insomnia due to too much blue light exposure."),u(),c(21,"li"),f(22,"Stress and tension during the week."),u()()()()()(),c(23,"div",3)(24,"div",4)(25,"div",5)(26,"app-page-section",7)(27,"div",8)(28,"div",9),f(29,"01"),u(),c(30,"div",10)(31,"p"),f(32," Routine: occupation, computer usage, sleeping, eating, drinking habits. "),u(),c(33,"ul")(34,"li"),f(35,"What is your occupation?"),u(),c(36,"li"),f(37,"Could you tell us about your routine everyday?"),u(),c(38,"li"),f(39," How many hours do you work/study in front of the computer everyday? "),u(),c(40,"li"),f(41," How structured is your routine? Do you have a fixed schedule or are you more flexible with times? "),u(),c(42,"li"),f(43," Can you tell me about the last time you had trouble falling asleep? Why do you think that happened? "),u(),c(44,"li"),f(45,"How often do you eat something while working?"),u(),c(46,"li"),f(47," How much water do you drink every day? (# glasses, # water bottles) "),u(),c(48,"li"),f(49," How would you qualify your eyesight? Do you think work affects it much? "),u()()(),c(50,"div",9),f(51,"02"),u(),c(52,"div",10)(53,"p"),f(54,"Physical habits: posture and view, problems, exercises."),u(),c(55,"ul")(56,"li"),f(57," How often do you exercise? For how long? Are you satisfied with it? "),u(),c(58,"li"),f(59," Could you tell me the story of the last time you had some sort of pain after working? Why do you think that was? (e.g. back pain, stiffness, \u2026) "),u(),c(60,"li"),f(61," Follow up: Was it due to working long hours on your laptop and how did it affect you? Did you have to go to a doctor? What were his recommendations? "),u(),c(62,"li"),f(63," How would you qualify your posture? How do you keep straight? "),u(),c(64,"li"),f(65," Are you familiar with active pauses? Do you do them? Why not? "),u()()(),c(66,"div",9),f(67,"03"),u(),c(68,"div",10)(69,"p"),f(70,"Breaks: frequence, duration, descriptions"),u(),c(71,"ul")(72,"li"),f(73," What is the longest you have worked without taking a pause? "),u(),c(74,"li"),f(75," How often do you do breaks while working? And how long are they? "),u(),c(76,"li"),f(77," Are the breaks predefined? Or do you do them voluntarily at will? "),u()()(),c(78,"div",9),f(79,"04"),u(),c(80,"div",10)(81,"p"),f(82,"Distractions: frequence, motivations, causes."),u(),c(83,"ul")(84,"li"),f(85," Do you easily distract yourself using the phone while working? Why? What do you do when you are distracted? "),u(),c(86,"li"),f(87," Can you tell me which kind of notifications you do NOT ignore? What is it about them that makes you wanna stop and pay attention to them? "),u(),c(88,"li"),f(89," Can you tell me about the last time you were interrupted while working and you didn\u2019t like it? Can you tell me about another time where you had no problem being interrupted? What was the difference? (tolerance) "),u()()()()()()()(),c(90,"div",3)(91,"div",4)(92,"div",5)(93,"app-page-section",11)(94,"div",8)(95,"div",12),m(96,"img",13),c(97,"h4",14),f(98,"Students"),u()(),c(99,"div",12),m(100,"img",15),c(101,"h4",14),f(102,"Sedentary workers"),u()()()()()()(),c(103,"div",3)(104,"div",4)(105,"div",5)(106,"app-page-section",16)(107,"div",8)(108,"div",9),m(109,"i",17),u(),c(110,"div",18)(111,"h4"),f(112,"Mobile Version"),u(),c(113,"p"),f(114,"Distractions come from that"),u(),c(115,"p"),f(116,"Can't use phone while working sometimes"),u()(),c(117,"div",9),m(118,"i",19),u(),c(119,"div",18)(120,"h4"),f(121,"Desktop App"),u(),c(122,"p"),f(123,"People have already PC open"),u(),c(124,"p"),f(125," Users that don\u2019t use PC while working are not going to use our system probably "),u()()()(),c(126,"app-page-section",20)(127,"ul")(128,"li"),f(129,' Virtual Coach (VC): working as a "ghost friend" to encourage users in applying good practices. It pop-ups on the screen. '),u(),c(130,"li"),f(131," Don't disturb mode: customize the level of intrusiveness, healthy interruptions, and alerting. "),u(),c(132,"li"),f(133,' Customize reminders: customize frequency and reminders. The user can create new ones (e.g. "Remember to take this medicine"). '),u(),c(134,"li"),f(135," Good practices section: to encourage awareness. People can start planning their routine considering them. "),u(),c(136,"li"),f(137," Habit tracker: summarize activities' data (e.g.: work times, number of breaks, liters of water drunk) daily, weekly, monthly. "),u(),c(138,"li"),f(139," Positive reinforcement: the system shows the impact on the user's health of what has been done. "),u(),c(140,"li"),f(141," Gamification: the system could reward the user according to the application of the good practices. "),u(),c(142,"li"),f(143," Calendar synchronization: to bear in mind the other things to do. VC don't pop-up during calls and meetings. "),u()()(),c(144,"app-page-section",21)(145,"div",8)(146,"div",22),f(147," Reminders: "),c(148,"ul")(149,"li"),f(150,"Do active breaks from the work, with stretching"),u(),c(151,"li"),f(152,"Do eye exercises and eye breaks from the screens"),u(),c(153,"li"),f(154,"Drink water"),u(),c(155,"li"),f(156,"Eat a healthy snack"),u(),c(157,"li"),f(158,"Keep a good posture"),u(),c(159,"li"),f(160," Mindfulness: deep breathing, mind spaces at beginning and end of the journey "),u()()(),c(161,"div",22),f(162," Extra features: "),c(163,"ul")(164,"li"),f(165," It shows emotions and facial expressions to encourage the user "),u(),c(166,"li"),f(167," It shows the exercise to perform and tip that you need to do right now "),u(),c(168,"li"),f(169," It does things alongside the user if wanted (e.g. it does eye exercises at the same time with the user) "),u()()()(),c(170,"div",23)(171,"div",24),m(172,"img",25),c(173,"h4",14),f(174,"Happiness"),u(),c(175,"span",26),f(176,"AUs: 6 + 12"),u()(),c(177,"div",24),m(178,"img",27),c(179,"h4",14),f(180,"Courageous"),u(),c(181,"span",26),f(182,"AUs: 10 + 12 + 46 + 55"),u()(),c(183,"div",24),m(184,"img",28),c(185,"h4",14),f(186,"Surprise"),u(),c(187,"span",26),f(188,"AUs: 1 + 2 + 5 + 26"),u()(),c(189,"div",24),m(190,"img",29),c(191,"h4",14),f(192,"Sadness"),u(),c(193,"span",26),f(194,"AUs: 1 + 4 + 15"),u()(),c(195,"div",24),m(196,"img",30),c(197,"h4",14),f(198,"Anger"),u(),c(199,"span",26),f(200,"AUs: 4 + 5 + 7 + 23"),u()(),c(201,"div",24),m(202,"img",31),c(203,"h4",14),f(204,"Disappointment"),u(),c(205,"span",26),f(206,"AUs: 10, 15, 29"),u()(),c(207,"div",24),m(208,"img",31),c(209,"h4",14),f(210,"Neutral"),u(),c(211,"span",26),f(212,"AUs: -"),u()()()()()()(),c(213,"div",3)(214,"div",4)(215,"div",5)(216,"app-page-section",32)(217,"div",8)(218,"div",33),m(219,"img",34),c(220,"h4"),f(221,"Welcome screen"),u(),c(222,"p"),f(223,' The VC is happy and is saying "Hi", showing a positive state of mind and a welcoming facial expression. The screen shows users their agenda for the day so that users can customize their breaks. '),u()(),c(224,"div",33),m(225,"img",35),c(226,"h4"),f(227,"Pop-up"),u(),c(228,"p"),f(229," When it is break time, the VC pops up eagerly at the corner. Users can accept it, postpone it, or deny it. "),u()(),c(230,"div",33),m(231,"img",36),c(232,"h4"),f(233,"Excercise screen"),u(),c(234,"p"),f(235," The VC will do the breathing exercise along with the user, so his facial expression represents guided respiration. The page has instructions that guide users to inhale and exhale. "),u()(),c(236,"div",33),m(237,"img",37),c(238,"h4"),f(239,"Drink reminder"),u(),c(240,"p"),f(241," When the user accepts the drinking advice. Users can choose the amount of water to take. The VC will have a proud emotion here because we want to positively reinforce the user's decision to accept a break. "),u()(),c(242,"div",33),m(243,"img",38),c(244,"h4"),f(245,"Learn more screen"),u(),c(246,"p"),f(247," Users can also check other good practices to encourage awareness. When selecting the desired one the VC will return and react accordingly to the new facts being learned. "),u()(),c(248,"div",33),m(249,"img",39),c(250,"h4"),f(251,"Information screen"),u(),c(252,"p"),f(253," This page is for users to have more information on healthy habits, like the fun facts in drinking water for example. The VC is in a surprised state because they are both learning something new. "),u()(),c(254,"div",33),m(255,"img",40),c(256,"h4"),f(257,"Statistics screen"),u(),c(258,"p"),f(259," The user can also track the evolution of their habits. Comparison of today's data to yesterday's. Weekly and monthly tendencies. The VC's emotion would depend on users' achievements. "),u()(),c(260,"div",33),m(261,"img",41),c(262,"h4"),f(263,"Achievement screen"),u(),c(264,"p"),f(265," Displayed at the end of the working hours. The VC will emphasize the user's achievements of that day. Depending on their behaviour, it will react positively or negatively. "),u()(),c(266,"div",33),m(267,"img",42),c(268,"h4"),f(269,"Customization of reminders screen"),u(),c(270,"p"),f(271," This page is for users to customize their breaking sessions, so that this application can fit every user's habits and goals. On the side, the VC is also offering some pre-set configurations recommended specifically for the user (according to their behavior so far). So his facial expression is winking, so that the user feels more guided towards accepting his suggestions. "),u()()()()()()(),c(272,"div",3)(273,"div",4)(274,"div",5)(275,"app-page-section",43),m(276,"img",44),u(),c(277,"app-page-section",45)(278,"div",46),m(279,"iframe",47),u()(),c(280,"app-page-section",48)(281,"div",8)(282,"div",49),f(283," \"I don't want to invest so much time in setting up everything. I don't want to think, too many configurations\" "),u(),c(284,"div",50)(285,"h4",14),m(286,"i",51),u()(),c(287,"div",52)(288,"ul")(289,"li"),f(290,"Include default settings."),u()()(),c(291,"div",49),f(292,' "I could be embarrassed in doing exercise in front of my colleagues" '),u(),c(293,"div",50)(294,"h4",14),m(295,"i",51),u()(),c(296,"div",52)(297,"ul")(298,"li"),f(299," Customize exercises, include some that are not so visible (like just move the neck, contract some muscles). "),u(),c(300,"li"),f(301,' Create profiles of reminders (e.g. "Work at office", "Work at home"). '),u()()(),c(302,"div",49),f(303,' "I wouldn\'t care a lot about the emotions of the Virtual Coach. How do you keep the users engaged and motivated?" '),u(),c(304,"div",50)(305,"h4",14),m(306,"i",51),u()(),c(307,"div",52)(308,"ul")(309,"li"),f(310," Show videos of people that feel great about these new habits. "),u(),c(311,"li"),f(312," Include motivational messages and reviews from other users. "),u(),c(313,"li"),f(314," Add music according to the type of exercise or break to do. "),u()()()()()()()(),c(315,"div",3)(316,"div",4)(317,"div",5)(318,"app-page-section",53)(319,"div",8)(320,"div",12),m(321,"img",54),c(322,"h4",14),f(323,"MARC"),u()(),c(324,"div",12),m(325,"img",55),c(326,"h4",14),f(327,"Java Swing"),u()()()(),c(328,"app-page-section",56),m(329,"img",57),c(330,"div",58)(331,"div",59)(332,"h4"),f(333,"MARC framework"),u(),c(334,"ul")(335,"li"),f(336," Generates in rea-time the facial animation for the given emotion. "),u(),c(337,"li"),f(338," Maps the emotions to a set of AUs combinations from our predefined library. "),u()()(),c(339,"div",59)(340,"h4"),f(341,"PopUpBreak app"),u(),c(342,"ul")(343,"li"),f(344," Takes that rendered animation and embeds it into our system in the respective screen it corresponds. "),u(),c(345,"li"),f(346," Changes screens depending on the user interaction or if there is a time for a scheduled break. "),u()()()()(),c(347,"app-page-section",60),m(348,"img",61)(349,"img",62),u()()()()())},dependencies:[mi,Vi,Bi]})}}return e})()},{path:"insignum",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-insignum"]],decls:478,vars:0,consts:[["title","InSignum","image","assets/images/project-covers/Cover InSignum.jpg"],[1,"container"],["projectName","insignum"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Problem"],[1,"row","g-4"],[1,"col-lg-10"],["src","assets/images/Projects/insignum/problem-01.jpg",1,"img-fluid"],["src","assets/images/Projects/insignum/problem-02.jpg",1,"img-fluid"],["sectionTitle","Target user"],[1,"row","mb-4"],[1,"col-2","col-lg-1"],["src","assets/images/Projects/insignum/deaf.png",1,"img-fluid"],[1,"col-4","col-lg-5"],["src","assets/images/Projects/insignum/dhh.png",1,"img-fluid"],["sectionTitle","Brainstorming"],[1,"row"],[1,"col-7","col-md-4"],["src","assets/images/Projects/insignum/brainstorming-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/brainstorming-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/brainstorming-03.jpg",1,"img-fluid"],["src","assets/images/Projects/insignum/brainstorming-04.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/brainstorming-05.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/brainstorming-06.jpg",1,"img-fluid"],["src","assets/images/Projects/insignum/brainstorming-07.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/brainstorming-08.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/brainstorming-09.jpg",1,"img-fluid"],["sectionTitle","Interviews: 2 Deaf and 1 Hard of Hearing"],["sectionTitle","Findings"],[1,"row","row-cols-1","row-cols-md-2","row-cols-xl-3","g-4"],[1,"col"],["sectionTitle","Questionnaires","sectionSubtitle","Questions"],[1,"col-12","col-md-8","col-lg-5","col-xl-5"],["src","assets/images/Projects/insignum/questionnaire-01.jpg",1,"img-fluid",2,"width","100%"],[1,"col-12","col-md-10","col-lg-7","col-xl-6"],["src","assets/images/Projects/insignum/questionnaire-02.jpg",1,"img-fluid",2,"width","100%"],["sectionSubtitle","Findings"],[1,"col-12","col-md-6"],["sectionTitle","Ideation","sectionSubtitle","Design choices"],["sectionSubtitle","Architecture of the system"],[1,"col-2","col-lg-1","big-number"],[1,"col-10","col-lg-8"],["src","assets/images/Projects/insignum/smartwatch.jpg",1,"img-fluid"],[1,"row","mt-4"],[1,"col-10","col-lg-11"],["sectionTitle","Design"],["sectionSubtitle","Storyboard"],["sectionSubtitle","Smartwatch application"],["src","assets/images/Projects/insignum/navigation-map.jpg",1,"img-fluid","mb-4"],["sectionTitle","Development","sectionSubtitle","The dollhouse"],[1,"row","row-cols-1","row-cols-md-2","row-cols-lg-3","g-4"],["src","assets/images/Projects/insignum/dollhouse-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/dollhouse-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/dollhouse-03.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/dollhouse-04.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/dollhouse-05.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/dollhouse-06.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/dollhouse-07.jpg",1,"img-fluid","mb-4"],["sectionSubtitle","The smart lighting system"],["src","assets/images/Projects/insignum/smart-light-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-03.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-04.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-05.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-06.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-07.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-08.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-09.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-10.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-11.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/insignum/smart-light-12.jpg",1,"img-fluid","mb-4"],["sectionTitle","Scenario (demo)"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6),f(7," Consciously or not, people able to hear constantly analyze sounds around them, to be able to orientate and to understand what is happening. Deaf people can only rely on visual and haptic stimuli, so their awareness is usually limited to the room in which they are. Our target user is often frustrated or anxious to know what is happening inside the house. Things as simple as someone knocking at the door, or it\u2019s raining outside, are all things we take for granted, without considering that not everyone has this luxury. "),c(8,"div",7)(9,"div",8),m(10,"img",9),u(),c(11,"div",8),m(12,"img",10),u()()()()()(),c(13,"div",3)(14,"div",4)(15,"div",5)(16,"app-page-section",11)(17,"div",12)(18,"div",13),m(19,"img",14),u(),c(20,"div",15)(21,"h4"),f(22,"Deaf"),u()(),c(23,"div",13),m(24,"img",16),u(),c(25,"div",15)(26,"h4"),f(27,"Hard of Hearing (DHH)"),u()()(),c(28,"ul")(29,"li"),f(30,"Often frustrated or anxious."),u(),c(31,"li"),f(32," Invest money in technologies from which to benefit (wearable smart tech, smart lighting solutions). "),u(),c(33,"li"),f(34,"May live alone or not."),u()()()()()(),c(35,"div",3)(36,"div",4)(37,"div",5)(38,"app-page-section",17)(39,"p"),f(40," Sounds categories (to which we associate a color in the prototype): "),u(),c(41,"ul")(42,"li"),f(43,"Alarms: fire alarm, carbon monoxide detector."),u(),c(44,"li"),f(45,"Doorbell: doorbell, phone ring, ring of a video call."),u(),c(46,"li"),f(47," Water: opened taps, water leaks, water sounds inside the house. "),u(),c(48,"li"),f(49," Electronic devices: TV sounds, computers, music from speakers, completed dryer. "),u(),c(50,"li"),f(51," Heating devices: oven. They might involve fire hazards or a fast reaction. "),u(),c(52,"li"),f(53,"Outside noise: rain, automatic watering system, lawnmower."),u()(),c(54,"p"),f(55,"Ideas for smart house systems based on visual clues:"),u(),c(56,"ul")(57,"li"),f(58," Full light system: lights on a surface area (ceiling, wall, floor). "),u(),c(59,"ul")(60,"li"),f(61,"Directional lights: to lead the user to the sound."),u(),c(62,"li"),f(63,"Ripples: to model the intensity of the sound."),u()(),c(64,"li"),f(65," Wearable device: the user would be notified of a sound by a wearable device (such as bracelets, smartwatch, smart glass). "),u(),c(66,"li"),f(67," Central portable board: digital panel the user could put anywhere in the house and on which information would be displayed. "),u(),c(68,"ul")(69,"li"),f(70,"Map of the house on which sound icons are drawn."),u(),c(71,"li"),f(72," Colored grid, where rows are rooms and columns are types of sound. "),u(),c(73,"li"),f(74," Something more abstract: a colored grid or a painting changing depending on the current sounds in the house. "),u()()(),c(75,"div",18)(76,"div",19),m(77,"img",20)(78,"img",21)(79,"img",22),u(),c(80,"div",19),m(81,"img",23)(82,"img",24)(83,"img",25),u(),c(84,"div",19),m(85,"img",26)(86,"img",27)(87,"img",28),u()()()()()(),c(88,"div",3)(89,"div",4)(90,"div",5)(91,"app-page-section",29)(92,"p"),f(93,"General:"),u(),c(94,"ol")(95,"li"),f(96," What was the last time they had difficulties communicating (during their trip for example) or encountered a problem because they couldn\u2019t hear something? "),u(),c(97,"li"),f(98,"How did you deal with the situation?"),u(),c(99,"li"),f(100," What do you think is your biggest struggle that comes from not hearing sounds? And what is your biggest struggle from not being able to communicate verbally? "),u(),c(101,"li"),f(102," What kind of problem do you encounter and that you think hearing people are absolutely not aware of? "),u(),c(103,"li"),f(104," Do you use any kind of device to help you in your daily life? Does it work well? Do you remember a time it couldn\u2019t help you? "),u(),c(105,"li"),f(106," How have the masks for COVID impacted your daily interaction and communication with other people? "),u(),c(107,"li"),f(108," Tell us about a bad experience while you tried to communicate with people wearing masks. "),u(),c(109,"li"),f(110," If there was an alternative medium to warn you of a sound going on around you, which one do you think you would prefer, a vibration or a light? "),u()(),c(111,"p"),f(112,"Specific:"),u(),c(113,"ol")(114,"li"),f(115," Tell us about a situation where you were annoyed by something in the house that you couldn\u2019t hear. "),u(),c(116,"li"),f(117," Tell me about a situation you realized there was something happening outside you would have liked to know earlier. "),u(),c(118,"li"),f(119," Tell me about a situation in which you had a problem with not understanding where a sound was coming from. "),u(),c(120,"li"),f(121," Have you developed any specific habits at home to compensate for the hearing loss? "),u(),c(122,"li"),f(123," What sounds are you the most concerned about because you can\u2019t hear them? "),u(),c(124,"li"),f(125," How would you prefer to be alerted? Examples: vibration on the wrist, or lights, or messages on screens "),u(),c(126,"li"),f(127," Where would you like to receive an alert of a sound? From the room where the sound is happening or from a central place? Or other? "),u(),c(128,"li"),f(129," On which occasions would you prefer to use an automated system that closes something after a certain time? (for example, an automated system that closes fridge doors). "),u(),c(130,"li"),f(131," On which occasions would you prefer to use a detection system that alerts you to close something? "),u(),c(132,"li"),f(133," For people with hearing aids (not completely deaf people): Would you prefer for nonurgent alarms to be louder or replaced with lights? "),u(),c(134,"li"),f(135," Do you find yourself more often in dangerous situations at home or outside your home? "),u()()()()()(),c(136,"div",3)(137,"div",4)(138,"div",5)(139,"app-page-section",30)(140,"div",31)(141,"div",32)(142,"h4"),f(143," Annoying situations because of something that they could not hear "),u(),c(144,"ul")(145,"li"),f(146,"No knowledge about their own sounds."),u(),c(147,"li"),f(148,"Unnecessary careful to don't make noise."),u(),c(149,"li"),f(150," Daylight conditions don't allow them to realize the warning lights. "),u()()(),c(151,"div",32)(152,"h4"),f(153,"Situations related to sounds happening outside the house"),u(),c(154,"ul")(155,"li"),f(156," Fear that someone sneak in through the windows when they fell asleep with the window open. "),u(),c(157,"li"),f(158," Neighbors ring the bell when something bad is happening (e.g. flooding). "),u()()(),c(159,"div",32)(160,"h4"),f(161,"Sounds are they most concerned about"),u(),c(162,"ul")(163,"li"),f(164," Sounds that convey some degree of danger (e.g. burglars sneaking in the house, broken boiler, fires, or water running). "),u(),c(165,"li"),f(166," Sounds in the kitchen are more important as they are more dangerous. "),u(),c(167,"li"),f(168,"Loudness of the TV."),u()()(),c(169,"div",32)(170,"h4"),f(171," Where do they find themselves more often in dangerous situations "),u(),c(172,"ul")(173,"li"),f(174," They believe that accidents happen more often at home rather than outside. "),u(),c(175,"li"),f(176," Outside there are occasions where they can just \u201cfollow\u201d the rest of the people. For example during an evacuation of a place. "),u()()(),c(177,"div",32)(178,"h4"),f(179," Where they would like to receive the warning for the sounds "),u(),c(180,"ul")(181,"li"),f(182," A handheld portable device (like a wristband), since a device for every room could be expensive, and an object to carry all the time is uncomfortable. "),u(),c(183,"li"),f(184," Warning lights on wall or floor (no ceiling because it's harder to notice). In general, at eye level. "),u(),c(185,"li"),f(186," Arrows or light movements to indicate the location of the sound, and colours represent sounds (e.g. blue lights directing to the kitchen could mean open tap). "),u(),c(187,"li"),f(188," No central place, to don't check in that place all the time. "),u()()(),c(189,"div",32)(190,"h4"),f(191," Development of any specific habits at home to compensate with the hearing loss "),u(),c(192,"ul")(193,"li"),f(194," Actively paying close attention to everything, making sure that lights, stoves, or home appliances are off, and taps and windows are closed. "),u(),c(195,"li"),f(196," Linking visual cues to sounds (e.g. turn on the extraction hood light every time she turns it on). "),u(),c(197,"li"),f(198," Checking often the smartphone, especially if they are waiting for someone. "),u(),c(199,"li"),f(200," Asking people to insist ontexting and calling several times, when they don't answer. "),u()()(),c(201,"div",32)(202,"h4"),f(203," Situations they didn't understand where a sound was coming from "),u(),c(204,"ul")(205,"li"),f(206,"Very annoying."),u(),c(207,"li"),f(208," Feeling vibrations, but don't know how to interpret them. "),u(),c(209,"li"),f(210,"Neighbor moving a sliding door making noise."),u()()()()()()()(),c(211,"div",3)(212,"div",4)(213,"div",5)(214,"app-page-section",33)(215,"p"),f(216," Sent it to deaf associations, Facebook pages targeting deaf people, friends of deaf people, in 3 different languages (English, French, and Spanish). "),u(),c(217,"ul")(218,"li"),f(219," What sounds in their home our users find most crucial to be alerted about. "),u(),c(220,"li"),f(221," Whether the sounds they themselves make are relevant to them or not. "),u(),c(222,"li"),f(223," Whether a qualitative evaluation (ON/OFF) of the sounds in their environment is enough or they would value a quantitative approach (Loudness). "),u(),c(224,"li"),f(225," How the user interprets colors: location of the sound, type of sound. "),u(),c(226,"li"),f(227," What colors they instinctively correlate with what kind of sound. "),u(),c(228,"li"),f(229," What colors they instinctively correlate with what room in the house. "),u(),c(230,"li"),f(231," Whether the user would find most valuable in a centralized information panel somewhere in their house or some sort of portable/wearable system. "),u(),c(232,"li"),f(233," For both options above, how the user reacted and interpreted our specific solutions. "),u(),c(234,"li"),f(235," If our system used lights to alert its user, where they would prefer to have them placed. "),u()(),c(236,"div",7)(237,"div",34),m(238,"img",35),u(),c(239,"div",36),m(240,"img",37),u()()(),c(241,"app-page-section",38)(242,"div",7)(243,"div",39)(244,"h4"),f(245,"Ranking of importance of sounds:"),u(),c(246,"li"),f(247,"Doorbell (93%)"),u(),c(248,"li"),f(249,"Water Taps (77%)"),u(),c(250,"li"),f(251,"Smoke/Fire Detector (72%)"),u(),c(252,"li"),f(253,"Major Appliances (66%)"),u(),c(254,"li"),f(255,"Ventilation and Heating (55%)"),u(),c(256,"li"),f(257,"Small Appliances (55%)"),u(),c(258,"li"),f(259,"Broken Glass (50%)"),u(),c(260,"li"),f(261,"Alarm Clock (50%)"),u(),c(262,"li"),f(263,"Sounds from people in the house (44%)"),u(),c(264,"li"),f(265,"Phones & Faxes (38%)"),u(),c(266,"li"),f(267,"Consumer Electronics (38%)"),u(),c(268,"li"),f(269,"Rain/Wind outside (38%)"),u(),c(270,"li"),f(271,"Street Sounds (16%)"),u(),c(272,"li"),f(273,"Neighbors Sounds (16%)"),u()(),c(274,"div",39)(275,"h4"),f(276,"Location of lights in each room:"),u(),c(277,"ul")(278,"li"),f(279,"ceiling (44%)"),u(),c(280,"li"),f(281,"molding (61%)"),u(),c(282,"li"),f(283,"walls (50%)"),u(),c(284,"li"),f(285,"skirting board (38%)"),u(),c(286,"li"),f(287,"floor (50%)."),u()(),c(288,"h4"),f(289,"Wearable component to:"),u(),c(290,"ul")(291,"li"),f(292,"access cameras in the house (44% strongly agreed)"),u(),c(293,"li"),f(294,"snooze/dismiss notifications (70% strongly agreed)"),u(),c(295,"li"),f(296,"know which object is making sound (66% strongly agreed)"),u(),c(297,"li"),f(298," know where the sound is coming from (55% strongly agreed) "),u()(),c(299,"h4"),f(300," Preference for haptic feedback through such wearable device: "),u(),c(301,"ul")(302,"li"),f(303,"vibration (55%)"),u(),c(304,"li"),f(305,"squeeze (0%)"),u(),c(306,"li"),f(307,"taps (0%)"),u(),c(308,"li"),f(309,"a combination of all 3 modes (33%)"),u()()()()()()()(),c(310,"div",3)(311,"div",4)(312,"div",5)(313,"app-page-section",40)(314,"ul")(315,"li"),f(316," 61% want to be aware of their own sounds "),m(317,"br"),f(318," 38 % said they had no interest in that "),m(319,"br"),f(320," \u2192 include their own sounds. "),u(),c(321,"li"),f(322," 72% want to have insights into the intensity of the sounds "),m(323,"br"),f(324," 22% had no interest in that "),m(325,"br"),f(326,"\u2192 include volume. "),u(),c(327,"li"),f(328," 68% correlated sound with the type of objects that are producing it "),m(329,"br"),f(330," 32% correlated it with the type where it is coming from "),m(331,"br"),f(332,"\u2192 set the first one as the default, but allow customization "),u(),c(333,"li"),f(334," Some users would prefer this system to be unrecognizable by visitors as a hearing aid "),m(335,"br"),f(336,"Others did not seem to mind at all "),m(337,"br"),f(338,"\u2192 bridge this gap and design for transparency. "),u(),c(339,"li"),f(340," Users know what object is making a sound mostly for House Map and Decorative Abstract object "),m(341,"br"),f(342,"They are aware of object\u2019s location only with House Map. "),m(343,"br"),f(344,"Grid representing different rooms did not test well for either question. "),m(345,"br"),f(346,"\u2192 access to a centralized House Map could be very fruitful but not necessarily the main attraction of the ideal solution. "),u()()(),c(347,"app-page-section",41)(348,"div",18)(349,"div",42),f(350,"01"),u(),c(351,"div",43)(352,"h4"),f(353,"Vibrating wearable smartwatch"),u(),c(354,"p"),f(355,"WearOS application that alerts to any sound in the house."),u(),m(356,"img",44),u()(),c(357,"div",45)(358,"div",42),f(359,"02"),u(),c(360,"div",46)(361,"h4"),f(362,"House-wide smart lightning"),u(),c(363,"p"),f(364," Indicates the direction to the noise source in case the smartwatch is for some reason not accessible. "),u(),c(365,"p"),f(366,"Easy to set up:"),u(),c(367,"ul")(368,"li"),f(369," Replace ceiling light bulbs with smart-home alternatives "),u(),c(370,"li"),f(371,"Install a light bulb on top of each door."),u()()()(),c(372,"p"),f(373," 2 different alert channels: less anxiety when not paying attention to one of them. "),u(),c(374,"ol")(375,"li"),f(376," The light in the room the user is currently in changes color. "),u(),c(377,"li"),f(378," A notification pop-up in the smartwatch containing location and nature of the sound. "),u()(),c(379,"p"),f(380," A notification pop-up in the smartwatch containing location and nature of the sound. "),u()()()()(),c(381,"div",3)(382,"div",4)(383,"div",5)(384,"app-page-section",47)(385,"app-page-section",48)(386,"p"),f(387," \u201cDiana is a deaf person who lives alone. She is feeling bad at her home, she usually has strong migraine attacks. After having breakfast and try to do some cleaning she has to go to the sofa to lie and rest a bit because she cannot stand the headache anymore. While sleeping on the sofa, she feels a vibration in her smartwatch that slightly wakes her up, then she sees a blue light moving toward the other part of the house. Then she checks the screen of the smartwatch and sees a drop icon with the text, water tap running in the big bathroom. She stands up and goes to close it right before it starts to overflow.\u201d "),u(),c(388,"p"),f(389," \u201cDiana is still in the shower. The light turns red. She get out of the shower to check her smartwatch. She sees a fire alarm icon appear on the screen and takes all of the screen (as it is an emergencies all other notifications are secondary). She clicks on it and see that the kitchen fire alarm is on then she gets there and sees that the radiator started to catch fire\u201d "),u()(),c(390,"app-page-section",49)(391,"p"),f(392,"Navigation map"),u(),m(393,"img",50),f(394," Home screen: shows what is currently happening in the house. \u201cYou have everything under control\u201d when there are no notifications. "),c(395,"ul")(396,"li"),f(397,"Notifications screen: list of all received notifications."),u(),c(398,"li"),f(399," Actions screen: status of the house. It shows: "),c(400,"ul")(401,"li"),f(402," map of the house with icons on locations of noise sources; "),u(),c(403,"li"),f(404," views of the cameras that are around the house (if present); "),u(),c(405,"li"),f(406,"sensors status."),u()()(),c(407,"li"),f(408," Setting screen: "),c(409,"ul")(410,"li"),f(411,"editing house map or names of rooms;"),u(),c(412,"li"),f(413,"configuring sensors and lights;"),u(),c(414,"li"),f(415," define notification settings (priorities or colors of lights) "),u()()()()()()()()(),c(416,"div",3)(417,"div",4)(418,"div",5)(419,"app-page-section",51)(420,"div",52)(421,"div",32),m(422,"img",53),u(),c(423,"div",32),m(424,"img",54),u(),c(425,"div",32),m(426,"img",55),u(),c(427,"div",32),m(428,"img",56),u(),c(429,"div",32),m(430,"img",57),u(),c(431,"div",32),m(432,"img",58),u(),c(433,"div",32),m(434,"img",59),u()()(),c(435,"app-page-section",60)(436,"div",52)(437,"div",32),m(438,"img",61),u(),c(439,"div",32),m(440,"img",62),u(),c(441,"div",32),m(442,"img",63),u(),c(443,"div",32),m(444,"img",64),u(),c(445,"div",32),m(446,"img",65),u(),c(447,"div",32),m(448,"img",66),u(),c(449,"div",32),m(450,"img",67),u(),c(451,"div",32),m(452,"img",68),u(),c(453,"div",32),m(454,"img",69),u(),c(455,"div",32),m(456,"img",70),u(),c(457,"div",32),m(458,"img",71),u(),c(459,"div",32),m(460,"img",72),u()()()()()(),c(461,"div",3)(462,"div",4)(463,"div",5)(464,"app-page-section",73)(465,"ol")(466,"li"),f(467," The user is cooking in the kitchen. Suddenly, the light of the room becomes green and the smartwatch starts to vibrate. They have to check the smartwatch to see what is happening. "),m(468,"br"),f(469," (A person is ringing the bell to deliver a package to the user, so they are testing the notification function and the camera view from the smartwatch). "),u(),c(470,"li"),f(471," The user decides to have breakfast in the living room watching the TV. When they turn on the TV, the light of the living room turns on as well to indicate that the TV is turned on. The user does not want to have this permanent notification, so he decides to deactivate it for 20 minutes. "),m(472,"br"),f(473," (The user is testing the function of deactivating the light and smartwatch notifications for a given amount of time). "),u(),c(474,"li"),f(475," While the user is watching the TV, the light of the room becomes red to indicate that an emergency is happening. Unfortunately, the smartwatch is out of battery, so the user has to follow the path designed by the lights around the house and discover what is happening. "),m(476,"br"),f(477," (The user can test the path built from the lights around the house. Following them, he is able to find that there is a problem in the kitchen: they forgot to close the oven properly). "),u()()()()()()())},dependencies:[mi,Vi,Bi]})}}return e})()},{path:"pearly",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-pearly"]],decls:378,vars:0,consts:[["title","Pearly","image","assets/images/project-covers/Cover Pearly.jpg"],[1,"container"],["projectName","pearly"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Problem"],[1,"row","g-4"],[1,"col-2","col-md-1","big-number"],[1,"col-10","col-md-5"],["sectionTitle","Idea"],[1,"col-12","col-md-6"],["sectionSubtitle","Target Users"],["src","assets/images/Projects/pearly/users-01.jpg",1,"img-fluid","mb-2"],[1,"text-center"],["src","assets/images/Projects/pearly/users-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionTitle","Analysis of Context of use","sectionSubtitle","Ethnographical observations"],[1,"row","mb-4"],[1,"col-lg-8"],["src","assets/images/Projects/pearly/observation-template.jpg",1,"img-fluid",2,"background-color","white"],[1,"row"],[1,"col-12","col-lg-6"],[1,"col-7","col-md-4"],["src","assets/images/Projects/pearly/observation-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/pearly/observation-02.jpg",1,"img-fluid"],["src","assets/images/Projects/pearly/observation-04.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/pearly/observation-05.jpg",1,"img-fluid"],["src","assets/images/Projects/pearly/observation-06.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/pearly/observation-07.jpg",1,"img-fluid"],["sectionSubtitle","Environment analysis"],["src","assets/images/Projects/pearly/environment-analysis.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Interviews"],[1,"col","d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/pearly/interview-01.jpg",1,"img-fluid","mb-2"],["sectionTitle","Design Thinking","sectionSubtitle","Task Scenarios"],["src","assets/images/Projects/pearly/scenario-01.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/scenario-02.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Value Proposition Canvas"],["src","assets/images/Projects/pearly/valuepropcanvas-01.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/valuepropcanvas-02.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","User Journey Map"],["src","assets/images/Projects/pearly/journey-01.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/journey-02.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Task organization model"],["src","assets/images/Projects/pearly/taskmodel-01.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/taskmodel-02.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Sequence of events"],[1,"col-4","col-lg-3"],["src","assets/images/Projects/pearly/lowfi-phone-01.jpg",1,"img-fluid","mb-4",2,"width","100%"],[1,"col-12","col-lg-9"],["src","assets/images/Projects/pearly/lowfi-phone-02.jpg",1,"img-fluid","mb-4",2,"width","100%"],[1,"col-6","col-lg-3"],["src","assets/images/Projects/pearly/lowfi-tablet-01.jpg",1,"img-fluid","mb-4",2,"width","100%"],["src","assets/images/Projects/pearly/lowfi-tablet-02.jpg",1,"img-fluid","mb-4"],["sectionTitle","Usability Testing","sectionSubtitle","Tasks"],["src","assets/images/Projects/pearly/task-01.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/task-02.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Observation sheet"],["sectionSubtitle","Interview"],["src","assets/images/Projects/pearly/interview.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Results"],["src","assets/images/Projects/pearly/effectiveness-01.jpg",1,"img-fluid","mb-4","mt-4",2,"background-color","white"],["src","assets/images/Projects/pearly/efficiency-01.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/effectiveness-02.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/efficiency-02.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubsubtitle","SUS"],["src","assets/images/Projects/pearly/sus-01.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/sus-02.jpg",1,"img-fluid","mb-2"],["sectionSubtitle","Comparison"],["sectionTitle","High-Fidelity Prototype","sectionSubtitle","Navigation map"],["src","assets/images/Projects/pearly/map.jpg",1,"img-fluid"],["sectionSubtitle","Screens from Android App"],[1,"row","row-cols-2","row-cols-md-3","row-cols-xl-4","g-4"],[1,"d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/pearly/screen-01.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-02.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-03.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-04.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-05.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-06.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-07.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-08.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-09.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-10.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-11.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/pearly/screen-12.jpg",1,"img-fluid","mb-2"],["sectionTitle","Usability Testing","sectionSubtitle","Effectiveness analysis"],["src","assets/images/Projects/pearly/effectiveness-03.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/effectiveness-04.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","Efficiency analysis"],["src","assets/images/Projects/pearly/efficiency-03.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/efficiency-04.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/efficiency-05.jpg",1,"img-fluid","mb-4",2,"background-color","white"],["src","assets/images/Projects/pearly/efficiency-06.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","SUS"],["src","assets/images/Projects/pearly/sus-03.jpg",1,"img-fluid",2,"background-color","white"],["sectionSubtitle","UEQ"],["src","assets/images/Projects/pearly/ueq.jpg",1,"img-fluid",2,"background-color","white"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6)(7,"div",7)(8,"div",8),f(9,"01"),u(),c(10,"div",9),f(11," There is no possibility to play tabletop games with friends when: "),c(12,"ul")(13,"li"),f(14,"they are not in the same place;"),u(),c(15,"li"),f(16,"someone forgot to bring or does not have the game;"),u(),c(17,"li"),f(18,"the game is not available in an electronic version."),u()()(),c(19,"div",8),f(20,"02"),u(),c(21,"div",9),f(22," It's difficult to test new games in terms of the design or feasibility of rules, amongst other aspects. Game creators need every time to find players to play with. "),u()()()()()(),c(23,"div",3)(24,"div",4)(25,"div",5)(26,"app-page-section",10)(27,"div",7)(28,"div",11)(29,"h4"),f(30,"Social network to play games online"),u(),f(31," From well-known to new ones. Find people to play with (friends or online people around the world). Discover games looking at people profiles (what they created, what they played). Game publishing houses can sponsor their games. "),u(),c(32,"div",11)(33,"h4"),f(34,"Create new games or modify existing ones"),u(),f(35," Create new games from scratch. Download templates of existing games and modify them to create a new version. Create more accessible games for people with special needs (e.g. UNO for color blindness). "),u(),c(36,"div",11)(37,"h4"),f(38,"Test games through statistics and surveys"),u(),f(39," How many people played, how long the match was, how difficult it was, the average time it took per turn. Game creators can understand how well the game works, and eventually change the rules or the cards. Users can choose a game based on its statistics. "),u(),c(40,"div",11)(41,"h4"),f(42,"Improve test design"),u(),f(43," Both systems should have the same number of performing actors since we discovered that it influences the user experience. "),u()()()()()(),c(44,"div",3)(45,"div",4)(46,"div",5)(47,"app-page-section",12)(48,"div",7)(49,"div",11),m(50,"img",13),c(51,"h4",14),f(52,"Tabletop game players"),u(),c(53,"ul")(54,"li"),f(55,"Main goal of our team: expectation with ICT."),u(),c(56,"li"),f(57,"Characteristics: people who are \u201clegally\u201d able to play."),u(),c(58,"li"),f(59," Motivations: social activity, entertainment, competing (money) "),u(),c(60,"li"),f(61,"Capabilities: medium-high level of technology use."),u(),c(62,"li"),f(63," Observation: difficulty of games increases with the advancement of cognition. "),u()()(),c(64,"div",11),m(65,"img",15),c(66,"h4",14),f(67,"Game creators"),u(),c(68,"ul")(69,"li"),f(70," Main goal of our team: help in getting valuable feedback about created games and provide a platform for expansion. "),u(),c(71,"li"),f(72," Activities: creation, testing, promoting, modifying, customizing, digitalizing. "),u(),c(73,"li"),f(74," Characteristics: people who are legally able to create, for profession or for hobby. "),u(),c(75,"li"),f(76,"Capabilities: medium-high level of technology use."),u()()()()()()()(),c(77,"div",3)(78,"div",4)(79,"div",5)(80,"app-page-section",16)(81,"div",17)(82,"div",18),m(83,"img",19),u()(),c(84,"div",20)(85,"div",21)(86,"h4"),f(87,"Tabletop game players"),u(),c(88,"p"),f(89," Who: people playing card and board games. From kids, to young adults, to adults over 40 coming with their children. Most of them are students (school bags under the table). Most of them are men. Where: Epic Boardgame Caf\xe8. Small and a bit crowded, but nobody seems disturbed. Everyone stays and plays in a respectful way. Full of games to take with recommendations on the wall. What: arrival and meeting at the place, choosing a game, setting up the game, playing the game. Extra: eating, drinking, and relaxing. "),u()(),c(90,"div",21)(91,"h4"),f(92,"Game creators"),u(),c(93,"p"),f(94," Who: professional game designers who were seen in their natural context How: impossible to observe them while creating a game, so we watched videos on YouTube. Where: their room. Plenty of game-related objects. What: gaming community is very strong and they help each other a lot. The YouTuber set the limitation (principle) to start out with a game that only consists of cards because the error possibilities are decreased and cards can be multi-purposed and can have more types. "),u()()(),c(95,"div",20)(96,"div",22),m(97,"img",23)(98,"img",24),u(),c(99,"div",22),m(100,"img",25)(101,"img",26),u(),c(102,"div",22),m(103,"img",27)(104,"img",28),u()()(),c(105,"app-page-section",29)(106,"div",17)(107,"div",18),m(108,"img",30),u()()(),c(109,"app-page-section",31)(110,"div",7)(111,"div",11)(112,"div",32),m(113,"img",33),c(114,"h4",14),f(115,"Game Players"),u()(),f(116," Participants demographic: "),c(117,"ul")(118,"li"),f(119," Students and workers (developer, some engineers, professor). "),u(),c(120,"li"),f(121,"From Spain, Bulgary, Italy, America."),u(),c(122,"li"),f(123,"Between 18 and 24 years old, an adult of 53 years old."),u(),c(124,"li"),f(125,"Use smartphone and laptop. Some of them also tablet."),u()(),f(126," Findings: "),c(127,"ul")(128,"li"),f(129," On average, men play twice or three times a week, while women play once a month "),u(),c(130,"li"),f(131,"The social aspect of the activity is really important."),u(),c(132,"li"),f(133," Time constraints (like duration of the game or schedule of free time) have a great impact on the activity. "),u(),c(134,"li"),f(135,"Some players model games as a hobby."),u(),c(136,"li"),f(137,"Different games will be played in different situations."),u(),c(138,"li"),f(139," Cognitive levels have a big role in decision-making about the game. For example, games played in a family context are different then games played with friends "),u(),c(140,"li"),f(141," The number of players can vary from 2 to 10 people or more. The major trend of this answer is about 4 people. "),u(),c(142,"li"),f(143,"Play with friends, family members, or colleagues."),u(),c(144,"li"),f(145," When the game is not available: choose another one, play the online version, invent a new version. It doesn't happen a lot of times. "),u(),c(146,"li"),f(147," Not enough people to play: play in couples or groups, make people wait for the next round to play, choose another game. It happens a lot of times. "),u(),c(148,"li"),f(149," Discover new games from friend recommendations, the Internet, Youtube channels, in places with games. "),u(),c(150,"li"),f(151," Almost all of them would like to play more. What's stopping them: lack of time, study/work, friends not always available. "),u()()(),c(152,"div",11)(153,"div",32),m(154,"img",33),c(155,"h4",14),f(156,"Game creators"),u()(),f(157," Participants demographic: "),c(158,"ul")(159,"li"),f(160," 2 game creators (one followed on YouTube) for profession, 1 game creator for hobby. "),u(),c(161,"li"),f(162,"From USA, Spain."),u(),c(163,"li"),f(164,"23 and 29 years old."),u(),c(165,"li"),f(166,"Use smartphone and computer."),u()(),f(167," Findings: "),c(168,"ul")(169,"li"),f(170," Professionals prefer paper prototyping, while the hobby-creator prefers coding and printing games. "),u(),c(171,"li"),f(172," Process of game creation: "),c(173,"ol")(174,"li"),f(175," Brainstorming session (take ideas also from other games). "),u(),c(176,"li"),f(177," From a week up to 1-2 months: figure out all the details of the idea. "),u(),c(178,"li"),f(179," Make a prototype: physical tools, laminate elements when they feel it achieved a good version. "),u(),c(180,"li"),f(181," Playtests: alone, discovering scenarios and new, unexpected outcomes. The rules are getting more fixed. "),u()()(),c(182,"li"),f(183," Hobby-creator is influenced by external factors (requests from friends) and is limited by the used technology. "),u(),c(184,"li"),f(185,' Experience and playtests reveal if the design is good or bad. The "core idea" is very important. '),u(),c(186,"li"),f(187," Important design decisions consider the age and cognitive levels of the target group and the number of players. The competitiveness and excitement of the game have a high priority. "),u(),c(188,"li"),f(189," Early testing with friends or on their own. Then, testing in game conventions or dedicated events. "),u(),c(190,"li"),f(191," Considered data during testing: body language, analysis of actions, elements used, questionnaires, and interviews. "),u(),c(192,"li"),f(193," Time to perform a playtest: length of game * 120% + Q&A. "),u(),c(194,"li"),f(195," Promote games through game conventions and through online game community-related platforms. "),u(),c(196,"li"),f(197,"Difficulties: discover problems in late-stage."),u()()()()()()()(),c(198,"div",3)(199,"div",4)(200,"div",5)(201,"app-page-section",34)(202,"div"),m(203,"img",35),u(),c(204,"div"),m(205,"img",36),u()(),c(206,"app-page-section",37)(207,"div"),m(208,"img",38),u(),c(209,"div"),m(210,"img",39),u()(),c(211,"app-page-section",40)(212,"div"),m(213,"img",41),u(),c(214,"div"),m(215,"img",42),u()(),c(216,"app-page-section",43)(217,"div"),m(218,"img",44),u(),c(219,"div"),m(220,"img",45),u()()()()(),c(221,"div",3)(222,"div",4)(223,"div",5)(224,"app-page-section",46)(225,"div",20)(226,"h4"),f(227,"Smartphone"),u(),c(228,"div",47),m(229,"img",48),u(),c(230,"div",49),m(231,"img",50),c(232,"ul")(233,"li"),f(234,"People should be in the same room while playing."),u(),c(235,"li"),f(236," The user needs to scan the playing surface to start playing. "),u(),c(237,"li"),f(238," AR Mode during the playing: it is possible to switch between AR Mode (where the cards on the table are displayed) and card view mode (where only your cards are displayed). "),u(),c(239,"li"),f(240," Search and add a friend manually (like in social media) to play with. "),u(),c(241,"li"),f(242,"Friends, followers, followings."),u(),c(243,"li"),f(244," Game-oriented approach: the user first selects the game and then select the action. "),u()()()(),c(245,"div",20)(246,"h4"),f(247,"Tablet"),u(),c(248,"div",51),m(249,"img",52),u(),c(250,"div",49),m(251,"img",53),c(252,"ul")(253,"li"),f(254,"People can play remotely."),u(),c(255,"li"),f(256,"Add a friend sending the code (like Kahoot)."),u(),c(257,"li"),f(258,"No friends, only followers and followings."),u(),c(259,"li"),f(260," Action-oriented: the user first selects the action and then select the game. "),u()()()()()()()(),c(261,"div",3)(262,"div",4)(263,"div",5)(264,"app-page-section",54)(265,"div"),m(266,"img",55)(267,"img",56),u()(),c(268,"app-page-section",57)(269,"ul")(270,"li"),f(271,"Is this task completed successfully?"),u(),c(272,"li"),f(273,"Number of errors"),u(),c(274,"li"),f(275,"Number of clicks"),u(),c(276,"li"),f(277,"Actions performed incorrectly related to the errors"),u(),c(278,"li"),f(279,"Non-verbal communication"),u()()(),c(280,"app-page-section",58)(281,"div"),m(282,"img",59),u()(),c(283,"app-page-section",60)(284,"div"),f(285," The tablet prototype achieved a higher score amongst users regarding every usability attribute. "),c(286,"div"),m(287,"img",61),u(),c(288,"div"),m(289,"img",62),u(),c(290,"div"),m(291,"img",63),u(),c(292,"div"),m(293,"img",64),u()()(),c(294,"app-page-section",65)(295,"div",7)(296,"div",11)(297,"div",32),m(298,"img",66),c(299,"h4",14),f(300,"Phone prototype score: 58.33"),u()()(),c(301,"div",11)(302,"div",32),m(303,"img",67),c(304,"h4",14),f(305,"Tablet prototype score: 76.66"),u()()()()(),c(306,"app-page-section",68)(307,"div",7)(308,"div",11)(309,"div",32)(310,"h4"),f(311,"Smartphone"),u(),f(312," Complex Difficulties in remembering all the cards, due to the changing between \u201ccard view\u201d and \u201ctable view\u201d (AR functionality) Interesting idea of AR Difficulties to interpret buttons Frustrations with not working buttons (not implemented features) Mandatory step of reading game rules Error in the number of participants Next buttons are provided in the bottom right (accessible in a comfortable way) Lofical flow of actions "),u()(),c(313,"div",11)(314,"div",32)(315,"h4"),f(316,"Tablet"),u(),f(317," Easy to use All the cards are shown on the screen (bigger size of the screen) No AR support provided Buttons have labels that help the user Frustrations with not working buttons (not implemented features) The user can skip game rules Participants join automatically the game Next buttons in the set-up of the game is uncomfortable to click and difficult to see Confusing flow of actions "),u()(),c(318,"div"),f(319," The tablet prototype achieved a higher score amongst users regarding every usability attribute. However, if we zoom in more into the problems and certain aspects of the prototypes, we can find problems with both of them. \u2192 tablet prototype as the basis of the next iteration, including positive aspects of the phone prototype. "),u()()()()()(),c(320,"div",3)(321,"div",4)(322,"div",5)(323,"app-page-section",69),m(324,"img",70),u(),c(325,"app-page-section",71)(326,"div",72)(327,"div",73),m(328,"img",74),u(),c(329,"div",73),m(330,"img",75),u(),c(331,"div",73),m(332,"img",76),u(),c(333,"div",73),m(334,"img",77),u(),c(335,"div",73),m(336,"img",78),u(),c(337,"div",73),m(338,"img",79),u(),c(339,"div",73),m(340,"img",80),u(),c(341,"div",73),m(342,"img",81),u(),c(343,"div",73),m(344,"img",82),u(),c(345,"div",73),m(346,"img",83),u(),c(347,"div",73),m(348,"img",84),u(),c(349,"div",73),m(350,"img",85),u()()()()()(),c(351,"div",3)(352,"div",4)(353,"div",5)(354,"app-page-section",86)(355,"div",20)(356,"div",18),m(357,"img",87),u(),c(358,"div",18),m(359,"img",88),u()()(),c(360,"app-page-section",89)(361,"div",20)(362,"div",18),m(363,"img",90),u(),c(364,"div",18),m(365,"img",91),u(),c(366,"div",18),m(367,"img",92),u(),c(368,"div",18),m(369,"img",93),u()()(),c(370,"app-page-section",94)(371,"div",20)(372,"div",18),m(373,"img",95),u()()(),c(374,"app-page-section",96)(375,"div",20)(376,"div",18),m(377,"img",97),u()()()()()()())},dependencies:[mi,Vi,Bi]})}}return e})()},{path:"bookflix",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-bookflix"]],decls:561,vars:0,consts:[["title","Bookflix","image","assets/images/project-covers/Cover Bookflix.gif"],[1,"container"],["projectName","bookflix"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Motivation"],["sectionSubtitle","Users"],[1,"row","g-4"],[1,"col","d-flex","flex-column","justify-content-center"],["src","assets/images/Projects/bookflix/users-01.jpg",1,"img-fluid","mb-2"],[1,"text-center"],["src","assets/images/Projects/bookflix/users-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionSubtitle","User research","sectionSubtitle","Questionnaire (Google Forms)"],["sectionSubtitle","Interviews (face to face)"],[1,"col-12","col-md-6"],["sectionSubtitle","Results"],[1,"row"],[1,"col-lg-4"],["src","assets/images/Projects/bookflix/results-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/results-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/results-03.jpg",1,"img-fluid"],["sectionTitle","Data elaboration","sectionSubtitle","Points of view"],["sectionSubtitle","Personas"],["src","assets/images/Projects/bookflix/personas-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/personas-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/personas-03.jpg",1,"img-fluid"],["sectionSubtitle","Task scenarios"],[1,"col","col-12","col-lg-10","col-xl-6"],["src","assets/images/Projects/bookflix/task-scenarios-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/task-scenarios-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/task-scenarios-03.jpg",1,"img-fluid"],["sectionSubtitle","Hierarchical Task Analysis"],["src","assets/images/Projects/bookflix/hierarchical-task-analysis.jpg",1,"img-fluid"],["sectionSubtitle","Environment analysis"],[1,"col-12","col-md-8","col-lg-4"],["src","assets/images/Projects/bookflix/environmental-analysis-01.jpg",1,"img-fluid"],[1,"col-12","col-lg-8"],[1,"col-8","col-md-8","col-lg-4"],["src","assets/images/Projects/bookflix/environmental-analysis-02.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/environmental-analysis-03.jpg",1,"img-fluid"],["sectionTitle","Low-fidelity prototype","sectionSubtitle","Alternative designs"],[1,"row","g-4","alternative-designs"],[1,"col-2","col-md-1","big-number"],[1,"bi","bi-phone"],[1,"col-10","col-md-5"],[1,"bi","bi-tablet"],["sectionSubtitle","Navigation map"],["src","assets/images/Projects/bookflix/navigation-map-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/navigation-map-02.jpg",1,"img-fluid"],["sectionSubtitle","Tasks"],[1,"col-12","col-md-6","d-flex","flex-column","justify-content-center"],[1,"ratio","ratio-16x9"],["src","https://www.youtube.com/embed/wjWDS0WioIE?rel=0","allowfullscreen",""],["src","https://www.youtube.com/embed/55hqRHnWoFA?rel=0","allowfullscreen",""],["sectionSubsubtitle","TASK 1: Search, Read and Dark Mode"],["src","assets/images/Projects/bookflix/tasks-01.jpg",1,"img-fluid","mb-4"],["sectionSubsubtitle","TASK 2: Add a friend"],["sectionSubsubtitle","TASK 3: Leave a Review"],["sectionSubsubtitle","TASK 4: Look for Friend Activity"],["sectionSubsubtitle","TASK 5: Discover and read"],["sectionTitle","High-fidelity prototype","sectionSubtitle","Tasks"],["src","https://www.youtube.com/embed/7b5-3cD95VA?rel=0","allowfullscreen",""],["src","https://www.youtube.com/embed/taSAuFhNfgQ?rel=0","allowfullscreen",""],["sectionSubtitle","Smartphone screens"],[1,"row","row-cols-2","row-cols-md-3","row-cols-lg-4","g-4"],[1,"col"],["src","assets/images/Projects/bookflix/smartphone-01.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-02.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-03.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-04.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-05.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-06.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-07.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-08.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-09.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-10.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-11.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-12.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-13.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-14.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-15.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-16.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-17.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-18.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-19.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/smartphone-20.jpg",1,"img-fluid"],["sectionSubtitle","Tablet screens"],[1,"row","row-cols-1","row-cols-md-2","row-cols-lg-3","g-4"],["src","assets/images/Projects/bookflix/tablet-01.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-02.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-03.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-04.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-05.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-06.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-07.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-08.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-09.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-10.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-11.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-12.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-13.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-14.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-15.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-16.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-17.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-18.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-19.jpg",1,"img-fluid"],["src","assets/images/Projects/bookflix/tablet-20.jpg",1,"img-fluid"],["sectionSubtitle","Comparison"],["src","assets/images/Projects/bookflix/comparison-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/comparison-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/comparison-03.jpg",1,"img-fluid"],["sectionTitle","Usability testing","sectionSubtitle","Research Question"],["sectionSubtitle","Material organization"],["src","assets/images/Projects/bookflix/questionnaires-01.jpg",1,"img-fluid","mb-2"],["src","assets/images/Projects/bookflix/questionnaires-02.jpg",1,"img-fluid","mb-2",2,"width","100%"],["sectionTitle","Results"],["sectionSubtitle","Metrics of the tasks"],["src","assets/images/Projects/bookflix/usability-test-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/usability-test-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/usability-test-03.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/usability-test-04.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/usability-test-05.jpg",1,"img-fluid"],["sectionSubtitle","SUS"],["sectionSubtitle","UEQ"],["src","assets/images/Projects/bookflix/ueq-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/ueq-02.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/ueq-03.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/ueq-04.jpg",1,"img-fluid"],["sectionSubsubtitle","Confidence intervals"],["src","assets/images/Projects/bookflix/ueq-confidence-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/ueq-confidence-02.jpg",1,"img-fluid"],["sectionSubtitle","Coding"],["src","assets/images/Projects/bookflix/coding-01.jpg",1,"img-fluid","mb-4"],["src","assets/images/Projects/bookflix/coding-02.jpg",1,"img-fluid","mb-4"],["sectionSubtitle","Interpretation"],["src","assets/images/Projects/bookflix/interpretation.jpg",1,"img-fluid","mb-4"],["sectionSubtitle","Main problems of the prototypes"],[1,"col","col-12","col-md-6","col-lg-4"],[1,"col","col-12","col-md-12","col-lg-4"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6),f(7," Have a better identification of the distinct users and reasons why some of them don\u2019t read, so that we can understand if they can be included as potential users. "),c(8,"ul")(9,"li"),f(10,"Understand the reading frequency of people."),u(),c(11,"li"),f(12," Understand personal reading habits (when, where, what... they read). "),u(),c(13,"li"),f(14,"Understand the process for finding reading materials."),u()()()()()(),c(15,"div",3)(16,"div",4)(17,"div",5)(18,"app-page-section",7)(19,"div",8)(20,"div",9),m(21,"img",10),c(22,"h4",11),f(23,"Typical Reader"),u()(),c(24,"div",9),m(25,"img",12),c(26,"h4",11),f(27,"Not-usual reader"),u()()()()()()(),c(28,"div",3)(29,"div",4)(30,"div",5)(31,"app-page-section",13)(32,"div")(33,"ul")(34,"li"),f(35," To have a better idea on how to define who is a typical reader or not in Spain (threshold of read books in a year) "),u(),c(36,"li"),f(37,"To have a better vision of what the people read."),u()(),c(38,"ol")(39,"li"),f(40,"How old are you?"),u(),c(41,"li"),f(42,"Are you student or do you work?"),u(),c(43,"li"),f(44,"How many books you read per year?"),u(),c(45,"li"),f(46," How much money you spend by buying books every year? (Closed answers with ranges of money) "),u(),c(47,"li"),f(48,"Real books or e-book, which one do you prefer?"),u(),c(49,"li"),f(50,"Renting book or buying book, what makes you feel better?"),u(),c(51,"li"),f(52," Which approach do you use to find the book you want? "),c(53,"ul")(54,"li"),f(55,"kindle market"),u(),c(56,"li"),f(57,"bookshop"),u(),c(58,"li"),f(59,"library"),u(),c(60,"li"),f(61,"others _______________________"),u()()(),c(62,"li"),f(63," Do you also read one of these? "),c(64,"ul")(65,"li"),f(66,"magazine"),u(),c(67,"li"),f(68,"comics"),u(),c(69,"li"),f(70,"academic"),u(),c(71,"li"),f(72,"others _______________________"),u()()()()()(),c(73,"app-page-section",14)(74,"ol")(75,"li"),f(76,"Age - Study/Work"),u(),c(77,"li"),f(78,"How many books you read per year?"),u()(),c(79,"div",8)(80,"div",15)(81,"h4"),f(82,"For typical reader:"),u(),c(83,"ol")(84,"li"),f(85,"What do you usually read?"),u(),c(86,"li"),f(87,"Where do you usually read?"),u(),c(88,"li"),f(89," Do you feel like you would want to read more? If so, what\u2019s stopping you? "),u(),c(90,"li"),f(91,"Have you ever used an e-book reader?"),u(),c(92,"li"),f(93," (If the user doesn\u2019t use the ebook reader) Why don\u2019t you use the ebook reader? "),u(),c(94,"li"),f(95," (If the user doesn\u2019t use the ebook reader) Do you take books outside with you? Which problems do you have while doing so? "),u(),c(96,"li"),f(97," Do you read books that you only want to read or are you usually open to suggestion? "),u()()(),c(98,"div",15)(99,"h4"),f(100,"For not usual reader:"),u(),c(101,"ol")(102,"li"),f(103," Do you feel like you would want to read more? If so, what\u2019s stopping you? "),u(),c(104,"li"),f(105," Are there some books that you want to read but you don\u2019t know where to find these? "),u(),c(106,"li"),f(107," Have you ever tried an e-book reader as an alternative to classic books? "),u()()()()(),c(108,"app-page-section",16)(109,"div",17)(110,"div",18)(111,"h4"),f(112,"3 books"),u(),c(113,"p"),f(114," Threshold between readers and nonreaders. Defined through the survey data. "),u()(),c(115,"div",18)(116,"h4"),f(117," Having more time for reading, being relaxed, find easily what they want, being up-to-date. "),u(),c(118,"p"),f(119,"The main needs of the users"),u()(),c(120,"div",18)(121,"h4"),f(122,"Quick breaks, waiting dor someone, at the library"),u(),c(123,"p"),f(124," When and where users like to read. Noticed through ethnographic observation "),u()()(),m(125,"img",19)(126,"img",20)(127,"img",21),u()()()(),c(128,"div",3)(129,"div",4)(130,"div",5)(131,"app-page-section",22)(132,"div")(133,"ul")(134,"li"),f(135," Maria, 22 years old student needs some approach to easily carry books in order to comfortably read without feeling tired. "),u(),c(136,"li"),f(137," Luis, 35 years old reader needs to be able to acquire books simply and legally in order to be happy about not having to take risks looking for digital books on unreliable pages "),u(),c(138,"li"),f(139," Jose, 26 years old reader needs to find more books that he wants ASAP in order to be relaxed and enjoy the most his free moments without wasting time. "),u()()()(),c(140,"app-page-section",23),m(141,"img",24)(142,"img",25)(143,"img",26),u(),c(144,"app-page-section",27)(145,"div",17)(146,"div",28),m(147,"img",29),u(),c(148,"div",28),m(149,"img",30),u(),c(150,"div",28),m(151,"img",31),u()()(),c(152,"app-page-section",32),m(153,"img",33),u(),c(154,"app-page-section",34)(155,"div",8)(156,"div",35),m(157,"img",36),u(),c(158,"div",37)(159,"h4"),f(160,"Transport"),u(),f(161," Technical aspects: "),c(162,"ul")(163,"li"),f(164,"Probability without WiFi, or stable signal."),u()(),f(165," Physical aspects: "),c(166,"ul")(167,"li"),f(168," Not comfortable for reading (no seat, shaking or sharp break). "),u(),c(169,"li"),f(170,"Not a lot of space to lay down your baggage."),u(),c(171,"li"),f(172,"Noise might disturb reading."),u()(),f(173," Sociological aspects: "),c(174,"ul")(175,"li"),f(176,"Other passengers might disturb to get off."),u()()(),c(177,"div",38),m(178,"img",39),u(),c(179,"div",37)(180,"h4"),f(181,"Outside places"),u(),f(182," Technical aspects: "),c(183,"ul")(184,"li"),f(185,"Probability without Wifi, or stable signal."),u()(),f(186," Physical aspects: "),c(187,"ul")(188,"li"),f(189,"Some place don\u2019t have stable light to read."),u(),c(190,"li"),f(191,"Weather sometimes not suitable for reading paper books."),u()(),f(192," Sociological aspects: "),c(193,"ul")(194,"li"),f(195,"Other people can disturb by yelling."),u()()(),c(196,"div",38),m(197,"img",40),u(),c(198,"div",37)(199,"h4"),f(200,"Inside Place"),u(),f(201," Technical aspects: "),c(202,"ul")(203,"li"),f(204,"Access to Wi-Fi."),u()(),f(205," Physical aspects: "),c(206,"ul")(207,"li"),f(208,"Comfortable to read."),u(),c(209,"li"),f(210,"Nice temperature."),u(),c(211,"li"),f(212,"Sufficient light to read."),u()()()()()()()(),c(213,"div",3)(214,"div",4)(215,"div",5)(216,"app-page-section",41)(217,"div",42)(218,"div",43),m(219,"i",44),u(),c(220,"div",45)(221,"h4"),f(222,"Smartphone"),u()(),c(223,"div",43),m(224,"i",46),u(),c(225,"div",45)(226,"h4"),f(227,"Tablet"),u()()()(),c(228,"app-page-section",47),m(229,"img",48)(230,"img",49),u(),c(231,"app-page-section",50)(232,"div",8)(233,"div",51)(234,"div",52),m(235,"iframe",53),u()(),c(236,"div",51)(237,"div",52),m(238,"iframe",54),u()()()(),c(239,"app-page-section",55)(240,"div"),m(241,"img",56),c(242,"p"),f(243," You have gone down to the pool and, after a while, the sun has begun to set. However, you don't feel like going up yet, so you decide to stay for a short reading. "),u(),c(244,"p"),f(245," You decide it's a good time to finally read you Harry Potter and the Philosopher's Stone. Due to the low light, you would like to activate the dark mode. "),u()()(),c(246,"app-page-section",57)(247,"div"),m(248,"img",56),c(249,"p"),f(250," You have to add your new colleague Jay SunnyDay, who has told you that he has a Bookflix account, as a friend in Bookflix in the system. "),u()()(),c(251,"app-page-section",58)(252,"div"),m(253,"img",56),c(254,"p"),f(255,' This morning you finished the book "10 little niggers" and now you would like to add a review saying how much you liked it. '),u()()(),c(256,"app-page-section",59)(257,"div"),m(258,"img",56),c(259,"p"),f(260," You have to add to your list of pending books the one your friend Jay SunnyDay is reading now. "),u()()(),c(261,"app-page-section",60)(262,"div"),m(263,"img",56),c(264,"p"),f(265," Now that you have finished reading all your books you want to read something new but you are not sure which one. "),u(),c(266,"p"),f(267,"Read the currently most trendy book."),u()()()()()(),c(268,"div",3)(269,"div",4)(270,"div",5)(271,"app-page-section",61)(272,"div",8)(273,"div",51)(274,"div",52),m(275,"iframe",62),u()(),c(276,"div",51)(277,"div",52),m(278,"iframe",63),u()()()(),c(279,"app-page-section",64)(280,"div",65)(281,"div",66),m(282,"img",67),u(),c(283,"div",66),m(284,"img",68),u(),c(285,"div",66),m(286,"img",69),u(),c(287,"div",66),m(288,"img",70),u(),c(289,"div",66),m(290,"img",71),u(),c(291,"div",66),m(292,"img",72),u(),c(293,"div",66),m(294,"img",73),u(),c(295,"div",66),m(296,"img",74),u(),c(297,"div",66),m(298,"img",75),u(),c(299,"div",66),m(300,"img",76),u(),c(301,"div",66),m(302,"img",77),u(),c(303,"div",66),m(304,"img",78),u(),c(305,"div",66),m(306,"img",79),u(),c(307,"div",66),m(308,"img",80),u(),c(309,"div",66),m(310,"img",81),u(),c(311,"div",66),m(312,"img",82),u(),c(313,"div",66),m(314,"img",83),u(),c(315,"div",66),m(316,"img",84),u(),c(317,"div",66),m(318,"img",85),u(),c(319,"div",66),m(320,"img",86),u()()(),c(321,"app-page-section",87)(322,"div",88)(323,"div",66),m(324,"img",89),u(),c(325,"div",66),m(326,"img",90),u(),c(327,"div",66),m(328,"img",91),u(),c(329,"div",66),m(330,"img",92),u(),c(331,"div",66),m(332,"img",93),u(),c(333,"div",66),m(334,"img",94),u(),c(335,"div",66),m(336,"img",95),u(),c(337,"div",66),m(338,"img",96),u(),c(339,"div",66),m(340,"img",97),u(),c(341,"div",66),m(342,"img",98),u(),c(343,"div",66),m(344,"img",99),u(),c(345,"div",66),m(346,"img",100),u(),c(347,"div",66),m(348,"img",101),u(),c(349,"div",66),m(350,"img",102),u(),c(351,"div",66),m(352,"img",103),u(),c(353,"div",66),m(354,"img",104),u(),c(355,"div",66),m(356,"img",105),u(),c(357,"div",66),m(358,"img",106),u(),c(359,"div",66),m(360,"img",107),u(),c(361,"div",66),m(362,"img",108),u()()(),c(363,"app-page-section",109),m(364,"img",110)(365,"img",111)(366,"img",112),u()()()(),c(367,"div",3)(368,"div",4)(369,"div",5)(370,"app-page-section",113),f(371," What are the reasons for a person to choose one prototype over another? "),u(),c(372,"app-page-section",114)(373,"div",8)(374,"div",9)(375,"h4"),f(376,"Metric observation"),u(),c(377,"ul")(378,"li"),f(379,"Number of commands/actions used to carry out the task"),u(),c(380,"li"),f(381,"Time spent performing a task"),u(),c(382,"li"),f(383,"Number (or percentage) of errors"),u(),c(384,"li"),f(385,"The ratio of tasks performed correctly"),u(),c(386,"li"),f(387,"Time spent on errors and their recovery"),u(),c(388,"li"),f(389,"Frequency of use of the help (and/or manual)"),u(),c(390,"li"),f(391,"Task completion"),u(),c(392,"li"),f(393,"Satisfaction"),u()()(),c(394,"div",9)(395,"h4"),f(396,"Interview"),u(),c(397,"ul")(398,"li"),f(399,"I saw you did X. Can you tell me why?"),u(),c(400,"li"),f(401,"What is your opinion about the system?"),u(),c(402,"li"),f(403," What was the most difficult thing to do for prototype A? "),u(),c(404,"li"),f(405," If you could change one thing on the system what would it be? "),u(),c(406,"li"),f(407," What is the most natural way of accomplishing this task? "),u(),c(408,"li"),f(409,"Which prototype did you like more?"),u(),c(410,"li"),f(411,"Which one would you use for your routine?"),u()()()(),c(412,"h4"),f(413,"Questionnaires"),u(),c(414,"div",8)(415,"div",66),m(416,"img",115),u(),c(417,"div",66),m(418,"img",116),u()()()()()(),c(419,"div",3)(420,"div",4)(421,"div",5)(422,"app-page-section",117)(423,"p"),f(424,"Problem: device mismatch \u2192 bias, negative influence."),u(),c(425,"p"),f(426," We had to use a laptop screen instead of a tablet to show the prototype because the testings were performed online. "),u()(),c(427,"app-page-section",118),m(428,"img",119)(429,"img",120)(430,"img",121)(431,"img",122)(432,"img",123),u(),c(433,"app-page-section",124)(434,"div",8)(435,"div",43),f(436,"01"),u(),c(437,"div",45)(438,"h4"),f(439,"Score: 75"),u(),c(440,"p"),f(441,"Smartphone prototype"),u()(),c(442,"div",43),f(443,"02"),u(),c(444,"div",45)(445,"h4"),f(446,"Score: 58"),u(),c(447,"p"),f(448,"Tablet prototype"),u()()()(),c(449,"app-page-section",125),m(450,"img",126)(451,"img",127)(452,"img",128)(453,"img",129),u(),c(454,"app-page-section",130),m(455,"img",131)(456,"img",132),u(),c(457,"app-page-section",133),m(458,"img",134)(459,"img",135),c(460,"div",8)(461,"div",43),f(462,"01"),u(),c(463,"div",45)(464,"h4"),f(465,"Prototype related"),u(),c(466,"ul")(467,"li"),f(468,"Opinions about the overall system."),u(),c(469,"li"),f(470,"Statements about the feel and look of the prototype."),u(),c(471,"li"),f(472," Expectation code: when the user was expecting a particular action or a confirmation of an action. "),u()()(),c(473,"div",43),f(474,"02"),u(),c(475,"div",45)(476,"h4"),f(477,"Task related"),u(),c(478,"ul")(479,"li"),f(480,"Statements about actions that the user performed."),u(),c(481,"li"),f(482," Repeated and assumed things to happen strictly related to the task. "),u()()(),c(483,"div",43),f(484,"03"),u(),c(485,"div",45)(486,"h4"),f(487,"Feelings"),u(),c(488,"ul")(489,"li"),f(490,"Emotional responses to the task, prototype."),u(),c(491,"li"),f(492,"Both positive and negative."),u()()(),c(493,"div",43),f(494,"04"),u(),c(495,"div",45)(496,"h4"),f(497,"Errors"),u(),c(498,"ul")(499,"li"),f(500," Statements about different types of errors faced during the process. "),u(),c(501,"li"),f(502," Code division based on what caused them: "),c(503,"ul")(504,"li"),f(505,"device mismatch (we used a laptop to test on)"),u(),c(506,"li"),f(507,"how we formulated the tasks"),u(),c(508,"li"),f(509,"implementation"),u(),c(510,"li"),f(511,"design decisions"),u(),c(512,"li"),f(513,"user-related errors"),u()()()()()()(),c(514,"app-page-section",136),m(515,"img",137),c(516,"ul")(517,"li"),f(518," Technological issues category: comments with technical difficulties the users encountered during the usability test. "),u(),c(519,"li"),f(520," Suggestions category: any type of comment that was a suggestion for the prototype. "),u(),c(521,"li"),f(522," Negative feelings category: bigger number for the tablet prototype. "),u(),c(523,"li"),f(524," Positive feelings category: low for both prototypes, but bigger for the phone prototype. "),u()(),f(525," Conclusion: users prefer the smartphone prototype because it follows more their natural way of thinking and because of that they experience less negative feelings and more positive feelings. "),u(),c(526,"app-page-section",138)(527,"div",8)(528,"div",139)(529,"h4"),f(530,"Prototype A (Phone)"),u(),c(531,"p"),f(532," The level of completion was shown, but only with a bar, and no percentage was provided, as the users would have wanted it. "),u(),c(533,"p"),f(534," The users didn't recognize that the prototype was scrollable because of the prototype mismatch. Missing scrollbar. "),u(),c(535,"p"),f(536," Appearing text for the reviewing was automatically added, and some users wanted to delete the text. "),u(),c(537,"p"),f(538,"No profile view was provided."),u()(),c(539,"div",139)(540,"h4"),f(541,"Prototype B (Tablet)"),u(),c(542,"p"),f(543," The search functionality was joint, which means that searching for a book and a friend used the same search bar. This confused the users. "),u(),c(544,"p"),f(545," The search bar next to the search icon was actually a dropdown list to filter by categories of books. The search icon guided the user to a new searching page with a divided search option, which some users liked and some were confused by. "),u(),c(546,"p"),f(547,"No level of completion was provided on the book list."),u()(),c(548,"div",140)(549,"h4"),f(550,"Both"),u(),c(551,"p"),f(552," Missing additional text information about a book (the cover was not always readable). "),u(),c(553,"p"),f(554," Missing numbers in the top10 ranking, so users were confused about the order. "),u(),c(555,"p"),f(556," No information was given about the chronological order or the date that the book was last opened (or finished). "),u(),c(557,"p"),f(558,"In some cases, the back button was not implemented."),u(),c(559,"p"),f(560," The users associated some of the functionalities not related to reading a book, but a profile setting (e.g. put the dark mode). "),u()()()()()()()())},dependencies:[mi,Vi,Bi],styles:[".alternative-designs[_ngcontent-%COMP%]{display:flex;align-items:center}"]})}}return e})()},{path:"racoomba",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-racoomba"]],decls:3,vars:0,consts:[["title","Racoomba!","image","assets/images/project-covers/Cover Racoomba.png"],[1,"container"],["projectName","racoomba"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),u())},dependencies:[Vi,Bi]})}}return e})()},{path:"espoora",component:(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-espoora"]],decls:196,vars:0,consts:[["title","Espoora","image","assets/images/project-covers/Cover Espoora.png"],[1,"container"],["projectName","espoora"],[1,"row","justify-content-center"],[1,"col-xl-10"],[1,"portfolio-section","portfolio-section-background"],["sectionTitle","Problem"],["src","assets/images/Projects/espoora/challenge.png",1,"img-fluid","mb-4"],["src","assets/images/Projects/espoora/map.jpg",1,"img-fluid","mb-4"],["sectionTitle","User Research"],["sectionSubtitle","Personas","sectionSubsubtitle","Tim (the tourist)"],[1,"row"],[1,"col","col-12","col-lg-8"],["src","assets/images/Projects/espoora/persona-01.jpg",1,"img-fluid","mb-4",2,"width","100%"],[1,"col","col-12","col-lg-4"],["sectionSubsubtitle","Elena (the Event Organizer)"],["src","assets/images/Projects/espoora/persona-02.jpg",1,"img-fluid","mb-4",2,"width","100%"],["sectionSubtitle","Key Insights"],["sectionSubsubtitle","Technique of 5 Whys"],[1,"col","col-12","col-md-6"],["sectionSubsubtitle","HMW (How Might We) questions"],[1,"row","g-4"],[1,"col-12","col-md-6"],["sectionTitle","Idea"],[1,"row","g-4","mb-4"],[1,"col-2","col-md-1","big-number"],[1,"col-10","col-md-5"],["sectionSubtitle","Scenario"],[1,"row","mb-4"],["src","assets/images/Projects/espoora/scenario-01.jpg",1,"img-fluid"],["src","assets/images/Projects/espoora/scenario-02.jpg",1,"img-fluid"],["src","assets/images/Projects/espoora/scenario-03.jpg",1,"img-fluid"],["sectionTitle","Portal Design"],["src","assets/images/Projects/espoora/web.png",1,"img-fluid"],["sectionTitle","Business Model"],["src","assets/images/Projects/espoora/business-model.png",1,"img-fluid"],["sectionSubtitle","SWOT analysis"],["src","assets/images/Projects/espoora/swot.png",1,"img-fluid"],["sectionSubtitle","Competitors"],["sectionSubtitle","Value Proposition"],["src","assets/images/Projects/espoora/value-proposition.jpg",1,"img-fluid","mb-4"],["sectionSubtitle","Income Model"],["sectionSubtitle","Enter to the market"],["sectionTitle","The team"],["src","assets/images/Projects/espoora/team.png",1,"img-fluid"]],template:function(i,o){1&i&&(m(0,"app-project-cover",0),c(1,"div",1),m(2,"app-info-section",2),c(3,"div",3)(4,"div",4)(5,"div",5)(6,"app-page-section",6)(7,"p"),f(8," Espoo is a high tech hotspot where they are planning to have a city as a service model to serve its citizens. It is an innovation and adventure hub and it is the most digitized city in Europe. Most of the tourists visit Espoo to enjoy different events organized in nature, or they come for international conferences and business events. "),u(),c(9,"p"),f(10,"The challenge we had to work on was the following:"),u(),m(11,"img",7),c(12,"p"),f(13," We started listing various groups of people connected to our challenge, mapping how satisfied they are with the current situation and anticipating how they would feel about changes in the area. "),u(),m(14,"img",8),u()()()(),c(15,"div",3)(16,"div",4)(17,"div",5)(18,"app-page-section",9),f(19," For now Espoo haven't focalized a lot on digital communication in the tourism field. Since most of the tourists come to Espoo to join events, we decided to focus on tourists as well as event organizers. So, we performed 5 interviews to them, and we discovered several problems that could be solved with the help of digitalization. "),u(),c(20,"app-page-section",10)(21,"div",11)(22,"div",12),m(23,"img",13),u(),c(24,"div",14)(25,"p"),f(26," Tim is a tourist who would like to participate in some events in Espoo. He has to go on the website visitespoo.fi, and then after having chosen an event, he has to organize the travel. "),u(),c(27,"p"),f(28,"The problems are that:"),u(),c(29,"ul")(30,"li"),f(31," visitespoo.fi is not a famous website, so Tim can not be aware of its existence "),u(),c(32,"li"),f(33," for organizing the travel, he has to keep track of several apps (like Booking, Tripadvisors, GMail, Ryanair) "),u()()()()(),c(34,"app-page-section",15)(35,"div",11)(36,"div",12),m(37,"img",16),u(),c(38,"div",14),f(39," After finding a place and choosing the dates, she has to: "),c(40,"ul")(41,"li"),f(42," contact many places to find one free on the chosen dates "),u(),c(43,"li"),f(44," contact various hotels and restaurants, hoping that they are free as well on the chosen dates "),u(),c(45,"li"),f(46,"organize transportation"),u(),c(47,"li"),f(48,"consider various constraints and tourists requirements"),u()(),c(49,"p"),f(50," All the process is performed among several chatting apps and social media, and all the information of the events are shared between event organizers through excel files or google docs. "),u()()()(),c(51,"app-page-section",17)(52,"ul")(53,"li"),f(54," Cultural event organizer needs advertisement and collaboration with local companies, because its potential participants are not familiar with the event content and thus not aware if it's worth going. "),u(),c(55,"li"),f(56," Foreign tourist needs communication ability and ease of access, because want to make the most out of the experience, avoiding missing grat opportunities. "),u(),c(57,"li"),f(58," Business visitors need travel efficiency and proper communicate instructions, because they don't want to waste time because of time contrasints. "),u()()(),c(59,"app-page-section",18)(60,"div",11)(61,"div",19),f(62," Discoverability of information for tourists is difficult. "),c(63,"ol")(64,"li"),f(65,"Why? Because the system is not so dynamic now."),u(),c(66,"li"),f(67," Why? Because there are only webpages, physical kiosks for tickets and service points. "),u(),c(68,"li"),f(69,"Why? Because the city didn't focus a lot on visitors."),u(),c(70,"li"),f(71," Why? Because Espoo is in the vicinity of Helsinki and other big cities. Visitors prefer staying in these cities after visiting Espoo for any events. "),u(),c(72,"li"),f(73," Why? Becaue initially they didn't focus on tourism but now they want to expand "),u()()(),c(74,"div",19),f(75," Visitor do not prefer to download applications for information. "),c(76,"ol")(77,"li"),f(78," Why? Because they prefer to look for information from other sources. "),u(),c(79,"li"),f(80," Why? Because they don't want to spend time in learning how to use a new app. "),u(),c(81,"li"),f(82," Why? Because it's not worth since they are going to use it only for few days. "),u(),c(83,"li"),f(84," Why? Because they prefer to relax and enjoy the travel more. "),u(),c(85,"li"),f(86,"Why? Because they're on holiday."),u()()()()(),c(87,"app-page-section",20)(88,"div",21)(89,"div",22),f(90," HMW make the communication more effective between event organizers and tourists, so that tourists and event organizers could find, access or create, advertise more easily the events? "),u(),c(91,"div",22),f(92," HMW digitalize the info point, so that tourists could be up-to-date with all the information about events in a more dynamic way? "),u(),c(93,"div",22),f(94," HMW improve the communication between event organizers and local companies, so that event organizers could cooperate in an effortless way with restaurants, hotels and transportations? "),u()()()()()(),c(95,"div",3)(96,"div",4)(97,"div",5)(98,"app-page-section",23)(99,"p"),f(100,"Espoora consists mainly of 2 elements:"),u(),c(101,"div",24)(102,"div",25),f(103,"01"),u(),c(104,"div",26)(105,"h4"),f(106,"Web Portal"),u(),f(107," To present and manage events. "),u(),c(108,"div",25),f(109,"02"),u(),c(110,"div",26)(111,"h4"),f(112,"Chatbot"),u(),f(113," To have a smarter and more interactive access to information on events but also on the city itself. "),u()(),f(114," We didn't want to create a new App, mainly because the visitors will install it and maybe delete in just few days, at the end of the travel. "),u(),c(115,"app-page-section",27)(116,"div",28)(117,"div",12),m(118,"img",29),u(),c(119,"div",14)(120,"p"),f(121," Elena wants to organize a music festival, so she creates the event on Espoora, inserting dates, places and expected number of participants. "),u(),c(122,"p"),f(123," Accommodations, restaurants and other attractions can make offers, discounts or deals for tourists. "),u(),c(124,"p"),f(125," Elena can finally publicize the event on Espoora, so now tourists can see it and join it. "),u()()(),c(126,"div",28)(127,"div",12),m(128,"img",30),u(),c(129,"div",14)(130,"p"),f(131," Tim, on the other hand, discover through the chatbot that there is a new event in Espoo and decides to go. "),u(),c(132,"p"),f(133," So, he chooses one of the suggested accommodations, pays and gets the ticket of the event. "),u()()(),c(134,"div",11)(135,"div",12),m(136,"img",31),u(),c(137,"div",14)(138,"p"),f(139," When Tim arrives in the city, he can eat in one of the restaurants that are sponsored by the event and have a discount. "),u(),c(140,"p"),f(141," Also, through the chatbot he can get information about the event and places to visit around. "),u(),c(142,"p"),f(143,"And finally, he can join the music festival!"),u()()()()()()(),c(144,"div",3)(145,"div",4)(146,"div",5)(147,"app-page-section",32),m(148,"img",33),u()()()(),c(149,"div",3)(150,"div",4)(151,"div",5)(152,"app-page-section",34),m(153,"img",35),u(),c(154,"app-page-section",36),m(155,"img",37),u(),c(156,"app-page-section",38)(157,"ul")(158,"li"),f(159,"They don't focus on specific cities."),u(),c(160,"li"),f(161," There are no efficient channels for communication and collaboration among event organizers and other stakeholders. "),u(),c(162,"li"),f(163," On the tourist side, they don't offer a companion platform that supports services throughout the entire travelling flow. "),u()()(),c(164,"app-page-section",39),m(165,"img",40),c(166,"p"),f(167," For tourists, we create the value of discoverability of events through decentralized information distribution. "),u(),c(168,"p"),f(169," For both tourists and event organizers, the process is simplified because the entire process of organizing or participating in an event is in one place. "),u(),c(170,"p"),f(171," For the local companies like hotels or restaurants, we create visibility. With our platform, the marketplace is more transparent for them. "),u()(),c(172,"app-page-section",41)(173,"p"),f(174," We don't want to make the user pay more just for having an easy and integrated platform to deal with the most problematic aspects of a trip. "),u(),c(175,"p"),f(176," Since Espoora provides a unique ticketing system for events, we are planning to take a percentage out of every ticket sold and every room booked. "),u(),c(177,"p"),f(178," We believe that hotels or those who offer accommodations are willing to give up a small part of the profit for a service like ours, moreover this is what the competition already does. "),u()(),c(179,"app-page-section",42)(180,"ol")(181,"li"),f(182,"Publicize the platform through QR codes and social media."),u(),c(183,"li"),f(184," Expand the team with professionals (designers and engineers). "),u(),c(185,"li"),f(186,"Recruit people that will communicate with all partners."),u(),c(187,"li"),f(188," Better study the processes already existing in hotels and restaurants. in order to better adapt the design of our platform. "),u(),c(189,"li"),f(190," Ask the help of Espoo, which has a history in funding startups that offer services for the city. "),u()()()()()(),c(191,"div",3)(192,"div",4)(193,"div",5)(194,"app-page-section",43),m(195,"img",44),u()()()()())},dependencies:[mi,Vi,Bi]})}}return e})()}];let VV=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({imports:[UC.forRoot(LV),UC]})}}return e})(),BV=(()=>{class e{constructor(){this.currentYear=(new Date).getFullYear()}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-footer"]],decls:20,vars:1,consts:[["data-bs-theme","dark",1,"bg-body-tertiary","text-center","footer-background"],[1,"container","p-3","text-light"],[1,"row"],[1,"col-md-4","mb-4","mb-md-0"],[1,"footer-text"],["href","https://www.linkedin.com/in/vania-ferrari/","target","_blank",1,"ms-2","me-2","link-light","link-body-emphasis"],[1,"bi","bi-linkedin"],["href","https://github.com/vaffer94","target","_blank",1,"ms-2","me-2","link-light","link-body-emphasis"],[1,"bi","bi-github"],["href","mailto:vania.ferrari00@gmail.com"]],template:function(i,o){1&i&&(c(0,"footer",0)(1,"div",1)(2,"div",2)(3,"div",3)(4,"h4"),f(5,"Made with \u2764\ufe0f, \u2615\ufe0f, and Angular"),u(),c(6,"small",4),f(7),u()(),c(8,"div",3)(9,"h4"),f(10,"Follow me"),u(),c(11,"a",5),m(12,"i",6),u(),c(13,"a",7),m(14,"i",8),u()(),c(15,"div",3)(16,"h4"),f(17,"Contact me"),u(),c(18,"a",9),f(19," vania.ferrari00@gmail.com "),u()()()()()),2&i&&(M(7),un("Copyright \xa9 ",o.currentYear," - Miriam Punzi (thanks a lot)"))},styles:[".footer-background[_ngcontent-%COMP%]{background-color:var(--footer)!important;margin-top:90px}.footer-upperdiv[_ngcontent-%COMP%]{padding:10px!important}.footer-copyright[_ngcontent-%COMP%]{color:var(--icon)}.footer-text[_ngcontent-%COMP%]{font-size:.85rem}"]})}}return e})(),HV=(()=>{class e{constructor(){this.isNavbarVisible=!1,this.isCollapsed=!1}ngOnInit(){this.navbar||(this.navbar=document.querySelector(".navbar")),window.addEventListener("scroll",()=>{this.isCollapsed||(window.scrollY>0?this.isNavbarVisible||(this.Show(),this.isNavbarVisible=!0):this.isNavbarVisible&&(this.Hide(),this.isNavbarVisible=!1))})}OnClick(){this.isCollapsed=!this.isCollapsed,this.isCollapsed&&this.Show()}Hide(){this.navbar?.classList.remove("navbar-visible"),this.navbar?.classList.add("navbar-invisible")}Show(){this.navbar?.classList.remove("navbar-invisible"),this.navbar?.classList.add("navbar-visible")}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-navbar"]],decls:17,vars:0,consts:[[1,"navbar","navbar-expand-lg","navbar-dark","navbar-invisible"],[1,"container"],["href","",1,"navbar-brand",2,"margin-left","20px"],["type","button","data-bs-toggle","collapse","data-bs-target","#navbarSupportedContent","aria-controls","navbarSupportedContent","aria-expanded","false","aria-label","Toggle navigation",1,"navbar-toggler",2,"margin-right","10px",3,"click"],[1,"navbar-toggler-icon"],["id","navbarSupportedContent",1,"collapse","navbar-collapse"],[1,"navbar-nav","ms-auto",2,"margin-right","10px"],[1,"nav-item"],["href","",1,"nav-link"],["href","#projects",1,"nav-link"],["href","assets/docs/VaniaFerrari_042025.pdf","target","_blank",1,"nav-link"]],template:function(i,o){1&i&&(c(0,"nav",0)(1,"div",1)(2,"a",2),f(3,"Vania Ferrari"),u(),c(4,"button",3),le("click",function(){return o.OnClick()}),m(5,"span",4),u(),c(6,"div",5)(7,"ul",6)(8,"li",7)(9,"a",8),f(10,"Home"),u()(),c(11,"li",7)(12,"a",9),f(13,"Projects"),u()(),c(14,"li",7)(15,"a",10),f(16,"Resume"),u()()()()()())},styles:["nav[_ngcontent-%COMP%]{position:fixed;width:100%;z-index:9999;top:0;transition:background-color .2s}.navbar-invisible[_ngcontent-%COMP%]{background:transparent}.navbar-visible[_ngcontent-%COMP%]{background:var(--navbar)}ul[_ngcontent-%COMP%]{padding-top:0;list-style-type:none;margin-left:0}li[_ngcontent-%COMP%]{padding-bottom:0}a[_ngcontent-%COMP%]{color:#fff}@media (max-width: 991.98px){li[_ngcontent-%COMP%]{margin-left:20px}}"]})}}return e})();const $V=["background"],UV=function(e,n,t,i){return{top:e,left:n,width:t,height:i}};function GV(e,n){if(1&e&&m(0,"div",3),2&e){const t=n.$implicit;A("ngClass",t.className)("ngStyle",Eb(2,UV,t.top+"px",t.left+"px",t.size+"px",t.size+"px"))}}let zV=(()=>{class e{constructor(){this.divs=[]}ngAfterViewInit(){const t=["primary","secondary"];for(let l=0;l<500;l++){var a=250*Math.random()+50;this.divs.push({className:t[Math.floor(Math.random()*t.length)],top:4e4*Math.random(),left:Math.random()*window.innerWidth-150,size:a})}}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-background"]],viewQuery:function(i,o){if(1&i&&eo($V,5),2&i){let r;Se(r=Ee())&&(o.backgroundElement=r.first)}},decls:3,vars:1,consts:[[1,"background-container"],["background",""],["class","background-div",3,"ngClass","ngStyle",4,"ngFor","ngForOf"],[1,"background-div",3,"ngClass","ngStyle"]],template:function(i,o){1&i&&(c(0,"div",0,1),B(2,GV,1,7,"div",2),u()),2&i&&(M(2),A("ngForOf",o.divs))},dependencies:[vu,Nn,_u],styles:[".background-container[_ngcontent-%COMP%]{position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;pointer-events:none;overflow:hidden;background:var(--color-background)}.background-div[_ngcontent-%COMP%]{position:absolute;border-radius:var(--radius-pill);opacity:.5;box-sizing:border-box;filter:blur(.8px);border-radius:var(--radius-md)}.primary[_ngcontent-%COMP%]{background:var(--color-primary-dark);border:1px solid var(--color-primary-light);box-shadow:0 0 3px var(--color-primary-light)}.secondary[_ngcontent-%COMP%]{background:var(--color-secondary-dark);border:1px solid var(--color-secondary-light);box-shadow:0 0 3px var(--color-secondary-light)}"]})}}return e})(),WV=(()=>{class e{constructor(){this.title="vaniaferrari-portfolio"}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=se({type:e,selectors:[["app-root"]],decls:4,vars:0,template:function(i,o){1&i&&m(0,"app-navbar")(1,"app-background")(2,"router-outlet")(3,"app-footer")},dependencies:[Eg,BV,HV,zV]})}}return e})();const qV=["addListener","removeListener"],YV=["addEventListener","removeEventListener"],ZV=["on","off"];function Tt(e,n,t,i){if(ne(t)&&(i=t,t=void 0),i)return Tt(e,n,t).pipe(lg(i));const[o,r]=function KV(e){return ne(e.addEventListener)&&ne(e.removeEventListener)}(e)?YV.map(s=>a=>e[s](n,a,t)):function QV(e){return ne(e.addListener)&&ne(e.removeListener)}(e)?qV.map(ZC(e,n)):function JV(e){return ne(e.on)&&ne(e.off)}(e)?ZV.map(ZC(e,n)):[];if(!o&&kd(e))return lt(s=>Tt(s,n,t))(at(e));if(!o)throw new TypeError("Invalid event target");return new Te(s=>{const a=(...l)=>s.next(1r(a)})}function ZC(e,n){return t=>i=>e[t](n,i)}class XV extends Je{constructor(n,t){super()}schedule(n,t=0){return this}}const Bu={setInterval(e,n,...t){const{delegate:i}=Bu;return i?.setInterval?i.setInterval(e,n,...t):setInterval(e,n,...t)},clearInterval(e){const{delegate:n}=Bu;return(n?.clearInterval||clearInterval)(e)},delegate:void 0},QC={now:()=>(QC.delegate||Date).now(),delegate:void 0};class el{constructor(n,t=el.now){this.schedulerActionCtor=n,this.now=t}schedule(n,t=0,i){return new this.schedulerActionCtor(this,n).schedule(i,t)}}el.now=QC.now;const n8=new class t8 extends el{constructor(n,t=el.now){super(n,t),this.actions=[],this._active=!1}flush(n){const{actions:t}=this;if(this._active)return void t.push(n);let i;this._active=!0;do{if(i=n.execute(n.state,n.delay))break}while(n=t.shift());if(this._active=!1,i){for(;n=t.shift();)n.unsubscribe();throw i}}}(class e8 extends XV{constructor(n,t){super(n,t),this.scheduler=n,this.work=t,this.pending=!1}schedule(n,t=0){var i;if(this.closed)return this;this.state=n;const o=this.id,r=this.scheduler;return null!=o&&(this.id=this.recycleAsyncId(r,o,t)),this.pending=!0,this.delay=t,this.id=null!==(i=this.id)&&void 0!==i?i:this.requestAsyncId(r,this.id,t),this}requestAsyncId(n,t,i=0){return Bu.setInterval(n.flush.bind(n,this),i)}recycleAsyncId(n,t,i=0){if(null!=i&&this.delay===i&&!1===this.pending)return t;null!=t&&Bu.clearInterval(t)}execute(n,t){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const i=this._execute(n,t);if(i)return i;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(n,t){let o,i=!1;try{this.work(n)}catch(r){i=!0,o=r||new Error("Scheduled action threw falsy error")}if(i)return this.unsubscribe(),o}unsubscribe(){if(!this.closed){const{id:n,scheduler:t}=this,{actions:i}=t;this.work=this.state=this.scheduler=null,this.pending=!1,Ui(i,this),null!=n&&(this.id=this.recycleAsyncId(t,n,null)),this.delay=null,super.unsubscribe()}}});const{isArray:o8}=Array;function XC(e){return 1===e.length&&o8(e[0])?e[0]:e}function kg(...e){const n=Al(e),t=XC(e);return t.length?new Te(i=>{let o=t.map(()=>[]),r=t.map(()=>!1);i.add(()=>{o=r=null});for(let s=0;!i.closed&&s{if(o[s].push(a),o.every(l=>l.length)){const l=o.map(d=>d.shift());i.next(n?n(...l):l),o.some((d,h)=>!d.length&&r[h])&&i.complete()}},()=>{r[s]=!0,!o[s].length&&i.complete()}));return()=>{o=r=null}}):mn}function Fg(...e){const n=Al(e);return Ue((t,i)=>{const o=e.length,r=new Array(o);let s=e.map(()=>!1),a=!1;for(let l=0;l{r[l]=d,!a&&!s[l]&&(s[l]=!0,(a=s.every(xn))&&(s=null))},mo));t.subscribe(ke(i,l=>{if(a){const d=[l,...r];i.next(n?n(...d):d)}}))})}Error,Math,Math,Math;const kB=["*"],d6=["dialog"];function $o(e){return"string"==typeof e}function Uo(e){return null!=e}function _s(e){return(e||document.body).getBoundingClientRect()}const PE={animation:!0,transitionTimerDelayMs:5},iH=()=>{},{transitionTimerDelayMs:oH}=PE,hl=new Map,en=(e,n,t,i)=>{let o=i.context||{};const r=hl.get(n);if(r)switch(i.runningTransition){case"continue":return mn;case"stop":e.run(()=>r.transition$.complete()),o=Object.assign(r.context,o),hl.delete(n)}const s=t(n,i.animation,o)||iH;if(!i.animation||"none"===window.getComputedStyle(n).transitionProperty)return e.run(()=>s()),W(void 0).pipe(function tH(e){return n=>new Te(t=>n.subscribe({next:s=>e.run(()=>t.next(s)),error:s=>e.run(()=>t.error(s)),complete:()=>e.run(()=>t.complete())}))}(e));const a=new ye,l=new ye,d=a.pipe(function s8(...e){return n=>Fa(n,W(...e))}(!0));hl.set(n,{transition$:a,complete:()=>{l.next(),l.complete()},context:o});const h=function nH(e){const{transitionDelay:n,transitionDuration:t}=window.getComputedStyle(e);return 1e3*(parseFloat(n)+parseFloat(t))}(n);return e.runOutsideAngular(()=>{const p=Tt(n,"transitionend").pipe(Ze(d),vt(({target:v})=>v===n));(function eS(...e){return 1===(e=XC(e)).length?at(e[0]):new Te(function r8(e){return n=>{let t=[];for(let i=0;t&&!n.closed&&i{if(t){for(let r=0;r{let r=function i8(e){return e instanceof Date&&!isNaN(e)}(e)?+e-t.now():e;r<0&&(r=0);let s=0;return t.schedule(function(){o.closed||(o.next(s++),0<=i?this.schedule(void 0,i):o.complete())},r)})}(h+oH).pipe(Ze(d)),p,l).pipe(Ze(d)).subscribe(()=>{hl.delete(n),e.run(()=>{s(),a.next(),a.complete()})})}),a.asObservable()};let id=(()=>{class e{constructor(){this.animation=PE.animation}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),UE=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),GE=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),qE=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),YE=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();var Pe=function(e){return e[e.Tab=9]="Tab",e[e.Enter=13]="Enter",e[e.Escape=27]="Escape",e[e.Space=32]="Space",e[e.PageUp=33]="PageUp",e[e.PageDown=34]="PageDown",e[e.End=35]="End",e[e.Home=36]="Home",e[e.ArrowLeft=37]="ArrowLeft",e[e.ArrowUp=38]="ArrowUp",e[e.ArrowRight=39]="ArrowRight",e[e.ArrowDown=40]="ArrowDown",e}(Pe||{});typeof navigator<"u"&&navigator.userAgent&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||/Macintosh/.test(navigator.userAgent)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2||/Android/.test(navigator.userAgent));const tT=["a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","[contenteditable]",'[tabindex]:not([tabindex="-1"])'].join(", ");function nT(e){const n=Array.from(e.querySelectorAll(tT)).filter(t=>-1!==t.tabIndex);return[n[0],n[n.length-1]]}new Date(1882,10,12),new Date(2174,10,25);let gT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),_T=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();class Yo{constructor(n,t,i){this.nodes=n,this.viewRef=t,this.componentRef=i}}let i$=(()=>{class e{constructor(t,i){this._el=t,this._zone=i}ngOnInit(){this._zone.onStable.asObservable().pipe(Et(1)).subscribe(()=>{en(this._zone,this._el.nativeElement,(t,i)=>{i&&_s(t),t.classList.add("show")},{animation:this.animation,runningTransition:"continue"})})}hide(){return en(this._zone,this._el.nativeElement,({classList:t})=>t.remove("show"),{animation:this.animation,runningTransition:"stop"})}static{this.\u0275fac=function(i){return new(i||e)(y(we),y(ae))}}static{this.\u0275cmp=se({type:e,selectors:[["ngb-modal-backdrop"]],hostAttrs:[2,"z-index","1055"],hostVars:6,hostBindings:function(i,o){2&i&&(No("modal-backdrop"+(o.backdropClass?" "+o.backdropClass:"")),me("show",!o.animation)("fade",o.animation))},inputs:{animation:"animation",backdropClass:"backdropClass"},standalone:!0,features:[En],decls:0,vars:0,template:function(i,o){},encapsulation:2})}}return e})();class yT{update(n){}close(n){}dismiss(n){}}const o$=["animation","ariaLabelledBy","ariaDescribedBy","backdrop","centered","fullscreen","keyboard","scrollable","size","windowClass","modalDialogClass"],r$=["animation","backdropClass"];class s${_applyWindowOptions(n,t){o$.forEach(i=>{Uo(t[i])&&(n[i]=t[i])})}_applyBackdropOptions(n,t){r$.forEach(i=>{Uo(t[i])&&(n[i]=t[i])})}update(n){this._applyWindowOptions(this._windowCmptRef.instance,n),this._backdropCmptRef&&this._backdropCmptRef.instance&&this._applyBackdropOptions(this._backdropCmptRef.instance,n)}get componentInstance(){if(this._contentRef&&this._contentRef.componentRef)return this._contentRef.componentRef.instance}get closed(){return this._closed.asObservable().pipe(Ze(this._hidden))}get dismissed(){return this._dismissed.asObservable().pipe(Ze(this._hidden))}get hidden(){return this._hidden.asObservable()}get shown(){return this._windowCmptRef.instance.shown.asObservable()}constructor(n,t,i,o){this._windowCmptRef=n,this._contentRef=t,this._backdropCmptRef=i,this._beforeDismiss=o,this._closed=new ye,this._dismissed=new ye,this._hidden=new ye,n.instance.dismissEvent.subscribe(r=>{this.dismiss(r)}),this.result=new Promise((r,s)=>{this._resolve=r,this._reject=s}),this.result.then(null,()=>{})}close(n){this._windowCmptRef&&(this._closed.next(n),this._resolve(n),this._removeModalElements())}_dismiss(n){this._dismissed.next(n),this._reject(n),this._removeModalElements()}dismiss(n){if(this._windowCmptRef)if(this._beforeDismiss){const t=this._beforeDismiss();!function AE(e){return e&&e.then}(t)?!1!==t&&this._dismiss(n):t.then(i=>{!1!==i&&this._dismiss(n)},()=>{})}else this._dismiss(n)}_removeModalElements(){const n=this._windowCmptRef.instance.hide(),t=this._backdropCmptRef?this._backdropCmptRef.instance.hide():W(void 0);n.subscribe(()=>{const{nativeElement:i}=this._windowCmptRef.location;i.parentNode.removeChild(i),this._windowCmptRef.destroy(),this._contentRef&&this._contentRef.viewRef&&this._contentRef.viewRef.destroy(),this._windowCmptRef=null,this._contentRef=null}),t.subscribe(()=>{if(this._backdropCmptRef){const{nativeElement:i}=this._backdropCmptRef.location;i.parentNode.removeChild(i),this._backdropCmptRef.destroy(),this._backdropCmptRef=null}}),kg(n,t).subscribe(()=>{this._hidden.next(),this._hidden.complete()})}}var Rm=function(e){return e[e.BACKDROP_CLICK=0]="BACKDROP_CLICK",e[e.ESC=1]="ESC",e}(Rm||{});let a$=(()=>{class e{constructor(t,i,o){this._document=t,this._elRef=i,this._zone=o,this._closed$=new ye,this._elWithFocus=null,this.backdrop=!0,this.keyboard=!0,this.dismissEvent=new z,this.shown=new ye,this.hidden=new ye}get fullscreenClass(){return!0===this.fullscreen?" modal-fullscreen":$o(this.fullscreen)?` modal-fullscreen-${this.fullscreen}-down`:""}dismiss(t){this.dismissEvent.emit(t)}ngOnInit(){this._elWithFocus=this._document.activeElement,this._zone.onStable.asObservable().pipe(Et(1)).subscribe(()=>{this._show()})}ngOnDestroy(){this._disableEventHandling()}hide(){const{nativeElement:t}=this._elRef,i={animation:this.animation,runningTransition:"stop"},s=kg(en(this._zone,t,()=>t.classList.remove("show"),i),en(this._zone,this._dialogEl.nativeElement,()=>{},i));return s.subscribe(()=>{this.hidden.next(),this.hidden.complete()}),this._disableEventHandling(),this._restoreFocus(),s}_show(){const t={animation:this.animation,runningTransition:"continue"};kg(en(this._zone,this._elRef.nativeElement,(r,s)=>{s&&_s(r),r.classList.add("show")},t),en(this._zone,this._dialogEl.nativeElement,()=>{},t)).subscribe(()=>{this.shown.next(),this.shown.complete()}),this._enableEventHandling(),this._setFocus()}_enableEventHandling(){const{nativeElement:t}=this._elRef;this._zone.runOutsideAngular(()=>{Tt(t,"keydown").pipe(Ze(this._closed$),vt(o=>o.which===Pe.Escape)).subscribe(o=>{this.keyboard?requestAnimationFrame(()=>{o.defaultPrevented||this._zone.run(()=>this.dismiss(Rm.ESC))}):"static"===this.backdrop&&this._bumpBackdrop()});let i=!1;Tt(this._dialogEl.nativeElement,"mousedown").pipe(Ze(this._closed$),_t(()=>i=!1),Pn(()=>Tt(t,"mouseup").pipe(Ze(this._closed$),Et(1))),vt(({target:o})=>t===o)).subscribe(()=>{i=!0}),Tt(t,"click").pipe(Ze(this._closed$)).subscribe(({target:o})=>{t===o&&("static"===this.backdrop?this._bumpBackdrop():!0===this.backdrop&&!i&&this._zone.run(()=>this.dismiss(Rm.BACKDROP_CLICK))),i=!1})})}_disableEventHandling(){this._closed$.next()}_setFocus(){const{nativeElement:t}=this._elRef;if(!t.contains(document.activeElement)){const i=t.querySelector("[ngbAutofocus]"),o=nT(t)[0];(i||o||t).focus()}}_restoreFocus(){const t=this._document.body,i=this._elWithFocus;let o;o=i&&i.focus&&t.contains(i)?i:t,this._zone.runOutsideAngular(()=>{setTimeout(()=>o.focus()),this._elWithFocus=null})}_bumpBackdrop(){"static"===this.backdrop&&en(this._zone,this._elRef.nativeElement,({classList:t})=>(t.add("modal-static"),()=>t.remove("modal-static")),{animation:this.animation,runningTransition:"continue"})}static{this.\u0275fac=function(i){return new(i||e)(y(nt),y(we),y(ae))}}static{this.\u0275cmp=se({type:e,selectors:[["ngb-modal-window"]],viewQuery:function(i,o){if(1&i&&eo(d6,7),2&i){let r;Se(r=Ee())&&(o._dialogEl=r.first)}},hostAttrs:["role","dialog","tabindex","-1"],hostVars:7,hostBindings:function(i,o){2&i&&(Ce("aria-modal",!0)("aria-labelledby",o.ariaLabelledBy)("aria-describedby",o.ariaDescribedBy),No("modal d-block"+(o.windowClass?" "+o.windowClass:"")),me("fade",o.animation))},inputs:{animation:"animation",ariaLabelledBy:"ariaLabelledBy",ariaDescribedBy:"ariaDescribedBy",backdrop:"backdrop",centered:"centered",fullscreen:"fullscreen",keyboard:"keyboard",scrollable:"scrollable",size:"size",windowClass:"windowClass",modalDialogClass:"modalDialogClass"},outputs:{dismissEvent:"dismiss"},standalone:!0,features:[En],ngContentSelectors:kB,decls:4,vars:2,consts:[["role","document"],["dialog",""],[1,"modal-content"]],template:function(i,o){1&i&&(Bh(),c(0,"div",0,1)(2,"div",2),Hh(3),u()()),2&i&&No("modal-dialog"+(o.size?" modal-"+o.size:"")+(o.centered?" modal-dialog-centered":"")+o.fullscreenClass+(o.scrollable?" modal-dialog-scrollable":"")+(o.modalDialogClass?" "+o.modalDialogClass:""))},styles:["ngb-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}\n"],encapsulation:2})}}return e})(),l$=(()=>{class e{constructor(t){this._document=t}hide(){const t=Math.abs(window.innerWidth-this._document.documentElement.clientWidth),i=this._document.body,o=i.style,{overflow:r,paddingRight:s}=o;if(t>0){const a=parseFloat(window.getComputedStyle(i).paddingRight);o.paddingRight=`${a+t}px`}return o.overflow="hidden",()=>{t>0&&(o.paddingRight=s),o.overflow=r}}static{this.\u0275fac=function(i){return new(i||e)(L(nt))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),c$=(()=>{class e{constructor(t,i,o,r,s,a,l){this._applicationRef=t,this._injector=i,this._environmentInjector=o,this._document=r,this._scrollBar=s,this._rendererFactory=a,this._ngZone=l,this._activeWindowCmptHasChanged=new ye,this._ariaHiddenValues=new Map,this._scrollBarRestoreFn=null,this._modalRefs=[],this._windowCmpts=[],this._activeInstances=new z,this._activeWindowCmptHasChanged.subscribe(()=>{if(this._windowCmpts.length){const d=this._windowCmpts[this._windowCmpts.length-1];((e,n,t,i=!1)=>{e.runOutsideAngular(()=>{const o=Tt(n,"focusin").pipe(Ze(t),ue(r=>r.target));Tt(n,"keydown").pipe(Ze(t),vt(r=>r.which===Pe.Tab),Fg(o)).subscribe(([r,s])=>{const[a,l]=nT(n);(s===a||s===n)&&r.shiftKey&&(l.focus(),r.preventDefault()),s===l&&!r.shiftKey&&(a.focus(),r.preventDefault())}),i&&Tt(n,"click").pipe(Ze(t),Fg(o),ue(r=>r[1])).subscribe(r=>r.focus())})})(this._ngZone,d.location.nativeElement,this._activeWindowCmptHasChanged),this._revertAriaHidden(),this._setAriaHidden(d.location.nativeElement)}})}_restoreScrollBar(){const t=this._scrollBarRestoreFn;t&&(this._scrollBarRestoreFn=null,t())}_hideScrollBar(){this._scrollBarRestoreFn||(this._scrollBarRestoreFn=this._scrollBar.hide())}open(t,i,o){const r=o.container instanceof HTMLElement?o.container:Uo(o.container)?this._document.querySelector(o.container):this._document.body,s=this._rendererFactory.createRenderer(null,null);if(!r)throw new Error(`The specified modal container "${o.container||"body"}" was not found in the DOM.`);this._hideScrollBar();const a=new yT,l=(t=o.injector||t).get(Zt,null)||this._environmentInjector,d=this._getContentRef(t,l,i,a,o);let h=!1!==o.backdrop?this._attachBackdrop(r):void 0,p=this._attachWindowComponent(r,d.nodes),g=new s$(p,d,h,o.beforeDismiss);return this._registerModalRef(g),this._registerWindowCmpt(p),g.hidden.pipe(Et(1)).subscribe(()=>Promise.resolve(!0).then(()=>{this._modalRefs.length||(s.removeClass(this._document.body,"modal-open"),this._restoreScrollBar(),this._revertAriaHidden())})),a.close=v=>{g.close(v)},a.dismiss=v=>{g.dismiss(v)},a.update=v=>{g.update(v)},g.update(o),1===this._modalRefs.length&&s.addClass(this._document.body,"modal-open"),h&&h.instance&&h.changeDetectorRef.detectChanges(),p.changeDetectorRef.detectChanges(),g}get activeInstances(){return this._activeInstances}dismissAll(t){this._modalRefs.forEach(i=>i.dismiss(t))}hasOpenModals(){return this._modalRefs.length>0}_attachBackdrop(t){let i=Ap(i$,{environmentInjector:this._applicationRef.injector,elementInjector:this._injector});return this._applicationRef.attachView(i.hostView),t.appendChild(i.location.nativeElement),i}_attachWindowComponent(t,i){let o=Ap(a$,{environmentInjector:this._applicationRef.injector,elementInjector:this._injector,projectableNodes:i});return this._applicationRef.attachView(o.hostView),t.appendChild(o.location.nativeElement),o}_getContentRef(t,i,o,r,s){return o?o instanceof ze?this._createFromTemplateRef(o,r):$o(o)?this._createFromString(o):this._createFromComponent(t,i,o,r,s):new Yo([])}_createFromTemplateRef(t,i){const r=t.createEmbeddedView({$implicit:i,close(s){i.close(s)},dismiss(s){i.dismiss(s)}});return this._applicationRef.attachView(r),new Yo([r.rootNodes],r)}_createFromString(t){const i=this._document.createTextNode(`${t}`);return new Yo([[i]])}_createFromComponent(t,i,o,r,s){const l=Ap(o,{environmentInjector:i,elementInjector:gt.create({providers:[{provide:yT,useValue:r}],parent:t})}),d=l.location.nativeElement;return s.scrollable&&d.classList.add("component-host-scrollable"),this._applicationRef.attachView(l.hostView),new Yo([[d]],l.hostView,l)}_setAriaHidden(t){const i=t.parentElement;i&&t!==this._document.body&&(Array.from(i.children).forEach(o=>{o!==t&&"SCRIPT"!==o.nodeName&&(this._ariaHiddenValues.set(o,o.getAttribute("aria-hidden")),o.setAttribute("aria-hidden","true"))}),this._setAriaHidden(i))}_revertAriaHidden(){this._ariaHiddenValues.forEach((t,i)=>{t?i.setAttribute("aria-hidden",t):i.removeAttribute("aria-hidden")}),this._ariaHiddenValues.clear()}_registerModalRef(t){const i=()=>{const o=this._modalRefs.indexOf(t);o>-1&&(this._modalRefs.splice(o,1),this._activeInstances.emit(this._modalRefs))};this._modalRefs.push(t),this._activeInstances.emit(this._modalRefs),t.result.then(i,i)}_registerWindowCmpt(t){this._windowCmpts.push(t),this._activeWindowCmptHasChanged.next(),t.onDestroy(()=>{const i=this._windowCmpts.indexOf(t);i>-1&&(this._windowCmpts.splice(i,1),this._activeWindowCmptHasChanged.next())})}static{this.\u0275fac=function(i){return new(i||e)(L(no),L(gt),L(Zt),L(nt),L(l$),L(hh),L(ae))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),u$=(()=>{class e{constructor(t){this._ngbConfig=t,this.backdrop=!0,this.fullscreen=!1,this.keyboard=!0}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(t){this._animation=t}static{this.\u0275fac=function(i){return new(i||e)(L(id))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),d$=(()=>{class e{constructor(t,i,o){this._injector=t,this._modalStack=i,this._config=o}open(t,i={}){const o={...this._config,animation:this._config.animation,...i};return this._modalStack.open(this._injector,t,o)}get activeInstances(){return this._modalStack.activeInstances}dismissAll(t){this._modalStack.dismissAll(t)}hasOpenModals(){return this._modalStack.hasOpenModals()}static{this.\u0275fac=function(i){return new(i||e)(L(gt),L(c$),L(u$))}}static{this.\u0275prov=F({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),bT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({providers:[d$]})}}return e})(),CT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),AT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),RT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),xT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),PT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),kT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),FT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),jT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),LT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();new U("live announcer delay",{providedIn:"root",factory:function T$(){return 100}});let VT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})(),BT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({})}}return e})();const I$=[UE,GE,qE,YE,gT,_T,bT,CT,BT,AT,RT,xT,PT,kT,FT,jT,LT,VT];let N$=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e})}static{this.\u0275inj=Ae({imports:[I$,UE,GE,qE,YE,gT,_T,bT,CT,BT,AT,RT,xT,PT,kT,FT,jT,LT,VT]})}}return e})(),O$=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=Re({type:e,bootstrap:[WV]})}static{this.\u0275inj=Ae({imports:[Ij,VV,N$]})}}return e})();Tj().bootstrapModule(O$).catch(e=>console.error(e))},73:()=>{const ne=":";Error;const Ns=function(S,...w){if(Ns.translate){const N=Ns.translate(S,w);S=N[0],w=N[1]}let T=Ol(S[0],S.raw[0]);for(let N=1;N{var $i=Ui=>ne(ne.s=Ui);$i(73),$i(836)}]); \ No newline at end of file diff --git a/package.json b/package.json index 9a985b5..7233f4a 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "watch": "ng build --watch --configuration development", "test": "ng test" }, - "private": true, + "private": false, "dependencies": { "@angular/animations": "^16.1.0", "@angular/common": "^16.1.0", diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index f4a5be8..4ac15e1 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -23,7 +23,7 @@

I'm Vania!

diff --git a/src/app/layout/navbar/navbar.component.html b/src/app/layout/navbar/navbar.component.html index 6a3d331..d4bdb26 100644 --- a/src/app/layout/navbar/navbar.component.html +++ b/src/app/layout/navbar/navbar.component.html @@ -13,10 +13,10 @@ Home