diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/ArchitectureOverview.drawio.png b/ArchitectureOverview.drawio.png new file mode 100644 index 000000000..c56a45eff Binary files /dev/null and b/ArchitectureOverview.drawio.png differ diff --git a/ArchitectureVision.drawio.png b/ArchitectureVision.drawio.png new file mode 100644 index 000000000..0103d4af3 Binary files /dev/null and b/ArchitectureVision.drawio.png differ diff --git a/AzureArchitecture.drawio.png b/AzureArchitecture.drawio.png new file mode 100644 index 000000000..f6bb94c07 Binary files /dev/null and b/AzureArchitecture.drawio.png differ diff --git a/BilateralUsage.drawio.png b/BilateralUsage.drawio.png new file mode 100644 index 000000000..349ed27e0 Binary files /dev/null and b/BilateralUsage.drawio.png differ diff --git a/BlackBoxView.drawio.png b/BlackBoxView.drawio.png new file mode 100644 index 000000000..b3b94ca88 Binary files /dev/null and b/BlackBoxView.drawio.png differ diff --git a/BuildingBlocks.drawio.png b/BuildingBlocks.drawio.png new file mode 100644 index 000000000..ea5f9ca63 Binary files /dev/null and b/BuildingBlocks.drawio.png differ diff --git a/CMSUsage.PNG b/CMSUsage.PNG new file mode 100644 index 000000000..62b26d5bc Binary files /dev/null and b/CMSUsage.PNG differ diff --git a/CombineSourcesExchange.drawio.png b/CombineSourcesExchange.drawio.png new file mode 100644 index 000000000..b6077b4eb Binary files /dev/null and b/CombineSourcesExchange.drawio.png differ diff --git a/CurrentView.drawio.png b/CurrentView.drawio.png new file mode 100644 index 000000000..605e2433a Binary files /dev/null and b/CurrentView.drawio.png differ diff --git a/DownloadProcess.drawio.png b/DownloadProcess.drawio.png new file mode 100644 index 000000000..81ef0b147 Binary files /dev/null and b/DownloadProcess.drawio.png differ diff --git a/ExplicitTrustRelation.drawio.png b/ExplicitTrustRelation.drawio.png new file mode 100644 index 000000000..c50b3af72 Binary files /dev/null and b/ExplicitTrustRelation.drawio.png differ diff --git a/GDHCN_Administrative_and_Operational_Framework.docx b/GDHCN_Administrative_and_Operational_Framework.docx new file mode 100644 index 000000000..b7171a526 Binary files /dev/null and b/GDHCN_Administrative_and_Operational_Framework.docx differ diff --git a/GDHCN_Administrative_and_Operational_Framework.pdf b/GDHCN_Administrative_and_Operational_Framework.pdf new file mode 100644 index 000000000..bf69b53aa Binary files /dev/null and b/GDHCN_Administrative_and_Operational_Framework.pdf differ diff --git a/ImplementationGuide-fhir.who.smart-trust.json b/ImplementationGuide-fhir.who.smart-trust.json new file mode 100644 index 000000000..253b65b67 --- /dev/null +++ b/ImplementationGuide-fhir.who.smart-trust.json @@ -0,0 +1,1091 @@ +{ + "resourceType" : "ImplementationGuide", + "id" : "fhir.who.smart-trust", + "text" : { + "status" : "extensions", + "div" : "
The official URL for this implementation guide is:
http://worldhealthorganization.github.io/smart-trust/ImplementationGuide/fhir.who.smart-trust
SMART Trust Implementation Guide
\nThe official URL for this implementation guide is:
http://worldhealthorganization.github.io/smart-trust/ImplementationGuide/fhir.who.smart-trust
SMART Trust Implementation Guide
\nThe official URL for this implementation guide is:
http://worldhealthorganization.github.io/smart-trust/ImplementationGuide/fhir.who.smart-trust
SMART Trust Implementation Guide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WHO SMART Trust
+
+ 0.0.1 - CI Build
+
+
+
+
+
+
+
+
WHO SMART Trust, published by WHO. This is not an authorized publication; it is the continuous build for version 0.0.1. This version is based on the current content of https://github.com/WorldHealthOrganization/smart-trust and changes regularly. See the Directory of published versions
+Actors produce, manage, or act on health information. Actors relevant to a Federated Trust Network are as follows.
+ +Credential Issuers generate digital vaccine certificates which may be issued to individuals. Issuers may generate +vaccine certificates using one or more representations including DCC, VDS-NC, DIVOC, SHC, or other formats.
+ +Credential Holders are individuals or applications which possess a vaccine certificate.
+ +Local PKDs provides access to public keys used to validate vaccine certificates. Many Local PKDs may exist and be associated with one or more jurisdictions or specifications. Format and access mechanisms may vary across Local PKDs.
+ +The Federated PKD provides a signed master list of keys aggregated across one or more Local PKDs.
+ +Verification Applications are capable of verifying cryptographic signatures of vaccine credentials by using public keys. Public keys may be retrieved from either a Local or Federated PKD.
+ +Trusted service, provided by a node within a trust network, to share business rules using Clinical Quality Language (CQL) specification.
+ + + +WHO SMART Trust
+
+ 0.0.1 - CI Build
+
+
+
+
+
+
+
+
WHO SMART Trust, published by WHO. This is not an authorized publication; it is the continuous build for version 0.0.1. This version is based on the current content of https://github.com/WorldHealthOrganization/smart-trust and changes regularly. See the Directory of published versions
++ The folowing page provides a reference to all useful resources that can guide Countries while adapting the guidelines for Country use. The content below is maintained by Digital Square in the Global Goods Guidebook at https://gg-gb.digitalsquare.org +
+Question | +Resources | +
---|---|
Where can I find definitions for common digital health terminology? | +The Asia eHealth information network (AeHIN) Terminology Guide has definitions for common digital health terminology. Use this resource to look up unfamiliar terms in this guidebook. | +
Where can I learn more about a digital health tool deployed in a country? | +Review the list of countries where the tool has been deployed. In addition, WHO global technology registry platform, the Digital Health Atlas aims to strengthen the value and impact of digital health interventions, improve coordination, and facilitate institutionalization and scale. Use the Atlas to review and catalog a country’s implemented digital health tools. | +
Where can I find an overview of digital health? | +MEASURE Evaluation, working collaboratively with the Global Evaluation and Monitoring Network for Health (GEMNet-Health), developed a free, short course for health information system professionals, the Health Informatics for Low-and Middle-Income Countries course. Take this course to become familiar with the most commonly found concerns and tools in digital health. This course is hosted on the Digital Square learning platform. | +
I’m planning a digital health intervention. What are the key considerations that I should know? | +K4Health created a mHealth Planning Guide that includes resources for planning digital health interventions. Read the guide to understand key considerations. This course is hosted on the Digital Square learning platform. | +
Question | +Resources | +
WHO SMART Trust
+
+ 0.0.1 - CI Build
+
+
+
+
+
+
+
+
WHO SMART Trust, published by WHO. This is not an authorized publication; it is the continuous build for version 0.0.1. This version is based on the current content of https://github.com/WorldHealthOrganization/smart-trust and changes regularly. See the Directory of published versions
+Contents:
+This page provides a list of the FHIR artifacts defined as part of this implementation guide.
+=l&&H.type===e)return E}if(r){const E=a[l];if(E&&Oi(E)&&E.type===e)return l}return null}function Ss(n,t,e,i){let r=n[e];const o=t.data;if(function pd(n){return n instanceof Cs}(r)){const a=r;a.resolving&&
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+function hs(n,t){const e=t?`. Dependency path: ${t.join(" > ")} > ${n}`:"";throw new Se(-200,`Circular dependency in DI detected for ${n}${e}`)}(function Me(n){return"function"==typeof n?n.name||n.toString():"object"==typeof n&&null!=n&&"function"==typeof n.type?n.type.name||n.type.toString():et(n)}(o[e]));const s=Rt(a.canSeeViewProviders);a.resolving=!0;const l=a.injectImpl?xi(a.injectImpl):null;ku(n,i,lt.Default);try{r=n[e]=a.factory(void 0,o,n,i),t.firstCreatePass&&e>=i.directiveStart&&
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+function fd(n,t,e){const{ngOnChanges:i,ngOnInit:r,ngDoCheck:o}=t.type.prototype;if(i){const a=Pc(t);(e.preOrderHooks||(e.preOrderHooks=[])).push(n,a),(e.preOrderCheckHooks||(e.preOrderCheckHooks=[])).push(n,a)}r&&(e.preOrderHooks||(e.preOrderHooks=[])).push(0-n,r),o&&((e.preOrderHooks||(e.preOrderHooks=[])).push(n,o),(e.preOrderCheckHooks||(e.preOrderCheckHooks=[])).push(n,o))}(e,o[e],t)}finally{null!==l&&xi(l),Rt(s),a.resolving=!1,Eu()}}return r}function Ru(n,t,e){return!!(e[t+(n>>5)]&1< {const le=P>0?ye==E?1:P*ye:a[ye],Pe=le*ne;e.currentTime=H+G.delay+Pe,G.duration=Pe,this._validateStyleAst(ue,e),ue.offset=le,i.styles.push(ue)}),i}visitReference(t,e){return{type:8,animation:Yr(this,W1(t.animation),e),options:qs(t.options)}}visitAnimateChild(t,e){return e.depCount++,{type:9,options:qs(t.options)}}visitAnimateRef(t,e){return{type:10,animation:this.visitReference(t.animation,e),options:qs(t.options)}}visitQuery(t,e){const i=e.currentQuerySelector,r=t.options||{};e.queryCount++,e.currentQuery=t;const[o,a]=function sN(n){const t=!!n.split(/\s*,\s*/).find(e=>":self"==e);return t&&(n=n.replace(oN,"")),n=n.replace(/@\*/g,v4).replace(/@\w+/g,e=>v4+"-"+e.slice(1)).replace(/:animating/g,D6),[n,t]}(t.selector);e.currentQuerySelector=i.length?i+" "+o:o,Ur(e.collectedStyles,e.currentQuerySelector,new Map);const s=Yr(this,W1(t.animation),e);return e.currentQuery=null,e.currentQuerySelector=i,{type:11,selector:o,limit:r.limit||0,optional:!!r.optional,includeSelf:a,animation:s,originalSelector:t.selector,options:qs(t.options)}}visitStagger(t,e){e.currentQuery||e.errors.push(function CF(){return new Se(3013,!1)}());const i="full"===t.timings?{duration:0,delay:0,easing:"full"}:_4(t.timings,e.errors,!0);return{type:12,animation:Yr(this,W1(t.animation),e),timings:i,options:null}}}class cN{constructor(t){this.errors=t,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles=new Map,this.options=null,this.unsupportedCSSPropertiesFound=new Set}}function qs(n){return n?(n=$1(n)).params&&(n.params=function lN(n){return n?$1(n):null}(n.params)):n={},n}function E6(n,t,e){return{duration:n,delay:t,easing:e}}function O6(n,t,e,i,r,o,a=null,s=!1){return{type:1,element:n,keyframes:t,preStyleProps:e,postStyleProps:i,duration:r,delay:o,totalTime:r+o,easing:a,subTimeline:s}}class T4{constructor(){this._map=new Map}get(t){return this._map.get(t)||[]}append(t,e){let i=this._map.get(t);i||this._map.set(t,i=[]),i.push(...e)}has(t){return this._map.has(t)}clear(){this._map.clear()}}
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */const mN=new RegExp(":enter","g"),gN=new RegExp(":leave","g");function I6(n,t,e,i,r,o=new Map,a=new Map,s,l,u=[]){return(new vN).buildKeyframes(n,t,e,i,r,o,a,s,l,u)}class vN{buildKeyframes(t,e,i,r,o,a,s,l,u,f=[]){u=u||new T4;const p=new A6(t,e,u,r,o,f,[]);p.options=l;const P=l.delay?Ca(l.delay):0;p.currentTimeline.delayNextStep(P),p.currentTimeline.setStyles([a],null,p.errors,l),Yr(this,i,p);const E=p.timelines.filter(H=>H.containsAnimation());if(E.length&&s.size){let H;for(let G=E.length-1;G>=0;G--){const ne=E[G];if(ne.element===e){H=ne;break}}H&&!H.allowOnlyTimelineStyles()&&H.setStyles([s],null,p.errors,l)}return E.length?E.map(H=>H.buildKeyframes()):[O6(e,[],[],[],0,P,"",!1)]}visitTrigger(t,e){}visitState(t,e){}visitTransition(t,e){}visitAnimateChild(t,e){const i=e.subInstructions.get(e.element);if(i){const r=e.createSubContext(t.options),o=e.currentTimeline.currentTime,a=this._visitSubInstructions(i,r,r.options);o!=a&&e.transformIntoNewTimeline(a)}e.previousNode=t}visitAnimateRef(t,e){const i=e.createSubContext(t.options);i.transformIntoNewTimeline(),this._applyAnimationRefDelays([t.options,t.animation.options],e,i),this.visitReference(t.animation,i),e.transformIntoNewTimeline(i.currentTimeline.currentTime),e.previousNode=t}_applyAnimationRefDelays(t,e,i){var r;for(const o of t){const a=null==o?void 0:o.delay;if(a){const s="number"==typeof a?a:Ca(G1(a,null!==(r=null==o?void 0:o.params)&&void 0!==r?r:{},e.errors));i.delayNextStep(s)}}}_visitSubInstructions(t,e,i){let o=e.currentTimeline.currentTime;const a=null!=i.duration?Ca(i.duration):null,s=null!=i.delay?Ca(i.delay):null;return 0!==a&&t.forEach(l=>{const u=e.appendInstructionToTimeline(l,a,s);o=Math.max(o,u.duration+u.delay)}),o}visitReference(t,e){e.updateOptions(t.options,!0),Yr(this,t.animation,e),e.previousNode=t}visitSequence(t,e){const i=e.subContextCount;let r=e;const o=t.options;if(o&&(o.params||o.delay)&&(r=e.createSubContext(o),r.transformIntoNewTimeline(),null!=o.delay)){6==r.previousNode.type&&(r.currentTimeline.snapshotCurrentStyles(),r.previousNode=D4);const a=Ca(o.delay);r.delayNextStep(a)}t.steps.length&&(t.steps.forEach(a=>Yr(this,a,r)),r.currentTimeline.applyStylesToKeyframe(),r.subContextCount>i&&r.transformIntoNewTimeline()),e.previousNode=t}visitGroup(t,e){const i=[];let r=e.currentTimeline.currentTime;const o=t.options&&t.options.delay?Ca(t.options.delay):0;t.steps.forEach(a=>{const s=e.createSubContext(t.options);o&&s.delayNextStep(o),Yr(this,a,s),r=Math.max(r,s.currentTimeline.currentTime),i.push(s.currentTimeline)}),i.forEach(a=>e.currentTimeline.mergeTimelineCollectedStyles(a)),e.transformIntoNewTimeline(r),e.previousNode=t}_visitTiming(t,e){if(t.dynamic){const i=t.strValue;return _4(e.params?G1(i,e.params,e.errors):i,e.errors)}return{duration:t.duration,delay:t.delay,easing:t.easing}}visitAnimate(t,e){const i=e.currentAnimateTimings=this._visitTiming(t.timings,e),r=e.currentTimeline;i.delay&&(e.incrementTime(i.delay),r.snapshotCurrentStyles());const o=t.style;5==o.type?this.visitKeyframes(o,e):(e.incrementTime(i.duration),this.visitStyle(o,e),r.applyStylesToKeyframe()),e.currentAnimateTimings=null,e.previousNode=t}visitStyle(t,e){const i=e.currentTimeline,r=e.currentAnimateTimings;!r&&i.hasCurrentStyleProperties()&&i.forwardFrame();const o=r&&r.easing||t.easing;t.isEmptyStep?i.applyEmptyStep(o):i.setStyles(t.styles,o,e.errors,e.options),e.previousNode=t}visitKeyframes(t,e){const i=e.currentAnimateTimings,r=e.currentTimeline.duration,o=i.duration,s=e.createSubContext().currentTimeline;s.easing=i.easing,t.styles.forEach(l=>{s.forwardTime((l.offset||0)*o),s.setStyles(l.styles,l.easing,e.errors,e.options),s.applyStylesToKeyframe()}),e.currentTimeline.mergeTimelineCollectedStyles(s),e.transformIntoNewTimeline(r+o),e.previousNode=t}visitQuery(t,e){const i=e.currentTimeline.currentTime,r=t.options||{},o=r.delay?Ca(r.delay):0;o&&(6===e.previousNode.type||0==i&&e.currentTimeline.hasCurrentStyleProperties())&&(e.currentTimeline.snapshotCurrentStyles(),e.previousNode=D4);let a=i;const s=e.invokeQuery(t.selector,t.originalSelector,t.limit,t.includeSelf,!!r.optional,e.errors);e.currentQueryTotal=s.length;let l=null;s.forEach((u,f)=>{e.currentQueryIndex=f;const p=e.createSubContext(t.options,u);o&&p.delayNextStep(o),u===e.element&&(l=p.currentTimeline),Yr(this,t.animation,p),p.currentTimeline.applyStylesToKeyframe(),a=Math.max(a,p.currentTimeline.currentTime)}),e.currentQueryIndex=0,e.currentQueryTotal=0,e.transformIntoNewTimeline(a),l&&(e.currentTimeline.mergeTimelineCollectedStyles(l),e.currentTimeline.snapshotCurrentStyles()),e.previousNode=t}visitStagger(t,e){const i=e.parentContext,r=e.currentTimeline,o=t.timings,a=Math.abs(o.duration),s=a*(e.currentQueryTotal-1);let l=a*e.currentQueryIndex;switch(o.duration<0?"reverse":o.easing){case"reverse":l=s-l;break;case"full":l=i.currentStaggerTime}const f=e.currentTimeline;l&&f.delayNextStep(l);const p=f.currentTime;Yr(this,t.animation,e),e.previousNode=t,i.currentStaggerTime=r.currentTime-p+(r.startTime-i.currentTimeline.startTime)}}const D4={};class A6{constructor(t,e,i,r,o,a,s,l){this._driver=t,this.element=e,this.subInstructions=i,this._enterClassName=r,this._leaveClassName=o,this.errors=a,this.timelines=s,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=D4,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=l||new k4(this._driver,e,0),s.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(t,e){if(!t)return;const i=t;let r=this.options;null!=i.duration&&(r.duration=Ca(i.duration)),null!=i.delay&&(r.delay=Ca(i.delay));const o=i.params;if(o){let a=r.params;a||(a=this.options.params={}),Object.keys(o).forEach(s=>{(!e||!a.hasOwnProperty(s))&&(a[s]=G1(o[s],a,this.errors))})}}_copyOptions(){const t={};if(this.options){const e=this.options.params;if(e){const i=t.params={};Object.keys(e).forEach(r=>{i[r]=e[r]})}}return t}createSubContext(t=null,e,i){const r=e||this.element,o=new A6(this._driver,r,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(r,i||0));return o.previousNode=this.previousNode,o.currentAnimateTimings=this.currentAnimateTimings,o.options=this._copyOptions(),o.updateOptions(t),o.currentQueryIndex=this.currentQueryIndex,o.currentQueryTotal=this.currentQueryTotal,o.parentContext=this,this.subContextCount++,o}transformIntoNewTimeline(t){return this.previousNode=D4,this.currentTimeline=this.currentTimeline.fork(this.element,t),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(t,e,i){const r={duration:null!=e?e:t.duration,delay:this.currentTimeline.currentTime+(null!=i?i:0)+t.delay,easing:""},o=new _N(this._driver,t.element,t.keyframes,t.preStyleProps,t.postStyleProps,r,t.stretchStartingKeyframe);return this.timelines.push(o),r}incrementTime(t){this.currentTimeline.forwardTime(this.currentTimeline.duration+t)}delayNextStep(t){t>0&&this.currentTimeline.delayNextStep(t)}invokeQuery(t,e,i,r,o,a){let s=[];if(r&&s.push(this.element),t.length>0){t=(t=t.replace(mN,"."+this._enterClassName)).replace(gN,"."+this._leaveClassName);let u=this._driver.query(this.element,t,1!=i);0!==i&&(u=i<0?u.slice(u.length+i,u.length):u.slice(0,i)),s.push(...u)}return!o&&0==s.length&&a.push(function wF(n){return new Se(3014,!1)}()),s}}class k4{constructor(t,e,i,r){this._driver=t,this.element=e,this.startTime=i,this._elementTimelineStylesLookup=r,this.duration=0,this._previousKeyframe=new Map,this._currentKeyframe=new Map,this._keyframes=new Map,this._styleSummary=new Map,this._localTimelineStyles=new Map,this._pendingStyles=new Map,this._backFill=new Map,this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(e),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(e,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(t){const e=1===this._keyframes.size&&this._pendingStyles.size;this.duration||e?(this.forwardTime(this.currentTime+t),e&&this.snapshotCurrentStyles()):this.startTime+=t}fork(t,e){return this.applyStylesToKeyframe(),new k4(this._driver,t,e||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=1,this._loadKeyframe()}forwardTime(t){this.applyStylesToKeyframe(),this.duration=t,this._loadKeyframe()}_updateStyle(t,e){this._localTimelineStyles.set(t,e),this._globalTimelineStyles.set(t,e),this._styleSummary.set(t,{time:this.currentTime,value:e})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(t){t&&this._previousKeyframe.set("easing",t);for(let[e,i]of this._globalTimelineStyles)this._backFill.set(e,i||ba),this._currentKeyframe.set(e,ba);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(t,e,i,r){var o;e&&this._previousKeyframe.set("easing",e);const a=r&&r.params||{},s=function yN(n,t){const e=new Map;let i;return n.forEach(r=>{if("*"===r){i=i||t.keys();for(let o of i)e.set(o,ba)}else es(r,e)}),e}(t,this._globalTimelineStyles);for(let[l,u]of s){const f=G1(u,a,i);this._pendingStyles.set(l,f),this._localTimelineStyles.has(l)||this._backFill.set(l,null!==(o=this._globalTimelineStyles.get(l))&&void 0!==o?o:ba),this._updateStyle(l,f)}}applyStylesToKeyframe(){0!=this._pendingStyles.size&&(this._pendingStyles.forEach((t,e)=>{this._currentKeyframe.set(e,t)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((t,e)=>{this._currentKeyframe.has(e)||this._currentKeyframe.set(e,t)}))}snapshotCurrentStyles(){for(let[t,e]of this._localTimelineStyles)this._pendingStyles.set(t,e),this._updateStyle(t,e)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){const t=[];for(let e in this._currentKeyframe)t.push(e);return t}mergeTimelineCollectedStyles(t){t._styleSummary.forEach((e,i)=>{const r=this._styleSummary.get(i);(!r||e.time>r.time)&&this._updateStyle(i,e.value)})}buildKeyframes(){this.applyStylesToKeyframe();const t=new Set,e=new Set,i=1===this._keyframes.size&&0===this.duration;let r=[];this._keyframes.forEach((s,l)=>{const u=es(s,new Map,this._backFill);u.forEach((f,p)=>{"!"===f?t.add(p):f===ba&&e.add(p)}),i||u.set("offset",l/this.duration),r.push(u)});const o=t.size?y4(t.values()):[],a=e.size?y4(e.values()):[];if(i){const s=r[0],l=new Map(s);s.set("offset",0),l.set("offset",1),r=[s,l]}return O6(this.element,r,o,a,this.duration,this.startTime,this.easing,!1)}}class _N extends k4{constructor(t,e,i,r,o,a,s=!1){super(t,e,a.delay),this.keyframes=i,this.preStyleProps=r,this.postStyleProps=o,this._stretchStartingKeyframe=s,this.timings={duration:a.duration,delay:a.delay,easing:a.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let t=this.keyframes,{delay:e,duration:i,easing:r}=this.timings;if(this._stretchStartingKeyframe&&e){const o=[],a=i+e,s=e/a,l=es(t[0]);l.set("offset",0),o.push(l);const u=es(t[0]);u.set("offset",_b(s)),o.push(u);const f=t.length-1;for(let p=1;p<=f;p++){let P=es(t[p]);const E=P.get("offset");P.set("offset",_b((e+E*i)/a)),o.push(P)}i=a,e=0,r="",t=o}return O6(this.element,t,this.preStyleProps,this.postStyleProps,i,e,r,!0)}}function _b(n,t=3){const e=Math.pow(10,t-1);return Math.round(n*e)/e}
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+class L6{}
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+const bN=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]);class CN extends L6{normalizePropertyName(t,e){return P6(t)}normalizeStyleValue(t,e,i,r){let o="";const a=i.toString().trim();if(bN.has(e)&&0!==i&&"0"!==i)if("number"==typeof i)o="px";else{const s=i.match(/^[+-]?[\d\.]+([a-z]*)$/);s&&0==s[1].length&&r.push(function hF(n,t){return new Se(3005,!1)}())}return a+o}}
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */function yb(n,t,e,i,r,o,a,s,l,u,f,p,P){return{type:0,element:n,triggerName:t,isRemovalTransition:r,fromState:e,fromStyles:o,toState:i,toStyles:a,timelines:s,queriedElements:l,preStyleProps:u,postStyleProps:f,totalTime:p,errors:P}}const F6={};class bb{constructor(t,e,i){this._triggerName=t,this.ast=e,this._stateStyles=i}match(t,e,i,r){return function wN(n,t,e,i,r){return n.some(o=>o(t,e,i,r))}(this.ast.matchers,t,e,i,r)}buildStyles(t,e,i){let r=this._stateStyles.get("*");return void 0!==t&&(r=this._stateStyles.get(null==t?void 0:t.toString())||r),r?r.buildStyles(e,i):new Map}build(t,e,i,r,o,a,s,l,u,f){var p;const P=[],E=this.ast.options&&this.ast.options.params||F6,G=this.buildStyles(i,s&&s.params||F6,P),ne=l&&l.params||F6,ue=this.buildStyles(r,ne,P),ye=new Set,le=new Map,Pe=new Map,Xe="void"===r,st={params:MN(ne,E),delay:null===(p=this.ast.options)||void 0===p?void 0:p.delay},Bt=f?[]:I6(t,e,this.ast.animation,o,a,G,ue,st,u,P);let yn=0;if(Bt.forEach(Ut=>{yn=Math.max(Ut.duration+Ut.delay,yn)}),P.length)return yb(e,this._triggerName,i,r,Xe,G,ue,[],[],le,Pe,yn,P);Bt.forEach(Ut=>{const Hn=Ut.element,On=Ur(le,Hn,new Set);Ut.preStyleProps.forEach(Ti=>On.add(Ti));const _i=Ur(Pe,Hn,new Set);Ut.postStyleProps.forEach(Ti=>_i.add(Ti)),Hn!==e&&ye.add(Hn)});const Ot=y4(ye.values());return yb(e,this._triggerName,i,r,Xe,G,ue,Bt,Ot,le,Pe,yn)}}function MN(n,t){const e=$1(t);for(const i in n)n.hasOwnProperty(i)&&null!=n[i]&&(e[i]=n[i]);return e}class SN{constructor(t,e,i){this.styles=t,this.defaultParams=e,this.normalizer=i}buildStyles(t,e){const i=new Map,r=$1(this.defaultParams);return Object.keys(t).forEach(o=>{const a=t[o];null!==a&&(r[o]=a)}),this.styles.styles.forEach(o=>{"string"!=typeof o&&o.forEach((a,s)=>{a&&(a=G1(a,r,e));const l=this.normalizer.normalizePropertyName(s,e);a=this.normalizer.normalizeStyleValue(s,l,a,e),i.set(l,a)})}),i}}class DN{constructor(t,e,i){this.name=t,this.ast=e,this._normalizer=i,this.transitionFactories=[],this.states=new Map,e.states.forEach(r=>{this.states.set(r.name,new SN(r.style,r.options&&r.options.params||{},i))}),Cb(this.states,"true","1"),Cb(this.states,"false","0"),e.transitions.forEach(r=>{this.transitionFactories.push(new bb(t,r,this.states))}),this.fallbackTransition=function kN(n,t,e){return new bb(n,{type:1,animation:{type:2,steps:[],options:null},matchers:[(a,s)=>!0],options:null,queryCount:0,depCount:0},t)}(t,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(t,e,i,r){return this.transitionFactories.find(a=>a.match(t,e,i,r))||null}matchStyles(t,e,i){return this.fallbackTransition.buildStyles(t,e,i)}}function Cb(n,t,e){n.has(t)?n.has(e)||n.set(e,n.get(t)):n.has(e)&&n.set(t,n.get(e))}
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */const xN=new T4;class PN{constructor(t,e,i){this.bodyNode=t,this._driver=e,this._normalizer=i,this._animations=new Map,this._playersById=new Map,this.players=[]}register(t,e){const i=[],o=z6(this._driver,e,i,[]);if(i.length)throw function PF(n){return new Se(3503,!1)}();this._animations.set(t,o)}_buildPlayer(t,e,i){const r=t.element,o=Jy(0,this._normalizer,0,t.keyframes,e,i);return this._driver.animate(r,o,t.duration,t.delay,t.easing,[],!0)}create(t,e,i={}){const r=[],o=this._animations.get(t);let a;const s=new Map;if(o?(a=I6(this._driver,e,o,T6,p4,new Map,new Map,i,xN,r),a.forEach(f=>{const p=Ur(s,f.element,new Map);f.postStyleProps.forEach(P=>p.set(P,null))})):(r.push(function zF(){return new Se(3300,!1)}()),a=[]),r.length)throw function EF(n){return new Se(3504,!1)}();s.forEach((f,p)=>{f.forEach((P,E)=>{f.set(E,this._driver.computeStyle(p,E,ba))})});const u=Ja(a.map(f=>{const p=s.get(f.element);return this._buildPlayer(f,new Map,p)}));return this._playersById.set(t,u),u.onDestroy(()=>this.destroy(t)),this.players.push(u),u}destroy(t){const e=this._getPlayer(t);e.destroy(),this._playersById.delete(t);const i=this.players.indexOf(e);i>=0&&this.players.splice(i,1)}_getPlayer(t){const e=this._playersById.get(t);if(!e)throw function OF(n){return new Se(3301,!1)}();return e}listen(t,e,i,r){const o=C6(e,"","","");return y6(this._getPlayer(t),i,o,r),()=>{}}command(t,e,i,r){if("register"==i)return void this.register(t,r[0]);if("create"==i)return void this.create(t,e,r[0]||{});const o=this._getPlayer(t);switch(i){case"play":o.play();break;case"pause":o.pause();break;case"reset":o.reset();break;case"restart":o.restart();break;case"finish":o.finish();break;case"init":o.init();break;case"setPosition":o.setPosition(parseFloat(r[0]));break;case"destroy":this.destroy(t)}}}
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */const wb="ng-animate-queued",N6="ng-animate-disabled",AN=[],Mb={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},LN={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},oo="__ng_removed";class R6{constructor(t,e=""){this.namespaceId=e;const i=t&&t.hasOwnProperty("value");if(this.value=function VN(n){return null!=n?n:null}(i?t.value:t),i){const o=$1(t);delete o.value,this.options=o}else this.options={};this.options.params||(this.options.params={})}get params(){return this.options.params}absorbOptions(t){const e=t.params;if(e){const i=this.options.params;Object.keys(e).forEach(r=>{null==i[r]&&(i[r]=e[r])})}}}const K1="void",V6=new R6(K1);class FN{constructor(t,e,i){this.id=t,this.hostElement=e,this._engine=i,this.players=[],this._triggers=new Map,this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+t,ao(e,this._hostClassName)}listen(t,e,i,r){if(!this._triggers.has(e))throw function IF(n,t){return new Se(3302,!1)}();if(null==i||0==i.length)throw function AF(n){return new Se(3303,!1)}();if(!function HN(n){return"start"==n||"done"==n}(i))throw function LF(n,t){return new Se(3400,!1)}();const o=Ur(this._elementListeners,t,[]),a={name:e,phase:i,callback:r};o.push(a);const s=Ur(this._engine.statesByElement,t,new Map);return s.has(e)||(ao(t,g4),ao(t,g4+"-"+e),s.set(e,V6)),()=>{this._engine.afterFlush(()=>{const l=o.indexOf(a);l>=0&&o.splice(l,1),this._triggers.has(e)||s.delete(e)})}}register(t,e){return!this._triggers.has(t)&&(this._triggers.set(t,e),!0)}_getTrigger(t){const e=this._triggers.get(t);if(!e)throw function FF(n){return new Se(3401,!1)}();return e}trigger(t,e,i,r=!0){const o=this._getTrigger(e),a=new H6(this.id,e,t);let s=this._engine.statesByElement.get(t);s||(ao(t,g4),ao(t,g4+"-"+e),this._engine.statesByElement.set(t,s=new Map));let l=s.get(e);const u=new R6(i,this.id);if(!(i&&i.hasOwnProperty("value"))&&l&&u.absorbOptions(l.options),s.set(e,u),l||(l=V6),u.value!==K1&&l.value===u.value){if(!function YN(n,t){const e=Object.keys(n),i=Object.keys(t);if(e.length!=i.length)return!1;for(let r=0;r =r.getTime()?e+1:t.getTime()>=a.getTime()?e:e-1}function lR(n){Ze(1,arguments);var t=sR(n),e=new Date(0);e.setFullYear(t,0,4),e.setHours(0,0,0,0);var i=O4(e);return i}var cR=6048e5;function I4(n){return(I4="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(n)}function hR(n){return Ze(1,arguments),n instanceof Date||"object"===I4(n)&&"[object Date]"===Object.prototype.toString.call(n)}function oc(n){if(Ze(1,arguments),!hR(n)&&"number"!=typeof n)return!1;var t=yt(n);return!isNaN(Number(t))}function dR(n,t){Ze(2,arguments);var e=yt(n).getTime(),i=Jn(t);return new Date(e+i)}function Vb(n,t){Ze(2,arguments);var e=Jn(t);return dR(n,-e)}function ac(n){Ze(1,arguments);var t=1,e=yt(n),i=e.getUTCDay(),r=(i