From 188a40b196b443d5aac32f707c0bbb3cbc5a3e97 Mon Sep 17 00:00:00 2001 From: djmaze Date: Tue, 20 Oct 2020 17:39:00 +0200 Subject: [PATCH] Basic JSON object properties revival now handled by AbstractModel This will be better for future use of JSON.stringify() and JSON.parse() For now the difference between the PHP JSON being PascalCase and the JS object properties being camelCase is handled by AbstractModel --- .eslintrc.js | 2 +- README.md | 22 +-- dev/Knoin/AbstractModel.js | 52 ++++++-- dev/Model/Attachment.js | 17 --- dev/Model/Contact.js | 7 +- dev/Model/ContactProperty.js | 11 +- dev/Model/Email.js | 8 +- dev/Model/Filter.js | 11 -- dev/Model/FilterCondition.js | 12 +- dev/Model/Folder.js | 6 - dev/Model/Message.js | 8 -- dev/Model/Template.js | 20 +-- .../libraries/RainLoop/Actions/Response.php | 2 +- .../app/libraries/RainLoop/Model/Template.php | 10 +- .../build/output/knockout-latest.debug.js | 1 + .../knockout/build/output/knockout-latest.js | 126 +++++++++--------- .../src/subscribables/observableArray.js | 1 + 17 files changed, 131 insertions(+), 185 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 11abf973b..afec4cd58 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -27,7 +27,7 @@ module.exports = { 'Squire': "readonly", 'SquireUI': "readonly", // node_modules/knockout but dev/External/ko.js is used -// 'ko': "readonly", + 'ko': "readonly", // vendors/routes/ 'hasher': "readonly", 'signals': "readonly", diff --git a/README.md b/README.md index da244e448..2de06793a 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ The result is faster and smaller download code (good for mobile networks). Things might work in Edge 18, Firefox 50-62 and Chrome 54-68 due to one polyfill for array.flat(). -* Added dev/prototype-*.js for some additional features +* Added dev/prototype*.js for some additional features * boot.js without webpack overhead * Modified Jua.js to be without jQuery * Replaced ProgressJS with simple native dropin @@ -107,22 +107,22 @@ RainLoop 1.14 vs SnappyMail |js/* |RainLoop |Snappy | |----------- |--------: |--------: | -|admin.js |2.130.942 | 666.175 | -|app.js |4.184.455 |2.412.164 | +|admin.js |2.130.942 | 665.605 | +|app.js |4.184.455 |2.402.380 | |boot.js | 671.522 | 5.285 | -|libs.js | 647.614 | 238.674 | +|libs.js | 647.614 | 238.766 | |polyfills.js | 325.834 | 0 | -|TOTAL |7.960.367 |3.322.298 | +|TOTAL |7.960.367 |3.312.036 | |js/min/* |RainLoop |Snappy |Rain gzip |gzip |brotli | |--------------- |--------: |--------: |--------: |--------: |--------: | -|admin.min.js | 252.147 | 91.598 | 73.657 | 23.547 | 20.518 | -|app.min.js | 511.202 | 325.187 |140.462 | 83.936 | 68.135 | +|admin.min.js | 252.147 | 91.510 | 73.657 | 23.529 | 20.480 | +|app.min.js | 511.202 | 322.449 |140.462 | 83.183 | 67.656 | |boot.min.js | 66.007 | 2.918 | 22.567 | 1.500 | 1.275 | -|libs.min.js | 572.545 | 134.223 |176.720 | 48.183 | 42.816 | +|libs.min.js | 572.545 | 134.315 |176.720 | 48.216 | 42.855 | |polyfills.min.js | 32.452 | 0 | 11.312 | 0 | 0 | -|TOTAL |1.434.353 | 553.926 |424.718 |157.166 |132.744 | -|TOTAL (no admin) |1.182.206 | 462.328 |351.061 |133.619 |112.226 | +|TOTAL |1.434.353 | 551.192 |424.718 |156.428 |132.266 | +|TOTAL (no admin) |1.182.206 | 459.682 |351.061 |132.899 |111.786 | For a user its around 61% smaller and faster than traditional RainLoop. @@ -156,7 +156,7 @@ For a user its around 61% smaller and faster than traditional RainLoop. ### Squire vs CKEditor -The [Squire](https://github.com/neilj/Squire) implementation is not 100% compatible yet, but is shows the massive overhead of CKEditor. +The [Squire](https://github.com/neilj/Squire) implementation is not 100% compatible yet, but it shows the massive overhead of CKEditor. Still TODO: diff --git a/dev/Knoin/AbstractModel.js b/dev/Knoin/AbstractModel.js index 3cb7b0f15..72df00560 100644 --- a/dev/Knoin/AbstractModel.js +++ b/dev/Knoin/AbstractModel.js @@ -5,6 +5,18 @@ function disposeOne(disposable) { } } +function typeCast(current, value) { + switch (typeof current) + { + case 'boolean': return !!value; + case 'string': return null != value ? '' + value : ''; + case 'number': + value = parseInt(value, 10); + return (isNaN(value) || !isFinite(value)) ? 0 : value; + } + return value; +} + export class AbstractModel { disposables = []; @@ -13,7 +25,7 @@ export class AbstractModel { */ constructor() { /* - if (new.target === Parent) { + if (new.target === AbstractModel) { throw new Error("Can't instantiate abstract class!"); } this.sModelName = new.target.name; @@ -50,15 +62,35 @@ export class AbstractModel { * @returns {*Model} */ static reviveFromJson(json) { - // Object/Attachment - // Object/Contact - // Object/Email - // Object/Filter - // Object/Folder - // Object/Message - // Object/Template - return this.validJson(json) ? new this() : null; -// json && Object.entries(json).forEach(([key, value]) => '@' !== key[0] && (this[key] = value)); + let obj = this.validJson(json) ? new this() : null; + try { + obj && Object.entries(json).forEach(([key, value]) => { + if ('@' !== key[0]) { + key = key[0].toLowerCase() + key.substr(1); + switch (typeof obj[key]) + { + case 'function': + if (ko.isObservable(obj[key]) && !ko.isObservableArray(obj[key])) { + obj[key](typeCast(obj[key](), value)); + } +// else { console.log('('+(typeof obj[key])+') '+key+' not revived'); } + break; + case 'boolean': + case 'string': + case 'number': + obj[key] = typeCast(obj[key], value); + break; +// case 'undefined': +// default: +// console.log('('+(typeof obj[key])+') '+key+' not revived'); + } + } + }); + } catch (e) { + console.log(this.name); + console.error(e); + } + return obj; } } diff --git a/dev/Model/Attachment.js b/dev/Model/Attachment.js index 235bc4950..1ff48eddd 100644 --- a/dev/Model/Attachment.js +++ b/dev/Model/Attachment.js @@ -47,23 +47,6 @@ class AttachmentModel extends AbstractModel { static reviveFromJson(json) { const attachment = super.reviveFromJson(json); if (attachment) { - attachment.mimeType = ((json.MimeType || '').toLowerCase()).trim(); - attachment.fileName = json.FileName.trim(); - // if it is inline - attachment.isInline = !!json.IsInline; - // if inline image is linked with CID in html - // and 'src="cid:' or background-image:url(cid:) - attachment.isLinked = !!json.IsLinked; - attachment.isThumbnail = !!json.IsThumbnail; - attachment.cid = json.CID; - attachment.contentLocation = json.ContentLocation; - attachment.download = json.Download; - - attachment.folder = json.Folder; - attachment.uid = json.Uid; - attachment.mimeIndex = json.MimeIndex; - attachment.framed = !!json.Framed; - attachment.friendlySize = File.friendlySize(json.EstimatedSize); attachment.cidWithoutTags = attachment.cid.replace(/^<+/, '').replace(/>+$/, ''); diff --git a/dev/Model/Contact.js b/dev/Model/Contact.js index d94c45067..8ae626c5c 100644 --- a/dev/Model/Contact.js +++ b/dev/Model/Contact.js @@ -2,7 +2,6 @@ import ko from 'ko'; import { ContactPropertyModel } from 'Model/ContactProperty'; import { ContactPropertyType } from 'Common/Enums'; -import { pInt, pString } from 'Common/Utils'; import { AbstractModel } from 'Knoin/AbstractModel'; @@ -53,10 +52,6 @@ class ContactModel extends AbstractModel { static reviveFromJson(json) { const contact = super.reviveFromJson(json); if (contact) { - contact.id = pInt(json.id); - contact.display = pString(json.display); - contact.readOnly = !!json.readOnly; - let list = []; if (Array.isNotEmpty(json.properties)) { json.properties.forEach(property => { @@ -103,7 +98,7 @@ class ContactModel extends AbstractModel { * @returns {string} */ generateUid() { - return pString(this.id); + return ''+this.id; } /** diff --git a/dev/Model/ContactProperty.js b/dev/Model/ContactProperty.js index b372180e7..3eaabcb7f 100644 --- a/dev/Model/ContactProperty.js +++ b/dev/Model/ContactProperty.js @@ -42,16 +42,7 @@ class ContactPropertyModel extends AbstractModel { }; } - static reviveFromJson(json) { - const property = super.reviveFromJson(json); - if (property) { - property.type(pInt(json.type)); - property.typeStr(pString(json.typeStr)); - property.value(pString(json.value)); - return property; - } - return null; - } +// static reviveFromJson(json) {} } export { ContactPropertyModel, ContactPropertyModel as default }; diff --git a/dev/Model/Email.js b/dev/Model/Email.js index 434a78b4b..22960beb3 100644 --- a/dev/Model/Email.js +++ b/dev/Model/Email.js @@ -289,13 +289,7 @@ class EmailModel extends AbstractModel { */ static reviveFromJson(json) { const email = super.reviveFromJson(json); - if (email) { - email.name = json.Name; - email.email = json.Email; - email.dkimStatus = (json.DkimStatus || ''); - email.dkimValue = (json.DkimValue || ''); - email.clearDuplicateName(); - } + email && email.clearDuplicateName(); return email; } diff --git a/dev/Model/Filter.js b/dev/Model/Filter.js index 81b26116a..9e92c9290 100644 --- a/dev/Model/Filter.js +++ b/dev/Model/Filter.js @@ -216,10 +216,6 @@ class FilterModel extends AbstractModel { const filter = super.reviveFromJson(json); if (filter) { filter.id = pString(json.ID); - filter.name(pString(json.Name)); - filter.enabled(!!json.Enabled); - - filter.conditionsType(pString(json.ConditionsType)); filter.conditions([]); @@ -229,13 +225,6 @@ class FilterModel extends AbstractModel { ); } - filter.actionType(pString(json.ActionType)); - - filter.actionValue(pString(json.ActionValue)); - filter.actionValueSecond(pString(json.ActionValueSecond)); - filter.actionValueThird(pString(json.ActionValueThird)); - filter.actionValueFourth(pString(json.ActionValueFourth)); - filter.actionNoStop(!json.Stop); filter.actionKeep(!!json.Keep); filter.actionMarkAsRead(!!json.MarkAsRead); diff --git a/dev/Model/FilterCondition.js b/dev/Model/FilterCondition.js index 80e78cfcf..9d3624a00 100644 --- a/dev/Model/FilterCondition.js +++ b/dev/Model/FilterCondition.js @@ -1,7 +1,6 @@ import ko from 'ko'; import { FilterConditionField, FilterConditionType } from 'Common/Enums'; -import { pString } from 'Common/Utils'; import { AbstractModel } from 'Knoin/AbstractModel'; @@ -56,16 +55,7 @@ class FilterConditionModel extends AbstractModel { return true; } - static reviveFromJson(json) { - const filter = super.reviveFromJson(json); - if (filter) { - this.field(pString(json.field)); - this.type(pString(json.type)); - this.value(pString(json.value)); - this.valueSecond(pString(json.valueSecond)); - } - return filter; - } +// static reviveFromJson(json) {} toJson() { return { diff --git a/dev/Model/Folder.js b/dev/Model/Folder.js index 43394571d..f4473bcfe 100644 --- a/dev/Model/Folder.js +++ b/dev/Model/Folder.js @@ -49,17 +49,11 @@ class FolderModel extends AbstractModel { static reviveFromJson(json) { const folder = super.reviveFromJson(json); if (folder) { - folder.name(json.Name); - folder.delimiter = json.Delimiter; - folder.fullName = json.FullName; - folder.fullNameRaw = json.FullNameRaw; - folder.fullNameHash = json.FullNameHash; folder.deep = json.FullNameRaw.split(folder.delimiter).length - 1; folder.selectable = !!json.IsSelectable; folder.existen = !!json.IsExists; folder.subScribed(!!json.IsSubscribed); - folder.checkable(!!json.Checkable); folder.isInbox = ko.computed(() => FolderType.Inbox === folder.type()); diff --git a/dev/Model/Message.js b/dev/Model/Message.js index 87ad7f31e..f2dc5ea65 100644 --- a/dev/Model/Message.js +++ b/dev/Model/Message.js @@ -100,11 +100,6 @@ class MessageModel extends AbstractModel { const oMessageModel = super.reviveFromJson(json); if (oMessageModel) { oMessageModel.folderFullNameRaw = json.Folder; - oMessageModel.uid = json.Uid; - oMessageModel.hash = json.Hash; - oMessageModel.requestHash = json.RequestHash; - - oMessageModel.size(pInt(json.Size)); oMessageModel.from = EmailCollectionModel.reviveFromJson(json.From); oMessageModel.to = EmailCollectionModel.reviveFromJson(json.To); @@ -114,7 +109,6 @@ class MessageModel extends AbstractModel { oMessageModel.deliveredTo = EmailCollectionModel.reviveFromJson(json.DeliveredTo); oMessageModel.unsubsribeLinks = Array.isNotEmpty(json.UnsubsribeLinks) ? json.UnsubsribeLinks : []; - oMessageModel.subject(json.Subject); if (isArray(json.SubjectParts)) { oMessageModel.subjectPrefix(json.SubjectParts[0]); oMessageModel.subjectSuffix(json.SubjectParts[1]); @@ -123,8 +117,6 @@ class MessageModel extends AbstractModel { oMessageModel.subjectSuffix(oMessageModel.subject()); } - oMessageModel.dateTimeStampInUTC(pInt(json.DateTimeStampInUTC)); - oMessageModel.fromEmailString(oMessageModel.from.toString(true)); oMessageModel.fromClearEmailString(oMessageModel.from.toStringClear()); oMessageModel.toEmailsString(oMessageModel.to.toString(true)); diff --git a/dev/Model/Template.js b/dev/Model/Template.js index e2427c278..e880336d8 100644 --- a/dev/Model/Template.js +++ b/dev/Model/Template.js @@ -1,7 +1,5 @@ import ko from 'ko'; -import { pString } from 'Common/Utils'; - import { AbstractModel } from 'Knoin/AbstractModel'; class TemplateModel extends AbstractModel { @@ -10,7 +8,7 @@ class TemplateModel extends AbstractModel { * @param {string} name * @param {string} body */ - constructor(id, name, body) { + constructor(id = '', name = '', body = '') { super(); this.id = id; @@ -21,21 +19,7 @@ class TemplateModel extends AbstractModel { this.deleteAccess = ko.observable(false); } - /** - * @static - * @param {FetchJsonTemplate} json - * @returns {?TemplateModel} - */ - static reviveFromJson(json) { - const template = super.reviveFromJson(json); - if (template) { - template.id = pString(json.ID); - template.name = pString(json.Name); - template.body = pString(json.Body); - template.populated = !!json.Populated; - } - return template; - } +// static reviveFromJson(json) {} } export { TemplateModel, TemplateModel as default }; diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Response.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Response.php index c1f850240..15cbd922d 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Response.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Response.php @@ -431,7 +431,7 @@ trait Response 'FileName' => \MailSo\Base\Utils::ClearFileName( \MailSo\Base\Utils::ClearXss($mResponse->FileName(true))), 'EstimatedSize' => $mResponse->EstimatedSize(), - 'CID' => $mResponse->Cid(), + 'Cid' => $mResponse->Cid(), 'ContentLocation' => $mResponse->ContentLocation(), 'IsInline' => $mResponse->IsInline(), 'IsThumbnail' => $this->GetCapa(false, false, Capa::ATTACHMENT_THUMBNAILS), diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Template.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Template.php index 951225431..ee75d1153 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Template.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Template.php @@ -86,11 +86,11 @@ class Template implements \JsonSerializable } } return array( -// '@Object' => 'Object/Template', - 'ID' => $this->Id(), - 'Name' => $this->Name(), - 'Body' => $sBody, - 'Populated' => $bPopulated + '@Object' => 'Object/Template', + 'id' => $this->Id(), + 'name' => $this->Name(), + 'body' => $sBody, + 'populated' => $bPopulated ); } diff --git a/vendors/knockout/build/output/knockout-latest.debug.js b/vendors/knockout/build/output/knockout-latest.debug.js index d59863ed9..1fcab31e3 100644 --- a/vendors/knockout/build/output/knockout-latest.debug.js +++ b/vendors/knockout/build/output/knockout-latest.debug.js @@ -1046,6 +1046,7 @@ ko.isObservableArray = instance => { }; ko.exportSymbol('observableArray', ko.observableArray); +ko.exportSymbol('isObservableArray', ko.isObservableArray); var arrayChangeEventName = 'arrayChange'; ko.extenders['trackArrayChanges'] = (target, options) => { // Use the provided options--each call to trackArrayChanges overwrites the previously set options diff --git a/vendors/knockout/build/output/knockout-latest.js b/vendors/knockout/build/output/knockout-latest.js index ae9e97590..8d01335d2 100644 --- a/vendors/knockout/build/output/knockout-latest.js +++ b/vendors/knockout/build/output/knockout-latest.js @@ -4,92 +4,92 @@ * License: MIT (http://www.opensource.org/licenses/mit-license.php) */ -(E=>{function I(b,c){return null===b||typeof b in ha?b===c:!1}function G(b,c){var e;return()=>{e||(e=a.a.setTimeout(()=>{e=void 0;b()},c))}}function J(b,c){var e;return()=>{clearTimeout(e);e=a.a.setTimeout(b,c)}}function U(b,c){null!==c&&c.o&&c.o()}function Y(b,c){var e=this.Fc,f=e[F];f.ia||(this.lb&&this.Qa[c]?(e.Sb(c,b,this.Qa[c]),this.Qa[c]=null,--this.lb):f.u[c]||e.Sb(c,b,f.A?{Y:b}:e.sc(b)),b.ta&&b.wc())}var V=E.document,Z={},a="undefined"!==typeof Z?Z:{};a.s=(b,c)=>{b=b.split(".");for(var e= -a,f=0;f{b[c]=e};a.version="3.5.1-sm";a.s("version",a.version);a.a=(()=>{const b=(h,l,d,g)=>Array.prototype[h].call(l,d,g),c=(h,l)=>{l&&Object.entries(l).forEach(d=>h[d[0]]=d[1]);return h},e=(h,l)=>{h.__proto__=l;return h};var f={__proto__:[]}instanceof Array;return{Z:(h,l,d)=>Array.prototype.forEach.call(h,l,d),$:(h,l)=>Array.prototype.indexOf.call(h,l,void 0),Vb:(h,l,d)=>b("find",h,(g,k,m)=>l.call(d,g,k,m)),Ma:(h,l)=>{l=a.a.$(h,l);0{if(l instanceof Array)h.push.apply(h,l);else for(var d=0,g=l.length;dh&&Object.entries(h).forEach(d=>l(d[0],d[1])),Ea:(h,l,d)=>{if(!h)return h;var g={};Object.entries(h).forEach(k=>g[k[0]]=l.call(d,k[1],k[0],h));return g},ob:h=>{for(;h.firstChild;)a.removeNode(h.firstChild)},wb:h=>{var l=a.a.qa(h),d=(l[0]&&l[0].ownerDocument||V).createElement("div");h.forEach(g=>d.append(a.oa(g)));return d}, +(E=>{function I(b,c){return null===b||typeof b in ha?b===c:!1}function G(b,c){var e;return()=>{e||(e=a.a.setTimeout(()=>{e=void 0;b()},c))}}function J(b,c){var e;return()=>{clearTimeout(e);e=a.a.setTimeout(b,c)}}function U(b,c){null!==c&&c.s&&c.s()}function Y(b,c){var e=this.Gc,f=e[F];f.ia||(this.lb&&this.Qa[c]?(e.Sb(c,b,this.Qa[c]),this.Qa[c]=null,--this.lb):f.u[c]||e.Sb(c,b,f.A?{Y:b}:e.tc(b)),b.ta&&b.xc())}var V=E.document,Z={},a="undefined"!==typeof Z?Z:{};a.m=(b,c)=>{b=b.split(".");for(var e= +a,f=0;f{b[c]=e};a.version="3.5.1-sm";a.m("version",a.version);a.a=(()=>{const b=(h,l,d,g)=>Array.prototype[h].call(l,d,g),c=(h,l)=>{l&&Object.entries(l).forEach(d=>h[d[0]]=d[1]);return h},e=(h,l)=>{h.__proto__=l;return h};var f={__proto__:[]}instanceof Array;return{Z:(h,l,d)=>Array.prototype.forEach.call(h,l,d),$:(h,l)=>Array.prototype.indexOf.call(h,l,void 0),Vb:(h,l,d)=>b("find",h,(g,k,m)=>l.call(d,g,k,m)),Ma:(h,l)=>{l=a.a.$(h,l);0{if(l instanceof Array)h.push.apply(h,l);else for(var d=0,g=l.length;dh&&Object.entries(h).forEach(d=>l(d[0],d[1])),Ea:(h,l,d)=>{if(!h)return h;var g={};Object.entries(h).forEach(k=>g[k[0]]=l.call(d,k[1],k[0],h));return g},ob:h=>{for(;h.firstChild;)a.removeNode(h.firstChild)},wb:h=>{var l=a.a.qa(h),d=(l[0]&&l[0].ownerDocument||V).createElement("div");h.forEach(g=>d.append(a.oa(g)));return d}, Oa:(h,l)=>b("map",h,l?d=>a.oa(d.cloneNode(!0)):d=>d.cloneNode(!0)),Fa:(h,l)=>{a.a.ob(h);l&&h.append.apply(h,l)},Ba:(h,l)=>{if(h.length){for(l=8===l.nodeType&&l.parentNode||l;h.length&&h[0].parentNode!==l;)h.splice(0,1);for(;1null==h?"":h.trim?h.trim():h.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,""),cd:(h,l)=>{h=h||"";return l.length> -h.length?!1:h.substring(0,l.length)===l},Ic:(h,l)=>l.contains(1!==h.nodeType?h.parentNode:h),nb:h=>a.a.Ic(h,h.ownerDocument.documentElement),da:h=>h&&h.tagName&&h.tagName.toLowerCase(),Zb:h=>a.onError?function(){try{return h.apply(this,arguments)}catch(l){throw a.onError&&a.onError(l),l;}}:h,setTimeout:(h,l)=>setTimeout(a.a.Zb(h),l),cc:h=>setTimeout(()=>{a.onError&&a.onError(h);throw h;},0),K:(h,l,d)=>{h.addEventListener(l,a.a.Zb(d),!1)},tc:(h,l)=>{if(!h||!h.nodeType)throw Error("element must be a DOM node when calling triggerEvent"); -h.dispatchEvent(new Event(l))},g:h=>a.O(h)?h():h,Wc:h=>a.O(h)?h.D():h,Hb:(h,l,d)=>{if(l){var g=d?"add":"remove";l.split(/\s+/).forEach(k=>h.classList[g](k))}},Bb:(h,l)=>h.textContent=a.a.g(l)||"",qa:h=>Array.from(h)}})();a.s("utils",a.a);a.s("unwrap",a.a.g);a.a.b=new function(){var b=0,c="__ko__"+Date.now(),e=(f,h)=>{var l=f[c];!l&&h&&(l=f[c]={});return l};return{get:(f,h)=>(f=e(f,!1))&&f[h],set:(f,h,l)=>{(f=e(f,void 0!==l))&&(f[h]=l)},rb:(f,h,l)=>{f=e(f,!0);return f[h]||(f[h]=l)},clear:f=>f[c]?(delete f[c], +h.length?!1:h.substring(0,l.length)===l},Jc:(h,l)=>l.contains(1!==h.nodeType?h.parentNode:h),nb:h=>a.a.Jc(h,h.ownerDocument.documentElement),da:h=>h&&h.tagName&&h.tagName.toLowerCase(),Zb:h=>a.onError?function(){try{return h.apply(this,arguments)}catch(l){throw a.onError&&a.onError(l),l;}}:h,setTimeout:(h,l)=>setTimeout(a.a.Zb(h),l),cc:h=>setTimeout(()=>{a.onError&&a.onError(h);throw h;},0),K:(h,l,d)=>{h.addEventListener(l,a.a.Zb(d),!1)},uc:(h,l)=>{if(!h||!h.nodeType)throw Error("element must be a DOM node when calling triggerEvent"); +h.dispatchEvent(new Event(l))},g:h=>a.O(h)?h():h,Wc:h=>a.O(h)?h.D():h,Hb:(h,l,d)=>{if(l){var g=d?"add":"remove";l.split(/\s+/).forEach(k=>h.classList[g](k))}},Bb:(h,l)=>h.textContent=a.a.g(l)||"",qa:h=>Array.from(h)}})();a.m("utils",a.a);a.m("unwrap",a.a.g);a.a.b=new function(){var b=0,c="__ko__"+Date.now(),e=(f,h)=>{var l=f[c];!l&&h&&(l=f[c]={});return l};return{get:(f,h)=>(f=e(f,!1))&&f[h],set:(f,h,l)=>{(f=e(f,void 0!==l))&&(f[h]=l)},rb:(f,h,l)=>{f=e(f,!0);return f[h]||(f[h]=l)},clear:f=>f[c]?(delete f[c], !0):!1,X:()=>b++ +c}};a.a.N=new function(){function b(d,g){var k=a.a.b.get(d,f);void 0===k&&g&&(k=[],a.a.b.set(d,f,k));return k}function c(d){var g=b(d,!1);if(g){g=g.slice(0);for(var k=0;k{if("function"!=typeof g)throw Error("Callback must be a function"); -b(d,!0).push(g)},Ab:(d,g)=>{var k=b(d,!1);k&&(a.a.Ma(k,g),0==k.length&&a.a.b.set(d,f,void 0))},oa:d=>{a.m.I(()=>{h[d.nodeType]&&(c(d),l[d.nodeType]&&e(d.getElementsByTagName("*")))});return d},removeNode:d=>{a.oa(d);d.parentNode&&d.parentNode.removeChild(d)}}};a.oa=a.a.N.oa;a.removeNode=a.a.N.removeNode;a.s("utils.domNodeDisposal",a.a.N);a.s("utils.domNodeDisposal.addDisposeCallback",a.a.N.wa);(()=>{var b=[0,"",""],c=[1,"","
"],e=[3,"","
"],f=[1, +b(d,!0).push(g)},Ab:(d,g)=>{var k=b(d,!1);k&&(a.a.Ma(k,g),0==k.length&&a.a.b.set(d,f,void 0))},oa:d=>{a.o.I(()=>{h[d.nodeType]&&(c(d),l[d.nodeType]&&e(d.getElementsByTagName("*")))});return d},removeNode:d=>{a.oa(d);d.parentNode&&d.parentNode.removeChild(d)}}};a.oa=a.a.N.oa;a.removeNode=a.a.N.removeNode;a.m("utils.domNodeDisposal",a.a.N);a.m("utils.domNodeDisposal.addDisposeCallback",a.a.N.wa);(()=>{var b=[0,"",""],c=[1,"","
"],e=[3,"","
"],f=[1, ""],h={thead:c,tbody:c,tfoot:c,tr:[2,"","
"],td:e,th:e,option:f,optgroup:f};a.a.Ya=(l,d)=>{var g=d;g||(g=V);d=g.parentWindow||g.defaultView||E;var k=a.a.Db(l).toLowerCase();g=g.createElement("div");var m=(k=k.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&h[k[1]]||b;k=m[0];l="ignored
"+m[1]+l+m[2]+"
";for("function"==typeof d.innerShiv?g.append(d.innerShiv(l)):g.innerHTML=l;k--;)g=g.lastChild;return a.a.qa(g.lastChild.childNodes)}; -a.a.Uc=(l,d)=>{l=a.a.Ya(l,d);return l.length&&l[0].parentElement||a.a.wb(l)};a.a.rc=(l,d)=>{a.a.ob(l);d=a.a.g(d);if(null!==d&&void 0!==d){"string"!=typeof d&&(d=d.toString());d=a.a.Ya(d,l.ownerDocument);for(var g=0;g{function b(){if(e)for(var d=e,g=0,k;hd){if(5E3<=++g){h=e;a.a.cc(Error("'Too much recursion' after processing "+g+" task groups."));break}d=e}try{k()}catch(m){a.a.cc(m)}}h=e=c.length=0}var c=[],e=0,f=1,h=0,l=(d=>{var g= -V.createElement("div");(new MutationObserver(d)).observe(g,{attributes:!0});return()=>g.classList.toggle("foo")})(b);return{pc:d=>{e||l(b);c[e++]=d;return f++},cancel:d=>{d-=f-e;d>=h&&d{b.throttleEvaluation=c;var e=null;return a.i({read:b,write:f=>{clearTimeout(e);e=a.a.setTimeout(()=>b(f),c)}})},rateLimit:(b,c)=>{if("number"==typeof c)var e=c;else{e=c.timeout;var f=c.method}var h="function"==typeof f?f:"notifyWhenChangesStop"==f?J:G;b.vb(l=> -h(l,e,c))},notify:(b,c)=>{b.equalityComparer="always"==c?null:I}};var ha={undefined:1,"boolean":1,number:1,string:1};a.s("extenders",a.pb);a.Eb=function(b,c,e){this.Y=b;this.Jb=c;this.Kb=e;this.eb=!1;this.Ja=this.fb=null;a.ba(this,"dispose",this.o);a.ba(this,"disposeWhenNodeIsRemoved",this.j)};a.Eb.prototype.o=function(){this.eb||(this.Ja&&a.a.N.Ab(this.fb,this.Ja),this.eb=!0,this.Kb(),this.Y=this.Jb=this.Kb=this.fb=this.Ja=null)};a.Eb.prototype.j=function(b){this.fb=b;a.a.N.wa(b,this.Ja=this.o.bind(this))}; -a.T=function(){a.a.Za(this,O);O.Va(this)};var O={Va:b=>{b.L={change:[]};b.Qb=1},subscribe:function(b,c,e){var f=this;e=e||"change";var h=new a.Eb(f,c?b.bind(c):b,()=>{a.a.Ma(f.L[e],h);f.La&&f.La(e)});f.xa&&f.xa(e);f.L[e]||(f.L[e]=[]);f.L[e].push(h);return h},notifySubscribers:function(b,c){c=c||"change";"change"===c&&this.ab();if(this.Ca(c)){c="change"===c&&this.uc||this.L[c].slice(0);try{a.m.Wb();for(var e=0,f;f=c[e];++e)f.eb||f.Jb(b)}finally{a.m.end()}}},Ta:function(){return this.Qb},Nc:function(b){return this.Ta()!== -b},ab:function(){++this.Qb},vb:function(b){var c=this,e=a.O(c),f,h,l,d,g;c.Ka||(c.Ka=c.notifySubscribers,c.notifySubscribers=function(m,p){p&&"change"!==p?"beforeChange"===p?this.Nb(m):this.Ka(m,p):this.Ob(m)});var k=b(()=>{c.ta=!1;e&&d===c&&(d=c.Lb?c.Lb():c());var m=h||g&&c.Xa(l,d);g=h=f=!1;m&&c.Ka(l=d)});c.Ob=(m,p)=>{p&&c.ta||(g=!p);c.uc=c.L.change.slice(0);c.ta=f=!0;d=m;k()};c.Nb=m=>{f||(l=m,c.Ka(m,"beforeChange"))};c.Pb=()=>{g=!0};c.wc=()=>{c.Xa(l,c.D(!0))&&(h=!0)}},Ca:function(b){return this.L[b]&& -this.L[b].length},Lc:function(b){if(b)return this.L[b]&&this.L[b].length||0;var c=0;a.a.J(this.L,(e,f)=>c+=f.length);return c},Xa:function(b,c){return!this.equalityComparer||!this.equalityComparer(b,c)},toString:()=>"[object Object]",extend:function(b){var c=this;b&&a.a.J(b,(e,f)=>{e=a.pb[e];"function"==typeof e&&(c=e(c,f)||c)});return c}};a.ba(O,"init",O.Va);a.ba(O,"subscribe",O.subscribe);a.ba(O,"extend",O.extend);a.ba(O,"getSubscriptionsCount",O.Lc);a.a.na&&a.a.setPrototypeOf(O,Function.prototype); -a.T.fn=O;a.Qc=b=>null!=b&&"function"==typeof b.subscribe&&"function"==typeof b.notifySubscribers;a.ya=a.m=(()=>{function b(l){e.push(f);f=l}function c(){f=e.pop()}var e=[],f,h=0;return{Wb:b,end:c,oc:l=>{if(f){if(!a.Qc(l))throw Error("Only subscribable things can act as dependencies");f.Cc.call(f.Dc,l,l.vc||(l.vc=++h))}},I:(l,d,g)=>{try{return b(),l.apply(d,g||[])}finally{c()}},Sa:()=>{if(f)return f.i.Sa()},qb:()=>{if(f)return f.i.qb()},tb:()=>{if(f)return f.tb},i:()=>{if(f)return f.i}}})();var P= -Symbol("_latestValue");a.ka=b=>{function c(){if(0{if((b="function"==typeof b&&b[R])&&b!==Q[R]&&b!==a.i.fn[R])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!b};a.kc=b=>"function"==typeof b&&(b[R]===Q[R]||b[R]===a.i.fn[R]&&b.ic);a.s("observable",a.ka);a.s("isObservable",a.O);a.s("observable.fn",Q);a.ba(Q,"valueHasMutated",Q.Ia);a.ra=b=>{b=b||[];if("object"!=typeof b||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined."); +a.a.Uc=(l,d)=>{l=a.a.Ya(l,d);return l.length&&l[0].parentElement||a.a.wb(l)};a.a.sc=(l,d)=>{a.a.ob(l);d=a.a.g(d);if(null!==d&&void 0!==d){"string"!=typeof d&&(d=d.toString());d=a.a.Ya(d,l.ownerDocument);for(var g=0;g{function b(){if(e)for(var d=e,g=0,k;hd){if(5E3<=++g){h=e;a.a.cc(Error("'Too much recursion' after processing "+g+" task groups."));break}d=e}try{k()}catch(m){a.a.cc(m)}}h=e=c.length=0}var c=[],e=0,f=1,h=0,l=(d=>{var g= +V.createElement("div");(new MutationObserver(d)).observe(g,{attributes:!0});return()=>g.classList.toggle("foo")})(b);return{qc:d=>{e||l(b);c[e++]=d;return f++},cancel:d=>{d-=f-e;d>=h&&d{b.throttleEvaluation=c;var e=null;return a.i({read:b,write:f=>{clearTimeout(e);e=a.a.setTimeout(()=>b(f),c)}})},rateLimit:(b,c)=>{if("number"==typeof c)var e=c;else{e=c.timeout;var f=c.method}var h="function"==typeof f?f:"notifyWhenChangesStop"==f?J:G;b.vb(l=> +h(l,e,c))},notify:(b,c)=>{b.equalityComparer="always"==c?null:I}};var ha={undefined:1,"boolean":1,number:1,string:1};a.m("extenders",a.pb);a.Eb=function(b,c,e){this.Y=b;this.Jb=c;this.Kb=e;this.eb=!1;this.Ja=this.fb=null;a.ba(this,"dispose",this.s);a.ba(this,"disposeWhenNodeIsRemoved",this.j)};a.Eb.prototype.s=function(){this.eb||(this.Ja&&a.a.N.Ab(this.fb,this.Ja),this.eb=!0,this.Kb(),this.Y=this.Jb=this.Kb=this.fb=this.Ja=null)};a.Eb.prototype.j=function(b){this.fb=b;a.a.N.wa(b,this.Ja=this.s.bind(this))}; +a.T=function(){a.a.Za(this,O);O.Va(this)};var O={Va:b=>{b.L={change:[]};b.Qb=1},subscribe:function(b,c,e){var f=this;e=e||"change";var h=new a.Eb(f,c?b.bind(c):b,()=>{a.a.Ma(f.L[e],h);f.La&&f.La(e)});f.xa&&f.xa(e);f.L[e]||(f.L[e]=[]);f.L[e].push(h);return h},notifySubscribers:function(b,c){c=c||"change";"change"===c&&this.ab();if(this.Ca(c)){c="change"===c&&this.vc||this.L[c].slice(0);try{a.o.Wb();for(var e=0,f;f=c[e];++e)f.eb||f.Jb(b)}finally{a.o.end()}}},Ta:function(){return this.Qb},Oc:function(b){return this.Ta()!== +b},ab:function(){++this.Qb},vb:function(b){var c=this,e=a.O(c),f,h,l,d,g;c.Ka||(c.Ka=c.notifySubscribers,c.notifySubscribers=function(m,p){p&&"change"!==p?"beforeChange"===p?this.Nb(m):this.Ka(m,p):this.Ob(m)});var k=b(()=>{c.ta=!1;e&&d===c&&(d=c.Lb?c.Lb():c());var m=h||g&&c.Xa(l,d);g=h=f=!1;m&&c.Ka(l=d)});c.Ob=(m,p)=>{p&&c.ta||(g=!p);c.vc=c.L.change.slice(0);c.ta=f=!0;d=m;k()};c.Nb=m=>{f||(l=m,c.Ka(m,"beforeChange"))};c.Pb=()=>{g=!0};c.xc=()=>{c.Xa(l,c.D(!0))&&(h=!0)}},Ca:function(b){return this.L[b]&& +this.L[b].length},Mc:function(b){if(b)return this.L[b]&&this.L[b].length||0;var c=0;a.a.J(this.L,(e,f)=>c+=f.length);return c},Xa:function(b,c){return!this.equalityComparer||!this.equalityComparer(b,c)},toString:()=>"[object Object]",extend:function(b){var c=this;b&&a.a.J(b,(e,f)=>{e=a.pb[e];"function"==typeof e&&(c=e(c,f)||c)});return c}};a.ba(O,"init",O.Va);a.ba(O,"subscribe",O.subscribe);a.ba(O,"extend",O.extend);a.ba(O,"getSubscriptionsCount",O.Mc);a.a.na&&a.a.setPrototypeOf(O,Function.prototype); +a.T.fn=O;a.Qc=b=>null!=b&&"function"==typeof b.subscribe&&"function"==typeof b.notifySubscribers;a.ya=a.o=(()=>{function b(l){e.push(f);f=l}function c(){f=e.pop()}var e=[],f,h=0;return{Wb:b,end:c,pc:l=>{if(f){if(!a.Qc(l))throw Error("Only subscribable things can act as dependencies");f.Dc.call(f.Ec,l,l.wc||(l.wc=++h))}},I:(l,d,g)=>{try{return b(),l.apply(d,g||[])}finally{c()}},Sa:()=>{if(f)return f.i.Sa()},qb:()=>{if(f)return f.i.qb()},tb:()=>{if(f)return f.tb},i:()=>{if(f)return f.i}}})();var P= +Symbol("_latestValue");a.ka=b=>{function c(){if(0{if((b="function"==typeof b&&b[R])&&b!==Q[R]&&b!==a.i.fn[R])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!b};a.lc=b=>"function"==typeof b&&(b[R]===Q[R]||b[R]===a.i.fn[R]&&b.ic);a.m("observable",a.ka);a.m("isObservable",a.O);a.m("observable.fn",Q);a.ba(Q,"valueHasMutated",Q.Ia);a.ra=b=>{b=b||[];if("object"!=typeof b||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined."); b=a.ka(b);a.a.Za(b,a.ra.fn);return b.extend({trackArrayChanges:!0})};a.ra.fn={remove:function(b){for(var c=this.D(),e=[],f="function"!=typeof b||a.O(b)?function(d){return d===b}:b,h=0;h{a.ra.fn[b]=function(){var c=this.D();this.bb();this.Yb(c,b,arguments);var e=c[b].apply(c,arguments);this.Ia();return e===c?this:e}});["slice"].forEach(b=>{a.ra.fn[b]=function(){var c=this();return c[b].apply(c,arguments)}});a.Pc=b=>a.O(b)&&"function"==typeof b.remove&&"function"==typeof b.push; -a.s("observableArray",a.ra);a.pb.trackArrayChanges=(b,c)=>{function e(){function q(){if(g){var u=[].concat(b.D()||[]);if(b.Ca("arrayChange")){if(!h||1++g,null,"spectate"),k=[].concat(b.D()||[]),h=null,l=b.subscribe(q))}b.jb={};c&&"object"==typeof c&&a.a.extend(b.jb,c);b.jb.sparse=!0;if(!b.Yb){var f=!1,h=null,l,d,g=0,k,m=b.xa,p=b.La;b.xa=q=>{m&&m.call(b,q);"arrayChange"===q&& -e()};b.La=q=>{p&&p.call(b,q);"arrayChange"!==q||b.Ca("arrayChange")||(l&&l.o(),d&&d.o(),d=l=null,f=!1,k=void 0)};b.Yb=(q,u,y)=>{function t(C,A,H){return x[x.length]={status:C,value:A,index:H}}if(f&&!g){var x=[],n=q.length,r=y.length,v=0;switch(u){case "push":v=n;case "unshift":for(u=0;uy[0]?n+y[0]:y[0]),n);n=1===r?n:Math.min(u+(y[1]||0),n);r=u+r-2;v=Math.max(n,r);for(var w= -[],B=[],z=2;ub[e.ua]=e.Y);return b},sb:function(b){if(!this[F].M)return!1;var c=this.qb();return-1!==a.a.$(c,b)?!0:!!a.a.Vb(c,e=>e.sb&&e.sb(b))},Sb:function(b,c,e){if(this[F].zb&&c===this)throw Error("A 'pure' computed must not be called recursively");this[F].u[b]=e;e.ua=this[F].M++;e.va=c.Ta()},Da:function(){var b, -c=this[F].u;for(b in c)if(Object.prototype.hasOwnProperty.call(c,b)){var e=c[b];if(this.sa&&e.Y.ta||e.Y.Nc(e.va))return!0}},fd:function(){this.sa&&!this[F].Wa&&this.sa(!1)},ha:function(){var b=this[F];return b.ca||0b.V(!0),c)):b.sa?b.sa(!0):b.V(!0)},V:function(b){var c=this[F], -e=c.za,f=!1;if(!c.Wa&&!c.ia){if(c.j&&!a.a.nb(c.j)||e&&e()){if(!c.Fb){this.o();return}}else c.Fb=!1;c.Wa=!0;try{f=this.Kc(b)}finally{c.Wa=!1}return f}},Kc:function(b){var c=this[F],e=c.zb?void 0:!c.M;var f={Fc:this,Qa:c.u,lb:c.M};a.m.Wb({Dc:f,Cc:Y,i:this,tb:e});c.u={};c.M=0;var h=this.Jc(c,f);c.M?f=this.Xa(c.P,h):(this.o(),f=!0);f&&(c.A?this.ab():this.notifySubscribers(c.P,"beforeChange"),c.P=h,this.notifySubscribers(c.P,"spectate"),!c.A&&b&&this.notifySubscribers(c.P),this.Pb&&this.Pb());e&&this.notifySubscribers(c.P, -"awake");return f},Jc:(b,c)=>{try{var e=b.nc;return b.Ra?e.call(b.Ra):e()}finally{a.m.end(),c.lb&&!b.A&&a.a.J(c.Qa,U),b.ja=b.ca=!1}},D:function(b){var c=this[F];(c.ca&&(b||!c.M)||c.A&&this.Da())&&this.V();return c.P},vb:function(b){a.T.fn.vb.call(this,b);this.Lb=function(){this[F].A||(this[F].ja?this.V():this[F].ca=!1);return this[F].P};this.sa=function(c){this.Nb(this[F].P);this[F].ca=!0;c&&(this[F].ja=!0);this.Ob(this,!c)}},o:function(){var b=this[F];!b.A&&b.u&&a.a.J(b.u,(c,e)=>e.o&&e.o());b.j&& -b.mb&&a.a.N.Ab(b.j,b.mb);b.u=void 0;b.M=0;b.ia=!0;b.ja=!1;b.ca=!1;b.A=!1;b.j=void 0;b.za=void 0;b.nc=void 0;this.ic||(b.Ra=void 0)}},ia={xa:function(b){var c=this,e=c[F];if(!e.ia&&e.A&&"change"==b){e.A=!1;if(e.ja||c.Da())e.u=null,e.M=0,c.V()&&c.ab();else{var f=[];a.a.J(e.u,(h,l)=>f[l.ua]=h);a.a.Z(f,(h,l)=>{var d=e.u[h],g=c.sc(d.Y);g.ua=l;g.va=d.va;e.u[h]=g});c.Da()&&c.V()&&c.ab()}e.ia||c.notifySubscribers(e.P,"awake")}},La:function(b){var c=this[F];c.ia||"change"!=b||this.Ca("change")||(a.a.J(c.u, -(e,f)=>{f.o&&(c.u[e]={Y:f.Y,ua:f.ua,va:f.va},f.o())}),c.A=!0,this.notifySubscribers(void 0,"asleep"))},Ta:function(){var b=this[F];b.A&&(b.ja||this.Da())&&this.V();return a.T.fn.Ta.call(this)}},ja={xa:function(b){"change"!=b&&"beforeChange"!=b||this.D()}};a.a.na&&a.a.setPrototypeOf(W,a.T.fn);W[a.ka.xc]=a.i;a.s("computed",a.i);a.s("computed.fn",W);a.ba(W,"dispose",W.o);a.Yc=b=>{if("function"===typeof b)return a.i(b,void 0,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.i(b,void 0)};(()=>{a.B={S:b=> -{switch(a.a.da(b)){case "option":return!0===b.__ko__hasDomDataOptionValue__?a.a.b.get(b,a.c.options.yb):b.value;case "select":return 0<=b.selectedIndex?a.B.S(b.options[b.selectedIndex]):void 0;default:return b.value}},cb:(b,c,e)=>{switch(a.a.da(b)){case "option":"string"===typeof c?(a.a.b.set(b,a.c.options.yb,void 0),delete b.__ko__hasDomDataOptionValue__,b.value=c):(a.a.b.set(b,a.c.options.yb,c),b.__ko__hasDomDataOptionValue__=!0,b.value="number"===typeof c?c:"");break;case "select":if(""===c||null=== -c)c=void 0;for(var f=-1,h=0,l=b.options.length,d;h{function b(g){g=a.a.Db(g);123===g.charCodeAt(0)&&(g=g.slice(1,-1));g+="\n,";var k=[],m=g.match(f),p=[],q=0;if(1=q){k.push(x&&p.length?{key:x,value:p.join("")}:{unknown:x||p.join("")});var x= -q=0;p=[];continue}}else if(58===t){if(!q&&!x&&1===p.length){x=p.pop();continue}}else if(47===t&&1m(t.key||t.unknown,t.value));q.length&&m("_ko_property_writers","{"+q.join(",")+" }");return p.join(",")},Sc:(g,k)=>{for(var m=0;m{if(g&&a.O(g))!a.kc(g)||q&&g.D()===p||g(p);else if((g=k.get("_ko_property_writers"))&& -g[m])g[m](p)}}})();(()=>{function b(d){return 8==d.nodeType&&f.test(d.nodeValue)}function c(d){return 8==d.nodeType&&h.test(d.nodeValue)}function e(d,g){for(var k=d,m=1,p=[];k=k.nextSibling;){if(c(k)&&(a.a.b.set(k,l,!0),m--,0===m))return p;p.push(k);b(k)&&m++}if(!g)throw Error("Cannot find closing comment tag to match: "+d.nodeValue);return null}var f=/^\s*ko(?:\s+([\s\S]+))?\s*$/,h=/^\s*\/ko\s*$/,l="__ko_matchedEndComment__";a.h={la:{},childNodes:d=>b(d)?e(d):d.childNodes,Aa:d=>{if(b(d)){d=a.h.childNodes(d); -for(var g=0,k=d.length;g{if(b(d)){a.h.Aa(d);d=d.nextSibling;for(var k=0,m=g.length;k{if(b(d)){var k=d.nextSibling;d=d.parentNode}else k=d.firstChild;d.insertBefore(g,k)},jc:(d,g,k)=>{k?(k=k.nextSibling,b(d)&&(d=d.parentNode),d.insertBefore(g,k)):a.h.prepend(d,g)},firstChild:d=>{if(!b(d)){if(d.firstChild&&c(d.firstChild))throw Error("Found invalid end comment, as the first child of "+ -d);return d.firstChild}return!d.nextSibling||c(d.nextSibling)?null:d.nextSibling},nextSibling:d=>{if(b(d)){var g=e(d,void 0);d=g?0(d=d.nodeValue.match(f))?d[1]:null}})();(function(){a.aa=function(){this.Bc={}};a.a.extend(a.aa.prototype,{nodeHasBindings:b=> -{switch(b.nodeType){case 1:return null!=b.getAttribute("data-bind")||a.l.getComponentNameForNode(b);case 8:return a.h.Mc(b);default:return!1}},getBindings:function(b,c){var e=this.getBindingsString(b,c);e=e?this.parseBindingsString(e,c,b):null;return a.l.Rb(e,b,c,!1)},getBindingAccessors:function(b,c){var e=this.getBindingsString(b,c);e=e?this.parseBindingsString(e,c,b,{valueAccessors:!0}):null;return a.l.Rb(e,b,c,!0)},getBindingsString:b=>{switch(b.nodeType){case 1:return b.getAttribute("data-bind"); -case 8:return a.h.dd(b)}return null},parseBindingsString:function(b,c,e,f){try{var h=this.Bc,l=b+(f&&f.valueAccessors||""),d;if(!(d=h[l])){var g="with($context){with($data||{}){return{"+a.H.Xc(b,f)+"}}}";var k=new Function("$context","$element",g);d=h[l]=k}return d(c,e)}catch(m){throw m.message="Unable to parse bindings.\nBindings value: "+b+"\nMessage: "+m.message,m;}}});a.aa.instance=new a.aa})();(()=>{function b(n){var r=(n=a.a.b.get(n,x))&&n.G;r&&(n.G=null,r.mc())}function c(n,r,v){this.node= -n;this.Xb=r;this.Na=[];this.C=!1;r.G||a.a.N.wa(n,b);v&&v.G&&(v.G.Na.push(n),this.gb=v)}function e(n){return a.a.Ea(a.m.I(n),(r,v)=>()=>n()[v])}function f(n,r,v){return"function"===typeof n?e(n.bind(null,r,v)):a.a.Ea(n,w=>()=>w)}function h(n,r){return e(this.getBindings.bind(this,n,r))}function l(n,r){var v=a.h.firstChild(r);if(v){var w,B=a.aa.instance,z=B.preprocessNode;if(z){for(;w=v;)v=a.h.nextSibling(w),z.call(B,w);v=a.h.firstChild(r)}for(;w=v;)v=a.h.nextSibling(w),d(n,w)}a.f.notify(r,a.f.C)}function d(n, +this.remove(function(f){return 0<=a.a.$(b,f)}):[]},indexOf:function(b){return a.a.$(this(),b)}};a.a.na&&a.a.setPrototypeOf(a.ra.fn,a.ka.fn);"pop push reverse shift sort splice unshift".split(" ").forEach(b=>{a.ra.fn[b]=function(){var c=this.D();this.bb();this.Yb(c,b,arguments);var e=c[b].apply(c,arguments);this.Ia();return e===c?this:e}});["slice"].forEach(b=>{a.ra.fn[b]=function(){var c=this();return c[b].apply(c,arguments)}});a.kc=b=>a.O(b)&&"function"==typeof b.remove&&"function"==typeof b.push; +a.m("observableArray",a.ra);a.m("isObservableArray",a.kc);a.pb.trackArrayChanges=(b,c)=>{function e(){function q(){if(g){var u=[].concat(b.D()||[]);if(b.Ca("arrayChange")){if(!h||1++g,null,"spectate"),k=[].concat(b.D()||[]),h=null,l=b.subscribe(q))}b.jb={};c&&"object"==typeof c&&a.a.extend(b.jb,c);b.jb.sparse=!0;if(!b.Yb){var f=!1,h=null,l,d,g=0,k,m=b.xa,p=b.La;b.xa=q=>{m&& +m.call(b,q);"arrayChange"===q&&e()};b.La=q=>{p&&p.call(b,q);"arrayChange"!==q||b.Ca("arrayChange")||(l&&l.s(),d&&d.s(),d=l=null,f=!1,k=void 0)};b.Yb=(q,u,y)=>{function t(C,A,H){return x[x.length]={status:C,value:A,index:H}}if(f&&!g){var x=[],n=q.length,r=y.length,v=0;switch(u){case "push":v=n;case "unshift":for(u=0;uy[0]?n+y[0]:y[0]),n);n=1===r?n:Math.min(u+(y[1]||0),n); +r=u+r-2;v=Math.max(n,r);for(var w=[],B=[],z=2;ub[e.ua]=e.Y);return b},sb:function(b){if(!this[F].M)return!1;var c=this.qb();return-1!==a.a.$(c,b)?!0:!!a.a.Vb(c,e=>e.sb&&e.sb(b))},Sb:function(b,c,e){if(this[F].zb&&c===this)throw Error("A 'pure' computed must not be called recursively");this[F].u[b]=e;e.ua=this[F].M++; +e.va=c.Ta()},Da:function(){var b,c=this[F].u;for(b in c)if(Object.prototype.hasOwnProperty.call(c,b)){var e=c[b];if(this.sa&&e.Y.ta||e.Y.Oc(e.va))return!0}},fd:function(){this.sa&&!this[F].Wa&&this.sa(!1)},ha:function(){var b=this[F];return b.ca||0b.V(!0),c)):b.sa?b.sa(!0): +b.V(!0)},V:function(b){var c=this[F],e=c.za,f=!1;if(!c.Wa&&!c.ia){if(c.j&&!a.a.nb(c.j)||e&&e()){if(!c.Fb){this.s();return}}else c.Fb=!1;c.Wa=!0;try{f=this.Lc(b)}finally{c.Wa=!1}return f}},Lc:function(b){var c=this[F],e=c.zb?void 0:!c.M;var f={Gc:this,Qa:c.u,lb:c.M};a.o.Wb({Ec:f,Dc:Y,i:this,tb:e});c.u={};c.M=0;var h=this.Kc(c,f);c.M?f=this.Xa(c.P,h):(this.s(),f=!0);f&&(c.A?this.ab():this.notifySubscribers(c.P,"beforeChange"),c.P=h,this.notifySubscribers(c.P,"spectate"),!c.A&&b&&this.notifySubscribers(c.P), +this.Pb&&this.Pb());e&&this.notifySubscribers(c.P,"awake");return f},Kc:(b,c)=>{try{var e=b.oc;return b.Ra?e.call(b.Ra):e()}finally{a.o.end(),c.lb&&!b.A&&a.a.J(c.Qa,U),b.ja=b.ca=!1}},D:function(b){var c=this[F];(c.ca&&(b||!c.M)||c.A&&this.Da())&&this.V();return c.P},vb:function(b){a.T.fn.vb.call(this,b);this.Lb=function(){this[F].A||(this[F].ja?this.V():this[F].ca=!1);return this[F].P};this.sa=function(c){this.Nb(this[F].P);this[F].ca=!0;c&&(this[F].ja=!0);this.Ob(this,!c)}},s:function(){var b=this[F]; +!b.A&&b.u&&a.a.J(b.u,(c,e)=>e.s&&e.s());b.j&&b.mb&&a.a.N.Ab(b.j,b.mb);b.u=void 0;b.M=0;b.ia=!0;b.ja=!1;b.ca=!1;b.A=!1;b.j=void 0;b.za=void 0;b.oc=void 0;this.ic||(b.Ra=void 0)}},ia={xa:function(b){var c=this,e=c[F];if(!e.ia&&e.A&&"change"==b){e.A=!1;if(e.ja||c.Da())e.u=null,e.M=0,c.V()&&c.ab();else{var f=[];a.a.J(e.u,(h,l)=>f[l.ua]=h);a.a.Z(f,(h,l)=>{var d=e.u[h],g=c.tc(d.Y);g.ua=l;g.va=d.va;e.u[h]=g});c.Da()&&c.V()&&c.ab()}e.ia||c.notifySubscribers(e.P,"awake")}},La:function(b){var c=this[F];c.ia|| +"change"!=b||this.Ca("change")||(a.a.J(c.u,(e,f)=>{f.s&&(c.u[e]={Y:f.Y,ua:f.ua,va:f.va},f.s())}),c.A=!0,this.notifySubscribers(void 0,"asleep"))},Ta:function(){var b=this[F];b.A&&(b.ja||this.Da())&&this.V();return a.T.fn.Ta.call(this)}},ja={xa:function(b){"change"!=b&&"beforeChange"!=b||this.D()}};a.a.na&&a.a.setPrototypeOf(W,a.T.fn);W[a.ka.yc]=a.i;a.m("computed",a.i);a.m("computed.fn",W);a.ba(W,"dispose",W.s);a.Yc=b=>{if("function"===typeof b)return a.i(b,void 0,{pure:!0});b=a.a.extend({},b);b.pure= +!0;return a.i(b,void 0)};(()=>{a.B={S:b=>{switch(a.a.da(b)){case "option":return!0===b.__ko__hasDomDataOptionValue__?a.a.b.get(b,a.c.options.yb):b.value;case "select":return 0<=b.selectedIndex?a.B.S(b.options[b.selectedIndex]):void 0;default:return b.value}},cb:(b,c,e)=>{switch(a.a.da(b)){case "option":"string"===typeof c?(a.a.b.set(b,a.c.options.yb,void 0),delete b.__ko__hasDomDataOptionValue__,b.value=c):(a.a.b.set(b,a.c.options.yb,c),b.__ko__hasDomDataOptionValue__=!0,b.value="number"===typeof c? +c:"");break;case "select":if(""===c||null===c)c=void 0;for(var f=-1,h=0,l=b.options.length,d;h{function b(g){g=a.a.Db(g);123===g.charCodeAt(0)&&(g=g.slice(1,-1));g+="\n,";var k=[],m=g.match(f),p=[],q=0;if(1=q){k.push(x&&p.length?{key:x,value:p.join("")}: +{unknown:x||p.join("")});var x=q=0;p=[];continue}}else if(58===t){if(!q&&!x&&1===p.length){x=p.pop();continue}}else if(47===t&&1m(t.key||t.unknown,t.value));q.length&&m("_ko_property_writers","{"+q.join(",")+" }");return p.join(",")},Sc:(g,k)=>{for(var m=0;m{if(g&&a.O(g))!a.lc(g)||q&&g.D()=== +p||g(p);else if((g=k.get("_ko_property_writers"))&&g[m])g[m](p)}}})();(()=>{function b(d){return 8==d.nodeType&&f.test(d.nodeValue)}function c(d){return 8==d.nodeType&&h.test(d.nodeValue)}function e(d,g){for(var k=d,m=1,p=[];k=k.nextSibling;){if(c(k)&&(a.a.b.set(k,l,!0),m--,0===m))return p;p.push(k);b(k)&&m++}if(!g)throw Error("Cannot find closing comment tag to match: "+d.nodeValue);return null}var f=/^\s*ko(?:\s+([\s\S]+))?\s*$/,h=/^\s*\/ko\s*$/,l="__ko_matchedEndComment__";a.h={la:{},childNodes:d=> +b(d)?e(d):d.childNodes,Aa:d=>{if(b(d)){d=a.h.childNodes(d);for(var g=0,k=d.length;g{if(b(d)){a.h.Aa(d);d=d.nextSibling;for(var k=0,m=g.length;k{if(b(d)){var k=d.nextSibling;d=d.parentNode}else k=d.firstChild;d.insertBefore(g,k)},jc:(d,g,k)=>{k?(k=k.nextSibling,b(d)&&(d=d.parentNode),d.insertBefore(g,k)):a.h.prepend(d,g)},firstChild:d=>{if(!b(d)){if(d.firstChild&&c(d.firstChild))throw Error("Found invalid end comment, as the first child of "+ +d);return d.firstChild}return!d.nextSibling||c(d.nextSibling)?null:d.nextSibling},nextSibling:d=>{if(b(d)){var g=e(d,void 0);d=g?0(d=d.nodeValue.match(f))?d[1]:null}})();(function(){a.aa=function(){this.Cc={}};a.a.extend(a.aa.prototype,{nodeHasBindings:b=> +{switch(b.nodeType){case 1:return null!=b.getAttribute("data-bind")||a.l.getComponentNameForNode(b);case 8:return a.h.Nc(b);default:return!1}},getBindings:function(b,c){var e=this.getBindingsString(b,c);e=e?this.parseBindingsString(e,c,b):null;return a.l.Rb(e,b,c,!1)},getBindingAccessors:function(b,c){var e=this.getBindingsString(b,c);e=e?this.parseBindingsString(e,c,b,{valueAccessors:!0}):null;return a.l.Rb(e,b,c,!0)},getBindingsString:b=>{switch(b.nodeType){case 1:return b.getAttribute("data-bind"); +case 8:return a.h.dd(b)}return null},parseBindingsString:function(b,c,e,f){try{var h=this.Cc,l=b+(f&&f.valueAccessors||""),d;if(!(d=h[l])){var g="with($context){with($data||{}){return{"+a.H.Xc(b,f)+"}}}";var k=new Function("$context","$element",g);d=h[l]=k}return d(c,e)}catch(m){throw m.message="Unable to parse bindings.\nBindings value: "+b+"\nMessage: "+m.message,m;}}});a.aa.instance=new a.aa})();(()=>{function b(n){var r=(n=a.a.b.get(n,x))&&n.G;r&&(n.G=null,r.nc())}function c(n,r,v){this.node= +n;this.Xb=r;this.Na=[];this.C=!1;r.G||a.a.N.wa(n,b);v&&v.G&&(v.G.Na.push(n),this.gb=v)}function e(n){return a.a.Ea(a.o.I(n),(r,v)=>()=>n()[v])}function f(n,r,v){return"function"===typeof n?e(n.bind(null,r,v)):a.a.Ea(n,w=>()=>w)}function h(n,r){return e(this.getBindings.bind(this,n,r))}function l(n,r){var v=a.h.firstChild(r);if(v){var w,B=a.aa.instance,z=B.preprocessNode;if(z){for(;w=v;)v=a.h.nextSibling(w),z.call(B,w);v=a.h.firstChild(r)}for(;w=v;)v=a.h.nextSibling(w),d(n,w)}a.f.notify(r,a.f.C)}function d(n, r){var v=n;if(1===r.nodeType||a.aa.instance.nodeHasBindings(r))v=k(r,null,n).bindingContextForDescendants;v&&!y[a.a.da(r)]&&l(v,r)}function g(n){var r=[],v={},w=[];a.a.J(n,function C(z){if(!v[z]){var A=a.getBindingHandler(z);A&&(A.after&&(w.push(z),a.a.Z(A.after,H=>{if(n[H]){if(-1!==a.a.$(w,H))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+w.join(", "));C(H)}}),w.length--),r.push({key:z,hc:A}));v[z]=!0}});return r}function k(n,r,v){var w=a.a.b.rb(n,x, -{}),B=w.yc;if(!r){if(B)throw Error("You cannot apply bindings multiple times to the same element.");w.yc=!0}B||(w.context=v);w.xb||(w.xb={});if(r&&"function"!==typeof r)var z=r;else{var C=a.aa.instance,A=C.getBindingAccessors||h,H=a.i(()=>{if(z=r?r(v,n):A.call(C,n,v)){if(v[p])v[p]();if(v[u])v[u]()}return z},null,{j:n});z&&H.ha()||(H=null)}var N=v,K;if(z){var L=H?D=>()=>H()[D]():D=>z[D];function M(){return a.a.Ea(H?H():z,D=>D())}M.get=D=>z[D]&&L(D)();M.has=D=>D in z;a.f.C in z&&a.f.subscribe(n,a.f.C, -()=>{var D=z[a.f.C]();if(D){var S=a.h.childNodes(n);S.length&&D(S,a.bc(S[0]))}});a.f.ga in z&&(N=a.f.Cb(n,v),a.f.subscribe(n,a.f.ga,()=>{var D=z[a.f.ga]();D&&a.h.firstChild(n)&&D(n)}));w=g(z);a.a.Z(w,D=>{var S=D.hc.init,ca=D.hc.update,T=D.key;if(8===n.nodeType&&!a.h.la[T])throw Error("The binding '"+T+"' cannot be used with virtual elements");try{"function"==typeof S&&a.m.I(()=>{var X=S(n,L(T),M,N.$data,N);if(X&&X.controlsDescendantBindings){if(void 0!==K)throw Error("Multiple bindings ("+K+" and "+ +{}),B=w.zc;if(!r){if(B)throw Error("You cannot apply bindings multiple times to the same element.");w.zc=!0}B||(w.context=v);w.xb||(w.xb={});if(r&&"function"!==typeof r)var z=r;else{var C=a.aa.instance,A=C.getBindingAccessors||h,H=a.i(()=>{if(z=r?r(v,n):A.call(C,n,v)){if(v[p])v[p]();if(v[u])v[u]()}return z},null,{j:n});z&&H.ha()||(H=null)}var N=v,K;if(z){var L=H?D=>()=>H()[D]():D=>z[D];function M(){return a.a.Ea(H?H():z,D=>D())}M.get=D=>z[D]&&L(D)();M.has=D=>D in z;a.f.C in z&&a.f.subscribe(n,a.f.C, +()=>{var D=z[a.f.C]();if(D){var S=a.h.childNodes(n);S.length&&D(S,a.bc(S[0]))}});a.f.ga in z&&(N=a.f.Cb(n,v),a.f.subscribe(n,a.f.ga,()=>{var D=z[a.f.ga]();D&&a.h.firstChild(n)&&D(n)}));w=g(z);a.a.Z(w,D=>{var S=D.hc.init,ca=D.hc.update,T=D.key;if(8===n.nodeType&&!a.h.la[T])throw Error("The binding '"+T+"' cannot be used with virtual elements");try{"function"==typeof S&&a.o.I(()=>{var X=S(n,L(T),M,N.$data,N);if(X&&X.controlsDescendantBindings){if(void 0!==K)throw Error("Multiple bindings ("+K+" and "+ T+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");K=T}}),"function"==typeof ca&&a.i(()=>ca(n,L(T),M,N.$data,N),null,{j:n})}catch(X){throw X.message='Unable to process binding "'+T+": "+z[T]+'"\nMessage: '+X.message,X;}})}w=void 0===K;return{shouldBindDescendants:w,bindingContextForDescendants:w&&N}}function m(n,r){return n&&n instanceof a.U?n:new a.U(n,void 0,void 0,r)}var p=Symbol("_subscribable"),q=Symbol("_ancestorBindingInfo"), u=Symbol("_dataDependency");a.c={};var y={script:!0,textarea:!0,template:!0};a.getBindingHandler=n=>a.c[n];var t={};a.U=function(n,r,v,w,B){function z(){var M=N?H():H,D=a.a.g(M);r?(a.a.extend(C,r),q in r&&(C[q]=r[q])):(C.$parents=[],C.$root=D,C.ko=a);C[p]=L;A?D=C.$data:(C.$rawData=M,C.$data=D);v&&(C[v]=D);w&&w(C,r,D);if(r&&r[p]&&!a.ya.i().sb(r[p]))r[p]();K&&(C[u]=K);return C.$data}var C=this,A=n===t,H=A?void 0:n,N="function"==typeof H&&!a.O(H),K=B&&B.dataDependency;if(B&&B.exportDependencies)z(); else{var L=a.Yc(z);L.D();L.ha()?L.equalityComparer=null:C[p]=void 0}};a.U.prototype.createChildContext=function(n,r,v,w){!w&&r&&"object"==typeof r&&(w=r,r=w.as,v=w.extend);if(r&&w&&w.noChildContext){var B="function"==typeof n&&!a.O(n);return new a.U(t,this,null,z=>{v&&v(z);z[r]=B?n():n},w)}return new a.U(n,this,r,(z,C)=>{z.$parentContext=C;z.$parent=C.$data;z.$parents=(C.$parents||[]).slice(0);z.$parents.unshift(z.$parent);v&&v(z)},w)};a.U.prototype.extend=function(n,r){return new a.U(t,this,null, -v=>a.a.extend(v,"function"==typeof n?n(v):n),r)};var x=a.a.b.X();c.prototype.mc=function(){this.gb&&this.gb.G&&this.gb.G.Hc(this.node)};c.prototype.Hc=function(n){a.a.Ma(this.Na,n);!this.Na.length&&this.C&&this.ac()};c.prototype.ac=function(){this.C=!0;this.Xb.G&&!this.Na.length&&(this.Xb.G=null,a.a.N.Ab(this.node,b),a.f.notify(this.node,a.f.ga),this.mc())};a.f={C:"childrenComplete",ga:"descendantsComplete",subscribe:(n,r,v,w,B)=>{var z=a.a.b.rb(n,x,{});z.pa||(z.pa=new a.T);B&&B.notifyImmediately&& -z.xb[r]&&a.m.I(v,w,[n]);return z.pa.subscribe(v,w,r)},notify:(n,r)=>{var v=a.a.b.get(n,x);if(v&&(v.xb[r]=!0,v.pa&&v.pa.notifySubscribers(n,r),r==a.f.C))if(v.G)v.G.ac();else if(void 0===v.G&&v.pa&&v.pa.Ca(a.f.ga))throw Error("descendantsComplete event not supported for bindings on this node");},Cb:(n,r)=>{var v=a.a.b.rb(n,x,{});v.G||(v.G=new c(n,v,r[q]));return r[q]==v?r:r.extend(w=>{w[q]=v})}};a.bd=n=>(n=a.a.b.get(n,x))&&n.context;a.hb=(n,r,v)=>k(n,r,m(v));a.ed=(n,r,v)=>{v=m(v);return a.hb(n,f(r, -v,n),v)};a.Ub=(n,r)=>{1!==r.nodeType&&8!==r.nodeType||l(m(n),r)};a.Tb=function(n,r,v){if(2>arguments.length){if(r=V.body,!r)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?");}else if(!r||1!==r.nodeType&&8!==r.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");d(m(n,v),r)};a.bc=n=>(n=n&&[1,8].includes(n.nodeType)&&a.bd(n))?n.$data:void 0;a.s("bindingHandlers",a.c);a.s("applyBindings", -a.Tb);a.s("applyBindingAccessorsToNode",a.hb);a.s("dataFor",a.bc)})();(()=>{function b(d,g){return Object.prototype.hasOwnProperty.call(d,g)?d[g]:void 0}function c(d,g){var k=b(h,d);if(k)k.subscribe(g);else{k=h[d]=new a.T;k.subscribe(g);e(d,(p,q)=>{q=!(!q||!q.synchronous);l[d]={definition:p,Rc:q};delete h[d];m||q?k.notifySubscribers(p):a.Gb.pc(()=>k.notifySubscribers(p))});var m=!0}}function e(d,g){f("getConfig",[d],k=>{k?f("loadComponent",[d,k],m=>g(m,k)):g(null,null)})}function f(d,g,k,m){m||(m= -a.l.loaders.slice(0));var p=m.shift();if(p){var q=p[d];if(q){var u=!1;if(void 0!==q.apply(p,g.concat(function(y){u?k(null):null!==y?k(y):f(d,g,k,m)}))&&(u=!0,!p.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.");}else f(d,g,k,m)}else k(null)}var h={},l={};a.l={get:(d,g)=>{var k=b(l,d);k?k.Rc?a.m.I(()=>g(k.definition)):a.Gb.pc(()=>g(k.definition)):c(d,g)},Ec:d=>delete l[d],Mb:f};a.l.loaders=[];a.s("components", +v=>a.a.extend(v,"function"==typeof n?n(v):n),r)};var x=a.a.b.X();c.prototype.nc=function(){this.gb&&this.gb.G&&this.gb.G.Ic(this.node)};c.prototype.Ic=function(n){a.a.Ma(this.Na,n);!this.Na.length&&this.C&&this.ac()};c.prototype.ac=function(){this.C=!0;this.Xb.G&&!this.Na.length&&(this.Xb.G=null,a.a.N.Ab(this.node,b),a.f.notify(this.node,a.f.ga),this.nc())};a.f={C:"childrenComplete",ga:"descendantsComplete",subscribe:(n,r,v,w,B)=>{var z=a.a.b.rb(n,x,{});z.pa||(z.pa=new a.T);B&&B.notifyImmediately&& +z.xb[r]&&a.o.I(v,w,[n]);return z.pa.subscribe(v,w,r)},notify:(n,r)=>{var v=a.a.b.get(n,x);if(v&&(v.xb[r]=!0,v.pa&&v.pa.notifySubscribers(n,r),r==a.f.C))if(v.G)v.G.ac();else if(void 0===v.G&&v.pa&&v.pa.Ca(a.f.ga))throw Error("descendantsComplete event not supported for bindings on this node");},Cb:(n,r)=>{var v=a.a.b.rb(n,x,{});v.G||(v.G=new c(n,v,r[q]));return r[q]==v?r:r.extend(w=>{w[q]=v})}};a.bd=n=>(n=a.a.b.get(n,x))&&n.context;a.hb=(n,r,v)=>k(n,r,m(v));a.ed=(n,r,v)=>{v=m(v);return a.hb(n,f(r, +v,n),v)};a.Ub=(n,r)=>{1!==r.nodeType&&8!==r.nodeType||l(m(n),r)};a.Tb=function(n,r,v){if(2>arguments.length){if(r=V.body,!r)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?");}else if(!r||1!==r.nodeType&&8!==r.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");d(m(n,v),r)};a.bc=n=>(n=n&&[1,8].includes(n.nodeType)&&a.bd(n))?n.$data:void 0;a.m("bindingHandlers",a.c);a.m("applyBindings", +a.Tb);a.m("applyBindingAccessorsToNode",a.hb);a.m("dataFor",a.bc)})();(()=>{function b(d,g){return Object.prototype.hasOwnProperty.call(d,g)?d[g]:void 0}function c(d,g){var k=b(h,d);if(k)k.subscribe(g);else{k=h[d]=new a.T;k.subscribe(g);e(d,(p,q)=>{q=!(!q||!q.synchronous);l[d]={definition:p,Rc:q};delete h[d];m||q?k.notifySubscribers(p):a.Gb.qc(()=>k.notifySubscribers(p))});var m=!0}}function e(d,g){f("getConfig",[d],k=>{k?f("loadComponent",[d,k],m=>g(m,k)):g(null,null)})}function f(d,g,k,m){m||(m= +a.l.loaders.slice(0));var p=m.shift();if(p){var q=p[d];if(q){var u=!1;if(void 0!==q.apply(p,g.concat(function(y){u?k(null):null!==y?k(y):f(d,g,k,m)}))&&(u=!0,!p.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.");}else f(d,g,k,m)}else k(null)}var h={},l={};a.l={get:(d,g)=>{var k=b(l,d);k?k.Rc?a.o.I(()=>g(k.definition)):a.Gb.qc(()=>g(k.definition)):c(d,g)},Fc:d=>delete l[d],Mb:f};a.l.loaders=[];a.m("components", a.l)})();(()=>{function b(d,g,k,m){var p={},q=2;g=k.template;k=k.viewModel;g?a.l.Mb("loadTemplate",[d,g],u=>{p.template=u;0===--q&&m(p)}):0===--q&&m(p);k?a.l.Mb("loadViewModel",[d,k],u=>{p[l]=u;0===--q&&m(p)}):0===--q&&m(p)}function c(d,g,k){if("function"===typeof g)k(p=>new g(p));else if("function"===typeof g[l])k(g[l]);else if("instance"in g){var m=g.instance;k(()=>m)}else"viewModel"in g?c(d,g.viewModel,k):d("Unknown viewModel value: "+g)}function e(d){if("template"==a.a.da(d)&&d.content instanceof -DocumentFragment)return a.a.Oa(d.content.childNodes);throw"Template Source Element not a